a758174457d5b22eb2a94c9cc72e4341dfa97ff0 19 KB

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