Skip to content

Commit 41d2731

Browse files
committed
Rename NArayBuiltinInfo to NAryBuiltinDescriptor
1 parent 832a803 commit 41d2731

File tree

5 files changed

+47
-33
lines changed

5 files changed

+47
-33
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/function/BuiltinMethodDescriptor.java

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -99,18 +99,22 @@ public static BuiltinMethodDescriptor get(NodeFactory<? extends PythonBuiltinBas
9999
Class<? extends PythonBuiltinBaseNode> nodeClass = factory.getNodeClass();
100100
BuiltinMethodDescriptor result = null;
101101
if (PythonUnaryBuiltinNode.class.isAssignableFrom(nodeClass)) {
102-
result = new UnaryBuiltinInfo(factory, type);
102+
result = new UnaryBuiltinDescriptor(factory, type);
103103
} else if (PythonBinaryBuiltinNode.class.isAssignableFrom(nodeClass)) {
104-
result = new BinaryBuiltinInfo(factory, type);
104+
result = new BinaryBuiltinDescriptor(factory, type);
105105
} else if (PythonTernaryBuiltinNode.class.isAssignableFrom(nodeClass)) {
106-
result = new TernaryBuiltinInfo(factory, type);
106+
result = new TernaryBuiltinDescriptor(factory, type);
107107
}
108108
if (result != null) {
109109
return CACHE.computeIfAbsent(result, x -> x);
110110
}
111111
return null;
112112
}
113113

