- prog = tell [Instr "bra" [L "main"] ""] >>| mapM_ g fds
-//gen _ = prog
-// where
-// expr = (Op2Expr zero (Op1Expr zero UnMinus (IntExpr zero 4)) BiPlus (IntExpr zero 7))
-// expr2 = (FunExpr zero "test" [IntExpr zero 4] [])
-// stmt = (IfStmt (BoolExpr zero True) [] [])
-// prog = case evalRWST (g stmt) 0 ('Map'.newMap, labelStream) of
-// Left (Error e) = abort e
-// Right (_, prog) = toString prog
-//gen _ = toString [Lab "Test"
-// ,Instr "ldc" [Lit 1] "Eerste instructie"
-// ,Instr "ldc" [Lit 2] "Tweede instructie"]
-
-//TODO:
-//For now in the generation we assume all vars fit on the stack...
+ prog = tell [
+ Instr "bsr" [L "main"] "",
+ Instr "halt" [] ""
+ ] >>| tell programContext
+ >>| mapM_ g fds
+
+programContext :: SSMProgram
+programContext = [Lab "1printint"
+ ,Instr "link" [Lit 0] ""
+ ,Instr "ldl" [Lit -2] "load first argument"
+ ,Instr "trap" [Lit 0] "print int"
+ ,Instr "unlink" [] ""
+ ,Instr "ret" [] ""
+ ,Lab "1printchar"
+ ,Instr "link" [Lit 0] ""
+ ,Instr "ldl" [Lit -2] "load first argument"
+ ,Instr "trap" [Lit 1] "print char"
+ ,Instr "unlink" [] ""
+ ,Instr "ret" [] ""
+ ,Lab "1readint"
+ ,Instr "link" [Lit 0] ""
+ ,Instr "trap" [Lit 10] "read int"
+ ,Instr "str" [Raw "RR"] ""
+ ,Instr "unlink" [] ""
+ ,Instr "ret" [] ""
+ ,Lab "1readchar"
+ ,Instr "link" [Lit 0] ""
+ ,Instr "trap" [Lit 11] "read char"
+ ,Instr "str" [Raw "RR"] ""
+ ,Instr "unlink" [] ""
+ ,Instr "ret" [] ""
+ ,Lab "isempty"
+ ,Instr "link" [Lit 0] ""
+ ,Instr "ldl" [Lit -2] "load prt to list"
+ ,Instr "lda" [Lit 0] "derefrence ptr"
+ ,Instr "ldc" [Lit 0] ""
+ ,Instr "eq" [] "test for null pointer"
+ ,Instr "str" [Raw "RR"] ""
+ ,Instr "unlink" [] ""
+ ,Instr "ret" [] ""
+ ]