File tree 4 files changed +41
-1
lines changed
hir-def/src/macro_expansion_tests/mbe 4 files changed +41
-1
lines changed Original file line number Diff line number Diff line change @@ -80,7 +80,7 @@ macro_rules! f3 { ($i:_) => () }
80
80
81
81
#[ test]
82
82
fn test_rustc_issue_57597 ( ) {
83
- // <https://github.com/rust-lang/rust/blob/master/src/test/ui/issues /issue-57597.rs>
83
+ // <https://github.com/rust-lang/rust/blob/master/src/test/ui/macros /issue-57597.rs>
84
84
check (
85
85
r#"
86
86
macro_rules! m0 { ($($($i:ident)?)+) => {}; }
Original file line number Diff line number Diff line change @@ -38,6 +38,7 @@ macro_rules! m {
38
38
let _ = 12E+99_f64;
39
39
let _ = "rust1";
40
40
let _ = -92;
41
+ let _ = -1.3e4f32;
41
42
}
42
43
}
43
44
fn f() {
@@ -52,6 +53,7 @@ macro_rules! m {
52
53
let _ = 12E+99_f64;
53
54
let _ = "rust1";
54
55
let _ = -92;
56
+ let _ = -1.3e4f32;
55
57
}
56
58
}
57
59
fn f() {
@@ -60,6 +62,7 @@ fn f() {
60
62
let _ = 12E+99_f64;
61
63
let _ = "rust1";
62
64
let _ = -92;
65
+ let _ = -1.3e4f32;
63
66
}
64
67
"# ] ] ,
65
68
) ;
@@ -148,3 +151,27 @@ $ = ();
148
151
"# ] ] ,
149
152
)
150
153
}
154
+
155
+ #[ test]
156
+ fn float_literal_in_output ( ) {
157
+ check (
158
+ r#"
159
+ macro_rules! constant {
160
+ ($e:expr ;) => {$e};
161
+ }
162
+
163
+ const _: () = constant!(0.0;);
164
+ const _: () = constant!(0.;);
165
+ const _: () = constant!(0e0;);
166
+ "# ,
167
+ expect ! [ [ r#"
168
+ macro_rules! constant {
169
+ ($e:expr ;) => {$e};
170
+ }
171
+
172
+ const _: () = 0.0;
173
+ const _: () = 0.;
174
+ const _: () = 0e0;
175
+ "# ] ] ,
176
+ ) ;
177
+ }
Original file line number Diff line number Diff line change @@ -266,11 +266,13 @@ fn convert_tokens<C: TokenConvertor>(conv: &mut C) -> tt::Subtree {
266
266
let mut text = token. to_text ( conv) . to_string ( ) ;
267
267
if kind == FLOAT_NUMBER_START_1 || kind == FLOAT_NUMBER_START_2 {
268
268
let ( dot, dot_range) = conv. bump ( ) . unwrap ( ) ;
269
+ assert_eq ! ( dot. kind( conv) , DOT ) ;
269
270
text += & * dot. to_text ( conv) ;
270
271
range = TextRange :: new ( range. start ( ) , dot_range. end ( ) ) ;
271
272
272
273
if kind == FLOAT_NUMBER_START_2 {
273
274
let ( tail, tail_range) = conv. bump ( ) . unwrap ( ) ;
275
+ assert_eq ! ( tail. kind( conv) , FLOAT_NUMBER_PART ) ;
274
276
text += & * tail. to_text ( conv) ;
275
277
range = TextRange :: new ( range. start ( ) , tail_range. end ( ) ) ;
276
278
}
Original file line number Diff line number Diff line change @@ -90,9 +90,20 @@ impl<'a> TtIter<'a> {
90
90
91
91
let mut cursor = buffer. begin ( ) ;
92
92
let mut error = false ;
93
+ let mut float_fragments_to_skip = 0 ;
93
94
for step in tree_traversal. iter ( ) {
94
95
match step {
95
96
parser:: Step :: Token { kind, mut n_input_tokens } => {
97
+ if float_fragments_to_skip > 0 {
98
+ float_fragments_to_skip -= 1 ;
99
+ n_input_tokens = 0 ;
100
+ }
101
+ match kind {
102
+ SyntaxKind :: LIFETIME_IDENT => n_input_tokens = 2 ,
103
+ SyntaxKind :: FLOAT_NUMBER_START_1 => float_fragments_to_skip = 1 ,
104
+ SyntaxKind :: FLOAT_NUMBER_START_2 => float_fragments_to_skip = 2 ,
105
+ _ => { }
106
+ }
96
107
if kind == SyntaxKind :: LIFETIME_IDENT {
97
108
n_input_tokens = 2 ;
98
109
}
You can’t perform that action at this time.
0 commit comments