- Notifications
You must be signed in to change notification settings - Fork768
Basic operator overloads support#907
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
Uh oh!
There was an error while loading.Please reload this page.
Conversation
lostmsu left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
Completed initial pass with some comments.
Uh oh!
There was an error while loading.Please reload this page.
| { | ||
| if(tp==null) | ||
| { | ||
| yieldbreak; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
I think this should throw instead, and the caller should explicitly handlenull case.
| MethodInfomethod; | ||
| try | ||
| { | ||
| method=t.MakeGenericMethod(tp); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
You canyield return right here
| } | ||
| catch(ArgumentException) | ||
| { | ||
| method=null; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
You cancontinue right here
| Typeparam=pi[n].ParameterType; | ||
| if(!param.IsGenericParameter&&!IsNullableOf(sig,param)&& | ||
| !param.IsAssignableFrom(sig)) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
Can you explain what this method was supposed to be doing, and what your change enables it to do now? It is actually not clear what genericTp and sigTp represent from their names :(
| publicstaticvoidFixupSlots(IntPtrpyType,TypeclrType) | ||
| { | ||
| IntPtrtp_as_number=Marshal.ReadIntPtr(pyType,TypeOffset.tp_as_number); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
This does not seem to be used anywhere
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
😂opps, some methods are just used in my code, so it maybe not used here.
Uh oh!
There was an error while loading.Please reload this page.
| { | ||
| thrownewPythonException(); | ||
| } | ||
| OperatorMethod.FixupSlots(type,clrType); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
Should not the fixup happen before PyType_Ready?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
It could be.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
@amos402 FromPython doc:
Finalize a type object. This should be called on all type objects to finish their initialization. This function is responsible for adding inherited slots from a type’s base class. Return 0 on success, or return -1 and sets an exception on error.
Unfortunately, the description does not clarify if the behavior could change in the future :/ I'd try to moveFixupSlots up, and see if it works that way.
Uh oh!
There was an error while loading.Please reload this page.
| assertresult[0]=='one' | ||
| assertresult[1]=='two' | ||
| assertresult[2]=='three' | ||
| # Skip these temporally cause of the changes of array parameter calling |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
Is this change not ready?
.NET permits arrays to be passed in place ofparams object[] arguments. If it was allowed previously, but is not after your change, it removes a feature, which should not be done.
| returnOpMethodMap.ContainsKey(methodName); | ||
| } | ||
| publicstaticboolIsPyOperatorMethod(stringpyMethodName) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
This method seems to be unused.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
Looks like this was used later for delegates support?joonhwan@b154475
tminka commentedDec 11, 2020
Fixes#1312 |
christabella commentedJan 7, 2021
Could be closed in favour of the updated version at#1324 |
Uh oh!
There was an error while loading.Please reload this page.
What does this implement/fix? Explain your changes.
Support the operator for objects.
I found this code from my branch before, not only support the operator but also refactored the
MethodBinder.@lostmsu I realized we just did the same thing. But a little different was I intended to support the method likefoo(int x = 0, params object[] bar)can be call withfoo(1,1,1), you can see the change from the pytest. I think we need to discuss how to merge them.I develop it base on Python3, some test cases may fail on 2 now.
Does this close any currently open issues?
#906
Any other comments?
...
Checklist
Check all those that are applicable and complete.
AUTHORSCHANGELOG