interfaces.scm 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261
  1. ; Copyright (c) 1993-2008 by Richard Kelsey. See file COPYING.
  2. (define-interface utilities-interface
  3. (export bug
  4. user-error
  5. user-warning
  6. true false
  7. or-map
  8. remove-similar-elts
  9. select-from-table
  10. table->list table->entry-list
  11. table-push table-pop
  12. merge-lists
  13. vector-every?
  14. make-ignorable
  15. sub-vector->list
  16. flag-assq
  17. enforce
  18. writec
  19. mem?
  20. walk-vector
  21. vector-replace
  22. copy-list
  23. copy-vector
  24. symbol-hash
  25. string-hash
  26. char->ascii
  27. object-hash
  28. union intersection set-difference
  29. make-xvector xvector-length xvector-ref xvector-set! xvector->vector
  30. (define-subrecord :syntax)
  31. ;(define-simple-record-type :syntax)
  32. (define-local-syntax :syntax)
  33. ))
  34. (define-interface primop-interface
  35. (export primop? make-primop make-proc-primop make-conditional-primop
  36. all-primops get-primop
  37. primop-id primop-trivial? primop-side-effects
  38. primop-cost
  39. simplify-call
  40. primop-procedure? primop-call-index
  41. primop-conditional?
  42. expand-to-conditional
  43. simplify-conditional?
  44. primop-code-data set-primop-code-data!
  45. trivial-call-return-type
  46. (primop :syntax)
  47. ))
  48. (define-interface variable-interface
  49. (export variable? make-variable
  50. global-variable? make-global-variable
  51. variable-name set-variable-name!
  52. variable-id
  53. variable-type set-variable-type!
  54. variable-binder set-variable-binder!
  55. variable-refs set-variable-refs!
  56. variable-flag set-variable-flag!
  57. variable-flags set-variable-flags!
  58. variable-generate set-variable-generate!
  59. erase-variable
  60. variable-index copy-variable used? unused?
  61. variable-known-value
  62. add-variable-known-value!
  63. remove-variable-known-value!
  64. variable-simplifier
  65. add-variable-simplifier!
  66. remove-variable-simplifier!
  67. note-known-global-lambda!
  68. variable-known-lambda
  69. ))
  70. (define-interface node-interface
  71. (compound-interface
  72. primop-interface
  73. variable-interface
  74. (export reset-node-id node-hash node-unhash
  75. node? node-variant
  76. node-parent set-node-parent!
  77. node-index set-node-index!
  78. node-simplified? set-node-simplified?!
  79. node-flag set-node-flag!
  80. empty empty? proclaim-empty
  81. erase
  82. detach detach-body
  83. attach attach-body
  84. move move-body
  85. insert-body
  86. replace replace-body
  87. connect-sequence
  88. mark-changed
  89. leaf-node?
  90. literal-node? make-literal-node
  91. literal-value set-literal-value!
  92. literal-type set-literal-type!
  93. copy-literal-node
  94. reference-node? make-reference-node
  95. reference-variable set-reference-variable!
  96. call-node? make-call-node
  97. call-primop set-call-primop!
  98. call-args set-call-args!
  99. call-exits set-call-exits!
  100. call-source set-call-source!
  101. call-arg call-arg-count
  102. lambda-node? make-lambda-node
  103. lambda-body set-lambda-body!
  104. lambda-variables set-lambda-variables!
  105. lambda-name set-lambda-name!
  106. lambda-id
  107. lambda-type
  108. lambda-block set-lambda-block!
  109. lambda-env set-lambda-env!
  110. lambda-protocol set-lambda-protocol!
  111. lambda-source set-lambda-source!
  112. lambda-variable-count
  113. calls-known? set-calls-known?!
  114. proc-lambda?
  115. initialize-lambdas add-lambda add-lambdas
  116. change-lambda-type
  117. walk-lambdas make-lambda-list
  118. loc/owner loc/type loc/rep
  119. set/owner set/type set/rep set/value
  120. node-base containing-procedure
  121. trivial? nontrivial?
  122. nontrivial-ancestor
  123. calls-this-primop?
  124. bound-to-variable
  125. walk-refs-safely
  126. small-node?
  127. side-effects?
  128. called-node? called-node
  129. called-lambda
  130. get-lambda-value
  131. ;set-reference?
  132. attach-call-args remove-call-args replace-call-args
  133. remove-null-arguments
  134. shorten-call-args insert-call-arg remove-call-arg
  135. append-call-arg
  136. remove-body
  137. put-in-letrec make-letrec
  138. remove-lambda-variable remove-variable remove-unused-variables
  139. substitute substitute-vars-in-node-tree
  140. replace-call-with-value
  141. copy-node-tree
  142. mark-ancestors marked-ancestor? unmarked-ancestor?
  143. node-ancestor? marked-ancestor least-common-ancestor
  144. proc-ancestor
  145. hoistable-node?
  146. find-scoping
  147. ((let-nodes new-lambda new-call) :syntax)
  148. node-equal?
  149. no-free-references?
  150. find-calls
  151. node-type
  152. the-undefined-value
  153. undefined-value?
  154. undefined-value-node?
  155. make-undefined-literal
  156. )))
  157. (define-interface simplify-internal-interface
  158. (export simplify-node
  159. default-simplifier
  160. simplify-arg
  161. simplify-args
  162. simplify-lambda-body
  163. simplify-known-lambda
  164. (pattern-simplifier :syntax)
  165. simplify-allocation
  166. simplify-known-call
  167. simplify-known-tail-call
  168. simplify-unknown-call
  169. simplify-return
  170. simplify-jump
  171. ; simplify-undefined-value
  172. simplify-test expand-test simplify-test?
  173. ))
  174. (define-interface front-debug-interface
  175. (export debug-breakpoint
  176. add-checks add-check clear-checks clear-check
  177. add-procs add-proc clear-procs clear-proc))
  178. (define-interface front-interface
  179. (export simplify-all
  180. integrate-jump-procs! ; for debugging
  181. ))
  182. (define-interface annotated-read-interface
  183. (export read-and-annotate
  184. pair-annotation
  185. annotated-cons
  186. annotation?
  187. annotation-file
  188. annotation-form
  189. annotation-row
  190. annotation-column
  191. ))
  192. (define-interface compiler-byte-vector-interface
  193. (export make-byte-vector byte-vector? byte-vector-length
  194. byte-vector-ref byte-vector-word-ref byte-vector-half-word-ref
  195. byte-vector-set! byte-vector-word-set! byte-vector-half-word-set!
  196. byte-vector-endianess set-byte-vector-endianess!
  197. ))
  198. (define-interface parameter-interface
  199. (export lookup-primop
  200. lookup-imported-variable
  201. type/unknown
  202. type-eq?
  203. lambda-node-type
  204. true-value
  205. false-value
  206. determine-lambda-protocol
  207. determine-continuation-protocol
  208. ))