struct1.golden 10 KB

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