Mercurial > repos > icfp2014
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 |