package-defs.scm 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366
  1. ; Copyright (c) 1993-2008 by Richard Kelsey. See file COPYING.
  2. ; Pre-Scheme packages
  3. ; Everything else
  4. (define-structures ((prescheme-compiler (export)))
  5. (open scheme
  6. (modify big-scheme (hide table->entry-list))
  7. conditions comp-util
  8. prescheme-front-end prescheme-display
  9. (subset parameters (determine-lambda-protocol))
  10. node
  11. front-debug forms
  12. ps-types
  13. type-variables
  14. c
  15. primop-data
  16. c-primop-data
  17. jump ;find-jump-procs procs->jumps
  18. record-types ;reset-record-data!
  19. node-types
  20. front ;simplify-all
  21. simplify) ;simplify-node
  22. (files top))
  23. (define-structures ((prescheme-display (export display-forms-as-scheme)))
  24. (open scheme
  25. (modify big-scheme (hide table->entry-list))
  26. (modify names (hide name->symbol))
  27. bindings ;binding-place
  28. ;; their literal-node? is equivalent, but wasn't exported until 2007
  29. (modify nodes (hide literal-node? schemify))
  30. variable primop external-values ps-primitives
  31. flatten-internal ;generated-top-variable?
  32. external-constants
  33. (subset forms (form-value form-var)))
  34. (files display))
  35. (define-structures ((protocol (export normal-protocol
  36. goto-protocol
  37. goto-protocol?)))
  38. (open scheme
  39. (modify big-scheme (hide table->entry-list))
  40. comp-util set-parameters ps-primops ps-types node)
  41. (files spec))
  42. (define-structures ((prescheme-front-end (export prescheme-front-end)))
  43. (open scheme
  44. (modify big-scheme (hide table->entry-list))
  45. comp-util
  46. linking expand flatten forms
  47. ps-types inference
  48. variable
  49. primitive-data
  50. primop-data
  51. inference-internal ; unify!
  52. type-variables ; reset-type-vars!
  53. (modify nodes (prefix nodes:))
  54. (subset node (reset-node-id))
  55. (subset record-types (reset-record-data!)))
  56. (files front-end))
  57. (define-structures ((forms form-interface))
  58. (open scheme
  59. (modify big-scheme (hide table->entry-list))
  60. comp-util node expand defrecord
  61. node-vector queues to-cps
  62. eval-node ; closure stuff
  63. ps-primops ; get-prescheme-primop
  64. simplify-internal ; simplify-node simplify-args
  65. front ; simplify-all
  66. ps-types ; type/undetermined
  67. type-variables ; maybe-follow-uvar
  68. node-types ; instantiate-type&value
  69. (modify nodes (prefix nodes:)))
  70. (files form))
  71. ; Translating Scheme into evaluated nodes
  72. (define-structures ((expand (export scan-packages)))
  73. (open scheme
  74. (modify big-scheme (hide table->entry-list))
  75. comp-util
  76. variable
  77. bindings
  78. (modify nodes (hide define-node?)) ; we'd shadow this
  79. ps-primitives ;eval-primitive
  80. eval-node ;eval-node
  81. scan-package ;package-source
  82. locations
  83. (subset util (fold))
  84. syntactic
  85. (subset packages (package->environment)))
  86. (files expand))
  87. ; Eval and type information on Pre-Scheme primitives
  88. (define-structures ((ps-primitives (export primitive?
  89. make-primitive
  90. eval-primitive
  91. primitive-id
  92. primitive-source
  93. primitive-expander
  94. primitive-expands-in-place?
  95. primitive-inference-rule)))
  96. (open scheme
  97. (modify big-scheme (hide table->entry-list))
  98. comp-util defrecord)
  99. (files primitive))
  100. (define-structures ((primitive-data (export)))
  101. (open scheme
  102. (modify big-scheme (hide table->entry-list any?))
  103. comp-util ps-primitives
  104. bindings
  105. ;; ours is equivalent, but theirs wasn't exported until 2007
  106. (modify nodes (hide lambda-node?))
  107. ascii
  108. ps-primops ;get-prescheme-primop
  109. linking ;define-prescheme!
  110. inference-internal ;check-arg-type
  111. type-variables ;make-arith-op-uvar
  112. record-types
  113. (modify prescheme (hide error
  114. peek-char read-char write-char newline
  115. open-input-file open-output-file
  116. close-input-port close-output-port))
  117. ps-memory
  118. ps-types external-constants external-values
  119. floatnums ;floatnum?
  120. locations
  121. eval-node ; closure? (to keep them from being made immutable)
  122. (subset variable (variable-name)))
  123. (files (primop scm-scheme)
  124. (primop scm-arith)
  125. (primop scm-memory)
  126. (primop scm-record)))
  127. (define-structures ((eval-node (export eval-node
  128. closure? closure-node closure-env
  129. make-top-level-closure
  130. closure-temp set-closure-temp!
  131. apply-closure
  132. unspecific? constant?)))
  133. (open (modify scheme (hide eval))
  134. define-record-types
  135. nodes
  136. ps-types ;expand-type-spec
  137. external-values
  138. external-constants ;external-constant?
  139. signals ;error
  140. util) ;unspecific
  141. (files eval))
  142. ; Reducing closures and data structures to simple definitions
  143. (define-structures ((flatten (export flatten-definitions))
  144. (flatten-internal (export generated-top-variable?)))
  145. (open scheme
  146. (modify big-scheme (hide table->entry-list))
  147. comp-util defrecord
  148. bindings
  149. ;; ours are equivalent, but theirs weren't exported until 2007
  150. (modify nodes (hide name-node? lambda-node?
  151. make-similar-node)) ; ours is different
  152. variable
  153. eval-node ;closure stuff, constant?
  154. ps-primitives ;primitive stuff
  155. ps-types ;type/undetermined expand-type-spec
  156. linking ;prescheme-compiler-env
  157. syntactic ;expand
  158. strong
  159. external-values
  160. locations
  161. features ;immutable?
  162. (modify forms (prefix forms:)))
  163. (files flatten substitute))
  164. (define-structures ((to-cps (export x->cps)))
  165. (open scheme
  166. (modify big-scheme (hide table->entry-list))
  167. comp-util
  168. variable
  169. names bindings
  170. ;; ours are equivalent, but theirs weren't exported until 2007
  171. (modify nodes (hide lambda-node?
  172. literal-node?
  173. call-node?))
  174. primop
  175. cps-util enumerated
  176. ps-primops ;get-prescheme-primop
  177. ps-types ;type/unknown
  178. inference ;node-type lambda-node-return-type
  179. ps-primitives ;primitive-expander
  180. protocol ;goto-protocol normal-protocol
  181. (modify node (prefix node:)))
  182. (files to-cps))
  183. ; Processing interface and package definitions
  184. (define-structures ((linking linking-interface))
  185. (open scheme
  186. (modify big-scheme (hide table->entry-list))
  187. comp-util
  188. interfaces packages environments usual-macros
  189. defpackage types ;for making interfaces
  190. reflective-tower-maker
  191. fluids cells
  192. expand-define-record-type
  193. scan-package ;collect-packages
  194. bindings ;binding? binding-place
  195. nodes ;get-operator
  196. transforms ;make-transform
  197. locations ;contents
  198. package-commands-internal ; make-reflective-tower on newer Scheme 48
  199. (subset meta-types (syntax-type usual-variable-type))
  200. (subset variable (make-global-variable))
  201. (subset ps-types (type/unknown))
  202. (subset reading-forms ($note-file-package))
  203. (subset packages-internal ($get-location))
  204. (subset package-commands-internal (config-package))
  205. (modify prescheme (prefix prescheme:)) ;we need this loaded
  206. (subset built-in-structures (defpackage scheme)))
  207. (files linking))
  208. ;----------------------------------------------------------------
  209. ; Types and type inference
  210. (define-structures ((ps-types ps-type-interface)
  211. (type-variables type-variable-interface)
  212. (record-types record-type-interface)
  213. (expand-define-record-type
  214. (export expand-define-record-type)))
  215. (open scheme
  216. (modify big-scheme (hide table->entry-list))
  217. comp-util define-record-types)
  218. (files type
  219. type-scheme
  220. type-var
  221. record))
  222. (define-structures ((inference inference-interface)
  223. (inference-internal inference-internal-interface))
  224. (open scheme
  225. (modify big-scheme (hide table->entry-list))
  226. front variable comp-util transitive
  227. ps-types type-variables
  228. bindings
  229. ;; ours are equivalent, but theirs didn't exist until 2007
  230. (modify nodes (hide name-node?
  231. lambda-node?
  232. literal-node?))
  233. ps-primitives
  234. ps-primops ; get-prescheme-primop
  235. external-values external-constants
  236. locations ; for imported constants
  237. (modify eval-node (prefix eval-node:)))
  238. (for-syntax (open scheme big-scheme))
  239. (files inference infer-early))
  240. (define-structures ((node-types (export instantiate-type&value
  241. make-monomorphic!)))
  242. (open scheme
  243. (modify big-scheme (hide table->entry-list))
  244. front node comp-util
  245. ps-types type-variables
  246. inference-internal) ; unify!
  247. (files node-type))
  248. ;----------------------------------------------------------------
  249. ; Primops
  250. (define-structures ((ps-primops ps-primop-interface))
  251. (open scheme
  252. (modify big-scheme (hide table->entry-list))
  253. comp-util node simplify-internal
  254. linking ps-types front expand platform)
  255. (files (primop primop)))
  256. (define-structures ((ps-c-primops ps-c-primop-interface))
  257. (open scheme
  258. (modify big-scheme (hide table->entry-list))
  259. comp-util node simplify-internal
  260. define-record-types
  261. ps-types ps-primops)
  262. (for-syntax (open scheme big-scheme))
  263. (files (primop c-primop)))
  264. (define-structures ((primop-data (export)))
  265. (open scheme
  266. (modify big-scheme (hide table->entry-list))
  267. comp-util node
  268. (modify simplify-internal (hide simplify-unknown-call))
  269. simplify-let
  270. front expand type-variables inference-internal
  271. ps-types ps-primops record-types
  272. (subset parameters (determine-lambda-protocol))
  273. node-vector
  274. node-types) ; instantiate-type&value
  275. (files (primop base)
  276. (primop arith)
  277. (primop io)
  278. (primop vector)
  279. ))
  280. (define-structures ((c-primop-data (export)))
  281. (open scheme
  282. (modify big-scheme (hide table->entry-list))
  283. comp-util node simplify
  284. ps-types ps-primops ps-c-primops
  285. platform
  286. front
  287. c-internal
  288. ps-types type-variables inference-internal
  289. (subset inference (get-variable-type))
  290. forms
  291. compiler-byte-vectors
  292. record-types
  293. eval-node) ; unspecific?
  294. (files (primop c-base)
  295. (primop c-arith)
  296. (primop c-io)
  297. (primop c-vector)
  298. ))
  299. (define-structures ((external-values (export external-value?
  300. make-external-value
  301. external-value-type
  302. external-value-string)))
  303. (open scheme define-record-types)
  304. (begin
  305. (define-record-type external-value :external-value
  306. (make-external-value string type)
  307. external-value?
  308. (string external-value-string)
  309. (type external-value-type))))
  310. ;----------------------------------------------------------------
  311. ; Translating to C
  312. (define-structures ((c (export write-c-file hoist-nested-procedures))
  313. (c-internal c-internal-interface))
  314. (open scheme ascii
  315. (modify big-scheme (hide table->entry-list))
  316. comp-util strongly-connected node forms
  317. defrecord
  318. ps-primops ps-c-primops
  319. ps-types type-variables
  320. flatten-internal ; generated-top-variable?
  321. (subset inference (get-variable-type))
  322. inference-internal ; literal-value-type
  323. protocol ; goto-protocol?
  324. i/o ; force-output
  325. record-types
  326. external-values
  327. external-constants
  328. eval-node) ; unspecific?
  329. (files c
  330. c-decl
  331. c-call
  332. hoist
  333. merge))