Skip to content

Conversation

@garychia
Copy link
Contributor

Related to #3692
This implementation is based on the following code from CPython.
https://github.com/python/cpython/blob/206f05a46b426eb374f724f8e7cd42f2f9643bb8/Objects/typeobject.c#L7685-L7700
image

Copy link
Member

@youknowone youknowone left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CI Failure came from successful test.

test_subclass (test.test_bool.BoolTest) ... unexpected success

Because you fixed the bug, you can remove @unittest.expectedFailure decorator from the test.

Thank you!

@garychia
Copy link
Contributor Author

I found the following issue in test_ast.py.

image

But I'm sure if it is related to my code. It seems that typ in call_slot_new is set to object instead of Constant for some reason.

}
}
if let Some(ref basetype) = staticbase {
if !PyType::subclasscheck(basetype.to_owned(), typ.to_owned()) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PyType_IsSubtype in CPython is same to fast_issubclass in RustPython

@DimitrisJim
Copy link
Member

Hey @garychia do you still have time/want to work on this?

@garychia
Copy link
Contributor Author

Hi, @DimitrisJim! I was struggling to solve the problem that happens when running the test_ast test as I mentioned before. Based on my observation, RustPython tried to construct an N object by using object.__new__, which is not safe. But I have no idea why it behaved this way and whether it relates to my code.
This piece of code triggered the problem:

class N(ast.Num):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.z = 'spam'
class N2(ast.Num):
pass
n = N(42)

@youknowone youknowone added C-bug Something isn't working A-vm Area: virtual machine labels Mar 28, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-vm Area: virtual machine C-bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants