|
26 | 26 |
|
27 | 27 | package com.oracle.graal.python.builtins.objects.foreign; |
28 | 28 |
|
| 29 | +import static com.oracle.graal.python.nodes.SpecialAttributeNames.J___DOC__; |
29 | 30 | import static com.oracle.graal.python.nodes.SpecialAttributeNames.J___NAME__; |
30 | 31 | import static com.oracle.graal.python.nodes.SpecialAttributeNames.T___NAME__; |
31 | 32 | import static com.oracle.graal.python.nodes.SpecialMethodNames.J___CALL__; |
|
37 | 38 | import com.oracle.graal.python.builtins.CoreFunctions; |
38 | 39 | import com.oracle.graal.python.builtins.PythonBuiltinClassType; |
39 | 40 | import com.oracle.graal.python.builtins.PythonBuiltins; |
| 41 | +import com.oracle.graal.python.builtins.objects.PNone; |
40 | 42 | import com.oracle.graal.python.nodes.ErrorMessages; |
41 | 43 | import com.oracle.graal.python.nodes.PRaiseNode; |
42 | 44 | import com.oracle.graal.python.nodes.function.PythonBuiltinBaseNode; |
@@ -92,6 +94,27 @@ static Object getName(Object self, |
92 | 94 | } |
93 | 95 | } |
94 | 96 |
|
| 97 | + @Builtin(name = J___DOC__, minNumOfPositionalArgs = 1, isGetter = true) |
| 98 | + @GenerateNodeFactory |
| 99 | + public abstract static class DocNode extends PythonUnaryBuiltinNode { |
| 100 | + @Specialization |
| 101 | + static Object getName(Object self, |
| 102 | + @Bind("this") Node inliningTarget, |
| 103 | + @Cached PRaiseNode raiseNode, |
| 104 | + @Cached PForeignToPTypeNode toPythonNode, |
| 105 | + @CachedLibrary(limit = "2") InteropLibrary lib) { |
| 106 | + if (lib.isMemberReadable(self, J___DOC__)) { |
| 107 | + try { |
| 108 | + return toPythonNode.executeConvert(lib.readMember(self, J___DOC__)); |
| 109 | + } catch (UnsupportedMessageException | UnknownIdentifierException e) { |
| 110 | + throw CompilerDirectives.shouldNotReachHere(e); |
| 111 | + } |
| 112 | + } else { |
| 113 | + return PNone.NONE; |
| 114 | + } |
| 115 | + } |
| 116 | + } |
| 117 | + |
95 | 118 | @Builtin(name = J___CALL__, minNumOfPositionalArgs = 1, takesVarArgs = true) |
96 | 119 | @GenerateNodeFactory |
97 | 120 | public abstract static class CallNode extends PythonBuiltinNode { |
|
0 commit comments