about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/boot/fe/pexp.ml30
-rw-r--r--src/test/run-pass/foreach-nested-2.rs2
-rw-r--r--src/test/run-pass/foreach-nested.rs2
-rw-r--r--src/test/run-pass/mutable-vec-drop.rs3
4 files changed, 23 insertions, 14 deletions
diff --git a/src/boot/fe/pexp.ml b/src/boot/fe/pexp.ml
index 2f9c2badf72..a5f3759a70c 100644
--- a/src/boot/fe/pexp.ml
+++ b/src/boot/fe/pexp.ml
@@ -471,18 +471,28 @@ and parse_bottom_pexp (ps:pstate) : Ast.pexp =
 
     | VEC ->
         bump ps;
-        let mutability =
-          match peek ps with
-              LBRACKET ->
-                bump ps;
-                expect ps MUTABLE;
-                expect ps RBRACKET;
-                Ast.MUT_mutable
-            | _ -> Ast.MUT_immutable
+        let pexps =
+          ctxt "paren pexps(s)" (rstr false parse_mutable_and_pexp_list) ps
+        in
+        let mutability = ref Ast.MUT_immutable in
+        let pexps =
+          Array.mapi
+            begin
+              fun i (mut, e) ->
+                if i = 0
+                then
+                  mutability := mut
+                else
+                  if mut <> Ast.MUT_immutable
+                  then
+                    raise
+                      (err "'mutable' keyword after first vec element" ps);
+                e
+            end
+            pexps
         in
-        let pexps = ctxt "vec pexp: exprs" parse_pexp_list ps in
         let bpos = lexpos ps in
-          span ps apos bpos (Ast.PEXP_vec (mutability, pexps))
+          span ps apos bpos (Ast.PEXP_vec (!mutability, pexps))
 
 
     | LIT_STR s ->
diff --git a/src/test/run-pass/foreach-nested-2.rs b/src/test/run-pass/foreach-nested-2.rs
index f06474b35fd..1c90a65386f 100644
--- a/src/test/run-pass/foreach-nested-2.rs
+++ b/src/test/run-pass/foreach-nested-2.rs
@@ -15,7 +15,7 @@ iter range(int start, int stop) -> int {
 
 impure fn main() {
     let vec[mutable int] a =
-      vec[mutable](-1, -1, -1, -1, -1, -1, -1, -1);
+      vec(mutable -1, -1, -1, -1, -1, -1, -1, -1);
     let int p = 0;
 
     for each (int i in two()) {
diff --git a/src/test/run-pass/foreach-nested.rs b/src/test/run-pass/foreach-nested.rs
index 1da1d05bdc2..9d775123f07 100644
--- a/src/test/run-pass/foreach-nested.rs
+++ b/src/test/run-pass/foreach-nested.rs
@@ -6,7 +6,7 @@ iter two() -> int {
 }
 
 impure fn main() {
-    let vec[mutable int] a = vec[mutable](-1, -1, -1, -1);
+    let vec[mutable int] a = vec(mutable -1, -1, -1, -1);
     let int p = 0;
 
     for each (int i in two()) {
diff --git a/src/test/run-pass/mutable-vec-drop.rs b/src/test/run-pass/mutable-vec-drop.rs
index 32961444163..ebfb8c6c53f 100644
--- a/src/test/run-pass/mutable-vec-drop.rs
+++ b/src/test/run-pass/mutable-vec-drop.rs
@@ -2,6 +2,5 @@ fn main() {
   // This just tests whether the vec leaks its members.
 
   let vec[mutable @tup(int,int)] pvec =
-    // FIXME: vec constructor syntax is slated to change.
-    vec[mutable](@tup(1,2), @tup(3,4), @tup(5,6));
+    vec(mutable @tup(1,2), @tup(3,4), @tup(5,6));
 }