aboutsummaryrefslogtreecommitdiff
path: root/src/comp/middle/fold.rs
diff options
context:
space:
mode:
authorTim Chevalier <[email protected]>2011-05-02 11:23:07 -0700
committerGraydon Hoare <[email protected]>2011-05-02 12:16:29 -0700
commitaa25f22f197682de3b18fc4c8ba068d1feda220f (patch)
tree6d01f8fbb5680964fd9c53564c96aa58cb75d3d1 /src/comp/middle/fold.rs
parentrustc: Add a "fat tydesc" LLVM type to trans (diff)
downloadrust-aa25f22f197682de3b18fc4c8ba068d1feda220f.tar.xz
rust-aa25f22f197682de3b18fc4c8ba068d1feda220f.zip
Use different syntax for checks that matter to typestate
This giant commit changes the syntax of Rust to use "assert" for "check" expressions that didn't mean anything to the typestate system, and continue using "check" for checks that are used as part of typestate checking. Most of the changes are just replacing "check" with "assert" in test cases and rustc.
Diffstat (limited to 'src/comp/middle/fold.rs')
-rw-r--r--src/comp/middle/fold.rs31
1 files changed, 24 insertions, 7 deletions
diff --git a/src/comp/middle/fold.rs b/src/comp/middle/fold.rs
index a0f3bc93..e932fd9a 100644
--- a/src/comp/middle/fold.rs
+++ b/src/comp/middle/fold.rs
@@ -196,7 +196,10 @@ type ast_fold[ENV] =
@expr e, ann a) -> @expr) fold_expr_log,
(fn(&ENV e, &span sp,
- @expr e, ann a) -> @expr) fold_expr_check_expr,
+ @expr e, ann a) -> @expr) fold_expr_check,
+
+ (fn(&ENV e, &span sp,
+ @expr e, ann a) -> @expr) fold_expr_assert,
(fn(&ENV e, &span sp,
ann a) -> @expr) fold_expr_port,
@@ -796,10 +799,16 @@ fn fold_expr[ENV](&ENV env, ast_fold[ENV] fld, &@expr e) -> @expr {
ret fld.fold_expr_log(env_, e.span, l, ee, t2);
}
- case (ast.expr_check_expr(?x, ?t)) {
+ case (ast.expr_check(?x, ?t)) {
auto ee = fold_expr(env_, fld, x);
auto t2 = fld.fold_ann(env_, t);
- ret fld.fold_expr_check_expr(env_, e.span, ee, t2);
+ ret fld.fold_expr_check(env_, e.span, ee, t2);
+ }
+
+ case (ast.expr_assert(?x, ?t)) {
+ auto ee = fold_expr(env_, fld, x);
+ auto t2 = fld.fold_ann(env_, t);
+ ret fld.fold_expr_assert(env_, e.span, ee, t2);
}
case (ast.expr_port(?t)) {
@@ -1380,9 +1389,14 @@ fn identity_fold_expr_log[ENV](&ENV e, &span sp, int lvl, @expr x,
ret @respan(sp, ast.expr_log(lvl, x, a));
}
-fn identity_fold_expr_check_expr[ENV](&ENV e, &span sp, @expr x, ann a)
+fn identity_fold_expr_check[ENV](&ENV e, &span sp, @expr x, ann a)
+ -> @expr {
+ ret @respan(sp, ast.expr_check(x, a));
+}
+
+fn identity_fold_expr_assert[ENV](&ENV e, &span sp, @expr x, ann a)
-> @expr {
- ret @respan(sp, ast.expr_check_expr(x, a));
+ ret @respan(sp, ast.expr_check(x, a));
}
fn identity_fold_expr_port[ENV](&ENV e, &span sp, ann a) -> @expr {
@@ -1676,8 +1690,11 @@ fn new_identity_fold[ENV]() -> ast_fold[ENV] {
fold_expr_put = bind identity_fold_expr_put[ENV](_,_,_,_),
fold_expr_be = bind identity_fold_expr_be[ENV](_,_,_,_),
fold_expr_log = bind identity_fold_expr_log[ENV](_,_,_,_,_),
- fold_expr_check_expr
- = bind identity_fold_expr_check_expr[ENV](_,_,_,_),
+ fold_expr_check
+ = bind identity_fold_expr_check[ENV](_,_,_,_),
+ fold_expr_assert
+ = bind identity_fold_expr_assert[ENV](_,_,_,_),
+
fold_expr_port = bind identity_fold_expr_port[ENV](_,_,_),
fold_expr_chan = bind identity_fold_expr_chan[ENV](_,_,_,_),