; Copyright (c) 1993-1999 by Richard Kelsey. See file COPYING. (define-interface utilities-interface (export bug user-error user-warning true false or-map remove-similar-elts select-from-table table->list table->entry-list table-push table-pop merge-lists vector-every? make-ignorable sub-vector->list flag-assq enforce writec mem? walk-vector vector-replace copy-list copy-vector symbol-hash string-hash char->ascii object-hash union intersection set-difference make-xvector xvector-length xvector-ref xvector-set! xvector->vector (define-subrecord :syntax) ;(define-simple-record-type :syntax) (define-local-syntax :syntax) )) (define-interface primop-interface (export primop? make-primop make-proc-primop make-conditional-primop all-primops get-primop primop-id primop-trivial? primop-side-effects primop-cost simplify-call primop-procedure? primop-call-index primop-conditional? expand-to-conditional simplify-conditional? primop-code-data set-primop-code-data! trivial-call-return-type (primop :syntax) )) (define-interface variable-interface (export variable? make-variable global-variable? make-global-variable variable-name set-variable-name! variable-id variable-type set-variable-type! variable-binder set-variable-binder! variable-refs set-variable-refs! variable-flag set-variable-flag! variable-flags set-variable-flags! variable-generate set-variable-generate! erase-variable variable-index copy-variable used? unused? variable-known-value add-variable-known-value! remove-variable-known-value! variable-simplifier add-variable-simplifier! remove-variable-simplifier! note-known-global-lambda! )) (define-interface node-interface (compound-interface primop-interface variable-interface (export reset-node-id node-hash node-unhash node? node-variant node-parent set-node-parent! node-index set-node-index! node-simplified? set-node-simplified?! node-flag set-node-flag! empty empty? proclaim-empty erase detach detach-body attach attach-body move move-body insert-body replace replace-body mark-changed leaf-node? literal-node? make-literal-node literal-value set-literal-value! literal-type set-literal-type! copy-literal-node reference-node? make-reference-node reference-variable set-reference-variable! call-node? make-call-node call-primop set-call-primop! call-args set-call-args! call-exits set-call-exits! call-source set-call-source! call-arg call-arg-count lambda-node? make-lambda-node lambda-body set-lambda-body! lambda-variables set-lambda-variables! lambda-name set-lambda-name! lambda-id lambda-type lambda-block set-lambda-block! lambda-env set-lambda-env! lambda-protocol set-lambda-protocol! lambda-source set-lambda-source! lambda-variable-count calls-known? set-calls-known?! proc-lambda? initialize-lambdas add-lambda add-lambdas change-lambda-type walk-lambdas make-lambda-list loc/owner loc/type loc/rep set/owner set/type set/rep set/value node-base containing-procedure trivial? nontrivial? nontrivial-ancestor calls-this-primop? bound-to-variable walk-refs-safely small-node? side-effects? called-node? called-node called-lambda get-lambda-value ;set-reference? attach-call-args remove-call-args replace-call-args remove-null-arguments shorten-call-args insert-call-arg remove-call-arg append-call-arg remove-body put-in-letrec remove-lambda-variable remove-variable remove-unused-variables substitute substitute-vars-in-node-tree replace-call-with-value copy-node-tree mark-ancestors marked-ancestor? unmarked-ancestor? node-ancestor? marked-ancestor least-common-ancestor proc-ancestor hoistable-node? find-scoping (let-nodes :syntax) node-equal? no-free-references? find-calls node-type the-undefined-value undefined-value? undefined-value-node? make-undefined-literal ))) (define-interface simplify-internal-interface (export simplify-node default-simplifier simplify-arg simplify-args simplify-lambda-body simplify-known-lambda (pattern-simplifier :syntax) simplify-allocation simplify-known-call simplify-known-tail-call simplify-unknown-call simplify-return simplify-jump ; simplify-undefined-value simplify-test expand-test simplify-test? )) (define-interface front-debug-interface (export debug-breakpoint add-checks add-check clear-checks clear-check add-procs add-proc clear-procs clear-proc)) (define-interface front-interface (export simplify-all integrate-jump-procs! ; for debugging )) (define-interface annotated-read-interface (export read-and-annotate pair-annotation annotated-cons annotation? annotation-file annotation-form annotation-row annotation-column )) (define-interface compiler-byte-vector-interface (export make-byte-vector byte-vector? byte-vector-length byte-vector-ref byte-vector-word-ref byte-vector-half-word-ref byte-vector-set! byte-vector-word-set! byte-vector-half-word-set! byte-vector-endianess set-byte-vector-endianess! )) (define-interface parameter-interface (export lookup-primop lookup-imported-variable type/unknown type-eq? lambda-node-type true-value false-value determine-lambda-protocol determine-continuation-protocol ))