@@ -757,52 +757,59 @@ fn pat_ty(@ast.pat pat) -> @t {
757
757
fail; // not reached
758
758
}
759
759
760
- fn expr_ty ( @ast. expr expr) -> @t {
760
+ fn expr_ann ( @ast. expr expr) -> option . t [ ast . ann ] {
761
761
alt ( expr. node) {
762
- case ( ast. expr_vec( _, _, ?ann) ) { ret ann_to_type ( ann) ; }
763
- case ( ast. expr_tup( _, ?ann) ) { ret ann_to_type ( ann) ; }
764
- case ( ast. expr_rec( _, _, ?ann) ) { ret ann_to_type ( ann) ; }
765
- case ( ast. expr_bind( _, _, ?ann) ) { ret ann_to_type ( ann) ; }
766
- case ( ast. expr_call( _, _, ?ann) ) { ret ann_to_type ( ann) ; }
767
- case ( ast. expr_self_method( _, ?ann) ) { ret ann_to_type ( ann) ; }
762
+ case ( ast. expr_vec( _, _, ?ann) ) { ret some [ ast . ann ] ( ann) ; }
763
+ case ( ast. expr_tup( _, ?ann) ) { ret some [ ast . ann ] ( ann) ; }
764
+ case ( ast. expr_rec( _, _, ?ann) ) { ret some [ ast . ann ] ( ann) ; }
765
+ case ( ast. expr_bind( _, _, ?ann) ) { ret some [ ast . ann ] ( ann) ; }
766
+ case ( ast. expr_call( _, _, ?ann) ) { ret some [ ast . ann ] ( ann) ; }
767
+ case ( ast. expr_self_method( _, ?ann) ) { ret some [ ast . ann ] ( ann) ; }
768
768
case ( ast. expr_spawn( _, _, _, _, ?ann) )
769
- { ret ann_to_type ( ann) ; }
770
- case ( ast. expr_binary( _, _, _, ?ann) ) { ret ann_to_type ( ann) ; }
771
- case ( ast. expr_unary( _, _, ?ann) ) { ret ann_to_type ( ann) ; }
772
- case ( ast. expr_lit( _, ?ann) ) { ret ann_to_type ( ann) ; }
773
- case ( ast. expr_cast( _, _, ?ann) ) { ret ann_to_type ( ann) ; }
774
- case ( ast. expr_if( _, _, _, ?ann) ) { ret ann_to_type ( ann) ; }
775
- case ( ast. expr_for( _, _, _, ?ann) ) { ret ann_to_type ( ann) ; }
769
+ { ret some [ ast . ann ] ( ann) ; }
770
+ case ( ast. expr_binary( _, _, _, ?ann) ) { ret some [ ast . ann ] ( ann) ; }
771
+ case ( ast. expr_unary( _, _, ?ann) ) { ret some [ ast . ann ] ( ann) ; }
772
+ case ( ast. expr_lit( _, ?ann) ) { ret some [ ast . ann ] ( ann) ; }
773
+ case ( ast. expr_cast( _, _, ?ann) ) { ret some [ ast . ann ] ( ann) ; }
774
+ case ( ast. expr_if( _, _, _, ?ann) ) { ret some [ ast . ann ] ( ann) ; }
775
+ case ( ast. expr_for( _, _, _, ?ann) ) { ret some [ ast . ann ] ( ann) ; }
776
776
case ( ast. expr_for_each( _, _, _, ?ann) )
777
- { ret ann_to_type ( ann) ; }
778
- case ( ast. expr_while( _, _, ?ann) ) { ret ann_to_type ( ann) ; }
779
- case ( ast. expr_do_while( _, _, ?ann) ) { ret ann_to_type ( ann) ; }
780
- case ( ast. expr_alt( _, _, ?ann) ) { ret ann_to_type ( ann) ; }
781
- case ( ast. expr_block( _, ?ann) ) { ret ann_to_type ( ann) ; }
782
- case ( ast. expr_assign( _, _, ?ann) ) { ret ann_to_type ( ann) ; }
777
+ { ret some [ ast . ann ] ( ann) ; }
778
+ case ( ast. expr_while( _, _, ?ann) ) { ret some [ ast . ann ] ( ann) ; }
779
+ case ( ast. expr_do_while( _, _, ?ann) ) { ret some [ ast . ann ] ( ann) ; }
780
+ case ( ast. expr_alt( _, _, ?ann) ) { ret some [ ast . ann ] ( ann) ; }
781
+ case ( ast. expr_block( _, ?ann) ) { ret some [ ast . ann ] ( ann) ; }
782
+ case ( ast. expr_assign( _, _, ?ann) ) { ret some [ ast . ann ] ( ann) ; }
783
783
case ( ast. expr_assign_op( _, _, _, ?ann) )
784
- { ret ann_to_type ( ann) ; }
785
- case ( ast. expr_field( _, _, ?ann) ) { ret ann_to_type ( ann) ; }
786
- case ( ast. expr_index( _, _, ?ann) ) { ret ann_to_type ( ann) ; }
787
- case ( ast. expr_path( _, _, ?ann) ) { ret ann_to_type ( ann) ; }
788
- case ( ast. expr_ext( _, _, _, _, ?ann) ) { ret ann_to_type ( ann) ; }
789
- case ( ast. expr_port( ?ann) ) { ret ann_to_type ( ann) ; }
790
- case ( ast. expr_chan( _, ?ann) ) { ret ann_to_type ( ann) ; }
791
- case ( ast. expr_send( _, _, ?ann) ) { ret ann_to_type ( ann) ; }
792
- case ( ast. expr_recv( _, _, ?ann) ) { ret ann_to_type ( ann) ; }
793
-
794
- case ( ast. expr_fail( _) ) { ret plain_ty ( ty_nil ) ; }
795
- case ( ast. expr_break( _) ) { ret plain_ty ( ty_nil ) ; }
796
- case ( ast. expr_cont( _) ) { ret plain_ty ( ty_nil ) ; }
797
- case ( ast. expr_log( _, _) ) { ret plain_ty ( ty_nil ) ; }
798
- case ( ast. expr_check_expr( _, _) ) { ret plain_ty ( ty_nil ) ; }
799
- case ( ast. expr_ret( _, _) ) { ret plain_ty ( ty_nil ) ; }
800
- case ( ast. expr_put( _, _) ) { ret plain_ty ( ty_nil ) ; }
801
- case ( ast. expr_be( _, _) ) { ret plain_ty ( ty_nil ) ; }
784
+ { ret some [ ast . ann ] ( ann) ; }
785
+ case ( ast. expr_field( _, _, ?ann) ) { ret some [ ast . ann ] ( ann) ; }
786
+ case ( ast. expr_index( _, _, ?ann) ) { ret some [ ast . ann ] ( ann) ; }
787
+ case ( ast. expr_path( _, _, ?ann) ) { ret some [ ast . ann ] ( ann) ; }
788
+ case ( ast. expr_ext( _, _, _, _, ?ann) ) { ret some [ ast . ann ] ( ann) ; }
789
+ case ( ast. expr_port( ?ann) ) { ret some [ ast . ann ] ( ann) ; }
790
+ case ( ast. expr_chan( _, ?ann) ) { ret some [ ast . ann ] ( ann) ; }
791
+ case ( ast. expr_send( _, _, ?ann) ) { ret some [ ast . ann ] ( ann) ; }
792
+ case ( ast. expr_recv( _, _, ?ann) ) { ret some [ ast . ann ] ( ann) ; }
793
+
794
+ case ( ast. expr_fail( _) ) { ret none [ ast . ann ] ; }
795
+ case ( ast. expr_break( _) ) { ret none [ ast . ann ] ; }
796
+ case ( ast. expr_cont( _) ) { ret none [ ast . ann ] ; }
797
+ case ( ast. expr_log( _, _) ) { ret none [ ast . ann ] ; }
798
+ case ( ast. expr_check_expr( _, _) ) { ret none [ ast . ann ] ; }
799
+ case ( ast. expr_ret( _, _) ) { ret none [ ast . ann ] ; }
800
+ case ( ast. expr_put( _, _) ) { ret none [ ast . ann ] ; }
801
+ case ( ast. expr_be( _, _) ) { ret none [ ast . ann ] ; }
802
802
}
803
803
fail;
804
804
}
805
805
806
+ fn expr_ty( @ast. expr expr) -> @t {
807
+ alt ( expr_ann( expr) ) {
808
+ case ( none[ ast. ann] ) { ret plain_ty( ty_nil) ; }
809
+ case ( some[ ast. ann] ( ?a) ) { ret ann_to_type( a) ; }
810
+ }
811
+ }
812
+
806
813
// Expression utilities
807
814
808
815
fn field_num( session. session sess, & span sp, & ast. ident id) -> uint {
0 commit comments