ec5312210b747b89c9dee82b8cb4e97ffd464270 17 KB

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