- ] >>| mapM_ g fds
-
-//Current issues:
-//All VarDecls are added as function, how to deal with assignments?
-// (And when we deal with assignments, how to deal with assignments to higher order functions?)
-//Dealing with arguments
-//Dealing with types that do not fit on the Stack
-// Probably completely change LoadPlace to a Type and a position relative to *something*
-// And where the type determines if this position is a pointer to the heap or an
-// unboxed value
+ ] >>| 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" [] ""
+ ]