Skip to content

Commit 986f4e2

Browse files
catamorphismgraydon
authored andcommitted
---
yaml --- r: 2001 b: refs/heads/master c: 86d4601 h: refs/heads/master i: 1999: b2adcd9 v: v3
1 parent 4f87857 commit 986f4e2

File tree

5 files changed

+509
-81
lines changed

5 files changed

+509
-81
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
---
2-
refs/heads/master: 4fc8de196977a0e5bb4f733f7aaeb1162e880eaa
2+
refs/heads/master: 86d4601827812b4b069e44feec1b1ea64cd34f4e

trunk/src/comp/middle/typeck.rs

Lines changed: 27 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import middle.ty.ty_to_str;
2323
import middle.ty.type_is_integral;
2424
import middle.ty.type_is_scalar;
2525
import middle.ty.ty_params_opt_and_ty;
26+
import middle.ty.ty_nil;
2627

2728
import std._str;
2829
import std._uint;
@@ -62,6 +63,12 @@ fn triv_ann(@ty.t t) -> ann {
6263
ret ast.ann_type(t, none[vec[@ty.t]], none[@ts_ann]);
6364
}
6465

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+
6572
// Replaces parameter types inside a type with type variables.
6673
fn generalize_ty(@crate_ctxt cx, @ty.t t) -> @ty.t {
6774
state obj ty_generalizer(@crate_ctxt cx,
@@ -1361,7 +1368,7 @@ fn demand_expr_full(&@fn_ctxt fcx, @ty.t expected, @ast.expr e,
13611368
ann_to_type(ann), adk);
13621369
e_1 = ast.expr_ext(p, args, body, expanded, triv_ann(t));
13631370
}
1364-
/* FIXME: this should probably check the type annotations */
1371+
/* FIXME: should this check the type annotations? */
13651372
case (ast.expr_fail(_)) { e_1 = e.node; }
13661373
case (ast.expr_log(_,_)) { e_1 = e.node; }
13671374
case (ast.expr_break(_)) { e_1 = e.node; }
@@ -1771,16 +1778,19 @@ fn check_expr(&@fn_ctxt fcx, @ast.expr expr) -> @ast.expr {
17711778
ann));
17721779
}
17731780

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()));
17761784
}
17771785

17781786
case (ast.expr_break(_)) {
1779-
ret expr;
1787+
ret @fold.respan[ast.expr_](expr.span,
1788+
ast.expr_break(boring_ann()));
17801789
}
17811790

17821791
case (ast.expr_cont(_)) {
1783-
ret expr;
1792+
ret @fold.respan[ast.expr_](expr.span,
1793+
ast.expr_cont(boring_ann()));
17841794
}
17851795

17861796
case (ast.expr_ret(?expr_opt, _)) {
@@ -1792,14 +1802,16 @@ fn check_expr(&@fn_ctxt fcx, @ast.expr expr) -> @ast.expr {
17921802
+ "returning non-nil");
17931803
}
17941804

1795-
ret expr;
1805+
ret @fold.respan[ast.expr_]
1806+
(expr.span,
1807+
ast.expr_ret(none[@ast.expr], boring_ann()));
17961808
}
17971809

17981810
case (some[@ast.expr](?e)) {
17991811
auto expr_0 = check_expr(fcx, e);
18001812
auto expr_1 = demand_expr(fcx, fcx.ret_ty, expr_0);
18011813
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()));
18031815
}
18041816
}
18051817
}
@@ -1813,14 +1825,16 @@ fn check_expr(&@fn_ctxt fcx, @ast.expr expr) -> @ast.expr {
18131825
+ "putting non-nil");
18141826
}
18151827

1816-
ret expr;
1828+
ret @fold.respan[ast.expr_]
1829+
(expr.span, ast.expr_put(none[@ast.expr],
1830+
boring_ann()));
18171831
}
18181832

18191833
case (some[@ast.expr](?e)) {
18201834
auto expr_0 = check_expr(fcx, e);
18211835
auto expr_1 = demand_expr(fcx, fcx.ret_ty, expr_0);
18221836
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()));
18241838
}
18251839
}
18261840
}
@@ -1831,20 +1845,21 @@ fn check_expr(&@fn_ctxt fcx, @ast.expr expr) -> @ast.expr {
18311845
auto expr_0 = check_expr(fcx, e);
18321846
auto expr_1 = demand_expr(fcx, fcx.ret_ty, expr_0);
18331847
ret @fold.respan[ast.expr_](expr.span,
1834-
ast.expr_be(expr_1, ann_none));
1848+
ast.expr_be(expr_1,
1849+
boring_ann()));
18351850
}
18361851

18371852
case (ast.expr_log(?e,_)) {
18381853
auto expr_t = check_expr(fcx, e);
18391854
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()));
18411856
}
18421857

18431858
case (ast.expr_check_expr(?e, _)) {
18441859
auto expr_t = check_expr(fcx, e);
18451860
demand(fcx, expr.span, plain_ty(ty.ty_bool), expr_ty(expr_t));
18461861
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()));
18481863
}
18491864

18501865
case (ast.expr_assign(?lhs, ?rhs, _)) {

0 commit comments

Comments
 (0)