|
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