b29000a8e0ea6fec127c857cb6962831455a6864 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625
  1. compilation_unit {
  2. package_statement {
  3. package_name: "ExplorerTest"
  4. }
  5. is_api: true
  6. declarations {
  7. class_declaration {
  8. name {
  9. name: "Cell"
  10. }
  11. members {
  12. function {
  13. name {
  14. name: "Create"
  15. }
  16. param_pattern {
  17. fields {
  18. binding_pattern {
  19. name: "x"
  20. type {
  21. expression_pattern {
  22. expression {
  23. identifier {
  24. name: "T"
  25. }
  26. }
  27. }
  28. }
  29. }
  30. }
  31. }
  32. return_term {
  33. kind: Expression
  34. type {
  35. call {
  36. function {
  37. identifier {
  38. name: "Cell"
  39. }
  40. }
  41. argument {
  42. tuple_literal {
  43. fields {
  44. identifier {
  45. name: "T"
  46. }
  47. }
  48. }
  49. }
  50. }
  51. }
  52. }
  53. body {
  54. statements {
  55. return_expression_statement {
  56. expression {
  57. struct_literal {
  58. fields {
  59. name: "data"
  60. expression {
  61. identifier {
  62. name: "x"
  63. }
  64. }
  65. }
  66. }
  67. }
  68. }
  69. }
  70. }
  71. }
  72. }
  73. members {
  74. function {
  75. name {
  76. name: "Get"
  77. }
  78. self_pattern {
  79. binding_pattern {
  80. name: "self"
  81. type {
  82. expression_pattern {
  83. expression {
  84. identifier {
  85. name: "Self"
  86. }
  87. }
  88. }
  89. }
  90. }
  91. }
  92. param_pattern {
  93. }
  94. return_term {
  95. kind: Expression
  96. type {
  97. identifier {
  98. name: "T"
  99. }
  100. }
  101. }
  102. body {
  103. statements {
  104. return_expression_statement {
  105. expression {
  106. simple_member_access {
  107. field: "data"
  108. object {
  109. identifier {
  110. name: "self"
  111. }
  112. }
  113. }
  114. }
  115. }
  116. }
  117. }
  118. }
  119. }
  120. members {
  121. function {
  122. name {
  123. name: "Put"
  124. }
  125. self_pattern {
  126. addr_pattern {
  127. binding_pattern {
  128. name: "self"
  129. type {
  130. expression_pattern {
  131. expression {
  132. operator {
  133. op: Ptr
  134. arguments {
  135. identifier {
  136. name: "Self"
  137. }
  138. }
  139. }
  140. }
  141. }
  142. }
  143. }
  144. }
  145. }
  146. param_pattern {
  147. fields {
  148. binding_pattern {
  149. name: "x"
  150. type {
  151. expression_pattern {
  152. expression {
  153. identifier {
  154. name: "T"
  155. }
  156. }
  157. }
  158. }
  159. }
  160. }
  161. }
  162. return_term {
  163. kind: Omitted
  164. }
  165. body {
  166. statements {
  167. assign {
  168. lhs {
  169. simple_member_access {
  170. field: "data"
  171. object {
  172. operator {
  173. op: Deref
  174. arguments {
  175. identifier {
  176. name: "self"
  177. }
  178. }
  179. }
  180. }
  181. }
  182. }
  183. rhs {
  184. identifier {
  185. name: "x"
  186. }
  187. }
  188. op: Plain
  189. }
  190. }
  191. }
  192. }
  193. }
  194. members {
  195. function {
  196. name {
  197. name: "CreateOther"
  198. }
  199. deduced_parameters {
  200. name: "U"
  201. type {
  202. type_type_literal {
  203. }
  204. }
  205. }
  206. self_pattern {
  207. binding_pattern {
  208. name: "self"
  209. type {
  210. expression_pattern {
  211. expression {
  212. identifier {
  213. name: "Self"
  214. }
  215. }
  216. }
  217. }
  218. }
  219. }
  220. param_pattern {
  221. fields {
  222. binding_pattern {
  223. name: "x"
  224. type {
  225. expression_pattern {
  226. expression {
  227. identifier {
  228. name: "U"
  229. }
  230. }
  231. }
  232. }
  233. }
  234. }
  235. }
  236. return_term {
  237. kind: Expression
  238. type {
  239. call {
  240. function {
  241. identifier {
  242. name: "Cell"
  243. }
  244. }
  245. argument {
  246. tuple_literal {
  247. fields {
  248. identifier {
  249. name: "U"
  250. }
  251. }
  252. }
  253. }
  254. }
  255. }
  256. }
  257. body {
  258. statements {
  259. return_expression_statement {
  260. expression {
  261. struct_literal {
  262. fields {
  263. name: "data"
  264. expression {
  265. identifier {
  266. name: "x"
  267. }
  268. }
  269. }
  270. }
  271. }
  272. }
  273. }
  274. }
  275. }
  276. }
  277. members {
  278. variable {
  279. binding {
  280. name: "data"
  281. type {
  282. expression_pattern {
  283. expression {
  284. identifier {
  285. name: "T"
  286. }
  287. }
  288. }
  289. }
  290. }
  291. }
  292. }
  293. type_params {
  294. fields {
  295. generic_binding {
  296. name: "T"
  297. type {
  298. type_type_literal {
  299. }
  300. }
  301. }
  302. }
  303. }
  304. }
  305. }
  306. declarations {
  307. class_declaration {
  308. name {
  309. name: "Integer"
  310. }
  311. members {
  312. variable {
  313. binding {
  314. name: "int"
  315. type {
  316. expression_pattern {
  317. expression {
  318. int_type_literal {
  319. }
  320. }
  321. }
  322. }
  323. }
  324. }
  325. }
  326. }
  327. }
  328. declarations {
  329. function {
  330. name {
  331. name: "Main"
  332. }
  333. param_pattern {
  334. }
  335. return_term {
  336. kind: Expression
  337. type {
  338. int_type_literal {
  339. }
  340. }
  341. }
  342. body {
  343. statements {
  344. variable_definition {
  345. pattern {
  346. binding_pattern {
  347. name: "i"
  348. type {
  349. expression_pattern {
  350. expression {
  351. identifier {
  352. name: "Integer"
  353. }
  354. }
  355. }
  356. }
  357. }
  358. }
  359. init {
  360. struct_literal {
  361. fields {
  362. name: "int"
  363. expression {
  364. int_literal {
  365. value: 1
  366. }
  367. }
  368. }
  369. }
  370. }
  371. is_returned: false
  372. }
  373. }
  374. statements {
  375. variable_definition {
  376. pattern {
  377. binding_pattern {
  378. name: "c"
  379. type {
  380. expression_pattern {
  381. expression {
  382. call {
  383. function {
  384. identifier {
  385. name: "Cell"
  386. }
  387. }
  388. argument {
  389. tuple_literal {
  390. fields {
  391. identifier {
  392. name: "Integer"
  393. }
  394. }
  395. }
  396. }
  397. }
  398. }
  399. }
  400. }
  401. }
  402. }
  403. init {
  404. call {
  405. function {
  406. simple_member_access {
  407. field: "Create"
  408. object {
  409. call {
  410. function {
  411. identifier {
  412. name: "Cell"
  413. }
  414. }
  415. argument {
  416. tuple_literal {
  417. fields {
  418. identifier {
  419. name: "Integer"
  420. }
  421. }
  422. }
  423. }
  424. }
  425. }
  426. }
  427. }
  428. argument {
  429. tuple_literal {
  430. fields {
  431. identifier {
  432. name: "i"
  433. }
  434. }
  435. }
  436. }
  437. }
  438. }
  439. is_returned: false
  440. }
  441. }
  442. statements {
  443. assign {
  444. lhs {
  445. identifier {
  446. name: "i"
  447. }
  448. }
  449. rhs {
  450. struct_literal {
  451. fields {
  452. name: "int"
  453. expression {
  454. int_literal {
  455. value: 0
  456. }
  457. }
  458. }
  459. }
  460. }
  461. op: Plain
  462. }
  463. }
  464. statements {
  465. expression_statement {
  466. expression {
  467. call {
  468. function {
  469. simple_member_access {
  470. field: "Put"
  471. object {
  472. identifier {
  473. name: "c"
  474. }
  475. }
  476. }
  477. }
  478. argument {
  479. tuple_literal {
  480. fields {
  481. identifier {
  482. name: "i"
  483. }
  484. }
  485. }
  486. }
  487. }
  488. }
  489. }
  490. }
  491. statements {
  492. variable_definition {
  493. pattern {
  494. binding_pattern {
  495. name: "j"
  496. type {
  497. expression_pattern {
  498. expression {
  499. identifier {
  500. name: "Integer"
  501. }
  502. }
  503. }
  504. }
  505. }
  506. }
  507. init {
  508. call {
  509. function {
  510. simple_member_access {
  511. field: "Get"
  512. object {
  513. identifier {
  514. name: "c"
  515. }
  516. }
  517. }
  518. }
  519. argument {
  520. tuple_literal {
  521. }
  522. }
  523. }
  524. }
  525. is_returned: false
  526. }
  527. }
  528. statements {
  529. variable_definition {
  530. pattern {
  531. binding_pattern {
  532. name: "d"
  533. type {
  534. expression_pattern {
  535. expression {
  536. call {
  537. function {
  538. identifier {
  539. name: "Cell"
  540. }
  541. }
  542. argument {
  543. tuple_literal {
  544. fields {
  545. identifier {
  546. name: "Integer"
  547. }
  548. }
  549. }
  550. }
  551. }
  552. }
  553. }
  554. }
  555. }
  556. }
  557. init {
  558. call {
  559. function {
  560. simple_member_access {
  561. field: "CreateOther"
  562. object {
  563. identifier {
  564. name: "c"
  565. }
  566. }
  567. }
  568. }
  569. argument {
  570. tuple_literal {
  571. fields {
  572. identifier {
  573. name: "j"
  574. }
  575. }
  576. }
  577. }
  578. }
  579. }
  580. is_returned: false
  581. }
  582. }
  583. statements {
  584. return_expression_statement {
  585. expression {
  586. operator {
  587. op: Add
  588. arguments {
  589. simple_member_access {
  590. field: "int"
  591. object {
  592. simple_member_access {
  593. field: "data"
  594. object {
  595. identifier {
  596. name: "c"
  597. }
  598. }
  599. }
  600. }
  601. }
  602. }
  603. arguments {
  604. simple_member_access {
  605. field: "int"
  606. object {
  607. simple_member_access {
  608. field: "data"
  609. object {
  610. identifier {
  611. name: "d"
  612. }
  613. }
  614. }
  615. }
  616. }
  617. }
  618. }
  619. }
  620. }
  621. }
  622. }
  623. }
  624. }
  625. }