From: Michael Andreen Date: Mon, 27 Feb 2006 13:47:05 +0000 (+0000) Subject: typechecker finds redeclaration of a variable X-Git-Url: https://ruin.nu/git/?p=proglang.git;a=commitdiff_plain;h=0a07bb2f351aa3315fde0768db723650f23c31b6;hp=597c13d7ed33501aa73e49ae42653e169cea33f4 typechecker finds redeclaration of a variable --- diff --git a/Typecheck.hs b/Typecheck.hs index 6e845ba..ec40b1f 100644 --- a/Typecheck.hs +++ b/Typecheck.hs @@ -70,7 +70,9 @@ typeCheckStm (SDecl t i e) = do t2 <- typeCheckExp e if t == t2 || t2 == NoType then do m <- get - put (insert i t m) + case insertLookupWithKey (\k a1 a2 -> a1) i t m of + (Nothing,m') -> put m' + _ -> fail $ "Duplicate variable declaration: "++show i return NoType else fail $ "Illegal to assign an expression of type "++show t2++" to variable "++show i++" of type "++show t typeCheckStm (SPrint e) = do diff --git a/examples/typeerror-redecl b/examples/typeerror-redecl new file mode 100644 index 0000000..c96734e --- /dev/null +++ b/examples/typeerror-redecl @@ -0,0 +1,2 @@ +int a = 0; +int a = 5;