A bunch of prerequisites before we can do arrays, part 3, the pool pointer

This commit is contained in:
2023-11-13 00:32:57 -06:00
parent 0e766aebcf
commit 325288d7ba
6 changed files with 70 additions and 29 deletions
+15 -3
View File
@@ -76,6 +76,8 @@ mod test {
"call _forge_gensym_1",
"hlt",
"_forge_gensym_1:",
"dup",
"pushr",
"pushr",
"push 5",
"jmpr @_forge_gensym_2",
@@ -83,6 +85,8 @@ mod test {
"_forge_gensym_2:",
"popr",
"pop",
"popr",
"pop",
"ret",
"stack: .db 0",
].join("\n"));
@@ -96,6 +100,8 @@ mod test {
"hlt",
"_forge_gensym_1: .db \"blah\\0\"",
"_forge_gensym_2:",
"dup",
"pushr",
"pushr",
"push _forge_gensym_1", // Push the str
"jmpr @_forge_gensym_3", // Return
@@ -103,6 +109,8 @@ mod test {
"_forge_gensym_3:", // outro
"popr",
"pop",
"popr",
"pop",
"ret",
"stack: .db 0",
].join("\n"))
@@ -122,13 +130,15 @@ mod test {
"call _forge_gensym_3",
"hlt",
"_forge_gensym_1:", // fn foo()
"dup", "pushr", // capture pool ptr
"pushr", // capture frame ptr
"push 0", // implicit return
"_forge_gensym_2:",
"popr",
"pop",
"popr", "pop",
"popr", "pop",
"ret",
"_forge_gensym_3:", // fn main()
"dup", "pushr", // capture pool ptr
"pushr", // capture frame ptr
"peekr", // prep frame ptr to send to foo
"push _forge_gensym_1", // load foo
@@ -136,7 +146,9 @@ mod test {
"pop", // Throw away its return value
"push 0", // Implicit return value
"_forge_gensym_4:", // Outro start
"popr", // Restore frame ptr
"popr", // Drop frame ptr
"pop",
"popr", // Drop pool ptr
"pop",
"ret",
"stack: .db 0",