Skip to content

Commit e1e30d9

Browse files
committed
Use inline caches to improve 'CreateArgumentsNode'.
1 parent d3a66ce commit e1e30d9

File tree

3 files changed

+411
-216
lines changed

3 files changed

+411
-216
lines changed

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -288,6 +288,10 @@ public static boolean isBuiltinFunction(Object obj) {
288288
return obj instanceof PBuiltinFunction;
289289
}
290290

291+
public static boolean isMethod(Object value) {
292+
return value instanceof PMethod || value instanceof PBuiltinMethod;
293+
}
294+
291295
public static boolean isBuiltinMethod(Object obj) {
292296
return obj instanceof PBuiltinMethod;
293297
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/argument/ApplyKeywordsNode.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@
6161
* @author tim
6262
*/
6363
abstract class ApplyKeywordsNode extends PNodeWithContext {
64-
public abstract Object[] execute(String calleeName, Arity calleeArity, Object[] arguments, PKeyword[] keywords);
64+
public abstract Object[] execute(Object callee, Arity calleeArity, Object[] arguments, PKeyword[] keywords);
6565

6666
public static ApplyKeywordsNode create() {
6767
return ApplyKeywordsNodeGen.create();
@@ -77,7 +77,7 @@ SearchNamedParameterNode createSearchNamedParameterNode() {
7777

7878
@Specialization(guards = {"kwLen == keywords.length", "calleeArity == cachedArity"})
7979
@ExplodeLoop
80-
Object[] applyCached(String calleeName, @SuppressWarnings("unused") Arity calleeArity, Object[] arguments, PKeyword[] keywords,
80+
Object[] applyCached(Object callee, @SuppressWarnings("unused") Arity calleeArity, Object[] arguments, PKeyword[] keywords,
8181
@Cached("keywords.length") int kwLen,
8282
@SuppressWarnings("unused") @Cached("calleeArity") Arity cachedArity,
8383
@Cached("cachedArity.takesVarKeywordArgs()") boolean takesVarKwds,
@@ -104,7 +104,7 @@ Object[] applyCached(String calleeName, @SuppressWarnings("unused") Arity callee
104104

105105
if (kwIdx != -1) {
106106
if (PArguments.getArgument(arguments, kwIdx) != null) {
107-
throw raise(PythonBuiltinClassType.TypeError, "%s() got multiple values for argument '%s'", calleeName, name);
107+
throw raise(PythonBuiltinClassType.TypeError, "%s() got multiple values for argument '%s'", CreateArgumentsNode.getName(callee), name);
108108
}
109109
PArguments.setArgument(arguments, kwIdx, kwArg.getValue());
110110
} else if (takesVarKwds) {
@@ -119,7 +119,7 @@ Object[] applyCached(String calleeName, @SuppressWarnings("unused") Arity callee
119119
}
120120

121121
@Specialization(replaces = "applyCached")
122-
Object[] applyUncached(String calleeName, Arity calleeArity, Object[] arguments, PKeyword[] keywords,
122+
Object[] applyUncached(Object callee, Arity calleeArity, Object[] arguments, PKeyword[] keywords,
123123
@Cached("createSearchNamedParameterNode()") SearchNamedParameterNode searchParamNode,
124124
@Cached("createSearchNamedParameterNode()") SearchNamedParameterNode searchKwNode) {
125125
boolean takesVarKwds = calleeArity.takesVarKeywordArgs();
@@ -144,7 +144,7 @@ Object[] applyUncached(String calleeName, Arity calleeArity, Object[] arguments,
144144

145145
if (kwIdx != -1) {
146146
if (PArguments.getArgument(arguments, kwIdx) != null) {
147-
throw raise(PythonBuiltinClassType.TypeError, "%s() got multiple values for argument '%s'", calleeName, name);
147+
throw raise(PythonBuiltinClassType.TypeError, "%s() got multiple values for argument '%s'", CreateArgumentsNode.getName(callee), name);
148148
}
149149
PArguments.setArgument(arguments, kwIdx, kwArg.getValue());
150150
} else if (takesVarKwds) {

0 commit comments

Comments
 (0)