From c9956a65b49f9cf2b1a691f2b88d61ada753d271 Mon Sep 17 00:00:00 2001 From: Graydon Hoare Date: Thu, 10 Feb 2011 19:22:30 -0800 Subject: [PATCH] Teach ty and typeck about pat_lit. --- src/comp/middle/ty.rs | 1 + src/comp/middle/typeck.rs | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/src/comp/middle/ty.rs b/src/comp/middle/ty.rs index 6dd229fbbb6..2bb65fe05de 100644 --- a/src/comp/middle/ty.rs +++ b/src/comp/middle/ty.rs @@ -656,6 +656,7 @@ fn block_ty(&ast.block b) -> @t { fn pat_ty(@ast.pat pat) -> @t { alt (pat.node) { case (ast.pat_wild(?ann)) { ret ann_to_type(ann); } + case (ast.pat_lit(_, ?ann)) { ret ann_to_type(ann); } case (ast.pat_bind(_, _, ?ann)) { ret ann_to_type(ann); } case (ast.pat_tag(_, _, _, ?ann)) { ret ann_to_type(ann); } } diff --git a/src/comp/middle/typeck.rs b/src/comp/middle/typeck.rs index d21d4ed2a08..9745343631e 100644 --- a/src/comp/middle/typeck.rs +++ b/src/comp/middle/typeck.rs @@ -807,6 +807,10 @@ fn demand_pat(&@fn_ctxt fcx, @ty.t expected, @ast.pat pat) -> @ast.pat { auto t = demand(fcx, pat.span, expected, ann_to_type(ann)); p_1 = ast.pat_wild(ast.ann_type(t)); } + case (ast.pat_lit(?lit, ?ann)) { + auto t = demand(fcx, pat.span, expected, ann_to_type(ann)); + p_1 = ast.pat_lit(lit, ast.ann_type(t)); + } case (ast.pat_bind(?id, ?did, ?ann)) { auto t = demand(fcx, pat.span, expected, ann_to_type(ann)); fcx.locals.insert(did, t); @@ -1093,6 +1097,9 @@ fn check_pat(&@fn_ctxt fcx, @ast.pat pat) -> @ast.pat { case (ast.pat_wild(_)) { new_pat = ast.pat_wild(ast.ann_type(next_ty_var(fcx.ccx))); } + case (ast.pat_lit(?lt, _)) { + new_pat = ast.pat_lit(lt, ast.ann_type(check_lit(lt))); + } case (ast.pat_bind(?id, ?def_id, _)) { auto ann = ast.ann_type(next_ty_var(fcx.ccx)); new_pat = ast.pat_bind(id, def_id, ann);