diff options
| author | Kevin Atkinson <kevina@cs.utah.edu> | 2012-01-10 14:50:40 -0700 |
|---|---|---|
| committer | Graydon Hoare <graydon@mozilla.com> | 2012-01-10 15:59:57 -0800 |
| commit | 08abf8d37fa549ebc67f80d80530f4aa43d716e4 (patch) | |
| tree | f6c9bce62c494a37d989d07be4661f57c0c7eba3 /src/comp/middle/ty.rs | |
| parent | d0fe6723fc2f431205092bda9ec399d932081bd0 (diff) | |
| download | rust-08abf8d37fa549ebc67f80d80530f4aa43d716e4.tar.gz rust-08abf8d37fa549ebc67f80d80530f4aa43d716e4.zip | |
Support explicit discriminant numbers on tag variants.
Addresses issue #1393. For now disallow disr. values unless all variants use nullary contractors (i.e. "enum-like"). Disr. values are now encoded in the crate metadata, but only when it will differ from the inferred value based on the order.
Diffstat (limited to 'src/comp/middle/ty.rs')
| -rw-r--r-- | src/comp/middle/ty.rs | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/src/comp/middle/ty.rs b/src/comp/middle/ty.rs index 76a9b4c69c7..dbd688de402 100644 --- a/src/comp/middle/ty.rs +++ b/src/comp/middle/ty.rs @@ -2686,7 +2686,8 @@ fn impl_iface(cx: ctxt, id: ast::def_id) -> option::t<t> { } // Tag information -type variant_info = @{args: [ty::t], ctor_ty: ty::t, id: ast::def_id}; +type variant_info = @{args: [ty::t], ctor_ty: ty::t, id: ast::def_id, + disr_val: int}; fn tag_variants(cx: ctxt, id: ast::def_id) -> @[variant_info] { alt cx.tag_var_cache.find(id) { @@ -2705,7 +2706,9 @@ fn tag_variants(cx: ctxt, id: ast::def_id) -> @[variant_info] { } else { [] }; @{args: arg_tys, ctor_ty: ctor_ty, - id: ast_util::local_def(variant.node.id)} + id: ast_util::local_def(variant.node.id), + disr_val: variant.node.disr_val + } }) } } |
