e16ea66236bb097cd84a5366b1b0035149a138f8 18 KB

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