From c7ab80f743b3e2d34bb702be787507418cc794a8 Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Thu, 14 Oct 2010 15:02:35 -0700 Subject: [PATCH] Typecheck tags in "alt" patterns --- src/boot/me/type.ml | 2 ++ src/test/compile-fail/alt-tag-nullary.rs | 12 ++++++++++++ src/test/compile-fail/alt-tag-unary.rs | 12 ++++++++++++ 3 files changed, 26 insertions(+) create mode 100644 src/test/compile-fail/alt-tag-nullary.rs create mode 100644 src/test/compile-fail/alt-tag-unary.rs diff --git a/src/boot/me/type.ml b/src/boot/me/type.ml index 66dd240efa9..648618e70ba 100644 --- a/src/boot/me/type.ml +++ b/src/boot/me/type.ml @@ -903,8 +903,10 @@ let check_stmt (cx:Semant.ctxt) : (fn_ctx -> Ast.stmt -> unit) = let arg_tys = match constr_ty with Ast.TY_fn (ty_sig, _) -> + demand expected (get_slot_ty ty_sig.Ast.sig_output_slot); Array.map get_slot_ty ty_sig.Ast.sig_input_slots | Ast.TY_tag _ -> + demand expected constr_ty; [||] | _ -> type_error "constructor function" constr_ty in diff --git a/src/test/compile-fail/alt-tag-nullary.rs b/src/test/compile-fail/alt-tag-nullary.rs new file mode 100644 index 00000000000..f55f67e9e18 --- /dev/null +++ b/src/test/compile-fail/alt-tag-nullary.rs @@ -0,0 +1,12 @@ +// error-pattern: mismatched types + +tag a { A; } +tag b { B; } + +fn main() { + let a x = A; + alt (x) { + case (B) {} + } +} + diff --git a/src/test/compile-fail/alt-tag-unary.rs b/src/test/compile-fail/alt-tag-unary.rs new file mode 100644 index 00000000000..f2004896a2d --- /dev/null +++ b/src/test/compile-fail/alt-tag-unary.rs @@ -0,0 +1,12 @@ +// error-pattern: mismatched types + +tag a { A(int); } +tag b { B(int); } + +fn main() { + let a x = A(0); + alt (x) { + case (B(?y)) {} + } +} +