Merge pull request #1544 from kevina/issue-1393

Minor cleanups to custom discriminator code.
This commit is contained in:
Graydon Hoare 2012-01-17 12:45:09 -08:00
commit 711fc20d88
4 changed files with 8 additions and 8 deletions

View File

@ -103,9 +103,9 @@ equivalent to a C enum:
This will define `north`, `east`, `south`, and `west` as constants, This will define `north`, `east`, `south`, and `west` as constants,
all of which have type `direction`. all of which have type `direction`.
When the enum is is C like, that is none of the variants have When the enum is C like, that is none of the variants have parameters,
parameters, it is possible to explicit set the discriminator values to it is possible to explicitly set the discriminator values to an integer
an integer value: value:
enum color { enum color {
red = 0xff0000; red = 0xff0000;

View File

@ -2645,8 +2645,8 @@ fn tag_variants(cx: ctxt, id: ast::def_id) -> @[variant_info] {
@csearch::get_tag_variants(cx, id) @csearch::get_tag_variants(cx, id)
} else { } else {
// FIXME: Now that the variants are run through the type checker (to // FIXME: Now that the variants are run through the type checker (to
// check the disr_expr if one exists), this code should likely be // check the disr_expr if it exists), this code should likely be
// moved there to avoid having to call eval_const_expr twice // moved there to avoid having to call eval_const_expr twice.
alt cx.items.get(id.node) { alt cx.items.get(id.node) {
ast_map::node_item(@{node: ast::item_tag(variants, _), _}) { ast_map::node_item(@{node: ast::item_tag(variants, _), _}) {
let disr_val = -1; let disr_val = -1;

View File

@ -2489,8 +2489,8 @@ fn check_tag_variants(ccx: @crate_ctxt, _sp: span, vs: [ast::variant],
demand::simple(fcx, e.span, declty, cty); demand::simple(fcx, e.span, declty, cty);
// FIXME: issue #1417 // FIXME: issue #1417
// Also, check_expr (from check_const pass) doesn't guarantee that // Also, check_expr (from check_const pass) doesn't guarantee that
// the expression in an form that eval_const_expr, so we may still // the expression in an form that eval_const_expr can handle, so
// get an internal compiler error // we may still get an internal compiler error.
alt syntax::ast_util::eval_const_expr(e) { alt syntax::ast_util::eval_const_expr(e) {
syntax::ast_util::const_int(val) { syntax::ast_util::const_int(val) {
disr_val = val as int; disr_val = val as int;

View File

@ -9,7 +9,7 @@ fn main() {
test_color(imaginary, -1, "imaginary"); test_color(imaginary, -1, "imaginary");
} }
fn test_color(color: color, val: int, name: str) unsafe{ fn test_color(color: color, val: int, name: str) {
assert (color as int == val); assert (color as int == val);
assert (color as float == val as float); assert (color as float == val as float);
} }