Skip to content

Commit 57eb7e7

Browse files
committed
Shrink ast::Generics.
1 parent 40f7633 commit 57eb7e7

File tree

8 files changed

+59
-61
lines changed

8 files changed

+59
-61
lines changed

compiler/rustc_ast/src/ast.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -414,7 +414,7 @@ impl GenericParam {
414414
/// a function, enum, trait, etc.
415415
#[derive(Clone, Encodable, Decodable, Debug)]
416416
pub struct Generics {
417-
pub params: Vec<GenericParam>,
417+
pub params: Box<[GenericParam]>,
418418
pub where_clause: WhereClause,
419419
pub span: Span,
420420
}
@@ -423,7 +423,7 @@ impl Default for Generics {
423423
/// Creates an instance of `Generics`.
424424
fn default() -> Generics {
425425
Generics {
426-
params: Vec::new(),
426+
params: Box::new([]),
427427
where_clause: WhereClause {
428428
has_where_token: false,
429429
predicates: Vec::new(),
@@ -3042,15 +3042,15 @@ mod size_asserts {
30423042
static_assert_size!(Block, 40);
30433043
static_assert_size!(Expr, 104);
30443044
static_assert_size!(ExprKind, 72);
3045-
static_assert_size!(Fn, 192);
3045+
static_assert_size!(Fn, 184);
30463046
static_assert_size!(ForeignItem, 96);
30473047
static_assert_size!(ForeignItemKind, 24);
30483048
static_assert_size!(GenericArg, 24);
30493049
static_assert_size!(GenericBound, 88);
3050-
static_assert_size!(Generics, 72);
3051-
static_assert_size!(Impl, 192);
3052-
static_assert_size!(Item, 184);
3053-
static_assert_size!(ItemKind, 112);
3050+
static_assert_size!(Generics, 64);
3051+
static_assert_size!(Impl, 184);
3052+
static_assert_size!(Item, 176);
3053+
static_assert_size!(ItemKind, 104);
30543054
static_assert_size!(Lit, 48);
30553055
static_assert_size!(LitKind, 24);
30563056
static_assert_size!(Local, 72);

compiler/rustc_ast/src/visit.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -608,7 +608,7 @@ pub fn walk_generic_param<'a, V: Visitor<'a>>(visitor: &mut V, param: &'a Generi
608608
}
609609

610610
pub fn walk_generics<'a, V: Visitor<'a>>(visitor: &mut V, generics: &'a Generics) {
611-
walk_list!(visitor, visit_generic_param, &generics.params);
611+
walk_list!(visitor, visit_generic_param, generics.params.iter());
612612
walk_list!(visitor, visit_where_predicate, &generics.where_clause.predicates);
613613
}
614614

compiler/rustc_ast_passes/src/ast_validation.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1330,7 +1330,7 @@ impl<'a> Visitor<'a> for AstValidator<'a> {
13301330

13311331
fn visit_generics(&mut self, generics: &'a Generics) {
13321332
let mut prev_param_default = None;
1333-
for param in &generics.params {
1333+
for param in generics.params.iter() {
13341334
match param.kind {
13351335
GenericParamKind::Lifetime => (),
13361336
GenericParamKind::Type { default: Some(_), .. }
@@ -1357,7 +1357,7 @@ impl<'a> Visitor<'a> for AstValidator<'a> {
13571357
deny_equality_constraints(self, predicate, generics);
13581358
}
13591359
}
1360-
walk_list!(self, visit_generic_param, &generics.params);
1360+
walk_list!(self, visit_generic_param, generics.params.iter());
13611361
for predicate in &generics.where_clause.predicates {
13621362
match predicate {
13631363
WherePredicate::BoundPredicate(bound_pred) => {
@@ -1658,7 +1658,7 @@ fn deny_equality_constraints(
16581658
if let TyKind::Path(None, path) = &qself.ty.kind {
16591659
match &path.segments[..] {
16601660
[PathSegment { ident, args: None, .. }] => {
1661-
for param in &generics.params {
1661+
for param in generics.params.iter() {
16621662
if param.ident == *ident {
16631663
let param = ident;
16641664
match &full_path.segments[qself.position..] {
@@ -1722,7 +1722,7 @@ fn deny_equality_constraints(
17221722
// Given `A: Foo, A::Bar = RhsTy`, suggest `A: Foo<Bar = RhsTy>`.
17231723
if let TyKind::Path(None, full_path) = &predicate.lhs_ty.kind {
17241724
if let [potential_param, potential_assoc] = &full_path.segments[..] {
1725-
for param in &generics.params {
1725+
for param in generics.params.iter() {
17261726
if param.ident == potential_param.ident {
17271727
for bound in &param.bounds {
17281728
if let ast::GenericBound::Trait(trait_ref, TraitBoundModifier::None) = bound

compiler/rustc_ast_pretty/src/pprust/state.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1714,7 +1714,7 @@ impl<'a> State<'a> {
17141714
self.ibox(INDENT_UNIT);
17151715
self.print_formal_generic_params(generic_params);
17161716
let generics = ast::Generics {
1717-
params: Vec::new(),
1717+
params: Box::new([]),
17181718
where_clause: ast::WhereClause {
17191719
has_where_token: false,
17201720
predicates: Vec::new(),

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -575,7 +575,7 @@ impl<'a> TraitDef<'a> {
575575
})
576576
});
577577

578-
let Generics { mut params, mut where_clause, .. } =
578+
let (mut params, mut where_clause) =
579579
self.generics.to_generics(cx, self.span, type_ident, generics);
580580
where_clause.span = generics.where_clause.span;
581581
let ctxt = self.span.ctxt();
@@ -687,7 +687,7 @@ impl<'a> TraitDef<'a> {
687687
}
688688
}
689689

690-
let trait_generics = Generics { params, where_clause, span };
690+
let trait_generics = Generics { params: params.into_boxed_slice(), where_clause, span };
691691

692692
// Create the reference to the trait.
693693
let trait_ref = cx.trait_ref(trait_path);
@@ -932,7 +932,7 @@ impl<'a> MethodDef<'a> {
932932
) -> P<ast::AssocItem> {
933933
let span = trait_.span;
934934
// Create the generics that aren't for `Self`.
935-
let fn_generics = self.generics.to_generics(cx, span, type_ident, generics);
935+
let (params, where_clause) = self.generics.to_generics(cx, span, type_ident, generics);
936936

937937
let args = {
938938
let self_arg = explicit_self.map(|explicit_self| {
@@ -969,7 +969,7 @@ impl<'a> MethodDef<'a> {
969969
kind: ast::AssocItemKind::Fn(Box::new(ast::Fn {
970970
defaultness,
971971
sig,
972-
generics: fn_generics,
972+
generics: Generics { params: params.into_boxed_slice(), where_clause, span },
973973
body: Some(body_block),
974974
})),
975975
tokens: None,

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

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
pub use Ty::*;
55

66
use rustc_ast::ptr::P;
7-
use rustc_ast::{self as ast, Expr, GenericArg, GenericParamKind, Generics, SelfKind};
7+
use rustc_ast::{self as ast, Expr, GenericArg, GenericParam, GenericParamKind, Generics, SelfKind, WhereClause};
88
use rustc_expand::base::ExtCtxt;
99
use rustc_span::source_map::{respan, DUMMY_SP};
1010
use rustc_span::symbol::{kw, Ident, Symbol};
@@ -176,7 +176,7 @@ impl Bounds {
176176
span: Span,
177177
self_ty: Ident,
178178
self_generics: &Generics,
179-
) -> Generics {
179+
) -> (Vec<GenericParam>, WhereClause) {
180180
let params = self
181181
.bounds
182182
.iter()
@@ -186,11 +186,9 @@ impl Bounds {
186186
})
187187
.collect();
188188

189-
Generics {
190-
params,
191-
where_clause: ast::WhereClause { has_where_token: false, predicates: Vec::new(), span },
192-
span,
193-
}
189+
let where_clause =
190+
ast::WhereClause { has_where_token: false, predicates: Vec::new(), span };
191+
(params, where_clause)
194192
}
195193
}
196194

compiler/rustc_parse/src/parser/generics.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,7 @@ impl<'a> Parser<'a> {
198198
(vec![], self.prev_token.span.shrink_to_hi())
199199
};
200200
Ok(ast::Generics {
201-
params,
201+
params: params.into_boxed_slice(),
202202
where_clause: WhereClause {
203203
has_where_token: false,
204204
predicates: Vec::new(),

src/test/ui/stats/hir-stats.stderr

Lines changed: 36 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -11,49 +11,49 @@ ast-stats-1 - AngleBracketed 64 ( 0.8%) 1
1111
ast-stats-1 Local 72 ( 0.9%) 1 72
1212
ast-stats-1 WherePredicate 72 ( 0.9%) 1 72
1313
ast-stats-1 - BoundPredicate 72 ( 0.9%) 1
14-
ast-stats-1 Arm 96 ( 1.1%) 2 48
15-
ast-stats-1 ForeignItem 96 ( 1.1%) 1 96
16-
ast-stats-1 - Fn 96 ( 1.1%) 1
14+
ast-stats-1 Arm 96 ( 1.2%) 2 48
15+
ast-stats-1 ForeignItem 96 ( 1.2%) 1 96
16+
ast-stats-1 - Fn 96 ( 1.2%) 1
1717
ast-stats-1 FieldDef 160 ( 1.9%) 2 80
1818
ast-stats-1 Stmt 160 ( 1.9%) 5 32
1919
ast-stats-1 - Local 32 ( 0.4%) 1
2020
ast-stats-1 - MacCall 32 ( 0.4%) 1
21-
ast-stats-1 - Expr 96 ( 1.1%) 3
21+
ast-stats-1 - Expr 96 ( 1.2%) 3
2222
ast-stats-1 Param 160 ( 1.9%) 4 40
2323
ast-stats-1 FnDecl 200 ( 2.4%) 5 40
2424
ast-stats-1 Variant 240 ( 2.9%) 2 120
2525
ast-stats-1 Block 240 ( 2.9%) 6 40
2626
ast-stats-1 GenericBound 352 ( 4.2%) 4 88
2727
ast-stats-1 - Trait 352 ( 4.2%) 4
28-
ast-stats-1 AssocItem 416 ( 4.9%) 4 104
28+
ast-stats-1 AssocItem 416 ( 5.0%) 4 104
2929
ast-stats-1 - TyAlias 208 ( 2.5%) 2
3030
ast-stats-1 - Fn 208 ( 2.5%) 2
3131
ast-stats-1 GenericParam 520 ( 6.2%) 5 104
3232
ast-stats-1 PathSegment 720 ( 8.6%) 30 24
33-
ast-stats-1 Expr 832 ( 9.9%) 8 104
33+
ast-stats-1 Expr 832 (10.0%) 8 104
3434
ast-stats-1 - Path 104 ( 1.2%) 1
3535
ast-stats-1 - Match 104 ( 1.2%) 1
3636
ast-stats-1 - Struct 104 ( 1.2%) 1
3737
ast-stats-1 - Lit 208 ( 2.5%) 2
3838
ast-stats-1 - Block 312 ( 3.7%) 3
39-
ast-stats-1 Pat 840 (10.0%) 7 120
39+
ast-stats-1 Pat 840 (10.1%) 7 120
4040
ast-stats-1 - Struct 120 ( 1.4%) 1
4141
ast-stats-1 - Wild 120 ( 1.4%) 1
42-
ast-stats-1 - Ident 600 ( 7.1%) 5
43-
ast-stats-1 Ty 1_344 (16.0%) 14 96
44-
ast-stats-1 - Rptr 96 ( 1.1%) 1
45-
ast-stats-1 - Ptr 96 ( 1.1%) 1
42+
ast-stats-1 - Ident 600 ( 7.2%) 5
43+
ast-stats-1 Ty 1_344 (16.1%) 14 96
44+
ast-stats-1 - Rptr 96 ( 1.2%) 1
45+
ast-stats-1 - Ptr 96 ( 1.2%) 1
4646
ast-stats-1 - ImplicitSelf 192 ( 2.3%) 2
47-
ast-stats-1 - Path 960 (11.4%) 10
48-
ast-stats-1 Item 1_656 (19.7%) 9 184
49-
ast-stats-1 - Trait 184 ( 2.2%) 1
50-
ast-stats-1 - Enum 184 ( 2.2%) 1
51-
ast-stats-1 - ForeignMod 184 ( 2.2%) 1
52-
ast-stats-1 - Impl 184 ( 2.2%) 1
53-
ast-stats-1 - Fn 368 ( 4.4%) 2
54-
ast-stats-1 - Use 552 ( 6.6%) 3
47+
ast-stats-1 - Path 960 (11.5%) 10
48+
ast-stats-1 Item 1_584 (19.0%) 9 176
49+
ast-stats-1 - Trait 176 ( 2.1%) 1
50+
ast-stats-1 - Enum 176 ( 2.1%) 1
51+
ast-stats-1 - ForeignMod 176 ( 2.1%) 1
52+
ast-stats-1 - Impl 176 ( 2.1%) 1
53+
ast-stats-1 - Fn 352 ( 4.2%) 2
54+
ast-stats-1 - Use 528 ( 6.3%) 3
5555
ast-stats-1 ----------------------------------------------------------------
56-
ast-stats-1 Total 8_408
56+
ast-stats-1 Total 8_336
5757
ast-stats-1
5858
ast-stats-2 POST EXPANSION AST STATS
5959
ast-stats-2 Name Accumulated Size Count Item Size
@@ -79,41 +79,41 @@ ast-stats-2 - Semi 32 ( 0.4%) 1
7979
ast-stats-2 - Expr 96 ( 1.1%) 3
8080
ast-stats-2 Param 160 ( 1.8%) 4 40
8181
ast-stats-2 FnDecl 200 ( 2.2%) 5 40
82-
ast-stats-2 Variant 240 ( 2.6%) 2 120
83-
ast-stats-2 Block 240 ( 2.6%) 6 40
82+
ast-stats-2 Variant 240 ( 2.7%) 2 120
83+
ast-stats-2 Block 240 ( 2.7%) 6 40
8484
ast-stats-2 GenericBound 352 ( 3.9%) 4 88
8585
ast-stats-2 - Trait 352 ( 3.9%) 4
8686
ast-stats-2 AssocItem 416 ( 4.6%) 4 104
8787
ast-stats-2 - TyAlias 208 ( 2.3%) 2
8888
ast-stats-2 - Fn 208 ( 2.3%) 2
8989
ast-stats-2 GenericParam 520 ( 5.7%) 5 104
90-
ast-stats-2 PathSegment 792 ( 8.7%) 33 24
91-
ast-stats-2 Pat 840 ( 9.2%) 7 120
90+
ast-stats-2 PathSegment 792 ( 8.8%) 33 24
91+
ast-stats-2 Pat 840 ( 9.3%) 7 120
9292
ast-stats-2 - Struct 120 ( 1.3%) 1
9393
ast-stats-2 - Wild 120 ( 1.3%) 1
9494
ast-stats-2 - Ident 600 ( 6.6%) 5
95-
ast-stats-2 Expr 936 (10.2%) 9 104
95+
ast-stats-2 Expr 936 (10.3%) 9 104
9696
ast-stats-2 - Path 104 ( 1.1%) 1
9797
ast-stats-2 - Match 104 ( 1.1%) 1
9898
ast-stats-2 - Struct 104 ( 1.1%) 1
9999
ast-stats-2 - InlineAsm 104 ( 1.1%) 1
100100
ast-stats-2 - Lit 208 ( 2.3%) 2
101101
ast-stats-2 - Block 312 ( 3.4%) 3
102-
ast-stats-2 Ty 1_344 (14.7%) 14 96
102+
ast-stats-2 Ty 1_344 (14.9%) 14 96
103103
ast-stats-2 - Rptr 96 ( 1.1%) 1
104104
ast-stats-2 - Ptr 96 ( 1.1%) 1
105105
ast-stats-2 - ImplicitSelf 192 ( 2.1%) 2
106-
ast-stats-2 - Path 960 (10.5%) 10
107-
ast-stats-2 Item 2_024 (22.2%) 11 184
108-
ast-stats-2 - Trait 184 ( 2.0%) 1
109-
ast-stats-2 - Enum 184 ( 2.0%) 1
110-
ast-stats-2 - ExternCrate 184 ( 2.0%) 1
111-
ast-stats-2 - ForeignMod 184 ( 2.0%) 1
112-
ast-stats-2 - Impl 184 ( 2.0%) 1
113-
ast-stats-2 - Fn 368 ( 4.0%) 2
114-
ast-stats-2 - Use 736 ( 8.1%) 4
106+
ast-stats-2 - Path 960 (10.6%) 10
107+
ast-stats-2 Item 1_936 (21.4%) 11 176
108+
ast-stats-2 - Trait 176 ( 1.9%) 1
109+
ast-stats-2 - Enum 176 ( 1.9%) 1
110+
ast-stats-2 - ExternCrate 176 ( 1.9%) 1
111+
ast-stats-2 - ForeignMod 176 ( 1.9%) 1
112+
ast-stats-2 - Impl 176 ( 1.9%) 1
113+
ast-stats-2 - Fn 352 ( 3.9%) 2
114+
ast-stats-2 - Use 704 ( 7.8%) 4
115115
ast-stats-2 ----------------------------------------------------------------
116-
ast-stats-2 Total 9_136
116+
ast-stats-2 Total 9_048
117117
ast-stats-2
118118
hir-stats HIR STATS
119119
hir-stats Name Accumulated Size Count Item Size

0 commit comments

Comments
 (0)