tuple_assign.golden 9.4 KB

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