|
30 | 30 | import static com.oracle.graal.python.nodes.SpecialAttributeNames.__DEFAULTS__;
|
31 | 31 | import static com.oracle.graal.python.nodes.SpecialAttributeNames.__FUNC__;
|
32 | 32 | import static com.oracle.graal.python.nodes.SpecialAttributeNames.__KWDEFAULTS__;
|
| 33 | +import static com.oracle.graal.python.nodes.SpecialMethodNames.__GET__; |
33 | 34 | import static com.oracle.graal.python.nodes.SpecialMethodNames.__REDUCE__;
|
34 | 35 | import static com.oracle.graal.python.nodes.SpecialMethodNames.__REPR__;
|
35 | 36 | import static com.oracle.graal.python.runtime.exception.PythonErrorType.TypeError;
|
|
47 | 48 | import com.oracle.graal.python.nodes.call.special.LookupAndCallBinaryNode;
|
48 | 49 | import com.oracle.graal.python.nodes.function.PythonBuiltinBaseNode;
|
49 | 50 | import com.oracle.graal.python.nodes.function.PythonBuiltinNode;
|
| 51 | +import com.oracle.graal.python.nodes.function.builtins.PythonTernaryBuiltinNode; |
50 | 52 | import com.oracle.graal.python.nodes.function.builtins.PythonUnaryBuiltinNode;
|
51 | 53 | import com.oracle.graal.python.nodes.object.GetLazyClassNode;
|
52 | 54 | import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
|
@@ -133,4 +135,16 @@ Object doGeneric(@SuppressWarnings("unused") Object obj) {
|
133 | 135 | throw raise(TypeError, "can't pickle function objects");
|
134 | 136 | }
|
135 | 137 | }
|
| 138 | + |
| 139 | + @Builtin(name = __GET__, fixedNumOfPositionalArgs = 1) |
| 140 | + @GenerateNodeFactory |
| 141 | + public abstract static class GetNode extends PythonTernaryBuiltinNode { |
| 142 | + @Specialization |
| 143 | + PMethod doGeneric(@SuppressWarnings("unused") PMethod self, Object obj, @SuppressWarnings("unused") Object cls) { |
| 144 | + if (self.getSelf() != null) { |
| 145 | + return self; |
| 146 | + } |
| 147 | + return factory().createMethod(obj, self.getFunction()); |
| 148 | + } |
| 149 | + } |
136 | 150 | }
|
0 commit comments