diff options
| author | Michael Sullivan <sully@msully.net> | 2012-07-12 15:03:33 -0700 |
|---|---|---|
| committer | Michael Sullivan <sully@msully.net> | 2012-07-13 17:03:49 -0700 |
| commit | 985b52be6df504ce6dcef29df61ea20ab9c9323f (patch) | |
| tree | a39c70608818cb99dce14da30f67fa9aff9f0e58 /src/libsyntax/parse | |
| parent | e4de1602226315fcb7ee3b1d7f925b5c361f001d (diff) | |
| download | rust-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.rs | 23 |
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 } } |
