block1.golden 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265
  1. ********** source program **********
  2. fn main () -> Int {
  3. var Int: x = 0;
  4. {
  5. var Int: x = 1;
  6. }
  7. return x;
  8. }
  9. ********** type checking **********
  10. --- step exp Int --->
  11. --- step exp Int --->
  12. --- step exp Int --->
  13. --- step exp Int --->
  14. ********** type checking complete **********
  15. fn main () -> Int {
  16. var Int: x = 0;
  17. {
  18. var Int: x = 1;
  19. }
  20. return x;
  21. }
  22. ********** starting execution **********
  23. ********** initializing globals **********
  24. --- step exp () --->
  25. ********** calling main function **********
  26. {
  27. stack: top{main()<-1>}
  28. heap: fun<main>,
  29. env: main: fun<main>,
  30. }
  31. --- step exp main() --->
  32. {
  33. stack: top{main<-1> :: main()<0>}
  34. heap: fun<main>,
  35. env: main: fun<main>,
  36. }
  37. --- step exp main --->
  38. {
  39. stack: top{fun<main><-1> :: main()<0>}
  40. heap: fun<main>,
  41. env: main: fun<main>,
  42. }
  43. --- handle value fun<main> with main()<1>(fun<main>,) --->
  44. {
  45. stack: top{()<-1> :: main()<1>(fun<main>,)}
  46. heap: fun<main>,
  47. env: main: fun<main>,
  48. }
  49. --- step exp () --->
  50. {
  51. stack: top{()<-1> :: main()<1>(fun<main>,)}
  52. heap: fun<main>,
  53. env: main: fun<main>,
  54. }
  55. --- handle value () with main()<2>(fun<main>,(),) --->
  56. pattern_match((), ())
  57. {
  58. stack: main{var Int: x = 0; ... <-1>} :: top{}
  59. heap: fun<main>,
  60. env: main: fun<main>,
  61. }
  62. --- step stmt var Int: x = 0; ... --->
  63. {
  64. stack: main{var Int: x = 0;<-1> :: {
  65. ...
  66. }
  67. ... <-1>} :: top{}
  68. heap: fun<main>,
  69. env: main: fun<main>,
  70. }
  71. --- step stmt var Int: x = 0; --->
  72. {
  73. stack: main{0<-1> :: var Int: x = 0;<0> :: {
  74. ...
  75. }
  76. ... <-1>} :: top{}
  77. heap: fun<main>,
  78. env: main: fun<main>,
  79. }
  80. --- step exp 0 --->
  81. {
  82. stack: main{0<-1> :: var Int: x = 0;<0> :: {
  83. ...
  84. }
  85. ... <-1>} :: top{}
  86. heap: fun<main>,
  87. env: main: fun<main>,
  88. }
  89. --- handle value 0 with var Int: x = 0;<1>(0,) --->
  90. {
  91. stack: main{Int: x<-1> :: var Int: x = 0;<1>(0,) :: {
  92. ...
  93. }
  94. ... <-1>} :: top{}
  95. heap: fun<main>,
  96. env: main: fun<main>,
  97. }
  98. --- step exp Int: x --->
  99. {
  100. stack: main{Int<-1> :: Int: x<0> :: var Int: x = 0;<1>(0,) :: {
  101. ...
  102. }
  103. ... <-1>} :: top{}
  104. heap: fun<main>,
  105. env: main: fun<main>,
  106. }
  107. --- step exp Int --->
  108. {
  109. stack: main{Int<-1> :: Int: x<0> :: var Int: x = 0;<1>(0,) :: {
  110. ...
  111. }
  112. ... <-1>} :: top{}
  113. heap: fun<main>,
  114. env: main: fun<main>,
  115. }
  116. --- handle value Int with Int: x<1>(Int,) --->
  117. {
  118. stack: main{Int: x<-1> :: var Int: x = 0;<1>(0,) :: {
  119. ...
  120. }
  121. ... <-1>} :: top{}
  122. heap: fun<main>,
  123. env: main: fun<main>,
  124. }
  125. --- handle value Int: x with var Int: x = 0;<2>(0,Int: x,) --->
  126. pattern_match(Int: x, 0)
  127. {
  128. stack: main{{
  129. ...
  130. }
  131. ... <-1>} :: top{}
  132. heap: fun<main>, 0,
  133. env: x: 0, main: fun<main>,
  134. }
  135. --- step stmt {
  136. ...
  137. }
  138. ... --->
  139. {
  140. stack: main{{
  141. ...
  142. }
  143. <-1> :: return x;<-1>} :: top{}
  144. heap: fun<main>, 0,
  145. env: x: 0, main: fun<main>,
  146. }
  147. --- step stmt {
  148. ...
  149. }
  150. --->
  151. {
  152. stack: main{var Int: x = 1;<-1> :: {
  153. ...
  154. }
  155. <0> :: return x;<-1>} :: top{}
  156. heap: fun<main>, 0,
  157. env: x: 0, main: fun<main>,
  158. }
  159. --- step stmt var Int: x = 1; --->
  160. {
  161. stack: main{var Int: x = 1;<-1> :: {
  162. ...
  163. }
  164. <0> :: return x;<-1>} :: top{}
  165. heap: fun<main>, 0,
  166. env: x: 0, main: fun<main>,
  167. }
  168. --- step stmt var Int: x = 1; --->
  169. {
  170. stack: main{1<-1> :: var Int: x = 1;<0> :: {
  171. ...
  172. }
  173. <0> :: return x;<-1>} :: top{}
  174. heap: fun<main>, 0,
  175. env: x: 0, main: fun<main>,
  176. }
  177. --- step exp 1 --->
  178. {
  179. stack: main{1<-1> :: var Int: x = 1;<0> :: {
  180. ...
  181. }
  182. <0> :: return x;<-1>} :: top{}
  183. heap: fun<main>, 0,
  184. env: x: 0, main: fun<main>,
  185. }
  186. --- handle value 1 with var Int: x = 1;<1>(1,) --->
  187. {
  188. stack: main{Int: x<-1> :: var Int: x = 1;<1>(1,) :: {
  189. ...
  190. }
  191. <0> :: return x;<-1>} :: top{}
  192. heap: fun<main>, 0,
  193. env: x: 0, main: fun<main>,
  194. }
  195. --- step exp Int: x --->
  196. {
  197. stack: main{Int<-1> :: Int: x<0> :: var Int: x = 1;<1>(1,) :: {
  198. ...
  199. }
  200. <0> :: return x;<-1>} :: top{}
  201. heap: fun<main>, 0,
  202. env: x: 0, main: fun<main>,
  203. }
  204. --- step exp Int --->
  205. {
  206. stack: main{Int<-1> :: Int: x<0> :: var Int: x = 1;<1>(1,) :: {
  207. ...
  208. }
  209. <0> :: return x;<-1>} :: top{}
  210. heap: fun<main>, 0,
  211. env: x: 0, main: fun<main>,
  212. }
  213. --- handle value Int with Int: x<1>(Int,) --->
  214. {
  215. stack: main{Int: x<-1> :: var Int: x = 1;<1>(1,) :: {
  216. ...
  217. }
  218. <0> :: return x;<-1>} :: top{}
  219. heap: fun<main>, 0,
  220. env: x: 0, main: fun<main>,
  221. }
  222. --- handle value Int: x with var Int: x = 1;<2>(1,Int: x,) --->
  223. pattern_match(Int: x, 1)
  224. {
  225. stack: main{{
  226. ...
  227. }
  228. <0> :: return x;<-1>} :: top{}
  229. heap: fun<main>, 0, 1,
  230. env: x: 1, x: 0, main: fun<main>,
  231. }
  232. --- step stmt {
  233. ...
  234. }
  235. --->
  236. {
  237. stack: main{return x;<-1>} :: top{}
  238. heap: fun<main>, 0, !!1,
  239. env: x: 0, main: fun<main>,
  240. }
  241. --- step stmt return x; --->
  242. {
  243. stack: main{x<-1> :: return x;<0>} :: top{}
  244. heap: fun<main>, 0, !!1,
  245. env: x: 0, main: fun<main>,
  246. }
  247. --- step exp x --->
  248. {
  249. stack: main{0<-1> :: return x;<0>} :: top{}
  250. heap: fun<main>, 0, !!1,
  251. env: x: 0, main: fun<main>,
  252. }
  253. --- handle value 0 with return x;<1>(0,) --->
  254. {
  255. stack: top{0<-1>}
  256. heap: fun<main>, !!0, !!1,
  257. env: main: fun<main>,
  258. }
  259. result: 0