tuple1.golden 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389
  1. ********** source program **********
  2. fn main () -> Int {
  3. var Int: x = 1;
  4. var (0 = Int, 1 = Int): t2 = (0 = 5, 1 = 2);
  5. t2[0] = 3;
  6. return ((t2[0] - t2[1]) - x);
  7. }
  8. ********** type checking **********
  9. --- step exp Int --->
  10. --- step exp Int --->
  11. --- step exp Int --->
  12. --- step exp (0 = Int, 1 = Int) --->
  13. --- step exp Int --->
  14. --- handle value Int with (0 = Int, 1 = Int)<1>(Int,) --->
  15. --- step exp Int --->
  16. --- handle value Int with (0 = Int, 1 = Int)<2>(Int,Int,) --->
  17. --- step exp 0 --->
  18. --- step exp 0 --->
  19. --- step exp 1 --->
  20. ********** type checking complete **********
  21. fn main () -> Int {
  22. var Int: x = 1;
  23. var (0 = Int, 1 = Int): t2 = (0 = 5, 1 = 2);
  24. t2[0] = 3;
  25. return ((t2[0] - t2[1]) - x);
  26. }
  27. ********** starting execution **********
  28. ********** initializing globals **********
  29. --- step exp () --->
  30. ********** calling main function **********
  31. {
  32. stack: top{main()<-1>}
  33. heap: fun<main>,
  34. env: main: fun<main>,
  35. }
  36. --- step exp main() --->
  37. {
  38. stack: top{main<-1> :: main()<0>}
  39. heap: fun<main>,
  40. env: main: fun<main>,
  41. }
  42. --- step exp main --->
  43. {
  44. stack: top{fun<main><-1> :: main()<0>}
  45. heap: fun<main>,
  46. env: main: fun<main>,
  47. }
  48. --- handle value fun<main> with main()<1>(fun<main>,) --->
  49. {
  50. stack: top{()<-1> :: main()<1>(fun<main>,)}
  51. heap: fun<main>,
  52. env: main: fun<main>,
  53. }
  54. --- step exp () --->
  55. {
  56. stack: top{()<-1> :: main()<1>(fun<main>,)}
  57. heap: fun<main>,
  58. env: main: fun<main>,
  59. }
  60. --- handle value () with main()<2>(fun<main>,(),) --->
  61. pattern_match((), ())
  62. {
  63. stack: main{var Int: x = 1; ... <-1>} :: top{}
  64. heap: fun<main>,
  65. env: main: fun<main>,
  66. }
  67. --- step stmt var Int: x = 1; ... --->
  68. {
  69. stack: main{var Int: x = 1;<-1> :: var (0 = Int, 1 = Int): t2 = (0 = 5, 1 = 2); ... <-1>} :: top{}
  70. heap: fun<main>,
  71. env: main: fun<main>,
  72. }
  73. --- step stmt var Int: x = 1; --->
  74. {
  75. stack: main{1<-1> :: var Int: x = 1;<0> :: var (0 = Int, 1 = Int): t2 = (0 = 5, 1 = 2); ... <-1>} :: top{}
  76. heap: fun<main>,
  77. env: main: fun<main>,
  78. }
  79. --- step exp 1 --->
  80. {
  81. stack: main{1<-1> :: var Int: x = 1;<0> :: var (0 = Int, 1 = Int): t2 = (0 = 5, 1 = 2); ... <-1>} :: top{}
  82. heap: fun<main>,
  83. env: main: fun<main>,
  84. }
  85. --- handle value 1 with var Int: x = 1;<1>(1,) --->
  86. {
  87. stack: main{Int: x<-1> :: var Int: x = 1;<1>(1,) :: var (0 = Int, 1 = Int): t2 = (0 = 5, 1 = 2); ... <-1>} :: top{}
  88. heap: fun<main>,
  89. env: main: fun<main>,
  90. }
  91. --- step exp Int: x --->
  92. {
  93. stack: main{Int<-1> :: Int: x<0> :: var Int: x = 1;<1>(1,) :: var (0 = Int, 1 = Int): t2 = (0 = 5, 1 = 2); ... <-1>} :: top{}
  94. heap: fun<main>,
  95. env: main: fun<main>,
  96. }
  97. --- step exp Int --->
  98. {
  99. stack: main{Int<-1> :: Int: x<0> :: var Int: x = 1;<1>(1,) :: var (0 = Int, 1 = Int): t2 = (0 = 5, 1 = 2); ... <-1>} :: top{}
  100. heap: fun<main>,
  101. env: main: fun<main>,
  102. }
  103. --- handle value Int with Int: x<1>(Int,) --->
  104. {
  105. stack: main{Int: x<-1> :: var Int: x = 1;<1>(1,) :: var (0 = Int, 1 = Int): t2 = (0 = 5, 1 = 2); ... <-1>} :: top{}
  106. heap: fun<main>,
  107. env: main: fun<main>,
  108. }
  109. --- handle value Int: x with var Int: x = 1;<2>(1,Int: x,) --->
  110. pattern_match(Int: x, 1)
  111. {
  112. stack: main{var (0 = Int, 1 = Int): t2 = (0 = 5, 1 = 2); ... <-1>} :: top{}
  113. heap: fun<main>, 1,
  114. env: x: 1, main: fun<main>,
  115. }
  116. --- step stmt var (0 = Int, 1 = Int): t2 = (0 = 5, 1 = 2); ... --->
  117. {
  118. stack: main{var (0 = Int, 1 = Int): t2 = (0 = 5, 1 = 2);<-1> :: t2[0] = 3; ... <-1>} :: top{}
  119. heap: fun<main>, 1,
  120. env: x: 1, main: fun<main>,
  121. }
  122. --- step stmt var (0 = Int, 1 = Int): t2 = (0 = 5, 1 = 2); --->
  123. {
  124. stack: main{(0 = 5, 1 = 2)<-1> :: var (0 = Int, 1 = Int): t2 = (0 = 5, 1 = 2);<0> :: t2[0] = 3; ... <-1>} :: top{}
  125. heap: fun<main>, 1,
  126. env: x: 1, main: fun<main>,
  127. }
  128. --- step exp (0 = 5, 1 = 2) --->
  129. {
  130. stack: main{5<-1> :: (0 = 5, 1 = 2)<0> :: var (0 = Int, 1 = Int): t2 = (0 = 5, 1 = 2);<0> :: t2[0] = 3; ... <-1>} :: top{}
  131. heap: fun<main>, 1,
  132. env: x: 1, main: fun<main>,
  133. }
  134. --- step exp 5 --->
  135. {
  136. stack: main{5<-1> :: (0 = 5, 1 = 2)<0> :: var (0 = Int, 1 = Int): t2 = (0 = 5, 1 = 2);<0> :: t2[0] = 3; ... <-1>} :: top{}
  137. heap: fun<main>, 1,
  138. env: x: 1, main: fun<main>,
  139. }
  140. --- handle value 5 with (0 = 5, 1 = 2)<1>(5,) --->
  141. {
  142. stack: main{2<-1> :: (0 = 5, 1 = 2)<1>(5,) :: var (0 = Int, 1 = Int): t2 = (0 = 5, 1 = 2);<0> :: t2[0] = 3; ... <-1>} :: top{}
  143. heap: fun<main>, 1,
  144. env: x: 1, main: fun<main>,
  145. }
  146. --- step exp 2 --->
  147. {
  148. stack: main{2<-1> :: (0 = 5, 1 = 2)<1>(5,) :: var (0 = Int, 1 = Int): t2 = (0 = 5, 1 = 2);<0> :: t2[0] = 3; ... <-1>} :: top{}
  149. heap: fun<main>, 1,
  150. env: x: 1, main: fun<main>,
  151. }
  152. --- handle value 2 with (0 = 5, 1 = 2)<2>(5,2,) --->
  153. {
  154. stack: main{(0 = 5@2, 1 = 2@3)<-1> :: var (0 = Int, 1 = Int): t2 = (0 = 5, 1 = 2);<0> :: t2[0] = 3; ... <-1>} :: top{}
  155. heap: fun<main>, 1, 5, 2,
  156. env: x: 1, main: fun<main>,
  157. }
  158. --- handle value (0 = 5@2, 1 = 2@3) with var (0 = Int, 1 = Int): t2 = (0 = 5, 1 = 2);<1>((0 = 5@2, 1 = 2@3),) --->
  159. {
  160. stack: main{(0 = Int, 1 = Int): t2<-1> :: var (0 = Int, 1 = Int): t2 = (0 = 5, 1 = 2);<1>((0 = 5@2, 1 = 2@3),) :: t2[0] = 3; ... <-1>} :: top{}
  161. heap: fun<main>, 1, 5, 2,
  162. env: x: 1, main: fun<main>,
  163. }
  164. --- step exp (0 = Int, 1 = Int): t2 --->
  165. {
  166. stack: main{(0 = Int, 1 = Int)<-1> :: (0 = Int, 1 = Int): t2<0> :: var (0 = Int, 1 = Int): t2 = (0 = 5, 1 = 2);<1>((0 = 5@2, 1 = 2@3),) :: t2[0] = 3; ... <-1>} :: top{}
  167. heap: fun<main>, 1, 5, 2,
  168. env: x: 1, main: fun<main>,
  169. }
  170. --- step exp (0 = Int, 1 = Int) --->
  171. {
  172. stack: main{Int<-1> :: (0 = Int, 1 = Int)<0> :: (0 = Int, 1 = Int): t2<0> :: var (0 = Int, 1 = Int): t2 = (0 = 5, 1 = 2);<1>((0 = 5@2, 1 = 2@3),) :: t2[0] = 3; ... <-1>} :: top{}
  173. heap: fun<main>, 1, 5, 2,
  174. env: x: 1, main: fun<main>,
  175. }
  176. --- step exp Int --->
  177. {
  178. stack: main{Int<-1> :: (0 = Int, 1 = Int)<0> :: (0 = Int, 1 = Int): t2<0> :: var (0 = Int, 1 = Int): t2 = (0 = 5, 1 = 2);<1>((0 = 5@2, 1 = 2@3),) :: t2[0] = 3; ... <-1>} :: top{}
  179. heap: fun<main>, 1, 5, 2,
  180. env: x: 1, main: fun<main>,
  181. }
  182. --- handle value Int with (0 = Int, 1 = Int)<1>(Int,) --->
  183. {
  184. stack: main{Int<-1> :: (0 = Int, 1 = Int)<1>(Int,) :: (0 = Int, 1 = Int): t2<0> :: var (0 = Int, 1 = Int): t2 = (0 = 5, 1 = 2);<1>((0 = 5@2, 1 = 2@3),) :: t2[0] = 3; ... <-1>} :: top{}
  185. heap: fun<main>, 1, 5, 2,
  186. env: x: 1, main: fun<main>,
  187. }
  188. --- step exp Int --->
  189. {
  190. stack: main{Int<-1> :: (0 = Int, 1 = Int)<1>(Int,) :: (0 = Int, 1 = Int): t2<0> :: var (0 = Int, 1 = Int): t2 = (0 = 5, 1 = 2);<1>((0 = 5@2, 1 = 2@3),) :: t2[0] = 3; ... <-1>} :: top{}
  191. heap: fun<main>, 1, 5, 2,
  192. env: x: 1, main: fun<main>,
  193. }
  194. --- handle value Int with (0 = Int, 1 = Int)<2>(Int,Int,) --->
  195. {
  196. stack: main{(0 = Int@4, 1 = Int@5)<-1> :: (0 = Int, 1 = Int): t2<0> :: var (0 = Int, 1 = Int): t2 = (0 = 5, 1 = 2);<1>((0 = 5@2, 1 = 2@3),) :: t2[0] = 3; ... <-1>} :: top{}
  197. heap: fun<main>, 1, 5, 2, Int, Int,
  198. env: x: 1, main: fun<main>,
  199. }
  200. --- handle value (0 = Int@4, 1 = Int@5) with (0 = Int, 1 = Int): t2<1>((0 = Int@4, 1 = Int@5),) --->
  201. {
  202. stack: main{(0 = Int@4, 1 = Int@5): t2<-1> :: var (0 = Int, 1 = Int): t2 = (0 = 5, 1 = 2);<1>((0 = 5@2, 1 = 2@3),) :: t2[0] = 3; ... <-1>} :: top{}
  203. heap: fun<main>, 1, 5, 2, Int, Int,
  204. env: x: 1, main: fun<main>,
  205. }
  206. --- handle value (0 = Int@4, 1 = Int@5): t2 with var (0 = Int, 1 = Int): t2 = (0 = 5, 1 = 2);<2>((0 = 5@2, 1 = 2@3),(0 = Int@4, 1 = Int@5): t2,) --->
  207. pattern_match((0 = Int@4, 1 = Int@5): t2, (0 = 5@2, 1 = 2@3))
  208. {
  209. stack: main{t2[0] = 3; ... <-1>} :: top{}
  210. heap: fun<main>, 1, 5, 2, Int, Int, 5, 2, (0 = 5@6, 1 = 2@7),
  211. env: t2: (0 = 5@6, 1 = 2@7), x: 1, main: fun<main>,
  212. }
  213. --- step stmt t2[0] = 3; ... --->
  214. {
  215. stack: main{t2[0] = 3;<-1> :: return ((t2[0] - t2[1]) - x);<-1>} :: top{}
  216. heap: fun<main>, 1, 5, 2, Int, Int, 5, 2, (0 = 5@6, 1 = 2@7),
  217. env: t2: (0 = 5@6, 1 = 2@7), x: 1, main: fun<main>,
  218. }
  219. --- step stmt t2[0] = 3; --->
  220. {
  221. stack: main{t2[0]<-1> :: t2[0] = 3;<0> :: return ((t2[0] - t2[1]) - x);<-1>} :: top{}
  222. heap: fun<main>, 1, 5, 2, Int, Int, 5, 2, (0 = 5@6, 1 = 2@7),
  223. env: t2: (0 = 5@6, 1 = 2@7), x: 1, main: fun<main>,
  224. }
  225. --- step lvalue t2[0] --->
  226. {
  227. stack: main{t2<-1> :: t2[0]<0> :: t2[0] = 3;<0> :: return ((t2[0] - t2[1]) - x);<-1>} :: top{}
  228. heap: fun<main>, 1, 5, 2, Int, Int, 5, 2, (0 = 5@6, 1 = 2@7),
  229. env: t2: (0 = 5@6, 1 = 2@7), x: 1, main: fun<main>,
  230. }
  231. --- step exp t2 --->
  232. {
  233. stack: main{(0 = 5@6, 1 = 2@7)<-1> :: t2[0]<0> :: t2[0] = 3;<0> :: return ((t2[0] - t2[1]) - x);<-1>} :: top{}
  234. heap: fun<main>, 1, 5, 2, Int, Int, 5, 2, (0 = 5@6, 1 = 2@7),
  235. env: t2: (0 = 5@6, 1 = 2@7), x: 1, main: fun<main>,
  236. }
  237. --- handle value (0 = 5@6, 1 = 2@7) with t2[0]<1>((0 = 5@6, 1 = 2@7),) --->
  238. {
  239. stack: main{0<-1> :: t2[0]<1>((0 = 5@6, 1 = 2@7),) :: t2[0] = 3;<0> :: return ((t2[0] - t2[1]) - x);<-1>} :: top{}
  240. heap: fun<main>, 1, 5, 2, Int, Int, 5, 2, (0 = 5@6, 1 = 2@7),
  241. env: t2: (0 = 5@6, 1 = 2@7), x: 1, main: fun<main>,
  242. }
  243. --- step exp 0 --->
  244. {
  245. stack: main{0<-1> :: t2[0]<1>((0 = 5@6, 1 = 2@7),) :: t2[0] = 3;<0> :: return ((t2[0] - t2[1]) - x);<-1>} :: top{}
  246. heap: fun<main>, 1, 5, 2, Int, Int, 5, 2, (0 = 5@6, 1 = 2@7),
  247. env: t2: (0 = 5@6, 1 = 2@7), x: 1, main: fun<main>,
  248. }
  249. --- handle value 0 with t2[0]<2>((0 = 5@6, 1 = 2@7),0,) --->
  250. {
  251. stack: main{ptr<6><-1> :: t2[0] = 3;<0> :: return ((t2[0] - t2[1]) - x);<-1>} :: top{}
  252. heap: fun<main>, 1, 5, 2, Int, Int, 5, 2, (0 = 5@6, 1 = 2@7),
  253. env: t2: (0 = 5@6, 1 = 2@7), x: 1, main: fun<main>,
  254. }
  255. --- handle value ptr<6> with t2[0] = 3;<1>(ptr<6>,) --->
  256. {
  257. stack: main{3<-1> :: t2[0] = 3;<1>(ptr<6>,) :: return ((t2[0] - t2[1]) - x);<-1>} :: top{}
  258. heap: fun<main>, 1, 5, 2, Int, Int, 5, 2, (0 = 5@6, 1 = 2@7),
  259. env: t2: (0 = 5@6, 1 = 2@7), x: 1, main: fun<main>,
  260. }
  261. --- step exp 3 --->
  262. {
  263. stack: main{3<-1> :: t2[0] = 3;<1>(ptr<6>,) :: return ((t2[0] - t2[1]) - x);<-1>} :: top{}
  264. heap: fun<main>, 1, 5, 2, Int, Int, 5, 2, (0 = 5@6, 1 = 2@7),
  265. env: t2: (0 = 5@6, 1 = 2@7), x: 1, main: fun<main>,
  266. }
  267. --- handle value 3 with t2[0] = 3;<2>(ptr<6>,3,) --->
  268. {
  269. stack: main{return ((t2[0] - t2[1]) - x);<-1>} :: top{}
  270. heap: fun<main>, 1, 5, 2, Int, Int, 3, 2, (0 = 3@6, 1 = 2@7),
  271. env: t2: (0 = 3@6, 1 = 2@7), x: 1, main: fun<main>,
  272. }
  273. --- step stmt return ((t2[0] - t2[1]) - x); --->
  274. {
  275. stack: main{((t2[0] - t2[1]) - x)<-1> :: return ((t2[0] - t2[1]) - x);<0>} :: top{}
  276. heap: fun<main>, 1, 5, 2, Int, Int, 3, 2, (0 = 3@6, 1 = 2@7),
  277. env: t2: (0 = 3@6, 1 = 2@7), x: 1, main: fun<main>,
  278. }
  279. --- step exp ((t2[0] - t2[1]) - x) --->
  280. {
  281. stack: main{(t2[0] - t2[1])<-1> :: ((t2[0] - t2[1]) - x)<0> :: return ((t2[0] - t2[1]) - x);<0>} :: top{}
  282. heap: fun<main>, 1, 5, 2, Int, Int, 3, 2, (0 = 3@6, 1 = 2@7),
  283. env: t2: (0 = 3@6, 1 = 2@7), x: 1, main: fun<main>,
  284. }
  285. --- step exp (t2[0] - t2[1]) --->
  286. {
  287. stack: main{t2[0]<-1> :: (t2[0] - t2[1])<0> :: ((t2[0] - t2[1]) - x)<0> :: return ((t2[0] - t2[1]) - x);<0>} :: top{}
  288. heap: fun<main>, 1, 5, 2, Int, Int, 3, 2, (0 = 3@6, 1 = 2@7),
  289. env: t2: (0 = 3@6, 1 = 2@7), x: 1, main: fun<main>,
  290. }
  291. --- step exp t2[0] --->
  292. {
  293. stack: main{t2<-1> :: t2[0]<0> :: (t2[0] - t2[1])<0> :: ((t2[0] - t2[1]) - x)<0> :: return ((t2[0] - t2[1]) - x);<0>} :: top{}
  294. heap: fun<main>, 1, 5, 2, Int, Int, 3, 2, (0 = 3@6, 1 = 2@7),
  295. env: t2: (0 = 3@6, 1 = 2@7), x: 1, main: fun<main>,
  296. }
  297. --- step exp t2 --->
  298. {
  299. stack: main{(0 = 3@6, 1 = 2@7)<-1> :: t2[0]<0> :: (t2[0] - t2[1])<0> :: ((t2[0] - t2[1]) - x)<0> :: return ((t2[0] - t2[1]) - x);<0>} :: top{}
  300. heap: fun<main>, 1, 5, 2, Int, Int, 3, 2, (0 = 3@6, 1 = 2@7),
  301. env: t2: (0 = 3@6, 1 = 2@7), x: 1, main: fun<main>,
  302. }
  303. --- handle value (0 = 3@6, 1 = 2@7) with t2[0]<1>((0 = 3@6, 1 = 2@7),) --->
  304. {
  305. stack: main{0<-1> :: t2[0]<1>((0 = 3@6, 1 = 2@7),) :: (t2[0] - t2[1])<0> :: ((t2[0] - t2[1]) - x)<0> :: return ((t2[0] - t2[1]) - x);<0>} :: top{}
  306. heap: fun<main>, 1, 5, 2, Int, Int, 3, 2, (0 = 3@6, 1 = 2@7),
  307. env: t2: (0 = 3@6, 1 = 2@7), x: 1, main: fun<main>,
  308. }
  309. --- step exp 0 --->
  310. {
  311. stack: main{0<-1> :: t2[0]<1>((0 = 3@6, 1 = 2@7),) :: (t2[0] - t2[1])<0> :: ((t2[0] - t2[1]) - x)<0> :: return ((t2[0] - t2[1]) - x);<0>} :: top{}
  312. heap: fun<main>, 1, 5, 2, Int, Int, 3, 2, (0 = 3@6, 1 = 2@7),
  313. env: t2: (0 = 3@6, 1 = 2@7), x: 1, main: fun<main>,
  314. }
  315. --- handle value 0 with t2[0]<2>((0 = 3@6, 1 = 2@7),0,) --->
  316. {
  317. stack: main{3<-1> :: (t2[0] - t2[1])<0> :: ((t2[0] - t2[1]) - x)<0> :: return ((t2[0] - t2[1]) - x);<0>} :: top{}
  318. heap: fun<main>, 1, 5, 2, Int, Int, 3, 2, (0 = 3@6, 1 = 2@7),
  319. env: t2: (0 = 3@6, 1 = 2@7), x: 1, main: fun<main>,
  320. }
  321. --- handle value 3 with (t2[0] - t2[1])<1>(3,) --->
  322. {
  323. stack: main{t2[1]<-1> :: (t2[0] - t2[1])<1>(3,) :: ((t2[0] - t2[1]) - x)<0> :: return ((t2[0] - t2[1]) - x);<0>} :: top{}
  324. heap: fun<main>, 1, 5, 2, Int, Int, 3, 2, (0 = 3@6, 1 = 2@7),
  325. env: t2: (0 = 3@6, 1 = 2@7), x: 1, main: fun<main>,
  326. }
  327. --- step exp t2[1] --->
  328. {
  329. stack: main{t2<-1> :: t2[1]<0> :: (t2[0] - t2[1])<1>(3,) :: ((t2[0] - t2[1]) - x)<0> :: return ((t2[0] - t2[1]) - x);<0>} :: top{}
  330. heap: fun<main>, 1, 5, 2, Int, Int, 3, 2, (0 = 3@6, 1 = 2@7),
  331. env: t2: (0 = 3@6, 1 = 2@7), x: 1, main: fun<main>,
  332. }
  333. --- step exp t2 --->
  334. {
  335. stack: main{(0 = 3@6, 1 = 2@7)<-1> :: t2[1]<0> :: (t2[0] - t2[1])<1>(3,) :: ((t2[0] - t2[1]) - x)<0> :: return ((t2[0] - t2[1]) - x);<0>} :: top{}
  336. heap: fun<main>, 1, 5, 2, Int, Int, 3, 2, (0 = 3@6, 1 = 2@7),
  337. env: t2: (0 = 3@6, 1 = 2@7), x: 1, main: fun<main>,
  338. }
  339. --- handle value (0 = 3@6, 1 = 2@7) with t2[1]<1>((0 = 3@6, 1 = 2@7),) --->
  340. {
  341. stack: main{1<-1> :: t2[1]<1>((0 = 3@6, 1 = 2@7),) :: (t2[0] - t2[1])<1>(3,) :: ((t2[0] - t2[1]) - x)<0> :: return ((t2[0] - t2[1]) - x);<0>} :: top{}
  342. heap: fun<main>, 1, 5, 2, Int, Int, 3, 2, (0 = 3@6, 1 = 2@7),
  343. env: t2: (0 = 3@6, 1 = 2@7), x: 1, main: fun<main>,
  344. }
  345. --- step exp 1 --->
  346. {
  347. stack: main{1<-1> :: t2[1]<1>((0 = 3@6, 1 = 2@7),) :: (t2[0] - t2[1])<1>(3,) :: ((t2[0] - t2[1]) - x)<0> :: return ((t2[0] - t2[1]) - x);<0>} :: top{}
  348. heap: fun<main>, 1, 5, 2, Int, Int, 3, 2, (0 = 3@6, 1 = 2@7),
  349. env: t2: (0 = 3@6, 1 = 2@7), x: 1, main: fun<main>,
  350. }
  351. --- handle value 1 with t2[1]<2>((0 = 3@6, 1 = 2@7),1,) --->
  352. {
  353. stack: main{2<-1> :: (t2[0] - t2[1])<1>(3,) :: ((t2[0] - t2[1]) - x)<0> :: return ((t2[0] - t2[1]) - x);<0>} :: top{}
  354. heap: fun<main>, 1, 5, 2, Int, Int, 3, 2, (0 = 3@6, 1 = 2@7),
  355. env: t2: (0 = 3@6, 1 = 2@7), x: 1, main: fun<main>,
  356. }
  357. --- handle value 2 with (t2[0] - t2[1])<2>(3,2,) --->
  358. {
  359. stack: main{1<-1> :: ((t2[0] - t2[1]) - x)<0> :: return ((t2[0] - t2[1]) - x);<0>} :: top{}
  360. heap: fun<main>, 1, 5, 2, Int, Int, 3, 2, (0 = 3@6, 1 = 2@7),
  361. env: t2: (0 = 3@6, 1 = 2@7), x: 1, main: fun<main>,
  362. }
  363. --- handle value 1 with ((t2[0] - t2[1]) - x)<1>(1,) --->
  364. {
  365. stack: main{x<-1> :: ((t2[0] - t2[1]) - x)<1>(1,) :: return ((t2[0] - t2[1]) - x);<0>} :: top{}
  366. heap: fun<main>, 1, 5, 2, Int, Int, 3, 2, (0 = 3@6, 1 = 2@7),
  367. env: t2: (0 = 3@6, 1 = 2@7), x: 1, main: fun<main>,
  368. }
  369. --- step exp x --->
  370. {
  371. stack: main{1<-1> :: ((t2[0] - t2[1]) - x)<1>(1,) :: return ((t2[0] - t2[1]) - x);<0>} :: top{}
  372. heap: fun<main>, 1, 5, 2, Int, Int, 3, 2, (0 = 3@6, 1 = 2@7),
  373. env: t2: (0 = 3@6, 1 = 2@7), x: 1, main: fun<main>,
  374. }
  375. --- handle value 1 with ((t2[0] - t2[1]) - x)<2>(1,1,) --->
  376. {
  377. stack: main{0<-1> :: return ((t2[0] - t2[1]) - x);<0>} :: top{}
  378. heap: fun<main>, 1, 5, 2, Int, Int, 3, 2, (0 = 3@6, 1 = 2@7),
  379. env: t2: (0 = 3@6, 1 = 2@7), x: 1, main: fun<main>,
  380. }
  381. --- handle value 0 with return ((t2[0] - t2[1]) - x);<1>(0,) --->
  382. {
  383. stack: top{0<-1>}
  384. heap: fun<main>, !!1, 5, 2, Int, Int, !!3, !!2, !!(0 = !!3@6, 1 = !!2@7),
  385. env: main: fun<main>,
  386. }
  387. result: 0