Skip to content

Commit 4ccee69

Browse files
committed
fix tck tests for executable objects
1 parent 0a37e36 commit 4ccee69

File tree

1 file changed

+28
-19
lines changed

1 file changed

+28
-19
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/runtime/interop/PythonMessageResolution.java

Lines changed: 28 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -40,22 +40,26 @@
4040
*/
4141
package com.oracle.graal.python.runtime.interop;
4242

43+
import static com.oracle.graal.python.nodes.SpecialMethodNames.__CALL__;
4344
import static com.oracle.graal.python.nodes.SpecialMethodNames.__DELITEM__;
4445
import static com.oracle.graal.python.nodes.SpecialMethodNames.__GETATTRIBUTE__;
4546
import static com.oracle.graal.python.nodes.SpecialMethodNames.__GETITEM__;
4647
import static com.oracle.graal.python.nodes.SpecialMethodNames.__SETITEM__;
4748

4849
import java.util.Arrays;
4950

50-
import com.oracle.graal.python.PythonLanguage;
5151
import com.oracle.graal.python.builtins.modules.BuiltinFunctions;
5252
import com.oracle.graal.python.builtins.modules.BuiltinFunctionsFactory;
5353
import com.oracle.graal.python.builtins.objects.PNone;
5454
import com.oracle.graal.python.builtins.objects.PythonAbstractObject;
5555
import com.oracle.graal.python.builtins.objects.cext.PythonNativeObject;
5656
import com.oracle.graal.python.builtins.objects.common.PHashingCollection;
57+
import com.oracle.graal.python.builtins.objects.function.PBuiltinFunction;
58+
import com.oracle.graal.python.builtins.objects.function.PFunction;
5759
import com.oracle.graal.python.builtins.objects.function.PKeyword;
5860
import com.oracle.graal.python.builtins.objects.list.PList;
61+
import com.oracle.graal.python.builtins.objects.method.PBuiltinMethod;
62+
import com.oracle.graal.python.builtins.objects.method.PMethod;
5963
import com.oracle.graal.python.builtins.objects.object.PythonBuiltinObject;
6064
import com.oracle.graal.python.builtins.objects.object.PythonObject;
6165
import com.oracle.graal.python.builtins.objects.str.PString;
@@ -79,16 +83,11 @@
7983
import com.oracle.graal.python.nodes.subscript.DeleteItemNode;
8084
import com.oracle.graal.python.nodes.subscript.GetItemNode;
8185
import com.oracle.graal.python.nodes.subscript.SetItemNode;
82-
import com.oracle.graal.python.runtime.PythonContext;
83-
import com.oracle.graal.python.runtime.PythonCore;
8486
import com.oracle.graal.python.runtime.exception.PException;
85-
import com.oracle.graal.python.runtime.exception.PythonErrorType;
8687
import com.oracle.graal.python.runtime.interop.PythonMessageResolutionFactory.ArgumentsFromForeignNodeGen;
8788
import com.oracle.graal.python.runtime.object.PythonObjectFactory;
8889
import com.oracle.graal.python.runtime.sequence.PSequence;
8990
import com.oracle.truffle.api.CompilerDirectives;
90-
import com.oracle.truffle.api.CompilerDirectives.CompilationFinal;
91-
import com.oracle.truffle.api.TruffleLanguage.ContextReference;
9291
import com.oracle.truffle.api.dsl.Cached;
9392
import com.oracle.truffle.api.dsl.Specialization;
9493
import com.oracle.truffle.api.interop.CanResolve;
@@ -272,26 +271,36 @@ Object[] cached(Object[] arguments) {
272271
public static final class ExecuteNode extends Node {
273272
@Child private PTypeToForeignNode toForeign = PTypeToForeignNodeGen.create();
274273
@Child private CallNode callNode = CallNode.create();
274+
@Child private LookupInheritedAttributeNode callAttrGetterNode = LookupInheritedAttributeNode.create(__CALL__);
275275
@Child private ArgumentsFromForeignNode convertArgsNode = ArgumentsFromForeignNodeGen.create();
276-
final ConditionProfile errorProfile = ConditionProfile.createBinaryProfile();
277-
@CompilationFinal private ContextReference<PythonContext> contextRef;
276+
277+
public Object execute(PFunction receiver, Object[] arguments) {
278+
return doCall(receiver, arguments);
279+
}
280+
281+
public Object execute(PBuiltinFunction receiver, Object[] arguments) {
282+
return doCall(receiver, arguments);
283+
}
284+
285+
public Object execute(PMethod receiver, Object[] arguments) {
286+
return doCall(receiver, arguments);
287+
}
288+
289+
public Object execute(PBuiltinMethod receiver, Object[] arguments) {
290+
return doCall(receiver, arguments);
291+
}
278292

279293
public Object execute(Object receiver, Object[] arguments) {
280-
Object[] convertedArgs = convertArgsNode.execute(arguments);
281-
try {
282-
return toForeign.executeConvert(callNode.execute(null, receiver, convertedArgs, new PKeyword[0]));
283-
} catch (PException e) {
284-
e.expect(PythonErrorType.TypeError, getCore(), errorProfile);
294+
Object isCallable = callAttrGetterNode.execute(receiver);
295+
if (isCallable == PNone.NO_VALUE) {
285296
throw UnsupportedMessageException.raise(Message.EXECUTE);
286297
}
298+
return doCall(receiver, arguments);
287299
}
288300

289-
private PythonCore getCore() {
290-
if (contextRef == null) {
291-
CompilerDirectives.transferToInterpreterAndInvalidate();
292-
contextRef = PythonLanguage.getContextRef();
293-
}
294-
return contextRef.get().getCore();
301+
private Object doCall(Object receiver, Object[] arguments) {
302+
Object[] convertedArgs = convertArgsNode.execute(arguments);
303+
return toForeign.executeConvert(callNode.execute(null, receiver, convertedArgs, new PKeyword[0]));
295304
}
296305
}
297306

0 commit comments

Comments
 (0)