Skip to content

Commit db7e588

Browse files
committed
---
yaml --- r: 81342 b: refs/heads/snap-stage3 c: 8f8cc06 h: refs/heads/master v: v3
1 parent 86718df commit db7e588

File tree

3 files changed

+22
-10
lines changed

3 files changed

+22
-10
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
refs/heads/master: 4c6bf4872012c010f84dc7fa2cdfe87522533f89
33
refs/heads/snap-stage1: e33de59e47c5076a89eadeb38f4934f58a3618a6
4-
refs/heads/snap-stage3: 0feaccf5260bc59f7ee4294a2ecc875da669ad30
4+
refs/heads/snap-stage3: 8f8cc061d9a82f7cfd9b9c9d7312c9551c4b286f
55
refs/heads/try: 70152ff55722878cde684ee6462c14c65f2c4729
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
77
refs/heads/ndm: f3868061cd7988080c30d6d5bf352a5a5fe2460b

branches/snap-stage3/src/libsyntax/ext/build.rs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,7 @@ pub trait AstBuilder {
136136
fn expr_some(&self, sp: Span, expr: @ast::Expr) -> @ast::Expr;
137137
fn expr_none(&self, sp: Span) -> @ast::Expr;
138138

139+
fn expr_fail(&self, span: Span, msg: @str) -> @ast::Expr;
139140
fn expr_unreachable(&self, span: Span) -> @ast::Expr;
140141

141142
fn pat(&self, span: Span, pat: ast::Pat_) -> @ast::Pat;
@@ -591,7 +592,7 @@ impl AstBuilder for @ExtCtxt {
591592
self.expr_path(none)
592593
}
593594

594-
fn expr_unreachable(&self, span: Span) -> @ast::Expr {
595+
fn expr_fail(&self, span: Span, msg: @str) -> @ast::Expr {
595596
let loc = self.codemap().lookup_char_pos(span.lo);
596597
self.expr_call_global(
597598
span,
@@ -602,12 +603,16 @@ impl AstBuilder for @ExtCtxt {
602603
self.ident_of("fail_with"),
603604
],
604605
~[
605-
self.expr_str(span, @"internal error: entered unreachable code"),
606+
self.expr_str(span, msg),
606607
self.expr_str(span, loc.file.name),
607608
self.expr_uint(span, loc.line),
608609
])
609610
}
610611

612+
fn expr_unreachable(&self, span: Span) -> @ast::Expr {
613+
self.expr_fail(span, @"internal error: entered unreachable code")
614+
}
615+
611616

612617
fn pat(&self, span: Span, pat: ast::Pat_) -> @ast::Pat {
613618
@ast::Pat { id: ast::DUMMY_NODE_ID, node: pat, span: span }

branches/snap-stage3/src/libsyntax/ext/deriving/primitive.rs

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -64,10 +64,15 @@ fn cs_from(name: &str, cx: @ExtCtxt, span: Span, substr: &Substructure) -> @Expr
6464
_ => cx.span_bug(span, "Incorrect number of arguments in `deriving(FromPrimitive)`")
6565
};
6666

67-
return match *substr.fields {
67+
match *substr.fields {
68+
StaticStruct(*) => {
69+
cx.span_err(span, "`FromPrimitive` cannot be derived for structs");
70+
return cx.expr_fail(span, @"");
71+
}
6872
StaticEnum(enum_def, _) => {
6973
if enum_def.variants.is_empty() {
70-
cx.span_fatal(span, "`FromPrimitive` cannot be derived for enums with no variants");
74+
cx.span_err(span, "`FromPrimitive` cannot be derived for enums with no variants");
75+
return cx.expr_fail(span, @"");
7176
}
7277

7378
let mut arms = ~[];
@@ -76,8 +81,9 @@ fn cs_from(name: &str, cx: @ExtCtxt, span: Span, substr: &Substructure) -> @Expr
7681
match variant.node.kind {
7782
ast::tuple_variant_kind(ref args) => {
7883
if !args.is_empty() {
79-
cx.span_fatal(span, "`FromPrimitive` cannot be derived for \
80-
enum variants with arguments");
84+
cx.span_err(span, "`FromPrimitive` cannot be derived for \
85+
enum variants with arguments");
86+
return cx.expr_fail(span, @"");
8187
}
8288

8389
// expr for `$n == $variant as $name`
@@ -99,8 +105,9 @@ fn cs_from(name: &str, cx: @ExtCtxt, span: Span, substr: &Substructure) -> @Expr
99105
arms.push(arm);
100106
}
101107
ast::struct_variant_kind(_) => {
102-
cx.span_fatal(span, "`FromPrimitive` cannot be derived for enums \
103-
with struct variants");
108+
cx.span_err(span, "`FromPrimitive` cannot be derived for enums \
109+
with struct variants");
110+
return cx.expr_fail(span, @"");
104111
}
105112
}
106113
}
@@ -116,5 +123,5 @@ fn cs_from(name: &str, cx: @ExtCtxt, span: Span, substr: &Substructure) -> @Expr
116123
cx.expr_match(span, n, arms)
117124
}
118125
_ => cx.bug("expected StaticEnum in deriving(FromPrimitive)")
119-
};
126+
}
120127
}

0 commit comments

Comments
 (0)