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 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916
|
; Copyright (c) 1993, 1994 Richard Kelsey and Jonathan Rees. See file COPYING.
; Some interfaces. Order of presentation is a bit random.
(define-interface scheme-level-0-interface
(export ((if begin lambda letrec quote set!
define define-syntax let-syntax letrec-syntax)
:syntax)
;; The basic derived expression types.
((and cond do let let* or) :syntax)
apply
;; Scalar primitives
eq?
number? integer? rational? real? complex?
exact? exact->inexact inexact->exact
+ - * / = <
quotient remainder
floor numerator denominator
real-part imag-part
exp log sin cos tan asin acos atan sqrt
angle magnitude make-polar make-rectangular
char?
char=? char<?
eof-object?
;; Data manipulation
pair? cons car cdr set-car! set-cdr!
symbol? symbol->string
string? make-string string-length string-ref string-set!
vector? make-vector vector-length vector-ref vector-set!
input-port? output-port?
read-char peek-char char-ready?
write-char
;; Unnecessarily primitive
string=?
;; New in Revised^5 Scheme
values call-with-values
;; Things aren't primitive at the VM level, but they have
;; to be defined using VM primitives.
string-copy
string->symbol
procedure?
integer->char char->integer
close-output-port close-input-port
open-input-file open-output-file))
; Miscellaneous primitives.
(define-interface primitives-interface
(export close-port ;extended-ports
collect ; ,collect command
continuation-length
continuation-ref
continuation-set!
continuation?
extended-number-length
extended-number-ref
extended-number-set!
extended-number?
external-call
external-lookup
external-name
external-value
external?
find-all-xs ; externals.scm
force-output ;ports re-exports this.
get-dynamic-state ;fluids
make-continuation
make-extended-number
make-external
make-record
make-template
make-weak-pointer
memory-status ;interrupts
record-length
record-ref
record-set!
record?
schedule-interrupt ;interrupts re-exports
set-dynamic-state! ;fluids
set-enabled-interrupts! ;interrupts
set-exception-handler!
set-interrupt-handlers! ;interrupts
template-length
template-ref
template-set!
template?
time ;interrupts
unspecific ;record
vm-extension
vm-return
weak-pointer-ref
weak-pointer?
write-string)) ;ports
(define-interface bitwise-interface
(export arithmetic-shift
bitwise-not bitwise-and bitwise-ior bitwise-xor))
(define-interface locations-interface
(export location?
location-defined?
location-id
set-location-id!
make-location ;run.scm ? mini-packages.scm ?
make-undefined-location ;defined in base.scm
set-location-defined?!
contents
set-contents!))
(define-interface closures-interface
(export closure?
make-closure
closure-env
closure-template))
(define-interface code-vectors-interface
(export code-vector?
code-vector-length
code-vector-ref
code-vector-set!
make-code-vector))
; Miscellaneous useful primitives used in various random places.
(define-interface features-interface
(export force-output
immutable?
make-immutable!
string-hash))
; Another hodge-podge.
(define-interface low-level-interface
(export vector-unassigned? ; inspector
flush-the-symbol-table! ;build.scm
maybe-open-input-file ;mobot system
maybe-open-output-file))
(define-interface vm-exposure-interface
(export invoke-closure ;eval
primitive-catch)) ;shadowing, start, command
(define-interface escapes-interface
(export primitive-cwcc
with-continuation))
(define-interface ascii-interface
(export ascii->char
char->ascii
ascii-limit
ascii-whitespaces))
; Level 1: The rest of Scheme except for I/O.
(define-interface scheme-level-1-adds-interface
(export ((case delay quasiquote syntax-rules) :syntax)
<= > >=
abs
append assoc assq assv
boolean?
caaaar caaadr caadar caaddr caaar caadr caar
cadaar cadadr caddar cadddr cadar caddr cadr
cdaaar cdaadr cdadar cdaddr cdaar cdadr cdar
cddaar cddadr cdddar cddddr cddar cdddr cddr
char->integer char-alphabetic?
ceiling
char-ci<=? char-ci<? char-ci=? char-ci>=? char-ci>?
char-downcase char-lower-case? char-numeric?
char-upcase
char-upper-case? char-whitespace? char<=?
char>=? char>? close-input-port close-output-port
equal? eqv? even? expt
for-each force
gcd
inexact?
integer->char
lcm length list list->string list->vector
list? ;New in R4RS
list-ref list-tail
map max member memq memv min modulo
negative? not null?
odd? open-input-file open-output-file
positive?
procedure? ;from low-level
rationalize
reverse
round
string string->list string->symbol
string-append
string-ci<=? string-ci<? string-ci=? string-ci>=? string-ci>?
string-copy ;from low-level
string-fill!
string<=? string<? string=? string>=? string>?
substring
truncate
vector vector->list vector-fill!
zero?))
(define-interface scheme-level-1-interface
(compound-interface scheme-level-1-adds-interface
scheme-level-0-interface))
(define-interface util-interface
(export any
every
filter
last
posq
posv
position
reduce
sublist
insert
unspecific))
; Level 2 consists of harder things built on level 1.
(define-interface records-interface
(export make-record-type
record-constructor
record-accessor
record-modifier
record-predicate
define-record-discloser
record-type?
record-type-field-names
record-type-name))
(define-interface records-internal-interface
(export record?
record-type
record-length
record-ref
record-set!
:record-type
disclose-record))
(define-interface define-record-types-interface
(export (define-record-type :syntax)
define-record-discloser))
(define-interface methods-interface
(export (define-generic :syntax)
(define-method :syntax)
(define-simple-type :syntax)
:values
:value
:number
:complex
:real
:rational
:integer
:exact-integer
:boolean
:symbol
:char
:null
:pair
:vector
:string
:procedure
:input-port
:output-port
:eof-object
:record
:record-type
:zero
singleton
disclose &disclose))
(define-interface meta-methods-interface
(export type-predicate &type-predicate
type-priority &type-priority
type-superiors &type-superiors
same-type? &same-type?
add-method! &add-method!
set-final-method!
make-method-table ;rts/exception.scm
method-table-get-perform ;rts/exception.scm
make-simple-type
;; Hooks for DOODL or other future extension
:simple-type :method-info :method-table :singleton
make-generic
(method-info :syntax)
methods->perform))
(define-interface number-i/o-interface
(export number->string &number->string
string->number
really-string->number &really-string->number ;exactness argument
string->integer))
(define-interface fluids-interface
(export make-fluid
let-fluid
let-fluids
fluid
set-fluid!))
(define-interface fluids-internal-interface
(export initialize-dynamic-state!
current-thread
set-current-thread!
get-dynamic-env ;thread.scm
set-dynamic-env! ;wind.scm
fluid-lookup)) ;wind.scm
(define-interface enumerated-interface
(export (define-enumeration :syntax)
(enum :syntax)
(enumerand->name :syntax)
(name->enumerand :syntax)))
(define :enumeration :syntax)
(define-interface signals-interface
(export error warn syntax-error call-error
signal signal-condition
make-condition))
(define-interface handle-interface
(export ignore-errors with-handler))
(define-interface conditions-interface
(export define-condition-type
condition-predicate
condition-stuff condition-type
error? warning? syntax-error? call-error? read-error?
interrupt?
;; Do these belong here?... not really.
exception-arguments
exception-opcode
exception?
make-exception))
(define-interface wind-interface
(export call-with-current-continuation
dynamic-wind))
(define-interface ports-interface
(export call-with-input-file call-with-output-file
current-input-port current-output-port
with-input-from-file with-output-to-file
newline
input-port-option ;read.scm
output-port-option ;write.scm
write-string ;write.scm
with-initial-ports ;init.scm
error-output-port
force-output ;xport.scm
input-port?
;;;more exports added for scsh -dalbertz
$current-input-port
$current-output-port
$error-output-port
;;;end of additions
output-port?))
(define-interface exceptions-interface
(export define-exception-handler
initialize-exceptions!
make-opcode-generic!
signal-exception
continuation-preview ;env/debug.scm
really-signal-condition)) ;rts/xprim.scm
(define-interface interrupts-interface
(export initialize-interrupts! ;init.scm
interrupt-handlers ;thread.scm
interrupt?
set-enabled-interrupts! ;command.scm
enabled-interrupts
one-second
all-interrupts
with-interrupts ; For scsh
with-interrupts-allowed
with-interrupts-inhibited
interrupt-before-heap-overflow!
schedule-interrupt
interrupt
(enum :syntax)))
(define-interface writing-interface
(export write
display
display-type-name
recurring-write))
(define-interface reading-interface
(export read
define-sharp-macro ;command.scm
reading-error
gobble-line
;;; added for scsh for dalbertz by bdc
preferred-case
parse-token
set-standard-read-macro!
set-standard-syntax!
dot
sub-read-token
))
; Level 2: the harder stuff.
; Various primitives get promoted to n-ary at this point.
(define-interface scheme-level-2-adds-interface
(export ((+ - * /) (proc (&rest :number) :number))
((< = > <= >=) (proc (&rest :number) :boolean))
(make-vector (proc (:exact-integer &opt :value) :vector))
(make-string (proc (:exact-integer &opt :char) :string))
((write-char) (proc (:char &opt :output-port) :unspecific))
((read-char peek-char char-ready?)
(proc (&opt :input-port) :value))
call-with-current-continuation
call-with-input-file call-with-output-file
current-input-port current-output-port
dynamic-wind ;New in R5RS
with-input-from-file with-output-to-file
number->string string->number
newline display write
read))
(define-interface scheme-level-2-interface
(compound-interface scheme-level-2-adds-interface
scheme-level-1-interface))
(define-interface scheme-adds-interface
(export eval load
interaction-environment
scheme-report-environment))
(define-interface scheme-interface
(compound-interface scheme-adds-interface
scheme-level-2-interface))
; Stuff that comes for free with level 2.
(define-interface scheme-level-2-internal-interface
(export usual-resumer))
(define-interface continuations-interface
(export continuation-arg
continuation-arg-count
continuation-cont
continuation-env
continuation-overhead ;foo
continuation-pc
continuation-template
continuation-parent
continuation?
:continuation))
(define-interface templates-interface
(export make-template
template-code
template-info
template-length
template-ref
template-overhead
set-template-code!
set-template-info!
template-set!
template?))
(define-interface weak-interface
(export weak-pointer? ;disclosers.scm
weak-pointer-ref
make-weak-pointer
make-population
add-to-population!
population->list
walk-population))
(define-interface filenames-interface
(export namestring *scheme-file-type* *load-file-type*
file-name-directory
file-name-nondirectory
translate
set-translation!
translations))
; Things for the compiler.
(define-interface general-tables-interface
(export make-table
make-string-table
make-symbol-table
make-integer-table
make-table-maker
table?
table-ref
table-set!
table-walk
make-table-immutable!))
(define-interface usual-macros-interface
(export usual-transform))
(define-interface meta-types-interface
(export same-type?
subtype?
meet?
join-type
meet-type
sexp->type type->sexp rail-type->sexp
syntax-type
any-values-type
any-arguments-type
value-type
error-type
make-some-values-type
empty-rail-type
rail-type
make-optional-type
make-rest-type
empty-rail-type?
rest-type?
head-type
tail-type
procedure-type
procedure-type-domain
procedure-type-codomain
restrictive?
procedure-type?
fixed-arity-procedure-type?
procedure-type-argument-types
procedure-type-arity
any-procedure-type
(proc :syntax)
(some-values :syntax)
boolean-type
char-type
null-type
unspecific-type
exact-integer-type
integer-type
rational-type
real-type
complex-type
number-type
exact-type
inexact-type
pair-type
string-type
symbol-type
vector-type
escape-type
structure-type))
(define-interface syntactic-interface
(export binding?
binding-place
clobber-binding!
binding-static
binding-type
make-binding
desyntaxify
forget-integration
impose-type
literal?
generate-name ;package.scm, for accesses
generated-env
generated-parent-name
generated-symbol
generated?
get-operator
make-qualified
make-operator-table
make-transform
maybe-transform-call
n-ary?
name->qualified
name->symbol
name-hash ;package.scm
name? ;assem.scm
normalize-formals
number-of-required-args
operator-name
operator-table-ref
operator-define!
operator-lookup
operator-type
operator-uid
operator?
operators-table ;config.scm
process-syntax
qualified?
qualified-parent-name
qualified-symbol
set-binding-place!
same-denotation? ;for redefinition messages
syntax?
transform-env transform-aux-names ;link/reify.scm
transform-source transform-id ;link/reify.scm
transform-type
transform?
unbound?
schemify
get-funny
reflective-tower
funny-name/reflective-tower
;; Stuff moved from meta-types
variable-type
variable-type?
variable-value-type
usual-variable-type
compatible-types?
undeclared-type
bind-source-file-name
funny-name/reader
environment-reader))
(define-interface nodes-interface
(export classify
make-node
;; name-node-binding
node?
node-operator
node-operator-id
node-form
node-ref
node-set!
node-predicate
make-similar-node
define-node?
define-syntax-node?
scan-body
lookup
bind
bind1))
; Interfaces.
(define-interface interfaces-interface
(export make-compound-interface
make-simple-interface
note-reference-to-interface!
interface-ref
interface?
interface-clients
for-each-declaration
note-interface-name!))
; Packages.
(define-interface packages-interface
(export make-package
make-simple-package ;start.scm
make-structure
package-define!
package-lookup
package? ;command.scm
structure-lookup ;env.scm
generic-lookup ;inline.scm
structure-interface ;config.scm
package->environment
structure?
package-uid ;reifier
make-new-location ;ctop.scm
package-note-caching
structure-package
extract-package-from-environment
package-define-funny!
note-structure-name!
(:package :type)
(:structure :type))) ;for (define-method ...)'s
(define-interface packages-internal-interface
(export package-loaded? ;env/load-package.scm
set-package-loaded?! ;env/load-package.scm
package-name
flush-location-names
package-name-table ;debuginfo
location-info-table ;debuginfo, disclosers
package-unstable? ;env/pacman.scm
package-integrate? ;env/debug.scm
package-get
package-put!
;; For scanner
for-each-export
package-accesses
package-clauses
package-file-name
package-opens
set-package-integrate?!
structure-name
;; For package mutation
for-each-definition
set-package-opens!
set-structure-interface!
set-package-opens-thunk!
structure-clients
package-opens-thunk
package-opens-really
structure-interface-really
make-new-location
$get-location
set-package-get-location!
initialize-structure!
initialize-package!
extract-package-from-environment ;foo
package-cached
package-definitions
package-clients))
(define-interface scan-interface
(export scan-forms
scan-file
really-scan-file
really-scan-port ; for scsh
scan-structures ;load-package.scm, link/link.scm
really-scan-structures
scan-package
set-optimizer!
$note-file-package
noting-undefined-variables
really-noting-undefined-variables
$note-undefined ;env/command.scm
note-undefined!
check-structure))
(define-interface segments-interface
(export attach-label
byte-limit
empty-segment
instruction
instruction-using-label
instruction-with-literal
instruction-with-location
instruction-with-template
make-label
note-environment
note-source-code
segment->template
segment-size
sequentially))
(define-interface compiler-interface
(export compile
compile-and-run-file ;for LOAD
compile-and-run-port ;for LOAD (in scsh)
compile-and-run-forms ;for EVAL
compile-and-run-scanned-forms ;for eval.scm / ensure-loaded
compile-file ;link/link.scm
compile-form ;link/link.scm
compile-scanned-forms ;link/link.scm
make-startup-procedure ;link/link.scm
package-undefineds ; env/pedit.scm
package-undefined-but-assigneds
location-for-reference
set-type-check?! ; for timings
define-compilator ;assem.scm
deliver-value ;assem.scm
get-location ;assem.scm
environment-level ;assem.scm
bind-vars ;assem.scm
))
(define-interface debug-data-interface
(export debug-data-env-maps
debug-data-name
debug-data-names
debug-data-parent
debug-data-pc-in-parent
debug-data-source
debug-data-table
debug-data-uid
debug-data?
get-debug-data
make-debug-data
template-debug-data
template-id
template-name
template-names
debug-flag-names
debug-flag-accessor
debug-flag-modifier
with-fresh-compiler-state)) ;for linker
(define-interface evaluation-interface
(export eval load load-into load-quietly eval-from-file
eval-scanned-forms really-eval-scanned-forms))
(define-interface environments-interface ;cheesy
(export *structure-ref
environment-define!
environment-ref
environment-set!
interaction-environment
make-reflective-tower
scheme-report-environment
set-interaction-environment!
set-scheme-report-environment!
with-interaction-environment
set-reflective-tower-maker!))
(define-interface defpackage-interface
(export ((def ;Formerly define-structure
define-interface ;Formerly define-signature
define-structures ;Formerly define-package
define-structure
define-module
define-syntax
define-reflective-tower-maker
export-reflective-tower-maker
compound-interface
export
structure structures let ; New
begin ; mostly for macros
define ; for compatibility?
a-package) ; cf. env/init-defpackage.scm
:syntax)
values
interface-of
set-verify-later!))
(define-interface types-interface
(export ((:syntax :values :arguments :value) :type)
(procedure (proc (:type :type) :type)) ; (procedure T1 T2)
(proc :syntax) ; (proc (T1 ... Tn) T)
(some-values :syntax) ; (some-values T1 ... Tn)
((:boolean
:char
:number
:complex :real :rational :integer :exact-integer
:null
:unspecific
:pair
:string
:symbol
:vector
:procedure
:input-port :output-port
:error
:escape)
:type)
(:structure :type)
:type)) ;Holy stratification, Batman!
; VM architecture
(define-interface architecture-interface
(export (enum :syntax) ;So you don't have to remember to open ENUMERATED
(enumerand->name :syntax)
(name->enumerand :syntax)
bits-used-per-byte
(interrupt :enumeration)
interrupt-count
(memory-status-option :enumeration)
memory-status-option-count
(op :enumeration)
op-count
opcode-arg-specs
(stob :enumeration)
stob-count
stob-data
(time-option :enumeration)
time-option-count))
(define-interface display-conditions-interface
(export display-condition ;command.scm
&disclose-condition ;env/disclosers.scm
limited-write))
(define-interface inline-interface
(export inline-transform
;; name->qualified qualified?
qualified->name
substitute))
; Bindings needed by the form composed by REIFY-STRUCTURES.
(define-interface for-reification-interface
(export operator
simple-interface
package
transform
;; From usual-macros
usual-transform
;; From inline
inline-transform
;; From packages
package-define!
make-structure
))
;(define-interface command-interface ...) -- moved to more-interfaces.scm
|