8506098ed285fa6cf6887ef694c68ff07fbac234 20 KB

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