Skip to content

Commit 15a2521

Browse files
committed
Explicitly forward the __doc__ property to the foreign side, otherwise the foreign type's __doc__ takes precendence
1 parent 6d6fb9e commit 15a2521

File tree

1 file changed

+23
-0
lines changed

1 file changed

+23
-0
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/foreign/ForeignExecutableBuiltins.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626

2727
package com.oracle.graal.python.builtins.objects.foreign;
2828

29+
import static com.oracle.graal.python.nodes.SpecialAttributeNames.J___DOC__;
2930
import static com.oracle.graal.python.nodes.SpecialAttributeNames.J___NAME__;
3031
import static com.oracle.graal.python.nodes.SpecialAttributeNames.T___NAME__;
3132
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___CALL__;
@@ -37,6 +38,7 @@
3738
import com.oracle.graal.python.builtins.CoreFunctions;
3839
import com.oracle.graal.python.builtins.PythonBuiltinClassType;
3940
import com.oracle.graal.python.builtins.PythonBuiltins;
41+
import com.oracle.graal.python.builtins.objects.PNone;
4042
import com.oracle.graal.python.nodes.ErrorMessages;
4143
import com.oracle.graal.python.nodes.PRaiseNode;
4244
import com.oracle.graal.python.nodes.function.PythonBuiltinBaseNode;
@@ -92,6 +94,27 @@ static Object getName(Object self,
9294
}
9395
}
9496

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+
95118
@Builtin(name = J___CALL__, minNumOfPositionalArgs = 1, takesVarArgs = true)
96119
@GenerateNodeFactory
97120
public abstract static class CallNode extends PythonBuiltinNode {

0 commit comments

Comments
 (0)