Skip to content

Commit d2ea3da

Browse files
committed
rustc_metadata: group the tags into root tags and item tags.
1 parent 89736e8 commit d2ea3da

File tree

5 files changed

+205
-312
lines changed

5 files changed

+205
-312
lines changed

src/librustc_metadata/astencode.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ use rustc_serialize::{Decodable, Encodable};
3333
// Top-level methods.
3434

3535
pub fn encode_inlined_item(ecx: &mut EncodeContext, ii: InlinedItemRef) {
36-
ecx.tag(::common::tag_ast, |ecx| {
36+
ecx.tag(::common::item_tag::ast, |ecx| {
3737
let mut visitor = IdRangeComputingVisitor::new();
3838
match ii {
3939
InlinedItemRef::Item(_, i) => visitor.visit_item(i),

src/librustc_metadata/common.rs

Lines changed: 65 additions & 161 deletions
Original file line numberDiff line numberDiff line change
@@ -35,178 +35,82 @@ pub enum Family {
3535
AssociatedConst,
3636
}
3737

38-
// GAP 0x00...0x19
39-
40-
pub const tag_items: usize = 0x100; // top-level only
41-
42-
pub const tag_paths_data_name: usize = 0x20;
43-
44-
pub const tag_def_index: usize = 0x21;
45-
46-
pub const tag_items_data: usize = 0x22;
47-
48-
pub const tag_items_data_item: usize = 0x23;
49-
50-
pub const tag_items_data_item_family: usize = 0x24;
51-
52-
pub const tag_items_data_item_type: usize = 0x25;
53-
54-
// GAP 0x26, 0x27
55-
56-
pub const tag_items_data_parent_item: usize = 0x28;
57-
58-
pub const tag_items_data_item_is_tuple_struct_ctor: usize = 0x29;
59-
60-
pub const tag_items_closure_kind: usize = 0x2a;
61-
pub const tag_items_closure_ty: usize = 0x2b;
62-
pub const tag_def_key: usize = 0x2c;
63-
64-
// GAP 0x2d 0x34
65-
66-
pub const tag_index: usize = 0x110; // top-level only
67-
pub const tag_xref_index: usize = 0x111; // top-level only
68-
pub const tag_xref_data: usize = 0x112; // top-level only
69-
pub const tag_attributes: usize = 0x101; // top-level only
70-
71-
// The list of crates that this crate depends on
72-
pub const tag_crate_deps: usize = 0x102; // top-level only
73-
pub const tag_crate_hash: usize = 0x103; // top-level only
74-
pub const tag_crate_crate_name: usize = 0x104; // top-level only
75-
pub const tag_crate_disambiguator: usize = 0x113; // top-level only
76-
77-
// GAP 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a
78-
79-
pub const tag_item_trait_ref: usize = 0x3b;
80-
81-
// discriminator value for variants
82-
pub const tag_disr_val: usize = 0x3c;
83-
84-
// GAP 0x3d, 0x3e, 0x3f, 0x40
85-
86-
pub const tag_item_fields: usize = 0x41;
87-
// GAP 0x42
88-
pub const tag_item_variances: usize = 0x43;
89-
// GAP 0x44
90-
pub const tag_item_trait_method_explicit_self: usize = 0x45;
91-
92-
// GAP 0x46, 0x47, 0x48
93-
94-
// used to encode crate_ctxt side tables
95-
pub const tag_ast: usize = 0x50;
96-
97-
// GAP 0x51
98-
99-
pub const tag_mir: usize = 0x52;
100-
101-
// GAP 0x53...0x6a
102-
103-
pub const tag_item_trait_item_has_body: usize = 0x70;
104-
105-
pub const tag_crate_triple: usize = 0x105; // top-level only
106-
107-
pub const tag_dylib_dependency_formats: usize = 0x106; // top-level only
108-
109-
pub const tag_lang_items: usize = 0x107; // top-level only
110-
111-
// GAP 0x73, 0x74, 0x75
112-
113-
pub const tag_lang_items_missing: usize = 0x76; // top-level only
114-
115-
// GAP 0x77
116-
117-
pub const tag_items_data_item_visibility: usize = 0x78;
118-
pub const tag_items_data_item_inherent_impls: usize = 0x79;
119-
120-
// GAP 0x7a
121-
122-
// GAP 0x7c
123-
pub const tag_mod_children: usize = 0x7b;
124-
125-
// GAP 0x108 // top-level only
38+
// NB: increment this if you change the format of metadata such that
39+
// rustc_version can't be found.
40+
pub const metadata_encoding_version : &'static [u8] = &[b'r', b'u', b's', b't', 0, 0, 0, 2];
12641

12742
// GAP 0x7c
128-
12943
// GAP 0x108
130-
pub const tag_impls: usize = 0x109; // top-level only
131-
132-
// GAP 0x7d, 0x7e, 0x7f, 0x80, 0x81
133-
134-
pub const tag_native_libraries: usize = 0x10a; // top-level only
135-
136-
// GAP 0x82, 0x83, 0x84
137-
138-
pub const tag_plugin_registrar_fn: usize = 0x10b; // top-level only
139-
140-
pub const tag_method_argument_names: usize = 0x85;
141-
142-
// GAP 0x86
143-
144-
pub const tag_reachable_ids: usize = 0x10c; // top-level only
145-
146-
// GAP 0x87
147-
148-
pub const tag_items_data_item_stability: usize = 0x88;
149-
150-
pub const tag_items_data_item_repr: usize = 0x89;
151-
152-
// GAP 0x10d // top-level only
153-
154-
// GAP 0x8a
155-
156-
pub const tag_items_data_item_struct_ctor: usize = 0x8b;
157-
pub const tag_attribute_is_sugared_doc: usize = 0x8c;
158-
// GAP 0x8d
159-
pub const tag_items_data_region: usize = 0x8e;
160-
161-
pub const tag_item_generics: usize = 0x8f;
162-
// GAP 0x90, 0x91, 0x92, 0x93, 0x94
163-
164-
pub const tag_item_predicates: usize = 0x95;
165-
// GAP 0x96, 0x97, 0x98, 0x99
166-
167-
pub const tag_unsafety: usize = 0x9a;
168-
169-
pub const tag_polarity: usize = 0x9d;
170-
171-
pub const tag_macro_defs: usize = 0x10e; // top-level only
172-
173-
// GAP 0x9e, 0x9f
174-
175-
pub const tag_paren_sugar: usize = 0xa0;
176-
177-
pub const tag_codemap: usize = 0xa1;
178-
179-
// GAP 0xa2
180-
181-
pub const tag_item_super_predicates: usize = 0xa3;
182-
183-
pub const tag_defaulted_trait: usize = 0xa4;
184-
185-
pub const tag_impl_coerce_unsized_kind: usize = 0xa5;
186-
187-
pub const tag_items_data_item_constness: usize = 0xa6;
188-
189-
pub const tag_items_data_item_deprecation: usize = 0xa7;
190-
191-
pub const tag_items_data_item_defaultness: usize = 0xa8;
192-
193-
pub const tag_items_data_parent_impl: usize = 0xa9;
194-
195-
pub const tag_rustc_version: usize = 0x10f;
19644
pub fn rustc_version() -> String {
19745
format!(
19846
"rustc {}",
19947
option_env!("CFG_VERSION").unwrap_or("unknown version")
20048
)
20149
}
20250

203-
pub const tag_panic_strategy: usize = 0x114;
204-
205-
pub const tag_macro_derive_registrar: usize = 0x115;
51+
pub mod root_tag {
52+
pub const rustc_version: usize = 0x10f;
53+
pub const crate_deps: usize = 0x102;
54+
pub const crate_hash: usize = 0x103;
55+
pub const crate_crate_name: usize = 0x104;
56+
pub const crate_disambiguator: usize = 0x113;
57+
pub const items: usize = 0x100;
58+
pub const index: usize = 0x110;
59+
pub const xref_index: usize = 0x111;
60+
pub const xref_data: usize = 0x112;
61+
pub const crate_triple: usize = 0x105;
62+
pub const dylib_dependency_formats: usize = 0x106;
63+
pub const lang_items: usize = 0x107;
64+
pub const lang_items_missing: usize = 0x76;
65+
pub const impls: usize = 0x109;
66+
pub const native_libraries: usize = 0x10a;
67+
pub const plugin_registrar_fn: usize = 0x10b;
68+
pub const panic_strategy: usize = 0x114;
69+
pub const macro_derive_registrar: usize = 0x115;
70+
pub const reachable_ids: usize = 0x10c;
71+
pub const macro_defs: usize = 0x10e;
72+
pub const codemap: usize = 0xa1;
73+
}
20674

207-
// NB: increment this if you change the format of metadata such that
208-
// rustc_version can't be found.
209-
pub const metadata_encoding_version : &'static [u8] = &[b'r', b'u', b's', b't', 0, 0, 0, 2];
75+
pub mod item_tag {
76+
pub const name: usize = 0x20;
77+
pub const def_index: usize = 0x21;
78+
pub const family: usize = 0x24;
79+
pub const ty: usize = 0x25;
80+
pub const parent_item: usize = 0x28;
81+
pub const is_tuple_struct_ctor: usize = 0x29;
82+
pub const closure_kind: usize = 0x2a;
83+
pub const closure_ty: usize = 0x2b;
84+
pub const def_key: usize = 0x2c;
85+
pub const attributes: usize = 0x101;
86+
pub const trait_ref: usize = 0x3b;
87+
pub const disr_val: usize = 0x3c;
88+
pub const fields: usize = 0x41;
89+
pub const variances: usize = 0x43;
90+
pub const trait_method_explicit_self: usize = 0x45;
91+
pub const ast: usize = 0x50;
92+
pub const mir: usize = 0x52;
93+
pub const trait_item_has_body: usize = 0x70;
94+
pub const visibility: usize = 0x78;
95+
pub const inherent_impls: usize = 0x79;
96+
pub const children: usize = 0x7b;
97+
pub const method_argument_names: usize = 0x85;
98+
pub const stability: usize = 0x88;
99+
pub const repr: usize = 0x89;
100+
pub const struct_ctor: usize = 0x8b;
101+
pub const generics: usize = 0x8f;
102+
pub const predicates: usize = 0x95;
103+
pub const unsafety: usize = 0x9a;
104+
pub const polarity: usize = 0x9d;
105+
pub const paren_sugar: usize = 0xa0;
106+
pub const super_predicates: usize = 0xa3;
107+
pub const defaulted_trait: usize = 0xa4;
108+
pub const impl_coerce_unsized_kind: usize = 0xa5;
109+
pub const constness: usize = 0xa6;
110+
pub const deprecation: usize = 0xa7;
111+
pub const defaultness: usize = 0xa8;
112+
pub const parent_impl: usize = 0xa9;
113+
}
210114

211115
/// The shorthand encoding of `Ty` uses `TypeVariants`' variant `usize`
212116
/// and is offset by this value so it never matches a real variant.

0 commit comments

Comments
 (0)