Core: Support INF/NAN in JSON from/to native
This commit is contained in:
@ -1056,7 +1056,15 @@ Variant JSON::_to_native(const Variant &p_json, bool p_allow_objects, int p_dept
|
|||||||
if (s.begins_with("i:")) {
|
if (s.begins_with("i:")) {
|
||||||
return s.substr(2).to_int();
|
return s.substr(2).to_int();
|
||||||
} else if (s.begins_with("f:")) {
|
} else if (s.begins_with("f:")) {
|
||||||
return s.substr(2).to_float();
|
const String sub = s.substr(2);
|
||||||
|
if (sub == "inf") {
|
||||||
|
return Math::INF;
|
||||||
|
} else if (sub == "-inf") {
|
||||||
|
return -Math::INF;
|
||||||
|
} else if (sub == "nan") {
|
||||||
|
return Math::NaN;
|
||||||
|
}
|
||||||
|
return sub.to_float();
|
||||||
} else if (s.begins_with("s:")) {
|
} else if (s.begins_with("s:")) {
|
||||||
return s.substr(2);
|
return s.substr(2);
|
||||||
} else if (s.begins_with("sn:")) {
|
} else if (s.begins_with("sn:")) {
|
||||||
|
|||||||
@ -60,6 +60,9 @@ TEST_CASE("[JSON][Native] Conversion between native and JSON formats") {
|
|||||||
// Numbers and strings (represented as JSON strings).
|
// Numbers and strings (represented as JSON strings).
|
||||||
test(1, R"("i:1")");
|
test(1, R"("i:1")");
|
||||||
test(1.0, R"("f:1.0")");
|
test(1.0, R"("f:1.0")");
|
||||||
|
test(Math::INF, R"("f:inf")");
|
||||||
|
test(-Math::INF, R"("f:-inf")");
|
||||||
|
test(Math::NaN, R"("f:nan")");
|
||||||
test(String("abc"), R"("s:abc")");
|
test(String("abc"), R"("s:abc")");
|
||||||
test(StringName("abc"), R"("sn:abc")");
|
test(StringName("abc"), R"("sn:abc")");
|
||||||
test(NodePath("abc"), R"("np:abc")");
|
test(NodePath("abc"), R"("np:abc")");
|
||||||
|
|||||||
Reference in New Issue
Block a user