593 lines
17 KiB
Scheme
593 lines
17 KiB
Scheme
|
; Copyright (c) 1993, 1994 Richard Kelsey and Jonathan Rees. See file COPYING.
|
||
|
|
||
|
|
||
|
; More and more packages. Some of these get loaded into the initial
|
||
|
; image to create scheme48.image; those that aren't can be loaded later
|
||
|
; using ,load-package.
|
||
|
|
||
|
|
||
|
; Things to load into initial.image to make scheme48.image.
|
||
|
|
||
|
(define-structure usual-features (export ) ;No exports
|
||
|
(open analysis ;auto-integration
|
||
|
disclosers
|
||
|
command-processor
|
||
|
debuginfo
|
||
|
;; Choose any combination of bignums, ratnums, recnums
|
||
|
bignums ratnums recnums
|
||
|
;; Choose either innums, floatnums, or neither
|
||
|
innums ;Silly inexact numbers
|
||
|
;; floatnums ;Still don't print correctly
|
||
|
;; pp
|
||
|
;; The following is listed because this structure is used to
|
||
|
;; generate a dependency list used by the Makefile...
|
||
|
usual-commands))
|
||
|
|
||
|
|
||
|
; Command processor
|
||
|
|
||
|
(define-structures ((command-processor command-processor-interface)
|
||
|
(command (export command-processor)))
|
||
|
(open scheme ;;-level-2 ; eval, interaction-environment
|
||
|
records tables fluids
|
||
|
conditions handle
|
||
|
reading ; gobble-line, with-sharp-sharp
|
||
|
display-conditions ; display-condition
|
||
|
methods
|
||
|
;; environments ; interaction-environment
|
||
|
util ; unspecific
|
||
|
scan ; $note-undefined
|
||
|
features ; force-output
|
||
|
interrupts ; set-enabled-interrupts!
|
||
|
vm-exposure ; primitive-catch
|
||
|
syntactic ; for ## kludge
|
||
|
signals)
|
||
|
(files (env version-info)
|
||
|
(env command)
|
||
|
(env read-command)))
|
||
|
|
||
|
(define-structure basic-commands basic-commands-interface
|
||
|
(open scheme-level-2
|
||
|
command-processor
|
||
|
scan ; noting-undefined-variables
|
||
|
environments ; with-interaction-environment
|
||
|
evaluation ; eval, load-into
|
||
|
;; packages ; package?
|
||
|
)
|
||
|
(files (env basic-command)))
|
||
|
|
||
|
; Usual command set
|
||
|
|
||
|
(define-structure usual-commands usual-commands-interface
|
||
|
(open basic-commands
|
||
|
build-commands
|
||
|
package-commands
|
||
|
debug-commands
|
||
|
inspect-commands
|
||
|
disassemble-commands))
|
||
|
|
||
|
; Image builder.
|
||
|
|
||
|
(define-structures ((build (export build-image stand-alone-resumer))
|
||
|
(build-internals (export simple-condition-handler))
|
||
|
(build-commands build-commands-interface))
|
||
|
(open scheme-level-2
|
||
|
ports ; error-output-port
|
||
|
command-processor
|
||
|
conditions handle
|
||
|
low-level ; flush-the-symbol-tables!
|
||
|
scheme-level-2-internal ; usual-resumer
|
||
|
filenames ; translate
|
||
|
display-conditions ; display-condition
|
||
|
evaluation ; package-for-load, eval
|
||
|
environments ; with-interaction-environment
|
||
|
write-images
|
||
|
signals)
|
||
|
(files (env build)))
|
||
|
|
||
|
; Package commands.
|
||
|
|
||
|
(define-structures ((package-commands package-commands-interface)
|
||
|
(package-commands-internal
|
||
|
package-commands-internal-interface))
|
||
|
(open scheme
|
||
|
command-processor
|
||
|
methods
|
||
|
scan ; noting-undefined-variables
|
||
|
packages ; for creating a user package
|
||
|
packages-internal ; set-package-integrate?!, etc.
|
||
|
package-mutation ; package-system-sentinel
|
||
|
environments ; *structure-ref, etc.
|
||
|
syntactic ; reflective-tower
|
||
|
ensures-loaded ; ensure-loaded
|
||
|
interfaces
|
||
|
ascii ports ; for access-scheme-48
|
||
|
signals
|
||
|
util ; every
|
||
|
fluids)
|
||
|
(files (env pacman)))
|
||
|
|
||
|
|
||
|
; Debugging aids.
|
||
|
|
||
|
; Disclosers: this makes objects and conditions print nicely.
|
||
|
|
||
|
(define-structure disclosers disclosers-interface
|
||
|
(open scheme-level-1
|
||
|
methods more-types
|
||
|
tables
|
||
|
conditions
|
||
|
display-conditions
|
||
|
locations
|
||
|
code-vectors
|
||
|
closures
|
||
|
packages-internal ; location-info-tables
|
||
|
debug-data ; template-names
|
||
|
enumerated ; enumerand->name
|
||
|
weak ; weak-pointer?
|
||
|
templates continuations
|
||
|
architecture)
|
||
|
(files (env disclosers)))
|
||
|
|
||
|
;(define-structure generics generics-interface ;Obsolescent
|
||
|
; (open scheme-level-1
|
||
|
; methods)
|
||
|
; (files (rts generic))
|
||
|
; (optimize auto-integrate))
|
||
|
|
||
|
; For printing procedures with their names, etc.
|
||
|
|
||
|
(define-structure debuginfo debuginfo-interface
|
||
|
(open scheme-level-2
|
||
|
tables
|
||
|
debug-data
|
||
|
packages
|
||
|
packages-internal
|
||
|
syntactic
|
||
|
features
|
||
|
weak)
|
||
|
(files (env debuginfo)))
|
||
|
|
||
|
; Most of the debugging commands.
|
||
|
|
||
|
(define-structures ((debugging ;additional exports in future
|
||
|
(export breakpoint
|
||
|
continuation-parent))
|
||
|
(debug-commands debug-commands-interface))
|
||
|
(open scheme-level-2
|
||
|
command-processor ; define-command, etc.
|
||
|
fluids
|
||
|
signals ; make-condition
|
||
|
util ; filter
|
||
|
evaluation ; eval-from-file, eval
|
||
|
environments ; environment-define! (for ,trace)
|
||
|
conditions ; define-condition-type
|
||
|
filenames ; set-translation!
|
||
|
debug-data ; template-name
|
||
|
packages ; flush-location-names, package-integrate?
|
||
|
packages-internal ; ?
|
||
|
continuations ; continuation-template
|
||
|
architecture ; op/global, etc.
|
||
|
interrupts ; all-interrupts, set-enabled-interrupts!
|
||
|
vm-exposure ; fluid-let suppression kludge - fix later
|
||
|
exceptions ; continuation-preview
|
||
|
tables
|
||
|
syntactic ; for ,bound? command
|
||
|
scan ; $note-file-package
|
||
|
primitives ; memory-status, time
|
||
|
structure-refs)
|
||
|
(access primitives ; want to both use and shadow collect and time
|
||
|
filenames) ; and translate
|
||
|
(files (env debug)))
|
||
|
|
||
|
; Inspector
|
||
|
|
||
|
(define-structures ((inspector (export inspect))
|
||
|
(inspect-commands inspect-commands-interface))
|
||
|
(open scheme-level-2
|
||
|
command-processor ; define-command, etc.
|
||
|
fluids
|
||
|
debugging ; command-loop-continuation
|
||
|
closures ; closure-template
|
||
|
debug-data ; template-debug-data, etc.
|
||
|
templates
|
||
|
continuations
|
||
|
syntactic ; desyntaxify
|
||
|
records
|
||
|
records-internal
|
||
|
low-level ; vector-unassigned?
|
||
|
locations
|
||
|
signals ; error
|
||
|
;; tables - not yet.
|
||
|
weak
|
||
|
util ; sublist
|
||
|
primitives ; unassigned (only)
|
||
|
display-conditions) ; limited-write
|
||
|
(files (env inspect)))
|
||
|
|
||
|
(define-structure list-interfaces (export list-interface)
|
||
|
(open scheme-level-2 interfaces packages meta-types sort syntactic)
|
||
|
(files (env list-interface)))
|
||
|
|
||
|
|
||
|
; Package and interface mutation.
|
||
|
|
||
|
(define-structure package-mutation package-mutation-interface
|
||
|
(open scheme-level-2
|
||
|
shadowing ; shadow-location!
|
||
|
compiler ; package-undefineds
|
||
|
packages
|
||
|
interfaces
|
||
|
syntactic
|
||
|
packages-internal
|
||
|
defpackage ; set-verify-later!
|
||
|
locations
|
||
|
disclosers ; location-info
|
||
|
handle
|
||
|
tables fluids weak signals)
|
||
|
(files (env pedit)))
|
||
|
|
||
|
; The following hooks the compiler up with an exception handler for
|
||
|
; unbound variables.
|
||
|
|
||
|
(define-structure shadowing (export shadow-location!)
|
||
|
(open scheme-level-1
|
||
|
vm-exposure ;primitive-catch
|
||
|
continuations templates locations code-vectors
|
||
|
exceptions signals
|
||
|
architecture) ;(enum op global)
|
||
|
(files (env shadow))) ;Exception handler to support package system
|
||
|
|
||
|
|
||
|
; Disassembler
|
||
|
|
||
|
(define-structures ((disassembler
|
||
|
(export disassemble write-instruction))
|
||
|
(disassemble-commands disassemble-commands-interface))
|
||
|
(open scheme-level-2
|
||
|
command-processor ; define-command
|
||
|
debug-data ; template-name, byte-limit
|
||
|
enumerated ; enumerand->name
|
||
|
disclosers ; location-name
|
||
|
templates
|
||
|
continuations
|
||
|
locations
|
||
|
code-vectors
|
||
|
closures
|
||
|
architecture
|
||
|
signals)
|
||
|
(files (env disasm)))
|
||
|
|
||
|
; Assembler.
|
||
|
|
||
|
(define-structure assembling (export )
|
||
|
(open scheme-level-2 compiler segments architecture
|
||
|
syntactic ;lookup
|
||
|
meta-types ;value-type
|
||
|
templates ; for Richard's version
|
||
|
signals ;error
|
||
|
enumerated ;name->enumerand
|
||
|
code-vectors
|
||
|
locations) ;location?
|
||
|
(files (env assem)))
|
||
|
|
||
|
; Foo
|
||
|
|
||
|
(define-structure assembler (export (lap :syntax))
|
||
|
(open scheme-level-2)
|
||
|
(for-syntax (open scheme-level-2 syntactic meta-types assembling))
|
||
|
(begin
|
||
|
(define-syntax lap
|
||
|
(lambda (e r c)
|
||
|
(make-node (get-operator 'lap syntax-type) e)))))
|
||
|
|
||
|
|
||
|
; Large integers and rational and complex numbers.
|
||
|
|
||
|
(define-structure extended-numbers extended-numbers-interface
|
||
|
(open scheme-level-2
|
||
|
methods meta-methods
|
||
|
bummed-define-record-types
|
||
|
exceptions ; make-opcode-generic!
|
||
|
primitives
|
||
|
architecture
|
||
|
signals
|
||
|
util
|
||
|
number-i/o)
|
||
|
(files (rts xnum)))
|
||
|
|
||
|
(define-structure bignums bignums-interface
|
||
|
(open scheme-level-2
|
||
|
extended-numbers
|
||
|
methods signals)
|
||
|
(files (rts bignum))
|
||
|
(optimize auto-integrate))
|
||
|
|
||
|
(define-structure innums (export ) ;inexact numbers
|
||
|
(open scheme-level-2
|
||
|
extended-numbers
|
||
|
methods signals
|
||
|
number-i/o) ;string->integer
|
||
|
(files (rts innum)))
|
||
|
|
||
|
(define-structure ratnums (export ) ;No exports
|
||
|
(open scheme-level-2
|
||
|
extended-numbers
|
||
|
methods signals
|
||
|
number-i/o) ;string->integer
|
||
|
(files (rts ratnum)))
|
||
|
|
||
|
(define-structure recnums (export ) ;No exports
|
||
|
(open scheme-level-2
|
||
|
extended-numbers
|
||
|
methods signals
|
||
|
number-i/o) ;really-number->string
|
||
|
(files (rts recnum)))
|
||
|
|
||
|
(define-structure floatnums
|
||
|
(export exp log sin cos tan asin acos atan sqrt)
|
||
|
(open scheme-level-2
|
||
|
extended-numbers
|
||
|
code-vectors
|
||
|
methods signals
|
||
|
enumerated
|
||
|
primitives) ;vm-extension
|
||
|
(files (rts floatnum))
|
||
|
(optimize auto-integrate))
|
||
|
|
||
|
(define-structure define-record-types define-record-types-interface
|
||
|
(open scheme-level-1 records)
|
||
|
(files (rts jar-defrecord)))
|
||
|
|
||
|
|
||
|
; --------------------
|
||
|
; Big Scheme
|
||
|
|
||
|
(define-structure queues queues-interface
|
||
|
(open scheme-level-1 bummed-define-record-types signals)
|
||
|
(files (big queue))
|
||
|
(optimize auto-integrate))
|
||
|
|
||
|
(define-structure random (export make-random)
|
||
|
(open scheme-level-2 bitwise)
|
||
|
(files (big random)))
|
||
|
|
||
|
(define-structure sort (export sort-list sort-list!)
|
||
|
(open scheme-level-2)
|
||
|
(files (big sort)))
|
||
|
|
||
|
(define-structure pp (export p pretty-print define-indentation)
|
||
|
(open scheme-level-2
|
||
|
tables
|
||
|
methods) ;disclose
|
||
|
(files (big pp)))
|
||
|
|
||
|
|
||
|
; Bitwise logical operators on bignums.
|
||
|
|
||
|
(define-structure bigbit (export ) ;No exports
|
||
|
(open scheme-level-2
|
||
|
bignums
|
||
|
methods
|
||
|
extended-numbers
|
||
|
;; exceptions
|
||
|
;; architecture
|
||
|
bitwise
|
||
|
signals)
|
||
|
(files (big bigbit)))
|
||
|
|
||
|
|
||
|
; Richard's stuff
|
||
|
|
||
|
(define-structure defrecord defrecord-interface
|
||
|
(open scheme-level-1 records)
|
||
|
(files (big defrecord)))
|
||
|
|
||
|
(define-structure formats (export format)
|
||
|
(open extended-ports ;Exports input-port? and output-port?
|
||
|
ascii
|
||
|
scheme-level-2 signals)
|
||
|
(files (big format)))
|
||
|
|
||
|
(define-structure extended-ports extended-ports-interface
|
||
|
(open scheme-level-2 records defrecord
|
||
|
architecture
|
||
|
conditions signals exceptions structure-refs)
|
||
|
(access ports primitives) ;write-string, close-port, etc.
|
||
|
(files (big xport)
|
||
|
(big new-ports)))
|
||
|
|
||
|
(define-structure destructuring (export (destructure :syntax))
|
||
|
(open scheme-level-2)
|
||
|
(files (big destructure)))
|
||
|
|
||
|
(define-structure arrays arrays-interface
|
||
|
(open scheme-level-2 defrecord signals)
|
||
|
(files (big array)))
|
||
|
|
||
|
(define-structure receiving (export (receive :syntax))
|
||
|
(open scheme-level-2)
|
||
|
(files (big receive)))
|
||
|
|
||
|
(define general-tables tables) ; backward compatibility
|
||
|
|
||
|
(define-structure big-scheme big-scheme-interface
|
||
|
(open extended-ports ;Exports input-port? and output-port?
|
||
|
scheme-level-2 formats queues sort defrecord
|
||
|
pp enumerated
|
||
|
bitwise
|
||
|
ascii
|
||
|
bigbit
|
||
|
general-tables
|
||
|
structure-refs ; for structure-ref
|
||
|
destructuring
|
||
|
receiving)
|
||
|
(access signals ; for error
|
||
|
debugging) ; for breakpoint
|
||
|
(files (big big-util)))
|
||
|
|
||
|
; Externals
|
||
|
|
||
|
(define-structure externals externals-interface
|
||
|
(open scheme-level-2 handle exceptions tables
|
||
|
primitives
|
||
|
architecture ;stob
|
||
|
conditions ;exception-arguments
|
||
|
signals ;warn
|
||
|
ascii code-vectors)
|
||
|
(files (big external)))
|
||
|
|
||
|
; Rudimentary object dump and restore
|
||
|
|
||
|
(define-structure dump/restore dump/restore-interface
|
||
|
(open scheme-level-1
|
||
|
number-i/o
|
||
|
tables
|
||
|
records
|
||
|
signals ;error
|
||
|
locations ;make-undefined-location
|
||
|
closures
|
||
|
code-vectors ;code vectors
|
||
|
fluids
|
||
|
ascii
|
||
|
bitwise
|
||
|
methods ;disclose
|
||
|
templates) ;template-info
|
||
|
(files (big dump)))
|
||
|
|
||
|
; Threads
|
||
|
|
||
|
(define-structure threads threads-interface
|
||
|
(open scheme-level-1
|
||
|
wind ; still needed?
|
||
|
bummed-define-record-types queues fluids
|
||
|
interrupts ;interrupt-handlers, one-second
|
||
|
escapes ;primitive-cwcc
|
||
|
fluids-internal ;get-dynamic-state, etc.
|
||
|
conditions ;error?
|
||
|
handle ;with-handler
|
||
|
signals ;signal
|
||
|
architecture ;(enum time-option real-time)
|
||
|
structure-refs)
|
||
|
(access primitives) ;time
|
||
|
(files (big compose-cont)
|
||
|
(big thread)
|
||
|
(big sleep))
|
||
|
(optimize auto-integrate))
|
||
|
|
||
|
; Glue to connect the threads package with command processor.
|
||
|
|
||
|
(define-structure more-threads (export threads start-threads)
|
||
|
(open scheme threads
|
||
|
handle conditions interrupts signals
|
||
|
command-processor
|
||
|
debugging ;breakpoint
|
||
|
display-conditions
|
||
|
architecture) ;interrupt
|
||
|
(files (env more-thread)))
|
||
|
|
||
|
|
||
|
; Heap traverser
|
||
|
|
||
|
(define-structure traverse
|
||
|
(export traverse-depth-first traverse-breadth-first trail
|
||
|
set-leaf-predicate! usual-leaf-predicate)
|
||
|
(open scheme-level-2
|
||
|
primitives ; ?
|
||
|
queues tables
|
||
|
bitwise locations closures code-vectors
|
||
|
debug-data ; foo
|
||
|
features ; string-hash
|
||
|
low-level) ; flush-the-symbol-table!, vector-unassigned?
|
||
|
(files (env traverse)))
|
||
|
|
||
|
; Space analyzer
|
||
|
|
||
|
(define-structure spatial (export space vector-space record-space)
|
||
|
(open scheme
|
||
|
architecture primitives assembler packages enumerated
|
||
|
features sort locations display-conditions)
|
||
|
(files (env space)))
|
||
|
|
||
|
; Structure & Interpretation compatibility
|
||
|
|
||
|
(define-structure sicp sicp-interface
|
||
|
(open scheme-level-2 signals tables)
|
||
|
(files (misc sicp)))
|
||
|
|
||
|
(define-structure search-trees search-trees-interface
|
||
|
(open scheme-level-2 defrecord receiving)
|
||
|
(optimize auto-integrate)
|
||
|
(files (big search-tree)))
|
||
|
|
||
|
|
||
|
; ... end of package definitions.
|
||
|
|
||
|
|
||
|
; Temporary compatibility stuff
|
||
|
(define-syntax define-signature
|
||
|
(syntax-rules () ((define-signature . ?rest) (define-interface . ?rest))))
|
||
|
(define-syntax define-package
|
||
|
(syntax-rules () ((define-package . ?rest) (define-structures . ?rest))))
|
||
|
(define table tables)
|
||
|
(define record records)
|
||
|
|
||
|
|
||
|
; Must list all the packages defined in this file that are to be
|
||
|
; visible in the command processor's config package.
|
||
|
|
||
|
(define-interface more-structures-interface
|
||
|
(export ((more-structures
|
||
|
usual-features
|
||
|
arrays
|
||
|
assembler
|
||
|
assembling
|
||
|
general-tables
|
||
|
bigbit
|
||
|
bignums ratnums recnums floatnums
|
||
|
build
|
||
|
command-processor
|
||
|
debugging
|
||
|
define-record-types
|
||
|
destructuring
|
||
|
disassembler
|
||
|
disclosers
|
||
|
dump/restore
|
||
|
extended-numbers
|
||
|
extended-ports
|
||
|
externals
|
||
|
formats defrecord
|
||
|
innums
|
||
|
inspector
|
||
|
list-interfaces
|
||
|
more-threads
|
||
|
package-commands-internal
|
||
|
package-mutation
|
||
|
pp
|
||
|
queues
|
||
|
random
|
||
|
receiving
|
||
|
search-trees
|
||
|
sicp
|
||
|
;; sockets
|
||
|
sort
|
||
|
threads
|
||
|
traverse
|
||
|
spatial
|
||
|
big-scheme
|
||
|
;; From link-packages.scm:
|
||
|
analysis
|
||
|
debuginfo
|
||
|
expander
|
||
|
flatloading
|
||
|
linker
|
||
|
link-config
|
||
|
reification ;?
|
||
|
shadowing
|
||
|
;; Compatibility
|
||
|
record table
|
||
|
build-internals ; Added by Olin
|
||
|
)
|
||
|
:structure)
|
||
|
((define-signature define-package) :syntax)))
|