You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-04 12:00:25 +00:00
GDScript: Fix MIN_INT not representable as numeric literal
This commit is contained in:
@@ -162,6 +162,24 @@ const char *GDScriptTokenizer::Token::get_name() const {
|
||||
return token_names[type];
|
||||
}
|
||||
|
||||
bool GDScriptTokenizer::Token::can_precede_bin_op() const {
|
||||
switch (type) {
|
||||
case IDENTIFIER:
|
||||
case LITERAL:
|
||||
case SELF:
|
||||
case BRACKET_CLOSE:
|
||||
case BRACE_CLOSE:
|
||||
case PARENTHESIS_CLOSE:
|
||||
case CONST_PI:
|
||||
case CONST_TAU:
|
||||
case CONST_INF:
|
||||
case CONST_NAN:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool GDScriptTokenizer::Token::is_identifier() const {
|
||||
// Note: Most keywords should not be recognized as identifiers.
|
||||
// These are only exceptions for stuff that already is on the engine's API.
|
||||
@@ -382,6 +400,7 @@ GDScriptTokenizer::Token GDScriptTokenizer::make_token(Token::Type p_type) {
|
||||
}
|
||||
}
|
||||
|
||||
last_token = token;
|
||||
return token;
|
||||
}
|
||||
|
||||
@@ -627,6 +646,7 @@ void GDScriptTokenizer::newline(bool p_make_token) {
|
||||
newline.leftmost_column = newline.start_column;
|
||||
newline.rightmost_column = newline.end_column;
|
||||
pending_newline = true;
|
||||
last_token = newline;
|
||||
last_newline = newline;
|
||||
}
|
||||
|
||||
@@ -643,6 +663,11 @@ GDScriptTokenizer::Token GDScriptTokenizer::number() {
|
||||
bool has_error = false;
|
||||
bool (*digit_check_func)(char32_t) = is_digit;
|
||||
|
||||
// Sign before hexadecimal or binary.
|
||||
if ((_peek(-1) == '+' || _peek(-1) == '-') && _peek() == '0') {
|
||||
_advance();
|
||||
}
|
||||
|
||||
if (_peek(-1) == '.') {
|
||||
has_decimal = true;
|
||||
} else if (_peek(-1) == '0') {
|
||||
@@ -1431,6 +1456,9 @@ GDScriptTokenizer::Token GDScriptTokenizer::scan() {
|
||||
if (_peek() == '=') {
|
||||
_advance();
|
||||
return make_token(Token::PLUS_EQUAL);
|
||||
} else if (is_digit(_peek()) && !last_token.can_precede_bin_op()) {
|
||||
// Number starting with '+'.
|
||||
return number();
|
||||
} else {
|
||||
return make_token(Token::PLUS);
|
||||
}
|
||||
@@ -1438,6 +1466,9 @@ GDScriptTokenizer::Token GDScriptTokenizer::scan() {
|
||||
if (_peek() == '=') {
|
||||
_advance();
|
||||
return make_token(Token::MINUS_EQUAL);
|
||||
} else if (is_digit(_peek()) && !last_token.can_precede_bin_op()) {
|
||||
// Number starting with '-'.
|
||||
return number();
|
||||
} else if (_peek() == '>') {
|
||||
_advance();
|
||||
return make_token(Token::FORWARD_ARROW);
|
||||
|
||||
Reference in New Issue
Block a user