From e0faf573132e4b0c8d38087f0224ca968edbe2e9 Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Mon, 11 Apr 2011 15:03:14 -0700 Subject: rustc: Factor out expr_ty() into expr_ann() and expr_ty() --- src/comp/middle/ty.rs | 83 ++++++++++++++++++++++++++++----------------------- 1 file 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 { -- cgit v1.2.3