diff options
| author | Kevin Atkinson <kevina@cs.utah.edu> | 2012-01-16 02:36:47 -0700 |
|---|---|---|
| committer | Marijn Haverbeke <marijnh@gmail.com> | 2012-01-16 11:19:33 +0100 |
| commit | e1c50c4410804dfce9fbe040f341f6104cc9ba7e (patch) | |
| tree | 5afd49a9f0b209d2853f991532297a315d342b13 /src/comp/metadata | |
| parent | edf11ebf021dba897e5419cca53de3b652670799 (diff) | |
| download | rust-e1c50c4410804dfce9fbe040f341f6104cc9ba7e.tar.gz rust-e1c50c4410804dfce9fbe040f341f6104cc9ba7e.zip | |
Don't evaluate discriminator value constants when parsing.
Remove disr_val from ast::variant_ and always use ty::variant_info when the value is needed. Move what was done during parsing into other passes, primary typeck.rs. This move also correctly type checks the disr. value expression; thus, fixing rustc --pretty=typed when disr. values are used.
Diffstat (limited to 'src/comp/metadata')
| -rw-r--r-- | src/comp/metadata/encoder.rs | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/comp/metadata/encoder.rs b/src/comp/metadata/encoder.rs index 537c420aa71..41235c01d3d 100644 --- a/src/comp/metadata/encoder.rs +++ b/src/comp/metadata/encoder.rs @@ -232,6 +232,8 @@ fn encode_tag_variant_info(ecx: @encode_ctxt, ebml_w: ebml::writer, id: node_id, variants: [variant], &index: [entry<int>], ty_params: [ty_param]) { let disr_val = 0; + let i = 0; + let vi = ty::tag_variants(ecx.ccx.tcx, {crate: local_crate, node: id}); for variant: variant in variants { index += [{val: variant.node.id, pos: ebml_w.writer.tell()}]; ebml::start_tag(ebml_w, tag_items_data_item); @@ -244,13 +246,14 @@ fn encode_tag_variant_info(ecx: @encode_ctxt, ebml_w: ebml::writer, encode_symbol(ecx, ebml_w, variant.node.id); } encode_discriminant(ecx, ebml_w, variant.node.id); - if variant.node.disr_val != disr_val { - encode_disr_val(ecx, ebml_w, variant.node.disr_val); - disr_val = variant.node.disr_val; + if vi[i].disr_val != disr_val { + encode_disr_val(ecx, ebml_w, vi[i].disr_val); + disr_val = vi[i].disr_val; } encode_type_param_bounds(ebml_w, ecx, ty_params); ebml::end_tag(ebml_w); disr_val += 1; + i += 1; } } |
