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