|
80 | 80 | import com.oracle.graal.python.builtins.objects.exception.PBaseException; |
81 | 81 | import com.oracle.graal.python.builtins.objects.floats.PFloat; |
82 | 82 | import com.oracle.graal.python.builtins.objects.frame.PFrame; |
| 83 | +import com.oracle.graal.python.builtins.objects.function.BuiltinMethodDescriptor; |
83 | 84 | import com.oracle.graal.python.builtins.objects.function.PBuiltinFunction; |
84 | 85 | import com.oracle.graal.python.builtins.objects.function.PFunction; |
85 | 86 | import com.oracle.graal.python.builtins.objects.function.PKeyword; |
|
144 | 145 | import com.oracle.graal.python.builtins.objects.tuple.PTuple; |
145 | 146 | import com.oracle.graal.python.builtins.objects.tuple.StructSequence.BuiltinTypeDescriptor; |
146 | 147 | import com.oracle.graal.python.builtins.objects.type.PythonAbstractClass; |
| 148 | +import com.oracle.graal.python.builtins.objects.type.PythonBuiltinClass; |
147 | 149 | import com.oracle.graal.python.builtins.objects.type.PythonClass; |
148 | 150 | import com.oracle.graal.python.builtins.objects.type.SpecialMethodSlot; |
149 | 151 | import com.oracle.graal.python.builtins.objects.type.TypeNodes; |
@@ -524,11 +526,25 @@ public final PFunction createFunction(String name, String qualname, String enclo |
524 | 526 | } |
525 | 527 |
|
526 | 528 | public final PBuiltinFunction createBuiltinFunction(String name, Object type, int numDefaults, RootCallTarget callTarget) { |
527 | | - return trace(new PBuiltinFunction(getLanguage(), name, type, numDefaults, callTarget)); |
| 529 | + PBuiltinFunction function = trace(new PBuiltinFunction(getLanguage(), name, type, numDefaults, callTarget)); |
| 530 | + registerBuiltinCallTarget(function, name, type, callTarget); |
| 531 | + return function; |
528 | 532 | } |
529 | 533 |
|
530 | 534 | public final PBuiltinFunction createBuiltinFunction(String name, Object type, Object[] defaults, PKeyword[] kw, RootCallTarget callTarget) { |
531 | | - return trace(new PBuiltinFunction(getLanguage(), name, type, defaults, kw, callTarget)); |
| 535 | + PBuiltinFunction function = trace(new PBuiltinFunction(getLanguage(), name, type, defaults, kw, callTarget)); |
| 536 | + registerBuiltinCallTarget(function, name, type, callTarget); |
| 537 | + return function; |
| 538 | + } |
| 539 | + |
| 540 | + @TruffleBoundary |
| 541 | + private void registerBuiltinCallTarget(PBuiltinFunction function, String name, Object type, RootCallTarget callTarget) { |
| 542 | + if ((type instanceof PythonBuiltinClassType || type instanceof PythonBuiltinClass) && SpecialMethodSlot.findSpecialSlot(name) != null) { |
| 543 | + BuiltinMethodDescriptor descriptor = BuiltinMethodDescriptor.get(function); |
| 544 | + if (descriptor != null) { |
| 545 | + getLanguage().registerBuiltinDescriptorCallTarget(descriptor, callTarget); |
| 546 | + } |
| 547 | + } |
532 | 548 | } |
533 | 549 |
|
534 | 550 | public final GetSetDescriptor createGetSetDescriptor(Object get, Object set, String name, Object type) { |
|
0 commit comments