Fix is_valid_float, Variant parser, Expression parser, script highlighter, and TextServer not handing capital E in scientific notation.
This commit is contained in:
@ -359,7 +359,7 @@ Error Expression::_get_token(Token &r_token) {
|
||||
} else if (c == '.') {
|
||||
reading = READING_DEC;
|
||||
is_float = true;
|
||||
} else if (c == 'e') {
|
||||
} else if (c == 'e' || c == 'E') {
|
||||
reading = READING_EXP;
|
||||
is_float = true;
|
||||
} else {
|
||||
@ -385,7 +385,7 @@ Error Expression::_get_token(Token &r_token) {
|
||||
} break;
|
||||
case READING_DEC: {
|
||||
if (is_digit(c)) {
|
||||
} else if (c == 'e') {
|
||||
} else if (c == 'e' || c == 'E') {
|
||||
reading = READING_EXP;
|
||||
} else {
|
||||
reading = READING_DONE;
|
||||
|
||||
@ -4964,17 +4964,18 @@ bool String::is_valid_float() const {
|
||||
bool numbers_found = false;
|
||||
|
||||
for (int i = from; i < len; i++) {
|
||||
if (is_digit(operator[](i))) {
|
||||
const char32_t c = operator[](i);
|
||||
if (is_digit(c)) {
|
||||
if (exponent_found) {
|
||||
exponent_values_found = true;
|
||||
} else {
|
||||
numbers_found = true;
|
||||
}
|
||||
} else if (numbers_found && !exponent_found && operator[](i) == 'e') {
|
||||
} else if (numbers_found && !exponent_found && (c == 'e' || c == 'E')) {
|
||||
exponent_found = true;
|
||||
} else if (!period_found && !exponent_found && operator[](i) == '.') {
|
||||
} else if (!period_found && !exponent_found && c == '.') {
|
||||
period_found = true;
|
||||
} else if ((operator[](i) == '-' || operator[](i) == '+') && exponent_found && !exponent_values_found && !sign_found) {
|
||||
} else if ((c == '-' || c == '+') && exponent_found && !exponent_values_found && !sign_found) {
|
||||
sign_found = true;
|
||||
} else {
|
||||
return false; // no start with number plz
|
||||
|
||||
@ -441,7 +441,7 @@ Error VariantParser::get_token(Stream *p_stream, Token &r_token, int &line, Stri
|
||||
} else if (c == '.') {
|
||||
reading = READING_DEC;
|
||||
is_float = true;
|
||||
} else if (c == 'e') {
|
||||
} else if (c == 'e' || c == 'E') {
|
||||
reading = READING_EXP;
|
||||
is_float = true;
|
||||
} else {
|
||||
@ -451,7 +451,7 @@ Error VariantParser::get_token(Stream *p_stream, Token &r_token, int &line, Stri
|
||||
} break;
|
||||
case READING_DEC: {
|
||||
if (is_digit(c)) {
|
||||
} else if (c == 'e') {
|
||||
} else if (c == 'e' || c == 'E') {
|
||||
reading = READING_EXP;
|
||||
} else {
|
||||
reading = READING_DONE;
|
||||
@ -1962,7 +1962,7 @@ Error VariantWriter::write(const Variant &p_variant, StoreStringFunc p_store_str
|
||||
case Variant::FLOAT: {
|
||||
String s = rtos_fix(p_variant.operator double());
|
||||
if (s != "inf" && s != "inf_neg" && s != "nan") {
|
||||
if (!s.contains_char('.') && !s.contains_char('e')) {
|
||||
if (!s.contains_char('.') && !s.contains_char('e') && !s.contains_char('E')) {
|
||||
s += ".0";
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user