while1.golden 12 KB

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