diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/boot/fe/pexp.ml | 30 | ||||
| -rw-r--r-- | src/test/run-pass/foreach-nested-2.rs | 2 | ||||
| -rw-r--r-- | src/test/run-pass/foreach-nested.rs | 2 | ||||
| -rw-r--r-- | src/test/run-pass/mutable-vec-drop.rs | 3 |
4 files changed, 23 insertions, 14 deletions
diff --git a/src/boot/fe/pexp.ml b/src/boot/fe/pexp.ml index 2f9c2bad..a5f3759a 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 f06474b3..1c90a653 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 1da1d05b..9d775123 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 32961444..ebfb8c6c 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)); } |