|
28 | 28 | import static com.oracle.graal.python.nodes.SpecialAttributeNames.__DOC__;
|
29 | 29 | import static com.oracle.graal.python.nodes.SpecialMethodNames.__NEW__;
|
30 | 30 |
|
31 |
| -import java.util.Arrays; |
32 | 31 | import java.util.Collections;
|
33 | 32 | import java.util.HashMap;
|
34 | 33 | import java.util.List;
|
35 | 34 | import java.util.Map;
|
36 | 35 | import java.util.Map.Entry;
|
37 | 36 | import java.util.function.BiConsumer;
|
38 |
| -import java.util.logging.Level; |
39 | 37 |
|
40 |
| -import com.oracle.graal.python.PythonLanguage; |
41 | 38 | import com.oracle.graal.python.builtins.objects.PNone;
|
42 |
| -import com.oracle.graal.python.builtins.objects.function.Arity; |
43 | 39 | import com.oracle.graal.python.builtins.objects.function.PBuiltinFunction;
|
44 | 40 | import com.oracle.graal.python.builtins.objects.type.PythonBuiltinClass;
|
45 | 41 | import com.oracle.graal.python.nodes.function.BuiltinFunctionRootNode;
|
@@ -81,14 +77,14 @@ public void initialize(PythonCore core) {
|
81 | 77 | Object builtinDoc = builtin.doc().isEmpty() ? PNone.NONE : builtin.doc();
|
82 | 78 | if (builtin.constructsClass().length > 0) {
|
83 | 79 | assert !builtin.isGetter() && !builtin.isSetter() && !builtin.isClassmethod() && !builtin.isStaticmethod();
|
84 |
| - PBuiltinFunction newFunc = core.factory().createBuiltinFunction(__NEW__, null, createArity(factory, builtin, declaresExplicitSelf), numDefaults(builtin), callTarget); |
| 80 | + PBuiltinFunction newFunc = core.factory().createBuiltinFunction(__NEW__, null, numDefaults(builtin), callTarget); |
85 | 81 | for (PythonBuiltinClassType type : builtin.constructsClass()) {
|
86 | 82 | PythonBuiltinClass builtinClass = core.lookupType(type);
|
87 | 83 | builtinClass.setAttributeUnsafe(__NEW__, newFunc);
|
88 | 84 | builtinClass.setAttribute(__DOC__, builtinDoc);
|
89 | 85 | }
|
90 | 86 | } else {
|
91 |
| - PBuiltinFunction function = core.factory().createBuiltinFunction(builtin.name(), null, createArity(factory, builtin, declaresExplicitSelf), numDefaults(builtin), callTarget); |
| 87 | + PBuiltinFunction function = core.factory().createBuiltinFunction(builtin.name(), null, numDefaults(builtin), callTarget); |
92 | 88 | function.setAttribute(__DOC__, builtinDoc);
|
93 | 89 | BoundBuiltinCallable<?> callable = function;
|
94 | 90 | if (builtin.isGetter() || builtin.isSetter()) {
|
@@ -134,53 +130,6 @@ private static int numDefaults(Builtin builtin) {
|
134 | 130 | return maxNumPosArgs - builtin.minNumOfPositionalArgs();
|
135 | 131 | }
|
136 | 132 |
|
137 |
| - /** |
138 |
| - * Should return an Arity compatible with {@link BuiltinFunctionRootNode}.createArgumentsList |
139 |
| - */ |
140 |
| - private static Arity createArity(NodeFactory<? extends PythonBuiltinBaseNode> factory, Builtin builtin, boolean declaresExplicitSelf) { |
141 |
| - String[] parameterNames = builtin.parameterNames(); |
142 |
| - int maxNumPosArgs = Math.max(builtin.minNumOfPositionalArgs(), parameterNames.length); |
143 |
| - |
144 |
| - if (builtin.maxNumOfPositionalArgs() >= 0) { |
145 |
| - maxNumPosArgs = builtin.maxNumOfPositionalArgs(); |
146 |
| - assert parameterNames.length == 0 : "either give all parameter names explicitly, or define the max number: " + builtin.name() + " - " + String.join(",", builtin.parameterNames()) + |
147 |
| - " vs " + builtin.maxNumOfPositionalArgs() + " - " + factory.toString(); |
148 |
| - } |
149 |
| - |
150 |
| - if (!declaresExplicitSelf) { |
151 |
| - // if we don't take the explicit self, we still need to accept it by arity |
152 |
| - maxNumPosArgs++; |
153 |
| - } else if (builtin.constructsClass().length > 0 && maxNumPosArgs == 0) { |
154 |
| - // we have this convention to always declare the cls argument without setting the num |
155 |
| - // args |
156 |
| - maxNumPosArgs = 1; |
157 |
| - } |
158 |
| - |
159 |
| - if (maxNumPosArgs > 0) { |
160 |
| - if (parameterNames.length == 0) { |
161 |
| - PythonLanguage.getLogger().log(Level.FINEST, "missing parameter names for builtin " + factory); |
162 |
| - parameterNames = new String[maxNumPosArgs]; |
163 |
| - parameterNames[0] = builtin.constructsClass().length > 0 ? "$cls" : "$self"; |
164 |
| - for (int i = 1, p = 'a'; i < parameterNames.length; i++, p++) { |
165 |
| - parameterNames[i] = Character.toString((char) p); |
166 |
| - } |
167 |
| - } else { |
168 |
| - if (declaresExplicitSelf) { |
169 |
| - assert parameterNames.length == maxNumPosArgs : "not enough parameter ids on " + factory; |
170 |
| - } else { |
171 |
| - // we don't declare the "self" as a parameter id unless it's explicit |
172 |
| - assert parameterNames.length + 1 == maxNumPosArgs : "not enough parameter ids on " + factory; |
173 |
| - parameterNames = Arrays.copyOf(parameterNames, parameterNames.length + 1); |
174 |
| - System.arraycopy(parameterNames, 0, parameterNames, 1, parameterNames.length - 1); |
175 |
| - parameterNames[0] = builtin.constructsClass().length > 0 ? "$cls" : "$self"; |
176 |
| - } |
177 |
| - } |
178 |
| - } |
179 |
| - |
180 |
| - return new Arity(builtin.takesVarKeywordArgs(), (builtin.takesVarArgs() || builtin.varArgsMarker()) ? parameterNames.length : -1, builtin.varArgsMarker(), parameterNames, |
181 |
| - builtin.keywordOnlyNames()); |
182 |
| - } |
183 |
| - |
184 | 133 | private void setBuiltinFunction(String name, BoundBuiltinCallable<?> function) {
|
185 | 134 | builtinFunctions.put(name, function);
|
186 | 135 | }
|
|
0 commit comments