@@ -1549,10 +1549,10 @@ impl Parser {
1549
1549
} else if self . eat_keyword ( keywords:: If ) {
1550
1550
return self . parse_if_expr ( ) ;
1551
1551
} else if self . eat_keyword ( keywords:: For ) {
1552
- return self . parse_sugary_call_expr ( ~"for ", ForSugar,
1552
+ return self . parse_sugary_call_expr ( lo , ~"for ", ForSugar,
1553
1553
expr_loop_body);
1554
1554
} else if self.eat_keyword(keywords::Do) {
1555
- return self.parse_sugary_call_expr(~" do", DoSugar ,
1555
+ return self.parse_sugary_call_expr(lo, ~" do", DoSugar ,
1556
1556
expr_do_body) ;
1557
1557
} else if self . eat_keyword ( keywords:: While ) {
1558
1558
return self . parse_while_expr ( ) ;
@@ -2264,12 +2264,11 @@ impl Parser {
2264
2264
// parse a 'for' or 'do'.
2265
2265
// the 'for' and 'do' expressions parse as calls, but look like
2266
2266
// function calls followed by a closure expression.
2267
- pub fn parse_sugary_call_expr ( & self ,
2267
+ pub fn parse_sugary_call_expr ( & self , lo : BytePos ,
2268
2268
keyword : ~str ,
2269
2269
sugar : CallSugar ,
2270
2270
ctor : & fn ( v: @expr) -> expr_ )
2271
2271
-> @expr {
2272
- let lo = self . last_span ;
2273
2272
// Parse the callee `foo` in
2274
2273
// for foo || {
2275
2274
// for foo.bar || {
@@ -2286,21 +2285,21 @@ impl Parser {
2286
2285
let last_arg = self . mk_expr ( block. span . lo , block. span . hi ,
2287
2286
ctor ( block) ) ;
2288
2287
let args = vec:: append ( copy * args, [ last_arg] ) ;
2289
- self . mk_expr ( lo. lo , block. span . hi , expr_call ( f, args, sugar) )
2288
+ self . mk_expr ( lo, block. span . hi , expr_call ( f, args, sugar) )
2290
2289
}
2291
2290
expr_method_call( _, f, i, ref tps, ref args, NoSugar ) => {
2292
2291
let block = self . parse_lambda_block_expr ( ) ;
2293
2292
let last_arg = self . mk_expr ( block. span . lo , block. span . hi ,
2294
2293
ctor ( block) ) ;
2295
2294
let args = vec:: append ( copy * args, [ last_arg] ) ;
2296
- self . mk_expr ( lo. lo , block. span . hi ,
2295
+ self . mk_expr ( lo, block. span . hi ,
2297
2296
self . mk_method_call ( f, i, copy * tps, args, sugar) )
2298
2297
}
2299
2298
expr_field( f, i, ref tps) => {
2300
2299
let block = self . parse_lambda_block_expr ( ) ;
2301
2300
let last_arg = self . mk_expr ( block. span . lo , block. span . hi ,
2302
2301
ctor ( block) ) ;
2303
- self . mk_expr ( lo. lo , block. span . hi ,
2302
+ self . mk_expr ( lo, block. span . hi ,
2304
2303
self . mk_method_call ( f, i, copy * tps, ~[ last_arg] , sugar) )
2305
2304
}
2306
2305
expr_path( * ) | expr_call( * ) | expr_method_call( * ) |
@@ -2309,7 +2308,7 @@ impl Parser {
2309
2308
let last_arg = self . mk_expr ( block. span . lo , block. span . hi ,
2310
2309
ctor ( block) ) ;
2311
2310
self . mk_expr (
2312
- lo. lo ,
2311
+ lo,
2313
2312
last_arg. span . hi ,
2314
2313
self . mk_call ( e, ~[ last_arg] , sugar) )
2315
2314
}
@@ -2319,7 +2318,7 @@ impl Parser {
2319
2318
// but they aren't represented by tests
2320
2319
debug ! ( "sugary call on %?" , e. node) ;
2321
2320
self . span_fatal (
2322
- * lo ,
2321
+ e . span ,
2323
2322
fmt ! ( "`%s` must be followed by a block call" , keyword) ) ;
2324
2323
}
2325
2324
}
0 commit comments