Skip to content

Commit f3cedfc

Browse files
committed
set the type of builtins written in python to builtin_function_or_method
1 parent a81baa0 commit f3cedfc

File tree

4 files changed

+32
-32
lines changed

4 files changed

+32
-32
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/BuiltinFunctions.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1357,7 +1357,7 @@ public boolean visit(Node node) {
13571357
builtinModule = getContext().getCore().lookupBuiltinModule(moduleName);
13581358
assert builtinModule != null;
13591359
}
1360-
return factory().createMethod(builtinModule, builtinFunc);
1360+
return factory().createBuiltinMethod(builtinModule, builtinFunc);
13611361
}
13621362
}
13631363
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/method/BuiltinMethodBuiltins.java

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@
3838
import com.oracle.graal.python.nodes.function.builtins.PythonUnaryBuiltinNode;
3939
import com.oracle.graal.python.nodes.object.GetClassNode;
4040
import com.oracle.graal.python.nodes.truffle.PythonArithmeticTypes;
41-
import com.oracle.truffle.api.CompilerDirectives;
4241
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
42+
import com.oracle.truffle.api.dsl.Cached;
4343
import com.oracle.truffle.api.dsl.GenerateNodeFactory;
4444
import com.oracle.truffle.api.dsl.NodeFactory;
4545
import com.oracle.truffle.api.dsl.Specialization;
@@ -57,20 +57,32 @@ protected List<? extends NodeFactory<? extends PythonBuiltinBaseNode>> getNodeFa
5757
@TypeSystemReference(PythonArithmeticTypes.class)
5858
@GenerateNodeFactory
5959
public abstract static class ReprNode extends PythonUnaryBuiltinNode {
60-
@Child GetClassNode getClassNode;
60+
boolean isBuiltinFunction(PBuiltinMethod self) {
61+
return self.getSelf() instanceof PythonModule;
62+
}
63+
64+
boolean isBuiltinFunction(PMethod self) {
65+
return self.getSelf() instanceof PythonModule && self.getFunction().getEnclosingClassName() == null;
66+
}
67+
68+
@Specialization(guards = "isBuiltinFunction(self)")
69+
@TruffleBoundary
70+
Object reprBuiltinFunction(PMethod self) {
71+
// (tfel): this only happens for builtin modules ... I think
72+
return String.format("<built-in function %s>", self.getName());
73+
}
74+
75+
@Specialization(guards = "isBuiltinFunction(self)")
76+
@TruffleBoundary
77+
String reprBuiltinFunction(PBuiltinMethod self) {
78+
return String.format("<built-in function %s>", self.getName());
79+
}
6180

62-
@Specialization
81+
@Specialization(guards = "!isBuiltinFunction(self)")
6382
@TruffleBoundary
64-
Object reprModuleFunction(PBuiltinMethod self) {
65-
if (self.getSelf() instanceof PythonModule) {
66-
return String.format("<built-in function %s>", self.getName());
67-
} else {
68-
if (getClassNode == null) {
69-
CompilerDirectives.transferToInterpreterAndInvalidate();
70-
getClassNode = insert(GetClassNode.create());
71-
}
72-
return String.format("<built-in method %s of %s object at 0x%x>", self.getName(), getClassNode.execute(self.getSelf()).getName(), self.hashCode());
73-
}
83+
Object reprBuiltinMethod(PBuiltinMethod self,
84+
@Cached("create()") GetClassNode getClassNode) {
85+
return String.format("<built-in method %s of %s object at 0x%x>", self.getName(), getClassNode.execute(self.getSelf()).getName(), self.hashCode());
7486
}
7587
}
7688
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/method/MethodBuiltins.java

Lines changed: 2 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -35,21 +35,18 @@
3535
import com.oracle.graal.python.builtins.Builtin;
3636
import com.oracle.graal.python.builtins.CoreFunctions;
3737
import com.oracle.graal.python.builtins.PythonBuiltins;
38-
import com.oracle.graal.python.builtins.objects.module.PythonModule;
3938
import com.oracle.graal.python.nodes.call.special.LookupAndCallBinaryNode;
4039
import com.oracle.graal.python.nodes.function.PythonBuiltinBaseNode;
4140
import com.oracle.graal.python.nodes.function.PythonBuiltinNode;
4241
import com.oracle.graal.python.nodes.function.builtins.PythonUnaryBuiltinNode;
4342
import com.oracle.graal.python.nodes.object.GetClassNode;
4443
import com.oracle.graal.python.nodes.truffle.PythonArithmeticTypes;
45-
import com.oracle.truffle.api.CompilerDirectives;
4644
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
4745
import com.oracle.truffle.api.dsl.Cached;
4846
import com.oracle.truffle.api.dsl.GenerateNodeFactory;
4947
import com.oracle.truffle.api.dsl.NodeFactory;
5048
import com.oracle.truffle.api.dsl.Specialization;
5149
import com.oracle.truffle.api.dsl.TypeSystemReference;
52-
import com.oracle.truffle.api.profiles.BranchProfile;
5350

5451
@CoreFunctions(extendClasses = {PMethod.class})
5552
public class MethodBuiltins extends PythonBuiltins {
@@ -87,23 +84,10 @@ protected Object doIt(PMethod self,
8784
@TypeSystemReference(PythonArithmeticTypes.class)
8885
@GenerateNodeFactory
8986
public abstract static class ReprNode extends PythonUnaryBuiltinNode {
90-
@Child GetClassNode getClassNode;
91-
BranchProfile builtinProfile = BranchProfile.create();
92-
9387
@Specialization
9488
@TruffleBoundary
95-
Object reprModuleFunction(PMethod self) {
96-
if (self.getSelf() instanceof PythonModule) {
97-
if (self.getFunction().getEnclosingClassName() == null) {
98-
builtinProfile.enter();
99-
// (tfel): this only happens for builtin modules ... I think
100-
return String.format("<built-in function %s>", self.getName());
101-
}
102-
}
103-
if (getClassNode == null) {
104-
CompilerDirectives.transferToInterpreterAndInvalidate();
105-
getClassNode = insert(GetClassNode.create());
106-
}
89+
Object reprMethod(PMethod self,
90+
@Cached("create()") GetClassNode getClassNode) {
10791
return String.format("<built-in method %s of %s object at 0x%x>", self.getName(), getClassNode.execute(self.getSelf()).getName(), self.hashCode());
10892
}
10993
}

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -347,6 +347,10 @@ public final PMethod createMethod(Object self, PFunction function) {
347347
return createMethod(lookupClass(PythonBuiltinClassType.PMethod), self, function);
348348
}
349349

350+
public final PMethod createBuiltinMethod(Object self, PFunction function) {
351+
return createMethod(lookupClass(PythonBuiltinClassType.PBuiltinMethod), self, function);
352+
}
353+
350354
public final PBuiltinMethod createBuiltinMethod(PythonClass cls, Object self, PBuiltinFunction function) {
351355
return trace(new PBuiltinMethod(cls, self, function));
352356
}

0 commit comments

Comments
 (0)