@@ -23,6 +23,17 @@ use parse::token::InternedString;
23
23
use parse:: token;
24
24
use ptr:: P ;
25
25
26
+ macro_rules! panictry {
27
+ ( $e: expr) => ( {
28
+ use std:: result:: Result :: { Ok , Err } ;
29
+
30
+ match $e {
31
+ Ok ( e) => e,
32
+ Err ( e) => panic!( e) ,
33
+ }
34
+ } )
35
+ }
36
+
26
37
enum State {
27
38
Asm ,
28
39
Outputs ,
@@ -91,16 +102,16 @@ pub fn expand_asm<'cx>(cx: &'cx mut ExtCtxt, sp: Span, tts: &[ast::TokenTree])
91
102
p. token != token:: ModSep {
92
103
93
104
if outputs. len ( ) != 0 {
94
- p. eat ( & token:: Comma ) ;
105
+ panictry ! ( p. eat( & token:: Comma ) ) ;
95
106
}
96
107
97
- let ( constraint, _str_style) = p. parse_str ( ) ;
108
+ let ( constraint, _str_style) = panictry ! ( p. parse_str( ) ) ;
98
109
99
110
let span = p. last_span ;
100
111
101
- p. expect ( & token:: OpenDelim ( token:: Paren ) ) ;
112
+ panictry ! ( p. expect( & token:: OpenDelim ( token:: Paren ) ) ) ;
102
113
let out = p. parse_expr ( ) ;
103
- p. expect ( & token:: CloseDelim ( token:: Paren ) ) ;
114
+ panictry ! ( p. expect( & token:: CloseDelim ( token:: Paren ) ) ) ;
104
115
105
116
// Expands a read+write operand into two operands.
106
117
//
@@ -131,20 +142,20 @@ pub fn expand_asm<'cx>(cx: &'cx mut ExtCtxt, sp: Span, tts: &[ast::TokenTree])
131
142
p. token != token:: ModSep {
132
143
133
144
if inputs. len ( ) != 0 {
134
- p. eat ( & token:: Comma ) ;
145
+ panictry ! ( p. eat( & token:: Comma ) ) ;
135
146
}
136
147
137
- let ( constraint, _str_style) = p. parse_str ( ) ;
148
+ let ( constraint, _str_style) = panictry ! ( p. parse_str( ) ) ;
138
149
139
150
if constraint. starts_with ( "=" ) {
140
151
cx. span_err ( p. last_span , "input operand constraint contains '='" ) ;
141
152
} else if constraint. starts_with ( "+" ) {
142
153
cx. span_err ( p. last_span , "input operand constraint contains '+'" ) ;
143
154
}
144
155
145
- p. expect ( & token:: OpenDelim ( token:: Paren ) ) ;
156
+ panictry ! ( p. expect( & token:: OpenDelim ( token:: Paren ) ) ) ;
146
157
let input = p. parse_expr ( ) ;
147
- p. expect ( & token:: CloseDelim ( token:: Paren ) ) ;
158
+ panictry ! ( p. expect( & token:: CloseDelim ( token:: Paren ) ) ) ;
148
159
149
160
inputs. push ( ( constraint, input) ) ;
150
161
}
@@ -155,10 +166,10 @@ pub fn expand_asm<'cx>(cx: &'cx mut ExtCtxt, sp: Span, tts: &[ast::TokenTree])
155
166
p. token != token:: ModSep {
156
167
157
168
if clobs. len ( ) != 0 {
158
- p. eat ( & token:: Comma ) ;
169
+ panictry ! ( p. eat( & token:: Comma ) ) ;
159
170
}
160
171
161
- let ( s, _str_style) = p. parse_str ( ) ;
172
+ let ( s, _str_style) = panictry ! ( p. parse_str( ) ) ;
162
173
163
174
if OPTIONS . iter ( ) . any ( |& opt| s == opt) {
164
175
cx. span_warn ( p. last_span , "expected a clobber, found an option" ) ;
@@ -167,7 +178,7 @@ pub fn expand_asm<'cx>(cx: &'cx mut ExtCtxt, sp: Span, tts: &[ast::TokenTree])
167
178
}
168
179
}
169
180
Options => {
170
- let ( option, _str_style) = p. parse_str ( ) ;
181
+ let ( option, _str_style) = panictry ! ( p. parse_str( ) ) ;
171
182
172
183
if option == "volatile" {
173
184
// Indicates that the inline assembly has side effects
@@ -182,7 +193,7 @@ pub fn expand_asm<'cx>(cx: &'cx mut ExtCtxt, sp: Span, tts: &[ast::TokenTree])
182
193
}
183
194
184
195
if p. token == token:: Comma {
185
- p. eat ( & token:: Comma ) ;
196
+ panictry ! ( p. eat( & token:: Comma ) ) ;
186
197
}
187
198
}
188
199
StateNone => ( )
@@ -194,12 +205,12 @@ pub fn expand_asm<'cx>(cx: &'cx mut ExtCtxt, sp: Span, tts: &[ast::TokenTree])
194
205
match ( & p. token , state. next ( ) , state. next ( ) . next ( ) ) {
195
206
( & token:: Colon , StateNone , _) |
196
207
( & token:: ModSep , _, StateNone ) => {
197
- p. bump ( ) ;
208
+ panictry ! ( p. bump( ) ) ;
198
209
break ' statement;
199
210
}
200
211
( & token:: Colon , st, _) |
201
212
( & token:: ModSep , _, st) => {
202
- p. bump ( ) ;
213
+ panictry ! ( p. bump( ) ) ;
203
214
state = st;
204
215
}
205
216
( & token:: Eof , _, _) => break ' statement,
0 commit comments