diff options
| author | bors <bors@rust-lang.org> | 2013-07-06 06:50:16 -0700 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2013-07-06 06:50:16 -0700 |
| commit | e9897cd08a069342c1aae67faa04b119968b44eb (patch) | |
| tree | d60abc811111ee9e51cd1c20af526a8990d8dd55 /src/libsyntax/parse/parser.rs | |
| parent | 6595c42577964247aaf7f61e5f054902c2ce1d45 (diff) | |
| parent | 376d5d6aae9a448a0f58a9a98e8dcec9eeeaece7 (diff) | |
| download | rust-e9897cd08a069342c1aae67faa04b119968b44eb.tar.gz rust-e9897cd08a069342c1aae67faa04b119968b44eb.zip | |
auto merge of #7598 : sanxiyn/rust/rollup-1, r=sanxiyn
c9b9462 r=z0w0 2e65782 r=cmr 2045889 r=thestinger 30fca57 r=huonw
Diffstat (limited to 'src/libsyntax/parse/parser.rs')
| -rw-r--r-- | src/libsyntax/parse/parser.rs | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index cc0baa28e20..ae87fd8774a 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -1549,10 +1549,10 @@ impl Parser { } else if self.eat_keyword(keywords::If) { return self.parse_if_expr(); } else if self.eat_keyword(keywords::For) { - return self.parse_sugary_call_expr(~"for", ForSugar, + return self.parse_sugary_call_expr(lo, ~"for", ForSugar, expr_loop_body); } else if self.eat_keyword(keywords::Do) { - return self.parse_sugary_call_expr(~"do", DoSugar, + return self.parse_sugary_call_expr(lo, ~"do", DoSugar, expr_do_body); } else if self.eat_keyword(keywords::While) { return self.parse_while_expr(); @@ -2264,12 +2264,11 @@ impl Parser { // parse a 'for' or 'do'. // the 'for' and 'do' expressions parse as calls, but look like // function calls followed by a closure expression. - pub fn parse_sugary_call_expr(&self, + pub fn parse_sugary_call_expr(&self, lo: BytePos, keyword: ~str, sugar: CallSugar, ctor: &fn(v: @expr) -> expr_) -> @expr { - let lo = self.last_span; // Parse the callee `foo` in // for foo || { // for foo.bar || { @@ -2286,21 +2285,21 @@ impl Parser { let last_arg = self.mk_expr(block.span.lo, block.span.hi, ctor(block)); let args = vec::append(copy *args, [last_arg]); - self.mk_expr(lo.lo, block.span.hi, expr_call(f, args, sugar)) + self.mk_expr(lo, block.span.hi, expr_call(f, args, sugar)) } expr_method_call(_, f, i, ref tps, ref args, NoSugar) => { let block = self.parse_lambda_block_expr(); let last_arg = self.mk_expr(block.span.lo, block.span.hi, ctor(block)); let args = vec::append(copy *args, [last_arg]); - self.mk_expr(lo.lo, block.span.hi, + self.mk_expr(lo, block.span.hi, self.mk_method_call(f, i, copy *tps, args, sugar)) } expr_field(f, i, ref tps) => { let block = self.parse_lambda_block_expr(); let last_arg = self.mk_expr(block.span.lo, block.span.hi, ctor(block)); - self.mk_expr(lo.lo, block.span.hi, + self.mk_expr(lo, block.span.hi, self.mk_method_call(f, i, copy *tps, ~[last_arg], sugar)) } expr_path(*) | expr_call(*) | expr_method_call(*) | @@ -2309,7 +2308,7 @@ impl Parser { let last_arg = self.mk_expr(block.span.lo, block.span.hi, ctor(block)); self.mk_expr( - lo.lo, + lo, last_arg.span.hi, self.mk_call(e, ~[last_arg], sugar)) } @@ -2319,7 +2318,7 @@ impl Parser { // but they aren't represented by tests debug!("sugary call on %?", e.node); self.span_fatal( - *lo, + e.span, fmt!("`%s` must be followed by a block call", keyword)); } } |
