py/lexer: Properly classify floats that look like hex numbers.
Eg 0e0 almost looks like a hex number but in fact is a float.
This commit is contained in:
parent
0be3c70cd8
commit
2b000474d9
@ -105,8 +105,9 @@ STATIC bool is_following_digit(mp_lexer_t *lex) {
|
|||||||
return unichar_isdigit(lex->chr1);
|
return unichar_isdigit(lex->chr1);
|
||||||
}
|
}
|
||||||
|
|
||||||
STATIC bool is_following_letter(mp_lexer_t *lex) {
|
STATIC bool is_following_base_char(mp_lexer_t *lex) {
|
||||||
return unichar_isalpha(lex->chr1);
|
const unichar chr1 = lex->chr1 | 0x20;
|
||||||
|
return chr1 == 'b' || chr1 == 'o' || chr1 == 'x';
|
||||||
}
|
}
|
||||||
|
|
||||||
STATIC bool is_following_odigit(mp_lexer_t *lex) {
|
STATIC bool is_following_odigit(mp_lexer_t *lex) {
|
||||||
@ -541,7 +542,7 @@ STATIC void mp_lexer_next_token_into(mp_lexer_t *lex, bool first_token) {
|
|||||||
lex->tok_kind = MP_TOKEN_FLOAT_OR_IMAG;
|
lex->tok_kind = MP_TOKEN_FLOAT_OR_IMAG;
|
||||||
} else {
|
} else {
|
||||||
lex->tok_kind = MP_TOKEN_INTEGER;
|
lex->tok_kind = MP_TOKEN_INTEGER;
|
||||||
if (is_char(lex, '0') && is_following_letter(lex)) {
|
if (is_char(lex, '0') && is_following_base_char(lex)) {
|
||||||
forced_integer = true;
|
forced_integer = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,9 @@
|
|||||||
print(.12)
|
print(.12)
|
||||||
print(1.)
|
print(1.)
|
||||||
print(1.2)
|
print(1.2)
|
||||||
|
print(0e0)
|
||||||
|
print(0e+0)
|
||||||
|
print(0e-0)
|
||||||
|
|
||||||
# float construction
|
# float construction
|
||||||
print(float(1.2))
|
print(float(1.2))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user