提交 565ea068 编写于 作者: T Tim Chevalier

Add type parameters when checking wildcard patterns

For some reason, wildcard patterns were never getting type parameter
substitutions attached. This would cause an assertion failure when
checking a wildcard pattern that matches against a tag with
polymorphic type (not sure why this didn't come up before). Fixed it.
(The diff and test case may be easier to understand than this note
:P)

Closes #1503.
上级 8818f42b
......@@ -1264,7 +1264,18 @@ fn valid_range_bounds(from: @ast::expr, to: @ast::expr) -> bool {
fn check_pat(fcx: @fn_ctxt, map: ast_util::pat_id_map, pat: @ast::pat,
expected: ty::t) {
alt pat.node {
ast::pat_wild. { write::ty_only_fixup(fcx, pat.id, expected); }
ast::pat_wild. {
alt structure_of(fcx, pat.span, expected) {
ty::ty_tag(_, expected_tps) {
let path_tpt = {substs: some(expected_tps),
ty: expected};
write::ty_fixup(fcx, pat.id, path_tpt);
}
_ {
write::ty_only_fixup(fcx, pat.id, expected);
}
}
}
ast::pat_lit(lt) {
check_expr_with(fcx, lt, expected);
write::ty_only_fixup(fcx, pat.id, expr_ty(fcx.ccx.tcx, lt));
......
// error-pattern:squirrelcupcake
fn cmp() -> int {
alt(option::some('a'), option::none::<char>) {
(option::some(_), _) { fail "squirrelcupcake"; }
(_, option::some(_)) { fail; }
}
}
fn main() { log(error, cmp()); }
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册