aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGraydon Hoare <[email protected]>2010-12-13 09:25:19 -0800
committerGraydon Hoare <[email protected]>2010-12-13 09:25:19 -0800
commit734c1909188c7b505ca9a0b88bda561a08cf45fd (patch)
tree0ba475271d0709ad657cc8853be8c5e3847bdd2f
parentrustc: Typecheck "alt" expressions and patterns (diff)
downloadrust-734c1909188c7b505ca9a0b88bda561a08cf45fd.tar.xz
rust-734c1909188c7b505ca9a0b88bda561a08cf45fd.zip
Syntax tweak: move 'mutable' from pseudo-ty-param on vec ctor to low-precedence prefix inside paren.
-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 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));
}