Skip to content

Commit 841c29d

Browse files
committed
Merge pull request #104985 from Ivorforce/stringname-always-string
Always use `String` as `StringName` backing internally.
2 parents 7a986dd + 91fe434 commit 841c29d

File tree

16 files changed

+266
-404
lines changed

16 files changed

+266
-404
lines changed

core/core_string_names.h

Lines changed: 37 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -44,45 +44,45 @@ class CoreStringNames {
4444

4545
_FORCE_INLINE_ static CoreStringNames *get_singleton() { return singleton; }
4646

47-
const StringName free_ = StaticCString::create("free"); // free would conflict with C++ keyword.
48-
const StringName changed = StaticCString::create("changed");
49-
const StringName script = StaticCString::create("script");
50-
const StringName script_changed = StaticCString::create("script_changed");
51-
const StringName _iter_init = StaticCString::create("_iter_init");
52-
const StringName _iter_next = StaticCString::create("_iter_next");
53-
const StringName _iter_get = StaticCString::create("_iter_get");
54-
const StringName get_rid = StaticCString::create("get_rid");
55-
const StringName _to_string = StaticCString::create("_to_string");
56-
const StringName _custom_features = StaticCString::create("_custom_features");
47+
const StringName free_ = "free"; // free would conflict with C++ keyword.
48+
const StringName changed = "changed";
49+
const StringName script = "script";
50+
const StringName script_changed = "script_changed";
51+
const StringName _iter_init = "_iter_init";
52+
const StringName _iter_next = "_iter_next";
53+
const StringName _iter_get = "_iter_get";
54+
const StringName get_rid = "get_rid";
55+
const StringName _to_string = "_to_string";
56+
const StringName _custom_features = "_custom_features";
5757

58-
const StringName x = StaticCString::create("x");
59-
const StringName y = StaticCString::create("y");
60-
const StringName z = StaticCString::create("z");
61-
const StringName w = StaticCString::create("w");
62-
const StringName r = StaticCString::create("r");
63-
const StringName g = StaticCString::create("g");
64-
const StringName b = StaticCString::create("b");
65-
const StringName a = StaticCString::create("a");
66-
const StringName position = StaticCString::create("position");
67-
const StringName size = StaticCString::create("size");
68-
const StringName end = StaticCString::create("end");
69-
const StringName basis = StaticCString::create("basis");
70-
const StringName origin = StaticCString::create("origin");
71-
const StringName normal = StaticCString::create("normal");
72-
const StringName d = StaticCString::create("d");
73-
const StringName h = StaticCString::create("h");
74-
const StringName s = StaticCString::create("s");
75-
const StringName v = StaticCString::create("v");
76-
const StringName r8 = StaticCString::create("r8");
77-
const StringName g8 = StaticCString::create("g8");
78-
const StringName b8 = StaticCString::create("b8");
79-
const StringName a8 = StaticCString::create("a8");
58+
const StringName x = "x";
59+
const StringName y = "y";
60+
const StringName z = "z";
61+
const StringName w = "w";
62+
const StringName r = "r";
63+
const StringName g = "g";
64+
const StringName b = "b";
65+
const StringName a = "a";
66+
const StringName position = "position";
67+
const StringName size = "size";
68+
const StringName end = "end";
69+
const StringName basis = "basis";
70+
const StringName origin = "origin";
71+
const StringName normal = "normal";
72+
const StringName d = "d";
73+
const StringName h = "h";
74+
const StringName s = "s";
75+
const StringName v = "v";
76+
const StringName r8 = "r8";
77+
const StringName g8 = "g8";
78+
const StringName b8 = "b8";
79+
const StringName a8 = "a8";
8080

81-
const StringName call = StaticCString::create("call");
82-
const StringName call_deferred = StaticCString::create("call_deferred");
83-
const StringName bind = StaticCString::create("bind");
84-
const StringName notification = StaticCString::create("notification");
85-
const StringName property_list_changed = StaticCString::create("property_list_changed");
81+
const StringName call = "call";
82+
const StringName call_deferred = "call_deferred";
83+
const StringName bind = "bind";
84+
const StringName notification = "notification";
85+
const StringName property_list_changed = "property_list_changed";
8686
};
8787

8888
#define CoreStringName(m_name) CoreStringNames::get_singleton()->m_name

core/object/class_db.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,10 @@
3939

