choice1.golden 53 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899
  1. ********** source program **********
  2. choice Ints {
  3. alt None ();
  4. alt One (0 = Int);
  5. alt Two (0 = Int, 1 = Int);
  6. }
  7. fn main () -> Int {
  8. var auto: x = Ints.None();
  9. var auto: y = Ints.One(0 = 42);
  10. var auto: n = 0;
  11. match (y) {
  12. case Ints.None =>
  13. n = (n + 2);
  14. case Ints.One(0 = auto: x) =>
  15. n = ((x + 1) - 42);
  16. case Ints.Two(0 = auto: a, 1 = auto: b) =>
  17. n = 2;
  18. }
  19. match (x) {
  20. case Ints.One(0 = auto: x) =>
  21. n = (x + 2);
  22. case Ints.None() =>
  23. n = (n - 1);
  24. case Ints.Two(0 = auto: x, 1 = auto: y) =>
  25. n = 5;
  26. }
  27. return n;
  28. }
  29. choice MoreInts {
  30. alt None ();
  31. alt One (0 = Int);
  32. alt Two (0 = Int, 1 = Int);
  33. }
  34. ********** type checking **********
  35. --- step exp () --->
  36. --- step exp (0 = Int) --->
  37. --- step exp Int --->
  38. --- handle value Int with (0 = Int)<1>(Int,) --->
  39. --- step exp (0 = Int, 1 = Int) --->
  40. --- step exp Int --->
  41. --- handle value Int with (0 = Int, 1 = Int)<1>(Int,) --->
  42. --- step exp Int --->
  43. --- handle value Int with (0 = Int, 1 = Int)<2>(Int,Int,) --->
  44. --- step exp Int --->
  45. --- step exp () --->
  46. --- step exp (0 = Int) --->
  47. --- step exp Int --->
  48. --- handle value Int with (0 = Int)<1>(Int,) --->
  49. --- step exp (0 = Int, 1 = Int) --->
  50. --- step exp Int --->
  51. --- handle value Int with (0 = Int, 1 = Int)<1>(Int,) --->
  52. --- step exp Int --->
  53. --- handle value Int with (0 = Int, 1 = Int)<2>(Int,Int,) --->
  54. --- step exp Int --->
  55. --- step exp auto --->
  56. --- step exp auto --->
  57. --- step exp auto --->
  58. --- step exp auto --->
  59. --- step exp auto --->
  60. --- step exp auto --->
  61. --- step exp auto --->
  62. --- step exp auto --->
  63. --- step exp auto --->
  64. ********** type checking complete **********
  65. choice Ints {
  66. alt None ();
  67. alt One (0 = Int);
  68. alt Two (0 = Int, 1 = Int);
  69. }
  70. fn main () -> Int {
  71. var auto: x = Ints.None();
  72. var auto: y = Ints.One(0 = 42);
  73. var auto: n = 0;
  74. match (y) {
  75. case Ints.None =>
  76. n = (n + 2);
  77. case Ints.One(0 = auto: x) =>
  78. n = ((x + 1) - 42);
  79. case Ints.Two(0 = auto: a, 1 = auto: b) =>
  80. n = 2;
  81. }
  82. match (x) {
  83. case Ints.One(0 = auto: x) =>
  84. n = (x + 2);
  85. case Ints.None() =>
  86. n = (n - 1);
  87. case Ints.Two(0 = auto: x, 1 = auto: y) =>
  88. n = 5;
  89. }
  90. return n;
  91. }
  92. choice MoreInts {
  93. alt None ();
  94. alt One (0 = Int);
  95. alt Two (0 = Int, 1 = Int);
  96. }
  97. ********** starting execution **********
  98. ********** initializing globals **********
  99. --- step exp () --->
  100. --- step exp (0 = Int) --->
  101. --- step exp Int --->
  102. --- handle value Int with (0 = Int)<1>(Int,) --->
  103. --- step exp (0 = Int, 1 = Int) --->
  104. --- step exp Int --->
  105. --- handle value Int with (0 = Int, 1 = Int)<1>(Int,) --->
  106. --- step exp Int --->
  107. --- handle value Int with (0 = Int, 1 = Int)<2>(Int,Int,) --->
  108. --- step exp () --->
  109. --- step exp () --->
  110. --- step exp (0 = Int) --->
  111. --- step exp Int --->
  112. --- handle value Int with (0 = Int)<1>(Int,) --->
  113. --- step exp (0 = Int, 1 = Int) --->
  114. --- step exp Int --->
  115. --- handle value Int with (0 = Int, 1 = Int)<1>(Int,) --->
  116. --- step exp Int --->
  117. --- handle value Int with (0 = Int, 1 = Int)<2>(Int,Int,) --->
  118. ********** calling main function **********
  119. {
  120. stack: top{main()<-1>}
  121. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts,
  122. env: MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  123. }
  124. --- step exp main() --->
  125. {
  126. stack: top{main<-1> :: main()<0>}
  127. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts,
  128. env: MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  129. }
  130. --- step exp main --->
  131. {
  132. stack: top{fun<main><-1> :: main()<0>}
  133. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts,
  134. env: MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  135. }
  136. --- handle value fun<main> with main()<1>(fun<main>,) --->
  137. {
  138. stack: top{()<-1> :: main()<1>(fun<main>,)}
  139. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts,
  140. env: MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  141. }
  142. --- step exp () --->
  143. {
  144. stack: top{()<-1> :: main()<1>(fun<main>,)}
  145. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts,
  146. env: MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  147. }
  148. --- handle value () with main()<2>(fun<main>,(),) --->
  149. pattern_match((), ())
  150. {
  151. stack: main{var auto: x = Ints.None(); ... <-1>} :: top{}
  152. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts,
  153. env: MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  154. }
  155. --- step stmt var auto: x = Ints.None(); ... --->
  156. {
  157. stack: main{var auto: x = Ints.None();<-1> :: var auto: y = Ints.One(0 = 42); ... <-1>} :: top{}
  158. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts,
  159. env: MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  160. }
  161. --- step stmt var auto: x = Ints.None(); --->
  162. {
  163. stack: main{Ints.None()<-1> :: var auto: x = Ints.None();<0> :: var auto: y = Ints.One(0 = 42); ... <-1>} :: top{}
  164. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts,
  165. env: MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  166. }
  167. --- step exp Ints.None() --->
  168. {
  169. stack: main{Ints.None<-1> :: Ints.None()<0> :: var auto: x = Ints.None();<0> :: var auto: y = Ints.One(0 = 42); ... <-1>} :: top{}
  170. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts,
  171. env: MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  172. }
  173. --- step exp Ints.None --->
  174. {
  175. stack: main{Ints<-1> :: Ints.None<0> :: Ints.None()<0> :: var auto: x = Ints.None();<0> :: var auto: y = Ints.One(0 = 42); ... <-1>} :: top{}
  176. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts,
  177. env: MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  178. }
  179. --- step lvalue Ints --->
  180. {
  181. stack: main{ptr<3><-1> :: Ints.None<0> :: Ints.None()<0> :: var auto: x = Ints.None();<0> :: var auto: y = Ints.One(0 = 42); ... <-1>} :: top{}
  182. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts,
  183. env: MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  184. }
  185. --- handle value ptr<3> with Ints.None<1>(ptr<3>,) --->
  186. {
  187. stack: main{Ints.None<-1> :: Ints.None()<0> :: var auto: x = Ints.None();<0> :: var auto: y = Ints.One(0 = 42); ... <-1>} :: top{}
  188. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None,
  189. env: MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  190. }
  191. --- handle value Ints.None with Ints.None()<1>(Ints.None,) --->
  192. {
  193. stack: main{()<-1> :: Ints.None()<1>(Ints.None,) :: var auto: x = Ints.None();<0> :: var auto: y = Ints.One(0 = 42); ... <-1>} :: top{}
  194. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None,
  195. env: MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  196. }
  197. --- step exp () --->
  198. {
  199. stack: main{()<-1> :: Ints.None()<1>(Ints.None,) :: var auto: x = Ints.None();<0> :: var auto: y = Ints.One(0 = 42); ... <-1>} :: top{}
  200. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None,
  201. env: MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  202. }
  203. --- handle value () with Ints.None()<2>(Ints.None,(),) --->
  204. {
  205. stack: main{alt Ints.None ()<-1> :: var auto: x = Ints.None();<0> :: var auto: y = Ints.One(0 = 42); ... <-1>} :: top{}
  206. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None,
  207. env: MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  208. }
  209. --- handle value alt Ints.None () with var auto: x = Ints.None();<1>(alt Ints.None (),) --->
  210. {
  211. stack: main{auto: x<-1> :: var auto: x = Ints.None();<1>(alt Ints.None (),) :: var auto: y = Ints.One(0 = 42); ... <-1>} :: top{}
  212. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None,
  213. env: MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  214. }
  215. --- step exp auto: x --->
  216. {
  217. stack: main{auto<-1> :: auto: x<0> :: var auto: x = Ints.None();<1>(alt Ints.None (),) :: var auto: y = Ints.One(0 = 42); ... <-1>} :: top{}
  218. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None,
  219. env: MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  220. }
  221. --- step exp auto --->
  222. {
  223. stack: main{auto<-1> :: auto: x<0> :: var auto: x = Ints.None();<1>(alt Ints.None (),) :: var auto: y = Ints.One(0 = 42); ... <-1>} :: top{}
  224. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None,
  225. env: MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  226. }
  227. --- handle value auto with auto: x<1>(auto,) --->
  228. {
  229. stack: main{auto: x<-1> :: var auto: x = Ints.None();<1>(alt Ints.None (),) :: var auto: y = Ints.One(0 = 42); ... <-1>} :: top{}
  230. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None,
  231. env: MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  232. }
  233. --- handle value auto: x with var auto: x = Ints.None();<2>(alt Ints.None (),auto: x,) --->
  234. pattern_match(auto: x, alt Ints.None ())
  235. {
  236. stack: main{var auto: y = Ints.One(0 = 42); ... <-1>} :: top{}
  237. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (),
  238. env: x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  239. }
  240. --- step stmt var auto: y = Ints.One(0 = 42); ... --->
  241. {
  242. stack: main{var auto: y = Ints.One(0 = 42);<-1> :: var auto: n = 0; ... <-1>} :: top{}
  243. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (),
  244. env: x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  245. }
  246. --- step stmt var auto: y = Ints.One(0 = 42); --->
  247. {
  248. stack: main{Ints.One(0 = 42)<-1> :: var auto: y = Ints.One(0 = 42);<0> :: var auto: n = 0; ... <-1>} :: top{}
  249. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (),
  250. env: x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  251. }
  252. --- step exp Ints.One(0 = 42) --->
  253. {
  254. stack: main{Ints.One<-1> :: Ints.One(0 = 42)<0> :: var auto: y = Ints.One(0 = 42);<0> :: var auto: n = 0; ... <-1>} :: top{}
  255. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (),
  256. env: x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  257. }
  258. --- step exp Ints.One --->
  259. {
  260. stack: main{Ints<-1> :: Ints.One<0> :: Ints.One(0 = 42)<0> :: var auto: y = Ints.One(0 = 42);<0> :: var auto: n = 0; ... <-1>} :: top{}
  261. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (),
  262. env: x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  263. }
  264. --- step lvalue Ints --->
  265. {
  266. stack: main{ptr<3><-1> :: Ints.One<0> :: Ints.One(0 = 42)<0> :: var auto: y = Ints.One(0 = 42);<0> :: var auto: n = 0; ... <-1>} :: top{}
  267. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (),
  268. env: x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  269. }
  270. --- handle value ptr<3> with Ints.One<1>(ptr<3>,) --->
  271. {
  272. stack: main{Ints.One<-1> :: Ints.One(0 = 42)<0> :: var auto: y = Ints.One(0 = 42);<0> :: var auto: n = 0; ... <-1>} :: top{}
  273. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One,
  274. env: x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  275. }
  276. --- handle value Ints.One with Ints.One(0 = 42)<1>(Ints.One,) --->
  277. {
  278. stack: main{(0 = 42)<-1> :: Ints.One(0 = 42)<1>(Ints.One,) :: var auto: y = Ints.One(0 = 42);<0> :: var auto: n = 0; ... <-1>} :: top{}
  279. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One,
  280. env: x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  281. }
  282. --- step exp (0 = 42) --->
  283. {
  284. stack: main{42<-1> :: (0 = 42)<0> :: Ints.One(0 = 42)<1>(Ints.One,) :: var auto: y = Ints.One(0 = 42);<0> :: var auto: n = 0; ... <-1>} :: top{}
  285. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One,
  286. env: x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  287. }
  288. --- step exp 42 --->
  289. {
  290. stack: main{42<-1> :: (0 = 42)<0> :: Ints.One(0 = 42)<1>(Ints.One,) :: var auto: y = Ints.One(0 = 42);<0> :: var auto: n = 0; ... <-1>} :: top{}
  291. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One,
  292. env: x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  293. }
  294. --- handle value 42 with (0 = 42)<1>(42,) --->
  295. {
  296. stack: main{(0 = 42@12)<-1> :: Ints.One(0 = 42)<1>(Ints.One,) :: var auto: y = Ints.One(0 = 42);<0> :: var auto: n = 0; ... <-1>} :: top{}
  297. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42,
  298. env: x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  299. }
  300. --- handle value (0 = 42@12) with Ints.One(0 = 42)<2>(Ints.One,(0 = 42@12),) --->
  301. {
  302. stack: main{alt Ints.One (0 = 42@13)<-1> :: var auto: y = Ints.One(0 = 42);<0> :: var auto: n = 0; ... <-1>} :: top{}
  303. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42,
  304. env: x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  305. }
  306. --- handle value alt Ints.One (0 = 42@13) with var auto: y = Ints.One(0 = 42);<1>(alt Ints.One (0 = 42@13),) --->
  307. {
  308. stack: main{auto: y<-1> :: var auto: y = Ints.One(0 = 42);<1>(alt Ints.One (0 = 42@13),) :: var auto: n = 0; ... <-1>} :: top{}
  309. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42,
  310. env: x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  311. }
  312. --- step exp auto: y --->
  313. {
  314. stack: main{auto<-1> :: auto: y<0> :: var auto: y = Ints.One(0 = 42);<1>(alt Ints.One (0 = 42@13),) :: var auto: n = 0; ... <-1>} :: top{}
  315. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42,
  316. env: x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  317. }
  318. --- step exp auto --->
  319. {
  320. stack: main{auto<-1> :: auto: y<0> :: var auto: y = Ints.One(0 = 42);<1>(alt Ints.One (0 = 42@13),) :: var auto: n = 0; ... <-1>} :: top{}
  321. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42,
  322. env: x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  323. }
  324. --- handle value auto with auto: y<1>(auto,) --->
  325. {
  326. stack: main{auto: y<-1> :: var auto: y = Ints.One(0 = 42);<1>(alt Ints.One (0 = 42@13),) :: var auto: n = 0; ... <-1>} :: top{}
  327. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42,
  328. env: x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  329. }
  330. --- handle value auto: y with var auto: y = Ints.One(0 = 42);<2>(alt Ints.One (0 = 42@13),auto: y,) --->
  331. pattern_match(auto: y, alt Ints.One (0 = 42@13))
  332. {
  333. stack: main{var auto: n = 0; ... <-1>} :: top{}
  334. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14),
  335. env: y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  336. }
  337. --- step stmt var auto: n = 0; ... --->
  338. {
  339. stack: main{var auto: n = 0;<-1> :: match (y) {...} ... <-1>} :: top{}
  340. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14),
  341. env: y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  342. }
  343. --- step stmt var auto: n = 0; --->
  344. {
  345. stack: main{0<-1> :: var auto: n = 0;<0> :: match (y) {...} ... <-1>} :: top{}
  346. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14),
  347. env: y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  348. }
  349. --- step exp 0 --->
  350. {
  351. stack: main{0<-1> :: var auto: n = 0;<0> :: match (y) {...} ... <-1>} :: top{}
  352. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14),
  353. env: y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  354. }
  355. --- handle value 0 with var auto: n = 0;<1>(0,) --->
  356. {
  357. stack: main{auto: n<-1> :: var auto: n = 0;<1>(0,) :: match (y) {...} ... <-1>} :: top{}
  358. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14),
  359. env: y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  360. }
  361. --- step exp auto: n --->
  362. {
  363. stack: main{auto<-1> :: auto: n<0> :: var auto: n = 0;<1>(0,) :: match (y) {...} ... <-1>} :: top{}
  364. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14),
  365. env: y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  366. }
  367. --- step exp auto --->
  368. {
  369. stack: main{auto<-1> :: auto: n<0> :: var auto: n = 0;<1>(0,) :: match (y) {...} ... <-1>} :: top{}
  370. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14),
  371. env: y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  372. }
  373. --- handle value auto with auto: n<1>(auto,) --->
  374. {
  375. stack: main{auto: n<-1> :: var auto: n = 0;<1>(0,) :: match (y) {...} ... <-1>} :: top{}
  376. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14),
  377. env: y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  378. }
  379. --- handle value auto: n with var auto: n = 0;<2>(0,auto: n,) --->
  380. pattern_match(auto: n, 0)
  381. {
  382. stack: main{match (y) {...} ... <-1>} :: top{}
  383. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 0,
  384. env: n: 0, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  385. }
  386. --- step stmt match (y) {...} ... --->
  387. {
  388. stack: main{match (y) {...}<-1> :: match (x) {...} ... <-1>} :: top{}
  389. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 0,
  390. env: n: 0, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  391. }
  392. --- step stmt match (y) {...} --->
  393. {
  394. stack: main{y<-1> :: match (y) {...}<0> :: match (x) {...} ... <-1>} :: top{}
  395. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 0,
  396. env: n: 0, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  397. }
  398. --- step exp y --->
  399. {
  400. stack: main{alt Ints.One (0 = 42@14)<-1> :: match (y) {...}<0> :: match (x) {...} ... <-1>} :: top{}
  401. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 0,
  402. env: n: 0, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  403. }
  404. --- handle value alt Ints.One (0 = 42@14) with match (y) {...}<1>(alt Ints.One (0 = 42@14),) --->
  405. {
  406. stack: main{Ints.None<-1> :: match (y) {...}<1>(alt Ints.One (0 = 42@14),) :: match (x) {...} ... <-1>} :: top{}
  407. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 0,
  408. env: n: 0, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  409. }
  410. --- step exp Ints.None --->
  411. {
  412. stack: main{Ints<-1> :: Ints.None<0> :: match (y) {...}<1>(alt Ints.One (0 = 42@14),) :: match (x) {...} ... <-1>} :: top{}
  413. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 0,
  414. env: n: 0, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  415. }
  416. --- step lvalue Ints --->
  417. {
  418. stack: main{ptr<3><-1> :: Ints.None<0> :: match (y) {...}<1>(alt Ints.One (0 = 42@14),) :: match (x) {...} ... <-1>} :: top{}
  419. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 0,
  420. env: n: 0, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  421. }
  422. --- handle value ptr<3> with Ints.None<1>(ptr<3>,) --->
  423. {
  424. stack: main{Ints.None<-1> :: match (y) {...}<1>(alt Ints.One (0 = 42@14),) :: match (x) {...} ... <-1>} :: top{}
  425. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 0, Ints.None,
  426. env: n: 0, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  427. }
  428. --- handle value Ints.None with match (y) {...}<2>(alt Ints.One (0 = 42@14),Ints.None,) --->
  429. pattern_match(Ints.None, alt Ints.One (0 = 42@14))
  430. {
  431. stack: main{Ints.One(0 = auto: x)<-1> :: match (y) {...}<3>(alt Ints.One (0 = 42@14),Ints.None,) :: match (x) {...} ... <-1>} :: top{}
  432. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 0, Ints.None,
  433. env: n: 0, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  434. }
  435. --- step exp Ints.One(0 = auto: x) --->
  436. {
  437. stack: main{Ints.One<-1> :: Ints.One(0 = auto: x)<0> :: match (y) {...}<3>(alt Ints.One (0 = 42@14),Ints.None,) :: match (x) {...} ... <-1>} :: top{}
  438. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 0, Ints.None,
  439. env: n: 0, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  440. }
  441. --- step exp Ints.One --->
  442. {
  443. stack: main{Ints<-1> :: Ints.One<0> :: Ints.One(0 = auto: x)<0> :: match (y) {...}<3>(alt Ints.One (0 = 42@14),Ints.None,) :: match (x) {...} ... <-1>} :: top{}
  444. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 0, Ints.None,
  445. env: n: 0, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  446. }
  447. --- step lvalue Ints --->
  448. {
  449. stack: main{ptr<3><-1> :: Ints.One<0> :: Ints.One(0 = auto: x)<0> :: match (y) {...}<3>(alt Ints.One (0 = 42@14),Ints.None,) :: match (x) {...} ... <-1>} :: top{}
  450. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 0, Ints.None,
  451. env: n: 0, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  452. }
  453. --- handle value ptr<3> with Ints.One<1>(ptr<3>,) --->
  454. {
  455. stack: main{Ints.One<-1> :: Ints.One(0 = auto: x)<0> :: match (y) {...}<3>(alt Ints.One (0 = 42@14),Ints.None,) :: match (x) {...} ... <-1>} :: top{}
  456. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 0, Ints.None, Ints.One,
  457. env: n: 0, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  458. }
  459. --- handle value Ints.One with Ints.One(0 = auto: x)<1>(Ints.One,) --->
  460. {
  461. stack: main{(0 = auto: x)<-1> :: Ints.One(0 = auto: x)<1>(Ints.One,) :: match (y) {...}<3>(alt Ints.One (0 = 42@14),Ints.None,) :: match (x) {...} ... <-1>} :: top{}
  462. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 0, Ints.None, Ints.One,
  463. env: n: 0, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  464. }
  465. --- step exp (0 = auto: x) --->
  466. {
  467. stack: main{auto: x<-1> :: (0 = auto: x)<0> :: Ints.One(0 = auto: x)<1>(Ints.One,) :: match (y) {...}<3>(alt Ints.One (0 = 42@14),Ints.None,) :: match (x) {...} ... <-1>} :: top{}
  468. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 0, Ints.None, Ints.One,
  469. env: n: 0, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  470. }
  471. --- step exp auto: x --->
  472. {
  473. stack: main{auto<-1> :: auto: x<0> :: (0 = auto: x)<0> :: Ints.One(0 = auto: x)<1>(Ints.One,) :: match (y) {...}<3>(alt Ints.One (0 = 42@14),Ints.None,) :: match (x) {...} ... <-1>} :: top{}
  474. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 0, Ints.None, Ints.One,
  475. env: n: 0, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  476. }
  477. --- step exp auto --->
  478. {
  479. stack: main{auto<-1> :: auto: x<0> :: (0 = auto: x)<0> :: Ints.One(0 = auto: x)<1>(Ints.One,) :: match (y) {...}<3>(alt Ints.One (0 = 42@14),Ints.None,) :: match (x) {...} ... <-1>} :: top{}
  480. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 0, Ints.None, Ints.One,
  481. env: n: 0, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  482. }
  483. --- handle value auto with auto: x<1>(auto,) --->
  484. {
  485. stack: main{auto: x<-1> :: (0 = auto: x)<0> :: Ints.One(0 = auto: x)<1>(Ints.One,) :: match (y) {...}<3>(alt Ints.One (0 = 42@14),Ints.None,) :: match (x) {...} ... <-1>} :: top{}
  486. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 0, Ints.None, Ints.One,
  487. env: n: 0, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  488. }
  489. --- handle value auto: x with (0 = auto: x)<1>(auto: x,) --->
  490. {
  491. stack: main{(0 = auto: x@19)<-1> :: Ints.One(0 = auto: x)<1>(Ints.One,) :: match (y) {...}<3>(alt Ints.One (0 = 42@14),Ints.None,) :: match (x) {...} ... <-1>} :: top{}
  492. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 0, Ints.None, Ints.One, auto: x,
  493. env: n: 0, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  494. }
  495. --- handle value (0 = auto: x@19) with Ints.One(0 = auto: x)<2>(Ints.One,(0 = auto: x@19),) --->
  496. {
  497. stack: main{alt Ints.One (0 = auto: x@20)<-1> :: match (y) {...}<3>(alt Ints.One (0 = 42@14),Ints.None,) :: match (x) {...} ... <-1>} :: top{}
  498. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 0, Ints.None, Ints.One, auto: x, auto: x,
  499. env: n: 0, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  500. }
  501. --- handle value alt Ints.One (0 = auto: x@20) with match (y) {...}<4>(alt Ints.One (0 = 42@14),Ints.None,alt Ints.One (0 = auto: x@20),) --->
  502. pattern_match(alt Ints.One (0 = auto: x@20), alt Ints.One (0 = 42@14))
  503. pattern_match((0 = auto: x@20), (0 = 42@14))
  504. pattern_match(auto: x, 42)
  505. {
  506. stack: main{n = ((x + 1) - 42);<-1> :: {
  507. ...
  508. }
  509. <0> :: match (x) {...} ... <-1>} :: top{}
  510. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 0, Ints.None, Ints.One, auto: x, auto: x, 42,
  511. env: x: 42, n: 0, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  512. }
  513. --- step stmt n = ((x + 1) - 42); --->
  514. {
  515. stack: main{n<-1> :: n = ((x + 1) - 42);<0> :: {
  516. ...
  517. }
  518. <0> :: match (x) {...} ... <-1>} :: top{}
  519. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 0, Ints.None, Ints.One, auto: x, auto: x, 42,
  520. env: x: 42, n: 0, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  521. }
  522. --- step lvalue n --->
  523. {
  524. stack: main{ptr<16><-1> :: n = ((x + 1) - 42);<0> :: {
  525. ...
  526. }
  527. <0> :: match (x) {...} ... <-1>} :: top{}
  528. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 0, Ints.None, Ints.One, auto: x, auto: x, 42,
  529. env: x: 42, n: 0, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  530. }
  531. --- handle value ptr<16> with n = ((x + 1) - 42);<1>(ptr<16>,) --->
  532. {
  533. stack: main{((x + 1) - 42)<-1> :: n = ((x + 1) - 42);<1>(ptr<16>,) :: {
  534. ...
  535. }
  536. <0> :: match (x) {...} ... <-1>} :: top{}
  537. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 0, Ints.None, Ints.One, auto: x, auto: x, 42,
  538. env: x: 42, n: 0, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  539. }
  540. --- step exp ((x + 1) - 42) --->
  541. {
  542. stack: main{(x + 1)<-1> :: ((x + 1) - 42)<0> :: n = ((x + 1) - 42);<1>(ptr<16>,) :: {
  543. ...
  544. }
  545. <0> :: match (x) {...} ... <-1>} :: top{}
  546. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 0, Ints.None, Ints.One, auto: x, auto: x, 42,
  547. env: x: 42, n: 0, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  548. }
  549. --- step exp (x + 1) --->
  550. {
  551. stack: main{x<-1> :: (x + 1)<0> :: ((x + 1) - 42)<0> :: n = ((x + 1) - 42);<1>(ptr<16>,) :: {
  552. ...
  553. }
  554. <0> :: match (x) {...} ... <-1>} :: top{}
  555. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 0, Ints.None, Ints.One, auto: x, auto: x, 42,
  556. env: x: 42, n: 0, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  557. }
  558. --- step exp x --->
  559. {
  560. stack: main{42<-1> :: (x + 1)<0> :: ((x + 1) - 42)<0> :: n = ((x + 1) - 42);<1>(ptr<16>,) :: {
  561. ...
  562. }
  563. <0> :: match (x) {...} ... <-1>} :: top{}
  564. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 0, Ints.None, Ints.One, auto: x, auto: x, 42,
  565. env: x: 42, n: 0, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  566. }
  567. --- handle value 42 with (x + 1)<1>(42,) --->
  568. {
  569. stack: main{1<-1> :: (x + 1)<1>(42,) :: ((x + 1) - 42)<0> :: n = ((x + 1) - 42);<1>(ptr<16>,) :: {
  570. ...
  571. }
  572. <0> :: match (x) {...} ... <-1>} :: top{}
  573. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 0, Ints.None, Ints.One, auto: x, auto: x, 42,
  574. env: x: 42, n: 0, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  575. }
  576. --- step exp 1 --->
  577. {
  578. stack: main{1<-1> :: (x + 1)<1>(42,) :: ((x + 1) - 42)<0> :: n = ((x + 1) - 42);<1>(ptr<16>,) :: {
  579. ...
  580. }
  581. <0> :: match (x) {...} ... <-1>} :: top{}
  582. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 0, Ints.None, Ints.One, auto: x, auto: x, 42,
  583. env: x: 42, n: 0, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  584. }
  585. --- handle value 1 with (x + 1)<2>(42,1,) --->
  586. {
  587. stack: main{43<-1> :: ((x + 1) - 42)<0> :: n = ((x + 1) - 42);<1>(ptr<16>,) :: {
  588. ...
  589. }
  590. <0> :: match (x) {...} ... <-1>} :: top{}
  591. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 0, Ints.None, Ints.One, auto: x, auto: x, 42,
  592. env: x: 42, n: 0, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  593. }
  594. --- handle value 43 with ((x + 1) - 42)<1>(43,) --->
  595. {
  596. stack: main{42<-1> :: ((x + 1) - 42)<1>(43,) :: n = ((x + 1) - 42);<1>(ptr<16>,) :: {
  597. ...
  598. }
  599. <0> :: match (x) {...} ... <-1>} :: top{}
  600. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 0, Ints.None, Ints.One, auto: x, auto: x, 42,
  601. env: x: 42, n: 0, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  602. }
  603. --- step exp 42 --->
  604. {
  605. stack: main{42<-1> :: ((x + 1) - 42)<1>(43,) :: n = ((x + 1) - 42);<1>(ptr<16>,) :: {
  606. ...
  607. }
  608. <0> :: match (x) {...} ... <-1>} :: top{}
  609. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 0, Ints.None, Ints.One, auto: x, auto: x, 42,
  610. env: x: 42, n: 0, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  611. }
  612. --- handle value 42 with ((x + 1) - 42)<2>(43,42,) --->
  613. {
  614. stack: main{1<-1> :: n = ((x + 1) - 42);<1>(ptr<16>,) :: {
  615. ...
  616. }
  617. <0> :: match (x) {...} ... <-1>} :: top{}
  618. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 0, Ints.None, Ints.One, auto: x, auto: x, 42,
  619. env: x: 42, n: 0, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  620. }
  621. --- handle value 1 with n = ((x + 1) - 42);<2>(ptr<16>,1,) --->
  622. {
  623. stack: main{{
  624. ...
  625. }
  626. <0> :: match (x) {...} ... <-1>} :: top{}
  627. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 1, Ints.None, Ints.One, auto: x, auto: x, 42,
  628. env: x: 42, n: 1, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  629. }
  630. --- step stmt {
  631. ...
  632. }
  633. --->
  634. {
  635. stack: main{match (x) {...} ... <-1>} :: top{}
  636. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 1, Ints.None, Ints.One, auto: x, auto: x, !!42,
  637. env: n: 1, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  638. }
  639. --- step stmt match (x) {...} ... --->
  640. {
  641. stack: main{match (x) {...}<-1> :: return n;<-1>} :: top{}
  642. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 1, Ints.None, Ints.One, auto: x, auto: x, !!42,
  643. env: n: 1, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  644. }
  645. --- step stmt match (x) {...} --->
  646. {
  647. stack: main{x<-1> :: match (x) {...}<0> :: return n;<-1>} :: top{}
  648. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 1, Ints.None, Ints.One, auto: x, auto: x, !!42,
  649. env: n: 1, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  650. }
  651. --- step exp x --->
  652. {
  653. stack: main{alt Ints.None ()<-1> :: match (x) {...}<0> :: return n;<-1>} :: top{}
  654. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 1, Ints.None, Ints.One, auto: x, auto: x, !!42,
  655. env: n: 1, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  656. }
  657. --- handle value alt Ints.None () with match (x) {...}<1>(alt Ints.None (),) --->
  658. {
  659. stack: main{Ints.One(0 = auto: x)<-1> :: match (x) {...}<1>(alt Ints.None (),) :: return n;<-1>} :: top{}
  660. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 1, Ints.None, Ints.One, auto: x, auto: x, !!42,
  661. env: n: 1, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  662. }
  663. --- step exp Ints.One(0 = auto: x) --->
  664. {
  665. stack: main{Ints.One<-1> :: Ints.One(0 = auto: x)<0> :: match (x) {...}<1>(alt Ints.None (),) :: return n;<-1>} :: top{}
  666. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 1, Ints.None, Ints.One, auto: x, auto: x, !!42,
  667. env: n: 1, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  668. }
  669. --- step exp Ints.One --->
  670. {
  671. stack: main{Ints<-1> :: Ints.One<0> :: Ints.One(0 = auto: x)<0> :: match (x) {...}<1>(alt Ints.None (),) :: return n;<-1>} :: top{}
  672. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 1, Ints.None, Ints.One, auto: x, auto: x, !!42,
  673. env: n: 1, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  674. }
  675. --- step lvalue Ints --->
  676. {
  677. stack: main{ptr<3><-1> :: Ints.One<0> :: Ints.One(0 = auto: x)<0> :: match (x) {...}<1>(alt Ints.None (),) :: return n;<-1>} :: top{}
  678. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 1, Ints.None, Ints.One, auto: x, auto: x, !!42,
  679. env: n: 1, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  680. }
  681. --- handle value ptr<3> with Ints.One<1>(ptr<3>,) --->
  682. {
  683. stack: main{Ints.One<-1> :: Ints.One(0 = auto: x)<0> :: match (x) {...}<1>(alt Ints.None (),) :: return n;<-1>} :: top{}
  684. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 1, Ints.None, Ints.One, auto: x, auto: x, !!42, Ints.One,
  685. env: n: 1, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  686. }
  687. --- handle value Ints.One with Ints.One(0 = auto: x)<1>(Ints.One,) --->
  688. {
  689. stack: main{(0 = auto: x)<-1> :: Ints.One(0 = auto: x)<1>(Ints.One,) :: match (x) {...}<1>(alt Ints.None (),) :: return n;<-1>} :: top{}
  690. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 1, Ints.None, Ints.One, auto: x, auto: x, !!42, Ints.One,
  691. env: n: 1, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  692. }
  693. --- step exp (0 = auto: x) --->
  694. {
  695. stack: main{auto: x<-1> :: (0 = auto: x)<0> :: Ints.One(0 = auto: x)<1>(Ints.One,) :: match (x) {...}<1>(alt Ints.None (),) :: return n;<-1>} :: top{}
  696. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 1, Ints.None, Ints.One, auto: x, auto: x, !!42, Ints.One,
  697. env: n: 1, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  698. }
  699. --- step exp auto: x --->
  700. {
  701. stack: main{auto<-1> :: auto: x<0> :: (0 = auto: x)<0> :: Ints.One(0 = auto: x)<1>(Ints.One,) :: match (x) {...}<1>(alt Ints.None (),) :: return n;<-1>} :: top{}
  702. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 1, Ints.None, Ints.One, auto: x, auto: x, !!42, Ints.One,
  703. env: n: 1, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  704. }
  705. --- step exp auto --->
  706. {
  707. stack: main{auto<-1> :: auto: x<0> :: (0 = auto: x)<0> :: Ints.One(0 = auto: x)<1>(Ints.One,) :: match (x) {...}<1>(alt Ints.None (),) :: return n;<-1>} :: top{}
  708. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 1, Ints.None, Ints.One, auto: x, auto: x, !!42, Ints.One,
  709. env: n: 1, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  710. }
  711. --- handle value auto with auto: x<1>(auto,) --->
  712. {
  713. stack: main{auto: x<-1> :: (0 = auto: x)<0> :: Ints.One(0 = auto: x)<1>(Ints.One,) :: match (x) {...}<1>(alt Ints.None (),) :: return n;<-1>} :: top{}
  714. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 1, Ints.None, Ints.One, auto: x, auto: x, !!42, Ints.One,
  715. env: n: 1, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  716. }
  717. --- handle value auto: x with (0 = auto: x)<1>(auto: x,) --->
  718. {
  719. stack: main{(0 = auto: x@23)<-1> :: Ints.One(0 = auto: x)<1>(Ints.One,) :: match (x) {...}<1>(alt Ints.None (),) :: return n;<-1>} :: top{}
  720. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 1, Ints.None, Ints.One, auto: x, auto: x, !!42, Ints.One, auto: x,
  721. env: n: 1, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  722. }
  723. --- handle value (0 = auto: x@23) with Ints.One(0 = auto: x)<2>(Ints.One,(0 = auto: x@23),) --->
  724. {
  725. stack: main{alt Ints.One (0 = auto: x@24)<-1> :: match (x) {...}<1>(alt Ints.None (),) :: return n;<-1>} :: top{}
  726. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 1, Ints.None, Ints.One, auto: x, auto: x, !!42, Ints.One, auto: x, auto: x,
  727. env: n: 1, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  728. }
  729. --- handle value alt Ints.One (0 = auto: x@24) with match (x) {...}<2>(alt Ints.None (),alt Ints.One (0 = auto: x@24),) --->
  730. pattern_match(alt Ints.One (0 = auto: x@24), alt Ints.None ())
  731. {
  732. stack: main{Ints.None()<-1> :: match (x) {...}<3>(alt Ints.None (),alt Ints.One (0 = auto: x@24),) :: return n;<-1>} :: top{}
  733. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 1, Ints.None, Ints.One, auto: x, auto: x, !!42, Ints.One, auto: x, auto: x,
  734. env: n: 1, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  735. }
  736. --- step exp Ints.None() --->
  737. {
  738. stack: main{Ints.None<-1> :: Ints.None()<0> :: match (x) {...}<3>(alt Ints.None (),alt Ints.One (0 = auto: x@24),) :: return n;<-1>} :: top{}
  739. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 1, Ints.None, Ints.One, auto: x, auto: x, !!42, Ints.One, auto: x, auto: x,
  740. env: n: 1, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  741. }
  742. --- step exp Ints.None --->
  743. {
  744. stack: main{Ints<-1> :: Ints.None<0> :: Ints.None()<0> :: match (x) {...}<3>(alt Ints.None (),alt Ints.One (0 = auto: x@24),) :: return n;<-1>} :: top{}
  745. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 1, Ints.None, Ints.One, auto: x, auto: x, !!42, Ints.One, auto: x, auto: x,
  746. env: n: 1, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  747. }
  748. --- step lvalue Ints --->
  749. {
  750. stack: main{ptr<3><-1> :: Ints.None<0> :: Ints.None()<0> :: match (x) {...}<3>(alt Ints.None (),alt Ints.One (0 = auto: x@24),) :: return n;<-1>} :: top{}
  751. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 1, Ints.None, Ints.One, auto: x, auto: x, !!42, Ints.One, auto: x, auto: x,
  752. env: n: 1, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  753. }
  754. --- handle value ptr<3> with Ints.None<1>(ptr<3>,) --->
  755. {
  756. stack: main{Ints.None<-1> :: Ints.None()<0> :: match (x) {...}<3>(alt Ints.None (),alt Ints.One (0 = auto: x@24),) :: return n;<-1>} :: top{}
  757. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 1, Ints.None, Ints.One, auto: x, auto: x, !!42, Ints.One, auto: x, auto: x, Ints.None,
  758. env: n: 1, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  759. }
  760. --- handle value Ints.None with Ints.None()<1>(Ints.None,) --->
  761. {
  762. stack: main{()<-1> :: Ints.None()<1>(Ints.None,) :: match (x) {...}<3>(alt Ints.None (),alt Ints.One (0 = auto: x@24),) :: return n;<-1>} :: top{}
  763. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 1, Ints.None, Ints.One, auto: x, auto: x, !!42, Ints.One, auto: x, auto: x, Ints.None,
  764. env: n: 1, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  765. }
  766. --- step exp () --->
  767. {
  768. stack: main{()<-1> :: Ints.None()<1>(Ints.None,) :: match (x) {...}<3>(alt Ints.None (),alt Ints.One (0 = auto: x@24),) :: return n;<-1>} :: top{}
  769. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 1, Ints.None, Ints.One, auto: x, auto: x, !!42, Ints.One, auto: x, auto: x, Ints.None,
  770. env: n: 1, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  771. }
  772. --- handle value () with Ints.None()<2>(Ints.None,(),) --->
  773. {
  774. stack: main{alt Ints.None ()<-1> :: match (x) {...}<3>(alt Ints.None (),alt Ints.One (0 = auto: x@24),) :: return n;<-1>} :: top{}
  775. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 1, Ints.None, Ints.One, auto: x, auto: x, !!42, Ints.One, auto: x, auto: x, Ints.None,
  776. env: n: 1, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  777. }
  778. --- handle value alt Ints.None () with match (x) {...}<4>(alt Ints.None (),alt Ints.One (0 = auto: x@24),alt Ints.None (),) --->
  779. pattern_match(alt Ints.None (), alt Ints.None ())
  780. pattern_match((), ())
  781. {
  782. stack: main{n = (n - 1);<-1> :: {
  783. ...
  784. }
  785. <0> :: return n;<-1>} :: top{}
  786. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 1, Ints.None, Ints.One, auto: x, auto: x, !!42, Ints.One, auto: x, auto: x, Ints.None,
  787. env: n: 1, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  788. }
  789. --- step stmt n = (n - 1); --->
  790. {
  791. stack: main{n<-1> :: n = (n - 1);<0> :: {
  792. ...
  793. }
  794. <0> :: return n;<-1>} :: top{}
  795. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 1, Ints.None, Ints.One, auto: x, auto: x, !!42, Ints.One, auto: x, auto: x, Ints.None,
  796. env: n: 1, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  797. }
  798. --- step lvalue n --->
  799. {
  800. stack: main{ptr<16><-1> :: n = (n - 1);<0> :: {
  801. ...
  802. }
  803. <0> :: return n;<-1>} :: top{}
  804. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 1, Ints.None, Ints.One, auto: x, auto: x, !!42, Ints.One, auto: x, auto: x, Ints.None,
  805. env: n: 1, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  806. }
  807. --- handle value ptr<16> with n = (n - 1);<1>(ptr<16>,) --->
  808. {
  809. stack: main{(n - 1)<-1> :: n = (n - 1);<1>(ptr<16>,) :: {
  810. ...
  811. }
  812. <0> :: return n;<-1>} :: top{}
  813. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 1, Ints.None, Ints.One, auto: x, auto: x, !!42, Ints.One, auto: x, auto: x, Ints.None,
  814. env: n: 1, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  815. }
  816. --- step exp (n - 1) --->
  817. {
  818. stack: main{n<-1> :: (n - 1)<0> :: n = (n - 1);<1>(ptr<16>,) :: {
  819. ...
  820. }
  821. <0> :: return n;<-1>} :: top{}
  822. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 1, Ints.None, Ints.One, auto: x, auto: x, !!42, Ints.One, auto: x, auto: x, Ints.None,
  823. env: n: 1, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  824. }
  825. --- step exp n --->
  826. {
  827. stack: main{1<-1> :: (n - 1)<0> :: n = (n - 1);<1>(ptr<16>,) :: {
  828. ...
  829. }
  830. <0> :: return n;<-1>} :: top{}
  831. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 1, Ints.None, Ints.One, auto: x, auto: x, !!42, Ints.One, auto: x, auto: x, Ints.None,
  832. env: n: 1, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  833. }
  834. --- handle value 1 with (n - 1)<1>(1,) --->
  835. {
  836. stack: main{1<-1> :: (n - 1)<1>(1,) :: n = (n - 1);<1>(ptr<16>,) :: {
  837. ...
  838. }
  839. <0> :: return n;<-1>} :: top{}
  840. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 1, Ints.None, Ints.One, auto: x, auto: x, !!42, Ints.One, auto: x, auto: x, Ints.None,
  841. env: n: 1, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  842. }
  843. --- step exp 1 --->
  844. {
  845. stack: main{1<-1> :: (n - 1)<1>(1,) :: n = (n - 1);<1>(ptr<16>,) :: {
  846. ...
  847. }
  848. <0> :: return n;<-1>} :: top{}
  849. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 1, Ints.None, Ints.One, auto: x, auto: x, !!42, Ints.One, auto: x, auto: x, Ints.None,
  850. env: n: 1, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  851. }
  852. --- handle value 1 with (n - 1)<2>(1,1,) --->
  853. {
  854. stack: main{0<-1> :: n = (n - 1);<1>(ptr<16>,) :: {
  855. ...
  856. }
  857. <0> :: return n;<-1>} :: top{}
  858. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 1, Ints.None, Ints.One, auto: x, auto: x, !!42, Ints.One, auto: x, auto: x, Ints.None,
  859. env: n: 1, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  860. }
  861. --- handle value 0 with n = (n - 1);<2>(ptr<16>,0,) --->
  862. {
  863. stack: main{{
  864. ...
  865. }
  866. <0> :: return n;<-1>} :: top{}
  867. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 0, Ints.None, Ints.One, auto: x, auto: x, !!42, Ints.One, auto: x, auto: x, Ints.None,
  868. env: n: 0, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  869. }
  870. --- step stmt {
  871. ...
  872. }
  873. --->
  874. {
  875. stack: main{return n;<-1>} :: top{}
  876. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 0, Ints.None, Ints.One, auto: x, auto: x, !!42, Ints.One, auto: x, auto: x, Ints.None,
  877. env: n: 0, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  878. }
  879. --- step stmt return n; --->
  880. {
  881. stack: main{n<-1> :: return n;<0>} :: top{}
  882. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 0, Ints.None, Ints.One, auto: x, auto: x, !!42, Ints.One, auto: x, auto: x, Ints.None,
  883. env: n: 0, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  884. }
  885. --- step exp n --->
  886. {
  887. stack: main{0<-1> :: return n;<0>} :: top{}
  888. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, alt Ints.None (), Ints.One, 42, 42, 42, alt Ints.One (0 = 42@14), 0, Ints.None, Ints.One, auto: x, auto: x, !!42, Ints.One, auto: x, auto: x, Ints.None,
  889. env: n: 0, y: alt Ints.One (0 = 42@14), x: alt Ints.None (), MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  890. }
  891. --- handle value 0 with return n;<1>(0,) --->
  892. {
  893. stack: top{0<-1>}
  894. heap: Int, Int, Int, choice Ints, fun<main>, Int, Int, Int, choice MoreInts, Ints.None, !!alt Ints.None !!(), Ints.One, 42, 42, !!42, !!alt Ints.One !!(0 = !!42@14), !!0, Ints.None, Ints.One, auto: x, auto: x, !!42, Ints.One, auto: x, auto: x, Ints.None,
  895. env: MoreInts: choice MoreInts, main: fun<main>, Ints: choice Ints,
  896. }
  897. result: 0