aboutsummaryrefslogtreecommitdiff
path: root/src/comp/middle
diff options
context:
space:
mode:
authorGraydon Hoare <[email protected]>2010-12-03 18:03:28 -0800
committerGraydon Hoare <[email protected]>2010-12-03 18:04:18 -0800
commit0c19c8e18f5e145c379fe4b50e5ea8d44fe4969f (patch)
tree36406ee1b92328d4bba26c9b68d89af338deba73 /src/comp/middle
parentrustc: Remove LLVM unions and represent tags as (discriminant, byte blob) pairs (diff)
downloadrust-0c19c8e18f5e145c379fe4b50e5ea8d44fe4969f.tar.xz
rust-0c19c8e18f5e145c379fe4b50e5ea8d44fe4969f.zip
Parse layer and effect annotations.
Diffstat (limited to 'src/comp/middle')
-rw-r--r--src/comp/middle/fold.rs10
-rw-r--r--src/comp/middle/typeck.rs3
2 files changed, 8 insertions, 5 deletions
diff --git a/src/comp/middle/fold.rs b/src/comp/middle/fold.rs
index 8ec0bd2f..60c5f44b 100644
--- a/src/comp/middle/fold.rs
+++ b/src/comp/middle/fold.rs
@@ -185,7 +185,8 @@ type ast_fold[ENV] =
(fn(&ENV e, &span sp,
&ast.block_) -> block) fold_block,
- (fn(&ENV e, vec[arg] inputs,
+ (fn(&ENV e, ast.effect effect,
+ vec[arg] inputs,
@ty output, &block body) -> ast._fn) fold_fn,
(fn(&ENV e, &ast._mod m) -> ast._mod) fold_mod,
@@ -570,7 +571,7 @@ fn fold_fn[ENV](&ENV env, ast_fold[ENV] fld, &ast._fn f) -> ast._fn {
auto output = fold_ty[ENV](env, fld, f.output);
auto body = fold_block[ENV](env, fld, f.body);
- ret fld.fold_fn(env, inputs, output, body);
+ ret fld.fold_fn(env, f.effect, inputs, output, body);
}
fn fold_item[ENV](&ENV env, ast_fold[ENV] fld, @item i) -> @item {
@@ -891,10 +892,11 @@ fn identity_fold_block[ENV](&ENV e, &span sp, &ast.block_ blk) -> block {
}
fn identity_fold_fn[ENV](&ENV e,
+ ast.effect effect,
vec[arg] inputs,
@ast.ty output,
&block body) -> ast._fn {
- ret rec(inputs=inputs, output=output, body=body);
+ ret rec(effect=effect, inputs=inputs, output=output, body=body);
}
fn identity_fold_mod[ENV](&ENV e, &ast._mod m) -> ast._mod {
@@ -1007,7 +1009,7 @@ fn new_identity_fold[ENV]() -> ast_fold[ENV] {
fold_item_tag = bind identity_fold_item_tag[ENV](_,_,_,_,_,_),
fold_block = bind identity_fold_block[ENV](_,_,_),
- fold_fn = bind identity_fold_fn[ENV](_,_,_,_),
+ fold_fn = bind identity_fold_fn[ENV](_,_,_,_,_),
fold_mod = bind identity_fold_mod[ENV](_,_),
fold_crate = bind identity_fold_crate[ENV](_,_,_),
diff --git a/src/comp/middle/typeck.rs b/src/comp/middle/typeck.rs
index 5bf9dd31..208c395a 100644
--- a/src/comp/middle/typeck.rs
+++ b/src/comp/middle/typeck.rs
@@ -1643,7 +1643,8 @@ fn check_fn(&@crate_ctxt ccx, &span sp, ast.ident ident, &ast._fn f,
auto block_t = check_block(fcx, f.body);
auto block_wb = writeback(fcx, block_t);
- auto fn_t = rec(inputs=f.inputs, output=f.output, body=block_wb);
+ auto fn_t = rec(effect=f.effect, inputs=f.inputs, output=f.output,
+ body=block_wb);
auto item = ast.item_fn(ident, fn_t, ty_params, id, fn_ann);
ret @fold.respan[ast.item_](sp, item);
}