31f34f507f6d8c70cc7934fc807d90e32031ecfb 24 KB

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