|
29 | 29 | import static com.oracle.graal.python.nodes.SpecialAttributeNames.__ANNOTATIONS__; |
30 | 30 | import static com.oracle.graal.python.nodes.SpecialAttributeNames.__CLOSURE__; |
31 | 31 | import static com.oracle.graal.python.nodes.SpecialAttributeNames.__CODE__; |
32 | | -import static com.oracle.graal.python.nodes.SpecialAttributeNames.__DEFAULTS__; |
33 | 32 | import static com.oracle.graal.python.nodes.SpecialAttributeNames.__DICT__; |
34 | 33 | import static com.oracle.graal.python.nodes.SpecialAttributeNames.__GLOBALS__; |
35 | 34 | import static com.oracle.graal.python.nodes.SpecialAttributeNames.__MODULE__; |
|
39 | 38 | import static com.oracle.graal.python.runtime.exception.PythonErrorType.AttributeError; |
40 | 39 | import static com.oracle.graal.python.runtime.exception.PythonErrorType.NotImplementedError; |
41 | 40 |
|
42 | | -import java.util.ArrayList; |
43 | 41 | import java.util.List; |
44 | 42 |
|
45 | 43 | import com.oracle.graal.python.builtins.Builtin; |
|
54 | 52 | import com.oracle.graal.python.builtins.objects.method.PMethod; |
55 | 53 | import com.oracle.graal.python.builtins.objects.module.PythonModule; |
56 | 54 | import com.oracle.graal.python.builtins.objects.object.PythonObject; |
57 | | -import com.oracle.graal.python.builtins.objects.tuple.PTuple; |
58 | 55 | import com.oracle.graal.python.nodes.argument.CreateArgumentsNode; |
59 | | -import com.oracle.graal.python.nodes.argument.ReadKeywordNode; |
60 | 56 | import com.oracle.graal.python.nodes.attributes.ReadAttributeFromObjectNode; |
61 | 57 | import com.oracle.graal.python.nodes.attributes.WriteAttributeToObjectNode; |
62 | 58 | import com.oracle.graal.python.nodes.call.CallDispatchNode; |
|
67 | 63 | import com.oracle.graal.python.nodes.function.builtins.PythonUnaryBuiltinNode; |
68 | 64 | import com.oracle.graal.python.nodes.subscript.GetItemNode; |
69 | 65 | import com.oracle.truffle.api.CompilerDirectives; |
70 | | -import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; |
71 | 66 | import com.oracle.truffle.api.dsl.Cached; |
72 | 67 | import com.oracle.truffle.api.dsl.Fallback; |
73 | 68 | import com.oracle.truffle.api.dsl.GenerateNodeFactory; |
74 | 69 | import com.oracle.truffle.api.dsl.NodeFactory; |
75 | 70 | import com.oracle.truffle.api.dsl.Specialization; |
76 | 71 | import com.oracle.truffle.api.frame.VirtualFrame; |
77 | | -import com.oracle.truffle.api.nodes.NodeUtil; |
78 | 72 | import com.oracle.truffle.api.profiles.ConditionProfile; |
79 | 73 |
|
80 | 74 | @CoreFunctions(extendClasses = {PythonBuiltinClassType.PFunction, PythonBuiltinClassType.PBuiltinFunction}) |
@@ -264,63 +258,6 @@ Object builtinCode(PBuiltinFunction self, Object none) { |
264 | 258 | } |
265 | 259 | } |
266 | 260 |
|
267 | | - @Builtin(name = __DEFAULTS__, minNumOfPositionalArgs = 1, maxNumOfPositionalArgs = 2, isGetter = true, isSetter = true) |
268 | | - @GenerateNodeFactory |
269 | | - public abstract static class GetDefaultsNode extends PythonBinaryBuiltinNode { |
270 | | - protected final ConditionProfile nullDefaultsProfile = ConditionProfile.createBinaryProfile(); |
271 | | - |
272 | | - @TruffleBoundary |
273 | | - private static Object[] extractDefaults(PFunction function) { |
274 | | - List<Object> defaultValues = new ArrayList<>(); |
275 | | - List<ReadKeywordNode> readKeywordNodes = NodeUtil.findAllNodeInstances(function.getFunctionRootNode(), ReadKeywordNode.class); |
276 | | - for (ReadKeywordNode readKeywordNode : readKeywordNodes) { |
277 | | - Object defaultValue = readKeywordNode.getDefaultValue(); |
278 | | - if (defaultValue != null) { |
279 | | - defaultValues.add(defaultValue); |
280 | | - } |
281 | | - } |
282 | | - return defaultValues.toArray(); |
283 | | - } |
284 | | - |
285 | | - private Object getDefaults(PFunction function) { |
286 | | - Object[] defaults = function.getDefaults(); |
287 | | - if (nullDefaultsProfile.profile(defaults == null)) { |
288 | | - defaults = extractDefaults(function); |
289 | | - } |
290 | | - |
291 | | - assert defaults != null; |
292 | | - return (defaults.length == 0) ? PNone.NONE : factory().createTuple(defaults); |
293 | | - } |
294 | | - |
295 | | - @Specialization |
296 | | - Object defaults(PFunction self, @SuppressWarnings("unused") PNone defaults) { |
297 | | - return getDefaults(self); |
298 | | - } |
299 | | - |
300 | | - @Specialization |
301 | | - Object defaults(PFunction self, PTuple defaults) { |
302 | | - self.setDefaults(defaults.getArray()); |
303 | | - return PNone.NONE; |
304 | | - } |
305 | | - |
306 | | - @Specialization |
307 | | - Object defaults(PMethod self, @SuppressWarnings("unused") PNone defaults) { |
308 | | - return getDefaults(self.getFunction()); |
309 | | - } |
310 | | - |
311 | | - @Specialization |
312 | | - Object defaults(PMethod self, PTuple defaults) { |
313 | | - self.getFunction().setDefaults(defaults.getArray()); |
314 | | - return PNone.NONE; |
315 | | - } |
316 | | - |
317 | | - @SuppressWarnings("unused") |
318 | | - @Specialization |
319 | | - Object defaults(PBuiltinFunction self, Object defaults) { |
320 | | - throw raise(AttributeError, "'builtin_function_or_method' object has no attribute '__defaults__'"); |
321 | | - } |
322 | | - } |
323 | | - |
324 | 261 | @Builtin(name = __DICT__, fixedNumOfPositionalArgs = 1, isGetter = true) |
325 | 262 | @GenerateNodeFactory |
326 | 263 | static abstract class DictNode extends PythonUnaryBuiltinNode { |
|
0 commit comments