4040
MethodDefinition D_METHODP(const char *p_name, const char *const **p_args, uint32_t p_argcount) {
4141
MethodDefinition md;
42-
md.name = StaticCString::create(p_name);
42+
md.name = StringName(p_name);
4343
md.args.resize(p_argcount);
4444
for (uint32_t i = 0; i < p_argcount; i++) {
45-
md.args.write[i] = StaticCString::create(*p_args[i]);
45+
md.args.write[i] = StringName(*p_args[i]);
4646
}
4747
return md;
4848
}
@@ -1932,7 +1932,7 @@ MethodBind *ClassDB::bind_methodfi(uint32_t p_flags, MethodBind *p_bind, bool p_
19321932
StringName mdname = method_name.name;
19331933
#else
19341934
MethodBind *ClassDB::bind_methodfi(uint32_t p_flags, MethodBind *p_bind, bool p_compatibility, const char *method_name, const Variant **p_defs, int p_defcount) {
1935-
StringName mdname = StaticCString::create(method_name);
1935+
StringName mdname = StringName(method_name);
19361936
#endif
19371937

19381938
Locker::Lock lock(Locker::STATE_WRITE);

core/object/make_virtuals.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
proto = """#define GDVIRTUAL$VER($ALIAS $RET m_name $ARG)\\
1818
mutable void *_gdvirtual_##$VARNAME = nullptr;\\
1919
_FORCE_INLINE_ bool _gdvirtual_##$VARNAME##_call($CALLARGS) $CONST {\\
20-
static const StringName _gdvirtual_##$VARNAME##_sn = _scs_create(#m_name, true);\\
20+
static const StringName _gdvirtual_##$VARNAME##_sn = StringName(#m_name, true);\\
2121
$SCRIPTCALL\\
2222
if (_get_extension()) {\\
2323
if (unlikely(!_gdvirtual_##$VARNAME)) {\\
@@ -53,7 +53,7 @@
5353
return false;\\
5454
}\\
5555
_FORCE_INLINE_ bool _gdvirtual_##$VARNAME##_overridden() const {\\
56-
static const StringName _gdvirtual_##$VARNAME##_sn = _scs_create(#m_name, true);\\
56+
static const StringName _gdvirtual_##$VARNAME##_sn = StringName(#m_name, true);\\
5757
$SCRIPTHASMETHOD\\
5858
if (_get_extension()) {\\
5959
if (unlikely(!_gdvirtual_##$VARNAME)) {\\

core/object/object.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -137,17 +137,17 @@ enum PropertyUsageFlags {
137137
#define GD_IS_CLASS_ENABLED(m_class) m_class::_class_is_enabled
138138

139139
#define ADD_SIGNAL(m_signal) ::ClassDB::add_signal(get_class_static(), m_signal)
140-
#define ADD_PROPERTY(m_property, m_setter, m_getter) ::ClassDB::add_property(get_class_static(), m_property, _scs_create(m_setter), _scs_create(m_getter))
141-
#define ADD_PROPERTYI(m_property, m_setter, m_getter, m_index) ::ClassDB::add_property(get_class_static(), m_property, _scs_create(m_setter), _scs_create(m_getter), m_index)
140+
#define ADD_PROPERTY(m_property, m_setter, m_getter) ::ClassDB::add_property(get_class_static(), m_property, StringName(m_setter), StringName(m_getter))
141+
#define ADD_PROPERTYI(m_property, m_setter, m_getter, m_index) ::ClassDB::add_property(get_class_static(), m_property, StringName(m_setter), StringName(m_getter), m_index)
142142
#define ADD_PROPERTY_DEFAULT(m_property, m_default) ::ClassDB::set_property_default_value(get_class_static(), m_property, m_default)
143143
#define ADD_GROUP(m_name, m_prefix) ::ClassDB::add_property_group(get_class_static(), m_name, m_prefix)
144144
#define ADD_GROUP_INDENT(m_name, m_prefix, m_depth) ::ClassDB::add_property_group(get_class_static(), m_name, m_prefix, m_depth)
145145
#define ADD_SUBGROUP(m_name, m_prefix) ::ClassDB::add_property_subgroup(get_class_static(), m_name, m_prefix)
146146
#define ADD_SUBGROUP_INDENT(m_name, m_prefix, m_depth) ::ClassDB::add_property_subgroup(get_class_static(), m_name, m_prefix, m_depth)
147147
#define ADD_LINKED_PROPERTY(m_property, m_linked_property) ::ClassDB::add_linked_property(get_class_static(), m_property, m_linked_property)
148148

149-
#define ADD_ARRAY_COUNT(m_label, m_count_property, m_count_property_setter, m_count_property_getter, m_prefix) ClassDB::add_property_array_count(get_class_static(), m_label, m_count_property, _scs_create(m_count_property_setter), _scs_create(m_count_property_getter), m_prefix)
150-
#define ADD_ARRAY_COUNT_WITH_USAGE_FLAGS(m_label, m_count_property, m_count_property_setter, m_count_property_getter, m_prefix, m_property_usage_flags) ClassDB::add_property_array_count(get_class_static(), m_label, m_count_property, _scs_create(m_count_property_setter), _scs_create(m_count_property_getter), m_prefix, m_property_usage_flags)
149+
#define ADD_ARRAY_COUNT(m_label, m_count_property, m_count_property_setter, m_count_property_getter, m_prefix) ClassDB::add_property_array_count(get_class_static(), m_label, m_count_property, StringName(m_count_property_setter), StringName(m_count_property_getter), m_prefix)
150+
#define ADD_ARRAY_COUNT_WITH_USAGE_FLAGS(m_label, m_count_property, m_count_property_setter, m_count_property_getter, m_prefix, m_property_usage_flags) ClassDB::add_property_array_count(get_class_static(), m_label, m_count_property, StringName(m_count_property_setter), StringName(m_count_property_getter), m_prefix, m_property_usage_flags)
151151
#define ADD_ARRAY(m_array_path, m_prefix) ClassDB::add_property_array(get_class_static(), m_array_path, m_prefix)
152152

153153
// Helper macro to use with PROPERTY_HINT_ARRAY_TYPE for arrays of specific resources:

core/string/string_name.cpp

Lines changed: 7 additions & 102 deletions
Original file line numberDiff line numberDiff line change
@@ -33,40 +33,22 @@
3333
#include "core/os/os.h"
3434
#include "core/string/print_string.h"
3535

36-
StaticCString StaticCString::create(const char *p_ptr) {
37-
StaticCString scs;
38-
scs.ptr = p_ptr;
39-
return scs;
40-
}
41-
4236
bool StringName::_Data::operator==(const String &p_name) const {
43-
if (cname) {
44-
return p_name == cname;
45-
} else {
46-
return name == p_name;
47-
}
37+
return name == p_name;
4838
}
4939

5040
bool StringName::_Data::operator!=(const String &p_name) const {
5141
return !operator==(p_name);
5242
}
5343

5444
bool StringName::_Data::operator==(const char *p_name) const {
55-
if (cname) {
56-
return strcmp(cname, p_name) == 0;
57-
} else {
58-
return name == p_name;
59-
}
45+
return name == p_name;
6046
}
6147

6248
bool StringName::_Data::operator!=(const char *p_name) const {
6349
return !operator==(p_name);
6450
}
6551

66-
StringName _scs_create(const char *p_chr, bool p_static) {
67-
return (p_chr[0] ? StringName(StaticCString::create(p_chr), p_static) : StringName());
68-
}
69-
7052
void StringName::setup() {
7153
ERR_FAIL_COND(configured);
7254
for (int i = 0; i < STRING_TABLE_LEN; i++) {
@@ -115,9 +97,7 @@ void StringName::cleanup() {
11597
lost_strings++;
11698

11799
if (OS::get_singleton()->is_stdout_verbose()) {
118-
String dname = String(d->cname ? d->cname : d->name);
119-
120-
print_line(vformat("Orphan StringName: %s (static: %d, total: %d)", dname, d->static_count.get(), d->refcount.get()));
100+
print_line(vformat("Orphan StringName: %s (static: %d, total: %d)", d->name, d->static_count.get(), d->refcount.get()));
121101
}
122102
}
123103

@@ -138,11 +118,7 @@ void StringName::unref() {
138118
MutexLock lock(mutex);
139119

140120
if (CoreGlobals::leak_reporting_enabled && _data->static_count.get() > 0) {
141-
if (_data->cname) {
142-
ERR_PRINT("BUG: Unreferenced static string to 0: " + String(_data->cname));
143-
} else {
144-
ERR_PRINT("BUG: Unreferenced static string to 0: " + String(_data->name));
145-
}
121+
ERR_PRINT("BUG: Unreferenced static string to 0: " + _data->name);
146122
}
147123
if (_data->prev) {
148124
_data->prev->next = _data->next;
@@ -193,12 +169,7 @@ bool StringName::operator!=(const char *p_name) const {
193169

194170
char32_t StringName::operator[](int p_index) const {
195171
if (_data) {
196-
if (_data->cname) {
197-
CRASH_BAD_INDEX(p_index, static_cast<long>(strlen(_data->cname)));
198-
return _data->cname[p_index];
199-
} else {
200-
return _data->name[p_index];
201-
}
172+
return _data->name[p_index];
202173
}
203174

204175
CRASH_BAD_INDEX(p_index, 0);
@@ -207,23 +178,15 @@ char32_t StringName::operator[](int p_index) const {
207178

208179
int StringName::length() const {
209180
if (_data) {
210-
if (_data->cname) {
211-
return strlen(_data->cname);
212-
} else {
213-
return _data->name.length();
214-
}
181+
return _data->name.length();
215182
}
216183

217184
return 0;
218185
}
219186

220187
bool StringName::is_empty() const {
221188
if (_data) {
222-
if (_data->cname) {
223-
return _data->cname[0] == 0;
224-
} else {
225-
return _data->name.is_empty();
226-
}
189+
return _data->name.is_empty();
227190
}
228191

229192
return true;
@@ -302,7 +265,6 @@ StringName::StringName(const char *p_name, bool p_static) {
302265
_data->static_count.set(p_static ? 1 : 0);
303266
_data->hash = hash;
304267
_data->idx = idx;
305-
_data->cname = nullptr;
306268
_data->next = _table[idx];
307269
_data->prev = nullptr;
308270

@@ -319,62 +281,6 @@ StringName::StringName(const char *p_name, bool p_static) {
319281
_table[idx] = _data;
320282
}
321283

322-
StringName::StringName(const StaticCString &p_static_string, bool p_static) {
323-
_data = nullptr;
324-
325-
ERR_FAIL_COND(!configured);
326-
327-
ERR_FAIL_COND(!p_static_string.ptr || !p_static_string.ptr[0]);
328-
329-
const uint32_t hash = String::hash(p_static_string.ptr);
330-
const uint32_t idx = hash & STRING_TABLE_MASK;
331-
332-
MutexLock lock(mutex);
333-
_data = _table[idx];
334-
335-
while (_data) {
336-
// compare hash first
337-
if (_data->hash == hash && _data->operator==(p_static_string.ptr)) {
338-
break;
339-
}
340-
_data = _data->next;
341-
}
342-
343-
if (_data && _data->refcount.ref()) {
344-
// exists
345-
if (p_static) {
346-
_data->static_count.increment();
347-
}
348-
#ifdef DEBUG_ENABLED
349-
if (unlikely(debug_stringname)) {
350-
_data->debug_references++;
351-
}
352-
#endif
353-
return;
354-
}
355-
356-
_data = memnew(_Data);
357-
358-
_data->refcount.init();
359-
_data->static_count.set(p_static ? 1 : 0);
360-
_data->hash = hash;
361-
_data->idx = idx;
362-
_data->cname = p_static_string.ptr;
363-
_data->next = _table[idx];
364-
_data->prev = nullptr;
365-
#ifdef DEBUG_ENABLED
366-
if (unlikely(debug_stringname)) {
367-
// Keep in memory, force static.
368-
_data->refcount.ref();
369-
_data->static_count.increment();
370-
}
371-
#endif
372-
if (_table[idx]) {
373-
_table[idx]->prev = _data;
374-
}
375-
_table[idx] = _data;
376-
}
377-
378284
StringName::StringName(const String &p_name, bool p_static) {
379285
_data = nullptr;
380286

@@ -416,7 +322,6 @@ StringName::StringName(const String &p_name, bool p_static) {
416322
_data->static_count.set(p_static ? 1 : 0);
417323
_data->hash = hash;
418324
_data->idx = idx;
419-
_data->cname = nullptr;
420325
_data->next = _table[idx];
421326
_data->prev = nullptr;
422327
#ifdef DEBUG_ENABLED

0 commit comments

Comments
 (0)