aboutsummaryrefslogtreecommitdiff
path: root/src/comp/middle
diff options
context:
space:
mode:
authorGraydon Hoare <[email protected]>2011-01-21 17:06:20 -0800
committerGraydon Hoare <[email protected]>2011-01-21 17:06:20 -0800
commit546d1440095771a58ce7c68ebec56cf612266b58 (patch)
tree59e81d937fa92dce8249c6960ef51b6969403f3b /src/comp/middle
parentRe-XFAIL integral-indexing.rs. Seems OSX and linux still don't like it. (diff)
downloadrust-546d1440095771a58ce7c68ebec56cf612266b58.tar.xz
rust-546d1440095771a58ce7c68ebec56cf612266b58.zip
Teach AST, parser, folder about iter items.
Diffstat (limited to 'src/comp/middle')
-rw-r--r--src/comp/middle/fold.rs9
-rw-r--r--src/comp/middle/typeck.rs8
2 files changed, 10 insertions, 7 deletions
diff --git a/src/comp/middle/fold.rs b/src/comp/middle/fold.rs
index 3f5794fd..7862c7ca 100644
--- a/src/comp/middle/fold.rs
+++ b/src/comp/middle/fold.rs
@@ -221,6 +221,7 @@ type ast_fold[ENV] =
&ast.block_) -> block) fold_block,
(fn(&ENV e, ast.effect effect,
+ bool is_iter,
vec[arg] inputs,
@ty output, &block body) -> ast._fn) fold_fn,
@@ -671,7 +672,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, f.effect, inputs, output, body);
+ ret fld.fold_fn(env, f.effect, f.is_iter, inputs, output, body);
}
@@ -1129,10 +1130,12 @@ fn identity_fold_block[ENV](&ENV e, &span sp, &ast.block_ blk) -> block {
fn identity_fold_fn[ENV](&ENV e,
ast.effect effect,
+ bool is_iter,
vec[arg] inputs,
@ast.ty output,
&block body) -> ast._fn {
- ret rec(effect=effect, inputs=inputs, output=output, body=body);
+ ret rec(effect=effect, is_iter=is_iter, inputs=inputs,
+ output=output, body=body);
}
fn identity_fold_mod[ENV](&ENV e, &ast._mod m) -> ast._mod {
@@ -1271,7 +1274,7 @@ fn new_identity_fold[ENV]() -> ast_fold[ENV] {
bind identity_fold_view_item_import[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](_,_,_),
fold_obj = bind identity_fold_obj[ENV](_,_,_),
diff --git a/src/comp/middle/typeck.rs b/src/comp/middle/typeck.rs
index 4d9efd4a..6ce899f6 100644
--- a/src/comp/middle/typeck.rs
+++ b/src/comp/middle/typeck.rs
@@ -1590,7 +1590,7 @@ fn check_const(&@crate_ctxt ccx, &span sp, ast.ident ident, @ast.ty t,
}
fn check_fn(&@crate_ctxt ccx, ast.effect effect,
- vec[ast.arg] inputs,
+ bool is_iter, vec[ast.arg] inputs,
@ast.ty output, &ast.block body) -> ast._fn {
auto local_ty_table = @common.new_def_hash[@ty.t]();
@@ -1618,8 +1618,8 @@ fn check_fn(&@crate_ctxt ccx, ast.effect effect,
auto block_t = check_block(fcx, body);
auto block_wb = writeback(fcx, block_t);
- auto fn_t = rec(effect=effect, inputs=inputs, output=output,
- body=block_wb);
+ auto fn_t = rec(effect=effect, is_iter=is_iter,
+ inputs=inputs, output=output, body=block_wb);
ret fn_t;
}
@@ -1670,7 +1670,7 @@ fn check_crate(session.session sess, @ast.crate crate) -> @ast.crate {
auto fld = fold.new_identity_fold[@crate_ctxt]();
fld = @rec(update_env_for_item = bind update_obj_fields(_, _),
- fold_fn = bind check_fn(_,_,_,_,_),
+ fold_fn = bind check_fn(_,_,_,_,_,_),
fold_item_fn = bind check_item_fn(_,_,_,_,_,_,_)
with *fld);
ret fold.fold_crate[@crate_ctxt](ccx, fld, result._0);