Skip to content

Commit 8f8cc06

Browse files
committed
syntax: swap from .span_fatal to .span_err in #[deriving(FromPrimitive)]
1 parent 0feaccf commit 8f8cc06

File tree

2 files changed

+21
-9
lines changed

2 files changed

+21
-9
lines changed

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 }

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)