about summary refs log tree commit diff
path: root/src/libsyntax
diff options
context:
space:
mode:
authorPatrick Walton <pcwalton@mimiga.net>2012-11-21 11:39:06 -0800
committerPatrick Walton <pcwalton@mimiga.net>2012-11-27 09:23:31 -0800
commit1c348e6e3832b1fd8282be696f76ac3c50115162 (patch)
tree1ad8d863d80c3d868ed34b211eee417a4369d7cd /src/libsyntax
parent7bc29c62d033c529ca8ec47fcd25842223a9bbad (diff)
librustc: Implement @mut [T] as the new replacement for @[mut T]
Diffstat (limited to 'src/libsyntax')
-rw-r--r--src/libsyntax/ast.rs1
-rw-r--r--src/libsyntax/parse/parser.rs10
-rw-r--r--src/libsyntax/print/pprust.rs4
3 files changed, 12 insertions, 3 deletions
diff --git a/src/libsyntax/ast.rs b/src/libsyntax/ast.rs
index da28e349a56..353bb26ea9e 100644
--- a/src/libsyntax/ast.rs
+++ b/src/libsyntax/ast.rs
@@ -645,6 +645,7 @@ enum expr_vstore {
     expr_vstore_fixed(Option<uint>),   // [1,2,3,4]
     expr_vstore_uniq,                  // ~[1,2,3,4]
     expr_vstore_box,                   // @[1,2,3,4]
+    expr_vstore_mut_box,               // @mut [1,2,3,4]
     expr_vstore_slice                  // &[1,2,3,4]
 }
 
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs
index 925934d165f..f340a52a4e7 100644
--- a/src/libsyntax/parse/parser.rs
+++ b/src/libsyntax/parse/parser.rs
@@ -38,7 +38,8 @@ use ast::{_mod, add, arg, arm, attribute,
              expr_lit, expr_log, expr_loop, expr_loop_body, expr_mac,
              expr_paren, expr_path, expr_rec, expr_repeat, expr_ret,
              expr_swap, expr_struct, expr_tup, expr_unary, expr_unary_move,
-             expr_vec, expr_vstore, expr_while, extern_fn, field, fn_decl,
+             expr_vec, expr_vstore, expr_vstore_mut_box, expr_while,
+             extern_fn, field, fn_decl,
              foreign_item, foreign_item_const, foreign_item_fn, foreign_mod,
              ident, impure_fn, infer, inherited,
              item, item_, item_class, item_const, item_enum, item_fn,
@@ -1450,8 +1451,11 @@ impl Parser {
             hi = e.span.hi;
             // HACK: turn @[...] into a @-evec
             ex = match e.node {
-              expr_vec(*) | expr_lit(@{node: lit_str(_), span: _})
-              if m == m_imm => expr_vstore(e, expr_vstore_box),
+              expr_vec(*) if m == m_mutbl =>
+                expr_vstore(e, expr_vstore_mut_box),
+              expr_vec(*) if m == m_imm => expr_vstore(e, expr_vstore_box),
+              expr_lit(@{node: lit_str(_), span: _}) if m == m_imm =>
+                expr_vstore(e, expr_vstore_box),
               _ => expr_unary(box(m), e)
             };
           }
diff --git a/src/libsyntax/print/pprust.rs b/src/libsyntax/print/pprust.rs
index b4a5407c002..e0523613ee6 100644
--- a/src/libsyntax/print/pprust.rs
+++ b/src/libsyntax/print/pprust.rs
@@ -1027,6 +1027,10 @@ fn print_expr_vstore(s: ps, t: ast::expr_vstore) {
       ast::expr_vstore_fixed(None) => word(s.s, ~"_"),
       ast::expr_vstore_uniq => word(s.s, ~"~"),
       ast::expr_vstore_box => word(s.s, ~"@"),
+      ast::expr_vstore_mut_box => {
+        word(s.s, ~"@");
+        word(s.s, ~"mut");
+      }
       ast::expr_vstore_slice => word(s.s, ~"&"),
     }
 }