about summary refs log tree commit diff
path: root/src/comp
diff options
context:
space:
mode:
authorPatrick Walton <pcwalton@mimiga.net>2011-04-11 15:03:14 -0700
committerPatrick Walton <pcwalton@mimiga.net>2011-04-11 15:05:39 -0700
commite0faf573132e4b0c8d38087f0224ca968edbe2e9 (patch)
treec03fbf34fb1fb9027fe71abbc80e0d4297a93b38 /src/comp
parentd218df02bfdb1010c21b003242449bae3f8eb13e (diff)
downloadrust-e0faf573132e4b0c8d38087f0224ca968edbe2e9.tar.gz
rust-e0faf573132e4b0c8d38087f0224ca968edbe2e9.zip
rustc: Factor out expr_ty() into expr_ann() and expr_ty()
Diffstat (limited to 'src/comp')
-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 897b834dc90..b55f5156d90 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 {