Skip to content

Commit de67130

Browse files
committed
Add PyFloat_FromString
1 parent c08e34c commit de67130

File tree

3 files changed

+30
-1
lines changed

3 files changed

+30
-1
lines changed

graalpython/com.oracle.graal.python.test/src/tests/cpyext/test_float.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,23 @@ def compile_module(self, name):
130130
cmpfunc=_float_compare
131131
)
132132

133+
test_PyFloat_FromString = CPyExtFunction(
134+
lambda args: float(args[0]),
135+
lambda: (
136+
("1",),
137+
("0.0",),
138+
("-1.0",),
139+
("-11.123456789123456789",),
140+
("nan",),
141+
("-inf",),
142+
("not-a-float",),
143+
),
144+
resultspec="O",
145+
argspec='O',
146+
arguments=["PyObject* string"],
147+
cmpfunc=_float_compare
148+
)
149+
133150
test_PyFloat_Check = CPyExtFunction(
134151
lambda args: isinstance(args[0], float),
135152
lambda: (

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/cext/PythonCextFloatBuiltins.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
import static com.oracle.graal.python.builtins.modules.cext.PythonCextBuiltins.CApiCallPath.Direct;
4545
import static com.oracle.graal.python.builtins.modules.cext.PythonCextBuiltins.CApiCallPath.Ignored;
4646
import static com.oracle.graal.python.builtins.objects.cext.capi.transitions.ArgDescriptor.PyObject;
47+
import static com.oracle.graal.python.builtins.objects.cext.capi.transitions.ArgDescriptor.PyObjectAsTruffleString;
4748
import static com.oracle.graal.python.builtins.objects.cext.capi.transitions.ArgDescriptor.PyObjectTransfer;
4849
import static com.oracle.graal.python.nodes.ErrorMessages.BAD_ARG_TO_INTERNAL_FUNC_WAS_S_P;
4950

@@ -52,8 +53,10 @@
5253
import com.oracle.graal.python.builtins.modules.cext.PythonCextBuiltins.CApiUnaryBuiltinNode;
5354
import com.oracle.graal.python.builtins.objects.cext.capi.transitions.ArgDescriptor;
5455
import com.oracle.graal.python.lib.PyFloatAsDoubleNode;
56+
import com.oracle.graal.python.lib.PyFloatFromString;
5557
import com.oracle.truffle.api.dsl.Cached;
5658
import com.oracle.truffle.api.dsl.Specialization;
59+
import com.oracle.truffle.api.strings.TruffleString;
5760

5861
public final class PythonCextFloatBuiltins {
5962

@@ -92,4 +95,14 @@ static double doGenericErr(Object object,
9295
return asDoubleNode.execute(null, object);
9396
}
9497
}
98+
99+
@CApiBuiltin(ret = PyObjectTransfer, args = {PyObjectAsTruffleString}, call = Direct)
100+
abstract static class PyFloat_FromString extends CApiUnaryBuiltinNode {
101+
102+
@Specialization
103+
static Object fromString(TruffleString string,
104+
@Cached PyFloatFromString pyFloatFromString) {
105+
return pyFloatFromString.execute(null, string);
106+
}
107+
}
95108
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/capi/CApiFunction.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1112,7 +1112,6 @@ public final class CApiFunction {
11121112
@CApiBuiltin(name = "PyFile_OpenCode", ret = PyObject, args = {ConstCharPtrAsTruffleString}, call = NotImplemented)
11131113
@CApiBuiltin(name = "PyFile_OpenCodeObject", ret = PyObject, args = {PyObject}, call = NotImplemented)
11141114
@CApiBuiltin(name = "PyFile_SetOpenCodeHook", ret = Int, args = {PY_OPENCODEHOOKFUNCTION, Pointer}, call = NotImplemented)
1115-
@CApiBuiltin(name = "PyFloat_FromString", ret = PyObject, args = {PyObject}, call = NotImplemented)
11161115
@CApiBuiltin(name = "PyFloat_GetInfo", ret = PyObject, args = {}, call = NotImplemented)
11171116
@CApiBuiltin(name = "PyFloat_GetMax", ret = Double, args = {}, call = NotImplemented)
11181117
@CApiBuiltin(name = "PyFloat_GetMin", ret = Double, args = {}, call = NotImplemented)

0 commit comments

Comments
 (0)