Skip to content

Commit bd153fe

Browse files
committed
Move descriptor call target registration
1 parent 53f430d commit bd153fe

File tree

2 files changed

+18
-16
lines changed

2 files changed

+18
-16
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/PythonBuiltins.java

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,8 @@
3535
import java.util.Map.Entry;
3636

3737
import com.oracle.graal.python.builtins.objects.PNone;
38-
import com.oracle.graal.python.builtins.objects.function.BuiltinMethodDescriptor;
3938
import com.oracle.graal.python.builtins.objects.function.PBuiltinFunction;
4039
import com.oracle.graal.python.builtins.objects.type.PythonBuiltinClass;
41-
import com.oracle.graal.python.builtins.objects.type.SpecialMethodSlot;
4240
import com.oracle.graal.python.nodes.function.BuiltinFunctionRootNode;
4341
import com.oracle.graal.python.nodes.function.PythonBuiltinBaseNode;
4442
import com.oracle.graal.python.util.BiConsumer;
@@ -77,24 +75,12 @@ public void initialize(Python3Core core) {
7775
}
7876
RootCallTarget callTarget = core.getLanguage().createCachedCallTarget(l -> new BuiltinFunctionRootNode(l, builtin, factory, declaresExplicitSelf), factory.getNodeClass(),
7977
builtin.name());
80-
if (SpecialMethodSlot.findSpecialSlot(builtin.name()) != null) {
81-
for (PythonBuiltinClassType type : annotation.extendClasses()) {
82-
BuiltinMethodDescriptor descriptor = BuiltinMethodDescriptor.get(factory, type);
83-
if (descriptor != null) {
84-
core.getLanguage().registerBuiltinDescriptorCallTarget(descriptor, callTarget);
85-
}
86-
}
87-
}
8878
Object builtinDoc = builtin.doc().isEmpty() ? PNone.NONE : builtin.doc();
8979
if (constructsClass != PythonBuiltinClassType.nil) {
9080
assert !builtin.isGetter() && !builtin.isSetter() && !builtin.isClassmethod() && !builtin.isStaticmethod();
9181
// we explicitly do not make these "staticmethods" here, since CPython also doesn't
9282
// for builtin types
9383
PBuiltinFunction newFunc = core.factory().createBuiltinFunction(__NEW__, constructsClass, numDefaults(builtin), callTarget);
94-
BuiltinMethodDescriptor descriptor = BuiltinMethodDescriptor.get(newFunc);
95-
if (descriptor != null) {
96-
core.getLanguage().registerBuiltinDescriptorCallTarget(descriptor, callTarget);
97-
}
9884
PythonBuiltinClass builtinClass = core.lookupType(constructsClass);
9985
builtinClass.setAttributeUnsafe(__NEW__, newFunc);
10086
builtinClass.setAttribute(__DOC__, builtinDoc);

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/runtime/object/PythonObjectFactory.java

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@
8080
import com.oracle.graal.python.builtins.objects.exception.PBaseException;
8181
import com.oracle.graal.python.builtins.objects.floats.PFloat;
8282
import com.oracle.graal.python.builtins.objects.frame.PFrame;
83+
import com.oracle.graal.python.builtins.objects.function.BuiltinMethodDescriptor;
8384
import com.oracle.graal.python.builtins.objects.function.PBuiltinFunction;
8485
import com.oracle.graal.python.builtins.objects.function.PFunction;
8586
import com.oracle.graal.python.builtins.objects.function.PKeyword;
@@ -144,6 +145,7 @@
144145
import com.oracle.graal.python.builtins.objects.tuple.PTuple;
145146
import com.oracle.graal.python.builtins.objects.tuple.StructSequence.BuiltinTypeDescriptor;
146147
import com.oracle.graal.python.builtins.objects.type.PythonAbstractClass;
148+
import com.oracle.graal.python.builtins.objects.type.PythonBuiltinClass;
147149
import com.oracle.graal.python.builtins.objects.type.PythonClass;
148150
import com.oracle.graal.python.builtins.objects.type.SpecialMethodSlot;
149151
import com.oracle.graal.python.builtins.objects.type.TypeNodes;
@@ -524,11 +526,25 @@ public final PFunction createFunction(String name, String qualname, String enclo
524526
}
525527

526528
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;
528532
}
529533

530534
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+
}
532548
}
533549

534550
public final GetSetDescriptor createGetSetDescriptor(Object get, Object set, String name, Object type) {

0 commit comments

Comments
 (0)