114+
public static boolean isInstance(Object obj) {
115+
return obj instanceof UnaryBuiltinDescriptor || obj instanceof BinaryBuiltinDescriptor || obj instanceof TernaryBuiltinDescriptor;
116+
}
117+
114118
private static boolean needsFrame(NodeFactory<? extends PythonBuiltinBaseNode> factory) {
115119
for (Builtin builtin : factory.getNodeClass().getAnnotationsByType(Builtin.class)) {
116120
if (builtin.needsFrame()) {
@@ -152,8 +156,8 @@ public int hashCode() {
152156
// Note: manually written subclass for each builtin works better with Truffle DSL than one
153157
// generic class that would parametrize the 'factory' field
154158

155-
public static final class UnaryBuiltinInfo extends BuiltinMethodDescriptor {
156-
public UnaryBuiltinInfo(NodeFactory<? extends PythonBuiltinBaseNode> factory, PythonBuiltinClassType type) {
159+
public static final class UnaryBuiltinDescriptor extends BuiltinMethodDescriptor {
160+
public UnaryBuiltinDescriptor(NodeFactory<? extends PythonBuiltinBaseNode> factory, PythonBuiltinClassType type) {
157161
super(factory, type);
158162
}
159163

@@ -162,8 +166,8 @@ public PythonUnaryBuiltinNode createNode() {
162166
}
163167
}
164168

165-
public static final class BinaryBuiltinInfo extends BuiltinMethodDescriptor {
166-
public BinaryBuiltinInfo(NodeFactory<? extends PythonBuiltinBaseNode> factory, PythonBuiltinClassType type) {
169+
public static final class BinaryBuiltinDescriptor extends BuiltinMethodDescriptor {
170+
public BinaryBuiltinDescriptor(NodeFactory<? extends PythonBuiltinBaseNode> factory, PythonBuiltinClassType type) {
167171
super(factory, type);
168172
}
169173

@@ -172,8 +176,8 @@ public PythonBinaryBuiltinNode createNode() {
172176
}
173177
}
174178

175-
public static final class TernaryBuiltinInfo extends BuiltinMethodDescriptor {
176-
public TernaryBuiltinInfo(NodeFactory<? extends PythonBuiltinBaseNode> factory, PythonBuiltinClassType type) {
179+
public static final class TernaryBuiltinDescriptor extends BuiltinMethodDescriptor {
180+
public TernaryBuiltinDescriptor(NodeFactory<? extends PythonBuiltinBaseNode> factory, PythonBuiltinClassType type) {
177181
super(factory, type);
178182
}
179183

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/PGuards.java

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,10 @@
5757
import com.oracle.graal.python.builtins.objects.ellipsis.PEllipsis;
5858
import com.oracle.graal.python.builtins.objects.exception.PBaseException;
5959
import com.oracle.graal.python.builtins.objects.floats.PFloat;
60-
import com.oracle.graal.python.builtins.objects.function.BuiltinMethodDescriptor.BinaryBuiltinInfo;
61-
import com.oracle.graal.python.builtins.objects.function.BuiltinMethodDescriptor.TernaryBuiltinInfo;
62-
import com.oracle.graal.python.builtins.objects.function.BuiltinMethodDescriptor.UnaryBuiltinInfo;
60+
import com.oracle.graal.python.builtins.objects.function.BuiltinMethodDescriptor;
61+
import com.oracle.graal.python.builtins.objects.function.BuiltinMethodDescriptor.BinaryBuiltinDescriptor;
62+
import com.oracle.graal.python.builtins.objects.function.BuiltinMethodDescriptor.TernaryBuiltinDescriptor;
63+
import com.oracle.graal.python.builtins.objects.function.BuiltinMethodDescriptor.UnaryBuiltinDescriptor;
6364
import com.oracle.graal.python.builtins.objects.function.PArguments;
6465
import com.oracle.graal.python.builtins.objects.function.PBuiltinFunction;
6566
import com.oracle.graal.python.builtins.objects.function.PFunction;
@@ -168,6 +169,15 @@ public static boolean isCallable(Object value) {
168169
return value instanceof PBuiltinFunction || value instanceof PFunction || value instanceof PBuiltinMethod || value instanceof PMethod;
169170
}
170171

172+
/**
173+
* Use instead of {@link #isCallable(Object)} for objects coming from
174+
* {@link com.oracle.graal.python.nodes.attributes.LookupCallableSlotInMRONode}. Note that such
175+
* objects can be then forwarded only to call nodes that support them.
176+
*/
177+
public static boolean isCallableOrDescriptor(Object value) {
178+
return isCallable(value) || BuiltinMethodDescriptor.isInstance(value);
179+
}
180+
171181
public static boolean isClass(Object obj, InteropLibrary lib) {
172182
try {
173183
return lib.isMetaObject(obj) && lib.hasLanguage(obj) && lib.getLanguage(obj) == PythonLanguage.class;
@@ -513,15 +523,15 @@ public static boolean isKindOfBuiltinClass(Object clazz) {
513523
return clazz instanceof PythonBuiltinClassType || clazz instanceof PythonBuiltinClass;
514524
}
515525

516-
public static boolean isUnaryBuiltinInfo(Object value) {
517-
return value instanceof UnaryBuiltinInfo;
526+
public static boolean isUnaryBuiltinDescriptor(Object value) {
527+
return value instanceof UnaryBuiltinDescriptor;
518528
}
519529

520-
public static boolean isBinaryBuiltinInfo(Object value) {
521-
return value instanceof BinaryBuiltinInfo;
530+
public static boolean isBinaryBuiltinDescriptor(Object value) {
531+
return value instanceof BinaryBuiltinDescriptor;
522532
}
523533

524-
public static boolean isTernaryBuiltinInfo(Object value) {
525-
return value instanceof TernaryBuiltinInfo;
534+
public static boolean isTernaryBuiltinDescriptor(Object value) {
535+
return value instanceof TernaryBuiltinDescriptor;
526536
}
527537
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/call/special/CallBinaryMethodNode.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242

4343
import com.oracle.graal.python.PythonLanguage;
4444
import com.oracle.graal.python.builtins.objects.PNone;
45-
import com.oracle.graal.python.builtins.objects.function.BuiltinMethodDescriptor.BinaryBuiltinInfo;
45+
import com.oracle.graal.python.builtins.objects.function.BuiltinMethodDescriptor.BinaryBuiltinDescriptor;
4646
import com.oracle.graal.python.builtins.objects.function.PArguments;
4747
import com.oracle.graal.python.builtins.objects.function.PBuiltinFunction;
4848
import com.oracle.graal.python.builtins.objects.function.PKeyword;
@@ -87,14 +87,14 @@ public final Object executeObject(Object callable, Object arg1, Object arg2) {
8787
}
8888

8989
@Specialization(guards = "cachedInfo == info", limit = "getCallSiteInlineCacheMaxDepth()")
90-
Object callSpecialMethodSlotInlined(VirtualFrame frame, @SuppressWarnings("unused") BinaryBuiltinInfo info, Object arg1, Object arg2,
91-
@SuppressWarnings("unused") @Cached("info") BinaryBuiltinInfo cachedInfo,
90+
Object callSpecialMethodSlotInlined(VirtualFrame frame, @SuppressWarnings("unused") BinaryBuiltinDescriptor info, Object arg1, Object arg2,
91+
@SuppressWarnings("unused") @Cached("info") BinaryBuiltinDescriptor cachedInfo,
9292
@Cached("cachedInfo.createNode()") PythonBinaryBuiltinNode node) {
9393
return node.call(frame, arg1, arg2);
9494
}
9595

9696
@Specialization(replaces = "callSpecialMethodSlotInlined")
97-
Object callSpecialMethodSlotCallTarget(VirtualFrame frame, BinaryBuiltinInfo info, Object arg1, Object arg2,
97+
Object callSpecialMethodSlotCallTarget(VirtualFrame frame, BinaryBuiltinDescriptor info, Object arg1, Object arg2,
9898
@CachedLanguage PythonLanguage language,
9999
@Cached GenericInvokeNode invokeNode) {
100100
RootCallTarget callTarget = language.getDescriptorCallTarget(info);
@@ -402,7 +402,7 @@ static Object callQuaternaryFunction(VirtualFrame frame, @SuppressWarnings("unus
402402
return builtinNode.call(frame, arg1, arg2, PNone.NO_VALUE, PNone.NO_VALUE);
403403
}
404404

405-
@Specialization(guards = "!isBinaryBuiltinInfo(func)", //
405+
@Specialization(guards = "!isBinaryBuiltinDescriptor(func)", //
406406
replaces = {"callBoolSingle", "callBool", "callIntSingle", "callInt", "callBoolIntSingle", "callBoolInt", "callLongSingle", "callLong", "callBoolLongSingle",
407407
"callBoolLong", "callDoubleSingle", "callDouble", "callBoolDoubleSingle", "callBoolDouble", "callObjectSingleContext", "callObject",
408408
"callMethodSingleContext", "callSelfMethodSingleContext", "callMethod", "callSelfMethod", "callTernaryFunction", "callQuaternaryFunction"})

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/call/special/CallTernaryMethodNode.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
package com.oracle.graal.python.nodes.call.special;
4242

4343
import com.oracle.graal.python.PythonLanguage;
44-
import com.oracle.graal.python.builtins.objects.function.BuiltinMethodDescriptor.TernaryBuiltinInfo;
44+
import com.oracle.graal.python.builtins.objects.function.BuiltinMethodDescriptor.TernaryBuiltinDescriptor;
4545
import com.oracle.graal.python.builtins.objects.function.PArguments;
4646
import com.oracle.graal.python.builtins.objects.function.PBuiltinFunction;
4747
import com.oracle.graal.python.builtins.objects.function.PKeyword;
@@ -76,14 +76,14 @@ public static CallTernaryMethodNode getUncached() {
7676
public abstract Object execute(Frame frame, Object callable, Object arg1, Object arg2, Object arg3);
7777

7878
@Specialization(guards = "cachedInfo == info", limit = "getCallSiteInlineCacheMaxDepth()")
79-
static Object callSpecialMethodSlotInlined(VirtualFrame frame, @SuppressWarnings("unused") TernaryBuiltinInfo info, Object arg1, Object arg2, Object arg3,
80-
@SuppressWarnings("unused") @Cached("info") TernaryBuiltinInfo cachedInfo,
79+
static Object callSpecialMethodSlotInlined(VirtualFrame frame, @SuppressWarnings("unused") TernaryBuiltinDescriptor info, Object arg1, Object arg2, Object arg3,
80+
@SuppressWarnings("unused") @Cached("info") TernaryBuiltinDescriptor cachedInfo,
8181
@Cached("cachedInfo.createNode()") PythonTernaryBuiltinNode node) {
8282
return node.call(frame, arg1, arg2, arg3);
8383
}
8484

8585
@Specialization(replaces = "callSpecialMethodSlotInlined")
86-
static Object callSpecialMethodSlotCallTarget(VirtualFrame frame, TernaryBuiltinInfo info, Object arg1, Object arg2, Object arg3,
86+
static Object callSpecialMethodSlotCallTarget(VirtualFrame frame, TernaryBuiltinDescriptor info, Object arg1, Object arg2, Object arg3,
8787
@CachedLanguage PythonLanguage language,
8888
@Cached GenericInvokeNode invokeNode) {
8989
RootCallTarget callTarget = language.getDescriptorCallTarget(info);
@@ -227,7 +227,7 @@ static Object callSelfMethod(VirtualFrame frame, @SuppressWarnings("unused") PBu
227227
return builtinNode.call(frame, func.getSelf(), arg1, arg2, arg3);
228228
}
229229

230-
@Specialization(guards = "!isTernaryBuiltinInfo(func)", replaces = {"doBuiltinFunctionOIOCached", "doBuiltinFunctionCached", "doBuiltinFunctionOIOCtCached", "doBuiltinFunctionCtCached",
230+
@Specialization(guards = "!isTernaryBuiltinDescriptor(func)", replaces = {"doBuiltinFunctionOIOCached", "doBuiltinFunctionCached", "doBuiltinFunctionOIOCtCached", "doBuiltinFunctionCtCached",
231231
"doBuiltinFunctionOIOCachedReverse", "doBuiltinFunctionCachedReverse", "doBuiltinFunctionOIOCtCachedReverse", "doBuiltinFunctionCtCachedReverse",
232232
"doBuiltinMethodOIOCached", "doBuiltinMethodCached", "doBuiltinMethodOIOCtCached", "doBuiltinMethodCtCached", "callSelfMethodSingleContext",
233233
"callSelfMethod"})

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/call/special/CallUnaryMethodNode.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242

4343
import com.oracle.graal.python.PythonLanguage;
4444
import com.oracle.graal.python.builtins.objects.PNone;
45-
import com.oracle.graal.python.builtins.objects.function.BuiltinMethodDescriptor.UnaryBuiltinInfo;
45+
import com.oracle.graal.python.builtins.objects.function.BuiltinMethodDescriptor.UnaryBuiltinDescriptor;
4646
import com.oracle.graal.python.builtins.objects.function.PArguments;
4747
import com.oracle.graal.python.builtins.objects.function.PBuiltinFunction;
4848
import com.oracle.graal.python.builtins.objects.function.PKeyword;
@@ -104,14 +104,14 @@ public final Object executeObject(Object callable, Object receiver) {
104104
}
105105

106106
@Specialization(guards = "cachedInfo == info", limit = "getCallSiteInlineCacheMaxDepth()")
107-
Object callSpecialMethodSlotInlined(VirtualFrame frame, @SuppressWarnings("unused") UnaryBuiltinInfo info, Object receiver,
108-
@SuppressWarnings("unused") @Cached("info") UnaryBuiltinInfo cachedInfo,
107+
Object callSpecialMethodSlotInlined(VirtualFrame frame, @SuppressWarnings("unused") UnaryBuiltinDescriptor info, Object receiver,
108+
@SuppressWarnings("unused") @Cached("info") UnaryBuiltinDescriptor cachedInfo,
109109
@Cached("cachedInfo.createNode()") PythonUnaryBuiltinNode node) {
110110
return node.call(frame, receiver);
111111
}
112112

113113
@Specialization(replaces = "callSpecialMethodSlotInlined")
114-
Object callSpecialMethodSlotCallTarget(VirtualFrame frame, UnaryBuiltinInfo info, Object receiver,
114+
Object callSpecialMethodSlotCallTarget(VirtualFrame frame, UnaryBuiltinDescriptor info, Object receiver,
115115
@CachedLanguage PythonLanguage language,
116116
@Cached GenericInvokeNode invokeNode) {
117117
RootCallTarget callTarget = language.getDescriptorCallTarget(info);
@@ -281,7 +281,7 @@ static Object callBinaryMethod(VirtualFrame frame, @SuppressWarnings("unused") P
281281
return builtinNode.call(frame, arg, PNone.NO_VALUE);
282282
}
283283

284-
@Specialization(guards = "!isUnaryBuiltinInfo(func)", replaces = {"callIntSingle", "callInt", "callLongSingle", "callLong", "callDoubleSingle", "callDouble", "callBoolSingle", "callBool",
284+
@Specialization(guards = "!isUnaryBuiltinDescriptor(func)", replaces = {"callIntSingle", "callInt", "callLongSingle", "callLong", "callDoubleSingle", "callDouble", "callBoolSingle", "callBool",
285285
"callObjectSingle", "callObject",
286286
"callMethodSingleContext", "callSelfMethodSingleContext", "callMethod", "callSelfMethod", "callBinaryMethodSingleContext", "callBinaryMethod"})
287287
@Megamorphic

0 commit comments

Comments
 (0)