From 8bed7f09a52bf0215150d0ce8604098ebec2d31b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Madeleine=20Sydney=20=C5=9Alaga?= Date: Mon, 6 Jul 2026 05:01:45 -0600 Subject: [PATCH] lamlol --- app/Gyehoek/CPS/Convert.hs | 2 +- app/Gyehoek/CPS/Lower.hs | 4 ++-- app/Gyehoek/CPS/Syntax.hs | 7 +++++-- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/app/Gyehoek/CPS/Convert.hs b/app/Gyehoek/CPS/Convert.hs index c605742..c8a32e3 100644 --- a/app/Gyehoek/CPS/Convert.hs +++ b/app/Gyehoek/CPS/Convert.hs @@ -28,7 +28,7 @@ convert (Scm.ExpLit l) k = k $ ValLit l convert (Scm.ExpPrim p) k = telescope (convert @es) p \p' -> do r <- gensym' "r" - ExpPrim p' [r] . pure <$> k (ValVar r) + ExpPrim p' [r] <$> k (ValVar r) convert (Scm.ExpLambda xs e) k = do f <- gensym' "f" diff --git a/app/Gyehoek/CPS/Lower.hs b/app/Gyehoek/CPS/Lower.hs index cddcda1..3075706 100644 --- a/app/Gyehoek/CPS/Lower.hs +++ b/app/Gyehoek/CPS/Lower.hs @@ -72,6 +72,7 @@ data Module = MkModule data Func = MkFunc { code :: Text + , numLocals :: Int } deriving (Show, Generic) @@ -92,13 +93,12 @@ lower' :: Env -> Exp -> Vector Text lower' g (Halt [e]) = lowerVal g e -lower' g (ExpPrim p rs es) = +lower' g (ExpPrim p rs e) = case p of PrimAdd x y -> lowerBinOp "i32.add" g x y r e PrimMul x y -> lowerBinOp "i32.mul" g x y r e where r = head rs - e = head es lowerBinOp op g x y r e = lowerVal g x diff --git a/app/Gyehoek/CPS/Syntax.hs b/app/Gyehoek/CPS/Syntax.hs index 28704bd..5f52c41 100644 --- a/app/Gyehoek/CPS/Syntax.hs +++ b/app/Gyehoek/CPS/Syntax.hs @@ -41,9 +41,10 @@ data Kappa = MkKappa (List Name) Exp deriving (Show, Generic) data Exp - = ExpPrim (Prim Val) (List Name) (List Exp) + = ExpPrim (Prim Val) (List Name) Exp | ExpFix (NonEmpty (Name, Kappa)) Exp | ExpApply Val (List Val) + | ExpIf Val Exp Exp deriving (Show, Generic) pattern Halt :: List Val -> Exp @@ -83,12 +84,14 @@ instance S.SexpIso Exp where $ With (. prim) $ With (. let_) $ With (. app) + $ With (. if_) $ End where let_ = Gyehoek.Sexp.let_ "fix" S.sexpIso S.sexpIso S.sexpIso + if_ = S.list $ S.el S.sexpIso >>> S.el S.sexpIso >>> S.el S.sexpIso app = S.list $ S.el S.sexpIso >>> S.rest S.sexpIso prim = S.list $ S.el (S.sym "prim") >>> S.el (primSexpIso id (S.sexpIso @Val)) >>> S.el S.sexpIso - >>> S.rest S.sexpIso + >>> S.el S.sexpIso