about summary refs log tree commit diff
path: root/src/libsyntax/parse
diff options
context:
space:
mode:
authorMichael Sullivan <sully@msully.net>2012-07-11 23:42:26 -0700
committerMichael Sullivan <sully@msully.net>2012-07-12 16:52:26 -0700
commit2ea9c8df0f7c9ee72913883128b37d0a80d2f4f6 (patch)
treeb3e4acbf2912f804cb45f87e8819a5e4847ec213 /src/libsyntax/parse
parentacb86921a62ba01726fd922f55d0176fa6c1df7c (diff)
downloadrust-2ea9c8df0f7c9ee72913883128b37d0a80d2f4f6.tar.gz
rust-2ea9c8df0f7c9ee72913883128b37d0a80d2f4f6.zip
Accept prefix notation for writing the types of str/~ and friends.
Diffstat (limited to 'src/libsyntax/parse')
-rw-r--r--src/libsyntax/parse/comments.rs2
-rw-r--r--src/libsyntax/parse/eval.rs2
-rw-r--r--src/libsyntax/parse/lexer.rs14
-rw-r--r--src/libsyntax/parse/parser.rs31
-rw-r--r--src/libsyntax/parse/token.rs2
5 files changed, 17 insertions, 34 deletions
diff --git a/src/libsyntax/parse/comments.rs b/src/libsyntax/parse/comments.rs
index e05887d28b4..aa3e808f63e 100644
--- a/src/libsyntax/parse/comments.rs
+++ b/src/libsyntax/parse/comments.rs
@@ -275,7 +275,7 @@ fn gather_comments_and_literals(span_diagnostic: diagnostic::span_handler,
                                 srdr: io::reader) ->
    {cmnts: ~[cmnt], lits: ~[lit]} {
     let src = @str::from_bytes(srdr.read_whole_stream());
-    let itr = @interner::mk::<@str>(
+    let itr = @interner::mk::<@str/~>(
         |x| str::hash(*x),
         |x,y| str::eq(*x, *y)
     );
diff --git a/src/libsyntax/parse/eval.rs b/src/libsyntax/parse/eval.rs
index 883aedb75a6..54a2abf20c9 100644
--- a/src/libsyntax/parse/eval.rs
+++ b/src/libsyntax/parse/eval.rs
@@ -78,7 +78,7 @@ fn parse_companion_mod(cx: ctx, prefix: str, suffix: option<str>)
     }
 }
 
