diff --git a/plugins/flutter/CHANGELOG.md b/plugins/flutter/CHANGELOG.md index e081d019..f09177bd 100644 --- a/plugins/flutter/CHANGELOG.md +++ b/plugins/flutter/CHANGELOG.md @@ -17,7 +17,9 @@ The initial version. Hello, world! + Fix a bug about comment and indentation + Fix a bug about compile error line number -## 0.4.8+4 +## 0.4.8+5 + Downgrade to `sdk>=2.17.0` -+ Fix some bugs about compile error \ No newline at end of file ++ Fix some bugs about compile error ++ Fix a bug for jsonify `nan` or `inf` ++ Add `math.isnan` and `math.isinf` \ No newline at end of file diff --git a/plugins/flutter/pubspec.yaml b/plugins/flutter/pubspec.yaml index b48f1233..cd828f07 100644 --- a/plugins/flutter/pubspec.yaml +++ b/plugins/flutter/pubspec.yaml @@ -1,6 +1,6 @@ name: pocketpy description: A lightweight Python interpreter for game engines. -version: 0.4.8+4 +version: 0.4.8+5 homepage: https://pocketpy.dev repository: https://github.com/blueloveth/pocketpy diff --git a/plugins/flutter/src/pocketpy.h b/plugins/flutter/src/pocketpy.h index 7c223451..cd5eec97 100644 --- a/plugins/flutter/src/pocketpy.h +++ b/plugins/flutter/src/pocketpy.h @@ -6481,7 +6481,11 @@ void __initializeBuiltinFunctions(VM* _vm) { }); _vm->bindMethod("float", "__json__", [](VM* vm, const pkpy::ArgList& args) { - return vm->PyStr(std::to_string((float)vm->PyFloat_AS_C(args[0]))); + _Float val = vm->PyFloat_AS_C(args[0]); + if(std::isinf(val) || std::isnan(val)){ + vm->valueError("cannot jsonify 'nan' or 'inf'"); + } + return vm->PyStr(std::to_string(val)); }); /************ PyString ************/ @@ -6887,6 +6891,16 @@ void __addModuleMath(VM* vm){ _Float b = vm->numToFloat(args[1]); return vm->PyBool(fabs(a - b) < 1e-9); }); + + vm->bindFunc(mod, "isnan", [](VM* vm, const pkpy::ArgList& args) { + vm->__checkArgSize(args, 1); + return vm->PyBool(std::isnan(vm->numToFloat(args[0]))); + }); + + vm->bindFunc(mod, "isinf", [](VM* vm, const pkpy::ArgList& args) { + vm->__checkArgSize(args, 1); + return vm->PyBool(std::isinf(vm->numToFloat(args[0]))); + }); } class _PkExported{ diff --git a/plugins/godot/godot-cpp b/plugins/godot/godot-cpp index c645191b..b1d3e4f6 160000 --- a/plugins/godot/godot-cpp +++ b/plugins/godot/godot-cpp @@ -1 +1 @@ -Subproject commit c645191b67d056996ee4d0d6a387758c16edf7e2 +Subproject commit b1d3e4f63e539272d5b77bfb44ed8f5778efef9e diff --git a/plugins/unity/com.bl.pocketpy/Plugins/iOS/pocketpy.h b/plugins/unity/com.bl.pocketpy/Plugins/iOS/pocketpy.h index 7c223451..cd5eec97 100644 --- a/plugins/unity/com.bl.pocketpy/Plugins/iOS/pocketpy.h +++ b/plugins/unity/com.bl.pocketpy/Plugins/iOS/pocketpy.h @@ -6481,7 +6481,11 @@ void __initializeBuiltinFunctions(VM* _vm) { }); _vm->bindMethod("float", "__json__", [](VM* vm, const pkpy::ArgList& args) { - return vm->PyStr(std::to_string((float)vm->PyFloat_AS_C(args[0]))); + _Float val = vm->PyFloat_AS_C(args[0]); + if(std::isinf(val) || std::isnan(val)){ + vm->valueError("cannot jsonify 'nan' or 'inf'"); + } + return vm->PyStr(std::to_string(val)); }); /************ PyString ************/ @@ -6887,6 +6891,16 @@ void __addModuleMath(VM* vm){ _Float b = vm->numToFloat(args[1]); return vm->PyBool(fabs(a - b) < 1e-9); }); + + vm->bindFunc(mod, "isnan", [](VM* vm, const pkpy::ArgList& args) { + vm->__checkArgSize(args, 1); + return vm->PyBool(std::isnan(vm->numToFloat(args[0]))); + }); + + vm->bindFunc(mod, "isinf", [](VM* vm, const pkpy::ArgList& args) { + vm->__checkArgSize(args, 1); + return vm->PyBool(std::isinf(vm->numToFloat(args[0]))); + }); } class _PkExported{ diff --git a/src/pocketpy.h b/src/pocketpy.h index 6361f7cc..ded93e16 100644 --- a/src/pocketpy.h +++ b/src/pocketpy.h @@ -280,7 +280,11 @@ void __initializeBuiltinFunctions(VM* _vm) { }); _vm->bindMethod("float", "__json__", [](VM* vm, const pkpy::ArgList& args) { - return vm->PyStr(std::to_string((float)vm->PyFloat_AS_C(args[0]))); + _Float val = vm->PyFloat_AS_C(args[0]); + if(std::isinf(val) || std::isnan(val)){ + vm->valueError("cannot jsonify 'nan' or 'inf'"); + } + return vm->PyStr(std::to_string(val)); }); /************ PyString ************/ @@ -688,6 +692,16 @@ void __addModuleMath(VM* vm){ _Float b = vm->numToFloat(args[1]); return vm->PyBool(fabs(a - b) < 1e-9); }); + + vm->bindFunc(mod, "isnan", [](VM* vm, const pkpy::ArgList& args) { + vm->__checkArgSize(args, 1); + return vm->PyBool(std::isnan(vm->numToFloat(args[0]))); + }); + + vm->bindFunc(mod, "isinf", [](VM* vm, const pkpy::ArgList& args) { + vm->__checkArgSize(args, 1); + return vm->PyBool(std::isinf(vm->numToFloat(args[0]))); + }); } class _PkExported{ diff --git a/tests/_math.py b/tests/_math.py index d43f9761..b10dd8da 100644 --- a/tests/_math.py +++ b/tests/_math.py @@ -1,4 +1,4 @@ -from math import log, log10, log2, sin, cos, tan, e, pi, isclose +from math import log, log10, log2, sin, cos, tan, e, pi, isclose, isnan, isinf assert isclose(e, 2.718281828459045) assert isclose(pi, 3.141592653589793) @@ -8,3 +8,9 @@ assert isclose(log2(10), 3.321928094887362) assert isclose(sin(0), 0.0) assert isclose(cos(0), 1.0) assert isclose(tan(0), 0.0) + +a = -0.1 +a = a**a +assert isnan(a) +assert not isinf(a) +assert isinf(float("inf")) \ No newline at end of file