about summary refs log tree commit diff
path: root/src/libsyntax/parse
diff options
context:
space:
mode:
authorMichael Sullivan <sully@msully.net>2012-07-12 15:03:33 -0700
committerMichael Sullivan <sully@msully.net>2012-07-13 17:03:49 -0700
commit985b52be6df504ce6dcef29df61ea20ab9c9323f (patch)
treea39c70608818cb99dce14da30f67fa9aff9f0e58 /src/libsyntax/parse
parente4de1602226315fcb7ee3b1d7f925b5c361f001d (diff)
downloadrust-985b52be6df504ce6dcef29df61ea20ab9c9323f.tar.gz
rust-985b52be6df504ce6dcef29df61ea20ab9c9323f.zip
Support prefix notation for vstore strings. Closes #2906.
Diffstat (limited to 'src/libsyntax/parse')
-rw-r--r--src/libsyntax/parse/parser.rs23
1 files changed, 15 insertions, 8 deletions
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs
index 5effab94397..2ab796db319 100644
--- a/src/libsyntax/parse/parser.rs
+++ b/src/libsyntax/parse/parser.rs
@@ -259,7 +259,7 @@ class parser {
                 let name = self.parse_value_ident();
                 p.bump();
                 name
-            } else { @"" };
+            } else { @""/~ };
 
             {mode: mode, ty: p.parse_ty(false), ident: name,
              id: p.get_id()}
@@ -1337,7 +1337,8 @@ class parser {
                 hi = e.span.hi;
                 // HACK: turn &[...] into a &-evec
                 ex = alt e.node {
-                  expr_vec(*) if m == m_imm {
+                  expr_vec(*) | expr_lit(@{node: lit_str(_), span: _})
+                  if m == m_imm {
                     expr_vstore(e, vstore_slice(self.region_from_name(none)))
                   }
                   _ { expr_addr_of(m, e) }
@@ -1353,7 +1354,8 @@ class parser {
             hi = e.span.hi;
             // HACK: turn @[...] into a @-evec
             ex = alt e.node {
-              expr_vec(*) if m == m_imm { expr_vstore(e, vstore_box) }
+              expr_vec(*) | expr_lit(@{node: lit_str(_), span: _})
+              if m == m_imm { expr_vstore(e, vstore_box) }
               _ { expr_unary(box(m), e) }
             };
           }
@@ -1364,7 +1366,8 @@ class parser {
             hi = e.span.hi;
             // HACK: turn ~[...] into a ~-evec
             ex = alt e.node {
-              expr_vec(*) if m == m_imm { expr_vstore(e, vstore_uniq) }
+              expr_vec(*) | expr_lit(@{node: lit_str(_), span: _})
+              if m == m_imm { expr_vstore(e, vstore_uniq) }
               _ { expr_unary(uniq(m), e) }
             };
           }
@@ -2134,12 +2137,16 @@ class parser {
     fn parse_method_name() -> ident {
         alt copy self.token {
           token::BINOP(op) { self.bump(); @token::binop_to_str(op) }
-          token::NOT { self.bump(); @"!" }
-          token::LBRACKET { self.bump(); self.expect(token::RBRACKET); @"[]" }
+          token::NOT { self.bump(); @"!"/~ }
+          token::LBRACKET {
+            self.bump();
+            self.expect(token::RBRACKET);
+            @"[]"/~
+          }
           _ {
             let id = self.parse_value_ident();
-            if id == @"unary" && self.eat(token::BINOP(token::MINUS)) {
-                @"unary-"
+            if id == @"unary"/~ && self.eat(token::BINOP(token::MINUS)) {
+                @"unary-"/~
             }
             else { id }
           }