@@ -23,6 +23,7 @@ import middle.ty.ty_to_str;
23
23
import middle. ty . type_is_integral ;
24
24
import middle. ty . type_is_scalar ;
25
25
import middle. ty . ty_params_opt_and_ty ;
26
+ import middle. ty . ty_nil ;
26
27
27
28
import std. _str ;
28
29
import std. _uint ;
@@ -62,6 +63,12 @@ fn triv_ann(@ty.t t) -> ann {
62
63
ret ast. ann_type ( t, none[ vec[ @ty. t] ] , none[ @ts_ann] ) ;
63
64
}
64
65
66
+ // Used to fill in the annotation for things that have uninteresting
67
+ // types
68
+ fn boring_ann ( ) -> ann {
69
+ ret triv_ann ( plain_ty ( ty_nil) ) ;
70
+ }
71
+
65
72
// Replaces parameter types inside a type with type variables.
66
73
fn generalize_ty ( @crate_ctxt cx , @ty. t t ) -> @ty. t {
67
74
state obj ty_generalizer ( @crate_ctxt cx,
@@ -1361,7 +1368,7 @@ fn demand_expr_full(&@fn_ctxt fcx, @ty.t expected, @ast.expr e,
1361
1368
ann_to_type( ann) , adk) ;
1362
1369
e_1 = ast. expr_ext( p, args, body, expanded, triv_ann( t) ) ;
1363
1370
}
1364
- /* FIXME: this should probably check the type annotations */
1371
+ /* FIXME: should this check the type annotations? */
1365
1372
case ( ast. expr_fail( _) ) { e_1 = e. node; }
1366
1373
case ( ast. expr_log( _, _) ) { e_1 = e. node; }
1367
1374
case ( ast. expr_break( _) ) { e_1 = e. node; }
@@ -1771,16 +1778,19 @@ fn check_expr(&@fn_ctxt fcx, @ast.expr expr) -> @ast.expr {
1771
1778
ann) ) ;
1772
1779
}
1773
1780
1774
- case ( ast. expr_fail ( _) ) { // ??? ignoring ann
1775
- ret expr;
1781
+ case ( ast. expr_fail ( _) ) {
1782
+ ret @fold. respan [ ast. expr_ ] ( expr. span ,
1783
+ ast. expr_fail ( boring_ann ( ) ) ) ;
1776
1784
}
1777
1785
1778
1786
case ( ast. expr_break ( _) ) {
1779
- ret expr;
1787
+ ret @fold. respan [ ast. expr_ ] ( expr. span ,
1788
+ ast. expr_break ( boring_ann ( ) ) ) ;
1780
1789
}
1781
1790
1782
1791
case ( ast. expr_cont ( _) ) {
1783
- ret expr;
1792
+ ret @fold. respan [ ast. expr_ ] ( expr. span ,
1793
+ ast. expr_cont ( boring_ann ( ) ) ) ;
1784
1794
}
1785
1795
1786
1796
case ( ast. expr_ret ( ?expr_opt, _) ) {
@@ -1792,14 +1802,16 @@ fn check_expr(&@fn_ctxt fcx, @ast.expr expr) -> @ast.expr {
1792
1802
+ "returning non-nil" ) ;
1793
1803
}
1794
1804
1795
- ret expr;
1805
+ ret @fold. respan [ ast. expr_ ]
1806
+ ( expr. span ,
1807
+ ast. expr_ret ( none[ @ast. expr ] , boring_ann ( ) ) ) ;
1796
1808
}
1797
1809
1798
1810
case ( some[ @ast. expr ] ( ?e) ) {
1799
1811
auto expr_0 = check_expr ( fcx, e) ;
1800
1812
auto expr_1 = demand_expr ( fcx, fcx. ret_ty , expr_0) ;
1801
1813
ret @fold. respan [ ast. expr_ ]
1802
- ( expr. span , ast. expr_ret ( some ( expr_1) , ann_none ) ) ;
1814
+ ( expr. span , ast. expr_ret ( some ( expr_1) , boring_ann ( ) ) ) ;
1803
1815
}
1804
1816
}
1805
1817
}
@@ -1813,14 +1825,16 @@ fn check_expr(&@fn_ctxt fcx, @ast.expr expr) -> @ast.expr {
1813
1825
+ "putting non-nil" ) ;
1814
1826
}
1815
1827
1816
- ret expr;
1828
+ ret @fold. respan [ ast. expr_ ]
1829
+ ( expr. span , ast. expr_put ( none[ @ast. expr ] ,
1830
+ boring_ann ( ) ) ) ;
1817
1831
}
1818
1832
1819
1833
case ( some[ @ast. expr ] ( ?e) ) {
1820
1834
auto expr_0 = check_expr ( fcx, e) ;
1821
1835
auto expr_1 = demand_expr ( fcx, fcx. ret_ty , expr_0) ;
1822
1836
ret @fold. respan [ ast. expr_ ]
1823
- ( expr. span , ast. expr_put ( some ( expr_1) , ann_none ) ) ;
1837
+ ( expr. span , ast. expr_put ( some ( expr_1) , boring_ann ( ) ) ) ;
1824
1838
}
1825
1839
}
1826
1840
}
@@ -1831,20 +1845,21 @@ fn check_expr(&@fn_ctxt fcx, @ast.expr expr) -> @ast.expr {
1831
1845
auto expr_0 = check_expr ( fcx, e) ;
1832
1846
auto expr_1 = demand_expr ( fcx, fcx. ret_ty , expr_0) ;
1833
1847
ret @fold. respan [ ast. expr_ ] ( expr. span ,
1834
- ast. expr_be ( expr_1, ann_none) ) ;
1848
+ ast. expr_be ( expr_1,
1849
+ boring_ann ( ) ) ) ;
1835
1850
}
1836
1851
1837
1852
case ( ast. expr_log ( ?e, _) ) {
1838
1853
auto expr_t = check_expr ( fcx, e) ;
1839
1854
ret @fold. respan [ ast. expr_ ]
1840
- ( expr. span , ast. expr_log ( expr_t, ann_none ) ) ;
1855
+ ( expr. span , ast. expr_log ( expr_t, boring_ann ( ) ) ) ;
1841
1856
}
1842
1857
1843
1858
case ( ast. expr_check_expr ( ?e, _) ) {
1844
1859
auto expr_t = check_expr ( fcx, e) ;
1845
1860
demand ( fcx, expr. span , plain_ty ( ty. ty_bool ) , expr_ty ( expr_t) ) ;
1846
1861
ret @fold. respan [ ast. expr_ ]
1847
- ( expr. span , ast. expr_check_expr ( expr_t, ann_none ) ) ;
1862
+ ( expr. span , ast. expr_check_expr ( expr_t, boring_ann ( ) ) ) ;
1848
1863
}
1849
1864
1850
1865
case ( ast. expr_assign ( ?lhs, ?rhs, _) ) {
0 commit comments