ce21c01f50fa918dde114d98533c177667957b44 7.6 KB

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