context_main.carbon 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355
  1. // Part of the Carbon Language project, under the Apache License v2.0 with LLVM
  2. // Exceptions. See /LICENSE for license information.
  3. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  4. package ExplorerTest api;
  5. interface TestInterface {}
  6. fn Main() -> i32 {
  7. return 0;
  8. }
  9. // Place checks after code so that line numbers are stable, reducing merge
  10. // conflicts.
  11. // ARGS: --trace_file=- --trace_phase=all --trace_file_context=main %s
  12. // AUTOUPDATE
  13. // CHECK:STDOUT: * * * * * * * * * * source program * * * * * * * * * *
  14. // CHECK:STDOUT: --------------------------------------------------------
  15. // CHECK:STDOUT: interface TestInterface {
  16. // CHECK:STDOUT: }
  17. // CHECK:STDOUT: fn Main ()-> i32 {
  18. // CHECK:STDOUT: {
  19. // CHECK:STDOUT: return 0;
  20. // CHECK:STDOUT: }
  21. // CHECK:STDOUT:
  22. // CHECK:STDOUT: }
  23. // CHECK:STDOUT:
  24. // CHECK:STDOUT:
  25. // CHECK:STDOUT: * * * * * * * * * * resolving names * * * * * * * * * *
  26. // CHECK:STDOUT: ---------------------------------------------------------
  27. // CHECK:STDOUT: ==> declared `TestInterface` as `interface TestInterface` in `package` (context_main.carbon:7)
  28. // CHECK:STDOUT: ==> declared `Main` as `fn Main` in `package` (context_main.carbon:11)
  29. // CHECK:STDOUT: ->> resolving decl `interface TestInterface` (context_main.carbon:7)
  30. // CHECK:STDOUT: ==> marked `TestInterface` declared but not usable in `package`
  31. // CHECK:STDOUT: ==> marked `TestInterface` usable in `package`
  32. // CHECK:STDOUT: ==> declared `Self` as `Self` in `interface TestInterface` (context_main.carbon:7)
  33. // CHECK:STDOUT: <<- finished resolving decl `interface TestInterface` (context_main.carbon:7)
  34. // CHECK:STDOUT: ->> resolving decl `fn Main` (context_main.carbon:11)
  35. // CHECK:STDOUT: ==> marked `Main` declared but not usable in `package`
  36. // CHECK:STDOUT: ==> marked `Main` usable in `package`
  37. // CHECK:STDOUT: ->> resolving stmt `{return 0;}` (context_main.carbon:11)
  38. // CHECK:STDOUT: ->> resolving stmt `return 0;` (context_main.carbon:10)
  39. // CHECK:STDOUT: <<- finished resolving stmt `return 0;` (context_main.carbon:10)
  40. // CHECK:STDOUT: <<- finished resolving stmt `{return 0;}` (context_main.carbon:11)
  41. // CHECK:STDOUT: <<- finished resolving decl `fn Main` (context_main.carbon:11)
  42. // CHECK:STDOUT: ==> resolved `Main` as `fn Main` in `package` (<Main()>:0)
  43. // CHECK:STDOUT:
  44. // CHECK:STDOUT:
  45. // CHECK:STDOUT: * * * * * * * * * * resolving control flow * * * * * * * * * *
  46. // CHECK:STDOUT: ----------------------------------------------------------------
  47. // CHECK:STDOUT: ==> flow-resolved return statement `return 0;` in `fn Main` (context_main.carbon:10)
  48. // CHECK:STDOUT:
  49. // CHECK:STDOUT:
  50. // CHECK:STDOUT: * * * * * * * * * * type checking * * * * * * * * * *
  51. // CHECK:STDOUT: -------------------------------------------------------
  52. // CHECK:STDOUT:
  53. // CHECK:STDOUT: *** declaration at (context_main.carbon:7)
  54. // CHECK:STDOUT: ```
  55. // CHECK:STDOUT: interface TestInterface {
  56. // CHECK:STDOUT: }
  57. // CHECK:STDOUT:
  58. // CHECK:STDOUT: ```
  59. // CHECK:STDOUT: ->> declaring `interface TestInterface` (context_main.carbon:7)
  60. // CHECK:STDOUT: <<- finished declaring `interface TestInterface` (context_main.carbon:7)
  61. // CHECK:STDOUT:
  62. // CHECK:STDOUT: *** type checking declaration at (context_main.carbon:7)
  63. // CHECK:STDOUT: ```
  64. // CHECK:STDOUT: interface TestInterface {
  65. // CHECK:STDOUT: }
  66. // CHECK:STDOUT:
  67. // CHECK:STDOUT: ```
  68. // CHECK:STDOUT: ->> checking InterfaceDeclaration `interface TestInterface` (context_main.carbon:7)
  69. // CHECK:STDOUT: ->> checking `interface TestInterface` (context_main.carbon:7)
  70. // CHECK:STDOUT: ==> impl declarations for `interface TestInterface` (context_main.carbon:7)
  71. // CHECK:STDOUT: []
  72. // CHECK:STDOUT: [`bool` as `interface EqWith(U = bool)`,
  73. // CHECK:STDOUT: `i32` as `interface EqWith(U = i32)`,
  74. // CHECK:STDOUT: `String` as `interface EqWith(U = String)`,
  75. // CHECK:STDOUT: `i32` as `interface CompareWith(U = i32)`,
  76. // CHECK:STDOUT: `String` as `interface CompareWith(U = String)`,
  77. // CHECK:STDOUT: `i32` as `interface LessWith(U = i32)`,
  78. // CHECK:STDOUT: `String` as `interface LessWith(U = String)`,
  79. // CHECK:STDOUT: `i32` as `interface LessEqWith(U = i32)`,
  80. // CHECK:STDOUT: `String` as `interface LessEqWith(U = String)`,
  81. // CHECK:STDOUT: `i32` as `interface GreaterWith(U = i32)`,
  82. // CHECK:STDOUT: `String` as `interface GreaterWith(U = String)`,
  83. // CHECK:STDOUT: `i32` as `interface GreaterEqWith(U = i32)`,
  84. // CHECK:STDOUT: `String` as `interface GreaterEqWith(U = String)`,
  85. // CHECK:STDOUT: `i32` as `interface Negate`,
  86. // CHECK:STDOUT: `i32` as `interface AddWith(U = i32)`,
  87. // CHECK:STDOUT: `i32` as `interface SubWith(U = i32)`,
  88. // CHECK:STDOUT: `i32` as `interface MulWith(U = i32)`,
  89. // CHECK:STDOUT: `i32` as `interface DivWith(U = i32)`,
  90. // CHECK:STDOUT: `i32` as `interface ModWith(U = i32)`,
  91. // CHECK:STDOUT: `i32` as `interface BitComplement`,
  92. // CHECK:STDOUT: `i32` as `interface BitAndWith(U = i32)`,
  93. // CHECK:STDOUT: `i32` as `interface BitOrWith(U = i32)`,
  94. // CHECK:STDOUT: `i32` as `interface BitXorWith(U = i32)`,
  95. // CHECK:STDOUT: `i32` as `interface LeftShiftWith(U = i32)`,
  96. // CHECK:STDOUT: `i32` as `interface RightShiftWith(U = i32)`,
  97. // CHECK:STDOUT: `i32` as `interface Inc`,
  98. // CHECK:STDOUT: `i32` as `interface Dec`,
  99. // CHECK:STDOUT: `U` as `interface __EqualConverter` [0],
  100. // CHECK:STDOUT: `(T1,)` as `interface As(T = (U1,))` [0, 0, 0; 1, 1, 0, 0, 0],
  101. // CHECK:STDOUT: `(T1, T2)` as `interface As(T = (U1, U2))` [0, 0, 0; 0, 0, 1; 1, 1, 0, 0, 0; 1, 1, 0, 0, 1],
  102. // CHECK:STDOUT: `(T1, U1)` as `interface EqWith(U = (T2, U2))` [0, 0, 0; 0, 0, 1; 1, 1, 0, 0, 0; 1, 1, 0, 0, 1],
  103. // CHECK:STDOUT: `(T1, T2, T3)` as `interface As(T = (U1, U2, U3))` [0, 0, 0; 0, 0, 1; 0, 0, 2; 1, 1, 0, 0, 0; 1, 1, 0, 0, 1; 1, 1, 0, 0, 2],
  104. // CHECK:STDOUT: `T` as `interface ImplicitAs(T = U)` [0; 1, 1, 0],
  105. // CHECK:STDOUT: `T` as `interface As(T = U)` [0; 1, 1, 0],
  106. // CHECK:STDOUT: `T` as `interface ImplicitAs(T = U)` [0; 1, 1, 0],
  107. // CHECK:STDOUT: `T` as `interface As(T = U)` [0; 1, 1, 0],
  108. // CHECK:STDOUT: `T` as `interface AssignWith(U = U)` [0; 1, 1, 0],
  109. // CHECK:STDOUT: `T` as `interface AddAssignWith(U = U)` [0; 1, 1, 0],
  110. // CHECK:STDOUT: `T` as `interface SubAssignWith(U = U)` [0; 1, 1, 0],
  111. // CHECK:STDOUT: `T` as `interface MulAssignWith(U = U)` [0; 1, 1, 0],
  112. // CHECK:STDOUT: `T` as `interface DivAssignWith(U = U)` [0; 1, 1, 0],
  113. // CHECK:STDOUT: `T` as `interface ModAssignWith(U = U)` [0; 1, 1, 0],
  114. // CHECK:STDOUT: `T` as `interface BitAndAssignWith(U = U)` [0; 1, 1, 0],
  115. // CHECK:STDOUT: `T` as `interface BitOrAssignWith(U = U)` [0; 1, 1, 0],
  116. // CHECK:STDOUT: `T` as `interface BitXorAssignWith(U = U)` [0; 1, 1, 0],
  117. // CHECK:STDOUT: `T` as `interface LeftShiftAssignWith(U = U)` [0; 1, 1, 0],
  118. // CHECK:STDOUT: `T` as `interface RightShiftAssignWith(U = U)` [0; 1, 1, 0]]
  119. // CHECK:STDOUT: <<- finished checking `interface TestInterface` (context_main.carbon:7)
  120. // CHECK:STDOUT:
  121. // CHECK:STDOUT: *** declaration at (context_main.carbon:11)
  122. // CHECK:STDOUT: ```
  123. // CHECK:STDOUT: fn Main ()-> i32 {
  124. // CHECK:STDOUT: {
  125. // CHECK:STDOUT: return 0;
  126. // CHECK:STDOUT: }
  127. // CHECK:STDOUT:
  128. // CHECK:STDOUT: }
  129. // CHECK:STDOUT:
  130. // CHECK:STDOUT: ```
  131. // CHECK:STDOUT: ->> declaring function `Main` (context_main.carbon:11)
  132. // CHECK:STDOUT: ->> checking TuplePattern `()` (context_main.carbon:9)
  133. // CHECK:STDOUT: ->> checking IntTypeLiteral `i32` (context_main.carbon:9)
  134. // CHECK:STDOUT: >[] stack-push: ValueExpressionAction pos: 0 `i32` (context_main.carbon:9)
  135. // CHECK:STDOUT: ->> step ValueExpressionAction pos: 0 `i32` (context_main.carbon:9) --->
  136. // CHECK:STDOUT: >[] stack-push: ExpressionAction pos: 0 `i32` (context_main.carbon:9)
  137. // CHECK:STDOUT: ->> step ExpressionAction pos: 0 `i32` (context_main.carbon:9) --->
  138. // CHECK:STDOUT: <[] stack-pop: ExpressionAction pos: 0 `i32` (context_main.carbon:9)
  139. // CHECK:STDOUT: ->> step ValueExpressionAction pos: 1 `i32` results: [`i32`] (context_main.carbon:9) --->
  140. // CHECK:STDOUT: <[] stack-pop: ValueExpressionAction pos: 1 `i32` results: [`i32`] (context_main.carbon:9)
  141. // CHECK:STDOUT: ->> finished declaring function `Main` of type `fn () -> i32` (context_main.carbon:11)
  142. // CHECK:STDOUT:
  143. // CHECK:STDOUT: *** type checking declaration at (context_main.carbon:11)
  144. // CHECK:STDOUT: ```
  145. // CHECK:STDOUT: fn Main ()-> i32 {
  146. // CHECK:STDOUT: {
  147. // CHECK:STDOUT: return 0;
  148. // CHECK:STDOUT: }
  149. // CHECK:STDOUT:
  150. // CHECK:STDOUT: }
  151. // CHECK:STDOUT:
  152. // CHECK:STDOUT: ```
  153. // CHECK:STDOUT: ->> checking FunctionDeclaration `fn Main` (context_main.carbon:11)
  154. // CHECK:STDOUT: ->> checking function `Main` (context_main.carbon:11)
  155. // CHECK:STDOUT: ==> impl declarations for `fn Main` (context_main.carbon:11)
  156. // CHECK:STDOUT: []
  157. // CHECK:STDOUT: [`bool` as `interface EqWith(U = bool)`,
  158. // CHECK:STDOUT: `i32` as `interface EqWith(U = i32)`,
  159. // CHECK:STDOUT: `String` as `interface EqWith(U = String)`,
  160. // CHECK:STDOUT: `i32` as `interface CompareWith(U = i32)`,
  161. // CHECK:STDOUT: `String` as `interface CompareWith(U = String)`,
  162. // CHECK:STDOUT: `i32` as `interface LessWith(U = i32)`,
  163. // CHECK:STDOUT: `String` as `interface LessWith(U = String)`,
  164. // CHECK:STDOUT: `i32` as `interface LessEqWith(U = i32)`,
  165. // CHECK:STDOUT: `String` as `interface LessEqWith(U = String)`,
  166. // CHECK:STDOUT: `i32` as `interface GreaterWith(U = i32)`,
  167. // CHECK:STDOUT: `String` as `interface GreaterWith(U = String)`,
  168. // CHECK:STDOUT: `i32` as `interface GreaterEqWith(U = i32)`,
  169. // CHECK:STDOUT: `String` as `interface GreaterEqWith(U = String)`,
  170. // CHECK:STDOUT: `i32` as `interface Negate`,
  171. // CHECK:STDOUT: `i32` as `interface AddWith(U = i32)`,
  172. // CHECK:STDOUT: `i32` as `interface SubWith(U = i32)`,
  173. // CHECK:STDOUT: `i32` as `interface MulWith(U = i32)`,
  174. // CHECK:STDOUT: `i32` as `interface DivWith(U = i32)`,
  175. // CHECK:STDOUT: `i32` as `interface ModWith(U = i32)`,
  176. // CHECK:STDOUT: `i32` as `interface BitComplement`,
  177. // CHECK:STDOUT: `i32` as `interface BitAndWith(U = i32)`,
  178. // CHECK:STDOUT: `i32` as `interface BitOrWith(U = i32)`,
  179. // CHECK:STDOUT: `i32` as `interface BitXorWith(U = i32)`,
  180. // CHECK:STDOUT: `i32` as `interface LeftShiftWith(U = i32)`,
  181. // CHECK:STDOUT: `i32` as `interface RightShiftWith(U = i32)`,
  182. // CHECK:STDOUT: `i32` as `interface Inc`,
  183. // CHECK:STDOUT: `i32` as `interface Dec`,
  184. // CHECK:STDOUT: `U` as `interface __EqualConverter` [0],
  185. // CHECK:STDOUT: `(T1,)` as `interface As(T = (U1,))` [0, 0, 0; 1, 1, 0, 0, 0],
  186. // CHECK:STDOUT: `(T1, T2)` as `interface As(T = (U1, U2))` [0, 0, 0; 0, 0, 1; 1, 1, 0, 0, 0; 1, 1, 0, 0, 1],
  187. // CHECK:STDOUT: `(T1, U1)` as `interface EqWith(U = (T2, U2))` [0, 0, 0; 0, 0, 1; 1, 1, 0, 0, 0; 1, 1, 0, 0, 1],
  188. // CHECK:STDOUT: `(T1, T2, T3)` as `interface As(T = (U1, U2, U3))` [0, 0, 0; 0, 0, 1; 0, 0, 2; 1, 1, 0, 0, 0; 1, 1, 0, 0, 1; 1, 1, 0, 0, 2],
  189. // CHECK:STDOUT: `T` as `interface ImplicitAs(T = U)` [0; 1, 1, 0],
  190. // CHECK:STDOUT: `T` as `interface As(T = U)` [0; 1, 1, 0],
  191. // CHECK:STDOUT: `T` as `interface ImplicitAs(T = U)` [0; 1, 1, 0],
  192. // CHECK:STDOUT: `T` as `interface As(T = U)` [0; 1, 1, 0],
  193. // CHECK:STDOUT: `T` as `interface AssignWith(U = U)` [0; 1, 1, 0],
  194. // CHECK:STDOUT: `T` as `interface AddAssignWith(U = U)` [0; 1, 1, 0],
  195. // CHECK:STDOUT: `T` as `interface SubAssignWith(U = U)` [0; 1, 1, 0],
  196. // CHECK:STDOUT: `T` as `interface MulAssignWith(U = U)` [0; 1, 1, 0],
  197. // CHECK:STDOUT: `T` as `interface DivAssignWith(U = U)` [0; 1, 1, 0],
  198. // CHECK:STDOUT: `T` as `interface ModAssignWith(U = U)` [0; 1, 1, 0],
  199. // CHECK:STDOUT: `T` as `interface BitAndAssignWith(U = U)` [0; 1, 1, 0],
  200. // CHECK:STDOUT: `T` as `interface BitOrAssignWith(U = U)` [0; 1, 1, 0],
  201. // CHECK:STDOUT: `T` as `interface BitXorAssignWith(U = U)` [0; 1, 1, 0],
  202. // CHECK:STDOUT: `T` as `interface LeftShiftAssignWith(U = U)` [0; 1, 1, 0],
  203. // CHECK:STDOUT: `T` as `interface RightShiftAssignWith(U = U)` [0; 1, 1, 0]]
  204. // CHECK:STDOUT:
  205. // CHECK:STDOUT: *** type checking stmt at (context_main.carbon:11)
  206. // CHECK:STDOUT: ```
  207. // CHECK:STDOUT: {
  208. // CHECK:STDOUT: return 0;
  209. // CHECK:STDOUT: }
  210. // CHECK:STDOUT:
  211. // CHECK:STDOUT: ```
  212. // CHECK:STDOUT: ->> checking Block `{return 0;}` (context_main.carbon:11)
  213. // CHECK:STDOUT:
  214. // CHECK:STDOUT: *** type checking stmt at (context_main.carbon:10)
  215. // CHECK:STDOUT: ```
  216. // CHECK:STDOUT: return 0;
  217. // CHECK:STDOUT: ```
  218. // CHECK:STDOUT: ->> checking ReturnExpression `return 0;` (context_main.carbon:10)
  219. // CHECK:STDOUT: ->> checking IntLiteral `0` (context_main.carbon:10)
  220. // CHECK:STDOUT: ->> finished checking function `Main` (context_main.carbon:11)
  221. // CHECK:STDOUT: ->> checking CallExpression `Main()` (<Main()>:0)
  222. // CHECK:STDOUT: ->> checking IdentifierExpression `Main` (<Main()>:0)
  223. // CHECK:STDOUT: ->> checking TupleLiteral `()` (<Main()>:0)
  224. // CHECK:STDOUT: ->> checking call to function of type `fn () -> i32` with arguments of type `()` (<Main()>:0)
  225. // CHECK:STDOUT: ->> performing argument deduction for bindings: []
  226. // CHECK:STDOUT: ==> deduction succeeded with results: []
  227. // CHECK:STDOUT:
  228. // CHECK:STDOUT:
  229. // CHECK:STDOUT: * * * * * * * * * * resolving unformed variables * * * * * * * * * *
  230. // CHECK:STDOUT: ----------------------------------------------------------------------
  231. // CHECK:STDOUT: ->> resolving-unformed in decl `interface TestInterface` (context_main.carbon:7)
  232. // CHECK:STDOUT: ->> resolving-unformed in decl `fn Main` (context_main.carbon:11)
  233. // CHECK:STDOUT: ->> resolving-unformed in stmt `{return 0;}` (context_main.carbon:11)
  234. // CHECK:STDOUT: ->> resolving-unformed in stmt `return 0;` (context_main.carbon:10)
  235. // CHECK:STDOUT:
  236. // CHECK:STDOUT:
  237. // CHECK:STDOUT: * * * * * * * * * * printing declarations * * * * * * * * * *
  238. // CHECK:STDOUT: ---------------------------------------------------------------
  239. // CHECK:STDOUT: interface TestInterface {
  240. // CHECK:STDOUT: }
  241. // CHECK:STDOUT: fn Main ()-> i32 {
  242. // CHECK:STDOUT: {
  243. // CHECK:STDOUT: return 0;
  244. // CHECK:STDOUT: }
  245. // CHECK:STDOUT:
  246. // CHECK:STDOUT: }
  247. // CHECK:STDOUT:
  248. // CHECK:STDOUT:
  249. // CHECK:STDOUT: * * * * * * * * * * starting execution * * * * * * * * * *
  250. // CHECK:STDOUT: ------------------------------------------------------------
  251. // CHECK:STDOUT:
  252. // CHECK:STDOUT: - - - - - initializing globals - - - - -
  253. // CHECK:STDOUT: ------------------------------------------
  254. // CHECK:STDOUT: >[] stack-push: DeclarationAction pos: 0 `interface TestInterface` (context_main.carbon:7)
  255. // CHECK:STDOUT: ->> step DeclarationAction pos: 0 `interface TestInterface` (context_main.carbon:7) --->
  256. // CHECK:STDOUT:
  257. // CHECK:STDOUT: *** declaration at (context_main.carbon:7)
  258. // CHECK:STDOUT: ```
  259. // CHECK:STDOUT: interface TestInterface {
  260. // CHECK:STDOUT: }
  261. // CHECK:STDOUT: ```
  262. // CHECK:STDOUT: <[] stack-pop: DeclarationAction pos: 0 `interface TestInterface` (context_main.carbon:7)
  263. // CHECK:STDOUT: >[] stack-push: DeclarationAction pos: 0 `fn Main` (context_main.carbon:11)
  264. // CHECK:STDOUT: ->> step DeclarationAction pos: 0 `fn Main` (context_main.carbon:11) --->
  265. // CHECK:STDOUT:
  266. // CHECK:STDOUT: *** declaration at (context_main.carbon:11)
  267. // CHECK:STDOUT: ```
  268. // CHECK:STDOUT: fn Main ()-> i32 {
  269. // CHECK:STDOUT: {
  270. // CHECK:STDOUT: return 0;
  271. // CHECK:STDOUT: }
  272. // CHECK:STDOUT:
  273. // CHECK:STDOUT: }
  274. // CHECK:STDOUT: ```
  275. // CHECK:STDOUT: <[] stack-pop: DeclarationAction pos: 0 `fn Main` (context_main.carbon:11)
  276. // CHECK:STDOUT:
  277. // CHECK:STDOUT: - - - - - calling main function - - - - -
  278. // CHECK:STDOUT: -------------------------------------------
  279. // CHECK:STDOUT: >[] stack-push: ValueExpressionAction pos: 0 `Main()` (<Main()>:0)
  280. // CHECK:STDOUT: ->> step ValueExpressionAction pos: 0 `Main()` (<Main()>:0) --->
  281. // CHECK:STDOUT: >[] stack-push: ExpressionAction pos: 0 `Main()` (<Main()>:0)
  282. // CHECK:STDOUT: ->> step ExpressionAction pos: 0 `Main()` (<Main()>:0) --->
  283. // CHECK:STDOUT: >[] stack-push: ValueExpressionAction pos: 0 `Main` (<Main()>:0)
  284. // CHECK:STDOUT: ->> step ValueExpressionAction pos: 0 `Main` (<Main()>:0) --->
  285. // CHECK:STDOUT: >[] stack-push: ExpressionAction pos: 0 `Main` (<Main()>:0)
  286. // CHECK:STDOUT: ->> step ExpressionAction pos: 0 `Main` (<Main()>:0) --->
  287. // CHECK:STDOUT: <[] stack-pop: ExpressionAction pos: 0 `Main` (<Main()>:0)
  288. // CHECK:STDOUT: ->> step ValueExpressionAction pos: 1 `Main` results: [`fun<Main>`] (<Main()>:0) --->
  289. // CHECK:STDOUT: <[] stack-pop: ValueExpressionAction pos: 1 `Main` results: [`fun<Main>`] (<Main()>:0)
  290. // CHECK:STDOUT: ->> step ExpressionAction pos: 1 `Main()` results: [`fun<Main>`] scope: [] (<Main()>:0) --->
  291. // CHECK:STDOUT: -() calling function: fun<Main>
  292. // CHECK:STDOUT: === match pattern `()`
  293. // CHECK:STDOUT: from value expression with value `()`
  294. // CHECK:STDOUT: >[] stack-push: ScopeAction pos: 0 scope: [] (None)
  295. // CHECK:STDOUT: >[] stack-push: StatementAction pos: 0 `{return 0;}` (context_main.carbon:11)
  296. // CHECK:STDOUT: ->> step StatementAction pos: 0 `{return 0;}` (context_main.carbon:11) --->
  297. // CHECK:STDOUT:
  298. // CHECK:STDOUT: *** statement at (context_main.carbon:11)
  299. // CHECK:STDOUT: ```
  300. // CHECK:STDOUT: {
  301. // CHECK:STDOUT: return 0;
  302. // CHECK:STDOUT: }
  303. // CHECK:STDOUT:
  304. // CHECK:STDOUT: ```
  305. // CHECK:STDOUT: >[] stack-push: StatementAction pos: 0 `return 0;` (context_main.carbon:10)
  306. // CHECK:STDOUT: ->> step StatementAction pos: 0 `return 0;` (context_main.carbon:10) --->
  307. // CHECK:STDOUT:
  308. // CHECK:STDOUT: *** statement at (context_main.carbon:10)
  309. // CHECK:STDOUT: ```
  310. // CHECK:STDOUT: return 0;
  311. // CHECK:STDOUT: ```
  312. // CHECK:STDOUT: >[] stack-push: ValueExpressionAction pos: 0 `0` (context_main.carbon:10)
  313. // CHECK:STDOUT: ->> step ValueExpressionAction pos: 0 `0` (context_main.carbon:10) --->
  314. // CHECK:STDOUT: >[] stack-push: ExpressionAction pos: 0 `0` (context_main.carbon:10)
  315. // CHECK:STDOUT: ->> step ExpressionAction pos: 0 `0` (context_main.carbon:10) --->
  316. // CHECK:STDOUT: <[] stack-pop: ExpressionAction pos: 0 `0` (context_main.carbon:10)
  317. // CHECK:STDOUT: ->> step ValueExpressionAction pos: 1 `0` results: [`0`] (context_main.carbon:10) --->
  318. // CHECK:STDOUT: <[] stack-pop: ValueExpressionAction pos: 1 `0` results: [`0`] (context_main.carbon:10)
  319. // CHECK:STDOUT: ->> step StatementAction pos: 1 `return 0;` results: [`0`] (context_main.carbon:10) --->
  320. // CHECK:STDOUT:
  321. // CHECK:STDOUT: *** statement at (context_main.carbon:10)
  322. // CHECK:STDOUT: ```
  323. // CHECK:STDOUT: return 0;
  324. // CHECK:STDOUT: ```
  325. // CHECK:STDOUT: <[] stack-pop: StatementAction pos: 1 `return 0;` results: [`0`] (context_main.carbon:10)
  326. // CHECK:STDOUT: <[] stack-pop: StatementAction pos: 1 `{return 0;}` scope: [] (context_main.carbon:11)
  327. // CHECK:STDOUT: <[] stack-pop: ScopeAction pos: 0 scope: [] (None)
  328. // CHECK:STDOUT: >[] stack-push: CleanUpAction pos: 0 scope: [] (stack cleanup:1)
  329. // CHECK:STDOUT: >[] stack-push: CleanUpAction pos: 0 scope: [] (stack cleanup:1)
  330. // CHECK:STDOUT: ->> step CleanUpAction pos: 0 scope: [] (stack cleanup:1) --->
  331. // CHECK:STDOUT: <[] stack-pop: CleanUpAction pos: 0 scope: [] (stack cleanup:1)
  332. // CHECK:STDOUT: ->> step CleanUpAction pos: 0 scope: [] (stack cleanup:1) --->
  333. // CHECK:STDOUT: <[] stack-pop: CleanUpAction pos: 0 scope: [] (stack cleanup:1)
  334. // CHECK:STDOUT: ->> step ExpressionAction pos: 2 `Main()` results: [`fun<Main>`, `0`] scope: [] (<Main()>:0) --->
  335. // CHECK:STDOUT: <[] stack-pop: ExpressionAction pos: 2 `Main()` results: [`fun<Main>`, `0`] scope: [] (<Main()>:0)
  336. // CHECK:STDOUT: >[] stack-push: CleanUpAction pos: 0 scope: [] (stack cleanup:1)
  337. // CHECK:STDOUT: ->> step CleanUpAction pos: 0 scope: [] (stack cleanup:1) --->
  338. // CHECK:STDOUT: <[] stack-pop: CleanUpAction pos: 0 scope: [] (stack cleanup:1)
  339. // CHECK:STDOUT: ->> step ValueExpressionAction pos: 1 `Main()` results: [`0`] (<Main()>:0) --->
  340. // CHECK:STDOUT: <[] stack-pop: ValueExpressionAction pos: 1 `Main()` results: [`0`] (<Main()>:0)
  341. // CHECK:STDOUT: ==> interpreter result: 0
  342. // CHECK:STDOUT:
  343. // CHECK:STDOUT:
  344. // CHECK:STDOUT: * * * * * * * * * * printing timing * * * * * * * * * *
  345. // CHECK:STDOUT: ---------------------------------------------------------
  346. // CHECK:STDOUT: Time elapsed in ExecProgram: {{\d+}}ms
  347. // CHECK:STDOUT: Time elapsed in AnalyzeProgram: {{\d+}}ms
  348. // CHECK:STDOUT: Time elapsed in AddPrelude: {{\d+}}ms
  349. // CHECK:STDOUT: Time elapsed in Parse: {{\d+}}ms
  350. // CHECK:STDOUT: result: 0