Skip to content

Commit 518e531

Browse files
committed
Do not skip self in PyCFunctionWrapper
1 parent f3a83a5 commit 518e531

File tree

1 file changed

+9
-23
lines changed

1 file changed

+9
-23
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/capi/PyCFunctionWrapper.java

Lines changed: 9 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -50,14 +50,15 @@
5050
import com.oracle.graal.python.builtins.objects.cext.capi.transitions.CApiTransitions.PythonToNativeNewRefNode;
5151
import com.oracle.graal.python.builtins.objects.cext.common.CExtContext;
5252
import com.oracle.graal.python.builtins.objects.function.BuiltinMethodDescriptor;
53+
import com.oracle.graal.python.builtins.objects.function.BuiltinMethodDescriptor.BinaryBuiltinDescriptor;
54+
import com.oracle.graal.python.builtins.objects.function.BuiltinMethodDescriptor.UnaryBuiltinDescriptor;
5355
import com.oracle.graal.python.builtins.objects.function.PArguments;
5456
import com.oracle.graal.python.builtins.objects.function.PBuiltinFunction;
5557
import com.oracle.graal.python.builtins.objects.function.PKeyword;
5658
import com.oracle.graal.python.builtins.objects.function.Signature;
5759
import com.oracle.graal.python.nodes.argument.CreateArgumentsNode.CreateAndCheckArgumentsNode;
5860
import com.oracle.graal.python.nodes.argument.keywords.ExpandKeywordStarargsNode;
5961
import com.oracle.graal.python.nodes.argument.positional.ExecutePositionalStarargsNode;
60-
import com.oracle.graal.python.nodes.call.CallNode;
6162
import com.oracle.graal.python.nodes.call.CallTargetInvokeNode;
6263
import com.oracle.graal.python.nodes.call.GenericInvokeNode;
6364
import com.oracle.graal.python.nodes.call.special.CallBinaryMethodNode;
@@ -107,7 +108,6 @@ public abstract class PyCFunctionWrapper implements TruffleObject {
107108
protected final TruffleString callTargetName;
108109
protected final BuiltinMethodDescriptor builtinMethodDescriptor;
109110
protected final CApiTiming timing;
110-
private final boolean skipSelf;
111111
private long pointer;
112112

113113
protected PyCFunctionWrapper(RootCallTarget callTarget, Signature signature) {
@@ -119,7 +119,6 @@ protected PyCFunctionWrapper(RootCallTarget callTarget, Signature signature) {
119119
this.callTargetName = PythonUtils.toTruffleStringUncached(ctName);
120120
this.builtinMethodDescriptor = null;
121121
this.timing = CApiTiming.create(false, ctName);
122-
this.skipSelf = false;
123122
}
124123

125124
protected PyCFunctionWrapper(BuiltinMethodDescriptor builtinMethodDescriptor) {
@@ -129,7 +128,6 @@ protected PyCFunctionWrapper(BuiltinMethodDescriptor builtinMethodDescriptor) {
129128
this.callTargetName = null;
130129
this.builtinMethodDescriptor = builtinMethodDescriptor;
131130
this.timing = CApiTiming.create(false, builtinMethodDescriptor.getName());
132-
this.skipSelf = builtinMethodDescriptor.getEnclosingType() == null && !builtinMethodDescriptor.getBuiltinAnnotation().declaresExplicitSelf();
133131
}
134132

135133
public final RootCallTarget getCallTarget() {
@@ -144,10 +142,6 @@ public final Object getDelegate() {
144142
return callTarget;
145143
}
146144

147-
protected final boolean skipFirstArg() {
148-
return skipSelf;
149-
}
150-
151145
abstract String getSignature();
152146

153147
@ExportMessage
@@ -212,12 +206,13 @@ public static PyCFunctionWrapper createFromBuiltinFunction(CApiContext cApiConte
212206
* 'builtin_function_or_method' or 'method_descriptor' in which case we need to have the
213207
* call target available.
214208
*/
215-
if (CExtContext.isMethNoArgs(flags) || CExtContext.isMethO(flags)) {
209+
if (CExtContext.isMethNoArgs(flags) && builtinMethodDescriptor instanceof UnaryBuiltinDescriptor ||
210+
CExtContext.isMethO(flags) && builtinMethodDescriptor instanceof BinaryBuiltinDescriptor) {
216211
cApiContext.getContext().getLanguage().registerBuiltinDescriptorCallTarget(builtinMethodDescriptor, builtinFunction.getCallTarget());
217212
}
218-
if (CExtContext.isMethNoArgs(flags)) {
213+
if (CExtContext.isMethNoArgs(flags) && builtinMethodDescriptor instanceof UnaryBuiltinDescriptor) {
219214
return cApiContext.getOrCreatePyCFunctionWrapper(builtinMethodDescriptor, PyCFunctionUnaryWrapper::new);
220-
} else if (CExtContext.isMethO(flags)) {
215+
} else if (CExtContext.isMethO(flags) && builtinMethodDescriptor instanceof BinaryBuiltinDescriptor) {
221216
return cApiContext.getOrCreatePyCFunctionWrapper(builtinMethodDescriptor, PyCFunctionBinaryWrapper::new);
222217
}
223218
}
@@ -282,7 +277,6 @@ private PyCFunctionUnaryWrapper(BuiltinMethodDescriptor builtinMethodDescriptor)
282277
Object execute(Object[] arguments,
283278
@Bind("$node") Node inliningTarget,
284279
@Cached PythonToNativeNewRefNode toNativeNode,
285-
@Cached CallNode callNode,
286280
@Cached CallUnaryMethodNode callUnaryNode,
287281
@Cached CreateAndCheckArgumentsNode createArgsNode,
288282
@Cached CallTargetDispatchNode invokeNode,
@@ -305,11 +299,7 @@ Object execute(Object[] arguments,
305299
Object jArg0 = toJavaNode.execute(arguments[0]);
306300
if (builtinMethodDescriptor != null) {
307301
assert callTarget == null;
308-
if (skipFirstArg()) {
309-
result = callNode.execute(builtinMethodDescriptor);
310-
} else {
311-
result = callUnaryNode.executeObject(null, builtinMethodDescriptor, jArg0);
312-
}
302+
result = callUnaryNode.executeObject(null, builtinMethodDescriptor, jArg0);
313303
} else {
314304
assert callTarget != null;
315305
assert callTargetName != null;
@@ -356,7 +346,6 @@ private PyCFunctionBinaryWrapper(BuiltinMethodDescriptor builtinMethodDescriptor
356346
Object execute(Object[] arguments,
357347
@Bind("$node") Node inliningTarget,
358348
@Cached PythonToNativeNewRefNode toNativeNode,
359-
@Cached CallUnaryMethodNode callUnaryMethodNode,
360349
@Cached CallBinaryMethodNode callBinaryMethodNode,
361350
@Cached CallTargetDispatchNode invokeNode,
362351
@Cached CreateAndCheckArgumentsNode createArgsNode,
@@ -376,11 +365,8 @@ Object execute(Object[] arguments,
376365
Object jArg1 = toJavaNode.execute(arguments[1]);
377366
if (builtinMethodDescriptor != null) {
378367
assert callTarget == null;
379-
if (skipFirstArg()) {
380-
result = callUnaryMethodNode.executeObject(builtinMethodDescriptor, jArg1);
381-
} else {
382-
result = callBinaryMethodNode.executeObject(builtinMethodDescriptor, jArg0, jArg1);
383-
}
368+
assert builtinMethodDescriptor instanceof BinaryBuiltinDescriptor;
369+
result = callBinaryMethodNode.executeObject(builtinMethodDescriptor, jArg0, jArg1);
384370
} else {
385371
assert callTarget != null;
386372
assert callTargetName != null;

0 commit comments

Comments
 (0)