diff options
author | Alfonso J. Ramos <theraot@gmail.com> | 2023-10-04 07:42:39 -0500 |
---|---|---|
committer | Theraot <Theraot@gmail.com> | 2023-10-04 08:05:04 -0500 |
commit | 5cd7ca0ccc4f67d41a148c416c78c77074cfc8b4 (patch) | |
tree | c8e4007dccf4f907be231d281ee6e6253d14b340 | |
parent | f5696c311cdb09e0a34fa4ba7ef5d2524c515b89 (diff) | |
download | redot-engine-5cd7ca0ccc4f67d41a148c416c78c77074cfc8b4.tar.gz |
Do not replace starting digit with underscore when making identifier
-rw-r--r-- | core/string/ustring.cpp | 24 | ||||
-rw-r--r-- | tests/core/string/test_string.h | 2 |
2 files changed, 14 insertions, 12 deletions
diff --git a/core/string/ustring.cpp b/core/string/ustring.cpp index 5a42a3af12..9be7c04158 100644 --- a/core/string/ustring.cpp +++ b/core/string/ustring.cpp @@ -3974,24 +3974,22 @@ bool String::is_absolute_path() const { } } -static _FORCE_INLINE_ bool _is_valid_identifier_bit(int p_index, char32_t p_char) { - if (p_index == 0 && is_digit(p_char)) { - return false; // No start with number plz. - } - return is_ascii_identifier_char(p_char); -} - String String::validate_identifier() const { if (is_empty()) { return "_"; // Empty string is not a valid identifier; } - String result = *this; + String result; + if (is_digit(operator[](0))) { + result = "_" + *this; + } else { + result = *this; + } + int len = result.length(); char32_t *buffer = result.ptrw(); - for (int i = 0; i < len; i++) { - if (!_is_valid_identifier_bit(i, buffer[i])) { + if (!is_ascii_identifier_char(buffer[i])) { buffer[i] = '_'; } } @@ -4006,10 +4004,14 @@ bool String::is_valid_identifier() const { return false; } + if (is_digit(operator[](0))) { + return false; + } + const char32_t *str = &operator[](0); for (int i = 0; i < len; i++) { - if (!_is_valid_identifier_bit(i, str[i])) { + if (!is_ascii_identifier_char(str[i])) { return false; } } diff --git a/tests/core/string/test_string.h b/tests/core/string/test_string.h index c10ad6e13d..02349aedc0 100644 --- a/tests/core/string/test_string.h +++ b/tests/core/string/test_string.h @@ -1716,7 +1716,7 @@ TEST_CASE("[String] validate_identifier") { CHECK(empty_string.validate_identifier() == "_"); String numeric_only = "12345"; - CHECK(numeric_only.validate_identifier() == "_2345"); + CHECK(numeric_only.validate_identifier() == "_12345"); String name_with_spaces = "Name with spaces"; CHECK(name_with_spaces.validate_identifier() == "Name_with_spaces"); |