Merge pull request #111522 from Repiteo/core/to-from-native

Core: Support `INF`/`NAN` in JSON from/to native
This commit is contained in:
Thaddeus Crews
2025-10-29 13:13:48 -05:00
2 changed files with 12 additions and 1 deletions

View File

@ -1056,7 +1056,15 @@ Variant JSON::_to_native(const Variant &p_json, bool p_allow_objects, int p_dept
if (s.begins_with("i:")) {
return s.substr(2).to_int();
} 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:")) {
return s.substr(2);
} else if (s.begins_with("sn:")) {

View File

@ -60,6 +60,9 @@ TEST_CASE("[JSON][Native] Conversion between native and JSON formats") {
// Numbers and strings (represented as JSON strings).
test(1, R"("i:1")");
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(StringName("abc"), R"("sn:abc")");
test(NodePath("abc"), R"("np:abc")");