Skip to content

Commit 754171b

Browse files
committed
Implement '__get__' for type 'method'.
1 parent cff5cde commit 754171b

File tree

1 file changed

+14
-0
lines changed
  • graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/method

1 file changed

+14
-0
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/method/MethodBuiltins.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import static com.oracle.graal.python.nodes.SpecialAttributeNames.__DEFAULTS__;
3131
import static com.oracle.graal.python.nodes.SpecialAttributeNames.__FUNC__;
3232
import static com.oracle.graal.python.nodes.SpecialAttributeNames.__KWDEFAULTS__;
33+
import static com.oracle.graal.python.nodes.SpecialMethodNames.__GET__;
3334
import static com.oracle.graal.python.nodes.SpecialMethodNames.__REDUCE__;
3435
import static com.oracle.graal.python.nodes.SpecialMethodNames.__REPR__;
3536
import static com.oracle.graal.python.runtime.exception.PythonErrorType.TypeError;
@@ -47,6 +48,7 @@
4748
import com.oracle.graal.python.nodes.call.special.LookupAndCallBinaryNode;
4849
import com.oracle.graal.python.nodes.function.PythonBuiltinBaseNode;
4950
import com.oracle.graal.python.nodes.function.PythonBuiltinNode;
51+
import com.oracle.graal.python.nodes.function.builtins.PythonTernaryBuiltinNode;
5052
import com.oracle.graal.python.nodes.function.builtins.PythonUnaryBuiltinNode;
5153
import com.oracle.graal.python.nodes.object.GetLazyClassNode;
5254
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
@@ -133,4 +135,16 @@ Object doGeneric(@SuppressWarnings("unused") Object obj) {
133135
throw raise(TypeError, "can't pickle function objects");
134136
}
135137
}
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+
}
136150
}

0 commit comments

Comments
 (0)