🌐 AI搜索 & 代理 主页
Skip to content

Conversation

@rmadsen-ks
Copy link
Contributor

@rmadsen-ks rmadsen-ks commented Oct 9, 2025

Update: Does not actually fix #2574, but a similar problem(#2629). I'll provide a fix for 2574 as well.
Update 2: Now this also fixes #2574
This fixed an issue with a StackOverflow exception being generated when a virtual method is being called, but a class in the middle of the inheritance tree does not override the method.

This happens because the CallVirtual method calls the method on the python object if the wrapper got generated, causing everything to be evaluated again from the top. Doing it this way, causes the the python method only to get invoked if there is an implementation on the class, which can then correctly call super().Method().

For the finalizer fix, we now skip generating the call to PyFinalize if the base class is already a python class, because if that is the case the finalize method has already been added.

Additionally it simplifies how the generated code for virtual methods look. Now, a virtual wrapper method is not automatically generated. Only if the method is actually being overwritten by the class it will prompt the generation of a virtual method wrapper.

Does this close any currently open issues?

This closes #2574, #2627, #2629

Any other comments?

...

Checklist

Check all those that are applicable and complete.

  • Make sure to include one or more tests for your change
  • If an enhancement PR, please create docs and at best an example
  • Ensure you have signed the .NET Foundation CLA
  • Add yourself to AUTHORS
  • Updated the CHANGELOG

@rmadsen-ks rmadsen-ks force-pushed the 2574-StackOverFlowExceptionOnSuperMethodCallFix branch from 3ddd76a to bf389cf Compare October 9, 2025 08:30
@filmor
Copy link
Member

filmor commented Oct 9, 2025

Thanks a lot for this. I will try my best to get the CI working again on the weekend and will "enqueue" this one for merging.

@rmadsen-ks
Copy link
Contributor Author

rmadsen-ks commented Oct 9, 2025

I have added the actual fix for #2574.

In this case, it did not find the correct method to call the base class variant of the virtual method called. Instead it decided to call the top function, causing a stack overflow exception.

This has been fixed by using the correct name for the base class function invoke method

I think this is ready for merge, but I will continue testing it.

…ning a method and some not.

Also fixed an issue causing the finalizer to be called twice.

Added unit tests to verify the fix.
@filmor filmor force-pushed the 2574-StackOverFlowExceptionOnSuperMethodCallFix branch from a3fbc84 to 98a740e Compare December 8, 2025 10:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

StackOverflowException on calling super().method()

2 participants