fun5.golden 7.8 KB

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