|
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