diff --git a/src/Codegen/Codegen.hs b/src/Codegen/Codegen.hs index cfa75ab..cd42184 100644 --- a/src/Codegen/Codegen.hs +++ b/src/Codegen/Codegen.hs @@ -404,7 +404,7 @@ emitECased t e cases = do emit $ Store ty val Ptr stackPtr emit $ Br label emit $ Label lbl_failPos - emitCases _rt ty label stackPtr vs (Branch (MIR.PLit i, _) exp) = do + emitCases _rt ty label stackPtr vs (Branch (MIR.PLit i, t) exp) = do emit $ Comment "Plit" let i' = case i of (MIR.LInt i, _) -> VInteger i @@ -412,7 +412,7 @@ emitECased t e cases = do ns <- getNewVar lbl_failPos <- (\x -> TIR.Ident $ "failed_" <> show x) <$> getNewLabel lbl_succPos <- (\x -> TIR.Ident $ "success_" <> show x) <$> getNewLabel - emit $ SetVariable ns (Icmp LLEq ty vs i') + emit $ SetVariable ns (Icmp LLEq (type2LlvmType t) vs i') emit $ BrCond (VIdent ns ty) lbl_succPos lbl_failPos emit $ Label lbl_succPos val <- exprToValue exp @@ -432,6 +432,7 @@ emitECased t e cases = do lbl_failPos <- (\x -> TIR.Ident $ "failed_" <> show x) <$> getNewLabel emit $ Label lbl_failPos emitCases _rt ty label stackPtr _vs (Branch (MIR.PEnum _id, _) exp) = do + -- //TODO Penum wrong, acts as a catch all emit $ Comment "Penum" val <- exprToValue exp emit $ Store ty val Ptr stackPtr diff --git a/test_program.crf b/test_program.crf index cf754ca..6bf593a 100644 --- a/test_program.crf +++ b/test_program.crf @@ -4,7 +4,21 @@ data List () where { Nil : List () }; -main = sumlength (Cons 1 (Cons 2 (Cons 3 (Cons 4 (Cons 5 Nil))))); +main = head (repeat 10 5); + +head : List () -> Int ; +head x = case x of { + Cons h _ => h ; +}; + +repeat : Int -> Int -> List () ; +repeat x n = case n of { + 0 => Nil ; + n => Cons x (repeat x (n + minusOne)) ; +}; + +minusOne : Int ; +minusOne = 9223372036854775807 + 9223372036854775807 + 1; -- take the length of a list length : List () -> Int ; @@ -13,7 +27,7 @@ length x = case x of { Nil => 0 ; }; -- sum a list -sum : List () -> Int ; +sum : List () -> Int ; sum x = case x of { Cons a xs => a + sum xs ; Nil => 0 ;