scsh-0.6/ps-compiler/prescheme/package-defs.scm

311 lines
8.8 KiB
Scheme

; Copyright (c) 1994 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
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
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 defrecord)
(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)
(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
front
structure-refs
c-internal
ps-types type-variables inference-internal
inference ; get-variable-type
forms 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 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?
(begin (define number-of-char-codes 256)) ; should be somewhere else
(files c
c-decl
c-call
hoist
merge))