Skip to content

Commit

Permalink
Merge pull request #4164 from brson/deriving
Browse files Browse the repository at this point in the history
Fix deriving for single-variant enums
  • Loading branch information
brson committed Dec 11, 2012
2 parents 6e38e33 + 7d556e1 commit bfb09ee
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 20 deletions.
44 changes: 24 additions & 20 deletions src/libsyntax/ext/deriving.rs
Original file line number Diff line number Diff line change
Expand Up @@ -698,26 +698,30 @@ fn expand_deriving_eq_enum_method(cx: ext_ctxt,
};
other_arms.push(move matching_arm);

// Create the nonmatching pattern.
let nonmatching_pat = @{
id: cx.next_id(),
node: pat_wild,
span: span
};

// Create the nonmatching pattern body.
let nonmatching_expr = build::mk_bool(cx, span, !is_eq);
let nonmatching_body_block = build::mk_simple_block(cx,
span,
nonmatching_expr);

// Create the nonmatching arm.
let nonmatching_arm = {
pats: ~[ nonmatching_pat ],
guard: None,
body: move nonmatching_body_block
};
other_arms.push(move nonmatching_arm);
// Maybe generate a non-matching case. If there is only one
// variant then there will always be a match.
if enum_definition.variants.len() > 1 {
// Create the nonmatching pattern.
let nonmatching_pat = @{
id: cx.next_id(),
node: pat_wild,
span: span
};

// Create the nonmatching pattern body.
let nonmatching_expr = build::mk_bool(cx, span, !is_eq);
let nonmatching_body_block = build::mk_simple_block(cx,
span,
nonmatching_expr);

// Create the nonmatching arm.
let nonmatching_arm = {
pats: ~[ nonmatching_pat ],
guard: None,
body: move nonmatching_body_block
};
other_arms.push(move nonmatching_arm);
}

// Create the self pattern.
let self_pat = create_enum_variant_pattern(cx,
Expand Down
8 changes: 8 additions & 0 deletions src/test/run-pass/deriving-enum-single-variant.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
type task_id = int;

#[deriving_eq]
pub enum Task {
TaskHandle(task_id)
}

fn main() { }

0 comments on commit bfb09ee

Please sign in to comment.