6b0e214022e8279a0f00ac842fea663a7d7bc56e 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296
  1. compilation_unit {
  2. package_statement {
  3. package_name: "Foo"
  4. }
  5. is_api: true
  6. declarations {
  7. interface {
  8. name: "A"
  9. members {
  10. function {
  11. name: "F"
  12. self_pattern {
  13. binding_pattern {
  14. name: "self"
  15. type {
  16. expression_pattern {
  17. expression {
  18. identifier {
  19. name: "Self"
  20. }
  21. }
  22. }
  23. }
  24. }
  25. }
  26. param_pattern {
  27. fields {
  28. binding_pattern {
  29. name: "o"
  30. type {
  31. expression_pattern {
  32. expression {
  33. identifier {
  34. name: "Self"
  35. }
  36. }
  37. }
  38. }
  39. }
  40. }
  41. }
  42. return_term {
  43. kind: Expression
  44. type {
  45. identifier {
  46. name: "Self"
  47. }
  48. }
  49. }
  50. }
  51. }
  52. self {
  53. name: "Self"
  54. type {
  55. type_type_literal {
  56. }
  57. }
  58. }
  59. }
  60. }
  61. declarations {
  62. class_declaration {
  63. name: "X"
  64. members {
  65. impl {
  66. kind: InternalImpl
  67. impl_type {
  68. identifier {
  69. name: "Self"
  70. }
  71. }
  72. interface {
  73. identifier {
  74. name: "A"
  75. }
  76. }
  77. members {
  78. function {
  79. name: "F"
  80. self_pattern {
  81. binding_pattern {
  82. name: "self"
  83. type {
  84. expression_pattern {
  85. expression {
  86. identifier {
  87. name: "Self"
  88. }
  89. }
  90. }
  91. }
  92. }
  93. }
  94. param_pattern {
  95. fields {
  96. binding_pattern {
  97. name: "o"
  98. type {
  99. expression_pattern {
  100. expression {
  101. identifier {
  102. name: "Self"
  103. }
  104. }
  105. }
  106. }
  107. }
  108. }
  109. }
  110. return_term {
  111. kind: Expression
  112. type {
  113. identifier {
  114. name: "Self"
  115. }
  116. }
  117. }
  118. body {
  119. statements {
  120. return_expression_statement {
  121. expression {
  122. struct_literal {
  123. fields {
  124. name: "n"
  125. expression {
  126. operator {
  127. op: Add
  128. arguments {
  129. simple_member_access {
  130. field: "n"
  131. object {
  132. identifier {
  133. name: "self"
  134. }
  135. }
  136. }
  137. }
  138. arguments {
  139. simple_member_access {
  140. field: "n"
  141. object {
  142. identifier {
  143. name: "o"
  144. }
  145. }
  146. }
  147. }
  148. }
  149. }
  150. }
  151. }
  152. }
  153. }
  154. }
  155. }
  156. }
  157. }
  158. }
  159. }
  160. members {
  161. variable {
  162. binding {
  163. name: "n"
  164. type {
  165. expression_pattern {
  166. expression {
  167. int_type_literal {
  168. }
  169. }
  170. }
  171. }
  172. }
  173. }
  174. }
  175. }
  176. }
  177. declarations {
  178. function {
  179. name: "Main"
  180. param_pattern {
  181. }
  182. return_term {
  183. kind: Expression
  184. type {
  185. int_type_literal {
  186. }
  187. }
  188. }
  189. body {
  190. statements {
  191. variable_definition {
  192. pattern {
  193. binding_pattern {
  194. name: "v"
  195. type {
  196. expression_pattern {
  197. expression {
  198. identifier {
  199. name: "X"
  200. }
  201. }
  202. }
  203. }
  204. }
  205. }
  206. init {
  207. struct_literal {
  208. fields {
  209. name: "n"
  210. expression {
  211. int_literal {
  212. value: 1
  213. }
  214. }
  215. }
  216. }
  217. }
  218. is_returned: false
  219. }
  220. }
  221. statements {
  222. variable_definition {
  223. pattern {
  224. binding_pattern {
  225. name: "w"
  226. type {
  227. expression_pattern {
  228. expression {
  229. identifier {
  230. name: "X"
  231. }
  232. }
  233. }
  234. }
  235. }
  236. }
  237. init {
  238. struct_literal {
  239. fields {
  240. name: "n"
  241. expression {
  242. int_literal {
  243. value: 2
  244. }
  245. }
  246. }
  247. }
  248. }
  249. is_returned: false
  250. }
  251. }
  252. statements {
  253. return_expression_statement {
  254. expression {
  255. simple_member_access {
  256. field: "n"
  257. object {
  258. call {
  259. function {
  260. compound_member_access {
  261. object {
  262. identifier {
  263. name: "v"
  264. }
  265. }
  266. path {
  267. simple_member_access {
  268. field: "F"
  269. object {
  270. identifier {
  271. name: "A"
  272. }
  273. }
  274. }
  275. }
  276. }
  277. }
  278. argument {
  279. tuple_literal {
  280. fields {
  281. identifier {
  282. name: "w"
  283. }
  284. }
  285. }
  286. }
  287. }
  288. }
  289. }
  290. }
  291. }
  292. }
  293. }
  294. }
  295. }
  296. }