Functions without explicit return statements

This commit is contained in:
2023-11-11 18:36:49 -06:00
parent 45fe27b823
commit db2fbd7bda
10 changed files with 64 additions and 22 deletions
+33
View File
@@ -79,6 +79,7 @@ mod test {
"popr",
"pop",
"ret",
"popr", "pop", "ret 0", // Implicit void return
"stack: .db 0",
].join("\n"));
@@ -96,6 +97,38 @@ mod test {
"popr",
"pop",
"ret",
"popr", "pop", "ret 0", // Implicit void return
"stack: .db 0",
].join("\n"))
}
#[test]
fn test_global_vars() {
}
#[test]
fn test_no_return() {
let asm = build_boot("fn foo() { } fn main() { foo(); }".into()).unwrap();
assert_eq!(asm.join("\n"), vec![
".org 0x400",
"push stack",
"call _forge_gensym_2",
"hlt",
"_forge_gensym_1:", // fn foo()
"pushr", // capture frame ptr
"popr", // drop it and ret
"pop",
"ret 0",
"_forge_gensym_2:", // fn main()
"pushr", // capture frame ptr
"peekr", // prep frame ptr to send to foo
"push _forge_gensym_1", // load foo
"call", // call it
"pop", // Throw away its return value
"popr", // drop frame ptr and ret
"pop",
"ret 0",
"stack: .db 0",
].join("\n"))
}