@@ -64,10 +64,15 @@ fn cs_from(name: &str, cx: @ExtCtxt, span: Span, substr: &Substructure) -> @Expr
64
64
_ => cx. span_bug( span, "Incorrect number of arguments in `deriving(FromPrimitive)`" )
65
65
} ;
66
66
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
+ }
68
72
StaticEnum ( enum_def, _) => {
69
73
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, @"") ;
71
76
}
72
77
73
78
let mut arms = ~[ ] ;
@@ -76,8 +81,9 @@ fn cs_from(name: &str, cx: @ExtCtxt, span: Span, substr: &Substructure) -> @Expr
76
81
match variant. node. kind {
77
82
ast : : tuple_variant_kind( ref args) => {
78
83
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, @"") ;
81
87
}
82
88
83
89
// expr for `$n == $variant as $name`
@@ -99,8 +105,9 @@ fn cs_from(name: &str, cx: @ExtCtxt, span: Span, substr: &Substructure) -> @Expr
99
105
arms. push( arm) ;
100
106
}
101
107
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, @"") ;
104
111
}
105
112
}
106
113
}
@@ -116,5 +123,5 @@ fn cs_from(name: &str, cx: @ExtCtxt, span: Span, substr: &Substructure) -> @Expr
116
123
cx. expr_match( span, n, arms)
117
124
}
118
125
_ => cx. bug( "expected StaticEnum in deriving(FromPrimitive)" )
119
- } ;
126
+ }
120
127
}
0 commit comments