|
60 | 60 | import com.oracle.graal.python.builtins.CoreFunctions;
|
61 | 61 | import com.oracle.graal.python.builtins.PythonBuiltinClassType;
|
62 | 62 | import com.oracle.graal.python.builtins.PythonBuiltins;
|
| 63 | +import com.oracle.graal.python.builtins.modules.BuiltinConstructorsFactory.FloatNodeFactory; |
63 | 64 | import com.oracle.graal.python.builtins.objects.PEllipsis;
|
64 | 65 | import com.oracle.graal.python.builtins.objects.PNone;
|
65 | 66 | import com.oracle.graal.python.builtins.objects.PNotImplemented;
|
|
68 | 69 | import com.oracle.graal.python.builtins.objects.bytes.PBytes;
|
69 | 70 | import com.oracle.graal.python.builtins.objects.bytes.PIBytesLike;
|
70 | 71 | 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; |
71 | 76 | import com.oracle.graal.python.builtins.objects.common.HashingStorage.DictEntry;
|
72 | 77 | import com.oracle.graal.python.builtins.objects.common.HashingStorageNodes;
|
73 | 78 | import com.oracle.graal.python.builtins.objects.complex.PComplex;
|
@@ -478,6 +483,21 @@ Object doPythonObject(PythonClass cls, PythonObject obj,
|
478 | 483 | }
|
479 | 484 | }
|
480 | 485 |
|
| 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 | + |
481 | 501 | @Fallback
|
482 | 502 | @TruffleBoundary
|
483 | 503 | public Object floatFromObject(@SuppressWarnings("unused") Object cls, Object arg) {
|
|
0 commit comments