diff options
author | George Marques <george@gmarqu.es> | 2020-08-31 20:25:15 -0300 |
---|---|---|
committer | George Marques <george@gmarqu.es> | 2020-09-01 09:26:28 -0300 |
commit | 164cc8705b5eab994df3543cf70a62ce1589d9de (patch) | |
tree | 71d24050841b11f9d13854b4d6a7fbc8c59403c6 /modules | |
parent | f8fa5e47386d7fff7e8a08c31716c12e4bc0db28 (diff) |
GDScript: Check for missing exponent when parsing numbers
Also forbid multiple underscores in a row as numeric separator.
Diffstat (limited to 'modules')
-rw-r--r-- | modules/gdscript/gdscript_tokenizer.cpp | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/modules/gdscript/gdscript_tokenizer.cpp b/modules/gdscript/gdscript_tokenizer.cpp index 737e920693..0145ac39ff 100644 --- a/modules/gdscript/gdscript_tokenizer.cpp +++ b/modules/gdscript/gdscript_tokenizer.cpp @@ -621,7 +621,19 @@ GDScriptTokenizer::Token GDScriptTokenizer::number() { } // Allow '_' to be used in a number, for readability. + bool previous_was_underscore = false; while (digit_check_func(_peek()) || _peek() == '_') { + if (_peek() == '_') { + if (previous_was_underscore) { + Token error = make_error(R"(Only one underscore can be used as a numeric separator.)"); + error.start_column = column; + error.leftmost_column = column; + error.end_column = column + 1; + error.rightmost_column = column + 1; + push_error(error); + } + previous_was_underscore = true; + } _advance(); } @@ -672,7 +684,27 @@ GDScriptTokenizer::Token GDScriptTokenizer::number() { _advance(); } // Consume exponent digits. + if (!_is_digit(_peek())) { + Token error = make_error(R"(Expected exponent value after "e".)"); + error.start_column = column; + error.leftmost_column = column; + error.end_column = column + 1; + error.rightmost_column = column + 1; + push_error(error); + } + previous_was_underscore = false; while (_is_digit(_peek()) || _peek() == '_') { + if (_peek() == '_') { + if (previous_was_underscore) { + Token error = make_error(R"(Only one underscore can be used as a numeric separator.)"); + error.start_column = column; + error.leftmost_column = column; + error.end_column = column + 1; + error.rightmost_column = column + 1; + push_error(error); + } + previous_was_underscore = true; + } _advance(); } } |