Skip to content
This repository was archived by the owner on May 28, 2025. It is now read-only.

Commit 068db46

Browse files
committed
Use ThinVec in ast::WhereClause.
1 parent dd7aff5 commit 068db46

File tree

6 files changed

+92
-76
lines changed

6 files changed

+92
-76
lines changed

compiler/rustc_ast/src/ast.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -403,13 +403,13 @@ pub struct WhereClause {
403403
/// if we parsed no predicates (e.g. `struct Foo where {}`).
404404
/// This allows us to pretty-print accurately.
405405
pub has_where_token: bool,
406-
pub predicates: Vec<WherePredicate>,
406+
pub predicates: ThinVec<WherePredicate>,
407407
pub span: Span,
408408
}
409409

410410
impl Default for WhereClause {
411411
fn default() -> WhereClause {
412-
WhereClause { has_where_token: false, predicates: Vec::new(), span: DUMMY_SP }
412+
WhereClause { has_where_token: false, predicates: ThinVec::new(), span: DUMMY_SP }
413413
}
414414
}
415415

@@ -3115,15 +3115,15 @@ mod size_asserts {
31153115
static_assert_size!(Block, 48);
31163116
static_assert_size!(Expr, 72);
31173117
static_assert_size!(ExprKind, 40);
3118-
static_assert_size!(Fn, 168);
3118+
static_assert_size!(Fn, 152);
31193119
static_assert_size!(ForeignItem, 96);
31203120
static_assert_size!(ForeignItemKind, 24);
31213121
static_assert_size!(GenericArg, 24);
31223122
static_assert_size!(GenericBound, 56);
3123-
static_assert_size!(Generics, 56);
3124-
static_assert_size!(Impl, 168);
3125-
static_assert_size!(Item, 168);
3126-
static_assert_size!(ItemKind, 96);
3123+
static_assert_size!(Generics, 40);
3124+
static_assert_size!(Impl, 152);
3125+
static_assert_size!(Item, 152);
3126+
static_assert_size!(ItemKind, 80);
31273127
static_assert_size!(LitKind, 24);
31283128
static_assert_size!(Local, 72);
31293129
static_assert_size!(MetaItemLit, 40);

compiler/rustc_ast/src/mut_visit.rs

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@ use rustc_data_structures::sync::Lrc;
1717
use rustc_span::source_map::Spanned;
1818
use rustc_span::symbol::Ident;
1919
use rustc_span::Span;
20-
2120
use smallvec::{smallvec, Array, SmallVec};
2221
use std::ops::DerefMut;
2322
use std::{panic, ptr};
23+
use thin_vec::ThinVec;
2424

2525
pub trait ExpectOne<A: Array> {
2626
fn expect_one(self, err: &'static str) -> A::Item;
@@ -335,6 +335,17 @@ where
335335
}
336336
}
337337

338+
// No `noop_` prefix because there isn't a corresponding method in `MutVisitor`.
339+
#[inline]
340+
pub fn visit_thin_vec<T, F>(elems: &mut ThinVec<T>, mut visit_elem: F)
341+
where
342+
F: FnMut(&mut T),
343+
{
344+
for elem in elems {
345+
visit_elem(elem);
346+
}
347+
}
348+
338349
// No `noop_` prefix because there isn't a corresponding method in `MutVisitor`.
339350
#[inline]
340351
pub fn visit_opt<T, F>(opt: &mut Option<T>, mut visit_elem: F)
@@ -917,7 +928,7 @@ pub fn noop_visit_generics<T: MutVisitor>(generics: &mut Generics, vis: &mut T)
917928

918929
pub fn noop_visit_where_clause<T: MutVisitor>(wc: &mut WhereClause, vis: &mut T) {
919930
let WhereClause { has_where_token: _, predicates, span } = wc;
920-
visit_vec(predicates, |predicate| vis.visit_where_predicate(predicate));
931+
visit_thin_vec(predicates, |predicate| vis.visit_where_predicate(predicate));
921932
vis.visit_span(span);
922933
}
923934

compiler/rustc_ast_pretty/src/pprust/state.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1724,7 +1724,7 @@ impl<'a> State<'a> {
17241724
params: ThinVec::new(),
17251725
where_clause: ast::WhereClause {
17261726
has_where_token: false,
1727-
predicates: Vec::new(),
1727+
predicates: ThinVec::new(),
17281728
span: DUMMY_SP,
17291729
},
17301730
span: DUMMY_SP,

compiler/rustc_builtin_macros/src/deriving/generic/ty.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ use rustc_expand::base::ExtCtxt;
99
use rustc_span::source_map::{respan, DUMMY_SP};
1010
use rustc_span::symbol::{kw, Ident, Symbol};
1111
use rustc_span::Span;
12+
use thin_vec::ThinVec;
1213

1314
/// A path, e.g., `::std::option::Option::<i32>` (global). Has support
1415
/// for type parameters.
@@ -185,7 +186,11 @@ impl Bounds {
185186

186187
Generics {
187188
params,
188-
where_clause: ast::WhereClause { has_where_token: false, predicates: Vec::new(), span },
189+
where_clause: ast::WhereClause {
190+
has_where_token: false,
191+
predicates: ThinVec::new(),
192+
span,
193+
},
189194
span,
190195
}
191196
}

compiler/rustc_parse/src/parser/generics.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,7 @@ impl<'a> Parser<'a> {
258258
params,
259259
where_clause: WhereClause {
260260
has_where_token: false,
261-
predicates: Vec::new(),
261+
predicates: ThinVec::new(),
262262
span: self.prev_token.span.shrink_to_hi(),
263263
},
264264
span,
@@ -288,7 +288,7 @@ impl<'a> Parser<'a> {
288288
) -> PResult<'a, (WhereClause, Option<Vec<ast::FieldDef>>)> {
289289
let mut where_clause = WhereClause {
290290
has_where_token: false,
291-
predicates: Vec::new(),
291+
predicates: ThinVec::new(),
292292
span: self.prev_token.span.shrink_to_hi(),
293293
};
294294
let mut tuple_struct_body = None;

tests/ui/stats/hir-stats.stderr

Lines changed: 63 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -8,52 +8,52 @@ ast-stats-1 GenericArgs 56 ( 0.8%) 1 56
88
ast-stats-1 - AngleBracketed 56 ( 0.8%) 1
99
ast-stats-1 Crate 56 ( 0.8%) 1 56
1010
ast-stats-1 Attribute 64 ( 0.9%) 2 32
11-
ast-stats-1 - Normal 32 ( 0.4%) 1
12-
ast-stats-1 - DocComment 32 ( 0.4%) 1
11+
ast-stats-1 - Normal 32 ( 0.5%) 1
12+
ast-stats-1 - DocComment 32 ( 0.5%) 1
1313
ast-stats-1 Local 72 ( 1.0%) 1 72
14-
ast-stats-1 Arm 96 ( 1.3%) 2 48
15-
ast-stats-1 ForeignItem 96 ( 1.3%) 1 96
16-
ast-stats-1 - Fn 96 ( 1.3%) 1
17-
ast-stats-1 FieldDef 160 ( 2.2%) 2 80
18-
ast-stats-1 Stmt 160 ( 2.2%) 5 32
19-
ast-stats-1 - Local 32 ( 0.4%) 1
20-
ast-stats-1 - MacCall 32 ( 0.4%) 1
21-
ast-stats-1 - Expr 96 ( 1.3%) 3
22-
ast-stats-1 Param 160 ( 2.2%) 4 40
14+
ast-stats-1 Arm 96 ( 1.4%) 2 48
15+
ast-stats-1 ForeignItem 96 ( 1.4%) 1 96
16+
ast-stats-1 - Fn 96 ( 1.4%) 1
17+
ast-stats-1 FieldDef 160 ( 2.3%) 2 80
18+
ast-stats-1 Stmt 160 ( 2.3%) 5 32
19+
ast-stats-1 - Local 32 ( 0.5%) 1
20+
ast-stats-1 - MacCall 32 ( 0.5%) 1
21+
ast-stats-1 - Expr 96 ( 1.4%) 3
22+
ast-stats-1 Param 160 ( 2.3%) 4 40
2323
ast-stats-1 FnDecl 200 ( 2.8%) 5 40
24-
ast-stats-1 GenericBound 224 ( 3.1%) 4 56
25-
ast-stats-1 - Trait 224 ( 3.1%) 4
26-
ast-stats-1 Variant 240 ( 3.3%) 2 120
27-
ast-stats-1 Block 288 ( 4.0%) 6 48
28-
ast-stats-1 AssocItem 416 ( 5.8%) 4 104
29-
ast-stats-1 - Type 208 ( 2.9%) 2
30-
ast-stats-1 - Fn 208 ( 2.9%) 2
31-
ast-stats-1 GenericParam 480 ( 6.7%) 5 96
32-
ast-stats-1 Expr 576 ( 8.0%) 8 72
24+
ast-stats-1 GenericBound 224 ( 3.2%) 4 56
25+
ast-stats-1 - Trait 224 ( 3.2%) 4
26+
ast-stats-1 Variant 240 ( 3.4%) 2 120
27+
ast-stats-1 Block 288 ( 4.1%) 6 48
28+
ast-stats-1 AssocItem 416 ( 5.9%) 4 104
29+
ast-stats-1 - Type 208 ( 3.0%) 2
30+
ast-stats-1 - Fn 208 ( 3.0%) 2
31+
ast-stats-1 GenericParam 480 ( 6.8%) 5 96
32+
ast-stats-1 Expr 576 ( 8.2%) 8 72
3333
ast-stats-1 - Path 72 ( 1.0%) 1
3434
ast-stats-1 - Match 72 ( 1.0%) 1
3535
ast-stats-1 - Struct 72 ( 1.0%) 1
3636
ast-stats-1 - Lit 144 ( 2.0%) 2
37-
ast-stats-1 - Block 216 ( 3.0%) 3
38-
ast-stats-1 Pat 616 ( 8.6%) 7 88
37+
ast-stats-1 - Block 216 ( 3.1%) 3
38+
ast-stats-1 Pat 616 ( 8.7%) 7 88
3939
ast-stats-1 - Struct 88 ( 1.2%) 1
4040
ast-stats-1 - Wild 88 ( 1.2%) 1
41-
ast-stats-1 - Ident 440 ( 6.1%) 5
42-
ast-stats-1 PathSegment 720 (10.0%) 30 24
43-
ast-stats-1 Ty 896 (12.5%) 14 64
41+
ast-stats-1 - Ident 440 ( 6.2%) 5
42+
ast-stats-1 PathSegment 720 (10.2%) 30 24
43+
ast-stats-1 Ty 896 (12.7%) 14 64
4444
ast-stats-1 - Ptr 64 ( 0.9%) 1
4545
ast-stats-1 - Ref 64 ( 0.9%) 1
4646
ast-stats-1 - ImplicitSelf 128 ( 1.8%) 2
47-
ast-stats-1 - Path 640 ( 8.9%) 10
48-
ast-stats-1 Item 1_512 (21.0%) 9 168
49-
ast-stats-1 - Trait 168 ( 2.3%) 1
50-
ast-stats-1 - Enum 168 ( 2.3%) 1
51-
ast-stats-1 - ForeignMod 168 ( 2.3%) 1
52-
ast-stats-1 - Impl 168 ( 2.3%) 1
53-
ast-stats-1 - Fn 336 ( 4.7%) 2
54-
ast-stats-1 - Use 504 ( 7.0%) 3
47+
ast-stats-1 - Path 640 ( 9.1%) 10
48+
ast-stats-1 Item 1_368 (19.4%) 9 152
49+
ast-stats-1 - Trait 152 ( 2.2%) 1
50+
ast-stats-1 - Enum 152 ( 2.2%) 1
51+
ast-stats-1 - ForeignMod 152 ( 2.2%) 1
52+
ast-stats-1 - Impl 152 ( 2.2%) 1
53+
ast-stats-1 - Fn 304 ( 4.3%) 2
54+
ast-stats-1 - Use 456 ( 6.5%) 3
5555
ast-stats-1 ----------------------------------------------------------------
56-
ast-stats-1 Total 7_192
56+
ast-stats-1 Total 7_048
5757
ast-stats-1
5858
ast-stats-2 POST EXPANSION AST STATS
5959
ast-stats-2 Name Accumulated Size Count Item Size
@@ -68,52 +68,52 @@ ast-stats-2 Local 72 ( 0.9%) 1 72
6868
ast-stats-2 Arm 96 ( 1.2%) 2 48
6969
ast-stats-2 ForeignItem 96 ( 1.2%) 1 96
7070
ast-stats-2 - Fn 96 ( 1.2%) 1
71-
ast-stats-2 InlineAsm 120 ( 1.5%) 1 120
72-
ast-stats-2 Attribute 128 ( 1.6%) 4 32
71+
ast-stats-2 InlineAsm 120 ( 1.6%) 1 120
72+
ast-stats-2 Attribute 128 ( 1.7%) 4 32
7373
ast-stats-2 - DocComment 32 ( 0.4%) 1
7474
ast-stats-2 - Normal 96 ( 1.2%) 3
75-
ast-stats-2 FieldDef 160 ( 2.0%) 2 80
76-
ast-stats-2 Stmt 160 ( 2.0%) 5 32
75+
ast-stats-2 FieldDef 160 ( 2.1%) 2 80
76+
ast-stats-2 Stmt 160 ( 2.1%) 5 32
7777
ast-stats-2 - Local 32 ( 0.4%) 1
7878
ast-stats-2 - Semi 32 ( 0.4%) 1
7979
ast-stats-2 - Expr 96 ( 1.2%) 3
80-
ast-stats-2 Param 160 ( 2.0%) 4 40
81-
ast-stats-2 FnDecl 200 ( 2.5%) 5 40
80+
ast-stats-2 Param 160 ( 2.1%) 4 40
81+
ast-stats-2 FnDecl 200 ( 2.6%) 5 40
8282
ast-stats-2 GenericBound 224 ( 2.9%) 4 56
8383
ast-stats-2 - Trait 224 ( 2.9%) 4
8484
ast-stats-2 Variant 240 ( 3.1%) 2 120
85-
ast-stats-2 Block 288 ( 3.7%) 6 48
86-
ast-stats-2 AssocItem 416 ( 5.3%) 4 104
87-
ast-stats-2 - Type 208 ( 2.6%) 2
88-
ast-stats-2 - Fn 208 ( 2.6%) 2
89-
ast-stats-2 GenericParam 480 ( 6.1%) 5 96
90-
ast-stats-2 Pat 616 ( 7.8%) 7 88
85+
ast-stats-2 Block 288 ( 3.8%) 6 48
86+
ast-stats-2 AssocItem 416 ( 5.4%) 4 104
87+
ast-stats-2 - Type 208 ( 2.7%) 2
88+
ast-stats-2 - Fn 208 ( 2.7%) 2
89+
ast-stats-2 GenericParam 480 ( 6.2%) 5 96
90+
ast-stats-2 Pat 616 ( 8.0%) 7 88
9191
ast-stats-2 - Struct 88 ( 1.1%) 1
9292
ast-stats-2 - Wild 88 ( 1.1%) 1
93-
ast-stats-2 - Ident 440 ( 5.6%) 5
94-
ast-stats-2 Expr 648 ( 8.2%) 9 72
93+
ast-stats-2 - Ident 440 ( 5.7%) 5
94+
ast-stats-2 Expr 648 ( 8.4%) 9 72
9595
ast-stats-2 - Path 72 ( 0.9%) 1
9696
ast-stats-2 - Match 72 ( 0.9%) 1
9797
ast-stats-2 - Struct 72 ( 0.9%) 1
9898
ast-stats-2 - InlineAsm 72 ( 0.9%) 1
99-
ast-stats-2 - Lit 144 ( 1.8%) 2
100-
ast-stats-2 - Block 216 ( 2.7%) 3
101-
ast-stats-2 PathSegment 792 (10.1%) 33 24
102-
ast-stats-2 Ty 896 (11.4%) 14 64
99+
ast-stats-2 - Lit 144 ( 1.9%) 2
100+
ast-stats-2 - Block 216 ( 2.8%) 3
101+
ast-stats-2 PathSegment 792 (10.3%) 33 24
102+
ast-stats-2 Ty 896 (11.7%) 14 64
103103
ast-stats-2 - Ptr 64 ( 0.8%) 1
104104
ast-stats-2 - Ref 64 ( 0.8%) 1
105-
ast-stats-2 - ImplicitSelf 128 ( 1.6%) 2
106-
ast-stats-2 - Path 640 ( 8.1%) 10
107-
ast-stats-2 Item 1_848 (23.5%) 11 168
108-
ast-stats-2 - Trait 168 ( 2.1%) 1
109-
ast-stats-2 - Enum 168 ( 2.1%) 1
110-
ast-stats-2 - ExternCrate 168 ( 2.1%) 1
111-
ast-stats-2 - ForeignMod 168 ( 2.1%) 1
112-
ast-stats-2 - Impl 168 ( 2.1%) 1
113-
ast-stats-2 - Fn 336 ( 4.3%) 2
114-
ast-stats-2 - Use 672 ( 8.6%) 4
105+
ast-stats-2 - ImplicitSelf 128 ( 1.7%) 2
106+
ast-stats-2 - Path 640 ( 8.3%) 10
107+
ast-stats-2 Item 1_672 (21.8%) 11 152
108+
ast-stats-2 - Trait 152 ( 2.0%) 1
109+
ast-stats-2 - Enum 152 ( 2.0%) 1
110+
ast-stats-2 - ExternCrate 152 ( 2.0%) 1
111+
ast-stats-2 - ForeignMod 152 ( 2.0%) 1
112+
ast-stats-2 - Impl 152 ( 2.0%) 1
113+
ast-stats-2 - Fn 304 ( 4.0%) 2
114+
ast-stats-2 - Use 608 ( 7.9%) 4
115115
ast-stats-2 ----------------------------------------------------------------
116-
ast-stats-2 Total 7_856
116+
ast-stats-2 Total 7_680
117117
ast-stats-2
118118
hir-stats HIR STATS
119119
hir-stats Name Accumulated Size Count Item Size

0 commit comments

Comments
 (0)