0645e2adb589c5d5c2ea84e31b87db1ee74034ee 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107
  1. compilation_unit {
  2. package_statement {
  3. package_name: "ExplorerTest"
  4. }
  5. is_api: true
  6. declarations {
  7. interface {
  8. name: "Vector"
  9. members {
  10. function {
  11. name: "Add"
  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: "b"
  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. members {
  53. function {
  54. name: "Scale"
  55. self_pattern {
  56. binding_pattern {
  57. name: "self"
  58. type {
  59. expression_pattern {
  60. expression {
  61. identifier {
  62. name: "Self"
  63. }
  64. }
  65. }
  66. }
  67. }
  68. }
  69. param_pattern {
  70. fields {
  71. binding_pattern {
  72. name: "v"
  73. type {
  74. expression_pattern {
  75. expression {
  76. int_type_literal {
  77. }
  78. }
  79. }
  80. }
  81. }
  82. }
  83. }
  84. return_term {
  85. kind: Expression
  86. type {
  87. identifier {
  88. name: "Self"
  89. }
  90. }
  91. }
  92. }
  93. }
  94. self {
  95. name: "Self"
  96. type {
  97. type_type_literal {
  98. }
  99. }
  100. }
  101. }
  102. }
  103. declarations {
  104. class_declaration {
  105. name: "Point1"
  106. members {
  107. variable {
  108. binding {
  109. name: "x"
  110. type {
  111. expression_pattern {
  112. expression {
  113. int_type_literal {
  114. }
  115. }
  116. }
  117. }
  118. }
  119. }
  120. }
  121. members {
  122. variable {
  123. binding {
  124. name: "y"
  125. type {
  126. expression_pattern {
  127. expression {
  128. int_type_literal {
  129. }
  130. }
  131. }
  132. }
  133. }
  134. }
  135. }
  136. members {
  137. impl {
  138. kind: InternalImpl
  139. impl_type {
  140. identifier {
  141. name: "Point1"
  142. }
  143. }
  144. interface {
  145. identifier {
  146. name: "Vector"
  147. }
  148. }
  149. members {
  150. function {
  151. name: "Add"
  152. self_pattern {
  153. binding_pattern {
  154. name: "self"
  155. type {
  156. expression_pattern {
  157. expression {
  158. identifier {
  159. name: "Point1"
  160. }
  161. }
  162. }
  163. }
  164. }
  165. }
  166. param_pattern {
  167. fields {
  168. binding_pattern {
  169. name: "b"
  170. type {
  171. expression_pattern {
  172. expression {
  173. identifier {
  174. name: "Point1"
  175. }
  176. }
  177. }
  178. }
  179. }
  180. }
  181. }
  182. return_term {
  183. kind: Expression
  184. type {
  185. identifier {
  186. name: "Point1"
  187. }
  188. }
  189. }
  190. body {
  191. statements {
  192. return_expression_statement {
  193. expression {
  194. struct_literal {
  195. fields {
  196. name: "x"
  197. expression {
  198. operator {
  199. op: Add
  200. arguments {
  201. simple_member_access {
  202. field: "x"
  203. object {
  204. identifier {
  205. name: "self"
  206. }
  207. }
  208. }
  209. }
  210. arguments {
  211. simple_member_access {
  212. field: "x"
  213. object {
  214. identifier {
  215. name: "b"
  216. }
  217. }
  218. }
  219. }
  220. }
  221. }
  222. }
  223. fields {
  224. name: "y"
  225. expression {
  226. operator {
  227. op: Add
  228. arguments {
  229. simple_member_access {
  230. field: "y"
  231. object {
  232. identifier {
  233. name: "self"
  234. }
  235. }
  236. }
  237. }
  238. arguments {
  239. simple_member_access {
  240. field: "y"
  241. object {
  242. identifier {
  243. name: "b"
  244. }
  245. }
  246. }
  247. }
  248. }
  249. }
  250. }
  251. }
  252. }
  253. }
  254. }
  255. }
  256. }
  257. }
  258. members {
  259. function {
  260. name: "Scale"
  261. self_pattern {
  262. binding_pattern {
  263. name: "self"
  264. type {
  265. expression_pattern {
  266. expression {
  267. identifier {
  268. name: "Point1"
  269. }
  270. }
  271. }
  272. }
  273. }
  274. }
  275. param_pattern {
  276. fields {
  277. binding_pattern {
  278. name: "v"
  279. type {
  280. expression_pattern {
  281. expression {
  282. int_type_literal {
  283. }
  284. }
  285. }
  286. }
  287. }
  288. }
  289. }
  290. return_term {
  291. kind: Expression
  292. type {
  293. identifier {
  294. name: "Point1"
  295. }
  296. }
  297. }
  298. body {
  299. statements {
  300. return_expression_statement {
  301. expression {
  302. struct_literal {
  303. fields {
  304. name: "x"
  305. expression {
  306. operator {
  307. op: Mul
  308. arguments {
  309. simple_member_access {
  310. field: "x"
  311. object {
  312. identifier {
  313. name: "self"
  314. }
  315. }
  316. }
  317. }
  318. arguments {
  319. identifier {
  320. name: "v"
  321. }
  322. }
  323. }
  324. }
  325. }
  326. fields {
  327. name: "y"
  328. expression {
  329. operator {
  330. op: Mul
  331. arguments {
  332. simple_member_access {
  333. field: "y"
  334. object {
  335. identifier {
  336. name: "self"
  337. }
  338. }
  339. }
  340. }
  341. arguments {
  342. identifier {
  343. name: "v"
  344. }
  345. }
  346. }
  347. }
  348. }
  349. }
  350. }
  351. }
  352. }
  353. }
  354. }
  355. }
  356. }
  357. }
  358. }
  359. }
  360. declarations {
  361. class_declaration {
  362. name: "Point2"
  363. members {
  364. variable {
  365. binding {
  366. name: "x"
  367. type {
  368. expression_pattern {
  369. expression {
  370. int_type_literal {
  371. }
  372. }
  373. }
  374. }
  375. }
  376. }
  377. }
  378. members {
  379. variable {
  380. binding {
  381. name: "y"
  382. type {
  383. expression_pattern {
  384. expression {
  385. int_type_literal {
  386. }
  387. }
  388. }
  389. }
  390. }
  391. }
  392. }
  393. members {
  394. impl {
  395. kind: InternalImpl
  396. impl_type {
  397. identifier {
  398. name: "Point2"
  399. }
  400. }
  401. interface {
  402. identifier {
  403. name: "Vector"
  404. }
  405. }
  406. members {
  407. function {
  408. name: "Add"
  409. self_pattern {
  410. binding_pattern {
  411. name: "self"
  412. type {
  413. expression_pattern {
  414. expression {
  415. identifier {
  416. name: "Point2"
  417. }
  418. }
  419. }
  420. }
  421. }
  422. }
  423. param_pattern {
  424. fields {
  425. binding_pattern {
  426. name: "b"
  427. type {
  428. expression_pattern {
  429. expression {
  430. identifier {
  431. name: "Point2"
  432. }
  433. }
  434. }
  435. }
  436. }
  437. }
  438. }
  439. return_term {
  440. kind: Expression
  441. type {
  442. identifier {
  443. name: "Point2"
  444. }
  445. }
  446. }
  447. body {
  448. statements {
  449. return_expression_statement {
  450. expression {
  451. struct_literal {
  452. fields {
  453. name: "x"
  454. expression {
  455. operator {
  456. op: Add
  457. arguments {
  458. operator {
  459. op: Add
  460. arguments {
  461. simple_member_access {
  462. field: "x"
  463. object {
  464. identifier {
  465. name: "self"
  466. }
  467. }
  468. }
  469. }
  470. arguments {
  471. simple_member_access {
  472. field: "x"
  473. object {
  474. identifier {
  475. name: "b"
  476. }
  477. }
  478. }
  479. }
  480. }
  481. }
  482. arguments {
  483. int_literal {
  484. value: 1
  485. }
  486. }
  487. }
  488. }
  489. }
  490. fields {
  491. name: "y"
  492. expression {
  493. operator {
  494. op: Add
  495. arguments {
  496. operator {
  497. op: Add
  498. arguments {
  499. simple_member_access {
  500. field: "y"
  501. object {
  502. identifier {
  503. name: "self"
  504. }
  505. }
  506. }
  507. }
  508. arguments {
  509. simple_member_access {
  510. field: "y"
  511. object {
  512. identifier {
  513. name: "b"
  514. }
  515. }
  516. }
  517. }
  518. }
  519. }
  520. arguments {
  521. int_literal {
  522. value: 1
  523. }
  524. }
  525. }
  526. }
  527. }
  528. }
  529. }
  530. }
  531. }
  532. }
  533. }
  534. }
  535. members {
  536. function {
  537. name: "Scale"
  538. self_pattern {
  539. binding_pattern {
  540. name: "self"
  541. type {
  542. expression_pattern {
  543. expression {
  544. identifier {
  545. name: "Point2"
  546. }
  547. }
  548. }
  549. }
  550. }
  551. }
  552. param_pattern {
  553. fields {
  554. binding_pattern {
  555. name: "v"
  556. type {
  557. expression_pattern {
  558. expression {
  559. int_type_literal {
  560. }
  561. }
  562. }
  563. }
  564. }
  565. }
  566. }
  567. return_term {
  568. kind: Expression
  569. type {
  570. identifier {
  571. name: "Point2"
  572. }
  573. }
  574. }
  575. body {
  576. statements {
  577. return_expression_statement {
  578. expression {
  579. struct_literal {
  580. fields {
  581. name: "x"
  582. expression {
  583. operator {
  584. op: Mul
  585. arguments {
  586. operator {
  587. op: Mul
  588. arguments {
  589. simple_member_access {
  590. field: "x"
  591. object {
  592. identifier {
  593. name: "self"
  594. }
  595. }
  596. }
  597. }
  598. arguments {
  599. identifier {
  600. name: "v"
  601. }
  602. }
  603. }
  604. }
  605. arguments {
  606. int_literal {
  607. value: 2
  608. }
  609. }
  610. }
  611. }
  612. }
  613. fields {
  614. name: "y"
  615. expression {
  616. operator {
  617. op: Mul
  618. arguments {
  619. operator {
  620. op: Mul
  621. arguments {
  622. simple_member_access {
  623. field: "y"
  624. object {
  625. identifier {
  626. name: "self"
  627. }
  628. }
  629. }
  630. }
  631. arguments {
  632. identifier {
  633. name: "v"
  634. }
  635. }
  636. }
  637. }
  638. arguments {
  639. int_literal {
  640. value: 2
  641. }
  642. }
  643. }
  644. }
  645. }
  646. }
  647. }
  648. }
  649. }
  650. }
  651. }
  652. }
  653. }
  654. }
  655. }
  656. }
  657. declarations {
  658. function {
  659. name: "ScaleGeneric"
  660. deduced_parameters {
  661. name: "U"
  662. type {
  663. identifier {
  664. name: "Vector"
  665. }
  666. }
  667. }
  668. param_pattern {
  669. fields {
  670. binding_pattern {
  671. name: "c"
  672. type {
  673. expression_pattern {
  674. expression {
  675. identifier {
  676. name: "U"
  677. }
  678. }
  679. }
  680. }
  681. }
  682. }
  683. fields {
  684. binding_pattern {
  685. name: "s"
  686. type {
  687. expression_pattern {
  688. expression {
  689. int_type_literal {
  690. }
  691. }
  692. }
  693. }
  694. }
  695. }
  696. }
  697. return_term {
  698. kind: Expression
  699. type {
  700. identifier {
  701. name: "U"
  702. }
  703. }
  704. }
  705. body {
  706. statements {
  707. return_expression_statement {
  708. expression {
  709. call {
  710. function {
  711. simple_member_access {
  712. field: "Scale"
  713. object {
  714. identifier {
  715. name: "c"
  716. }
  717. }
  718. }
  719. }
  720. argument {
  721. tuple_literal {
  722. fields {
  723. identifier {
  724. name: "s"
  725. }
  726. }
  727. }
  728. }
  729. }
  730. }
  731. }
  732. }
  733. }
  734. }
  735. }
  736. declarations {
  737. function {
  738. name: "AddAndScaleGeneric"
  739. deduced_parameters {
  740. name: "T"
  741. type {
  742. identifier {
  743. name: "Vector"
  744. }
  745. }
  746. }
  747. deduced_parameters {
  748. name: "V"
  749. type {
  750. identifier {
  751. name: "Vector"
  752. }
  753. }
  754. }
  755. param_pattern {
  756. fields {
  757. binding_pattern {
  758. name: "a"
  759. type {
  760. expression_pattern {
  761. expression {
  762. identifier {
  763. name: "T"
  764. }
  765. }
  766. }
  767. }
  768. }
  769. }
  770. fields {
  771. binding_pattern {
  772. name: "b"
  773. type {
  774. expression_pattern {
  775. expression {
  776. identifier {
  777. name: "V"
  778. }
  779. }
  780. }
  781. }
  782. }
  783. }
  784. fields {
  785. binding_pattern {
  786. name: "s"
  787. type {
  788. expression_pattern {
  789. expression {
  790. int_type_literal {
  791. }
  792. }
  793. }
  794. }
  795. }
  796. }
  797. }
  798. return_term {
  799. kind: Expression
  800. type {
  801. tuple_literal {
  802. fields {
  803. identifier {
  804. name: "T"
  805. }
  806. }
  807. fields {
  808. identifier {
  809. name: "V"
  810. }
  811. }
  812. }
  813. }
  814. }
  815. body {
  816. statements {
  817. return_expression_statement {
  818. expression {
  819. tuple_literal {
  820. fields {
  821. call {
  822. function {
  823. identifier {
  824. name: "ScaleGeneric"
  825. }
  826. }
  827. argument {
  828. tuple_literal {
  829. fields {
  830. call {
  831. function {
  832. simple_member_access {
  833. field: "Add"
  834. object {
  835. identifier {
  836. name: "a"
  837. }
  838. }
  839. }
  840. }
  841. argument {
  842. tuple_literal {
  843. fields {
  844. identifier {
  845. name: "a"
  846. }
  847. }
  848. }
  849. }
  850. }
  851. }
  852. fields {
  853. identifier {
  854. name: "s"
  855. }
  856. }
  857. }
  858. }
  859. }
  860. }
  861. fields {
  862. call {
  863. function {
  864. identifier {
  865. name: "ScaleGeneric"
  866. }
  867. }
  868. argument {
  869. tuple_literal {
  870. fields {
  871. call {
  872. function {
  873. simple_member_access {
  874. field: "Add"
  875. object {
  876. identifier {
  877. name: "b"
  878. }
  879. }
  880. }
  881. }
  882. argument {
  883. tuple_literal {
  884. fields {
  885. identifier {
  886. name: "b"
  887. }
  888. }
  889. }
  890. }
  891. }
  892. }
  893. fields {
  894. identifier {
  895. name: "s"
  896. }
  897. }
  898. }
  899. }
  900. }
  901. }
  902. }
  903. }
  904. }
  905. }
  906. }
  907. }
  908. }
  909. declarations {
  910. function {
  911. name: "Main"
  912. param_pattern {
  913. }
  914. return_term {
  915. kind: Expression
  916. type {
  917. int_type_literal {
  918. }
  919. }
  920. }
  921. body {
  922. statements {
  923. variable_definition {
  924. pattern {
  925. binding_pattern {
  926. name: "a"
  927. type {
  928. expression_pattern {
  929. expression {
  930. identifier {
  931. name: "Point1"
  932. }
  933. }
  934. }
  935. }
  936. }
  937. }
  938. init {
  939. struct_literal {
  940. fields {
  941. name: "x"
  942. expression {
  943. int_literal {
  944. value: 1
  945. }
  946. }
  947. }
  948. fields {
  949. name: "y"
  950. expression {
  951. int_literal {
  952. value: 1
  953. }
  954. }
  955. }
  956. }
  957. }
  958. is_returned: false
  959. }
  960. }
  961. statements {
  962. variable_definition {
  963. pattern {
  964. binding_pattern {
  965. name: "b"
  966. type {
  967. expression_pattern {
  968. expression {
  969. identifier {
  970. name: "Point2"
  971. }
  972. }
  973. }
  974. }
  975. }
  976. }
  977. init {
  978. struct_literal {
  979. fields {
  980. name: "x"
  981. expression {
  982. int_literal {
  983. value: 2
  984. }
  985. }
  986. }
  987. fields {
  988. name: "y"
  989. expression {
  990. int_literal {
  991. value: 3
  992. }
  993. }
  994. }
  995. }
  996. }
  997. is_returned: false
  998. }
  999. }
  1000. statements {
  1001. variable_definition {
  1002. pattern {
  1003. tuple_pattern {
  1004. fields {
  1005. binding_pattern {
  1006. name: "p"
  1007. type {
  1008. expression_pattern {
  1009. expression {
  1010. identifier {
  1011. name: "Point1"
  1012. }
  1013. }
  1014. }
  1015. }
  1016. }
  1017. }
  1018. fields {
  1019. binding_pattern {
  1020. name: "q"
  1021. type {
  1022. expression_pattern {
  1023. expression {
  1024. identifier {
  1025. name: "Point2"
  1026. }
  1027. }
  1028. }
  1029. }
  1030. }
  1031. }
  1032. }
  1033. }
  1034. init {
  1035. call {
  1036. function {
  1037. identifier {
  1038. name: "AddAndScaleGeneric"
  1039. }
  1040. }
  1041. argument {
  1042. tuple_literal {
  1043. fields {
  1044. identifier {
  1045. name: "a"
  1046. }
  1047. }
  1048. fields {
  1049. identifier {
  1050. name: "b"
  1051. }
  1052. }
  1053. fields {
  1054. int_literal {
  1055. value: 5
  1056. }
  1057. }
  1058. }
  1059. }
  1060. }
  1061. }
  1062. is_returned: false
  1063. }
  1064. }
  1065. statements {
  1066. return_expression_statement {
  1067. expression {
  1068. operator {
  1069. op: Sub
  1070. arguments {
  1071. operator {
  1072. op: Sub
  1073. arguments {
  1074. simple_member_access {
  1075. field: "x"
  1076. object {
  1077. identifier {
  1078. name: "q"
  1079. }
  1080. }
  1081. }
  1082. }
  1083. arguments {
  1084. simple_member_access {
  1085. field: "x"
  1086. object {
  1087. identifier {
  1088. name: "p"
  1089. }
  1090. }
  1091. }
  1092. }
  1093. }
  1094. }
  1095. arguments {
  1096. int_literal {
  1097. value: 40
  1098. }
  1099. }
  1100. }
  1101. }
  1102. }
  1103. }
  1104. }
  1105. }
  1106. }
  1107. }