277dd8d5c877be6c18233440ee001ace701283c9 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884
  1. compilation_unit {
  2. package_statement {
  3. package_name: "ExplorerTest"
  4. }
  5. is_api: true
  6. declarations {
  7. interface {
  8. name {
  9. name: "Vector"
  10. }
  11. members {
  12. function {
  13. name {
  14. name: "Add"
  15. }
  16. self_pattern {
  17. binding_pattern {
  18. name: "self"
  19. type {
  20. expression_pattern {
  21. expression {
  22. identifier {
  23. name: "Self"
  24. }
  25. }
  26. }
  27. }
  28. }
  29. }
  30. param_pattern {
  31. fields {
  32. binding_pattern {
  33. name: "b"
  34. type {
  35. expression_pattern {
  36. expression {
  37. identifier {
  38. name: "Self"
  39. }
  40. }
  41. }
  42. }
  43. }
  44. }
  45. }
  46. return_term {
  47. kind: Expression
  48. type {
  49. identifier {
  50. name: "Self"
  51. }
  52. }
  53. }
  54. }
  55. }
  56. members {
  57. function {
  58. name {
  59. name: "Scale"
  60. }
  61. self_pattern {
  62. binding_pattern {
  63. name: "self"
  64. type {
  65. expression_pattern {
  66. expression {
  67. identifier {
  68. name: "Self"
  69. }
  70. }
  71. }
  72. }
  73. }
  74. }
  75. param_pattern {
  76. fields {
  77. binding_pattern {
  78. name: "v"
  79. type {
  80. expression_pattern {
  81. expression {
  82. identifier {
  83. name: "T"
  84. }
  85. }
  86. }
  87. }
  88. }
  89. }
  90. }
  91. return_term {
  92. kind: Expression
  93. type {
  94. identifier {
  95. name: "Self"
  96. }
  97. }
  98. }
  99. }
  100. }
  101. }
  102. }
  103. declarations {
  104. class_declaration {
  105. name {
  106. name: "Point"
  107. }
  108. members {
  109. variable {
  110. binding {
  111. name: "x"
  112. type {
  113. expression_pattern {
  114. expression {
  115. identifier {
  116. name: "T"
  117. }
  118. }
  119. }
  120. }
  121. }
  122. }
  123. }
  124. members {
  125. variable {
  126. binding {
  127. name: "y"
  128. type {
  129. expression_pattern {
  130. expression {
  131. identifier {
  132. name: "T"
  133. }
  134. }
  135. }
  136. }
  137. }
  138. }
  139. }
  140. type_params {
  141. fields {
  142. generic_binding {
  143. name: "T"
  144. type {
  145. type_type_literal {
  146. }
  147. }
  148. }
  149. }
  150. }
  151. }
  152. }
  153. declarations {
  154. impl {
  155. kind: ExternalImpl
  156. impl_type {
  157. call {
  158. function {
  159. identifier {
  160. name: "Point"
  161. }
  162. }
  163. argument {
  164. tuple_literal {
  165. fields {
  166. int_type_literal {
  167. }
  168. }
  169. }
  170. }
  171. }
  172. }
  173. interface {
  174. call {
  175. function {
  176. identifier {
  177. name: "Vector"
  178. }
  179. }
  180. argument {
  181. tuple_literal {
  182. fields {
  183. int_type_literal {
  184. }
  185. }
  186. }
  187. }
  188. }
  189. }
  190. members {
  191. function {
  192. name {
  193. name: "Add"
  194. }
  195. self_pattern {
  196. binding_pattern {
  197. name: "self"
  198. type {
  199. expression_pattern {
  200. expression {
  201. identifier {
  202. name: "Self"
  203. }
  204. }
  205. }
  206. }
  207. }
  208. }
  209. param_pattern {
  210. fields {
  211. binding_pattern {
  212. name: "b"
  213. type {
  214. expression_pattern {
  215. expression {
  216. identifier {
  217. name: "Self"
  218. }
  219. }
  220. }
  221. }
  222. }
  223. }
  224. }
  225. return_term {
  226. kind: Expression
  227. type {
  228. identifier {
  229. name: "Self"
  230. }
  231. }
  232. }
  233. body {
  234. statements {
  235. return_expression_statement {
  236. expression {
  237. struct_literal {
  238. fields {
  239. name: "x"
  240. expression {
  241. operator {
  242. op: Add
  243. arguments {
  244. simple_member_access {
  245. field: "x"
  246. object {
  247. identifier {
  248. name: "self"
  249. }
  250. }
  251. }
  252. }
  253. arguments {
  254. simple_member_access {
  255. field: "x"
  256. object {
  257. identifier {
  258. name: "b"
  259. }
  260. }
  261. }
  262. }
  263. }
  264. }
  265. }
  266. fields {
  267. name: "y"
  268. expression {
  269. operator {
  270. op: Add
  271. arguments {
  272. simple_member_access {
  273. field: "y"
  274. object {
  275. identifier {
  276. name: "self"
  277. }
  278. }
  279. }
  280. }
  281. arguments {
  282. simple_member_access {
  283. field: "y"
  284. object {
  285. identifier {
  286. name: "b"
  287. }
  288. }
  289. }
  290. }
  291. }
  292. }
  293. }
  294. }
  295. }
  296. }
  297. }
  298. }
  299. }
  300. }
  301. members {
  302. function {
  303. name {
  304. name: "Scale"
  305. }
  306. self_pattern {
  307. binding_pattern {
  308. name: "self"
  309. type {
  310. expression_pattern {
  311. expression {
  312. identifier {
  313. name: "Self"
  314. }
  315. }
  316. }
  317. }
  318. }
  319. }
  320. param_pattern {
  321. fields {
  322. binding_pattern {
  323. name: "v"
  324. type {
  325. expression_pattern {
  326. expression {
  327. int_type_literal {
  328. }
  329. }
  330. }
  331. }
  332. }
  333. }
  334. }
  335. return_term {
  336. kind: Expression
  337. type {
  338. identifier {
  339. name: "Self"
  340. }
  341. }
  342. }
  343. body {
  344. statements {
  345. return_expression_statement {
  346. expression {
  347. struct_literal {
  348. fields {
  349. name: "x"
  350. expression {
  351. operator {
  352. op: Mul
  353. arguments {
  354. simple_member_access {
  355. field: "x"
  356. object {
  357. identifier {
  358. name: "self"
  359. }
  360. }
  361. }
  362. }
  363. arguments {
  364. identifier {
  365. name: "v"
  366. }
  367. }
  368. }
  369. }
  370. }
  371. fields {
  372. name: "y"
  373. expression {
  374. operator {
  375. op: Mul
  376. arguments {
  377. simple_member_access {
  378. field: "y"
  379. object {
  380. identifier {
  381. name: "self"
  382. }
  383. }
  384. }
  385. }
  386. arguments {
  387. identifier {
  388. name: "v"
  389. }
  390. }
  391. }
  392. }
  393. }
  394. }
  395. }
  396. }
  397. }
  398. }
  399. }
  400. }
  401. }
  402. }
  403. declarations {
  404. impl {
  405. kind: ExternalImpl
  406. impl_type {
  407. call {
  408. function {
  409. identifier {
  410. name: "Point"
  411. }
  412. }
  413. argument {
  414. tuple_literal {
  415. fields {
  416. identifier {
  417. name: "T"
  418. }
  419. }
  420. }
  421. }
  422. }
  423. }
  424. interface {
  425. call {
  426. function {
  427. identifier {
  428. name: "Vector"
  429. }
  430. }
  431. argument {
  432. tuple_literal {
  433. fields {
  434. identifier {
  435. name: "T"
  436. }
  437. }
  438. }
  439. }
  440. }
  441. }
  442. members {
  443. function {
  444. name {
  445. name: "Add"
  446. }
  447. self_pattern {
  448. binding_pattern {
  449. name: "self"
  450. type {
  451. expression_pattern {
  452. expression {
  453. identifier {
  454. name: "Self"
  455. }
  456. }
  457. }
  458. }
  459. }
  460. }
  461. param_pattern {
  462. fields {
  463. binding_pattern {
  464. name: "b"
  465. type {
  466. expression_pattern {
  467. expression {
  468. identifier {
  469. name: "Self"
  470. }
  471. }
  472. }
  473. }
  474. }
  475. }
  476. }
  477. return_term {
  478. kind: Expression
  479. type {
  480. identifier {
  481. name: "Self"
  482. }
  483. }
  484. }
  485. body {
  486. statements {
  487. return_expression_statement {
  488. expression {
  489. identifier {
  490. name: "self"
  491. }
  492. }
  493. }
  494. }
  495. }
  496. }
  497. }
  498. members {
  499. function {
  500. name {
  501. name: "Scale"
  502. }
  503. self_pattern {
  504. binding_pattern {
  505. name: "self"
  506. type {
  507. expression_pattern {
  508. expression {
  509. identifier {
  510. name: "Self"
  511. }
  512. }
  513. }
  514. }
  515. }
  516. }
  517. param_pattern {
  518. fields {
  519. binding_pattern {
  520. name: "v"
  521. type {
  522. expression_pattern {
  523. expression {
  524. identifier {
  525. name: "T"
  526. }
  527. }
  528. }
  529. }
  530. }
  531. }
  532. }
  533. return_term {
  534. kind: Expression
  535. type {
  536. identifier {
  537. name: "Self"
  538. }
  539. }
  540. }
  541. body {
  542. statements {
  543. return_expression_statement {
  544. expression {
  545. identifier {
  546. name: "self"
  547. }
  548. }
  549. }
  550. }
  551. }
  552. }
  553. }
  554. }
  555. }
  556. declarations {
  557. function {
  558. name {
  559. name: "AddAndScaleGeneric"
  560. }
  561. deduced_parameters {
  562. name: "T"
  563. type {
  564. call {
  565. function {
  566. identifier {
  567. name: "Vector"
  568. }
  569. }
  570. argument {
  571. tuple_literal {
  572. fields {
  573. int_type_literal {
  574. }
  575. }
  576. }
  577. }
  578. }
  579. }
  580. }
  581. param_pattern {
  582. fields {
  583. binding_pattern {
  584. name: "a"
  585. type {
  586. expression_pattern {
  587. expression {
  588. identifier {
  589. name: "T"
  590. }
  591. }
  592. }
  593. }
  594. }
  595. }
  596. fields {
  597. binding_pattern {
  598. name: "b"
  599. type {
  600. expression_pattern {
  601. expression {
  602. identifier {
  603. name: "T"
  604. }
  605. }
  606. }
  607. }
  608. }
  609. }
  610. fields {
  611. binding_pattern {
  612. name: "s"
  613. type {
  614. expression_pattern {
  615. expression {
  616. int_type_literal {
  617. }
  618. }
  619. }
  620. }
  621. }
  622. }
  623. }
  624. return_term {
  625. kind: Expression
  626. type {
  627. identifier {
  628. name: "T"
  629. }
  630. }
  631. }
  632. body {
  633. statements {
  634. return_expression_statement {
  635. expression {
  636. call {
  637. function {
  638. simple_member_access {
  639. field: "Scale"
  640. object {
  641. call {
  642. function {
  643. simple_member_access {
  644. field: "Add"
  645. object {
  646. identifier {
  647. name: "a"
  648. }
  649. }
  650. }
  651. }
  652. argument {
  653. tuple_literal {
  654. fields {
  655. identifier {
  656. name: "b"
  657. }
  658. }
  659. }
  660. }
  661. }
  662. }
  663. }
  664. }
  665. argument {
  666. tuple_literal {
  667. fields {
  668. identifier {
  669. name: "s"
  670. }
  671. }
  672. }
  673. }
  674. }
  675. }
  676. }
  677. }
  678. }
  679. }
  680. }
  681. declarations {
  682. function {
  683. name {
  684. name: "Main"
  685. }
  686. param_pattern {
  687. }
  688. return_term {
  689. kind: Expression
  690. type {
  691. int_type_literal {
  692. }
  693. }
  694. }
  695. body {
  696. statements {
  697. variable_definition {
  698. pattern {
  699. binding_pattern {
  700. name: "a"
  701. type {
  702. expression_pattern {
  703. expression {
  704. call {
  705. function {
  706. identifier {
  707. name: "Point"
  708. }
  709. }
  710. argument {
  711. tuple_literal {
  712. fields {
  713. int_type_literal {
  714. }
  715. }
  716. }
  717. }
  718. }
  719. }
  720. }
  721. }
  722. }
  723. }
  724. init {
  725. struct_literal {
  726. fields {
  727. name: "x"
  728. expression {
  729. int_literal {
  730. value: 1
  731. }
  732. }
  733. }
  734. fields {
  735. name: "y"
  736. expression {
  737. int_literal {
  738. value: 1
  739. }
  740. }
  741. }
  742. }
  743. }
  744. is_returned: false
  745. }
  746. }
  747. statements {
  748. variable_definition {
  749. pattern {
  750. binding_pattern {
  751. name: "b"
  752. type {
  753. expression_pattern {
  754. expression {
  755. call {
  756. function {
  757. identifier {
  758. name: "Point"
  759. }
  760. }
  761. argument {
  762. tuple_literal {
  763. fields {
  764. int_type_literal {
  765. }
  766. }
  767. }
  768. }
  769. }
  770. }
  771. }
  772. }
  773. }
  774. }
  775. init {
  776. struct_literal {
  777. fields {
  778. name: "x"
  779. expression {
  780. int_literal {
  781. value: 2
  782. }
  783. }
  784. }
  785. fields {
  786. name: "y"
  787. expression {
  788. int_literal {
  789. value: 3
  790. }
  791. }
  792. }
  793. }
  794. }
  795. is_returned: false
  796. }
  797. }
  798. statements {
  799. variable_definition {
  800. pattern {
  801. binding_pattern {
  802. name: "p"
  803. type {
  804. expression_pattern {
  805. expression {
  806. call {
  807. function {
  808. identifier {
  809. name: "Point"
  810. }
  811. }
  812. argument {
  813. tuple_literal {
  814. fields {
  815. int_type_literal {
  816. }
  817. }
  818. }
  819. }
  820. }
  821. }
  822. }
  823. }
  824. }
  825. }
  826. init {
  827. call {
  828. function {
  829. identifier {
  830. name: "AddAndScaleGeneric"
  831. }
  832. }
  833. argument {
  834. tuple_literal {
  835. fields {
  836. identifier {
  837. name: "a"
  838. }
  839. }
  840. fields {
  841. identifier {
  842. name: "b"
  843. }
  844. }
  845. fields {
  846. int_literal {
  847. value: 5
  848. }
  849. }
  850. }
  851. }
  852. }
  853. }
  854. is_returned: false
  855. }
  856. }
  857. statements {
  858. return_expression_statement {
  859. expression {
  860. operator {
  861. op: Sub
  862. arguments {
  863. simple_member_access {
  864. field: "x"
  865. object {
  866. identifier {
  867. name: "p"
  868. }
  869. }
  870. }
  871. }
  872. arguments {
  873. int_literal {
  874. value: 15
  875. }
  876. }
  877. }
  878. }
  879. }
  880. }
  881. }
  882. }
  883. }
  884. }