X-Git-Url: https://ruin.nu/git/index.pl?a=blobdiff_plain;f=Typecheck.hs;h=ec40b1f0bc7dc8e249e6e95b738ac3a85bbb2077;hb=0a07bb2f351aa3315fde0768db723650f23c31b6;hp=6e845ba2cb56b9625570676c65e6354da53eb4ba;hpb=597c13d7ed33501aa73e49ae42653e169cea33f4;p=proglang.git 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