aboutsummaryrefslogtreecommitdiff
path: root/src/comp
diff options
context:
space:
mode:
authorGraydon Hoare <[email protected]>2011-02-15 12:20:30 -0800
committerGraydon Hoare <[email protected]>2011-02-15 12:20:30 -0800
commit9ae89bd404803be6b820189d8e0480b3395d05ee (patch)
treebc9fb10220f1d2275f02731a866cf9a177abef3d /src/comp
parentFix missing path in expr_ext. (diff)
downloadrust-9ae89bd404803be6b820189d8e0480b3395d05ee.tar.xz
rust-9ae89bd404803be6b820189d8e0480b3395d05ee.zip
Add _mutable unop.
Diffstat (limited to 'src/comp')
-rw-r--r--src/comp/front/ast.rs1
-rw-r--r--src/comp/front/parser.rs7
-rw-r--r--src/comp/middle/trans.rs3
-rw-r--r--src/comp/middle/typeck.rs3
4 files changed, 14 insertions, 0 deletions
diff --git a/src/comp/front/ast.rs b/src/comp/front/ast.rs
index 520f5557..03ccc216 100644
--- a/src/comp/front/ast.rs
+++ b/src/comp/front/ast.rs
@@ -106,6 +106,7 @@ tag unop {
bitnot;
not;
neg;
+ _mutable;
}
tag mode {
diff --git a/src/comp/front/parser.rs b/src/comp/front/parser.rs
index 085255a4..8acc8897 100644
--- a/src/comp/front/parser.rs
+++ b/src/comp/front/parser.rs
@@ -811,6 +811,13 @@ impure fn parse_prefix_expr(parser p) -> @ast.expr {
ex = ast.expr_unary(ast.box, e, ast.ann_none);
}
+ case (token.MUTABLE) {
+ p.bump();
+ auto e = parse_prefix_expr(p);
+ hi = e.span;
+ ex = ast.expr_unary(ast._mutable, e, ast.ann_none);
+ }
+
case (_) {
ret parse_dot_or_call_expr(p);
}
diff --git a/src/comp/middle/trans.rs b/src/comp/middle/trans.rs
index c4e5c9c4..72a4fe5c 100644
--- a/src/comp/middle/trans.rs
+++ b/src/comp/middle/trans.rs
@@ -1834,6 +1834,9 @@ fn trans_unary(@block_ctxt cx, ast.unop op,
}
ret res(sub.bcx, val);
}
+ case (ast._mutable) {
+ ret trans_expr(cx, e);
+ }
}
fail;
}
diff --git a/src/comp/middle/typeck.rs b/src/comp/middle/typeck.rs
index a062f79d..e1b8d464 100644
--- a/src/comp/middle/typeck.rs
+++ b/src/comp/middle/typeck.rs
@@ -1229,6 +1229,9 @@ fn check_expr(&@fn_ctxt fcx, @ast.expr expr) -> @ast.expr {
}
}
}
+ case (ast._mutable) {
+ oper_t = @rec(mut=ast.mut with *oper_t);
+ }
case (_) { oper_t = strip_boxes(oper_t); }
}
ret @fold.respan[ast.expr_](expr.span,