Skip to content

Commit 5747cd3

Browse files
committed
preliminary support for native float subclasses in float constructor
1 parent 743852e commit 5747cd3

File tree

1 file changed

+20
-0
lines changed

1 file changed

+20
-0
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/BuiltinConstructors.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@
6060
import com.oracle.graal.python.builtins.CoreFunctions;
6161
import com.oracle.graal.python.builtins.PythonBuiltinClassType;
6262
import com.oracle.graal.python.builtins.PythonBuiltins;
63+
import com.oracle.graal.python.builtins.modules.BuiltinConstructorsFactory.FloatNodeFactory;
6364
import com.oracle.graal.python.builtins.objects.PEllipsis;
6465
import com.oracle.graal.python.builtins.objects.PNone;
6566
import com.oracle.graal.python.builtins.objects.PNotImplemented;
@@ -68,6 +69,10 @@
6869
import com.oracle.graal.python.builtins.objects.bytes.PBytes;
6970
import com.oracle.graal.python.builtins.objects.bytes.PIBytesLike;
7071
import com.oracle.graal.python.builtins.objects.cell.PCell;
72+
import com.oracle.graal.python.builtins.objects.cext.CExtNodes.FromNativeSubclassNode;
73+
import com.oracle.graal.python.builtins.objects.cext.NativeCAPISymbols;
74+
import com.oracle.graal.python.builtins.objects.cext.PythonNativeClass;
75+
import com.oracle.graal.python.builtins.objects.cext.PythonNativeObject;
7176
import com.oracle.graal.python.builtins.objects.common.HashingStorage.DictEntry;
7277
import com.oracle.graal.python.builtins.objects.common.HashingStorageNodes;
7378
import com.oracle.graal.python.builtins.objects.complex.PComplex;
@@ -478,6 +483,21 @@ Object doPythonObject(PythonClass cls, PythonObject obj,
478483
}
479484
}
480485

486+
protected static FromNativeSubclassNode cacheGetFloat() {
487+
return FromNativeSubclassNode.create(PythonBuiltinClassType.PFloat, NativeCAPISymbols.FUN_PY_FLOAT_AS_DOUBLE);
488+
}
489+
490+
@Specialization
491+
Object doNativeFloat(PythonNativeClass cls, PythonNativeObject possibleBase,
492+
@Cached("cacheGetFloat()") FromNativeSubclassNode getFloat) {
493+
Object convertedFloat = getFloat.execute(possibleBase);
494+
if (convertedFloat instanceof Double) {
495+
return possibleBase; // TODO (tfel): we really need to call back into C
496+
} else {
497+
throw raise(TypeError, "must be real number, not %p", possibleBase);
498+
}
499+
}
500+
481501
@Fallback
482502
@TruffleBoundary
483503
public Object floatFromObject(@SuppressWarnings("unused") Object cls, Object arg) {

0 commit comments

Comments
 (0)