diff options
| author | Patrick Walton <[email protected]> | 2010-11-03 15:53:53 -0700 |
|---|---|---|
| committer | Patrick Walton <[email protected]> | 2010-11-03 15:54:46 -0700 |
| commit | a3d666bfdf3ef87a91eace7b533e433945b06d76 (patch) | |
| tree | f8bffa03b37a27dead809b9e00aec3eba733ae8a /src/comp/middle | |
| parent | Fix documentation: it's (&str s) not (str &s). (diff) | |
| download | rust-a3d666bfdf3ef87a91eace7b533e433945b06d76.tar.xz rust-a3d666bfdf3ef87a91eace7b533e433945b06d76.zip | |
rustc: Use an extensible annotation field instead of putting option[@ty] everywhere
Diffstat (limited to 'src/comp/middle')
| -rw-r--r-- | src/comp/middle/fold.rs | 94 | ||||
| -rw-r--r-- | src/comp/middle/resolve.rs | 5 |
2 files changed, 49 insertions, 50 deletions
diff --git a/src/comp/middle/fold.rs b/src/comp/middle/fold.rs index c5685680..8b38c894 100644 --- a/src/comp/middle/fold.rs +++ b/src/comp/middle/fold.rs @@ -22,6 +22,7 @@ import front.ast.arg; import front.ast.decl; import front.ast.def; import front.ast.def_id; +import front.ast.ann; import std._vec; @@ -50,64 +51,64 @@ type ast_fold[ENV] = // Expr folds. (fn(&ENV e, &span sp, - vec[@expr] es, option[@ty] ty) -> @expr) fold_expr_vec, + vec[@expr] es, ann a) -> @expr) fold_expr_vec, (fn(&ENV e, &span sp, vec[tup(bool,@expr)] es, - option[@ty] ty) -> @expr) fold_expr_tup, + ann a) -> @expr) fold_expr_tup, (fn(&ENV e, &span sp, vec[tup(ident,@expr)] fields, - option[@ty] ty) -> @expr) fold_expr_rec, + ann a) -> @expr) fold_expr_rec, (fn(&ENV e, &span sp, @expr f, vec[@expr] args, - option[@ty] ty) -> @expr) fold_expr_call, + ann a) -> @expr) fold_expr_call, (fn(&ENV e, &span sp, ast.binop, @expr lhs, @expr rhs, - option[@ty] ty) -> @expr) fold_expr_binary, + ann a) -> @expr) fold_expr_binary, (fn(&ENV e, &span sp, ast.unop, @expr e, - option[@ty] ty) -> @expr) fold_expr_unary, + ann a) -> @expr) fold_expr_unary, (fn(&ENV e, &span sp, - @ast.lit, option[@ty] ty) -> @expr) fold_expr_lit, + @ast.lit, ann a) -> @expr) fold_expr_lit, (fn(&ENV e, &span sp, @expr cond, &block thn, &option[block] els, - option[@ty] ty) -> @expr) fold_expr_if, + ann a) -> @expr) fold_expr_if, (fn(&ENV e, &span sp, @expr cond, &block body, - option[@ty] ty) -> @expr) fold_expr_while, + ann a) -> @expr) fold_expr_while, (fn(&ENV e, &span sp, &block body, @expr cond, - option[@ty] ty) -> @expr) fold_expr_do_while, + ann a) -> @expr) fold_expr_do_while, (fn(&ENV e, &span sp, - &block blk, option[@ty] ty) -> @expr) fold_expr_block, + &block blk, ann a) -> @expr) fold_expr_block, (fn(&ENV e, &span sp, @expr lhs, @expr rhs, - option[@ty] ty) -> @expr) fold_expr_assign, + ann a) -> @expr) fold_expr_assign, (fn(&ENV e, &span sp, @expr e, ident i, - option[@ty] ty) -> @expr) fold_expr_field, + ann a) -> @expr) fold_expr_field, (fn(&ENV e, &span sp, @expr e, @expr ix, - option[@ty] ty) -> @expr) fold_expr_index, + ann a) -> @expr) fold_expr_index, (fn(&ENV e, &span sp, &name n, &option[def] d, - option[@ty] ty) -> @expr) fold_expr_name, + ann a) -> @expr) fold_expr_name, // Decl folds. (fn(&ENV e, &span sp, @@ -575,86 +576,83 @@ fn identity_fold_ty_path[ENV](&ENV env, &span sp, ast.path p, // Expr identities. fn identity_fold_expr_vec[ENV](&ENV env, &span sp, vec[@expr] es, - option[@ty] t) -> @expr { - ret @respan(sp, ast.expr_vec(es, t)); + ann a) -> @expr { + ret @respan(sp, ast.expr_vec(es, a)); } fn identity_fold_expr_tup[ENV](&ENV env, &span sp, vec[tup(bool, @expr)] es, - option[@ty] t) -> @expr { - ret @respan(sp, ast.expr_tup(es, t)); + ann a) -> @expr { + ret @respan(sp, ast.expr_tup(es, a)); } fn identity_fold_expr_rec[ENV](&ENV env, &span sp, - vec[tup(ident,@expr)] fields, option[@ty] t) - -> @expr { - ret @respan(sp, ast.expr_rec(fields, t)); + vec[tup(ident,@expr)] fields, ann a) -> @expr { + ret @respan(sp, ast.expr_rec(fields, a)); } fn identity_fold_expr_call[ENV](&ENV env, &span sp, @expr f, - vec[@expr] args, option[@ty] t) -> @expr { - ret @respan(sp, ast.expr_call(f, args, t)); + vec[@expr] args, ann a) -> @expr { + ret @respan(sp, ast.expr_call(f, args, a)); } fn identity_fold_expr_binary[ENV](&ENV env, &span sp, ast.binop b, @expr lhs, @expr rhs, - option[@ty] t) -> @expr { - ret @respan(sp, ast.expr_binary(b, lhs, rhs, t)); + ann a) -> @expr { + ret @respan(sp, ast.expr_binary(b, lhs, rhs, a)); } fn identity_fold_expr_unary[ENV](&ENV env, &span sp, - ast.unop u, @expr e, option[@ty] t) + ast.unop u, @expr e, ann a) -> @expr { - ret @respan(sp, ast.expr_unary(u, e, t)); + ret @respan(sp, ast.expr_unary(u, e, a)); } fn identity_fold_expr_lit[ENV](&ENV env, &span sp, @ast.lit lit, - option[@ty] t) -> @expr { - ret @respan(sp, ast.expr_lit(lit, t)); + ann a) -> @expr { + ret @respan(sp, ast.expr_lit(lit, a)); } fn identity_fold_expr_if[ENV](&ENV env, &span sp, @expr cond, &block thn, - &option[block] els, option[@ty] t) -> @expr { - ret @respan(sp, ast.expr_if(cond, thn, els, t)); + &option[block] els, ann a) -> @expr { + ret @respan(sp, ast.expr_if(cond, thn, els, a)); } fn identity_fold_expr_while[ENV](&ENV env, &span sp, - @expr cond, &block body, - option[@ty] t) -> @expr { - ret @respan(sp, ast.expr_while(cond, body, t)); + @expr cond, &block body, ann a) -> @expr { + ret @respan(sp, ast.expr_while(cond, body, a)); } fn identity_fold_expr_do_while[ENV](&ENV env, &span sp, - &block body, @expr cond, - option[@ty] t) -> @expr { - ret @respan(sp, ast.expr_do_while(body, cond, t)); + &block body, @expr cond, ann a) -> @expr { + ret @respan(sp, ast.expr_do_while(body, cond, a)); } fn identity_fold_expr_block[ENV](&ENV env, &span sp, &block blk, - option[@ty] t) -> @expr { - ret @respan(sp, ast.expr_block(blk, t)); + ann a) -> @expr { + ret @respan(sp, ast.expr_block(blk, a)); } fn identity_fold_expr_assign[ENV](&ENV env, &span sp, - @expr lhs, @expr rhs, option[@ty] t) + @expr lhs, @expr rhs, ann a) -> @expr { - ret @respan(sp, ast.expr_assign(lhs, rhs, t)); + ret @respan(sp, ast.expr_assign(lhs, rhs, a)); } fn identity_fold_expr_field[ENV](&ENV env, &span sp, - @expr e, ident i, option[@ty] t) -> @expr { - ret @respan(sp, ast.expr_field(e, i, t)); + @expr e, ident i, ann a) -> @expr { + ret @respan(sp, ast.expr_field(e, i, a)); } fn identity_fold_expr_index[ENV](&ENV env, &span sp, - @expr e, @expr ix, option[@ty] t) -> @expr { - ret @respan(sp, ast.expr_index(e, ix, t)); + @expr e, @expr ix, ann a) -> @expr { + ret @respan(sp, ast.expr_index(e, ix, a)); } fn identity_fold_expr_name[ENV](&ENV env, &span sp, &name n, &option[def] d, - option[@ty] t) -> @expr { - ret @respan(sp, ast.expr_name(n, d, t)); + ann a) -> @expr { + ret @respan(sp, ast.expr_name(n, d, a)); } diff --git a/src/comp/middle/resolve.rs b/src/comp/middle/resolve.rs index 31aca9cc..5741bac4 100644 --- a/src/comp/middle/resolve.rs +++ b/src/comp/middle/resolve.rs @@ -1,6 +1,7 @@ import front.ast; import front.ast.ident; import front.ast.def; +import front.ast.ann; import driver.session; import util.common.span; import std.map.hashmap; @@ -102,7 +103,7 @@ fn lookup_name(&env e, ast.ident i) -> option[def] { } fn fold_expr_name(&env e, &span sp, &ast.name n, - &option[def] d, option[@ast.ty] t) -> @ast.expr { + &option[def] d, ann a) -> @ast.expr { auto d_ = lookup_name(e, n.node.ident); @@ -115,7 +116,7 @@ fn fold_expr_name(&env e, &span sp, &ast.name n, } } - ret @fold.respan[ast.expr_](sp, ast.expr_name(n, d_, t)); + ret @fold.respan[ast.expr_](sp, ast.expr_name(n, d_, a)); } fn update_env_for_crate(&env e, @ast.crate c) -> env { |