Skip to content

Commit 2fe38d3

Browse files
author
Jonas Schievink
committed
Indicate the number of float tokens in the first token
1 parent 34dc8e9 commit 2fe38d3

File tree

16 files changed

+194
-44
lines changed

16 files changed

+194
-44
lines changed

crates/parser/src/grammar.rs

+9-2
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ mod generic_params;
3939
mod types;
4040

4141
use crate::{
42+
grammar::expressions::FLOAT_LITERAL_FIRST,
4243
parser::{CompletedMarker, Marker, Parser},
4344
SyntaxKind::{self, *},
4445
TokenSet, T,
@@ -318,9 +319,15 @@ fn name_ref(p: &mut Parser) {
318319
}
319320

320321
fn name_ref_or_index(p: &mut Parser) {
321-
assert!(p.at(IDENT) || p.at(INT_NUMBER) || p.at(FLOAT_NUMBER_PART));
322+
assert!(
323+
p.at(IDENT) || p.at(INT_NUMBER) || p.at(FLOAT_NUMBER_PART) || p.at_ts(FLOAT_LITERAL_FIRST)
324+
);
322325
let m = p.start();
323-
p.bump_any();
326+
if p.at_ts(FLOAT_LITERAL_FIRST) {
327+
p.bump_remap(FLOAT_NUMBER_PART);
328+
} else {
329+
p.bump_any();
330+
}
324331
m.complete(p, NAME_REF);
325332
}
326333

crates/parser/src/grammar/expressions.rs

+5-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ mod atom;
33
use super::*;
44

55
pub(crate) use self::atom::{block_expr, match_arm_list};
6-
pub(super) use self::atom::{float_literal, literal, LITERAL_FIRST};
6+
pub(super) use self::atom::{float_literal, literal, FLOAT_LITERAL_FIRST, LITERAL_FIRST};
77

88
#[derive(PartialEq, Eq)]
99
pub(super) enum Semicolon {
@@ -452,6 +452,9 @@ fn index_expr(p: &mut Parser, lhs: CompletedMarker) -> CompletedMarker {
452452
// fn foo() {
453453
// x.foo();
454454
// y.bar::<T>(1, 2,);
455+
//
456+
// 0e0.sin();
457+
// 0e0f32.sin();
455458
// }
456459
fn method_call_expr(p: &mut Parser, lhs: CompletedMarker) -> CompletedMarker {
457460
assert!(p.at(T![.]) && p.nth(1) == IDENT && (p.nth(2) == T!['('] || p.nth_at(2, T![::])));
@@ -477,7 +480,7 @@ fn field_expr(p: &mut Parser, lhs: CompletedMarker) -> CompletedMarker {
477480
assert!(p.at(T![.]));
478481
let m = lhs.precede(p);
479482
p.bump(T![.]);
480-
if p.at(IDENT) || p.at(INT_NUMBER) || p.at(FLOAT_NUMBER_PART) {
483+
if p.at(IDENT) || p.at(INT_NUMBER) || p.at(FLOAT_NUMBER_PART) || p.at_ts(FLOAT_LITERAL_FIRST) {
481484
name_ref_or_index(p);
482485
} else {
483486
p.error("expected field name or number");

crates/parser/src/grammar/expressions/atom.rs

+28-8
Original file line numberDiff line numberDiff line change
@@ -17,19 +17,24 @@ pub(crate) const LITERAL_FIRST: TokenSet = TokenSet::new(&[
1717
T![true],
1818
T![false],
1919
INT_NUMBER,
20-
FLOAT_NUMBER_PART,
20+
FLOAT_NUMBER_START_0,
21+
FLOAT_NUMBER_START_1,
22+
FLOAT_NUMBER_START_2,
2123
BYTE,
2224
CHAR,
2325
STRING,
2426
BYTE_STRING,
2527
]);
2628

29+
pub(crate) const FLOAT_LITERAL_FIRST: TokenSet =
30+
TokenSet::new(&[FLOAT_NUMBER_START_0, FLOAT_NUMBER_START_1, FLOAT_NUMBER_START_2]);
31+
2732
pub(crate) fn literal(p: &mut Parser) -> Option<CompletedMarker> {
2833
if !p.at_ts(LITERAL_FIRST) {
2934
return None;
3035
}
3136
let m = p.start();
32-
if p.at(FLOAT_NUMBER_PART) {
37+
if p.at_ts(FLOAT_LITERAL_FIRST) {
3338
float_literal(p);
3439
} else {
3540
// Everything else is just one token.
@@ -38,15 +43,30 @@ pub(crate) fn literal(p: &mut Parser) -> Option<CompletedMarker> {
3843
Some(m.complete(p, LITERAL))
3944
}
4045

46+
// test float_literal
47+
// fn f() {
48+
// 0.0;
49+
// 1.;
50+
// 0e0;
51+
// 0e0f32;
52+
// 1.23f64;
53+
// }
4154
pub(crate) fn float_literal(p: &mut Parser) {
42-
// Floats can be up to 3 tokens: 2 `FLOAT_NUMBER_PART`s separated by 1 `DOT`
55+
// Floats can be up to 3 tokens. The first token indicates how many there are.
56+
// We remap the first token to `FLOAT_NUMBER_PART` so that no subsequent code has to deal with
57+
// this awful, awful hack.
4358
let f = p.start();
44-
p.bump(FLOAT_NUMBER_PART);
45-
if p.at(DOT) {
59+
if p.at(FLOAT_NUMBER_START_0) {
60+
p.bump_remap(FLOAT_NUMBER_PART);
61+
} else if p.at(FLOAT_NUMBER_START_1) {
62+
p.bump_remap(FLOAT_NUMBER_PART);
4663
p.bump(DOT);
47-
if p.at(FLOAT_NUMBER_PART) {
48-
p.bump(FLOAT_NUMBER_PART);
49-
}
64+
} else if p.at(FLOAT_NUMBER_START_2) {
65+
p.bump_remap(FLOAT_NUMBER_PART);
66+
p.bump(DOT);
67+
p.bump(FLOAT_NUMBER_PART);
68+
} else {
69+
unreachable!();
5070
}
5171
f.complete(p, FLOAT_LITERAL);
5272
}

crates/parser/src/grammar/items.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -457,7 +457,7 @@ pub(crate) fn token_tree(p: &mut Parser) {
457457
return;
458458
}
459459
T![')'] | T![']'] => p.err_and_bump("unmatched brace"),
460-
FLOAT_NUMBER_PART => {
460+
FLOAT_NUMBER_START_0 | FLOAT_NUMBER_START_1 | FLOAT_NUMBER_START_2 => {
461461
float_literal(p);
462462
}
463463
_ => p.bump_any(),

crates/parser/src/lexed_str.rs

+9-4
Original file line numberDiff line numberDiff line change
@@ -240,19 +240,24 @@ impl<'a> Converter<'a> {
240240

241241
// In order to correctly parse nested tuple accesses like `tup.0.0`, where the `0.0`
242242
// is lexed as a float, we split floats that contain a `.` into 3 tokens.
243+
// To ensure that later stages can always reconstruct the token correctly, the first
244+
// token in the sequence indicates the number of following tokens that are part of
245+
// the float literal.
243246
if let Some((before, after)) = token_text.split_once('.') {
244247
let err = if err.is_empty() { None } else { Some(err) };
245-
if !before.is_empty() {
246-
self.push(FLOAT_NUMBER_PART, before.len(), None);
247-
}
248+
249+
assert!(!before.is_empty());
250+
let tok =
251+
if after.is_empty() { FLOAT_NUMBER_START_1 } else { FLOAT_NUMBER_START_2 };
252+
self.push(tok, before.len(), None);
248253
self.push(DOT, 1, None);
249254
if !after.is_empty() {
250255
self.push(FLOAT_NUMBER_PART, after.len(), err);
251256
}
252257
return;
253258
}
254259

255-
FLOAT_NUMBER_PART
260+
FLOAT_NUMBER_START_0
256261
}
257262
rustc_lexer::LiteralKind::Char { terminated } => {
258263
if !terminated {

crates/parser/src/syntax_kind/generated.rs

+6-2
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,9 @@ pub enum SyntaxKind {
110110
RAW_KW,
111111
MACRO_RULES_KW,
112112
INT_NUMBER,
113+
FLOAT_NUMBER_START_0,
114+
FLOAT_NUMBER_START_1,
115+
FLOAT_NUMBER_START_2,
113116
FLOAT_NUMBER_PART,
114117
CHAR,
115118
BYTE,
@@ -287,7 +290,8 @@ impl SyntaxKind {
287290
}
288291
pub fn is_literal(self) -> bool {
289292
match self {
290-
INT_NUMBER | FLOAT_NUMBER_PART | CHAR | BYTE | STRING | BYTE_STRING => true,
293+
INT_NUMBER | FLOAT_NUMBER_START_0 | FLOAT_NUMBER_START_1 | FLOAT_NUMBER_START_2
294+
| FLOAT_NUMBER_PART | CHAR | BYTE | STRING | BYTE_STRING => true,
291295
_ => false,
292296
}
293297
}
@@ -387,5 +391,5 @@ impl SyntaxKind {
387391
}
388392
}
389393
#[macro_export]
390-
macro_rules ! T { [;] => { $ crate :: SyntaxKind :: SEMICOLON } ; [,] => { $ crate :: SyntaxKind :: COMMA } ; ['('] => { $ crate :: SyntaxKind :: L_PAREN } ; [')'] => { $ crate :: SyntaxKind :: R_PAREN } ; ['{'] => { $ crate :: SyntaxKind :: L_CURLY } ; ['}'] => { $ crate :: SyntaxKind :: R_CURLY } ; ['['] => { $ crate :: SyntaxKind :: L_BRACK } ; [']'] => { $ crate :: SyntaxKind :: R_BRACK } ; [<] => { $ crate :: SyntaxKind :: L_ANGLE } ; [>] => { $ crate :: SyntaxKind :: R_ANGLE } ; [@] => { $ crate :: SyntaxKind :: AT } ; [#] => { $ crate :: SyntaxKind :: POUND } ; [~] => { $ crate :: SyntaxKind :: TILDE } ; [?] => { $ crate :: SyntaxKind :: QUESTION } ; [$] => { $ crate :: SyntaxKind :: DOLLAR } ; [&] => { $ crate :: SyntaxKind :: AMP } ; [|] => { $ crate :: SyntaxKind :: PIPE } ; [+] => { $ crate :: SyntaxKind :: PLUS } ; [*] => { $ crate :: SyntaxKind :: STAR } ; [/] => { $ crate :: SyntaxKind :: SLASH } ; [^] => { $ crate :: SyntaxKind :: CARET } ; [%] => { $ crate :: SyntaxKind :: PERCENT } ; [_] => { $ crate :: SyntaxKind :: UNDERSCORE } ; [.] => { $ crate :: SyntaxKind :: DOT } ; [..] => { $ crate :: SyntaxKind :: DOT2 } ; [...] => { $ crate :: SyntaxKind :: DOT3 } ; [..=] => { $ crate :: SyntaxKind :: DOT2EQ } ; [:] => { $ crate :: SyntaxKind :: COLON } ; [::] => { $ crate :: SyntaxKind :: COLON2 } ; [=] => { $ crate :: SyntaxKind :: EQ } ; [==] => { $ crate :: SyntaxKind :: EQ2 } ; [=>] => { $ crate :: SyntaxKind :: FAT_ARROW } ; [!] => { $ crate :: SyntaxKind :: BANG } ; [!=] => { $ crate :: SyntaxKind :: NEQ } ; [-] => { $ crate :: SyntaxKind :: MINUS } ; [->] => { $ crate :: SyntaxKind :: THIN_ARROW } ; [<=] => { $ crate :: SyntaxKind :: LTEQ } ; [>=] => { $ crate :: SyntaxKind :: GTEQ } ; [+=] => { $ crate :: SyntaxKind :: PLUSEQ } ; [-=] => { $ crate :: SyntaxKind :: MINUSEQ } ; [|=] => { $ crate :: SyntaxKind :: PIPEEQ } ; [&=] => { $ crate :: SyntaxKind :: AMPEQ } ; [^=] => { $ crate :: SyntaxKind :: CARETEQ } ; [/=] => { $ crate :: SyntaxKind :: SLASHEQ } ; [*=] => { $ crate :: SyntaxKind :: STAREQ } ; [%=] => { $ crate :: SyntaxKind :: PERCENTEQ } ; [&&] => { $ crate :: SyntaxKind :: AMP2 } ; [||] => { $ crate :: SyntaxKind :: PIPE2 } ; [<<] => { $ crate :: SyntaxKind :: SHL } ; [>>] => { $ crate :: SyntaxKind :: SHR } ; [<<=] => { $ crate :: SyntaxKind :: SHLEQ } ; [>>=] => { $ crate :: SyntaxKind :: SHREQ } ; [as] => { $ crate :: SyntaxKind :: AS_KW } ; [async] => { $ crate :: SyntaxKind :: ASYNC_KW } ; [await] => { $ crate :: SyntaxKind :: AWAIT_KW } ; [box] => { $ crate :: SyntaxKind :: BOX_KW } ; [break] => { $ crate :: SyntaxKind :: BREAK_KW } ; [const] => { $ crate :: SyntaxKind :: CONST_KW } ; [continue] => { $ crate :: SyntaxKind :: CONTINUE_KW } ; [crate] => { $ crate :: SyntaxKind :: CRATE_KW } ; [dyn] => { $ crate :: SyntaxKind :: DYN_KW } ; [else] => { $ crate :: SyntaxKind :: ELSE_KW } ; [enum] => { $ crate :: SyntaxKind :: ENUM_KW } ; [extern] => { $ crate :: SyntaxKind :: EXTERN_KW } ; [false] => { $ crate :: SyntaxKind :: FALSE_KW } ; [fn] => { $ crate :: SyntaxKind :: FN_KW } ; [for] => { $ crate :: SyntaxKind :: FOR_KW } ; [if] => { $ crate :: SyntaxKind :: IF_KW } ; [impl] => { $ crate :: SyntaxKind :: IMPL_KW } ; [in] => { $ crate :: SyntaxKind :: IN_KW } ; [let] => { $ crate :: SyntaxKind :: LET_KW } ; [loop] => { $ crate :: SyntaxKind :: LOOP_KW } ; [macro] => { $ crate :: SyntaxKind :: MACRO_KW } ; [match] => { $ crate :: SyntaxKind :: MATCH_KW } ; [mod] => { $ crate :: SyntaxKind :: MOD_KW } ; [move] => { $ crate :: SyntaxKind :: MOVE_KW } ; [mut] => { $ crate :: SyntaxKind :: MUT_KW } ; [pub] => { $ crate :: SyntaxKind :: PUB_KW } ; [ref] => { $ crate :: SyntaxKind :: REF_KW } ; [return] => { $ crate :: SyntaxKind :: RETURN_KW } ; [self] => { $ crate :: SyntaxKind :: SELF_KW } ; [Self] => { $ crate :: SyntaxKind :: SELF_TYPE_KW } ; [static] => { $ crate :: SyntaxKind :: STATIC_KW } ; [struct] => { $ crate :: SyntaxKind :: STRUCT_KW } ; [super] => { $ crate :: SyntaxKind :: SUPER_KW } ; [trait] => { $ crate :: SyntaxKind :: TRAIT_KW } ; [true] => { $ crate :: SyntaxKind :: TRUE_KW } ; [try] => { $ crate :: SyntaxKind :: TRY_KW } ; [type] => { $ crate :: SyntaxKind :: TYPE_KW } ; [unsafe] => { $ crate :: SyntaxKind :: UNSAFE_KW } ; [use] => { $ crate :: SyntaxKind :: USE_KW } ; [where] => { $ crate :: SyntaxKind :: WHERE_KW } ; [while] => { $ crate :: SyntaxKind :: WHILE_KW } ; [yield] => { $ crate :: SyntaxKind :: YIELD_KW } ; [auto] => { $ crate :: SyntaxKind :: AUTO_KW } ; [default] => { $ crate :: SyntaxKind :: DEFAULT_KW } ; [existential] => { $ crate :: SyntaxKind :: EXISTENTIAL_KW } ; [union] => { $ crate :: SyntaxKind :: UNION_KW } ; [raw] => { $ crate :: SyntaxKind :: RAW_KW } ; [macro_rules] => { $ crate :: SyntaxKind :: MACRO_RULES_KW } ; [lifetime_ident] => { $ crate :: SyntaxKind :: LIFETIME_IDENT } ; [ident] => { $ crate :: SyntaxKind :: IDENT } ; [shebang] => { $ crate :: SyntaxKind :: SHEBANG } ; [float_number_part] => { $ crate :: SyntaxKind :: FLOAT_NUMBER_PART } ; }
394+
macro_rules ! T { [;] => { $ crate :: SyntaxKind :: SEMICOLON } ; [,] => { $ crate :: SyntaxKind :: COMMA } ; ['('] => { $ crate :: SyntaxKind :: L_PAREN } ; [')'] => { $ crate :: SyntaxKind :: R_PAREN } ; ['{'] => { $ crate :: SyntaxKind :: L_CURLY } ; ['}'] => { $ crate :: SyntaxKind :: R_CURLY } ; ['['] => { $ crate :: SyntaxKind :: L_BRACK } ; [']'] => { $ crate :: SyntaxKind :: R_BRACK } ; [<] => { $ crate :: SyntaxKind :: L_ANGLE } ; [>] => { $ crate :: SyntaxKind :: R_ANGLE } ; [@] => { $ crate :: SyntaxKind :: AT } ; [#] => { $ crate :: SyntaxKind :: POUND } ; [~] => { $ crate :: SyntaxKind :: TILDE } ; [?] => { $ crate :: SyntaxKind :: QUESTION } ; [$] => { $ crate :: SyntaxKind :: DOLLAR } ; [&] => { $ crate :: SyntaxKind :: AMP } ; [|] => { $ crate :: SyntaxKind :: PIPE } ; [+] => { $ crate :: SyntaxKind :: PLUS } ; [*] => { $ crate :: SyntaxKind :: STAR } ; [/] => { $ crate :: SyntaxKind :: SLASH } ; [^] => { $ crate :: SyntaxKind :: CARET } ; [%] => { $ crate :: SyntaxKind :: PERCENT } ; [_] => { $ crate :: SyntaxKind :: UNDERSCORE } ; [.] => { $ crate :: SyntaxKind :: DOT } ; [..] => { $ crate :: SyntaxKind :: DOT2 } ; [...] => { $ crate :: SyntaxKind :: DOT3 } ; [..=] => { $ crate :: SyntaxKind :: DOT2EQ } ; [:] => { $ crate :: SyntaxKind :: COLON } ; [::] => { $ crate :: SyntaxKind :: COLON2 } ; [=] => { $ crate :: SyntaxKind :: EQ } ; [==] => { $ crate :: SyntaxKind :: EQ2 } ; [=>] => { $ crate :: SyntaxKind :: FAT_ARROW } ; [!] => { $ crate :: SyntaxKind :: BANG } ; [!=] => { $ crate :: SyntaxKind :: NEQ } ; [-] => { $ crate :: SyntaxKind :: MINUS } ; [->] => { $ crate :: SyntaxKind :: THIN_ARROW } ; [<=] => { $ crate :: SyntaxKind :: LTEQ } ; [>=] => { $ crate :: SyntaxKind :: GTEQ } ; [+=] => { $ crate :: SyntaxKind :: PLUSEQ } ; [-=] => { $ crate :: SyntaxKind :: MINUSEQ } ; [|=] => { $ crate :: SyntaxKind :: PIPEEQ } ; [&=] => { $ crate :: SyntaxKind :: AMPEQ } ; [^=] => { $ crate :: SyntaxKind :: CARETEQ } ; [/=] => { $ crate :: SyntaxKind :: SLASHEQ } ; [*=] => { $ crate :: SyntaxKind :: STAREQ } ; [%=] => { $ crate :: SyntaxKind :: PERCENTEQ } ; [&&] => { $ crate :: SyntaxKind :: AMP2 } ; [||] => { $ crate :: SyntaxKind :: PIPE2 } ; [<<] => { $ crate :: SyntaxKind :: SHL } ; [>>] => { $ crate :: SyntaxKind :: SHR } ; [<<=] => { $ crate :: SyntaxKind :: SHLEQ } ; [>>=] => { $ crate :: SyntaxKind :: SHREQ } ; [as] => { $ crate :: SyntaxKind :: AS_KW } ; [async] => { $ crate :: SyntaxKind :: ASYNC_KW } ; [await] => { $ crate :: SyntaxKind :: AWAIT_KW } ; [box] => { $ crate :: SyntaxKind :: BOX_KW } ; [break] => { $ crate :: SyntaxKind :: BREAK_KW } ; [const] => { $ crate :: SyntaxKind :: CONST_KW } ; [continue] => { $ crate :: SyntaxKind :: CONTINUE_KW } ; [crate] => { $ crate :: SyntaxKind :: CRATE_KW } ; [dyn] => { $ crate :: SyntaxKind :: DYN_KW } ; [else] => { $ crate :: SyntaxKind :: ELSE_KW } ; [enum] => { $ crate :: SyntaxKind :: ENUM_KW } ; [extern] => { $ crate :: SyntaxKind :: EXTERN_KW } ; [false] => { $ crate :: SyntaxKind :: FALSE_KW } ; [fn] => { $ crate :: SyntaxKind :: FN_KW } ; [for] => { $ crate :: SyntaxKind :: FOR_KW } ; [if] => { $ crate :: SyntaxKind :: IF_KW } ; [impl] => { $ crate :: SyntaxKind :: IMPL_KW } ; [in] => { $ crate :: SyntaxKind :: IN_KW } ; [let] => { $ crate :: SyntaxKind :: LET_KW } ; [loop] => { $ crate :: SyntaxKind :: LOOP_KW } ; [macro] => { $ crate :: SyntaxKind :: MACRO_KW } ; [match] => { $ crate :: SyntaxKind :: MATCH_KW } ; [mod] => { $ crate :: SyntaxKind :: MOD_KW } ; [move] => { $ crate :: SyntaxKind :: MOVE_KW } ; [mut] => { $ crate :: SyntaxKind :: MUT_KW } ; [pub] => { $ crate :: SyntaxKind :: PUB_KW } ; [ref] => { $ crate :: SyntaxKind :: REF_KW } ; [return] => { $ crate :: SyntaxKind :: RETURN_KW } ; [self] => { $ crate :: SyntaxKind :: SELF_KW } ; [Self] => { $ crate :: SyntaxKind :: SELF_TYPE_KW } ; [static] => { $ crate :: SyntaxKind :: STATIC_KW } ; [struct] => { $ crate :: SyntaxKind :: STRUCT_KW } ; [super] => { $ crate :: SyntaxKind :: SUPER_KW } ; [trait] => { $ crate :: SyntaxKind :: TRAIT_KW } ; [true] => { $ crate :: SyntaxKind :: TRUE_KW } ; [try] => { $ crate :: SyntaxKind :: TRY_KW } ; [type] => { $ crate :: SyntaxKind :: TYPE_KW } ; [unsafe] => { $ crate :: SyntaxKind :: UNSAFE_KW } ; [use] => { $ crate :: SyntaxKind :: USE_KW } ; [where] => { $ crate :: SyntaxKind :: WHERE_KW } ; [while] => { $ crate :: SyntaxKind :: WHILE_KW } ; [yield] => { $ crate :: SyntaxKind :: YIELD_KW } ; [auto] => { $ crate :: SyntaxKind :: AUTO_KW } ; [default] => { $ crate :: SyntaxKind :: DEFAULT_KW } ; [existential] => { $ crate :: SyntaxKind :: EXISTENTIAL_KW } ; [union] => { $ crate :: SyntaxKind :: UNION_KW } ; [raw] => { $ crate :: SyntaxKind :: RAW_KW } ; [macro_rules] => { $ crate :: SyntaxKind :: MACRO_RULES_KW } ; [lifetime_ident] => { $ crate :: SyntaxKind :: LIFETIME_IDENT } ; [ident] => { $ crate :: SyntaxKind :: IDENT } ; [shebang] => { $ crate :: SyntaxKind :: SHEBANG } ; [float_number_part] => { $ crate :: SyntaxKind :: FLOAT_NUMBER_PART } ; [float_number_start_0] => { $ crate :: SyntaxKind :: FLOAT_NUMBER_START_0 } ; [float_number_start_1] => { $ crate :: SyntaxKind :: FLOAT_NUMBER_START_1 } ; [float_number_start_2] => { $ crate :: SyntaxKind :: FLOAT_NUMBER_START_2 } ; }
391395
pub use T;
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
1-
FLOAT_NUMBER_PART "0e" error: Missing digits after the exponent symbol
1+
FLOAT_NUMBER_START_0 "0e" error: Missing digits after the exponent symbol
22
WHITESPACE "\n"
3-
FLOAT_NUMBER_PART "0E" error: Missing digits after the exponent symbol
3+
FLOAT_NUMBER_START_0 "0E" error: Missing digits after the exponent symbol
44
WHITESPACE "\n\n"
5-
FLOAT_NUMBER_PART "42e+" error: Missing digits after the exponent symbol
5+
FLOAT_NUMBER_START_0 "42e+" error: Missing digits after the exponent symbol
66
WHITESPACE "\n"
7-
FLOAT_NUMBER_PART "42e-" error: Missing digits after the exponent symbol
7+
FLOAT_NUMBER_START_0 "42e-" error: Missing digits after the exponent symbol
88
WHITESPACE "\n"
9-
FLOAT_NUMBER_PART "42E+" error: Missing digits after the exponent symbol
9+
FLOAT_NUMBER_START_0 "42E+" error: Missing digits after the exponent symbol
1010
WHITESPACE "\n"
11-
FLOAT_NUMBER_PART "42E-" error: Missing digits after the exponent symbol
11+
FLOAT_NUMBER_START_0 "42E-" error: Missing digits after the exponent symbol
1212
WHITESPACE "\n\n"
1313
INT_NUMBER "42"
1414
DOT "."
@@ -30,35 +30,35 @@ DOT "."
3030
IDENT "E"
3131
MINUS "-"
3232
WHITESPACE "\n\n"
33-
FLOAT_NUMBER_PART "42"
33+
FLOAT_NUMBER_START_2 "42"
3434
DOT "."
3535
FLOAT_NUMBER_PART "2e+" error: Missing digits after the exponent symbol
3636
WHITESPACE "\n"
37-
FLOAT_NUMBER_PART "42"
37+
FLOAT_NUMBER_START_2 "42"
3838
DOT "."
3939
FLOAT_NUMBER_PART "2e-" error: Missing digits after the exponent symbol
4040
WHITESPACE "\n"
41-
FLOAT_NUMBER_PART "42"
41+
FLOAT_NUMBER_START_2 "42"
4242
DOT "."
4343
FLOAT_NUMBER_PART "2E+" error: Missing digits after the exponent symbol
4444
WHITESPACE "\n"
45-
FLOAT_NUMBER_PART "42"
45+
FLOAT_NUMBER_START_2 "42"
4646
DOT "."
4747
FLOAT_NUMBER_PART "2E-" error: Missing digits after the exponent symbol
4848
WHITESPACE "\n\n"
49-
FLOAT_NUMBER_PART "42"
49+
FLOAT_NUMBER_START_2 "42"
5050
DOT "."
5151
FLOAT_NUMBER_PART "2e+f32" error: Missing digits after the exponent symbol
5252
WHITESPACE "\n"
53-
FLOAT_NUMBER_PART "42"
53+
FLOAT_NUMBER_START_2 "42"
5454
DOT "."
5555
FLOAT_NUMBER_PART "2e-f32" error: Missing digits after the exponent symbol
5656
WHITESPACE "\n"
57-
FLOAT_NUMBER_PART "42"
57+
FLOAT_NUMBER_START_2 "42"
5858
DOT "."
5959
FLOAT_NUMBER_PART "2E+f32" error: Missing digits after the exponent symbol
6060
WHITESPACE "\n"
61-
FLOAT_NUMBER_PART "42"
61+
FLOAT_NUMBER_START_2 "42"
6262
DOT "."
6363
FLOAT_NUMBER_PART "2E-f32" error: Missing digits after the exponent symbol
6464
WHITESPACE "\n"

crates/parser/test_data/lexer/ok/numbers.rast

+8-8
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ INT_NUMBER "00"
44
WHITESPACE " "
55
INT_NUMBER "0_"
66
WHITESPACE " "
7-
FLOAT_NUMBER_PART "0"
7+
FLOAT_NUMBER_START_1 "0"
88
DOT "."
99
WHITESPACE " "
1010
INT_NUMBER "0z"
@@ -21,13 +21,13 @@ INT_NUMBER "001279"
2121
WHITESPACE " "
2222
INT_NUMBER "0_1279"
2323
WHITESPACE " "
24-
FLOAT_NUMBER_PART "0"
24+
FLOAT_NUMBER_START_2 "0"
2525
DOT "."
2626
FLOAT_NUMBER_PART "1279"
2727
WHITESPACE " "
28-
FLOAT_NUMBER_PART "0e1279"
28+
FLOAT_NUMBER_START_0 "0e1279"
2929
WHITESPACE " "
30-
FLOAT_NUMBER_PART "0E1279"
30+
FLOAT_NUMBER_START_0 "0E1279"
3131
WHITESPACE "\n"
3232
INT_NUMBER "0"
3333
DOT "."
@@ -40,25 +40,25 @@ IDENT "foo"
4040
L_PAREN "("
4141
R_PAREN ")"
4242
WHITESPACE "\n"
43-
FLOAT_NUMBER_PART "0e+1"
43+
FLOAT_NUMBER_START_0 "0e+1"
4444
WHITESPACE "\n"
4545
INT_NUMBER "0"
4646
DOT "."
4747
IDENT "e"
4848
PLUS "+"
4949
INT_NUMBER "1"
5050
WHITESPACE "\n"
51-
FLOAT_NUMBER_PART "0"
51+
FLOAT_NUMBER_START_2 "0"
5252
DOT "."
5353
FLOAT_NUMBER_PART "0E-2"
5454
WHITESPACE "\n"
55-
FLOAT_NUMBER_PART "0___0"
55+
FLOAT_NUMBER_START_2 "0___0"
5656
DOT "."
5757
FLOAT_NUMBER_PART "10000____0000e+111__"
5858
WHITESPACE "\n"
5959
INT_NUMBER "1i64"
6060
WHITESPACE " "
61-
FLOAT_NUMBER_PART "92"
61+
FLOAT_NUMBER_START_2 "92"
6262
DOT "."
6363
FLOAT_NUMBER_PART "0f32"
6464
WHITESPACE " "

0 commit comments

Comments
 (0)