about summary refs log tree commit diff
path: root/src/libsyntax/parse
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2012-06-29 15:29:23 -0700
committerBrian Anderson <banderson@mozilla.com>2012-06-30 16:01:52 -0700
commit0293a31b689ff71cbe39112e226d151529f5a1cd (patch)
treed36d921b9f5260c8140e6306662ae821bdaf2393 /src/libsyntax/parse
parenta3382b6f26e582210a3b649c9a71badaef0530bf (diff)
downloadrust-0293a31b689ff71cbe39112e226d151529f5a1cd.tar.gz
rust-0293a31b689ff71cbe39112e226d151529f5a1cd.zip
Remove old sugared call syntax
Diffstat (limited to 'src/libsyntax/parse')
-rw-r--r--src/libsyntax/parse/parser.rs47
1 files changed, 19 insertions, 28 deletions
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs
index da09b5daf27..106fc26d88e 100644
--- a/src/libsyntax/parse/parser.rs
+++ b/src/libsyntax/parse/parser.rs
@@ -1040,26 +1040,6 @@ class parser {
                 e = self.mk_pexpr(lo, hi, nd);
               }
 
-              // expr {|| ... }
-              token::LBRACE if (token::is_bar(self.look_ahead(1u))
-                                && self.permits_call()) {
-                self.bump();
-                let blk = self.parse_fn_block_expr();
-                alt e.node {
-                  expr_call(f, args, false) {
-                    e = pexpr(@{node: expr_call(f,
-                                                vec::append(args, ~[blk]),
-                                                true)
-                                with *self.to_expr(e)});
-                  }
-                  _ {
-                    e = self.mk_pexpr(lo, self.last_span.hi,
-                                      expr_call(self.to_expr(e),
-                                                ~[blk], true));
-                  }
-                }
-              }
-
               // expr[...]
               token::LBRACKET {
                 self.bump();
@@ -1387,16 +1367,27 @@ class parser {
     fn parse_sugary_call_expr(keyword: str,
                               ctor: fn(+@expr) -> expr_) -> @expr {
         let lo = self.last_span;
-        let call = self.parse_expr_res(RESTRICT_STMT_EXPR);
-        alt call.node {
-          expr_call(f, args, true) {
-            let b_arg = vec::last(args);
-            let last = self.mk_expr(b_arg.span.lo, b_arg.span.hi,
-                                    ctor(b_arg));
-            @{node: expr_call(f, vec::append(vec::init(args), ~[last]), true)
-              with *call}
+        let e = self.parse_expr_res(RESTRICT_STMT_EXPR);
+        alt e.node {
+          expr_call(f, args, false) {
+            self.expect(token::LBRACE);
+            let block = self.parse_fn_block_expr();
+            let last_arg = self.mk_expr(block.span.lo, block.span.hi,
+                                    ctor(block));
+            let args = vec::append(args, ~[last_arg]);
+            @{node: expr_call(f, args, true)
+              with *e}
+          }
+          expr_path(*) | expr_field(*) | expr_call(*) {
+            self.expect(token::LBRACE);
+            let block = self.parse_fn_block_expr();
+            let last_arg = self.mk_expr(block.span.lo, block.span.hi,
+                                    ctor(block));
+            self.mk_expr(lo.lo, last_arg.span.hi,
+                         expr_call(e, ~[last_arg], true))
           }
           _ {
+            self.warn(#fmt("unexpected sugary call %?", e.node));
             self.span_fatal(
                 lo, #fmt("`%s` must be followed by a block call", keyword));
           }