comparison code/gqc.tp @ 70:5f44ac1bcbd6

Add support for a special notFirst? variable so that globals can be initialized on startup only. This allows for state that persists between turns
author Michael Pavone <pavone@retrodev.com>
date Sun, 27 Jul 2014 23:43:37 -0700
parents 8a0f1447c034
children a2a5d80abaa0
comparison
equal deleted inserted replaced
69:8a0f1447c034 70:5f44ac1bcbd6
86 } 86 }
87 } 87 }
88 error <- :msg { 88 error <- :msg {
89 (file stderr) write: "Error - " . msg . "\n" 89 (file stderr) write: "Error - " . msg . "\n"
90 } 90 }
91 _nextVar <- 0 91 //0 is used for the special notFirst? variable
92 _nextVar <- 1
92 //a and b are reserved for int/return values 93 //a and b are reserved for int/return values
93 //h is reserved as a stack pointer 94 //h is reserved as a stack pointer
94 _allTemp <- [ 95 _allTemp <- [
95 reg: 2 96 reg: 2
96 reg: 3 97 reg: 3
739 res <- parser top: code 740 res <- parser top: code
740 if: res { 741 if: res {
741 outer <- res yield 742 outer <- res yield
742 functions <- dict hash 743 functions <- dict hash
743 syms <- symbols table 744 syms <- symbols table
745
746 //define symbols for the special notFirst? variable
747 syms define: "notFirst?" (mem: 0)
748 //use it to skip global init on subsequent runthroughs
749 prog add: (inst: "JEQ" #[
750 "main"
751 (mem: 0)
752 1
753 ])
754 prog add: (inst: "MOV" #[
755 (mem: 0)
756 1
757 ])
758
744 //define symbols for all registers 759 //define symbols for all registers
745 //for low level shenanigans 760 //for low level shenanigans
746 i <- 0 761 i <- 0
747 while: { i < 9 } do: { 762 while: { i < 9 } do: {
748 r <- reg: i 763 r <- reg: i