pattern_init.golden 8.1 KB

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