// Sys.vm for NestedCall test. // Sys.init() // // Calls Sys.main() and stores return value in temp 1. // Does not return. (Enters infinite loop.) function Sys.init 0 // L1 push constant 4000 // test THIS and THAT context save pop pointer 0 // L3 push constant 5000 pop pointer 1 // L5 call Sys.main 0 pop temp 1 // L7 label LOOP goto LOOP // L9 // Sys.main() // // Sets locals 1, 2 and 3, leaving locals 0 and 4 unchanged to test // default local initialization to 0. (RAM set to -1 by test setup.) // Calls Sys.add12(123) and stores return value (135) in temp 0. // Returns local 0 + local 1 + local 2 + local 3 + local 4 (456) to confirm // that locals were not mangled by function call. function Sys.main 5 // L10 push constant 4001 pop pointer 0 push constant 5001 // L13 pop pointer 1 push constant 200 // L15 pop local 1 push constant 40 // L17 pop local 2 push constant 6 // L19 pop local 3 push constant 123 call Sys.add12 1 // L22 pop temp 0 push local 0 // L24 push local 1 push local 2 push local 3 // L27 push local 4 add add // L30 add add // L32 return // L33 // Sys.add12(int n) // // Returns n+12. function Sys.add12 0 // L34 push constant 4002 pop pointer 0 push constant 5002 // L37 pop pointer 1 push argument 0 push constant 12 // L40 add return // L42