- ] >>| 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 "print" //there is no actual IO in SSM
+ ,Instr "link" [Lit 0] ""
+ ,Instr "unlink" [] ""
+ ,Instr "ret" [] ""
+ ,Lab "read" //there is no actual IO in SSM
+ ,Instr "link" [Lit 0] ""
+ ,Instr "ldc" [Lit 0] ""
+ ,Instr "sth" [] ""
+ ,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" [] ""
+ ]