-fn cdir_path_opt(id: ast::ident, attrs: ~[ast::attribute]) -> @str {
+fn cdir_path_opt(id: ast::ident, attrs: ~[ast::attribute]) -> @str/~ {
     alt ::attr::first_attr_value_str_by_name(attrs, "path") {
       some(d) {
         ret d;
diff --git a/src/libsyntax/parse/lexer.rs b/src/libsyntax/parse/lexer.rs
index b3ba35dea2e..d7f9fc12840 100644
--- a/src/libsyntax/parse/lexer.rs
+++ b/src/libsyntax/parse/lexer.rs
@@ -14,20 +14,20 @@ iface reader {
     fn next_token() -> {tok: token::token, sp: span};
     fn fatal(str) -> !;
     fn span_diag() -> span_handler;
-    fn interner() -> @interner<@str>;
+    fn interner() -> @interner<@str/~>;
     fn peek() -> {tok: token::token, sp: span};
     fn dup() -> reader;
 }
 
 type string_reader = @{
     span_diagnostic: span_handler,
-    src: @str,
+    src: @str/~,
     mut col: uint,
     mut pos: uint,
     mut curr: char,
     mut chpos: uint,
     filemap: codemap::filemap,
-    interner: @interner<@str>,
+    interner: @interner<@str/~>,
     /* cached: */
     mut peek_tok: token::token,
     mut peek_span: span
@@ -35,7 +35,7 @@ type string_reader = @{
 
 fn new_string_reader(span_diagnostic: span_handler,
                      filemap: codemap::filemap,
-                     itr: @interner<@str>) -> string_reader {
+                     itr: @interner<@str/~>) -> string_reader {
     let r = new_low_level_string_reader(span_diagnostic, filemap, itr);
     string_advance_token(r); /* fill in peek_* */
     ret r;
@@ -44,7 +44,7 @@ fn new_string_reader(span_diagnostic: span_handler,
 /* For comments.rs, which hackily pokes into 'pos' and 'curr' */
 fn new_low_level_string_reader(span_diagnostic: span_handler,
                                filemap: codemap::filemap,
-                               itr: @interner<@str>)
+                               itr: @interner<@str/~>)
     -> string_reader {
     let r = @{span_diagnostic: span_diagnostic, src: filemap.src,
               mut col: 0u, mut pos: 0u, mut curr: -1 as char,
@@ -79,7 +79,7 @@ impl string_reader_as_reader of reader for string_reader {
         self.span_diagnostic.span_fatal(copy self.peek_span, m)
     }
     fn span_diag() -> span_handler { self.span_diagnostic }
-    fn interner() -> @interner<@str> { self.interner }
+    fn interner() -> @interner<@str/~> { self.interner }
     fn peek() -> {tok: token::token, sp: span} {
         {tok: self.peek_tok, sp: self.peek_span}
     }
@@ -101,7 +101,7 @@ impl tt_reader_as_reader of reader for tt_reader {
         self.sp_diag.span_fatal(copy self.cur_span, m);
     }
     fn span_diag() -> span_handler { self.sp_diag }
-    fn interner() -> @interner<@str> { self.interner }
+    fn interner() -> @interner<@str/~> { self.interner }
     fn peek() -> {tok: token::token, sp: span} {
         { tok: self.cur_tok, sp: self.cur_span }
     }
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs
index f4681ba2619..9d8458c9c60 100644
--- a/src/libsyntax/parse/parser.rs
+++ b/src/libsyntax/parse/parser.rs
@@ -230,7 +230,7 @@ class parser {
     fn warn(m: str) {
         self.sess.span_diagnostic.span_warn(copy self.span, m)
     }
-    fn get_str(i: token::str_num) -> @str {
+    fn get_str(i: token::str_num) -> @str/~ {
         interner::get(*self.reader.interner(), i)
     }
     fn get_id() -> node_id { next_node_id(self.sess) }
@@ -394,7 +394,7 @@ class parser {
         }
     }
 
-    fn region_from_name(s: option<@str>) -> @region {
+    fn region_from_name(s: option<@str/~>) -> @region {
         let r = alt s {
           some (string) { re_named(string) }
           none { re_anon }
@@ -461,22 +461,10 @@ class parser {
             }
         } else if self.token == token::AT {
             self.bump();
-            // HACK: turn @[...] into a @-evec
-            alt self.parse_mt() {
-              {ty: t @ @{node: ty_vec(_), _}, mutbl: m_imm} {
-                ty_vstore(t, vstore_box)
-              }
-              mt { ty_box(mt) }
-            }
+            ty_box(self.parse_mt())
         } else if self.token == token::TILDE {
             self.bump();
-            // HACK: turn ~[...] into a ~-evec
-            alt self.parse_mt() {
-              {ty: t @ @{node: ty_vec(_), _}, mutbl: m_imm} {
-                ty_vstore(t, vstore_uniq)
-              }
-              mt { ty_uniq(mt) }
-            }
+            ty_uniq(self.parse_mt())
         } else if self.token == token::BINOP(token::STAR) {
             self.bump();
             ty_ptr(self.parse_mt())
@@ -506,13 +494,8 @@ class parser {
         } else if self.token == token::BINOP(token::AND) {
             self.bump();
             let region = self.parse_region_dot();
-            // HACK: turn &a.[...] into a &a-evec
-            alt self.parse_mt() {
-              {ty: t @ @{node: ty_vec(_), _}, mutbl: m_imm} {
-                ty_vstore(t, vstore_slice(region))
-              }
-              mt { ty_rptr(region, mt) }
-            }
+            let mt = self.parse_mt();
+            ty_rptr(region, mt)
         } else if self.eat_keyword("pure") {
             self.parse_ty_fn(ast::pure_fn)
         } else if self.eat_keyword("unsafe") {
@@ -2742,7 +2725,7 @@ class parser {
                       config: self.cfg});
     }
 
-    fn parse_str() -> @str {
+    fn parse_str() -> @str/~ {
         alt copy self.token {
           token::LIT_STR(s) { self.bump(); self.get_str(s) }
           _ {
diff --git a/src/libsyntax/parse/token.rs b/src/libsyntax/parse/token.rs
index bcfb9289086..2c7b14cfe11 100644
--- a/src/libsyntax/parse/token.rs
+++ b/src/libsyntax/parse/token.rs
@@ -115,7 +115,7 @@ fn binop_to_str(o: binop) -> str {
     }
 }
 
-fn to_str(in: interner<@str>, t: token) -> str {
+fn to_str(in: interner<@str/~>, t: token) -> str {
     alt t {
       EQ { "=" }
       LT { "<" }