Skip to content

Commit 412aed8

Browse files
committed
Support native float subclasses in CastToJavaDoubleNode
1 parent e8070f3 commit 412aed8

File tree

1 file changed

+10
-4
lines changed

1 file changed

+10
-4
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/util/CastToJavaDoubleNode.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,19 +43,23 @@
4343
import com.oracle.graal.python.builtins.PythonBuiltinClassType;
4444
import com.oracle.graal.python.builtins.modules.MathGuards;
4545
import com.oracle.graal.python.builtins.objects.cext.PythonAbstractNativeObject;
46+
import com.oracle.graal.python.builtins.objects.cext.capi.CExtNodes.FromNativeSubclassNode;
47+
import com.oracle.graal.python.builtins.objects.cext.capi.CExtNodes.ImportCAPISymbolNode;
48+
import com.oracle.graal.python.builtins.objects.cext.capi.CExtNodes.ToSulongNode;
4649
import com.oracle.graal.python.builtins.objects.ints.PInt;
4750
import com.oracle.graal.python.nodes.PNodeWithContext;
4851
import com.oracle.graal.python.nodes.PRaiseNode;
4952
import com.oracle.graal.python.nodes.classes.IsSubtypeNode;
5053
import com.oracle.graal.python.nodes.object.InlinedGetClassNode.GetPythonObjectClassNode;
5154
import com.oracle.graal.python.nodes.truffle.PythonArithmeticTypes;
52-
import com.oracle.truffle.api.CompilerDirectives;
5355
import com.oracle.truffle.api.dsl.Bind;
5456
import com.oracle.truffle.api.dsl.Cached;
5557
import com.oracle.truffle.api.dsl.GenerateUncached;
5658
import com.oracle.truffle.api.dsl.ImportStatic;
5759
import com.oracle.truffle.api.dsl.Specialization;
5860
import com.oracle.truffle.api.dsl.TypeSystemReference;
61+
import com.oracle.truffle.api.interop.InteropLibrary;
62+
import com.oracle.truffle.api.library.CachedLibrary;
5963
import com.oracle.truffle.api.nodes.Node;
6064

6165
/**
@@ -89,10 +93,12 @@ static double toDouble(PInt x,
8993
static double doNativeObject(PythonAbstractNativeObject x,
9094
@Bind("this") Node node,
9195
@Cached GetPythonObjectClassNode getClassNode,
92-
@Cached IsSubtypeNode isSubtypeNode) {
96+
@Cached IsSubtypeNode isSubtypeNode,
97+
@CachedLibrary(limit = "1") InteropLibrary interopLibrary,
98+
@Cached ToSulongNode toSulongNode,
99+
@Cached ImportCAPISymbolNode importSymNode) {
93100
if (isSubtypeNode.execute(getClassNode.execute(node, x), PythonBuiltinClassType.PFloat)) {
94-
CompilerDirectives.transferToInterpreter();
95-
throw new RuntimeException("casting a native float object to a Java double is not implemented yet");
101+
return FromNativeSubclassNode.readObFval(x, toSulongNode, interopLibrary, importSymNode);
96102
}
97103
// the object's type is not a subclass of 'float'
98104
throw CannotCastException.INSTANCE;

0 commit comments

Comments
 (0)