Przeglądaj źródła

Merge pull request #12957 from bojidar-bg/12928-numeric-underscores

Allow underscores in GDScript numeric literals
Rémi Verschelde 7 lat temu
rodzic
commit
3002130a6d
2 zmienionych plików z 8 dodań i 4 usunięć
  1. 4 1
      modules/gdscript/gd_tokenizer.cpp
  2. 4 3
      scene/gui/text_edit.cpp

+ 4 - 1
modules/gdscript/gd_tokenizer.cpp

@@ -885,6 +885,9 @@ void GDTokenizerText::_advance() {
 								return;
 							}
 							sign_found = true;
+						} else if (GETCHAR(i) == '_') {
+							i++;
+							continue; // Included for readability, shouldn't be a part of the string
 						} else
 							break;
 
@@ -897,7 +900,7 @@ void GDTokenizerText::_advance() {
 						return;
 					}
 
-					INCPOS(str.length());
+					INCPOS(i);
 					if (hexa_found) {
 						int64_t val = str.hex_to_int64();
 						_make_constant(val);

+ 4 - 3
scene/gui/text_edit.cpp

@@ -894,17 +894,18 @@ void TextEdit::_notification(int p_what) {
 							is_hex_notation = false;
 						}
 
-						// check for dot or 'x' for hex notation in floating point number
-						if ((str[j] == '.' || str[j] == 'x') && !in_word && prev_is_number && !is_number) {
+						// check for dot or underscore or 'x' for hex notation in floating point number
+						if ((str[j] == '.' || str[j] == 'x' || str[j] == '_') && !in_word && prev_is_number && !is_number) {
 							is_number = true;
 							is_symbol = false;
+							is_char = false;
 
 							if (str[j] == 'x' && str[j - 1] == '0') {
 								is_hex_notation = true;
 							}
 						}
 
-						if (!in_word && _is_char(str[j])) {
+						if (!in_word && _is_char(str[j]) && !is_number) {
 							in_word = true;
 						}