6565public abstract class CallTargetInvokeNode extends DirectInvokeNode {
6666 @ Child private DirectCallNode callNode ;
6767 @ Child private CallContext callContext ;
68- // Needed only for generator functions, will be null for builtins and other callables that
69- // cannot be generator functions
70- private final PFunction callee ;
7168 protected final boolean isBuiltin ;
7269
73- protected CallTargetInvokeNode (CallTarget callTarget , PFunction callee , boolean isBuiltin , boolean isGenerator ) {
70+ protected CallTargetInvokeNode (CallTarget callTarget , boolean isBuiltin , boolean isGenerator ) {
7471 this .callNode = Truffle .getRuntime ().createDirectCallNode (callTarget );
7572 if (isBuiltin ) {
7673 callNode .cloneCallTarget ();
7774 }
7875 if (isGenerator && shouldInlineGenerators ()) {
7976 this .callNode .forceInlining ();
8077 }
81- this .callee = callee ;
8278 this .callContext = CallContext .create ();
8379 this .isBuiltin = isBuiltin ;
8480 }
@@ -87,28 +83,28 @@ protected CallTargetInvokeNode(CallTarget callTarget, PFunction callee, boolean
8783 public static CallTargetInvokeNode create (PFunction callee ) {
8884 RootCallTarget callTarget = getCallTarget (callee );
8985 boolean builtin = isBuiltin (callee );
90- return CallTargetInvokeNodeGen .create (callTarget , callee , builtin , callee .isGeneratorFunction ());
86+ return CallTargetInvokeNodeGen .create (callTarget , builtin , callee .isGeneratorFunction ());
9187 }
9288
9389 @ TruffleBoundary
9490 public static CallTargetInvokeNode create (PBuiltinFunction callee ) {
9591 RootCallTarget callTarget = getCallTarget (callee );
9692 boolean builtin = isBuiltin (callee );
97- return CallTargetInvokeNodeGen .create (callTarget , null , builtin , false );
93+ return CallTargetInvokeNodeGen .create (callTarget , builtin , false );
9894 }
9995
100- public static CallTargetInvokeNode create (CallTarget callTarget , PFunction callee , boolean isBuiltin , boolean isGenerator ) {
101- return CallTargetInvokeNodeGen .create (callTarget , callee , isBuiltin , isGenerator );
96+ public static CallTargetInvokeNode create (CallTarget callTarget , boolean isBuiltin , boolean isGenerator ) {
97+ return CallTargetInvokeNodeGen .create (callTarget , isBuiltin , isGenerator );
10298 }
10399
104- public final Object execute ( VirtualFrame frame , Object [] arguments ) {
105- return execute ( frame , null , null , arguments );
106- }
107-
108- public abstract Object execute (VirtualFrame frame , PythonObject globals , PCell [] closure , Object [] arguments );
100+ /**
101+ * @param callee A PFunction if the callee is one, otherwise null. Used for generator functions
102+ * only.
103+ */
104+ public abstract Object execute (VirtualFrame frame , PFunction callee , PythonObject globals , PCell [] closure , Object [] arguments );
109105
110106 @ Specialization (guards = {"globals == null" , "closure == null" })
111- protected Object doNoClosure (VirtualFrame frame , @ SuppressWarnings ("unused" ) PythonObject globals , @ SuppressWarnings ("unused" ) PCell [] closure , Object [] arguments ,
107+ protected Object doNoClosure (VirtualFrame frame , PFunction callee , @ SuppressWarnings ("unused" ) PythonObject globals , @ SuppressWarnings ("unused" ) PCell [] closure , Object [] arguments ,
112108 @ Cached ("createBinaryProfile()" ) ConditionProfile classBodyProfile ,
113109 @ Cached ("createBinaryProfile()" ) ConditionProfile generatorFunctionProfile ,
114110 @ CachedContext (PythonLanguage .class ) PythonContext context ) {
@@ -134,13 +130,13 @@ protected Object doNoClosure(VirtualFrame frame, @SuppressWarnings("unused") Pyt
134130 }
135131
136132 @ Specialization (replaces = "doNoClosure" )
137- protected Object doGeneric (VirtualFrame frame , PythonObject globals , PCell [] closure , Object [] arguments ,
133+ protected Object doGeneric (VirtualFrame frame , PFunction callee , PythonObject globals , PCell [] closure , Object [] arguments ,
138134 @ Cached ("createBinaryProfile()" ) ConditionProfile classBodyProfile ,
139135 @ Cached ("createBinaryProfile()" ) ConditionProfile generatorFunctionProfile ,
140136 @ CachedContext (PythonLanguage .class ) PythonContext context ) {
141137 PArguments .setGlobals (arguments , globals );
142138 PArguments .setClosure (arguments , closure );
143- return doNoClosure (frame , null , null , arguments , classBodyProfile , generatorFunctionProfile , context );
139+ return doNoClosure (frame , callee , null , null , arguments , classBodyProfile , generatorFunctionProfile , context );
144140 }
145141
146142 public final CallTarget getCallTarget () {
0 commit comments