6ae5582a206dd285cc4b6a16c4b43ee0eac60513 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373
  1. compilation_unit {
  2. package_statement {
  3. package_name: "ExplorerTest"
  4. }
  5. is_api: true
  6. declarations {
  7. interface {
  8. name {
  9. name: "Number"
  10. }
  11. members {
  12. function {
  13. name {
  14. name: "Zero"
  15. }
  16. param_pattern {
  17. }
  18. return_term {
  19. kind: Expression
  20. type {
  21. identifier {
  22. name: "Self"
  23. }
  24. }
  25. }
  26. }
  27. }
  28. members {
  29. function {
  30. name {
  31. name: "Add"
  32. }
  33. self_pattern {
  34. binding_pattern {
  35. name: "self"
  36. type {
  37. expression_pattern {
  38. expression {
  39. identifier {
  40. name: "Self"
  41. }
  42. }
  43. }
  44. }
  45. }
  46. }
  47. param_pattern {
  48. fields {
  49. binding_pattern {
  50. name: "other"
  51. type {
  52. expression_pattern {
  53. expression {
  54. identifier {
  55. name: "Self"
  56. }
  57. }
  58. }
  59. }
  60. }
  61. }
  62. }
  63. return_term {
  64. kind: Expression
  65. type {
  66. identifier {
  67. name: "Self"
  68. }
  69. }
  70. }
  71. }
  72. }
  73. }
  74. }
  75. declarations {
  76. impl {
  77. kind: ExternalImpl
  78. impl_type {
  79. int_type_literal {
  80. }
  81. }
  82. interface {
  83. identifier {
  84. name: "Number"
  85. }
  86. }
  87. members {
  88. function {
  89. name {
  90. name: "Zero"
  91. }
  92. param_pattern {
  93. }
  94. return_term {
  95. kind: Expression
  96. type {
  97. int_type_literal {
  98. }
  99. }
  100. }
  101. body {
  102. statements {
  103. return_expression_statement {
  104. expression {
  105. int_literal {
  106. value: 0
  107. }
  108. }
  109. }
  110. }
  111. }
  112. }
  113. }
  114. members {
  115. function {
  116. name {
  117. name: "Add"
  118. }
  119. self_pattern {
  120. binding_pattern {
  121. name: "self"
  122. type {
  123. expression_pattern {
  124. expression {
  125. int_type_literal {
  126. }
  127. }
  128. }
  129. }
  130. }
  131. }
  132. param_pattern {
  133. fields {
  134. binding_pattern {
  135. name: "other"
  136. type {
  137. expression_pattern {
  138. expression {
  139. int_type_literal {
  140. }
  141. }
  142. }
  143. }
  144. }
  145. }
  146. }
  147. return_term {
  148. kind: Expression
  149. type {
  150. int_type_literal {
  151. }
  152. }
  153. }
  154. body {
  155. statements {
  156. return_expression_statement {
  157. expression {
  158. operator {
  159. op: Add
  160. arguments {
  161. identifier {
  162. name: "self"
  163. }
  164. }
  165. arguments {
  166. identifier {
  167. name: "other"
  168. }
  169. }
  170. }
  171. }
  172. }
  173. }
  174. }
  175. }
  176. }
  177. }
  178. }
  179. declarations {
  180. class_declaration {
  181. name {
  182. name: "A"
  183. }
  184. members {
  185. variable {
  186. binding {
  187. name: "value_a"
  188. type {
  189. expression_pattern {
  190. expression {
  191. identifier {
  192. name: "T"
  193. }
  194. }
  195. }
  196. }
  197. }
  198. }
  199. }
  200. type_params {
  201. fields {
  202. generic_binding {
  203. name: "T"
  204. type {
  205. identifier {
  206. name: "Number"
  207. }
  208. }
  209. }
  210. }
  211. }
  212. }
  213. }
  214. declarations {
  215. class_declaration {
  216. name {
  217. name: "B"
  218. }
  219. members {
  220. variable {
  221. binding {
  222. name: "value_b"
  223. type {
  224. expression_pattern {
  225. expression {
  226. int_type_literal {
  227. }
  228. }
  229. }
  230. }
  231. }
  232. }
  233. }
  234. }
  235. }
  236. declarations {
  237. function {
  238. name {
  239. name: "Main"
  240. }
  241. param_pattern {
  242. }
  243. return_term {
  244. kind: Expression
  245. type {
  246. int_type_literal {
  247. }
  248. }
  249. }
  250. body {
  251. statements {
  252. variable_definition {
  253. pattern {
  254. binding_pattern {
  255. name: "b"
  256. type {
  257. expression_pattern {
  258. expression {
  259. identifier {
  260. name: "B"
  261. }
  262. }
  263. }
  264. }
  265. }
  266. }
  267. init {
  268. struct_literal {
  269. fields {
  270. name: "base"
  271. expression {
  272. struct_literal {
  273. fields {
  274. name: "value_a"
  275. expression {
  276. int_literal {
  277. value: 1
  278. }
  279. }
  280. }
  281. }
  282. }
  283. }
  284. fields {
  285. name: "value_b"
  286. expression {
  287. int_literal {
  288. value: 2
  289. }
  290. }
  291. }
  292. }
  293. }
  294. is_returned: false
  295. }
  296. }
  297. statements {
  298. expression_statement {
  299. expression {
  300. call {
  301. function {
  302. identifier {
  303. name: "Print"
  304. }
  305. }
  306. argument {
  307. tuple_literal {
  308. fields {
  309. string_literal {
  310. value: "{0}"
  311. }
  312. }
  313. fields {
  314. simple_member_access {
  315. field: "value_b"
  316. object {
  317. identifier {
  318. name: "b"
  319. }
  320. }
  321. }
  322. }
  323. }
  324. }
  325. }
  326. }
  327. }
  328. }
  329. statements {
  330. expression_statement {
  331. expression {
  332. call {
  333. function {
  334. identifier {
  335. name: "Print"
  336. }
  337. }
  338. argument {
  339. tuple_literal {
  340. fields {
  341. string_literal {
  342. value: "{0}"
  343. }
  344. }
  345. fields {
  346. simple_member_access {
  347. field: "value_a"
  348. object {
  349. identifier {
  350. name: "b"
  351. }
  352. }
  353. }
  354. }
  355. }
  356. }
  357. }
  358. }
  359. }
  360. }
  361. statements {
  362. return_expression_statement {
  363. expression {
  364. int_literal {
  365. value: 0
  366. }
  367. }
  368. }
  369. }
  370. }
  371. }
  372. }
  373. }