diff options
author | Spartan322 <Megacake1234@gmail.com> | 2024-10-22 06:56:34 -0400 |
---|---|---|
committer | Spartan322 <Megacake1234@gmail.com> | 2024-10-22 06:56:34 -0400 |
commit | 9a93ab2506a3544bf48ef1c2b2d7e3d6f0dffedb (patch) | |
tree | 961ebbb6fed86a794ff4446a848a359a6cd3fd4e /core/variant | |
parent | 9a49cab65c8e8ed8ac5f0613d96ddde403d12728 (diff) | |
parent | b3bcb2dc14691f7729984128dca26a844f662fa1 (diff) | |
download | redot-engine-9a93ab2506a3544bf48ef1c2b2d7e3d6f0dffedb.tar.gz |
Merge commit godotengine/godot@b3bcb2dc14691f7729984128dca26a844f662fa1
Diffstat (limited to 'core/variant')
-rw-r--r-- | core/variant/variant.h | 13 | ||||
-rw-r--r-- | core/variant/variant_parser.cpp | 2 |
2 files changed, 14 insertions, 1 deletions
diff --git a/core/variant/variant.h b/core/variant/variant.h index bc38d83b23..0d67b5805d 100644 --- a/core/variant/variant.h +++ b/core/variant/variant.h @@ -856,6 +856,19 @@ struct StringLikeVariantComparator { static bool compare(const Variant &p_lhs, const Variant &p_rhs); }; +struct StringLikeVariantOrder { + static _ALWAYS_INLINE_ bool compare(const Variant &p_lhs, const Variant &p_rhs) { + if (p_lhs.is_string() && p_rhs.is_string()) { + return p_lhs.operator String() < p_rhs.operator String(); + } + return p_lhs < p_rhs; + } + + _ALWAYS_INLINE_ bool operator()(const Variant &p_lhs, const Variant &p_rhs) const { + return compare(p_lhs, p_rhs); + } +}; + Variant::ObjData &Variant::_get_obj() { return *reinterpret_cast<ObjData *>(&_data._mem[0]); } diff --git a/core/variant/variant_parser.cpp b/core/variant/variant_parser.cpp index 367fb229b1..361654db16 100644 --- a/core/variant/variant_parser.cpp +++ b/core/variant/variant_parser.cpp @@ -2247,7 +2247,7 @@ Error VariantWriter::write(const Variant &p_variant, StoreStringFunc p_store_str } else { List<Variant> keys; dict.get_key_list(&keys); - keys.sort(); + keys.sort_custom<StringLikeVariantOrder>(); if (keys.is_empty()) { // Avoid unnecessary line break. |