record1.golden 11 KB

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