Skip to content

Commit 8b82c4c

Browse files
committed
Make proc_macro::Group take up less space remove redundant field.
The field `entire` is redundant. This saves 4 bytes and makes the DelimSpan match up with what the compiler uses. Update tests to not include unused `entire` More instances of the old layout in rust analyzer Move cfg is in expermental posistion and update fmt str. Missed an instance of entire Conditionally, compile with #[cfg(bootstrap)] to break a depency cycle
1 parent b64df9d commit 8b82c4c

File tree

6 files changed

+44
-33
lines changed

6 files changed

+44
-33
lines changed

compiler/rustc_expand/src/proc_macro_server.rs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -151,11 +151,7 @@ impl FromInternal<(TokenStream, &mut Rustc<'_, '_>)> for Vec<TokenTree<TokenStre
151151
trees.push(TokenTree::Group(Group {
152152
delimiter: rustc_proc_macro::Delimiter::from_internal(delim),
153153
stream: Some(stream),
154-
span: DelimSpan {
155-
open: span.open,
156-
close: span.close,
157-
entire: span.entire(),
158-
},
154+
span: DelimSpan { open: span.open, close: span.close },
159155
}));
160156
continue;
161157
}

library/proc_macro/src/bridge/mod.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -420,16 +420,15 @@ compound_traits!(
420420
pub struct DelimSpan<Span> {
421421
pub open: Span,
422422
pub close: Span,
423-
pub entire: Span,
424423
}
425424

426425
impl<Span: Copy> DelimSpan<Span> {
427426
pub fn from_single(span: Span) -> Self {
428-
DelimSpan { open: span, close: span, entire: span }
427+
DelimSpan { open: span, close: span }
429428
}
430429
}
431430

432-
compound_traits!(struct DelimSpan<Span> { open, close, entire });
431+
compound_traits!(struct DelimSpan<Span> { open, close });
433432

434433
#[derive(Clone)]
435434
pub struct Group<TokenStream, Span> {

library/proc_macro/src/lib.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -847,7 +847,8 @@ impl Group {
847847
/// ```
848848
#[stable(feature = "proc_macro_lib2", since = "1.29.0")]
849849
pub fn span(&self) -> Span {
850-
Span(self.0.span.entire)
850+
let sp = self.0.span;
851+
Span(sp.open.join(sp.close).unwrap_or(sp.open))
851852
}
852853

853854
/// Returns the span pointing to the opening delimiter of this group.

src/tools/rust-analyzer/crates/proc-macro-api/src/legacy_protocol/msg/flat.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,7 @@ impl FlatTree {
222222
span: proc_macro_srv::DelimSpan {
223223
open: call_site,
224224
close: call_site,
225+
#[cfg(bootstrap)]
225226
entire: call_site,
226227
},
227228
};
@@ -273,6 +274,7 @@ impl FlatTree {
273274
span: proc_macro_srv::DelimSpan {
274275
open: call_site,
275276
close: call_site,
277+
#[cfg(bootstrap)]
276278
entire: call_site,
277279
},
278280
};
@@ -947,6 +949,7 @@ impl<T: SpanTransformer> Reader<'_, T> {
947949
open: read_span(repr.open),
948950
close: read_span(repr.close),
949951
// FIXME
952+
#[cfg(bootstrap)]
950953
entire: read_span(repr.close),
951954
},
952955
};

src/tools/rust-analyzer/crates/proc-macro-srv/src/tests/mod.rs

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,14 @@ fn test_derive_empty() {
1414
expect![[r#"
1515
IDENT 1 struct
1616
IDENT 1 S
17-
GROUP {} 1 1 1
17+
GROUP {} 1 1
1818
IDENT 1 field
1919
PUNCT 1 : [alone]
2020
PUNCT 1 & [joint]
2121
PUNCT 1 ' [joint]
2222
IDENT 1 r#lt
2323
IDENT 1 fn
24-
GROUP () 1 1 1
24+
GROUP () 1 1
2525
IDENT 1 u32
2626
PUNCT 1 - [joint]
2727
PUNCT 1 > [alone]
@@ -33,14 +33,14 @@ fn test_derive_empty() {
3333
expect![[r#"
3434
IDENT 42:Root[0000, 0]@0..6#ROOT2024 struct
3535
IDENT 42:Root[0000, 0]@7..8#ROOT2024 S
36-
GROUP {} 42:Root[0000, 0]@9..10#ROOT2024 42:Root[0000, 0]@46..47#ROOT2024 42:Root[0000, 0]@9..47#ROOT2024
36+
GROUP {} 42:Root[0000, 0]@9..10#ROOT2024 42:Root[0000, 0]@46..47#ROOT2024
3737
IDENT 42:Root[0000, 0]@11..16#ROOT2024 field
3838
PUNCT 42:Root[0000, 0]@16..17#ROOT2024 : [alone]
3939
PUNCT 42:Root[0000, 0]@18..19#ROOT2024 & [joint]
4040
PUNCT 42:Root[0000, 0]@22..23#ROOT2024 ' [joint]
4141
IDENT 42:Root[0000, 0]@22..24#ROOT2024 r#lt
4242
IDENT 42:Root[0000, 0]@25..27#ROOT2024 fn
43-
GROUP () 42:Root[0000, 0]@27..28#ROOT2024 42:Root[0000, 0]@31..32#ROOT2024 42:Root[0000, 0]@27..32#ROOT2024
43+
GROUP () 42:Root[0000, 0]@27..28#ROOT2024 42:Root[0000, 0]@31..32#ROOT2024
4444
IDENT 42:Root[0000, 0]@28..31#ROOT2024 u32
4545
PUNCT 42:Root[0000, 0]@33..34#ROOT2024 - [joint]
4646
PUNCT 42:Root[0000, 0]@34..35#ROOT2024 > [alone]
@@ -60,30 +60,30 @@ fn test_derive_error() {
6060
expect![[r#"
6161
IDENT 1 struct
6262
IDENT 1 S
63-
GROUP {} 1 1 1
63+
GROUP {} 1 1
6464
IDENT 1 field
6565
PUNCT 1 : [alone]
6666
IDENT 1 u32
6767
6868
6969
IDENT 1 compile_error
7070
PUNCT 1 ! [joint]
71-
GROUP () 1 1 1
71+
GROUP () 1 1
7272
LITER 1 Str #[derive(DeriveError)] struct S {field 58 u32 }
7373
PUNCT 1 ; [alone]
7474
"#]],
7575
expect![[r#"
7676
IDENT 42:Root[0000, 0]@0..6#ROOT2024 struct
7777
IDENT 42:Root[0000, 0]@7..8#ROOT2024 S
78-
GROUP {} 42:Root[0000, 0]@9..10#ROOT2024 42:Root[0000, 0]@22..23#ROOT2024 42:Root[0000, 0]@9..23#ROOT2024
78+
GROUP {} 42:Root[0000, 0]@9..10#ROOT2024 42:Root[0000, 0]@22..23#ROOT2024
7979
IDENT 42:Root[0000, 0]@11..16#ROOT2024 field
8080
PUNCT 42:Root[0000, 0]@16..17#ROOT2024 : [alone]
8181
IDENT 42:Root[0000, 0]@18..21#ROOT2024 u32
8282
8383
8484
IDENT 42:Root[0000, 0]@0..13#ROOT2024 compile_error
8585
PUNCT 42:Root[0000, 0]@13..14#ROOT2024 ! [joint]
86-
GROUP () 42:Root[0000, 0]@14..15#ROOT2024 42:Root[0000, 0]@64..65#ROOT2024 42:Root[0000, 0]@14..65#ROOT2024
86+
GROUP () 42:Root[0000, 0]@14..15#ROOT2024 42:Root[0000, 0]@64..65#ROOT2024
8787
LITER 42:Root[0000, 0]@15..64#ROOT2024 Str #[derive(DeriveError)] struct S {field 58 u32 }
8888
PUNCT 42:Root[0000, 0]@65..66#ROOT2024 ; [alone]
8989
"#]],
@@ -102,7 +102,7 @@ fn test_fn_like_macro_noop() {
102102
PUNCT 1 , [alone]
103103
LITER 1 Integer 1
104104
PUNCT 1 , [alone]
105-
GROUP [] 1 1 1
105+
GROUP [] 1 1
106106
107107
108108
IDENT 1 ident
@@ -111,7 +111,7 @@ fn test_fn_like_macro_noop() {
111111
PUNCT 1 , [alone]
112112
LITER 1 Integer 1
113113
PUNCT 1 , [alone]
114-
GROUP [] 1 1 1
114+
GROUP [] 1 1
115115
"#]],
116116
expect![[r#"
117117
IDENT 42:Root[0000, 0]@0..5#ROOT2024 ident
@@ -120,7 +120,7 @@ fn test_fn_like_macro_noop() {
120120
PUNCT 42:Root[0000, 0]@8..9#ROOT2024 , [alone]
121121
LITER 42:Root[0000, 0]@10..11#ROOT2024 Integer 1
122122
PUNCT 42:Root[0000, 0]@11..12#ROOT2024 , [alone]
123-
GROUP [] 42:Root[0000, 0]@13..14#ROOT2024 42:Root[0000, 0]@14..15#ROOT2024 42:Root[0000, 0]@13..15#ROOT2024
123+
GROUP [] 42:Root[0000, 0]@13..14#ROOT2024 42:Root[0000, 0]@14..15#ROOT2024
124124
125125
126126
IDENT 42:Root[0000, 0]@0..5#ROOT2024 ident
@@ -129,7 +129,7 @@ fn test_fn_like_macro_noop() {
129129
PUNCT 42:Root[0000, 0]@8..9#ROOT2024 , [alone]
130130
LITER 42:Root[0000, 0]@10..11#ROOT2024 Integer 1
131131
PUNCT 42:Root[0000, 0]@11..12#ROOT2024 , [alone]
132-
GROUP [] 42:Root[0000, 0]@13..14#ROOT2024 42:Root[0000, 0]@14..15#ROOT2024 42:Root[0000, 0]@13..15#ROOT2024
132+
GROUP [] 42:Root[0000, 0]@13..14#ROOT2024 42:Root[0000, 0]@14..15#ROOT2024
133133
"#]],
134134
);
135135
}
@@ -142,22 +142,22 @@ fn test_fn_like_macro_clone_ident_subtree() {
142142
expect![[r#"
143143
IDENT 1 ident
144144
PUNCT 1 , [alone]
145-
GROUP [] 1 1 1
145+
GROUP [] 1 1
146146
147147
148148
IDENT 1 ident
149149
PUNCT 1 , [alone]
150-
GROUP [] 1 1 1
150+
GROUP [] 1 1
151151
"#]],
152152
expect![[r#"
153153
IDENT 42:Root[0000, 0]@0..5#ROOT2024 ident
154154
PUNCT 42:Root[0000, 0]@5..6#ROOT2024 , [alone]
155-
GROUP [] 42:Root[0000, 0]@7..8#ROOT2024 42:Root[0000, 0]@8..9#ROOT2024 42:Root[0000, 0]@7..9#ROOT2024
155+
GROUP [] 42:Root[0000, 0]@7..8#ROOT2024 42:Root[0000, 0]@8..9#ROOT2024
156156
157157
158158
IDENT 42:Root[0000, 0]@0..5#ROOT2024 ident
159159
PUNCT 42:Root[0000, 0]@5..6#ROOT2024 , [alone]
160-
GROUP [] 42:Root[0000, 0]@7..9#ROOT2024 42:Root[0000, 0]@7..9#ROOT2024 42:Root[0000, 0]@7..9#ROOT2024
160+
GROUP [] 42:Root[0000, 0]@7..9#ROOT2024 42:Root[0000, 0]@7..9#ROOT2024
161161
"#]],
162162
);
163163
}
@@ -462,7 +462,7 @@ fn test_attr_macro() {
462462
expect![[r#"
463463
IDENT 1 mod
464464
IDENT 1 m
465-
GROUP {} 1 1 1
465+
GROUP {} 1 1
466466
467467
468468
IDENT 1 some
@@ -471,14 +471,14 @@ fn test_attr_macro() {
471471
472472
IDENT 1 compile_error
473473
PUNCT 1 ! [joint]
474-
GROUP () 1 1 1
474+
GROUP () 1 1
475475
LITER 1 Str #[attr_error(some arguments )] mod m {}
476476
PUNCT 1 ; [alone]
477477
"#]],
478478
expect![[r#"
479479
IDENT 42:Root[0000, 0]@0..3#ROOT2024 mod
480480
IDENT 42:Root[0000, 0]@4..5#ROOT2024 m
481-
GROUP {} 42:Root[0000, 0]@6..7#ROOT2024 42:Root[0000, 0]@7..8#ROOT2024 42:Root[0000, 0]@6..8#ROOT2024
481+
GROUP {} 42:Root[0000, 0]@6..7#ROOT2024 42:Root[0000, 0]@7..8#ROOT2024
482482
483483
484484
IDENT 42:Root[0000, 0]@0..4#ROOT2024 some
@@ -487,7 +487,7 @@ fn test_attr_macro() {
487487
488488
IDENT 42:Root[0000, 0]@0..13#ROOT2024 compile_error
489489
PUNCT 42:Root[0000, 0]@13..14#ROOT2024 ! [joint]
490-
GROUP () 42:Root[0000, 0]@14..15#ROOT2024 42:Root[0000, 0]@56..57#ROOT2024 42:Root[0000, 0]@14..57#ROOT2024
490+
GROUP () 42:Root[0000, 0]@14..15#ROOT2024 42:Root[0000, 0]@56..57#ROOT2024
491491
LITER 42:Root[0000, 0]@15..56#ROOT2024 Str #[attr_error(some arguments )] mod m {}
492492
PUNCT 42:Root[0000, 0]@57..58#ROOT2024 ; [alone]
493493
"#]],

src/tools/rust-analyzer/crates/proc-macro-srv/src/token_stream.rs

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ impl<S> TokenStream<S> {
115115
Some(TokenStream::new(stream))
116116
},
117117
span: DelimSpan {
118+
#[cfg(bootstrap)]
118119
entire: span.derive_ranged(open_range.start..range.end),
119120
open: span.derive_ranged(open_range),
120121
close: span.derive_ranged(range),
@@ -143,6 +144,7 @@ impl<S> TokenStream<S> {
143144
Some(TokenStream::new(stream))
144145
},
145146
span: DelimSpan {
147+
#[cfg(bootstrap)]
146148
entire: span.derive_ranged(open_range.start..range.end),
147149
open: span.derive_ranged(open_range),
148150
close: span.derive_ranged(range),
@@ -171,6 +173,7 @@ impl<S> TokenStream<S> {
171173
Some(TokenStream::new(stream))
172174
},
173175
span: DelimSpan {
176+
#[cfg(bootstrap)]
174177
entire: span.derive_ranged(open_range.start..range.end),
175178
open: span.derive_ranged(open_range),
176179
close: span.derive_ranged(range),
@@ -204,7 +207,12 @@ impl<S> TokenStream<S> {
204207
span: span.derive_ranged(range),
205208
}),
206209
])),
207-
span: DelimSpan { open: span, close: span, entire: span },
210+
span: DelimSpan {
211+
open: span,
212+
close: span,
213+
#[cfg(bootstrap)]
214+
entire: span,
215+
},
208216
}));
209217
}
210218
rustc_lexer::TokenKind::BlockComment { doc_style: Some(doc_style), terminated } => {
@@ -230,7 +238,12 @@ impl<S> TokenStream<S> {
230238
span: span.derive_ranged(range),
231239
}),
232240
])),
233-
span: DelimSpan { open: span, close: span, entire: span },
241+
span: DelimSpan {
242+
open: span,
243+
close: span,
244+
#[cfg(bootstrap)]
245+
entire: span,
246+
},
234247
}));
235248
}
236249
rustc_lexer::TokenKind::Whitespace => continue,
@@ -570,7 +583,7 @@ fn debug_token_tree<S: fmt::Debug>(
570583
TokenTree::Group(Group { delimiter, stream, span }) => {
571584
writeln!(
572585
f,
573-
"GROUP {}{} {:#?} {:#?} {:#?}",
586+
"GROUP {}{} {:#?} {:#?}",
574587
match delimiter {
575588
proc_macro::Delimiter::Parenthesis => "(",
576589
proc_macro::Delimiter::Brace => "{",
@@ -585,7 +598,6 @@ fn debug_token_tree<S: fmt::Debug>(
585598
},
586599
span.open,
587600
span.close,
588-
span.entire,
589601
)?;
590602
if let Some(stream) = stream {
591603
debug_token_stream(stream, depth + 1, f)?;

0 commit comments

Comments
 (0)