1063 lines
28 KiB
Scheme
1063 lines
28 KiB
Scheme
; Copyright (c) 1993-1999 by 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
|
|
tables fluids
|
|
conditions handle
|
|
define-record-types
|
|
command-levels
|
|
reading ; gobble-line, with-sharp-sharp
|
|
i/o ; current-error-port
|
|
display-conditions ; display-condition
|
|
methods
|
|
;; environments ; interaction-environment
|
|
util ; unspecific
|
|
undefined ; $note-undefined
|
|
features ; force-output
|
|
interrupts ; set-enabled-interrupts!, all-interrupts
|
|
vm-exposure ; primitive-catch
|
|
fluids-internal ; get-dynamic-env, set-dynamic-env!
|
|
nodes ; for ## kludge
|
|
signals
|
|
structure-refs
|
|
root-scheduler) ; scheme-exit-now
|
|
(access threads ; thread?
|
|
threads-internal ; thread-continuation
|
|
continuations ; continuation?
|
|
ports)
|
|
(files (env version-info)
|
|
(env command)
|
|
(env read-command)))
|
|
|
|
(define-structure command-levels command-levels-interface
|
|
(open scheme
|
|
enumerated enum-case
|
|
tables
|
|
session-data
|
|
define-record-types
|
|
threads threads-internal
|
|
queues
|
|
scheduler
|
|
interrupts
|
|
weak
|
|
debug-messages ; for debugging
|
|
signals ; error
|
|
i/o ; current-error-port
|
|
util ; unspecific
|
|
channel-i/o ; steal-channel-port
|
|
fluids-internal ; get-dynamic-env, set-dynamic-env!
|
|
root-scheduler ; call-when-deadlocked!
|
|
conditions) ; define-condition-type
|
|
(files (env command-level)))
|
|
|
|
(define-structure basic-commands basic-commands-interface
|
|
(open scheme-level-2
|
|
command-processor
|
|
command-levels
|
|
undefined ; noting-undefined-variables
|
|
environments ; with-interaction-environment
|
|
evaluation ; eval, load-into
|
|
;; packages ; package?
|
|
root-scheduler ; scheme-exit-now
|
|
)
|
|
(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
|
|
;profile-commands
|
|
))
|
|
|
|
; Image builder.
|
|
|
|
(define-structures ((build (export build-image stand-alone-resumer))
|
|
;JMG added structure for scsh
|
|
(build-internals (export simple-condition-handler))
|
|
(build-commands build-commands-interface))
|
|
(open scheme-level-2
|
|
command-processor
|
|
command-levels
|
|
conditions handle
|
|
low-level ; flush-the-symbol-tables!
|
|
usual-resumer
|
|
filenames ; translate
|
|
display-conditions ; display-condition
|
|
evaluation ; package-for-load, eval
|
|
environments ; with-interaction-environment
|
|
i/o ; current-error-port
|
|
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
|
|
command-levels
|
|
methods
|
|
undefined ; noting-undefined-variables
|
|
packages ; for creating a user package
|
|
packages-internal ; set-package-integrate?!, etc.
|
|
package-mutation ; package-system-sentinel
|
|
environments ; *structure-ref, etc.
|
|
compiler-envs ; reflective-tower
|
|
ensures-loaded ; ensure-loaded
|
|
interfaces
|
|
ascii
|
|
i/o ; force-output, current-error-port
|
|
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
|
|
segments ; get-debug-data
|
|
enumerated ; enumerand->name
|
|
weak ; weak-pointer?
|
|
i/o ; disclose-port
|
|
templates continuations low-channels
|
|
architecture)
|
|
(files (env disclosers)))
|
|
|
|
; For printing procedures with their names, etc.
|
|
|
|
(define-structure debuginfo debuginfo-interface
|
|
(open scheme-level-2
|
|
tables
|
|
debug-data
|
|
segments ; debug-data-table
|
|
;; packages
|
|
packages-internal ; package-name-table
|
|
names ; generated?
|
|
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.
|
|
command-levels
|
|
fluids
|
|
signals ; make-condition
|
|
util ; filter
|
|
evaluation ; eval-from-file, eval
|
|
environments ; environment-define! (for ,trace)
|
|
conditions ; define-condition-type
|
|
filenames ; set-translation!
|
|
disclosers ; template-name, debug-data-names
|
|
packages ; flush-location-names, package-integrate?
|
|
packages-internal ; [set-]package-integrate?[!], flush-location-names
|
|
undefined ; noting-undefined-variables
|
|
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
|
|
nodes ; schemify for ,expand command
|
|
reading-forms ; $note-file-package
|
|
debug-data segments ; yucko
|
|
time ; real-time
|
|
primitives ; memory-status
|
|
structure-refs)
|
|
(access primitives ; want to both use and shadow collect
|
|
filenames ; and translate
|
|
syntactic) ; and expand
|
|
(files (env debug)))
|
|
|
|
; Inspector
|
|
|
|
(define-structures ((inspector (export inspect))
|
|
(inspector-internal (export prepare-menu))
|
|
(inspect-commands inspect-commands-interface))
|
|
(open scheme-level-2
|
|
command-processor ; define-command, etc.
|
|
command-levels
|
|
define-record-types
|
|
fluids
|
|
debugging ; command-loop-continuation
|
|
closures ; closure-template
|
|
disclosers ; template-debug-data, etc.
|
|
debug-data
|
|
evaluation ; eval
|
|
segments ; get-debug-data
|
|
templates
|
|
continuations
|
|
names ; desyntaxify
|
|
records
|
|
records-internal
|
|
low-level ; vector-unassigned?
|
|
locations
|
|
signals ; error
|
|
;; tables - not yet.
|
|
weak
|
|
util ; sublist
|
|
display-conditions) ; limited-write
|
|
(files (env inspect)))
|
|
|
|
(define-structure list-interfaces (export list-interface)
|
|
(open scheme-level-2 interfaces packages meta-types sort bindings)
|
|
(files (env list-interface)))
|
|
|
|
|
|
; Package and interface mutation.
|
|
|
|
(define-structure package-mutation package-mutation-interface
|
|
(open scheme-level-2
|
|
shadowing ; shadow-location!
|
|
packages
|
|
interfaces
|
|
bindings
|
|
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
|
|
disclosers ; template-name
|
|
enumerated ; enumerand->name
|
|
disclosers ; location-name
|
|
evaluation ; eval
|
|
templates
|
|
continuations
|
|
locations
|
|
code-vectors
|
|
closures
|
|
architecture
|
|
signals)
|
|
(files (env disasm)))
|
|
|
|
; Assembler.
|
|
|
|
(define-structure assembling (export) ; No exports, this defines a compilator.
|
|
(open scheme-level-2
|
|
compiler ;define-compilator
|
|
segments
|
|
architecture
|
|
nodes ;node-form node-ref
|
|
bindings ;binding? binding-place
|
|
meta-types ;value-type
|
|
templates ; for Richard's version
|
|
signals ;error
|
|
enumerated ;name->enumerand
|
|
code-vectors)
|
|
(files (env assem)))
|
|
|
|
; Foo
|
|
|
|
(define-structure assembler (export (lap :syntax))
|
|
(open scheme-level-2)
|
|
(for-syntax (open scheme-level-2 nodes meta-types assembling))
|
|
(begin
|
|
(define-syntax lap
|
|
(lambda (e r c)
|
|
(make-node (get-operator 'lap syntax-type) e)))))
|
|
|
|
; Execution profiler.
|
|
|
|
(define-structures ((profile (export run-with-profiling))
|
|
(profile-commands profile-commands-interface))
|
|
(open scheme
|
|
command-processor
|
|
continuations
|
|
architecture
|
|
interrupts
|
|
tables
|
|
primitives ; schedule-interrupt
|
|
wind
|
|
disclosers
|
|
time
|
|
sort
|
|
escapes) ; primitive-cwcc
|
|
(files (env profile)))
|
|
|
|
; Large integers and rational and complex numbers.
|
|
|
|
(define-structure extended-numbers extended-numbers-interface
|
|
(open scheme-level-2
|
|
methods meta-methods
|
|
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 floatnum? exp log sin cos tan asin acos atan sqrt)
|
|
(open scheme-level-2
|
|
extended-numbers
|
|
code-vectors
|
|
methods signals
|
|
enumerated
|
|
loopholes
|
|
more-types ;:double
|
|
primitives) ;vm-extension double?
|
|
(files (rts floatnum))
|
|
(optimize auto-integrate))
|
|
|
|
(define-structure time time-interface
|
|
(open scheme-level-1 primitives architecture enumerated)
|
|
(files (rts time)))
|
|
|
|
(define-structure placeholders placeholder-interface
|
|
(open scheme-level-1 define-record-types
|
|
threads threads-internal queues
|
|
interrupts
|
|
signals)
|
|
(files (big placeholder))
|
|
(optimize auto-integrate))
|
|
|
|
|
|
;----------------
|
|
; Big Scheme
|
|
|
|
(define-structure random (export make-random)
|
|
(open scheme-level-2 bitwise
|
|
signals) ;call-error
|
|
(files (big random)))
|
|
|
|
(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)))
|
|
|
|
(define-structure formats (export format)
|
|
(open scheme-level-2 ascii signals
|
|
extended-ports)
|
|
(files (big format)))
|
|
|
|
(define-structure extended-ports extended-ports-interface
|
|
(open scheme-level-2 records define-record-types ports i/o i/o-internal
|
|
code-vectors ascii
|
|
structure-refs
|
|
signals)
|
|
(access primitives) ; copy-bytes!
|
|
(files (big more-port)))
|
|
|
|
(define-structure destructuring (export (destructure :syntax))
|
|
(open scheme-level-2)
|
|
(files (big destructure)))
|
|
|
|
(define-structure arrays arrays-interface
|
|
(open scheme-level-2 define-record-types signals)
|
|
(files (big array)))
|
|
|
|
(define-structure receiving (export (receive :syntax))
|
|
(open scheme-level-2)
|
|
(files (big receive)))
|
|
|
|
(define-structure defrecord defrecord-interface
|
|
(open scheme-level-1 records loopholes
|
|
primitives) ; unspecific
|
|
(files (big defrecord)))
|
|
|
|
(define-structures ((enum-sets enum-sets-interface)
|
|
(enum-sets-internal enum-sets-internal-interface))
|
|
(open scheme define-record-types
|
|
finite-types
|
|
bitwise
|
|
util
|
|
signals
|
|
external-calls)
|
|
(optimize auto-integrate)
|
|
(files (big enum-set)))
|
|
|
|
(define general-tables tables) ; backward compatibility
|
|
|
|
(define-structure thread-fluids thread-fluids-interface
|
|
(open scheme define-record-types weak
|
|
threads thread-cells fluids)
|
|
(files (big thread-fluid)))
|
|
|
|
;;; Package defs for the Scheme Underground sorting package,
|
|
|
|
;;; The general sort package:
|
|
|
|
(define-structure sorting sorting-interface
|
|
(open scheme
|
|
list-merge-sort
|
|
vector-heap-sort
|
|
vector-merge-sort
|
|
sorted
|
|
delete-neighbor-duplicates)
|
|
(files (sort sort))
|
|
(optimize auto-integrate))
|
|
|
|
(define-structure sorted sorted-interface
|
|
(open scheme
|
|
vector-utils)
|
|
(files (sort sortp))
|
|
(optimize auto-integrate))
|
|
|
|
(define-structure delete-neighbor-duplicates delete-neighbor-duplicates-interface
|
|
(open scheme
|
|
receiving
|
|
vector-utils)
|
|
(files (sort delndups))
|
|
(optimize auto-integrate))
|
|
|
|
(define-structure binary-searches binary-searches-interface
|
|
(open scheme
|
|
vector-utils)
|
|
(files (sort vbinsearch)))
|
|
|
|
(define-structure list-merge-sort list-merge-sort-interface
|
|
(open scheme
|
|
receiving
|
|
(subset signals (error)))
|
|
(files (sort lmsort))
|
|
(optimize auto-integrate))
|
|
|
|
(define-structure vector-merge-sort vector-merge-sort-interface
|
|
(open scheme
|
|
receiving
|
|
vector-utils
|
|
vector-insertion-sort-internal)
|
|
(files (sort vmsort))
|
|
(optimize auto-integrate))
|
|
|
|
(define-structure vector-heap-sort vector-heap-sort-interface
|
|
(open scheme
|
|
receiving
|
|
vector-utils)
|
|
(files (sort vhsort))
|
|
(optimize auto-integrate))
|
|
|
|
(define-structures ((vector-insertion-sort vector-insertion-sort-interface)
|
|
(vector-insertion-sort-internal
|
|
vector-insertion-sort-internal-interface))
|
|
(open scheme
|
|
vector-utils)
|
|
(files (sort visort))
|
|
(optimize auto-integrate))
|
|
|
|
(define-structure vector-utils (export vector-copy
|
|
vector-portion-copy
|
|
vector-portion-copy!
|
|
vector-start+end
|
|
vectors-start+end-2)
|
|
(open scheme)
|
|
(files (sort vector-util)))
|
|
|
|
;;; end Package defs for the Scheme Underground sorting package,
|
|
|
|
(define-structure sort (export sort-list sort-list!)
|
|
(open scheme-level-2
|
|
sorting)
|
|
(begin
|
|
(define (sort-list l obj-<)
|
|
(list-sort obj-< l))
|
|
(define (sort-list! l obj-<)
|
|
(list-sort! obj-< l))))
|
|
|
|
(define-structure big-util big-util-interface
|
|
(open scheme-level-2
|
|
formats
|
|
features ; immutable? make-immutable!
|
|
structure-refs) ; structure-ref
|
|
(access signals ; error
|
|
debugging ; breakpoint
|
|
primitives) ; copy-bytes!
|
|
(files (big big-util)))
|
|
|
|
(define-structure big-scheme big-scheme-interface
|
|
(open scheme-level-2
|
|
formats
|
|
sort
|
|
extended-ports
|
|
pp
|
|
enumerated
|
|
bitwise
|
|
ascii
|
|
bigbit
|
|
big-util
|
|
tables
|
|
;defrecord
|
|
destructuring
|
|
receiving))
|
|
|
|
; Things needed for connecting with external code.
|
|
|
|
(define-structure external-calls (export call-imported-binding
|
|
lookup-imported-binding
|
|
define-exported-binding
|
|
shared-binding-ref
|
|
((import-definition
|
|
import-lambda-definition)
|
|
:syntax)
|
|
add-finalizer!
|
|
define-record-resumer
|
|
call-external-value)
|
|
(open scheme-level-2 define-record-types
|
|
primitives
|
|
architecture
|
|
exceptions interrupts signals
|
|
placeholders
|
|
shared-bindings
|
|
byte-vectors
|
|
bitwise bigbit ;for {enter|extract}_integer() helpers
|
|
records)
|
|
(files (big import-def)
|
|
(big callback)))
|
|
|
|
(define-structure dynamic-externals dynamic-externals-interface
|
|
(open scheme-level-2 define-record-types tables
|
|
signals ;warn
|
|
primitives ;find-all-records
|
|
i/o ;current-error-port
|
|
code-vectors
|
|
external-calls)
|
|
(files (big external)))
|
|
|
|
; Externals - this is obsolete; use external-calls and dynamic-externals
|
|
; instead.
|
|
|
|
(define-structure externals (compound-interface
|
|
dynamic-externals-interface
|
|
(export external-call
|
|
null-terminate))
|
|
(open scheme-level-2 structure-refs
|
|
dynamic-externals)
|
|
(access external-calls)
|
|
(begin
|
|
; We fake the old external-call primitive using the new one and a
|
|
; a C helper procedure from c/unix/dynamo.c.
|
|
|
|
(define (external-call proc . args)
|
|
(let ((args (apply vector args)))
|
|
(old-external-call (external-value proc) args)))
|
|
|
|
((structure-ref external-calls import-lambda-definition)
|
|
old-external-call (proc args)
|
|
"s48_old_external_call")
|
|
|
|
; All strings are now null terminated.
|
|
(define (null-terminate string) string)))
|
|
|
|
; 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)))
|
|
|
|
; Unix Sockets
|
|
|
|
(define-structure sockets
|
|
(export open-socket
|
|
close-socket
|
|
socket-accept
|
|
socket-port-number
|
|
socket-client
|
|
|
|
get-host-name
|
|
|
|
; From the old interface; I would like to get rid of these.
|
|
socket-listen
|
|
socket-listen-channels
|
|
socket-client-channels
|
|
)
|
|
(open scheme define-record-types
|
|
external-calls
|
|
low-channels ; channel? close-channel
|
|
signals ; error
|
|
interrupts ; enable-interrupts! disable-interrupts!
|
|
channel-i/o) ; wait-for-channel {in|out}put-channel->port
|
|
(files (big socket)))
|
|
|
|
; 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
|
|
disclosers ; 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)))
|
|
|
|
; red-black balanced binary search trees
|
|
|
|
(define-structure search-trees search-trees-interface
|
|
(open scheme-level-2 define-record-types)
|
|
(optimize auto-integrate)
|
|
(files (big search-tree)))
|
|
|
|
(define-structure finite-types (export ((define-finite-type
|
|
define-enumerated-type) :syntax))
|
|
(open scheme-level-2 code-quote define-record-types
|
|
enumerated
|
|
features) ; make-immutable
|
|
(files (big finite-type)))
|
|
|
|
; nondeterminism via call/cc
|
|
|
|
(define-structure nondeterminism (export with-nondeterminism
|
|
((either one-value all-values) :syntax)
|
|
fail)
|
|
(open scheme-level-2
|
|
fluids cells
|
|
(subset signals (error)))
|
|
(files (big either)))
|
|
|
|
;----------------
|
|
; SRFI packages
|
|
|
|
; SRFI-0 - Doesn't work with the module system.
|
|
|
|
; Olin's list library.
|
|
|
|
(define-structure srfi-1 srfi-1-interface
|
|
(open scheme-level-2
|
|
receiving
|
|
(subset signals (error)))
|
|
(files (srfi srfi-1)))
|
|
|
|
(define-structure srfi-2 (export (and-let* :syntax))
|
|
(open scheme-level-2
|
|
signals) ; error
|
|
(files (srfi srfi-2)))
|
|
|
|
; SRFI-3 - withdrawn
|
|
; SRFI-4 - needs hacks to the reader
|
|
|
|
(define-structure srfi-5 (export (let :syntax))
|
|
(open (modify scheme-level-2 (rename (let standard-let))))
|
|
(files (srfi srfi-5)))
|
|
|
|
(define-structure srfi-6 (export open-input-string
|
|
open-output-string
|
|
get-output-string)
|
|
(open (modify extended-ports
|
|
(rename (make-string-input-port open-input-string)
|
|
(make-string-output-port open-output-string)
|
|
(string-output-port-output get-output-string)))))
|
|
|
|
; Configuration language
|
|
|
|
(define-structure srfi-7 (export) ; defines a command
|
|
(open scheme
|
|
|
|
; for parsing programs
|
|
receiving
|
|
nondeterminism
|
|
(subset signals (error))
|
|
|
|
(subset package-commands-internal (config-package))
|
|
ensures-loaded
|
|
(subset packages (note-structure-name!))
|
|
|
|
; for defining the command
|
|
(subset command-processor (define-user-command-syntax
|
|
user-command-environment))
|
|
(subset environments (environment-define!)))
|
|
|
|
(begin
|
|
(define available-srfis
|
|
'(srfi-1 srfi-2 srfi-5 srfi-6 srfi-7 srfi-8 srfi-9
|
|
srfi-11 srfi-13 srfi-14 srfi-16 srfi-17 srfi-19 srfi-23
|
|
srfi-25 srfi-26 srfi-27 srfi-28
|
|
srfi-30 srfi-31 srfi-37
|
|
srfi-42))
|
|
|
|
; Some SRFI's redefine Scheme variables.
|
|
(define shadowed
|
|
'((srfi-1 map for-each member assoc)
|
|
(srfi-5 let)
|
|
(srfi-13 string->list string-copy string-fill!)
|
|
(srfi-17 set!)))
|
|
)
|
|
|
|
(files (srfi srfi-7)))
|
|
|
|
; Taken directly from the SRFI document (or from `receiving', take your pick).
|
|
|
|
(define-structure srfi-8 (export (receive :syntax))
|
|
(open scheme-level-2)
|
|
(begin
|
|
(define-syntax receive
|
|
(syntax-rules ()
|
|
((receive formals expression body ...)
|
|
(call-with-values (lambda () expression)
|
|
(lambda formals body ...)))))))
|
|
|
|
; SRFI-9 is a slight modification of DEFINE-RECORD-TYPE.
|
|
|
|
(define-structure srfi-9 (export (define-record-type :syntax))
|
|
(open scheme-level-2
|
|
(with-prefix define-record-types sys:))
|
|
(begin
|
|
(define-syntax define-record-type
|
|
(syntax-rules ()
|
|
((define-record-type type-name . stuff)
|
|
(sys:define-record-type type-name type-name . stuff))))))
|
|
|
|
; SRFI-10 - no stand-alone interface.
|
|
|
|
(define-structure srfi-11 (export (let-values :syntax)
|
|
(let*-values :syntax))
|
|
(open scheme-level-2)
|
|
(files (srfi srfi-11)))
|
|
|
|
; SRFI-12 - withdrawn
|
|
|
|
; Two more encyclopedias from Olin.
|
|
|
|
(define-structure srfi-13 srfi-13-interface
|
|
(open scheme-level-2
|
|
bitwise
|
|
srfi-8 srfi-14
|
|
(subset signals (error)))
|
|
(files (srfi srfi-13)))
|
|
|
|
(define-structure srfi-14 srfi-14-interface
|
|
(open scheme-level-2
|
|
bitwise
|
|
srfi-9
|
|
(modify ascii (rename (char->ascii %char->latin1)
|
|
(ascii->char %latin1->char)))
|
|
(subset features (make-immutable!))
|
|
(subset signals (error)))
|
|
(files (srfi srfi-14)))
|
|
|
|
; SRFI-15 - withdrawn
|
|
|
|
(define-structure srfi-16 (export (case-lambda :syntax))
|
|
(open scheme-level-2
|
|
(subset signals (error)))
|
|
(files (srfi srfi-16)))
|
|
|
|
(define-structure srfi-17 (export (set! :syntax) setter)
|
|
(open (modify scheme-level-2 (rename (set! scheme-set!)))
|
|
(subset signals (error))
|
|
(subset util (unspecific)))
|
|
(files (srfi srfi-17)))
|
|
|
|
; SRFI-18 - no implementation given
|
|
|
|
(define (make-srfi-19 scheme-with-scsh)
|
|
(structure srfi-19-interface
|
|
(open scheme-with-scsh
|
|
(subset srfi-1 (reverse!))
|
|
srfi-6
|
|
srfi-8
|
|
srfi-9
|
|
srfi-23)
|
|
(files (srfi srfi-19))))
|
|
|
|
; SRFI-20 - withdrawn
|
|
; SRFI-21 - no implementation given
|
|
; SRFI-22 - no implementation given
|
|
|
|
(define-structure srfi-23 (export error)
|
|
(open (subset signals (error))))
|
|
|
|
; SRFI-24 - withdrawn
|
|
|
|
(define-structure srfi-25 (export
|
|
array? make-array shape array
|
|
array-rank
|
|
array-start array-end
|
|
array-ref array-set! share-array)
|
|
(open scheme
|
|
srfi-23
|
|
srfi-9)
|
|
(files (srfi srfi-25)))
|
|
|
|
|
|
(define-structure srfi-26 (export ((cut cute) :syntax))
|
|
(open scheme)
|
|
(files (srfi srfi-26)))
|
|
|
|
(define-structure srfi-27 srfi-27-interface
|
|
(open
|
|
scheme-level-1
|
|
floatnums
|
|
external-calls
|
|
(subset srfi-9 (define-record-type))
|
|
(subset srfi-23 (error)))
|
|
;; scsh doesn't have S48's posix subsystem yet:
|
|
; (subset posix-time (current-time))
|
|
; (subset posix (time-seconds)))
|
|
(files (srfi srfi-27)))
|
|
|
|
(define-structure srfi-28 (export format)
|
|
(open scheme
|
|
srfi-23
|
|
srfi-6)
|
|
(files (srfi srfi-28)))
|
|
|
|
; SRFI-29 - requires access to the current locale
|
|
|
|
; SRFI-30 - scheme/rts/read.scm contains the reader for #|...|# comments
|
|
|
|
(define-structure srfi-31 srfi-31-interface
|
|
(open scheme)
|
|
(files (srfi srfi-31)))
|
|
|
|
(define-structure srfi-37 srfi-37-interface
|
|
(open scheme
|
|
srfi-9
|
|
srfi-11)
|
|
(files (srfi srfi-37)))
|
|
|
|
; Eager Comprehensions
|
|
|
|
(define-structure srfi-42 srfi-42-interface
|
|
(open scheme
|
|
srfi-23)
|
|
(files (srfi srfi-42)))
|
|
; ... 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
|
|
callback
|
|
cells
|
|
command-levels
|
|
command-processor
|
|
debugging
|
|
define-record-types
|
|
defrecord
|
|
destructuring
|
|
disassembler
|
|
disclosers
|
|
dump/restore
|
|
dynamic-externals
|
|
enum-case
|
|
enum-sets
|
|
extended-numbers
|
|
extended-ports
|
|
externals
|
|
external-calls
|
|
finite-types
|
|
formats
|
|
innums
|
|
inspector
|
|
inspector-internal
|
|
;linked-queues
|
|
list-interfaces
|
|
;more-threads
|
|
package-commands-internal
|
|
package-mutation
|
|
placeholders
|
|
pp
|
|
;profile
|
|
queues
|
|
time
|
|
random
|
|
receiving
|
|
search-trees
|
|
sicp
|
|
sockets
|
|
|
|
sort
|
|
delete-neighbor-duplicates
|
|
binary-searches
|
|
sorted
|
|
list-merge-sort
|
|
vector-merge-sort
|
|
vector-heap-sort
|
|
vector-insertion-sort
|
|
sorting
|
|
|
|
strong
|
|
thread-fluids
|
|
traverse
|
|
spatial
|
|
big-scheme
|
|
big-util
|
|
;; From link-packages.scm:
|
|
analysis
|
|
debuginfo
|
|
expander
|
|
flatloading
|
|
linker
|
|
link-config
|
|
reification ;?
|
|
shadowing
|
|
;; Compatibility
|
|
record table
|
|
build-internals ;added by JMG
|
|
|
|
; SRFI packages
|
|
srfi-1 srfi-2 srfi-5 srfi-6 srfi-7 srfi-8 srfi-9
|
|
srfi-11 srfi-13 srfi-14 srfi-16 srfi-17
|
|
srfi-23 srfi-25 srfi-26 srfi-27 srfi-28
|
|
srfi-31 srfi-37
|
|
srfi-42
|
|
)
|
|
:structure)
|
|
make-srfi-19
|
|
((define-signature define-package) :syntax)))
|