summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/string/ustring.cpp24
-rw-r--r--tests/core/string/test_string.h2
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");