summaryrefslogtreecommitdiffstats
path: root/core/variant
diff options
context:
space:
mode:
authorSpartan322 <Megacake1234@gmail.com>2024-10-22 06:56:34 -0400
committerSpartan322 <Megacake1234@gmail.com>2024-10-22 06:56:34 -0400
commit9a93ab2506a3544bf48ef1c2b2d7e3d6f0dffedb (patch)
tree961ebbb6fed86a794ff4446a848a359a6cd3fd4e /core/variant
parent9a49cab65c8e8ed8ac5f0613d96ddde403d12728 (diff)
parentb3bcb2dc14691f7729984128dca26a844f662fa1 (diff)
downloadredot-engine-9a93ab2506a3544bf48ef1c2b2d7e3d6f0dffedb.tar.gz
Merge commit godotengine/godot@b3bcb2dc14691f7729984128dca26a844f662fa1
Diffstat (limited to 'core/variant')
-rw-r--r--core/variant/variant.h13
-rw-r--r--core/variant/variant_parser.cpp2
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.