aboutsummaryrefslogtreecommitdiff
path: root/src/comp/middle
diff options
context:
space:
mode:
authorPatrick Walton <[email protected]>2011-04-11 15:03:14 -0700
committerPatrick Walton <[email protected]>2011-04-11 15:05:39 -0700
commite0faf573132e4b0c8d38087f0224ca968edbe2e9 (patch)
treec03fbf34fb1fb9027fe71abbc80e0d4297a93b38 /src/comp/middle
parentAdd new minimal testcase showing generic tag memory corruption. (diff)
downloadrust-e0faf573132e4b0c8d38087f0224ca968edbe2e9.tar.xz
rust-e0faf573132e4b0c8d38087f0224ca968edbe2e9.zip
rustc: Factor out expr_ty() into expr_ann() and expr_ty()
Diffstat (limited to 'src/comp/middle')
-rw-r--r--src/comp/middle/ty.rs83
1 files changed, 45 insertions, 38 deletions
diff --git a/src/comp/middle/ty.rs b/src/comp/middle/ty.rs
index 897b834d..b55f5156 100644
--- a/src/comp/middle/ty.rs
+++ b/src/comp/middle/ty.rs
@@ -757,52 +757,59 @@ fn pat_ty(@ast.pat pat) -> @t {
fail; // not reached
}
-fn expr_ty(@ast.expr expr) -> @t {
+fn expr_ann(@ast.expr expr) -> option.t[ast.ann] {
alt (expr.node) {
- case (ast.expr_vec(_, _, ?ann)) { ret ann_to_type(ann); }
- case (ast.expr_tup(_, ?ann)) { ret ann_to_type(ann); }
- case (ast.expr_rec(_, _, ?ann)) { ret ann_to_type(ann); }
- case (ast.expr_bind(_, _, ?ann)) { ret ann_to_type(ann); }
- case (ast.expr_call(_, _, ?ann)) { ret ann_to_type(ann); }
- case (ast.expr_self_method(_, ?ann)) { ret ann_to_type(ann); }
+ case (ast.expr_vec(_, _, ?ann)) { ret some[ast.ann](ann); }
+ case (ast.expr_tup(_, ?ann)) { ret some[ast.ann](ann); }
+ case (ast.expr_rec(_, _, ?ann)) { ret some[ast.ann](ann); }
+ case (ast.expr_bind(_, _, ?ann)) { ret some[ast.ann](ann); }
+ case (ast.expr_call(_, _, ?ann)) { ret some[ast.ann](ann); }
+ case (ast.expr_self_method(_, ?ann)) { ret some[ast.ann](ann); }
case (ast.expr_spawn(_, _, _, _, ?ann))
- { ret ann_to_type(ann); }
- case (ast.expr_binary(_, _, _, ?ann)) { ret ann_to_type(ann); }
- case (ast.expr_unary(_, _, ?ann)) { ret ann_to_type(ann); }
- case (ast.expr_lit(_, ?ann)) { ret ann_to_type(ann); }
- case (ast.expr_cast(_, _, ?ann)) { ret ann_to_type(ann); }
- case (ast.expr_if(_, _, _, ?ann)) { ret ann_to_type(ann); }
- case (ast.expr_for(_, _, _, ?ann)) { ret ann_to_type(ann); }
+ { ret some[ast.ann](ann); }
+ case (ast.expr_binary(_, _, _, ?ann)) { ret some[ast.ann](ann); }
+ case (ast.expr_unary(_, _, ?ann)) { ret some[ast.ann](ann); }
+ case (ast.expr_lit(_, ?ann)) { ret some[ast.ann](ann); }
+ case (ast.expr_cast(_, _, ?ann)) { ret some[ast.ann](ann); }
+ case (ast.expr_if(_, _, _, ?ann)) { ret some[ast.ann](ann); }
+ case (ast.expr_for(_, _, _, ?ann)) { ret some[ast.ann](ann); }
case (ast.expr_for_each(_, _, _, ?ann))
- { ret ann_to_type(ann); }
- case (ast.expr_while(_, _, ?ann)) { ret ann_to_type(ann); }
- case (ast.expr_do_while(_, _, ?ann)) { ret ann_to_type(ann); }
- case (ast.expr_alt(_, _, ?ann)) { ret ann_to_type(ann); }
- case (ast.expr_block(_, ?ann)) { ret ann_to_type(ann); }
- case (ast.expr_assign(_, _, ?ann)) { ret ann_to_type(ann); }
+ { ret some[ast.ann](ann); }
+ case (ast.expr_while(_, _, ?ann)) { ret some[ast.ann](ann); }
+ case (ast.expr_do_while(_, _, ?ann)) { ret some[ast.ann](ann); }
+ case (ast.expr_alt(_, _, ?ann)) { ret some[ast.ann](ann); }
+ case (ast.expr_block(_, ?ann)) { ret some[ast.ann](ann); }
+ case (ast.expr_assign(_, _, ?ann)) { ret some[ast.ann](ann); }
case (ast.expr_assign_op(_, _, _, ?ann))
- { ret ann_to_type(ann); }
- case (ast.expr_field(_, _, ?ann)) { ret ann_to_type(ann); }
- case (ast.expr_index(_, _, ?ann)) { ret ann_to_type(ann); }
- case (ast.expr_path(_, _, ?ann)) { ret ann_to_type(ann); }
- case (ast.expr_ext(_, _, _, _, ?ann)) { ret ann_to_type(ann); }
- case (ast.expr_port(?ann)) { ret ann_to_type(ann); }
- case (ast.expr_chan(_, ?ann)) { ret ann_to_type(ann); }
- case (ast.expr_send(_, _, ?ann)) { ret ann_to_type(ann); }
- case (ast.expr_recv(_, _, ?ann)) { ret ann_to_type(ann); }
-
- case (ast.expr_fail(_)) { ret plain_ty(ty_nil); }
- case (ast.expr_break(_)) { ret plain_ty(ty_nil); }
- case (ast.expr_cont(_)) { ret plain_ty(ty_nil); }
- case (ast.expr_log(_,_)) { ret plain_ty(ty_nil); }
- case (ast.expr_check_expr(_,_)) { ret plain_ty(ty_nil); }
- case (ast.expr_ret(_,_)) { ret plain_ty(ty_nil); }
- case (ast.expr_put(_,_)) { ret plain_ty(ty_nil); }
- case (ast.expr_be(_,_)) { ret plain_ty(ty_nil); }
+ { ret some[ast.ann](ann); }
+ case (ast.expr_field(_, _, ?ann)) { ret some[ast.ann](ann); }
+ case (ast.expr_index(_, _, ?ann)) { ret some[ast.ann](ann); }
+ case (ast.expr_path(_, _, ?ann)) { ret some[ast.ann](ann); }
+ case (ast.expr_ext(_, _, _, _, ?ann)) { ret some[ast.ann](ann); }
+ case (ast.expr_port(?ann)) { ret some[ast.ann](ann); }
+ case (ast.expr_chan(_, ?ann)) { ret some[ast.ann](ann); }
+ case (ast.expr_send(_, _, ?ann)) { ret some[ast.ann](ann); }
+ case (ast.expr_recv(_, _, ?ann)) { ret some[ast.ann](ann); }
+
+ case (ast.expr_fail(_)) { ret none[ast.ann]; }
+ case (ast.expr_break(_)) { ret none[ast.ann]; }
+ case (ast.expr_cont(_)) { ret none[ast.ann]; }
+ case (ast.expr_log(_,_)) { ret none[ast.ann]; }
+ case (ast.expr_check_expr(_,_)) { ret none[ast.ann]; }
+ case (ast.expr_ret(_,_)) { ret none[ast.ann]; }
+ case (ast.expr_put(_,_)) { ret none[ast.ann]; }
+ case (ast.expr_be(_,_)) { ret none[ast.ann]; }
}
fail;
}
+fn expr_ty(@ast.expr expr) -> @t {
+ alt (expr_ann(expr)) {
+ case (none[ast.ann]) { ret plain_ty(ty_nil); }
+ case (some[ast.ann](?a)) { ret ann_to_type(a); }
+ }
+}
+
// Expression utilities
fn field_num(session.session sess, &span sp, &ast.ident id) -> uint {