X-Git-Url: https://git.martlubbers.net/?a=blobdiff_plain;f=sem.icl;h=a041cee3215065f1210481973b65b49cf02dff12;hb=8259ed46f53f70bc732ce8756ddf2b6f000df6a4;hp=24fa7a951b05016999011d134eb4f26448f9363a;hpb=b76ab64a1088a8d2fcf1b107d726403269be6468;p=cc1516.git diff --git a/sem.icl b/sem.icl index 24fa7a9..a041cee 100644 --- a/sem.icl +++ b/sem.icl @@ -92,7 +92,10 @@ checkStmt t (IfStmt c st se) = unify BoolType c >>| mapM (checkStmt t) st >>= \st1-> mapM (checkStmt t) se >>= \se1-> pure (IfStmt c st1 se1) checkStmt t w=:(WhileStmt c et) = unify BoolType c >>| mapM (checkStmt t) et >>= \et1-> pure w -checkStmt t (AssStmt (VarDef ident fs) e) = undef +checkStmt t a=:(AssStmt (VarDef ident fs) e) = gets (\(st, r)->'Map'.get ident st) + >>= \mt->case mt of + Nothing = liftT $ Left $ UndeclaredVariableError zero ident + Just t = unify t fs >>= \t1 -> unify t1 e >>| pure a checkStmt t r=:(FunStmt (FunCall f es)) = typeFun f es >>| pure r checkStmt VoidType r=:(ReturnStmt Nothing) = pure r checkStmt t r=:(ReturnStmt (Just e)) = unify t e >>| pure r