wip: stackify
build / build (push) Successful in 1m30s

This commit is contained in:
2026-08-18 02:27:02 -06:00
parent c4bcf38374
commit d91e059a84
7 changed files with 185 additions and 71 deletions
+15 -13
View File
@@ -27,40 +27,42 @@ lit_int = testCase "lit int" do
evalsTo [ObjImm (ImmInt 3)]
[ MkBlock "main" []
[ PopCont "ktail"
, CallReg "ktail" [ValImm (ImmInt 3)]
, Call (ValReg "ktail") [ValImm (ImmInt 3)]
]
]
vlb = ValImm . ImmLabel
procedure = testGroup "procedure"
[ testCase "return constant" do
evalsTo [ObjImm (ImmInt 123)]
[ MkBlock "main" []
[ CallLabel "silly" []
[ Call (ValLabel "silly") []
]
, MkBlock "silly" []
[ PopCont "ktail"
, CallReg "ktail" [ValImm (ImmInt 123)]
, Call (ValReg "ktail") [ValImm (ImmInt 123)]
]
]
, testCase "identity function" do
evalsTo [ObjImm (ImmInt 45)]
[ MkBlock "main" []
[ CallLabel "id" [ValImm (ImmInt 45)]
[ Call (ValLabel "id") [ValImm (ImmInt 45)]
]
, MkBlock "id" ["x"]
[ PopCont "ktail"
, CallReg "ktail" [ValReg "x"]
, Call (ValReg "ktail") [ValReg "x"]
]
]
, testCase "square" do
evalsTo [ObjImm (ImmInt 16)]
[ MkBlock "main" []
[ CallLabel "square" [ValImm (ImmInt 4)]
[ Call (ValLabel "square") [ValImm (ImmInt 4)]
]
, MkBlock "square" ["x"]
[ PopCont "ktail"
, Prim "x2" $ PrimMul (ValReg "x") (ValReg "x")
, CallReg "ktail" [ValReg "x2"]
, Call (ValReg "ktail") [ValReg "x2"]
]
]
, testCase "factorial" do
@@ -69,29 +71,29 @@ procedure = testGroup "procedure"
[ Prim "x0" $ PrimZeroP (ValReg "n")
, If (ValReg "x0")
[ PopCont "ktail"
, CallReg "ktail" [ValImm (ImmInt 1)]
, Call (ValReg "ktail") [ValImm (ImmInt 1)]
]
[ Push (ValReg "n")
, Prim "x1" $ PrimSub (ValReg "n") (ValImm (ImmInt 1))
, PushCont "fac-k0"
, CallLabel "fac" [ValReg "x1"]
, Call (ValLabel "fac") [ValReg "x1"]
]
]
, MkBlock "fac-k0" ["x2"]
[ Pop "n"
, Prim "x3" $ PrimMul (ValReg "x2") (ValReg "n")
, PopCont "ktail"
, CallReg "ktail" [ValReg "x3"]
, Call (ValReg "ktail") [ValReg "x3"]
]
]
evalsTo [ObjImm (ImmInt 1)] $
[ MkBlock "main" []
[ CallLabel "fac" [ValImm (ImmInt 0)]
[ Call (ValLabel "fac") [ValImm (ImmInt 0)]
]
] ++ fac
evalsTo [ObjImm (ImmInt 720)] $
[ MkBlock "main" []
[ CallLabel "fac" [ValImm (ImmInt 6)]
[ Call (ValLabel "fac") [ValImm (ImmInt 6)]
]
] ++ fac
]
@@ -110,7 +112,7 @@ trivialPrimTest rs p =
[ MkBlock "main" []
[ PopCont "ktail"
, Prim "x1" p
, CallReg "ktail" [ValReg "x1"]
, Call (ValReg "ktail") [ValReg "x1"]
]
]