diff options
author | Andy Wingo <wingo@pobox.com> | 2009-10-16 12:19:43 +0200 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2009-10-16 12:20:06 +0200 |
commit | 27c8177fe424fcf65a2c1cf3245b13382a2d22d9 (patch) | |
tree | 633f921c5ab499cdbb2b7965567d155a37f6bc53 | |
parent | b0fae4ecaa9f602f3183c35eb945c8050e1f3b68 (diff) |
remove GHIL, Elisp, and R5RS languages
GHIL is obsolete, and it's about time we got rid of it. Elisp and R5RS
were unmodified since their import from Guile-VM, so we ditch them too.
R5RS compilation is supported via compiling Scheme within an R5RS
environment.
Elisp will be supported when we merge in Daniel's work.
-rw-r--r-- | module/Makefile.am | 8 | ||||
-rw-r--r-- | module/language/elisp/spec.scm | 62 | ||||
-rw-r--r-- | module/language/ghil.scm | 478 | ||||
-rw-r--r-- | module/language/ghil/compile-glil.scm | 592 | ||||
-rw-r--r-- | module/language/ghil/spec.scm | 62 | ||||
-rw-r--r-- | module/language/r5rs/core.il | 324 | ||||
-rw-r--r-- | module/language/r5rs/expand.scm | 80 | ||||
-rw-r--r-- | module/language/r5rs/null.il | 19 | ||||
-rw-r--r-- | module/language/r5rs/psyntax.pp | 14552 | ||||
-rw-r--r-- | module/language/r5rs/psyntax.ss | 3202 | ||||
-rw-r--r-- | module/language/r5rs/spec.scm | 63 | ||||
-rw-r--r-- | module/language/scheme/compile-ghil.scm | 494 | ||||
-rw-r--r-- | module/language/scheme/inline.scm | 205 |
13 files changed, 1 insertions, 20140 deletions
diff --git a/module/Makefile.am b/module/Makefile.am index 668b8a597..d205e0f19 100644 --- a/module/Makefile.am +++ b/module/Makefile.am @@ -51,7 +51,6 @@ SOURCES = \ $(OOP_SOURCES) \ $(SYSTEM_SOURCES) \ $(SCRIPTS_SOURCES) \ - $(GHIL_LANG_SOURCES) \ $(ECMASCRIPT_LANG_SOURCES) \ $(BRAINFUCK_LANG_SOURCES) @@ -69,11 +68,9 @@ ice-9/psyntax-pp.scm: ice-9/psyntax.scm $(srcdir)/ice-9/psyntax.scm $(srcdir)/ice-9/psyntax-pp.scm SCHEME_LANG_SOURCES = \ - language/scheme/compile-ghil.scm \ language/scheme/spec.scm \ language/scheme/compile-tree-il.scm \ - language/scheme/decompile-tree-il.scm \ - language/scheme/inline.scm + language/scheme/decompile-tree-il.scm TREE_IL_LANG_SOURCES = \ language/tree-il/primitives.scm \ @@ -84,9 +81,6 @@ TREE_IL_LANG_SOURCES = \ language/tree-il/compile-glil.scm \ language/tree-il/spec.scm -GHIL_LANG_SOURCES = \ - language/ghil.scm language/ghil/spec.scm language/ghil/compile-glil.scm - GLIL_LANG_SOURCES = \ language/glil/spec.scm language/glil/compile-assembly.scm \ language/glil/decompile-assembly.scm diff --git a/module/language/elisp/spec.scm b/module/language/elisp/spec.scm deleted file mode 100644 index 617e4e3c5..000000000 --- a/module/language/elisp/spec.scm +++ /dev/null @@ -1,62 +0,0 @@ -;;; Guile Emac Lisp - -;; Copyright (C) 2001 Free Software Foundation, Inc. - -;;;; This library is free software; you can redistribute it and/or -;;;; modify it under the terms of the GNU Lesser General Public -;;;; License as published by the Free Software Foundation; either -;;;; version 3 of the License, or (at your option) any later version. -;;;; -;;;; This library is distributed in the hope that it will be useful, -;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -;;;; Lesser General Public License for more details. -;;;; -;;;; You should have received a copy of the GNU Lesser General Public -;;;; License along with this library; if not, write to the Free Software -;;;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - -;;; Code: - -(define-module (lang elisp spec) - #:use-module (system lang language) - #:export (elisp)) - - -;;; -;;; Translator -;;; - -(define (translate x) - (if (pair? x) - (translate-pair x) - x)) - -(define (translate-pair x) - (let ((name (car x)) (args (cdr x))) - (case name - ((quote) `(@quote ,@args)) - ((defvar) `(@define ,@(map translate args))) - ((setq) `(@set! ,@(map translate args))) - ((if) `(@if ,(translate (car args)) - (@begin ,@(map translate (cdr args))))) - ((and) `(@and ,@(map translate args))) - ((or) `(@or ,@(map translate args))) - ((progn) `(@begin ,@(map translate args))) - ((defun) `(@define ,(car args) - (@lambda ,(cadr args) ,@(map translate (cddr args))))) - ((lambda) `(@lambda ,(car args) ,@(map translate (cdr args)))) - (else x)))) - - -;;; -;;; Language definition -;;; - -(define-language elisp - #:title "Emacs Lisp" - #:version "0.0" - #:reader read - #:expander id - #:translator translate - ) diff --git a/module/language/ghil.scm b/module/language/ghil.scm deleted file mode 100644 index 84cc83de5..000000000 --- a/module/language/ghil.scm +++ /dev/null @@ -1,478 +0,0 @@ -;;; Guile High Intermediate Language - -;; Copyright (C) 2001 Free Software Foundation, Inc. - -;;;; This library is free software; you can redistribute it and/or -;;;; modify it under the terms of the GNU Lesser General Public -;;;; License as published by the Free Software Foundation; either -;;;; version 3 of the License, or (at your option) any later version. -;;;; -;;;; This library is distributed in the hope that it will be useful, -;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -;;;; Lesser General Public License for more details. -;;;; -;;;; You should have received a copy of the GNU Lesser General Public -;;;; License along with this library; if not, write to the Free Software -;;;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - -;;; Code: - -(define-module (language ghil) - #:use-module (system base syntax) - #:use-module (system base pmatch) - #:use-module (ice-9 regex) - #:export - (ghil-env ghil-loc - - <ghil-void> make-ghil-void ghil-void? - ghil-void-env ghil-void-loc - - <ghil-quote> make-ghil-quote ghil-quote? - ghil-quote-env ghil-quote-loc ghil-quote-obj - - <ghil-quasiquote> make-ghil-quasiquote ghil-quasiquote? - ghil-quasiquote-env ghil-quasiquote-loc ghil-quasiquote-exp - - <ghil-unquote> make-ghil-unquote ghil-unquote? - ghil-unquote-env ghil-unquote-loc ghil-unquote-exp - - <ghil-unquote-splicing> make-ghil-unquote-splicing ghil-unquote-splicing? - ghil-unquote-splicing-env ghil-unquote-splicing-loc ghil-unquote-splicing-exp - - <ghil-ref> make-ghil-ref ghil-ref? - ghil-ref-env ghil-ref-loc ghil-ref-var - - <ghil-set> make-ghil-set ghil-set? - ghil-set-env ghil-set-loc ghil-set-var ghil-set-val - - <ghil-define> make-ghil-define ghil-define? - ghil-define-env ghil-define-loc ghil-define-var ghil-define-val - - <ghil-if> make-ghil-if ghil-if? - ghil-if-env ghil-if-loc ghil-if-test ghil-if-then ghil-if-else - - <ghil-and> make-ghil-and ghil-and? - ghil-and-env ghil-and-loc ghil-and-exps - - <ghil-or> make-ghil-or ghil-or? - ghil-or-env ghil-or-loc ghil-or-exps - - <ghil-begin> make-ghil-begin ghil-begin? - ghil-begin-env ghil-begin-loc ghil-begin-exps - - <ghil-bind> make-ghil-bind ghil-bind? - ghil-bind-env ghil-bind-loc ghil-bind-vars ghil-bind-vals ghil-bind-body - - <ghil-mv-bind> make-ghil-mv-bind ghil-mv-bind? - ghil-mv-bind-env ghil-mv-bind-loc ghil-mv-bind-producer ghil-mv-bind-vars ghil-mv-bind-rest ghil-mv-bind-body - - <ghil-lambda> make-ghil-lambda ghil-lambda? - ghil-lambda-env ghil-lambda-loc ghil-lambda-vars ghil-lambda-rest - ghil-lambda-meta ghil-lambda-body - - <ghil-inline> make-ghil-inline ghil-inline? - ghil-inline-env ghil-inline-loc ghil-inline-inline ghil-inline-args - - <ghil-call> make-ghil-call ghil-call? - ghil-call-env ghil-call-loc ghil-call-proc ghil-call-args - - <ghil-mv-call> make-ghil-mv-call ghil-mv-call? - ghil-mv-call-env ghil-mv-call-loc ghil-mv-call-producer ghil-mv-call-consumer - - <ghil-values> make-ghil-values ghil-values? - ghil-values-env ghil-values-loc ghil-values-values - - <ghil-values*> make-ghil-values* ghil-values*? - ghil-values*-env ghil-values*-loc ghil-values*-values - - <ghil-var> make-ghil-var ghil-var? - ghil-var-env ghil-var-name ghil-var-kind ghil-var-index - - <ghil-toplevel-env> make-ghil-toplevel-env ghil-toplevel-env? - ghil-toplevel-env-table - - <ghil-env> make-ghil-env ghil-env? - ghil-env-parent ghil-env-table ghil-env-variables - - <ghil-reified-env> make-ghil-reified-env ghil-reified-env? - ghil-reified-env-env ghil-reified-env-loc - - ghil-env-add! - ghil-env-reify ghil-env-dereify - ghil-var-is-bound? ghil-var-for-ref! ghil-var-for-set! ghil-var-define! - ghil-var-at-module! - call-with-ghil-environment call-with-ghil-bindings - - parse-ghil unparse-ghil)) - - -;;; -;;; Parse tree -;;; - -(define (print-ghil x port) - (format port "#<ghil ~s>" (unparse-ghil x))) - -(define-type (<ghil> #:printer print-ghil - #:common-slots (env loc)) - ;; Objects - (<ghil-void>) - (<ghil-quote> obj) - (<ghil-quasiquote> exp) - (<ghil-unquote> exp) - (<ghil-unquote-splicing> exp) - ;; Variables - (<ghil-ref> var) - (<ghil-set> var val) - (<ghil-define> var val) - ;; Controls - (<ghil-if> test then else) - (<ghil-and> exps) - (<ghil-or> exps) - (<ghil-begin> exps) - (<ghil-bind> vars vals body) - (<ghil-mv-bind> producer vars rest body) - (<ghil-lambda> vars rest meta body) - (<ghil-call> proc args) - (<ghil-mv-call> producer consumer) - (<ghil-inline> inline args) - (<ghil-values> values) - (<ghil-values*> values) - (<ghil-reified-env>)) - - - -;;; -;;; Variables -;;; - -(define-record <ghil-var> env name kind (index #f)) - - -;;; -;;; Modules -;;; - - -;;; -;;; Environments -;;; - -(define-record <ghil-env> parent (table '()) (variables '())) -(define-record <ghil-toplevel-env> (table '())) - -(define (ghil-env-ref env sym) - (assq-ref (ghil-env-table env) sym)) - -(define-macro (push! item loc) - `(set! ,loc (cons ,item ,loc))) -(define-macro (apush! k v loc) - `(set! ,loc (acons ,k ,v ,loc))) -(define-macro (apopq! k loc) - `(set! ,loc (assq-remove! ,loc ,k))) - -(define (ghil-env-add! env var) - (apush! (ghil-var-name var) var (ghil-env-table env)) - (push! var (ghil-env-variables env))) - -(define (ghil-env-remove! env var) - (apopq! (ghil-var-name var) (ghil-env-table env))) - -(define (force-heap-allocation! var) - (set! (ghil-var-kind var) 'external)) - - - -;;; -;;; Public interface -;;; - -;; The following four functions used to be one, in ghil-lookup. Now they -;; are four, to reflect the different intents. A bit of duplication, but -;; that's OK. The common current is to find out where a variable will be -;; stored at runtime. -;; -;; These functions first search the lexical environments. If the -;; variable is not in the innermost environment, make sure the variable -;; is marked as being "external" so that it goes on the heap. If the -;; variable is being modified (via a set!), also make sure it's on the -;; heap, so that other continuations see the changes to the var. -;; -;; If the variable is not found lexically, it is a toplevel variable, -;; which will be looked up at runtime with respect to the module that -;; was current when the lambda was bound, at runtime. The variable will -;; be resolved when it is first used. -(define (ghil-var-is-bound? env sym) - (let loop ((e env)) - (record-case e - ((<ghil-toplevel-env> table) - (let ((key (cons (module-name (current-module)) sym))) - (assoc-ref table key))) - ((<ghil-env> parent table variables) - (and (not (assq-ref table sym)) - (loop parent)))))) - -(define (ghil-var-for-ref! env sym) - (let loop ((e env)) - (record-case e - ((<ghil-toplevel-env> table) - (let ((key (cons (module-name (current-module)) sym))) - (or (assoc-ref table key) - (let ((var (make-ghil-var (car key) (cdr key) 'toplevel))) - (apush! key var (ghil-toplevel-env-table e)) - var)))) - ((<ghil-env> parent table variables) - (cond - ((assq-ref table sym) - => (lambda (var) - (or (eq? e env) - (force-heap-allocation! var)) - var)) - (else - (loop parent))))))) - -(define (ghil-var-for-set! env sym) - (let loop ((e env)) - (record-case e - ((<ghil-toplevel-env> table) - (let ((key (cons (module-name (current-module)) sym))) - (or (assoc-ref table key) - (let ((var (make-ghil-var (car key) (cdr key) 'toplevel))) - (apush! key var (ghil-toplevel-env-table e)) - var)))) - ((<ghil-env> parent table variables) - (cond - ((assq-ref table sym) - => (lambda (var) - (force-heap-allocation! var) - var)) - (else - (loop parent))))))) - -(define (ghil-var-at-module! env modname sym interface?) - (let loop ((e env)) - (record-case e - ((<ghil-toplevel-env> table) - (let ((key (list modname sym interface?))) - (or (assoc-ref table key) - (let ((var (make-ghil-var modname sym - (if interface? 'public 'private)))) - (apush! key var (ghil-toplevel-env-table e)) - var)))) - ((<ghil-env> parent table variables) - (loop parent))))) - -(define (ghil-var-define! toplevel sym) - (let ((key (cons (module-name (current-module)) sym))) - (or (assoc-ref (ghil-toplevel-env-table toplevel) key) - (let ((var (make-ghil-var (car key) (cdr key) 'toplevel))) - (apush! key var (ghil-toplevel-env-table toplevel)) - var)))) - -(define (call-with-ghil-environment e syms func) - (let* ((e (make-ghil-env e)) - (vars (map (lambda (s) - (let ((v (make-ghil-var e s 'argument))) - (ghil-env-add! e v) v)) - syms))) - (func e vars))) - -(define (call-with-ghil-bindings e syms func) - (let* ((vars (map (lambda (s) - (let ((v (make-ghil-var e s 'local))) - (ghil-env-add! e v) v)) - syms)) - (ret (func vars))) - (for-each (lambda (v) (ghil-env-remove! e v)) vars) - ret)) - -(define (ghil-env-reify env) - (let loop ((e env) (out '())) - (record-case e - ((<ghil-toplevel-env> table) - (map (lambda (v) - (cons (ghil-var-name v) - (or (ghil-var-index v) - (error "reify called before indices finalized")))) - out)) - ((<ghil-env> parent table variables) - (loop parent - (append out - (filter (lambda (v) (eq? (ghil-var-kind v) 'external)) - variables))))))) - -(define (ghil-env-dereify name-index-alist) - (let* ((e (make-ghil-env (make-ghil-toplevel-env))) - (vars (map (lambda (pair) - (make-ghil-var e (car pair) 'external (cdr pair))) - name-index-alist))) - (set! (ghil-env-table e) - (map (lambda (v) (cons (ghil-var-name v) v)) vars)) - (set! (ghil-env-variables e) vars) - e)) - - -;;; -;;; Parser -;;; - -(define (location x) - (and (pair? x) - (let ((props (source-properties x))) - (and (not (null? props)) - (vector (assq-ref props 'line) - (assq-ref props 'column) - (assq-ref props 'filename)))))) - -(define (parse-quasiquote e x level) - (cond ((not (pair? x)) x) - ((memq (car x) '(unquote unquote-splicing)) - (let ((l (location x))) - (pmatch (cdr x) - ((,obj) - (cond - ((zero? level) - (if (eq? (car x) 'unquote) - (make-ghil-unquote e l (parse-ghil e obj)) - (make-ghil-unquote-splicing e l (parse-ghil e obj)))) - (else - (list (car x) (parse-quasiquote e obj (1- level)))))) - (else (syntax-error l (format #f "bad ~A" (car x)) x))))) - ((eq? (car x) 'quasiquote) - (let ((l (location x))) - (pmatch (cdr x) - ((,obj) (list 'quasiquote (parse-quasiquote e obj (1+ level)))) - (else (syntax-error l (format #f "bad ~A" (car x)) x))))) - (else (cons (parse-quasiquote e (car x) level) - (parse-quasiquote e (cdr x) level))))) - -(define (parse-ghil env exp) - (let ((loc (location exp)) - (retrans (lambda (x) (parse-ghil env x)))) - (pmatch exp - ((ref ,sym) (guard (symbol? sym)) - (make-ghil-ref env #f (ghil-var-for-ref! env sym))) - - (('quote ,exp) (make-ghil-quote env loc exp)) - - ((void) (make-ghil-void env loc)) - - ((lambda ,syms ,rest ,meta . ,body) - (call-with-ghil-environment env syms - (lambda (env vars) - (make-ghil-lambda env loc vars rest meta - (parse-ghil env `(begin ,@body)))))) - - ((begin . ,body) - (make-ghil-begin env loc (map retrans body))) - - ((bind ,syms ,exprs . ,body) - (let ((vals (map retrans exprs))) - (call-with-ghil-bindings env syms - (lambda (vars) - (make-ghil-bind env loc vars vals (retrans `(begin ,@body))))))) - - ((bindrec ,syms ,exprs . ,body) - (call-with-ghil-bindings env syms - (lambda (vars) - (let ((vals (map (lambda (exp) (parse-ghil env exp)) exprs))) - (make-ghil-bind env loc vars vals (retrans `(begin ,@body))))))) - - ((set ,sym ,val) - (make-ghil-set env loc (ghil-var-for-set! env sym) (retrans val))) - - ((define ,sym ,val) - (make-ghil-define env loc (ghil-var-define! env sym) (retrans val))) - - ((if ,test ,then ,else) - (make-ghil-if env loc (retrans test) (retrans then) (retrans else))) - - ((and . ,exps) - (make-ghil-and env loc (map retrans exps))) - - ((or . ,exps) - (make-ghil-or env loc (map retrans exps))) - - ((mv-bind ,syms ,rest ,producer . ,body) - (call-with-ghil-bindings env syms - (lambda (vars) - (make-ghil-mv-bind env loc (retrans producer) vars rest - (map retrans body))))) - - ((call ,proc . ,args) - (make-ghil-call env loc (retrans proc) (map retrans args))) - - ((mv-call ,producer ,consumer) - (make-ghil-mv-call env loc (retrans producer) (retrans consumer))) - - ((inline ,op . ,args) - (make-ghil-inline env loc op (map retrans args))) - - ((values . ,values) - (make-ghil-values env loc (map retrans values))) - - ((values* . ,values) - (make-ghil-values* env loc (map retrans values))) - - ((compile-time-environment) - (make-ghil-reified-env env loc)) - - ((quasiquote ,exp) - (make-ghil-quasiquote env loc (parse-quasiquote env exp 0))) - - (else - (error "unrecognized GHIL" exp))))) - -(define (unparse-ghil ghil) - (record-case ghil - ((<ghil-void> env loc) - '(void)) - ((<ghil-quote> env loc obj) - `(,'quote ,obj)) - ((<ghil-quasiquote> env loc exp) - `(,'quasiquote ,(let lp ((x exp)) - (cond ((struct? x) (unparse-ghil x)) - ((pair? x) (cons (lp (car x)) (lp (cdr x)))) - (else x))))) - ((<ghil-unquote> env loc exp) - `(,'unquote ,(unparse-ghil exp))) - ((<ghil-unquote-splicing> env loc exp) - `(,'unquote-splicing ,(unparse-ghil exp))) - ;; Variables - ((<ghil-ref> env loc var) - `(ref ,(ghil-var-name var))) - ((<ghil-set> env loc var val) - `(set ,(ghil-var-name var) ,(unparse-ghil val))) - ((<ghil-define> env loc var val) - `(define ,(ghil-var-name var) ,(unparse-ghil val))) - ;; Controls - ((<ghil-if> env loc test then else) - `(if ,(unparse-ghil test) ,(unparse-ghil then) ,(unparse-ghil else))) - ((<ghil-and> env loc exps) - `(and ,@(map unparse-ghil exps))) - ((<ghil-or> env loc exps) - `(or ,@(map unparse-ghil exps))) - ((<ghil-begin> env loc exps) - `(begin ,@(map unparse-ghil exps))) - ((<ghil-bind> env loc vars vals body) - `(bind ,(map ghil-var-name vars) ,(map unparse-ghil vals) - ,(unparse-ghil body))) - ((<ghil-mv-bind> env loc producer vars rest body) - `(mv-bind ,(map ghil-var-name vars) ,rest - ,(unparse-ghil producer) ,(unparse-ghil body))) - ((<ghil-lambda> env loc vars rest meta body) - `(lambda ,(map ghil-var-name vars) ,rest ,meta - ,(unparse-ghil body))) - ((<ghil-call> env loc proc args) - `(call ,(unparse-ghil proc) ,@(map unparse-ghil args))) - ((<ghil-mv-call> env loc producer consumer) - `(mv-call ,(unparse-ghil producer) ,(unparse-ghil consumer))) - ((<ghil-inline> env loc inline args) - `(inline ,inline ,@(map unparse-ghil args))) - ((<ghil-values> env loc values) - `(values ,@(map unparse-ghil values))) - ((<ghil-values*> env loc values) - `(values* ,@(map unparse-ghil values))) - ((<ghil-reified-env> env loc) - `(compile-time-environment)))) diff --git a/module/language/ghil/compile-glil.scm b/module/language/ghil/compile-glil.scm deleted file mode 100644 index 47e15c797..000000000 --- a/module/language/ghil/compile-glil.scm +++ /dev/null @@ -1,592 +0,0 @@ -;;; GHIL -> GLIL compiler - -;; Copyright (C) 2001 Free Software Foundation, Inc. - -;;;; This library is free software; you can redistribute it and/or -;;;; modify it under the terms of the GNU Lesser General Public -;;;; License as published by the Free Software Foundation; either -;;;; version 3 of the License, or (at your option) any later version. -;;;; -;;;; This library is distributed in the hope that it will be useful, -;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -;;;; Lesser General Public License for more details. -;;;; -;;;; You should have received a copy of the GNU Lesser General Public -;;;; License along with this library; if not, write to the Free Software -;;;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - -;;; Code: - -(define-module (language ghil compile-glil) - #:use-module (system base syntax) - #:use-module (language glil) - #:use-module (language ghil) - #:use-module (ice-9 common-list) - #:export (compile-glil)) - -(define (compile-glil x e opts) - (if (memq #:O opts) (set! x (optimize x))) - (values (codegen x) - (and e (cons (car e) (cddr e))) - e)) - - -;;; -;;; Stage 2: Optimization -;;; - -(define (lift-variables! env) - (let ((parent-env (ghil-env-parent env))) - (for-each (lambda (v) - (case (ghil-var-kind v) - ((argument) (set! (ghil-var-kind v) 'local))) - (set! (ghil-var-env v) parent-env) - (ghil-env-add! parent-env v)) - (ghil-env-variables env)))) - -;; The premise of this, unused, approach to optimization is that you can -;; determine the environment of a variable lexically, because they have -;; been alpha-renamed. It makes the transformations *much* easier. -;; Unfortunately it doesn't work yet. -(define (optimize* x) - (transform-record (<ghil> env loc) x - ((quasiquote exp) - (define (optimize-qq x) - (cond ((list? x) (map optimize-qq x)) - ((pair? x) (cons (optimize-qq (car x)) (optimize-qq (cdr x)))) - ((record? x) (optimize x)) - (else x))) - (-> (quasiquote (optimize-qq x)))) - - ((unquote exp) - (-> (unquote (optimize exp)))) - - ((unquote-splicing exp) - (-> (unquote-splicing (optimize exp)))) - - ((set var val) - (-> (set var (optimize val)))) - - ((define var val) - (-> (define var (optimize val)))) - - ((if test then else) - (-> (if (optimize test) (optimize then) (optimize else)))) - - ((and exps) - (-> (and (map optimize exps)))) - - ((or exps) - (-> (or (map optimize exps)))) - - ((begin exps) - (-> (begin (map optimize exps)))) - - ((bind vars vals body) - (-> (bind vars (map optimize vals) (optimize body)))) - - ((mv-bind producer vars rest body) - (-> (mv-bind (optimize producer) vars rest (optimize body)))) - - ((inline inst args) - (-> (inline inst (map optimize args)))) - - ((call (proc (lambda vars (rest #f) meta body)) args) - (-> (bind vars (optimize args) (optimize body)))) - - ((call proc args) - (-> (call (optimize proc) (map optimize args)))) - - ((lambda vars rest meta body) - (-> (lambda vars rest meta (optimize body)))) - - ((mv-call producer (consumer (lambda vars rest meta body))) - (-> (mv-bind (optimize producer) vars rest (optimize body)))) - - ((mv-call producer consumer) - (-> (mv-call (optimize producer) (optimize consumer)))) - - ((values values) - (-> (values (map optimize values)))) - - ((values* values) - (-> (values* (map optimize values)))) - - (else - (error "unrecognized GHIL" x)))) - -(define (optimize x) - (record-case x - ((<ghil-set> env loc var val) - (make-ghil-set env var (optimize val))) - - ((<ghil-define> env loc var val) - (make-ghil-define env var (optimize val))) - - ((<ghil-if> env loc test then else) - (make-ghil-if env loc (optimize test) (optimize then) (optimize else))) - - ((<ghil-and> env loc exps) - (make-ghil-and env loc (map optimize exps))) - - ((<ghil-or> env loc exps) - (make-ghil-or env loc (map optimize exps))) - - ((<ghil-begin> env loc exps) - (make-ghil-begin env loc (map optimize exps))) - - ((<ghil-bind> env loc vars vals body) - (make-ghil-bind env loc vars (map optimize vals) (optimize body))) - - ((<ghil-lambda> env loc vars rest meta body) - (make-ghil-lambda env loc vars rest meta (optimize body))) - - ((<ghil-inline> env loc instruction args) - (make-ghil-inline env loc instruction (map optimize args))) - - ((<ghil-call> env loc proc args) - (let ((parent-env env)) - (record-case proc - ;; ((@lambda (VAR...) BODY...) ARG...) => - ;; (@let ((VAR ARG) ...) BODY...) - ((<ghil-lambda> env loc vars rest meta body) - (cond - ((not rest) - (lift-variables! env) - (make-ghil-bind parent-env loc (map optimize args))) - (else - (make-ghil-call parent-env loc (optimize proc) (map optimize args))))) - (else - (make-ghil-call parent-env loc (optimize proc) (map optimize args)))))) - - ((<ghil-mv-call> env loc producer consumer) - (record-case consumer - ;; (mv-call PRODUCER (lambda ARGS BODY...)) => - ;; (mv-let PRODUCER ARGS BODY...) - ((<ghil-lambda> env loc vars rest meta body) - (lift-variables! env) - (make-ghil-mv-bind producer vars rest body)) - (else - (make-ghil-mv-call env loc (optimize producer) (optimize consumer))))) - - (else x))) - - -;;; -;;; Stage 3: Code generation -;;; - -(define *ia-void* (make-glil-void)) -(define *ia-drop* (make-glil-call 'drop 1)) -(define *ia-return* (make-glil-call 'return 1)) - -(define (make-label) (gensym ":L")) - -(define (make-glil-var op env var) - (case (ghil-var-kind var) - ((argument) - (make-glil-local op (ghil-var-index var))) - ((local) - (make-glil-local op (ghil-var-index var))) - ((external) - (do ((depth 0 (1+ depth)) - (e env (ghil-env-parent e))) - ((eq? e (ghil-var-env var)) - (make-glil-external op depth (ghil-var-index var))))) - ((toplevel) - (make-glil-toplevel op (ghil-var-name var))) - ((public private) - (make-glil-module op (ghil-var-env var) (ghil-var-name var) - (eq? (ghil-var-kind var) 'public))) - (else (error "Unknown kind of variable:" var)))) - -(define (constant? x) - (cond ((or (number? x) (string? x) (symbol? x) (keyword? x) (boolean? x)) #t) - ((pair? x) (and (constant? (car x)) - (constant? (cdr x)))) - ((vector? x) (let lp ((i (vector-length x))) - (or (zero? i) - (and (constant? (vector-ref x (1- i))) - (lp (1- i)))))))) - -(define (codegen ghil) - (let ((stack '())) - (define (push-code! loc code) - (set! stack (cons code stack)) - (if loc (set! stack (cons (make-glil-source loc) stack)))) - (define (var->binding var) - (list (ghil-var-name var) (let ((kind (ghil-var-kind var))) - (case kind ((argument) 'local) (else kind))) - (ghil-var-index var))) - (define (push-bindings! loc vars) - (if (not (null? vars)) - (push-code! loc (make-glil-bind (map var->binding vars))))) - (define (comp tree tail drop) - (define (push-label! label) - (push-code! #f (make-glil-label label))) - (define (push-branch! loc inst label) - (push-code! loc (make-glil-branch inst label))) - (define (push-call! loc inst args) - (for-each comp-push args) - (push-code! loc (make-glil-call inst (length args)))) - ;; possible tail position - (define (comp-tail tree) (comp tree tail drop)) - ;; push the result - (define (comp-push tree) (comp tree #f #f)) - ;; drop the result - (define (comp-drop tree) (comp tree #f #t)) - ;; drop the result if unnecessary - (define (maybe-drop) - (if drop (push-code! #f *ia-drop*))) - ;; return here if necessary - (define (maybe-return) - (if tail (push-code! #f *ia-return*))) - ;; return this code if necessary - (define (return-code! loc code) - (if (not drop) (push-code! loc code)) - (maybe-return)) - ;; return void if necessary - (define (return-void!) - (return-code! #f *ia-void*)) - ;; return object if necessary - (define (return-object! loc obj) - (return-code! loc (make-glil-const obj))) - ;; - ;; dispatch - (record-case tree - ((<ghil-void>) - (return-void!)) - - ((<ghil-quote> env loc obj) - (return-object! loc obj)) - - ((<ghil-quasiquote> env loc exp) - (let loop ((x exp) (in-car? #f)) - (cond - ((list? x) - (push-call! #f 'mark '()) - (for-each (lambda (x) (loop x #t)) x) - (push-call! #f 'list-mark '())) - ((pair? x) - (push-call! #f 'mark '()) - (loop (car x) #t) - (loop (cdr x) #f) - (push-call! #f 'cons-mark '())) - ((record? x) - (record-case x - ((<ghil-unquote> env loc exp) - (comp-push exp)) - ((<ghil-unquote-splicing> env loc exp) - (if (not in-car?) - (error "unquote-splicing in the cdr of a pair" exp)) - (comp-push exp) - (push-call! #f 'list-break '())))) - ((constant? x) - (push-code! #f (make-glil-const x))) - (else - (error "element of quasiquote can't be compiled" x)))) - (maybe-drop) - (maybe-return)) - - ((<ghil-unquote> env loc exp) - (error "unquote outside of quasiquote" exp)) - - ((<ghil-unquote-splicing> env loc exp) - (error "unquote-splicing outside of quasiquote" exp)) - - ((<ghil-ref> env loc var) - (return-code! loc (make-glil-var 'ref env var))) - - ((<ghil-set> env loc var val) - (comp-push val) - (push-code! loc (make-glil-var 'set env var)) - (return-void!)) - - ((<ghil-define> env loc var val) - (comp-push val) - (push-code! loc (make-glil-var 'define env var)) - (return-void!)) - - ((<ghil-if> env loc test then else) - ;; TEST - ;; (br-if-not L1) - ;; THEN - ;; (br L2) - ;; L1: ELSE - ;; L2: - (let ((L1 (make-label)) (L2 (make-label))) - (comp-push test) - (push-branch! loc 'br-if-not L1) - (comp-tail then) - (if (not tail) (push-branch! #f 'br L2)) - (push-label! L1) - (comp-tail else) - (if (not tail) (push-label! L2)))) - - ((<ghil-and> env loc exps) - ;; EXP - ;; (br-if-not L1) - ;; ... - ;; TAIL - ;; (br L2) - ;; L1: (const #f) - ;; L2: - (cond ((null? exps) (return-object! loc #t)) - ((null? (cdr exps)) (comp-tail (car exps))) - (else - (let ((L1 (make-label)) (L2 (make-label))) - (let lp ((exps exps)) - (cond ((null? (cdr exps)) - (comp-tail (car exps)) - (push-branch! #f 'br L2) - (push-label! L1) - (return-object! #f #f) - (push-label! L2) - (maybe-return)) - (else - (comp-push (car exps)) - (push-branch! #f 'br-if-not L1) - (lp (cdr exps))))))))) - - ((<ghil-or> env loc exps) - ;; EXP - ;; (dup) - ;; (br-if L1) - ;; (drop) - ;; ... - ;; TAIL - ;; L1: - (cond ((null? exps) (return-object! loc #f)) - ((null? (cdr exps)) (comp-tail (car exps))) - (else - (let ((L1 (make-label))) - (let lp ((exps exps)) - (cond ((null? (cdr exps)) - (comp-tail (car exps)) - (push-label! L1) - (maybe-return)) - (else - (comp-push (car exps)) - (if (not drop) - (push-call! #f 'dup '())) - (push-branch! #f 'br-if L1) - (if (not drop) - (push-code! loc (make-glil-call 'drop 1))) - (lp (cdr exps))))))))) - - ((<ghil-begin> env loc exps) - ;; EXPS... - ;; TAIL - (if (null? exps) - (return-void!) - (do ((exps exps (cdr exps))) - ((null? (cdr exps)) - (comp-tail (car exps))) - (comp-drop (car exps))))) - - ((<ghil-bind> env loc vars vals body) - ;; VALS... - ;; (set VARS)... - ;; BODY - (for-each comp-push vals) - (push-bindings! loc vars) - (for-each (lambda (var) (push-code! #f (make-glil-var 'set env var))) - (reverse vars)) - (comp-tail body) - (push-code! #f (make-glil-unbind))) - - ((<ghil-mv-bind> env loc producer vars rest body) - ;; VALS... - ;; (set VARS)... - ;; BODY - (let ((MV (make-label))) - (comp-push producer) - (push-code! loc (make-glil-mv-call 0 MV)) - (push-code! #f (make-glil-const 1)) - (push-label! MV) - (push-code! #f (make-glil-mv-bind (map var->binding vars) rest)) - (for-each (lambda (var) (push-code! #f (make-glil-var 'set env var))) - (reverse vars))) - (comp-tail body) - (push-code! #f (make-glil-unbind))) - - ((<ghil-lambda> env loc vars rest meta body) - (return-code! loc (codegen tree))) - - ((<ghil-inline> env loc inline args) - ;; ARGS... - ;; (INST NARGS) - (let ((tail-table '((call . goto/args) - (apply . goto/apply) - (call/cc . goto/cc)))) - (cond ((and tail (assq-ref tail-table inline)) - => (lambda (tail-inst) - (push-call! loc tail-inst args))) - (else - (push-call! loc inline args) - (maybe-drop) - (maybe-return))))) - - ((<ghil-values> env loc values) - (cond (tail ;; (lambda () (values 1 2)) - (push-call! loc 'return/values values)) - (drop ;; (lambda () (values 1 2) 3) - (for-each comp-drop values)) - (else ;; (lambda () (list (values 10 12) 1)) - (push-code! #f (make-glil-const 'values)) - (push-code! #f (make-glil-call 'link-now 1)) - (push-code! #f (make-glil-call 'variable-ref 0)) - (push-call! loc 'call values)))) - - ((<ghil-values*> env loc values) - (cond (tail ;; (lambda () (apply values '(1 2))) - (push-call! loc 'return/values* values)) - (drop ;; (lambda () (apply values '(1 2)) 3) - (for-each comp-drop values)) - (else ;; (lambda () (list (apply values '(10 12)) 1)) - (push-code! #f (make-glil-const 'values)) - (push-code! #f (make-glil-call 'link-now 1)) - (push-code! #f (make-glil-call 'variable-ref 0)) - (push-call! loc 'apply values)))) - - ((<ghil-call> env loc proc args) - ;; PROC - ;; ARGS... - ;; ([tail-]call NARGS) - (comp-push proc) - (let ((nargs (length args))) - (cond ((< nargs 255) - (push-call! loc (if tail 'goto/args 'call) args)) - (else - (push-call! loc 'mark '()) - (for-each comp-push args) - (push-call! loc 'list-mark '()) - (push-code! loc (make-glil-call (if tail 'goto/apply 'apply) 2))))) - (maybe-drop)) - - ((<ghil-mv-call> env loc producer consumer) - ;; CONSUMER - ;; PRODUCER - ;; (mv-call MV) - ;; ([tail]-call 1) - ;; goto POST - ;; MV: [tail-]call/nargs - ;; POST: (maybe-drop) - (let ((MV (make-label)) (POST (make-label))) - (comp-push consumer) - (comp-push producer) - (push-code! loc (make-glil-mv-call 0 MV)) - (push-code! loc (make-glil-call (if tail 'goto/args 'call) 1)) - (cond ((not tail) - (push-branch! #f 'br POST))) - (push-label! MV) - (push-code! loc (make-glil-call (if tail 'goto/nargs 'call/nargs) 0)) - (cond ((not tail) - (push-label! POST) - (maybe-drop))))) - - ((<ghil-reified-env> env loc) - (return-object! loc (ghil-env-reify env))))) - - ;; - ;; main - (record-case ghil - ((<ghil-lambda> env loc vars rest meta body) - (let* ((evars (ghil-env-variables env)) - (locs (pick (lambda (v) (eq? (ghil-var-kind v) 'local)) evars)) - (exts (pick (lambda (v) (eq? (ghil-var-kind v) 'external)) evars)) - (nargs (allocate-indices-linearly! vars)) - (nlocs (allocate-locals! locs body nargs)) - (nexts (allocate-indices-linearly! exts))) - ;; meta bindings - (push-bindings! #f vars) - ;; push on definition source location - (if loc (set! stack (cons (make-glil-source loc) stack))) - ;; copy args to the heap if they're marked as external - (do ((n 0 (1+ n)) - (l vars (cdr l))) - ((null? l)) - (let ((v (car l))) - (case (ghil-var-kind v) - ((external) - (push-code! #f (make-glil-local 'ref n)) - (push-code! #f (make-glil-external 'set 0 (ghil-var-index v))))))) - ;; compile body - (comp body #t #f) - ;; create GLIL - (make-glil-program nargs (if rest 1 0) nlocs nexts meta - (reverse! stack))))))) - -(define (allocate-indices-linearly! vars) - (do ((n 0 (1+ n)) - (l vars (cdr l))) - ((null? l) n) - (let ((v (car l))) (set! (ghil-var-index v) n)))) - -(define (allocate-locals! vars body nargs) - (let ((free '()) (nlocs nargs)) - (define (allocate! var) - (cond - ((pair? free) - (set! (ghil-var-index var) (car free)) - (set! free (cdr free))) - (else - (set! (ghil-var-index var) nlocs) - (set! nlocs (1+ nlocs))))) - (define (deallocate! var) - (set! free (cons (ghil-var-index var) free))) - (let lp ((x body)) - (record-case x - ((<ghil-void>)) - ((<ghil-quote>)) - ((<ghil-quasiquote> exp) - (let qlp ((x exp)) - (cond ((list? x) (for-each qlp x)) - ((pair? x) (qlp (car x)) (qlp (cdr x))) - ((record? x) - (record-case x - ((<ghil-unquote> exp) (lp exp)) - ((<ghil-unquote-splicing> exp) (lp exp))))))) - ((<ghil-unquote> exp) - (lp exp)) - ((<ghil-unquote-splicing> exp) - (lp exp)) - ((<ghil-reified-env>)) - ((<ghil-set> val) - (lp val)) - ((<ghil-ref>)) - ((<ghil-define> val) - (lp val)) - ((<ghil-if> test then else) - (lp test) (lp then) (lp else)) - ((<ghil-and> exps) - (for-each lp exps)) - ((<ghil-or> exps) - (for-each lp exps)) - ((<ghil-begin> exps) - (for-each lp exps)) - ((<ghil-bind> vars vals body) - (for-each allocate! vars) - (for-each lp vals) - (lp body) - (for-each deallocate! vars)) - ((<ghil-mv-bind> vars producer body) - (lp producer) - (for-each allocate! vars) - (lp body) - (for-each deallocate! vars)) - ((<ghil-inline> args) - (for-each lp args)) - ((<ghil-call> proc args) - (lp proc) - (for-each lp args)) - ((<ghil-lambda>)) - ((<ghil-mv-call> producer consumer) - (lp producer) - (lp consumer)) - ((<ghil-values> values) - (for-each lp values)) - ((<ghil-values*> values) - (for-each lp values)))) - nlocs)) diff --git a/module/language/ghil/spec.scm b/module/language/ghil/spec.scm deleted file mode 100644 index f2bc19b61..000000000 --- a/module/language/ghil/spec.scm +++ /dev/null @@ -1,62 +0,0 @@ -;;; Guile High Intermediate Language - -;; Copyright (C) 2001 Free Software Foundation, Inc. - -;;;; This library is free software; you can redistribute it and/or -;;;; modify it under the terms of the GNU Lesser General Public -;;;; License as published by the Free Software Foundation; either -;;;; version 3 of the License, or (at your option) any later version. -;;;; -;;;; This library is distributed in the hope that it will be useful, -;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -;;;; Lesser General Public License for more details. -;;;; -;;;; You should have received a copy of the GNU Lesser General Public -;;;; License along with this library; if not, write to the Free Software -;;;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - -;;; Code: - -(define-module (language ghil spec) - #:use-module (system base language) - #:use-module (language glil) - #:use-module (language ghil) - #:use-module (language ghil compile-glil) - #:export (ghil)) - -(define (write-ghil exp . port) - (apply write (unparse-ghil exp) port)) - -(define (parse x) - (call-with-ghil-environment (make-ghil-toplevel-env (current-module)) '() - (lambda (env vars) - (make-ghil-lambda env #f vars #f '() (parse-ghil env x))))) - -(define (join exps env) - (if (or-map (lambda (x) - (or (not (ghil-lambda? x)) - (ghil-lambda-rest x) - (memq 'argument - (map ghil-var-kind - (ghil-env-variables (ghil-lambda-env x)))))) - exps) - (error "GHIL expressions to join must be thunks")) - - (let ((env (make-ghil-env env '() - (apply append - (map ghil-env-variables - (map ghil-lambda-env exps)))))) - (make-ghil-lambda env #f '() #f '() - (make-ghil-begin env #f - (map ghil-lambda-body exps))))) - -(define-language ghil - #:title "Guile High Intermediate Language (GHIL)" - #:version "0.3" - #:reader read - #:printer write-ghil - #:parser parse - #:joiner join - #:compilers `((glil . ,compile-glil)) - ) diff --git a/module/language/r5rs/core.il b/module/language/r5rs/core.il deleted file mode 100644 index c614a6fe2..000000000 --- a/module/language/r5rs/core.il +++ /dev/null @@ -1,324 +0,0 @@ -;;; R5RS core environment - -;; Copyright (C) 2001 Free Software Foundation, Inc. - -;;;; This library is free software; you can redistribute it and/or -;;;; modify it under the terms of the GNU Lesser General Public -;;;; License as published by the Free Software Foundation; either -;;;; version 3 of the License, or (at your option) any later version. -;;;; -;;;; This library is distributed in the hope that it will be useful, -;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -;;;; Lesser General Public License for more details. -;;;; -;;;; You should have received a copy of the GNU Lesser General Public -;;;; License along with this library; if not, write to the Free Software -;;;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - -;;; Code: - -;; Non standard procedures - -(@define void (@lambda () (@void))) - -;; 6. Standard procedures - -;;; 6.1 Equivalence predicates - -(@define eq? (@lambda (x y) (@eq? x y))) -(@define eqv? (@ Core::eqv?)) -(@define equal? (@ Core::equal?)) - -;;; 6.2 Numbers - -(@define number? (@ Core::number?)) -(@define complex? (@ Core::complex?)) -(@define real? (@ Core::real?)) -(@define rational? (@ Core::rational?)) -(@define integer? (@ Core::integer?)) - -(@define exact? (@ Core::exact?)) -(@define inexact? (@ Core::inexact?)) - -(@define = (@ Core::=)) -(@define < (@ Core::<)) -(@define > (@ Core::>)) -(@define <= (@ Core::<=)) -(@define >= (@ Core::>=)) - -(@define zero? (@ Core::zero?)) -(@define positive? (@ Core::positive?)) -(@define negative? (@ Core::negative?)) -(@define odd? (@ Core::odd?)) -(@define even? (@ Core::even?)) - -(@define max (@ Core::max)) -(@define min (@ Core::min)) - -(@define + (@ Core::+)) -(@define * (@ Core::*)) -(@define - (@ Core::-)) -(@define / (@ Core::/)) - -(@define abs (@ Core::abs)) - -(@define quotient (@ Core::quotient)) -(@define remainder (@ Core::remainder)) -(@define modulo (@ Core::modulo)) - -(@define gcd (@ Core::gcd)) -(@define lcm (@ Core::lcm)) - -;; (@define numerator (@ Core::numerator)) -;; (@define denominator (@ Core::denominator)) - -(@define floor (@ Core::floor)) -(@define ceiling (@ Core::ceiling)) -(@define truncate (@ Core::truncate)) -(@define round (@ Core::round)) - -;; (@define rationalize (@ Core::rationalize)) - -(@define exp (@ Core::exp)) -(@define log (@ Core::log)) -(@define sin (@ Core::sin)) -(@define cos (@ Core::cos)) -(@define tan (@ Core::tan)) -(@define asin (@ Core::asin)) -(@define acos (@ Core::acos)) -(@define atan (@ Core::atan)) - -(@define sqrt (@ Core::sqrt)) -(@define expt (@ Core::expt)) - -(@define make-rectangular (@ Core::make-rectangular)) -(@define make-polar (@ Core::make-polar)) -(@define real-part (@ Core::real-part)) -(@define imag-part (@ Core::imag-part)) -(@define magnitude (@ Core::magnitude)) -(@define angle (@ Core::angle)) - -(@define exact->inexact (@ Core::exact->inexact)) -(@define inexact->exact (@ Core::inexact->exact)) - -(@define number->string (@ Core::number->string)) -(@define string->number (@ Core::string->number)) - -;;; 6.3 Other data types - -;;;; 6.3.1 Booleans - -(@define not (@lambda (x) (@not x))) -(@define boolean? (@ Core::boolean?)) - -;;;; 6.3.2 Pairs and lists - -(@define pair? (@lambda (x) (@pair? x))) -(@define cons (@lambda (x y) (@cons x y))) - -(@define car (@lambda (x) (@car x))) -(@define cdr (@lambda (x) (@cdr x))) -(@define set-car! (@ Core::set-car!)) -(@define set-cdr! (@ Core::set-cdr!)) - -(@define caar (@lambda (x) (@caar x))) -(@define cadr (@lambda (x) (@cadr x))) -(@define cdar (@lambda (x) (@cdar x))) -(@define cddr (@lambda (x) (@cddr x))) -(@define caaar (@lambda (x) (@caaar x))) -(@define caadr (@lambda (x) (@caadr x))) -(@define cadar (@lambda (x) (@cadar x))) -(@define caddr (@lambda (x) (@caddr x))) -(@define cdaar (@lambda (x) (@cdaar x))) -(@define cdadr (@lambda (x) (@cdadr x))) -(@define cddar (@lambda (x) (@cddar x))) -(@define cdddr (@lambda (x) (@cdddr x))) -(@define caaaar (@lambda (x) (@caaaar x))) -(@define caaadr (@lambda (x) (@caaadr x))) -(@define caadar (@lambda (x) (@caadar x))) -(@define caaddr (@lambda (x) (@caaddr x))) -(@define cadaar (@lambda (x) (@cadaar x))) -(@define cadadr (@lambda (x) (@cadadr x))) -(@define caddar (@lambda (x) (@caddar x))) -(@define cadddr (@lambda (x) (@cadddr x))) -(@define cdaaar (@lambda (x) (@cdaaar x))) -(@define cdaadr (@lambda (x) (@cdaadr x))) -(@define cdadar (@lambda (x) (@cdadar x))) -(@define cdaddr (@lambda (x) (@cdaddr x))) -(@define cddaar (@lambda (x) (@cddaar x))) -(@define cddadr (@lambda (x) (@cddadr x))) -(@define cdddar (@lambda (x) (@cdddar x))) -(@define cddddr (@lambda (x) (@cddddr x))) - -(@define null? (@lambda (x) (@null? x))) -(@define list? (@lambda (x) (@list? x))) - -(@define list (@lambda x x)) - -(@define length (@ Core::length)) -(@define append (@ Core::append)) -(@define reverse (@ Core::reverse)) -(@define list-tail (@ Core::list-tail)) -(@define list-ref (@ Core::list-ref)) - -(@define memq (@ Core::memq)) -(@define memv (@ Core::memv)) -(@define member (@ Core::member)) - -(@define assq (@ Core::assq)) -(@define assv (@ Core::assv)) -(@define assoc (@ Core::assoc)) - -;;;; 6.3.3 Symbols - -(@define symbol? (@ Core::symbol?)) -(@define symbol->string (@ Core::symbol->string)) -(@define string->symbol (@ Core::string->symbol)) - -;;;; 6.3.4 Characters - -(@define char? (@ Core::char?)) -(@define char=? (@ Core::char=?)) -(@define char<? (@ Core::char<?)) -(@define char>? (@ Core::char>?)) -(@define char<=? (@ Core::char<=?)) -(@define char>=? (@ Core::char>=?)) -(@define char-ci=? (@ Core::char-ci=?)) -(@define char-ci<? (@ Core::char-ci<?)) -(@define char-ci>? (@ Core::char-ci>?)) -(@define char-ci<=? (@ Core::char-ci<=?)) -(@define char-ci>=? (@ Core::char-ci>=?)) -(@define char-alphabetic? (@ Core::char-alphabetic?)) -(@define char-numeric? (@ Core::char-numeric?)) -(@define char-whitespace? (@ Core::char-whitespace?)) -(@define char-upper-case? (@ Core::char-upper-case?)) -(@define char-lower-case? (@ Core::char-lower-case?)) -(@define char->integer (@ Core::char->integer)) -(@define integer->char (@ Core::integer->char)) -(@define char-upcase (@ Core::char-upcase)) -(@define char-downcase (@ Core::char-downcase)) - -;;;; 6.3.5 Strings - -(@define string? (@ Core::string?)) -(@define make-string (@ Core::make-string)) -(@define string (@ Core::string)) -(@define string-length (@ Core::string-length)) -(@define string-ref (@ Core::string-ref)) -(@define string-set! (@ Core::string-set!)) - -(@define string=? (@ Core::string=?)) -(@define string-ci=? (@ Core::string-ci=?)) -(@define string<? (@ Core::string<?)) -(@define string>? (@ Core::string>?)) -(@define string<=? (@ Core::string<=?)) -(@define string>=? (@ Core::string>=?)) -(@define string-ci<? (@ Core::string-ci<?)) -(@define string-ci>? (@ Core::string-ci>?)) -(@define string-ci<=? (@ Core::string-ci<=?)) -(@define string-ci>=? (@ Core::string-ci>=?)) - -(@define substring (@ Core::substring)) -(@define string-append (@ Core::string-append)) -(@define string->list (@ Core::string->list)) -(@define list->string (@ Core::list->string)) -(@define string-copy (@ Core::string-copy)) -(@define string-fill! (@ Core::string-fill!)) - -;;;; 6.3.6 Vectors - -(@define vector? (@ Core::vector?)) -(@define make-vector (@ Core::make-vector)) -(@define vector (@ Core::vector)) -(@define vector-length (@ Core::vector-length)) -(@define vector-ref (@ Core::vector-ref)) -(@define vector-set! (@ Core::vector-set!)) -(@define vector->list (@ Core::vector->list)) -(@define list->vector (@ Core::list->vector)) -(@define vector-fill! (@ Core::vector-fill!)) - -;;; 6.4 Control features - -(@define procedure? (@ Core::procedure?)) -(@define apply (@ Core::apply)) -(@define map (@ Core::map)) -(@define for-each (@ Core::for-each)) -(@define force (@ Core::force)) - -(@define call-with-current-continuation (@ Core::call-with-current-continuation)) -(@define values (@ Core::values)) -(@define call-with-values (@ Core::call-with-values)) -(@define dynamic-wind (@ Core::dynamic-wind)) - -;;; 6.5 Eval - -(@define eval - (@let ((l (@ Language::r5rs::spec::r5rs))) - (@lambda (x e) - (((@ System::Base::language::compile-in) x e l))))) - -;; (@define scheme-report-environment -;; (@lambda (version) -;; (@if (@= version 5) -;; (@ Language::R5RS::Core) -;; (@error "Unsupported environment version" version)))) -;; -;; (@define null-environment -;; (@lambda (version) -;; (@if (@= version 5) -;; (@ Language::R5RS::Null) -;; (@error "Unsupported environment version" version)))) - -(@define interaction-environment (@lambda () (@current-module))) - -;;; 6.6 Input and output - -;;;; 6.6.1 Ports - -(@define call-with-input-file (@ Core::call-with-input-file)) -(@define call-with-output-file (@ Core::call-with-output-file)) - -(@define input-port? (@ Core::input-port?)) -(@define output-port? (@ Core::output-port?)) -(@define current-input-port (@ Core::current-input-port)) -(@define current-output-port (@ Core::current-output-port)) - -(@define with-input-from-file (@ Core::with-input-from-file)) -(@define with-output-to-file (@ Core::with-output-to-file)) - -(@define open-input-file (@ Core::open-input-file)) -(@define open-output-file (@ Core::open-output-file)) -(@define close-input-port (@ Core::close-input-port)) -(@define close-output-port (@ Core::close-output-port)) - -;;;; 6.6.2 Input - -(@define read (@ Core::read)) -(@define read-char (@ Core::read-char)) -(@define peek-char (@ Core::peek-char)) -(@define eof-object? (@ Core::eof-object?)) -(@define char-ready? (@ Core::char-ready?)) - -;;;; 6.6.3 Output - -(@define write (@ Core::write)) -(@define display (@ Core::display)) -(@define newline (@ Core::newline)) -(@define write-char (@ Core::write-char)) - -;;;; 6.6.4 System interface - -(@define load - (@lambda (file) - (call-with-input-file file - (@lambda (port) - (@let ((loop (@lambda (x) - (@if (@not (eof-object? x)) - (@begin - (eval x (interaction-environment)) - (loop (read port))))))) - (loop (read port))))))) - -;; transcript-on -;; transcript-off diff --git a/module/language/r5rs/expand.scm b/module/language/r5rs/expand.scm deleted file mode 100644 index e8910ae1b..000000000 --- a/module/language/r5rs/expand.scm +++ /dev/null @@ -1,80 +0,0 @@ -;;; R5RS syntax expander - -;; Copyright (C) 2001 Free Software Foundation, Inc. - -;;;; This library is free software; you can redistribute it and/or -;;;; modify it under the terms of the GNU Lesser General Public -;;;; License as published by the Free Software Foundation; either -;;;; version 3 of the License, or (at your option) any later version. -;;;; -;;;; This library is distributed in the hope that it will be useful, -;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -;;;; Lesser General Public License for more details. -;;;; -;;;; You should have received a copy of the GNU Lesser General Public -;;;; License along with this library; if not, write to the Free Software -;;;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - -;;; Code: - -(define-module (language r5rs expand) - #:export (expand void - identifier? free-identifier=? bound-identifier=? - generate-temporaries datum->syntax-object syntax-object->datum)) - -(define sc-expand #f) -(define $sc-put-cte #f) -(define $syntax-dispatch #f) -(define syntax-rules #f) -(define syntax-error #f) -(define identifier? #f) -(define free-identifier=? #f) -(define bound-identifier=? #f) -(define generate-temporaries #f) -(define datum->syntax-object #f) -(define syntax-object->datum #f) - -(define void (lambda () (if #f #f))) - -(define andmap - (lambda (f first . rest) - (or (null? first) - (if (null? rest) - (let andmap ((first first)) - (let ((x (car first)) (first (cdr first))) - (if (null? first) - (f x) - (and (f x) (andmap first))))) - (let andmap ((first first) (rest rest)) - (let ((x (car first)) - (xr (map car rest)) - (first (cdr first)) - (rest (map cdr rest))) - (if (null? first) - (apply f (cons x xr)) - (and (apply f (cons x xr)) (andmap first rest))))))))) - -(define ormap - (lambda (proc list1) - (and (not (null? list1)) - (or (proc (car list1)) (ormap proc (cdr list1)))))) - -(define putprop set-symbol-property!) -(define getprop symbol-property) -(define remprop symbol-property-remove!) - -(define syncase-module (current-module)) -(define guile-eval eval) -(define (eval x) - (if (and (pair? x) (equal? (car x) "noexpand")) - (cdr x) - (guile-eval x syncase-module))) - -(define guile-error error) -(define (error who format-string why what) - (guile-error why what)) - -(load "psyntax.pp") - -(define expand sc-expand) diff --git a/module/language/r5rs/null.il b/module/language/r5rs/null.il deleted file mode 100644 index a290025de..000000000 --- a/module/language/r5rs/null.il +++ /dev/null @@ -1,19 +0,0 @@ -;;; R5RS null environment - -;; Copyright (C) 2001 Free Software Foundation, Inc. - -;;;; This library is free software; you can redistribute it and/or -;;;; modify it under the terms of the GNU Lesser General Public -;;;; License as published by the Free Software Foundation; either -;;;; version 3 of the License, or (at your option) any later version. -;;;; -;;;; This library is distributed in the hope that it will be useful, -;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -;;;; Lesser General Public License for more details. -;;;; -;;;; You should have received a copy of the GNU Lesser General Public -;;;; License along with this library; if not, write to the Free Software -;;;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - -;;; Code: diff --git a/module/language/r5rs/psyntax.pp b/module/language/r5rs/psyntax.pp deleted file mode 100644 index ef9ca0aa9..000000000 --- a/module/language/r5rs/psyntax.pp +++ /dev/null @@ -1,14552 +0,0 @@ -;;; psyntax.pp -;;; automatically generated from psyntax.ss -;;; Wed Aug 30 12:24:52 EST 2000 -;;; see copyright notice in psyntax.ss - -((lambda () - (letrec ((g452 - (lambda (g1823) - ((letrec ((g1824 - (lambda (g1827 g1825 g1826) - (if (pair? g1827) - (g1824 - (cdr g1827) - (cons (g393 (car g1827) g1826) g1825) - g1826) - (if (g256 g1827) - (cons (g393 g1827 g1826) g1825) - (if (null? g1827) - g1825 - (if (g204 g1827) - (g1824 - (g205 g1827) - g1825 - (g371 g1826 (g206 g1827))) - (if (g90 g1827) - (g1824 - (annotation-expression - g1827) - g1825 - g1826) - (cons g1827 g1825))))))))) - g1824) - g1823 - '() - '(())))) - (g451 - (lambda (g833) - ((lambda (g834) (if (g90 g834) (gensym) (gensym))) - (if (g204 g833) (g205 g833) g833)))) - (g450 - (lambda (g1820 g1819) - (g449 g1820 - g1819 - (lambda (g1821) - (if ((lambda (g1822) - (if g1822 - g1822 - (if (pair? g1821) - (g90 (car g1821)) - '#f))) - (g90 g1821)) - (g448 g1821 '#f) - g1821))))) - (g449 - (lambda (g837 g835 g836) - (if (memq 'top (g264 g835)) - (g836 g837) - ((letrec ((g838 - (lambda (g839) - (if (g204 g839) - (g449 (g205 g839) (g206 g839) g836) - (if (pair? g839) - ((lambda (g841 g840) - (if (if (eq? g841 (car g839)) - (eq? g840 (cdr g839)) - '#f) - g839 - (cons g841 g840))) - (g838 (car g839)) - (g838 (cdr g839))) - (if (vector? g839) - ((lambda (g842) - ((lambda (g843) - (if (andmap - eq? - g842 - g843) - g839 - (list->vector g843))) - (map g838 g842))) - (vector->list g839)) - g839)))))) - g838) - g837)))) - (g448 - (lambda (g1813 g1812) - (if (pair? g1813) - ((lambda (g1814) - (begin (if g1812 - (set-annotation-stripped! g1812 g1814) - (void)) - (set-car! g1814 (g448 (car g1813) '#f)) - (set-cdr! g1814 (g448 (cdr g1813) '#f)) - g1814)) - (cons '#f '#f)) - (if (g90 g1813) - ((lambda (g1815) - (if g1815 - g1815 - (g448 (annotation-expression g1813) g1813))) - (annotation-stripped g1813)) - (if (vector? g1813) - ((lambda (g1816) - (begin (if g1812 - (set-annotation-stripped! - g1812 - g1816) - (void)) - ((letrec ((g1817 - (lambda (g1818) - (if (not (< g1818 '0)) - (begin (vector-set! - g1816 - g1818 - (g448 (vector-ref - g1813 - g1818) - '#f)) - (g1817 - (- g1818 - '1))) - (void))))) - g1817) - (- (vector-length g1813) '1)) - g1816)) - (make-vector (vector-length g1813))) - g1813))))) - (g447 - (lambda (g844) - (if (g255 g844) - (g378 g844 - '#(syntax-object - ... - ((top) - #(ribcage () () ()) - #(ribcage () () ()) - #(ribcage #(x) #((top)) #("i")) - #(ribcage - (lambda-var-list - gen-var - strip - strip* - strip-annotation - ellipsis? - chi-void - chi-local-syntax - chi-lambda-clause - parse-define-syntax - parse-define - parse-import - parse-module - do-import! - chi-internal - chi-body - chi-macro - chi-set! - chi-application - chi-expr - chi - ct-eval/residualize - do-top-import - vfor-each - vmap - chi-external - check-defined-ids - check-module-exports - extend-store! - id-set-diff - chi-top-module - set-module-binding-val! - set-module-binding-imps! - set-module-binding-label! - set-module-binding-id! - set-module-binding-type! - module-binding-val - module-binding-imps - module-binding-label - module-binding-id - module-binding-type - module-binding? - make-module-binding - make-resolved-interface - make-trimmed-interface - set-interface-token! - set-interface-exports! - interface-token - interface-exports - interface? - make-interface - flatten-exports - chi-top - chi-top-expr - syntax-type - chi-when-list - chi-top-sequence - chi-sequence - source-wrap - wrap - bound-id-member? - invalid-ids-error - distinct-bound-ids? - valid-bound-ids? - bound-id=? - literal-id=? - free-id=? - id-var-name - id-var-name-loc - id-var-name&marks - id-var-name-loc&marks - same-marks? - join-marks - join-wraps - smart-append - make-trimmed-syntax-object - make-binding-wrap - lookup-import-binding-name - extend-ribcage-subst! - extend-ribcage-barrier-help! - extend-ribcage-barrier! - extend-ribcage! - make-empty-ribcage - import-token-key - import-token? - make-import-token - barrier-marker - new-mark - anti-mark - the-anti-mark - only-top-marked? - top-marked? - top-wrap - empty-wrap - set-ribcage-labels! - set-ribcage-marks! - set-ribcage-symnames! - ribcage-labels - ribcage-marks - ribcage-symnames - ribcage? - make-ribcage - set-indirect-label! - get-indirect-label - indirect-label? - gen-indirect-label - gen-labels - label? - gen-label - make-rename - rename-marks - rename-new - rename-old - subst-rename? - wrap-subst - wrap-marks - make-wrap - id-sym-name&marks - id-sym-name - id? - nonsymbol-id? - global-extend - lookup - sanitize-binding - lookup* - displaced-lexical-error - transformer-env - extend-var-env* - extend-env* - extend-env - null-env - binding? - set-binding-value! - set-binding-type! - binding-value - binding-type - make-binding - arg-check - source-annotation - no-source - unannotate - set-syntax-object-wrap! - set-syntax-object-expression! - syntax-object-wrap - syntax-object-expression - syntax-object? - make-syntax-object - self-evaluating? - build-lexical-var - build-letrec - build-sequence - build-data - build-primref - build-lambda - build-cte-install - build-module-definition - build-global-definition - build-global-assignment - build-global-reference - build-lexical-assignment - build-lexical-reference - build-conditional - build-application - generate-id - get-import-binding - get-global-definition-hook - put-global-definition-hook - gensym-hook - error-hook - local-eval-hook - top-level-eval-hook - annotation? - fx< - fx= - fx- - fx+ - noexpand - define-structure - unless - when) - ((top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top)) - ("i" "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i")) - #(ribcage ((import-token . *top*)) () ()) - #(ribcage ((import-token . *top*)) () ())))) - '#f))) - (g446 (lambda () (list 'void))) - (g445 - (lambda (g850 g845 g849 g846 g848 g847) - ((lambda (g851) - ((lambda (g852) - (if g852 - (apply - (lambda (g857 g853 g856 g854 g855) - ((lambda (g858) - (if (not (g389 g858)) - (g391 (map (lambda (g859) - (g393 g859 g846)) - g858) - (g394 g845 g846 g848) - '"keyword") - ((lambda (g860) - ((lambda (g861) - (g847 (cons g854 g855) - (g247 g860 - ((lambda (g863 g862) - (map (lambda (g865) - (g231 'deferred - (g432 g865 - g862 - g863))) - g856)) - (if g850 g861 g846) - (g249 g849)) - g849) - g861 - g848)) - (g368 g858 g860 g846))) - (g299 g858)))) - g853)) - g852) - ((lambda (g868) - (syntax-error (g394 g845 g846 g848))) - g851))) - ($syntax-dispatch - g851 - '(any #(each (any any)) any . each-any)))) - g845))) - (g444 - (lambda (g1789 g1785 g1788 g1786 g1787) - ((lambda (g1790) - ((lambda (g1791) - (if g1791 - (apply - (lambda (g1794 g1792 g1793) - ((lambda (g1795) - (if (not (g389 g1795)) - (syntax-error - g1789 - '"invalid parameter list in") - ((lambda (g1797 g1796) - (g1787 - g1796 - (g437 (cons g1792 g1793) - g1789 - (g248 g1797 g1796 g1788) - (g368 g1795 g1797 g1786)))) - (g299 g1795) - (map g451 g1795)))) - g1794)) - g1791) - ((lambda (g1800) - (if g1800 - (apply - (lambda (g1803 g1801 g1802) - ((lambda (g1804) - (if (not (g389 g1804)) - (syntax-error - g1789 - '"invalid parameter list in") - ((lambda (g1806 g1805) - (g1787 - ((letrec ((g1808 - (lambda (g1810 - g1809) - (if (null? - g1810) - g1809 - (g1808 - (cdr g1810) - (cons (car g1810) - g1809)))))) - g1808) - (cdr g1805) - (car g1805)) - (g437 (cons g1801 g1802) - g1789 - (g248 g1806 - g1805 - g1788) - (g368 g1804 - g1806 - g1786)))) - (g299 g1804) - (map g451 g1804)))) - (g452 g1803))) - g1800) - ((lambda (g1811) (syntax-error g1789)) - g1790))) - ($syntax-dispatch g1790 '(any any . each-any))))) - ($syntax-dispatch g1790 '(each-any any . each-any)))) - g1785))) - (g443 - (lambda (g872 g869 g871 g870) - ((lambda (g873) - ((lambda (g874) - (if (if g874 - (apply - (lambda (g877 g875 g876) (g256 g875)) - g874) - '#f) - (apply - (lambda (g880 g878 g879) (g870 g878 g879 g869)) - g874) - ((lambda (g881) - (syntax-error (g394 g872 g869 g871))) - g873))) - ($syntax-dispatch g873 '(any any any)))) - g872))) - (g442 - (lambda (g1758 g1755 g1757 g1756) - ((lambda (g1759) - ((lambda (g1760) - (if (if g1760 - (apply - (lambda (g1763 g1761 g1762) (g256 g1761)) - g1760) - '#f) - (apply - (lambda (g1766 g1764 g1765) - (g1756 g1764 g1765 g1755)) - g1760) - ((lambda (g1767) - (if (if g1767 - (apply - (lambda (g1772 - g1768 - g1771 - g1769 - g1770) - (if (g256 g1768) - (g389 (g452 g1771)) - '#f)) - g1767) - '#f) - (apply - (lambda (g1777 g1773 g1776 g1774 g1775) - (g1756 - (g393 g1773 g1755) - (cons '#(syntax-object - lambda - ((top) - #(ribcage - #(_ name args e1 e2) - #((top) - (top) - (top) - (top) - (top)) - #("i" "i" "i" "i" "i")) - #(ribcage () () ()) - #(ribcage - #(e w s k) - #((top) - (top) - (top) - (top)) - #("i" "i" "i" "i")) - #(ribcage - (lambda-var-list - gen-var - strip - strip* - strip-annotation - ellipsis? - chi-void - chi-local-syntax - chi-lambda-clause - parse-define-syntax - parse-define - parse-import - parse-module - do-import! - chi-internal - chi-body - chi-macro - chi-set! - chi-application - chi-expr - chi - ct-eval/residualize - do-top-import - vfor-each - vmap - chi-external - check-defined-ids - check-module-exports - extend-store! - id-set-diff - chi-top-module - set-module-binding-val! - set-module-binding-imps! - set-module-binding-label! - set-module-binding-id! - set-module-binding-type! - module-binding-val - module-binding-imps - module-binding-label - module-binding-id - module-binding-type - module-binding? - make-module-binding - make-resolved-interface - make-trimmed-interface - set-interface-token! - set-interface-exports! - interface-token - interface-exports - interface? - make-interface - flatten-exports - chi-top - chi-top-expr - syntax-type - chi-when-list - chi-top-sequence - chi-sequence - source-wrap - wrap - bound-id-member? - invalid-ids-error - distinct-bound-ids? - valid-bound-ids? - bound-id=? - literal-id=? - free-id=? - id-var-name - id-var-name-loc - id-var-name&marks - id-var-name-loc&marks - same-marks? - join-marks - join-wraps - smart-append - make-trimmed-syntax-object - make-binding-wrap - lookup-import-binding-name - extend-ribcage-subst! - extend-ribcage-barrier-help! - extend-ribcage-barrier! - extend-ribcage! - make-empty-ribcage - import-token-key - import-token? - make-import-token - barrier-marker - new-mark - anti-mark - the-anti-mark - only-top-marked? - top-marked? - top-wrap - empty-wrap - set-ribcage-labels! - set-ribcage-marks! - set-ribcage-symnames! - ribcage-labels - ribcage-marks - ribcage-symnames - ribcage? - make-ribcage - set-indirect-label! - get-indirect-label - indirect-label? - gen-indirect-label - gen-labels - label? - gen-label - make-rename - rename-marks - rename-new - rename-old - subst-rename? - wrap-subst - wrap-marks - make-wrap - id-sym-name&marks - id-sym-name - id? - nonsymbol-id? - global-extend - lookup - sanitize-binding - lookup* - displaced-lexical-error - transformer-env - extend-var-env* - extend-env* - extend-env - null-env - binding? - set-binding-value! - set-binding-type! - binding-value - binding-type - make-binding - arg-check - source-annotation - no-source - unannotate - set-syntax-object-wrap! - set-syntax-object-expression! - syntax-object-wrap - syntax-object-expression - syntax-object? - make-syntax-object - self-evaluating? - build-lexical-var - build-letrec - build-sequence - build-data - build-primref - build-lambda - build-cte-install - build-module-definition - build-global-definition - build-global-assignment - build-global-reference - build-lexical-assignment - build-lexical-reference - build-conditional - build-application - generate-id - get-import-binding - get-global-definition-hook - put-global-definition-hook - gensym-hook - error-hook - local-eval-hook - top-level-eval-hook - annotation? - fx< - fx= - fx- - fx+ - noexpand - define-structure - unless - when) - ((top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top)) - ("i" "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i")) - #(ribcage - ((import-token . *top*)) - () - ()) - #(ribcage - ((import-token . *top*)) - () - ()))) - (g393 (cons g1776 - (cons g1774 g1775)) - g1755)) - '(()))) - g1767) - ((lambda (g1779) - (if (if g1779 - (apply - (lambda (g1781 g1780) - (g256 g1780)) - g1779) - '#f) - (apply - (lambda (g1783 g1782) - (g1756 - (g393 g1782 g1755) - '(#(syntax-object - void - ((top) - #(ribcage - #(_ name) - #((top) (top)) - #("i" "i")) - #(ribcage () () ()) - #(ribcage - #(e w s k) - #((top) - (top) - (top) - (top)) - #("i" "i" "i" "i")) - #(ribcage - (lambda-var-list - gen-var - strip - strip* - strip-annotation - ellipsis? - chi-void - chi-local-syntax - chi-lambda-clause - parse-define-syntax - parse-define - parse-import - parse-module - do-import! - chi-internal - chi-body - chi-macro - chi-set! - chi-application - chi-expr - chi - ct-eval/residualize - do-top-import - vfor-each - vmap - chi-external - check-defined-ids - check-module-exports - extend-store! - id-set-diff - chi-top-module - set-module-binding-val! - set-module-binding-imps! - set-module-binding-label! - set-module-binding-id! - set-module-binding-type! - module-binding-val - module-binding-imps - module-binding-label - module-binding-id - module-binding-type - module-binding? - make-module-binding - make-resolved-interface - make-trimmed-interface - set-interface-token! - set-interface-exports! - interface-token - interface-exports - interface? - make-interface - flatten-exports - chi-top - chi-top-expr - syntax-type - chi-when-list - chi-top-sequence - chi-sequence - source-wrap - wrap - bound-id-member? - invalid-ids-error - distinct-bound-ids? - valid-bound-ids? - bound-id=? - literal-id=? - free-id=? - id-var-name - id-var-name-loc - id-var-name&marks - id-var-name-loc&marks - same-marks? - join-marks - join-wraps - smart-append - make-trimmed-syntax-object - make-binding-wrap - lookup-import-binding-name - extend-ribcage-subst! - extend-ribcage-barrier-help! - extend-ribcage-barrier! - extend-ribcage! - make-empty-ribcage - import-token-key - import-token? - make-import-token - barrier-marker - new-mark - anti-mark - the-anti-mark - only-top-marked? - top-marked? - top-wrap - empty-wrap - set-ribcage-labels! - set-ribcage-marks! - set-ribcage-symnames! - ribcage-labels - ribcage-marks - ribcage-symnames - ribcage? - make-ribcage - set-indirect-label! - get-indirect-label - indirect-label? - gen-indirect-label - gen-labels - label? - gen-label - make-rename - rename-marks - rename-new - rename-old - subst-rename? - wrap-subst - wrap-marks - make-wrap - id-sym-name&marks - id-sym-name - id? - nonsymbol-id? - global-extend - lookup - sanitize-binding - lookup* - displaced-lexical-error - transformer-env - extend-var-env* - extend-env* - extend-env - null-env - binding? - set-binding-value! - set-binding-type! - binding-value - binding-type - make-binding - arg-check - source-annotation - no-source - unannotate - set-syntax-object-wrap! - set-syntax-object-expression! - syntax-object-wrap - syntax-object-expression - syntax-object? - make-syntax-object - self-evaluating? - build-lexical-var - build-letrec - build-sequence - build-data - build-primref - build-lambda - build-cte-install - build-module-definition - build-global-definition - build-global-assignment - build-global-reference - build-lexical-assignment - build-lexical-reference - build-conditional - build-application - generate-id - get-import-binding - get-global-definition-hook - put-global-definition-hook - gensym-hook - error-hook - local-eval-hook - top-level-eval-hook - annotation? - fx< - fx= - fx- - fx+ - noexpand - define-structure - unless - when) - ((top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top)) - ("i" "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i")) - #(ribcage - ((import-token - . - *top*)) - () - ()) - #(ribcage - ((import-token - . - *top*)) - () - ())))) - '(()))) - g1779) - ((lambda (g1784) - (syntax-error - (g394 g1758 g1755 g1757))) - g1759))) - ($syntax-dispatch g1759 '(any any))))) - ($syntax-dispatch - g1759 - '(any (any . any) any . each-any))))) - ($syntax-dispatch g1759 '(any any any)))) - g1758))) - (g441 - (lambda (g885 g882 g884 g883) - ((lambda (g886) - ((lambda (g887) - (if (if g887 - (apply (lambda (g889 g888) (g256 g888)) g887) - '#f) - (apply - (lambda (g891 g890) (g883 (g393 g890 g882))) - g887) - ((lambda (g892) - (syntax-error (g394 g885 g882 g884))) - g886))) - ($syntax-dispatch g886 '(any any)))) - g885))) - (g440 - (lambda (g1723 g1719 g1722 g1720 g1721) - (letrec ((g1725 - (lambda (g1753 g1751 g1752) - (g1721 - g1753 - (g1724 g1751) - (map (lambda (g1754) (g393 g1754 g1720)) - g1752)))) - (g1724 - (lambda (g1745) - (if (null? g1745) - '() - (cons ((lambda (g1746) - ((lambda (g1747) - (if g1747 - (apply - (lambda (g1748) - (g1724 g1748)) - g1747) - ((lambda (g1750) - (if (g256 g1750) - (g393 g1750 g1720) - (syntax-error - (g394 g1723 - g1719 - g1722) - '"invalid exports list in"))) - g1746))) - ($syntax-dispatch - g1746 - 'each-any))) - (car g1745)) - (g1724 (cdr g1745))))))) - ((lambda (g1726) - ((lambda (g1727) - (if g1727 - (apply - (lambda (g1730 g1728 g1729) - (g1725 '#f g1728 g1729)) - g1727) - ((lambda (g1733) - (if (if g1733 - (apply - (lambda (g1737 g1734 g1736 g1735) - (g256 g1734)) - g1733) - '#f) - (apply - (lambda (g1741 g1738 g1740 g1739) - (g1725 - (g393 g1738 g1719) - g1740 - g1739)) - g1733) - ((lambda (g1744) - (syntax-error - (g394 g1723 g1719 g1722))) - g1726))) - ($syntax-dispatch - g1726 - '(any any each-any . each-any))))) - ($syntax-dispatch g1726 '(any each-any . each-any)))) - g1723)))) - (g439 - (lambda (g894 g893) - ((lambda (g895) - (if g895 - (g366 g893 g895) - (g429 (lambda (g896) - ((lambda (g897) - (begin (if (not g897) - (syntax-error - g896 - '"exported identifier not visible") - (void)) - (g363 g893 g896 g897))) - (g376 g896 '(())))) - (g404 g894)))) - (g405 g894)))) - (g438 - (lambda (g1652 g1648 g1651 g1649 g1650) - (letrec ((g1653 - (lambda (g1718 g1714 g1717 g1715 g1716) - (begin (g426 g1648 g1714) - (g1650 g1718 g1714 g1717 g1715 g1716))))) - ((letrec ((g1654 - (lambda (g1659 g1655 g1658 g1656 g1657) - (if (null? g1659) - (g1653 g1659 g1655 g1658 g1656 g1657) - ((lambda (g1661 g1660) - (call-with-values - (lambda () - (g398 g1661 - g1660 - '(()) - '#f - g1652)) - (lambda (g1666 - g1662 - g1665 - g1663 - g1664) - ((lambda (g1667) - (if (memv g1667 '(define-form)) - (g442 g1665 - g1663 - g1664 - (lambda (g1670 - g1668 - g1669) - ((lambda (g1672 - g1671) - ((lambda (g1673) - (begin (g363 g1652 - g1672 - g1671) - (g424 g1649 - g1671 - (g231 'lexical - g1673)) - (g1654 - (cdr g1659) - (cons g1672 - g1655) - (cons g1673 - g1658) - (cons (cons g1660 - (g393 g1668 - g1669)) - g1656) - g1657))) - (g451 g1672))) - (g393 g1670 g1669) - (g297)))) - (if (memv g1667 - '(define-syntax-form)) - (g443 g1665 - g1663 - g1664 - (lambda (g1676 - g1674 - g1675) - ((lambda (g1679 - g1677 - g1678) - (begin (g363 g1652 - g1679 - g1677) - (g424 g1649 - g1677 - (g231 'deferred - g1678)) - (g1654 - (cdr g1659) - (cons g1679 - g1655) - g1658 - g1656 - g1657))) - (g393 g1676 - g1675) - (g297) - (g432 g1674 - (g249 g1660) - g1675)))) - (if (memv g1667 - '(module-form)) - ((lambda (g1680) - ((lambda (g1681) - ((lambda () - (g440 g1665 - g1663 - g1664 - g1681 - (lambda (g1684 - g1682 - g1683) - (g438 g1680 - (g394 g1665 - g1663 - g1664) - (map (lambda (g1695) - (cons g1660 - g1695)) - g1683) - g1649 - (lambda (g1689 - g1685 - g1688 - g1686 - g1687) - (begin (g425 g1648 - (g401 g1682) - g1685) - ((lambda (g1693 - g1690 - g1692 - g1691) - (if g1684 - ((lambda (g1694) - (begin (g363 g1652 - g1684 - g1694) - (g424 g1649 - g1694 - (g231 'module - g1693)) - (g1654 - (cdr g1659) - (cons g1684 - g1655) - g1690 - g1692 - g1691))) - (g297)) - ((lambda () - (begin (g439 g1693 - g1652) - (g1654 - (cdr g1659) - (cons g1693 - g1655) - g1690 - g1692 - g1691)))))) - (g408 g1682) - (append - g1688 - g1658) - (append - g1686 - g1656) - (append - g1657 - g1687 - g1689)))))))))) - (g263 (g264 g1663) - (cons g1680 - (g265 g1663))))) - (g304 '() - '() - '())) - (if (memv g1667 - '(import-form)) - (g441 g1665 - g1663 - g1664 - (lambda (g1696) - ((lambda (g1697) - ((lambda (g1698) - ((lambda (g1699) - (if (memv g1699 - '(module)) - ((lambda (g1700) - (begin (if g1662 - (g364 g1652 - g1662) - (void)) - (g439 g1700 - g1652) - (g1654 - (cdr g1659) - (cons g1700 - g1655) - g1658 - g1656 - g1657))) - (cdr g1698)) - (if (memv g1699 - '(displaced-lexical)) - (g250 g1696) - (syntax-error - g1696 - '"import from unknown module")))) - (car g1698))) - (g253 g1697 - g1649))) - (g377 g1696 - '(()))))) - (if (memv g1667 - '(begin-form)) - ((lambda (g1701) - ((lambda (g1702) - (if g1702 - (apply - (lambda (g1704 - g1703) - (g1654 - ((letrec ((g1705 - (lambda (g1706) - (if (null? - g1706) - (cdr g1659) - (cons (cons g1660 - (g393 (car g1706) - g1663)) - (g1705 - (cdr g1706))))))) - g1705) - g1703) - g1655 - g1658 - g1656 - g1657)) - g1702) - (syntax-error - g1701))) - ($syntax-dispatch - g1701 - '(any . - each-any)))) - g1665) - (if (memv g1667 - '(local-syntax-form)) - (g445 g1662 - g1665 - g1660 - g1663 - g1664 - (lambda (g1711 - g1708 - g1710 - g1709) - (g1654 - ((letrec ((g1712 - (lambda (g1713) - (if (null? - g1713) - (cdr g1659) - (cons (cons g1708 - (g393 (car g1713) - g1710)) - (g1712 - (cdr g1713))))))) - g1712) - g1711) - g1655 - g1658 - g1656 - g1657))) - (g1653 - (cons (cons g1660 - (g394 g1665 - g1663 - g1664)) - (cdr g1659)) - g1655 - g1658 - g1656 - g1657)))))))) - g1666)))) - (cdar g1659) - (caar g1659)))))) - g1654) - g1651 - '() - '() - '() - '())))) - (g437 - (lambda (g901 g898 g900 g899) - ((lambda (g902) - ((lambda (g903) - ((lambda (g904) - ((lambda (g905) - ((lambda () - (g438 g903 - g898 - g905 - g902 - (lambda (g910 g906 g909 g907 g908) - (begin (if (null? g910) - (syntax-error - g898 - '"no expressions in body") - (void)) - (g191 '#f - g909 - (map (lambda (g912) - (g432 (cdr g912) - (car g912) - '(()))) - g907) - (g190 '#f - (map (lambda (g911) - (g432 (cdr g911) - (car g911) - '(()))) - (append - g908 - g910)))))))))) - (map (lambda (g913) (cons g902 (g393 g913 g904))) - g901))) - (g263 (g264 g899) (cons g903 (g265 g899))))) - (g304 '() '() '()))) - (cons '("placeholder" placeholder) g900)))) - (g436 - (lambda (g1635 g1630 g1634 g1631 g1633 g1632) - (letrec ((g1636 - (lambda (g1640 g1639) - (if (pair? g1640) - (cons (g1636 (car g1640) g1639) - (g1636 (cdr g1640) g1639)) - (if (g204 g1640) - ((lambda (g1641) - ((lambda (g1643 g1642) - (g203 (g205 g1640) - (if (if (pair? g1643) - (eq? (car g1643) - '#f) - '#f) - (g263 (cdr g1643) - (if g1632 - (cons g1632 - (cdr g1642)) - (cdr g1642))) - (g263 (cons g1639 g1643) - (if g1632 - (cons g1632 - (cons 'shift - g1642)) - (cons 'shift - g1642)))))) - (g264 g1641) - (g265 g1641))) - (g206 g1640)) - (if (vector? g1640) - ((lambda (g1644) - ((lambda (g1645) - ((lambda () - ((letrec ((g1646 - (lambda (g1647) - (if (= g1647 - g1644) - g1645 - (begin (vector-set! - g1645 - g1647 - (g1636 - (vector-ref - g1640 - g1647) - g1639)) - (g1646 - (+ g1647 - '1))))))) - g1646) - '0)))) - (make-vector g1644))) - (vector-length g1640)) - (if (symbol? g1640) - (syntax-error - (g394 g1630 g1631 g1633) - '"encountered raw symbol " - (format '"~s" g1640) - '" in output of macro") - g1640))))))) - (g1636 - ((lambda (g1637) - (if (procedure? g1637) - (g1637 - (lambda (g1638) - (begin (if (not (identifier? g1638)) - (syntax-error - g1638 - '"environment argument is not an identifier") - (void)) - (g253 (g377 g1638 '(())) g1634)))) - g1637)) - (g1635 (g394 g1630 (g349 g1631) g1633))) - (string '#\m))))) - (g435 - (lambda (g918 g914 g917 g915 g916) - ((lambda (g919) - ((lambda (g920) - (if (if g920 - (apply - (lambda (g923 g921 g922) (g256 g921)) - g920) - '#f) - (apply - (lambda (g926 g924 g925) - ((lambda (g927) - ((lambda (g928) - ((lambda (g929) - (if (memv g929 '(macro!)) - ((lambda (g931 g930) - (g398 (g436 (g233 g928) - (list '#(syntax-object - set! - ((top) - #(ribcage - () - () - ()) - #(ribcage - #(id - val) - #((top) - (top)) - #("i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(t) - #(("m" top)) - #("i")) - #(ribcage - () - () - ()) - #(ribcage - () - () - ()) - #(ribcage - () - () - ()) - #(ribcage - #(b) - #((top)) - #("i")) - #(ribcage - () - () - ()) - #(ribcage - () - () - ()) - #(ribcage - #(n) - #((top)) - #("i")) - #(ribcage - #(_ - id - val) - #((top) - (top) - (top)) - #("i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(e - r - w - s - rib) - #((top) - (top) - (top) - (top) - (top)) - #("i" - "i" - "i" - "i" - "i")) - #(ribcage - (lambda-var-list - gen-var - strip - strip* - strip-annotation - ellipsis? - chi-void - chi-local-syntax - chi-lambda-clause - parse-define-syntax - parse-define - parse-import - parse-module - do-import! - chi-internal - chi-body - chi-macro - chi-set! - chi-application - chi-expr - chi - ct-eval/residualize - do-top-import - vfor-each - vmap - chi-external - check-defined-ids - check-module-exports - extend-store! - id-set-diff - chi-top-module - set-module-binding-val! - set-module-binding-imps! - set-module-binding-label! - set-module-binding-id! - set-module-binding-type! - module-binding-val - module-binding-imps - module-binding-label - module-binding-id - module-binding-type - module-binding? - make-module-binding - make-resolved-interface - make-trimmed-interface - set-interface-token! - set-interface-exports! - interface-token - interface-exports - interface? - make-interface - flatten-exports - chi-top - chi-top-expr - syntax-type - chi-when-list - chi-top-sequence - chi-sequence - source-wrap - wrap - bound-id-member? - invalid-ids-error - distinct-bound-ids? - valid-bound-ids? - bound-id=? - literal-id=? - free-id=? - id-var-name - id-var-name-loc - id-var-name&marks - id-var-name-loc&marks - same-marks? - join-marks - join-wraps - smart-append - make-trimmed-syntax-object - make-binding-wrap - lookup-import-binding-name - extend-ribcage-subst! - extend-ribcage-barrier-help! - extend-ribcage-barrier! - extend-ribcage! - make-empty-ribcage - import-token-key - import-token? - make-import-token - barrier-marker - new-mark - anti-mark - the-anti-mark - only-top-marked? - top-marked? - top-wrap - empty-wrap - set-ribcage-labels! - set-ribcage-marks! - set-ribcage-symnames! - ribcage-labels - ribcage-marks - ribcage-symnames - ribcage? - make-ribcage - set-indirect-label! - get-indirect-label - indirect-label? - gen-indirect-label - gen-labels - label? - gen-label - make-rename - rename-marks - rename-new - rename-old - subst-rename? - wrap-subst - wrap-marks - make-wrap - id-sym-name&marks - id-sym-name - id? - nonsymbol-id? - global-extend - lookup - sanitize-binding - lookup* - displaced-lexical-error - transformer-env - extend-var-env* - extend-env* - extend-env - null-env - binding? - set-binding-value! - set-binding-type! - binding-value - binding-type - make-binding - arg-check - source-annotation - no-source - unannotate - set-syntax-object-wrap! - set-syntax-object-expression! - syntax-object-wrap - syntax-object-expression - syntax-object? - make-syntax-object - self-evaluating? - build-lexical-var - build-letrec - build-sequence - build-data - build-primref - build-lambda - build-cte-install - build-module-definition - build-global-definition - build-global-assignment - build-global-reference - build-lexical-assignment - build-lexical-reference - build-conditional - build-application - generate-id - get-import-binding - get-global-definition-hook - put-global-definition-hook - gensym-hook - error-hook - local-eval-hook - top-level-eval-hook - annotation? - fx< - fx= - fx- - fx+ - noexpand - define-structure - unless - when) - ((top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top)) - ("i" "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i")) - #(ribcage - ((import-token - . - *top*)) - () - ()) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - g931 - g930) - g914 - '(()) - g915 - g916) - g914 - '(()) - g915 - g916)) - (g393 g924 g917) - (g393 g925 g917)) - (values - 'core - (lambda (g935 g932 g934 g933) - ((lambda (g937 g936) - ((lambda (g938) - ((lambda (g939) - (if (memv g939 - '(lexical)) - (list 'set! - (g233 g938) - g937) - (if (memv g939 - '(global)) - (list 'set! - (g233 g938) - g937) - (if (memv g939 - '(displaced-lexical)) - (syntax-error - (g393 g924 - g934) - '"identifier out of context") - (syntax-error - (g394 g935 - g934 - g933)))))) - (g232 g938))) - (g253 g936 g932))) - (g432 g925 g932 g934) - (g377 g924 g934))) - g918 - g917 - g915))) - (g232 g928))) - (g253 g927 g914))) - (g377 g924 g917))) - g920) - ((lambda (g940) - (syntax-error (g394 g918 g917 g915))) - g919))) - ($syntax-dispatch g919 '(any any any)))) - g918))) - (g434 - (lambda (g1622 g1618 g1621 g1619 g1620) - ((lambda (g1623) - ((lambda (g1624) - (if g1624 - (apply - (lambda (g1626 g1625) - (cons g1622 - (map (lambda (g1628) - (g432 g1628 g1621 g1619)) - g1625))) - g1624) - ((lambda (g1629) - (syntax-error (g394 g1618 g1619 g1620))) - g1623))) - ($syntax-dispatch g1623 '(any . each-any)))) - g1618))) - (g433 - (lambda (g946 g941 g945 g942 g944 g943) - ((lambda (g947) - (if (memv g947 '(lexical)) - g941 - (if (memv g947 '(core)) - (g941 g945 g942 g944 g943) - (if (memv g947 '(lexical-call)) - (g434 g941 g945 g942 g944 g943) - (if (memv g947 '(constant)) - (list 'quote - (g450 (g394 g945 g944 g943) '(()))) - (if (memv g947 '(global)) - g941 - (if (memv g947 '(call)) - (g434 (g432 (car g945) g942 g944) - g945 - g942 - g944 - g943) - (if (memv g947 '(begin-form)) - ((lambda (g948) - ((lambda (g949) - (if g949 - (apply - (lambda (g952 - g950 - g951) - (g395 (cons g950 - g951) - g942 - g944 - g943)) - g949) - (syntax-error - g948))) - ($syntax-dispatch - g948 - '(any any - . - each-any)))) - g945) - (if (memv g947 - '(local-syntax-form)) - (g445 g941 - g945 - g942 - g944 - g943 - g395) - (if (memv g947 - '(eval-when-form)) - ((lambda (g954) - ((lambda (g955) - (if g955 - (apply - (lambda (g959 - g956 - g958 - g957) - ((lambda (g960) - (if (memq 'eval - g960) - (g395 (cons g958 - g957) - g942 - g944 - g943) - (g446))) - (g397 g945 - g956 - g944))) - g955) - (syntax-error - g954))) - ($syntax-dispatch - g954 - '(any each-any - any - . - each-any)))) - g945) - (if (memv g947 - '(define-form - define-syntax-form - module-form - import-form)) - (syntax-error - (g394 g945 - g944 - g943) - '"invalid context for definition") - (if (memv g947 - '(syntax)) - (syntax-error - (g394 g945 - g944 - g943) - '"reference to pattern variable outside syntax form") - (if (memv g947 - '(displaced-lexical)) - (g250 (g394 g945 - g944 - g943)) - (syntax-error - (g394 g945 - g944 - g943))))))))))))))) - g946))) - (g432 - (lambda (g1612 g1610 g1611) - (call-with-values - (lambda () (g398 g1612 g1610 g1611 '#f '#f)) - (lambda (g1617 g1613 g1616 g1614 g1615) - (g433 g1617 g1613 g1616 g1610 g1614 g1615))))) - (g431 - (lambda (g965 g963 g964) - ((lambda (g966) - (if (memv g966 '(c)) - (if (memq 'compile g963) - ((lambda (g967) - (begin (g91 g967) - (if (memq 'load g963) g967 (g446)))) - (g964)) - (if (memq 'load g963) (g964) (g446))) - (if (memv g966 '(c&e)) - ((lambda (g968) (begin (g91 g968) g968)) (g964)) - (begin (if (memq 'eval g963) (g91 (g964)) (void)) - (g446))))) - g965))) - (g430 - (lambda (g1609 g1608) - (list '$sc-put-cte - (list 'quote g1609) - (list 'quote (g231 'do-import g1608))))) - (g429 - (lambda (g970 g969) - ((lambda (g971) - ((letrec ((g972 - (lambda (g973) - (if (not (= g973 g971)) - (begin (g970 (vector-ref g969 g973)) - (g972 (+ g973 '1))) - (void))))) - g972) - '0)) - (vector-length g969)))) - (g428 - (lambda (g1604 g1603) - ((letrec ((g1605 - (lambda (g1607 g1606) - (if (< g1607 '0) - g1606 - (g1605 - (- g1607 '1) - (cons (g1604 (vector-ref g1603 g1607)) - g1606)))))) - g1605) - (- (vector-length g1603) '1) - '()))) - (g427 - (lambda (g982 g974 g981 g975 g980 g976 g979 g977 g978) - (letrec ((g985 - (lambda (g1050 g1049) - ((lambda (g1051) - (map (lambda (g1052) - ((lambda (g1053) - (if (not (g392 g1053 g1051)) - g1052 - (g410 (g412 g1052) - g1053 - (g414 g1052) - (append - (g984 g1053) - (g415 g1052)) - (g416 g1052)))) - (g413 g1052))) - g1050)) - (map (lambda (g1054) - (if (pair? g1054) (car g1054) g1054)) - g1049)))) - (g984 - (lambda (g1043) - ((letrec ((g1044 - (lambda (g1045) - (if (null? g1045) - '() - (if (if (pair? (car g1045)) - (g388 g1043 - (caar g1045)) - '#f) - (g401 (cdar g1045)) - (g1044 (cdr g1045))))))) - g1044) - g980))) - (g983 - (lambda (g1048 g1046 g1047) - (begin (g426 g974 g1046) - (g425 g974 g976 g1046) - (g978 g1048 g1047))))) - ((letrec ((g986 - (lambda (g990 g987 g989 g988) - (if (null? g990) - (g983 g989 g987 g988) - ((lambda (g992 g991) - (call-with-values - (lambda () - (g398 g992 g991 '(()) '#f g982)) - (lambda (g997 g993 g996 g994 g995) - ((lambda (g998) - (if (memv g998 '(define-form)) - (g442 g996 - g994 - g995 - (lambda (g1001 - g999 - g1000) - ((lambda (g1002) - ((lambda (g1003) - ((lambda (g1004) - ((lambda () - (begin (g363 g982 - g1002 - g1003) - (g986 (cdr g990) - (cons g1002 - g987) - (cons (g410 g997 - g1002 - g1003 - g1004 - (cons g991 - (g393 g999 - g1000))) - g989) - g988))))) - (g984 g1002))) - (g300))) - (g393 g1001 - g1000)))) - (if (memv g998 - '(define-syntax-form)) - (g443 g996 - g994 - g995 - (lambda (g1007 - g1005 - g1006) - ((lambda (g1008) - ((lambda (g1009) - ((lambda (g1010) - ((lambda (g1011) - ((lambda () - (begin (g424 g975 - (g302 g1009) - (cons 'deferred - g1011)) - (g363 g982 - g1008 - g1009) - (g986 (cdr g990) - (cons g1008 - g987) - (cons (g410 g997 - g1008 - g1009 - g1010 - g1011) - g989) - g988))))) - (g432 g1005 - (g249 g991) - g1006))) - (g984 g1008))) - (g300))) - (g393 g1007 - g1006)))) - (if (memv g998 - '(module-form)) - ((lambda (g1012) - ((lambda (g1013) - ((lambda () - (g440 g996 - g994 - g995 - g1013 - (lambda (g1016 - g1014 - g1015) - (g427 g1012 - (g394 g996 - g994 - g995) - (map (lambda (g1024) - (cons g991 - g1024)) - g1015) - g975 - g1014 - (g401 g1014) - g979 - g977 - (lambda (g1018 - g1017) - ((lambda (g1019) - ((lambda (g1020) - ((lambda (g1021) - ((lambda () - (if g1016 - ((lambda (g1023 - g1022) - (begin (g424 g975 - (g302 g1023) - (g231 'module - g1019)) - (g363 g982 - g1016 - g1023) - (g986 (cdr g990) - (cons g1016 - g987) - (cons (g410 g997 - g1016 - g1023 - g1022 - g1014) - g1020) - g1021))) - (g300) - (g984 g1016)) - ((lambda () - (begin (g439 g1019 - g982) - (g986 (cdr g990) - (cons g1019 - g987) - g1020 - g1021)))))))) - (append - g988 - g1017))) - (append - (if g1016 - g1018 - (g985 g1018 - g1014)) - g989))) - (g408 g1014))))))))) - (g263 (g264 g994) - (cons g1012 - (g265 g994))))) - (g304 '() - '() - '())) - (if (memv g998 - '(import-form)) - (g441 g996 - g994 - g995 - (lambda (g1025) - ((lambda (g1026) - ((lambda (g1027) - ((lambda (g1028) - (if (memv g1028 - '(module)) - ((lambda (g1029) - (begin (if g993 - (g364 g982 - g993) - (void)) - (g439 g1029 - g982) - (g986 (cdr g990) - (cons g1029 - g987) - (g985 g989 - (vector->list - (g404 g1029))) - g988))) - (g233 g1027)) - (if (memv g1028 - '(displaced-lexical)) - (g250 g1025) - (syntax-error - g1025 - '"import from unknown module")))) - (g232 g1027))) - (g253 g1026 - g975))) - (g377 g1025 - '(()))))) - (if (memv g998 - '(begin-form)) - ((lambda (g1030) - ((lambda (g1031) - (if g1031 - (apply - (lambda (g1033 - g1032) - (g986 ((letrec ((g1034 - (lambda (g1035) - (if (null? - g1035) - (cdr g990) - (cons (cons g991 - (g393 (car g1035) - g994)) - (g1034 - (cdr g1035))))))) - g1034) - g1032) - g987 - g989 - g988)) - g1031) - (syntax-error - g1030))) - ($syntax-dispatch - g1030 - '(any . - each-any)))) - g996) - (if (memv g998 - '(local-syntax-form)) - (g445 g993 - g996 - g991 - g994 - g995 - (lambda (g1040 - g1037 - g1039 - g1038) - (g986 ((letrec ((g1041 - (lambda (g1042) - (if (null? - g1042) - (cdr g990) - (cons (cons g1037 - (g393 (car g1042) - g1039)) - (g1041 - (cdr g1042))))))) - g1041) - g1040) - g987 - g989 - g988))) - (g983 g989 - g987 - (append - g988 - (cons (cons g991 - (g394 g996 - g994 - g995)) - (cdr g990))))))))))) - g997)))) - (cdar g990) - (caar g990)))))) - g986) - g981 - '() - '() - '())))) - (g426 - (lambda (g1560 g1559) - (letrec ((g1564 - (lambda (g1597 g1595 g1596) - ((lambda (g1598) - (if g1598 - (if (g367 ((lambda (g1599) - ((lambda (g1600) - (if (g90 g1600) - (annotation-expression - g1600) - g1600)) - (if (g204 g1599) - (g205 g1599) - g1599))) - g1597) - g1598 - (if (symbol? g1597) - (g264 '((top))) - (g264 (g206 g1597)))) - (cons g1597 g1596) - g1596) - (g1562 - (g404 g1595) - (lambda (g1602 g1601) - (if (g1561 g1602 g1597) - (cons g1602 g1601) - g1601)) - g1596))) - (g405 g1595)))) - (g1563 - (lambda (g1575 g1573 g1574) - (if (g403 g1575) - (if (g403 g1573) - (call-with-values - (lambda () - ((lambda (g1581 g1580) - (if (fx> (vector-length g1581) - (vector-length g1580)) - (values g1575 g1580) - (values g1573 g1581))) - (g404 g1575) - (g404 g1573))) - (lambda (g1577 g1576) - (g1562 - g1576 - (lambda (g1579 g1578) - (g1564 g1579 g1577 g1578)) - g1574))) - (g1564 g1573 g1575 g1574)) - (if (g403 g1573) - (g1564 g1575 g1573 g1574) - (if (g1561 g1575 g1573) - (cons g1575 g1574) - g1574))))) - (g1562 - (lambda (g1590 g1588 g1589) - ((lambda (g1591) - ((letrec ((g1592 - (lambda (g1594 g1593) - (if (= g1594 g1591) - g1593 - (g1592 - (+ g1594 '1) - (g1588 - (vector-ref g1590 g1594) - g1593)))))) - g1592) - '0 - g1589)) - (vector-length g1590)))) - (g1561 - (lambda (g1583 g1582) - (if (symbol? g1583) - (if (symbol? g1582) - (eq? g1583 g1582) - (if (eq? g1583 - ((lambda (g1584) - ((lambda (g1585) - (if (g90 g1585) - (annotation-expression - g1585) - g1585)) - (if (g204 g1584) - (g205 g1584) - g1584))) - g1582)) - (g373 (g264 (g206 g1582)) - (g264 '((top)))) - '#f)) - (if (symbol? g1582) - (if (eq? g1582 - ((lambda (g1586) - ((lambda (g1587) - (if (g90 g1587) - (annotation-expression - g1587) - g1587)) - (if (g204 g1586) - (g205 g1586) - g1586))) - g1583)) - (g373 (g264 (g206 g1583)) - (g264 '((top)))) - '#f) - (g388 g1583 g1582)))))) - (if (not (null? g1559)) - ((letrec ((g1565 - (lambda (g1568 g1566 g1567) - (if (null? g1566) - (if (not (null? g1567)) - ((lambda (g1569) - (syntax-error - g1560 - '"duplicate definition for " - (symbol->string (car g1569)) - '" in")) - (syntax-object->datum g1567)) - (void)) - ((letrec ((g1570 - (lambda (g1572 g1571) - (if (null? g1572) - (g1565 - (car g1566) - (cdr g1566) - g1571) - (g1570 - (cdr g1572) - (g1563 - g1568 - (car g1572) - g1571)))))) - g1570) - g1566 - g1567))))) - g1565) - (car g1559) - (cdr g1559) - '()) - (void))))) - (g425 - (lambda (g1057 g1055 g1056) - (letrec ((g1058 - (lambda (g1065 g1064) - (ormap - (lambda (g1066) - (if (g403 g1066) - ((lambda (g1067) - (if g1067 - (g367 ((lambda (g1068) - ((lambda (g1069) - (if (g90 g1069) - (annotation-expression - g1069) - g1069)) - (if (g204 g1068) - (g205 g1068) - g1068))) - g1065) - g1067 - (g264 (g206 g1065))) - ((lambda (g1070) - ((letrec ((g1071 - (lambda (g1072) - (if (fx>= g1072 - '0) - ((lambda (g1073) - (if g1073 - g1073 - (g1071 - (- g1072 - '1)))) - (g388 g1065 - (vector-ref - g1070 - g1072))) - '#f)))) - g1071) - (- (vector-length g1070) - '1))) - (g404 g1066)))) - (g405 g1066)) - (g388 g1065 g1066))) - g1064)))) - ((letrec ((g1059 - (lambda (g1061 g1060) - (if (null? g1061) - (if (not (null? g1060)) - (syntax-error - g1060 - '"missing definition for export(s)") - (void)) - ((lambda (g1063 g1062) - (if (g1058 g1063 g1056) - (g1059 g1062 g1060) - (g1059 g1062 (cons g1063 g1060)))) - (car g1061) - (cdr g1061)))))) - g1059) - g1055 - '())))) - (g424 - (lambda (g1558 g1556 g1557) - (set-cdr! g1558 (g246 g1556 g1557 (cdr g1558))))) - (g423 - (lambda (g1075 g1074) - (if (null? g1075) - '() - (if (g392 (car g1075) g1074) - (g423 (cdr g1075) g1074) - (cons (car g1075) (g423 (cdr g1075) g1074)))))) - (g422 - (lambda (g1491 - g1482 - g1490 - g1483 - g1489 - g1484 - g1488 - g1485 - g1487 - g1486) - ((lambda (g1492) - (g427 g1490 - (g394 g1491 g1483 g1489) - (map (lambda (g1555) (cons g1482 g1555)) g1486) - g1482 - g1487 - g1492 - g1484 - g1488 - (lambda (g1494 g1493) - ((letrec ((g1495 - (lambda (g1500 - g1496 - g1499 - g1497 - g1498) - (if (null? g1500) - ((letrec ((g1501 - (lambda (g1504 - g1502 - g1503) - (if (null? g1504) - ((lambda (g1507 - g1505 - g1506) - (begin (for-each - (lambda (g1523) - (apply - (lambda (g1527 - g1524 - g1526 - g1525) - (if g1524 - (g303 g1524 - g1526) - (void))) - g1523)) - g1498) - (g190 '#f - (list (g431 g1484 - g1488 - (lambda () - (if (null? - g1498) - (g446) - (g190 '#f - (map (lambda (g1518) - (apply - (lambda (g1522 - g1519 - g1521 - g1520) - (list '$sc-put-cte - (list 'quote - g1521) - (if (eq? g1522 - 'define-syntax-form) - g1520 - (list 'quote - (g231 'module - (g409 g1520 - g1521)))))) - g1518)) - g1498))))) - (g431 g1484 - g1488 - (lambda () - ((lambda (g1508) - ((lambda (g1509) - ((lambda (g1510) - ((lambda () - (if g1508 - (list '$sc-put-cte - (list 'quote - (if (g373 (g264 (g206 g1485)) - (g264 '((top)))) - g1508 - ((lambda (g1511) - (g203 g1508 - (g263 g1511 - (list (g304 (vector - g1508) - (vector - g1511) - (vector - (g101 g1508))))))) - (g264 (g206 g1485))))) - g1510) - ((lambda (g1512) - (g190 '#f - (list (list '$sc-put-cte - (list 'quote - g1512) - g1510) - (g430 g1512 - g1509)))) - (g101 'tmp)))))) - (list 'quote - (g231 'module - (g409 g1487 - g1509))))) - (g101 g1508))) - (if g1485 - ((lambda (g1513) - ((lambda (g1514) - (if (g90 g1514) - (annotation-expression - g1514) - g1514)) - (if (g204 g1513) - (g205 g1513) - g1513))) - g1485) - '#f)))) - (g190 '#f - (map (lambda (g1517) - (list 'define - g1517 - (g446))) - g1499)) - (g191 '#f - g1502 - g1505 - (g190 '#f - (list (if (null? - g1499) - (g446) - (g190 '#f - (map (lambda (g1516 - g1515) - (list 'set! - g1516 - g1515)) - g1499 - g1507))) - (if (null? - g1506) - (g446) - (g190 '#f - g1506))))) - (g446))))) - (map (lambda (g1530) - (g432 (cdr g1530) - (car g1530) - '(()))) - g1497) - (map (lambda (g1528) - (g432 (cdr g1528) - (car g1528) - '(()))) - g1503) - (map (lambda (g1529) - (g432 (cdr g1529) - (car g1529) - '(()))) - g1493)) - ((lambda (g1531) - ((lambda (g1532) - (if (memv g1532 - '(define-form)) - ((lambda (g1533) - (begin (g424 g1482 - (g302 (g414 g1531)) - (g231 'lexical - g1533)) - (g1501 - (cdr g1504) - (cons g1533 - g1502) - (cons (g416 g1531) - g1503)))) - (g451 (g413 g1531))) - (if (memv g1532 - '(define-syntax-form - module-form)) - (g1501 - (cdr g1504) - g1502 - g1503) - (error 'sc-expand-internal - '"unexpected module binding type")))) - (g412 g1531))) - (car g1504)))))) - g1501) - g1496 - '() - '()) - ((lambda (g1535 g1534) - (letrec ((g1536 - (lambda (g1551 - g1548 - g1550 - g1549) - ((letrec ((g1552 - (lambda (g1554 - g1553) - (if (null? - g1554) - (g1549) - (if (g388 (g413 (car g1554)) - g1551) - (g1550 - (car g1554) - (g370 (reverse - g1553) - (cdr g1554))) - (g1552 - (cdr g1554) - (cons (car g1554) - g1553))))))) - g1552) - g1548 - '())))) - (g1536 - g1535 - g1496 - (lambda (g1538 g1537) - ((lambda (g1541 - g1539 - g1540) - ((lambda (g1543 - g1542) - ((lambda (g1544) - (if (memv g1544 - '(define-form)) - (begin (g303 g1539 - g1542) - (g1495 - g1543 - g1537 - (cons g1542 - g1499) - (cons (g416 g1538) - g1497) - g1498)) - (if (memv g1544 - '(define-syntax-form)) - (g1495 - g1543 - g1537 - g1499 - g1497 - (cons (list g1541 - g1539 - g1542 - (g416 g1538)) - g1498)) - (if (memv g1544 - '(module-form)) - ((lambda (g1545) - (g1495 - (append - (g401 g1545) - g1543) - g1537 - g1499 - g1497 - (cons (list g1541 - g1539 - g1542 - g1545) - g1498))) - (g416 g1538)) - (error 'sc-expand-internal - '"unexpected module binding type"))))) - g1541)) - (append - g1540 - g1534) - (g101 ((lambda (g1546) - ((lambda (g1547) - (if (g90 g1547) - (annotation-expression - g1547) - g1547)) - (if (g204 g1546) - (g205 g1546) - g1546))) - g1535)))) - (g412 g1538) - (g414 g1538) - (g415 g1538))) - (lambda () - (g1495 - g1534 - g1496 - g1499 - g1497 - g1498))))) - (car g1500) - (cdr g1500)))))) - g1495) - g1492 - g1494 - '() - '() - '())))) - (g401 g1487)))) - (g421 (lambda (g1077 g1076) (vector-set! g1077 '5 g1076))) - (g420 (lambda (g1481 g1480) (vector-set! g1481 '4 g1480))) - (g419 (lambda (g1079 g1078) (vector-set! g1079 '3 g1078))) - (g418 (lambda (g1479 g1478) (vector-set! g1479 '2 g1478))) - (g417 (lambda (g1081 g1080) (vector-set! g1081 '1 g1080))) - (g416 (lambda (g1477) (vector-ref g1477 '5))) - (g415 (lambda (g1082) (vector-ref g1082 '4))) - (g414 (lambda (g1476) (vector-ref g1476 '3))) - (g413 (lambda (g1083) (vector-ref g1083 '2))) - (g412 (lambda (g1475) (vector-ref g1475 '1))) - (g411 - (lambda (g1084) - (if (vector? g1084) - (if (= (vector-length g1084) '6) - (eq? (vector-ref g1084 '0) 'module-binding) - '#f) - '#f))) - (g410 - (lambda (g1474 g1470 g1473 g1471 g1472) - (vector 'module-binding g1474 g1470 g1473 g1471 g1472))) - (g409 - (lambda (g1086 g1085) - (g402 (list->vector - (map (lambda (g1087) - (g369 (if (pair? g1087) (car g1087) g1087))) - g1086)) - g1085))) - (g408 - (lambda (g1468) - (g402 (list->vector - (map (lambda (g1469) - (if (pair? g1469) (car g1469) g1469)) - g1468)) - '#f))) - (g407 (lambda (g1089 g1088) (vector-set! g1089 '2 g1088))) - (g406 (lambda (g1467 g1466) (vector-set! g1467 '1 g1466))) - (g405 (lambda (g1090) (vector-ref g1090 '2))) - (g404 (lambda (g1465) (vector-ref g1465 '1))) - (g403 - (lambda (g1091) - (if (vector? g1091) - (if (= (vector-length g1091) '3) - (eq? (vector-ref g1091 '0) 'interface) - '#f) - '#f))) - (g402 - (lambda (g1464 g1463) (vector 'interface g1464 g1463))) - (g401 - (lambda (g1092) - ((letrec ((g1093 - (lambda (g1095 g1094) - (if (null? g1095) - g1094 - (g1093 - (cdr g1095) - (if (pair? (car g1095)) - (g1093 (car g1095) g1094) - (cons (car g1095) g1094))))))) - g1093) - g1092 - '()))) - (g400 - (lambda (g1390 g1385 g1389 g1386 g1388 g1387) - (call-with-values - (lambda () (g398 g1390 g1385 g1389 '#f g1387)) - (lambda (g1401 g1397 g1400 g1398 g1399) - ((lambda (g1402) - (if (memv g1402 '(begin-form)) - ((lambda (g1403) - ((lambda (g1404) - (if g1404 - (apply (lambda (g1405) (g446)) g1404) - ((lambda (g1406) - (if g1406 - (apply - (lambda (g1409 g1407 g1408) - (g396 (cons g1407 g1408) - g1385 - g1398 - g1399 - g1386 - g1388 - g1387)) - g1406) - (syntax-error g1403))) - ($syntax-dispatch - g1403 - '(any any . each-any))))) - ($syntax-dispatch g1403 '(any)))) - g1400) - (if (memv g1402 '(local-syntax-form)) - (g445 g1397 - g1400 - g1385 - g1398 - g1399 - (lambda (g1414 g1411 g1413 g1412) - (g396 g1414 - g1411 - g1413 - g1412 - g1386 - g1388 - g1387))) - (if (memv g1402 '(eval-when-form)) - ((lambda (g1415) - ((lambda (g1416) - (if g1416 - (apply - (lambda (g1420 - g1417 - g1419 - g1418) - ((lambda (g1422 g1421) - (if (eq? g1386 'e) - (if (memq 'eval - g1422) - (g396 g1421 - g1385 - g1398 - g1399 - 'e - '(eval) - g1387) - (g446)) - (if (memq 'load - g1422) - (if ((lambda (g1423) - (if g1423 - g1423 - (if (eq? g1386 - 'c&e) - (memq 'eval - g1422) - '#f))) - (memq 'compile - g1422)) - (g396 g1421 - g1385 - g1398 - g1399 - 'c&e - '(compile - load) - g1387) - (if (memq g1386 - '(c c&e)) - (g396 g1421 - g1385 - g1398 - g1399 - 'c - '(load) - g1387) - (g446))) - (if ((lambda (g1424) - (if g1424 - g1424 - (if (eq? g1386 - 'c&e) - (memq 'eval - g1422) - '#f))) - (memq 'compile - g1422)) - (begin (g91 (g396 g1421 - g1385 - g1398 - g1399 - 'e - '(eval) - g1387)) - (g446)) - (g446))))) - (g397 g1400 g1417 g1398) - (cons g1419 g1418))) - g1416) - (syntax-error g1415))) - ($syntax-dispatch - g1415 - '(any each-any any . each-any)))) - g1400) - (if (memv g1402 '(define-syntax-form)) - (g443 g1400 - g1398 - g1399 - (lambda (g1429 g1427 g1428) - ((lambda (g1430) - (begin ((lambda (g1435) - ((lambda (g1436) - ((lambda (g1437) - (if (memv g1437 - '(displaced-lexical)) - (g250 g1430) - (void))) - (g232 g1436))) - (g253 g1435 - g1385))) - (g377 g1430 - '(()))) - (g431 g1386 - g1388 - (lambda () - (list '$sc-put-cte - (list 'quote - ((lambda (g1431) - (if (g373 (g264 (g206 g1430)) - (g264 '((top)))) - g1431 - ((lambda (g1432) - (g203 g1431 - (g263 g1432 - (list (g304 (vector - g1431) - (vector - g1432) - (vector - (g101 g1431))))))) - (g264 (g206 g1430))))) - ((lambda (g1433) - ((lambda (g1434) - (if (g90 g1434) - (annotation-expression - g1434) - g1434)) - (if (g204 g1433) - (g205 g1433) - g1433))) - g1430))) - (g432 g1427 - (g249 g1385) - g1428)))))) - (g393 g1429 g1428)))) - (if (memv g1402 '(define-form)) - (g442 g1400 - g1398 - g1399 - (lambda (g1440 g1438 g1439) - ((lambda (g1441) - (begin ((lambda (g1448) - ((lambda (g1449) - ((lambda (g1450) - (if (memv g1450 - '(displaced-lexical)) - (g250 g1441) - (void))) - (g232 g1449))) - (g253 g1448 - g1385))) - (g377 g1441 - '(()))) - ((lambda (g1442) - ((lambda (g1443) - (g190 '#f - (list (g431 g1386 - g1388 - (lambda () - (list '$sc-put-cte - (list 'quote - (if (eq? g1442 - g1443) - g1442 - ((lambda (g1445) - (g203 g1442 - (g263 g1445 - (list (g304 (vector - g1442) - (vector - g1445) - (vector - g1443)))))) - (g264 (g206 g1441))))) - (list 'quote - (g231 'global - g1443))))) - ((lambda (g1444) - (begin (if (eq? g1386 - 'c&e) - (g91 g1444) - (void)) - g1444)) - (list 'define - g1443 - (g432 g1438 - g1385 - g1439)))))) - (if (g373 (g264 (g206 g1441)) - (g264 '((top)))) - g1442 - (g101 g1442)))) - ((lambda (g1446) - ((lambda (g1447) - (if (g90 g1447) - (annotation-expression - g1447) - g1447)) - (if (g204 g1446) - (g205 g1446) - g1446))) - g1441)))) - (g393 g1440 g1439)))) - (if (memv g1402 '(module-form)) - ((lambda (g1452 g1451) - (g440 g1400 - g1398 - g1399 - (g263 (g264 g1398) - (cons g1451 - (g265 g1398))) - (lambda (g1455 - g1453 - g1454) - (if g1455 - (begin ((lambda (g1456) - ((lambda (g1457) - ((lambda (g1458) - (if (memv g1458 - '(displaced-lexical)) - (g250 (g393 g1455 - g1398)) - (void))) - (g232 g1457))) - (g253 g1456 - g1452))) - (g377 g1455 - '(()))) - (g422 g1400 - g1452 - g1451 - g1398 - g1399 - g1386 - g1388 - g1455 - g1453 - g1454)) - (g422 g1400 - g1452 - g1451 - g1398 - g1399 - g1386 - g1388 - '#f - g1453 - g1454))))) - (cons '("top-level module placeholder" - placeholder) - g1385) - (g304 '() '() '())) - (if (memv g1402 - '(import-form)) - (g441 g1400 - g1398 - g1399 - (lambda (g1459) - (g431 g1386 - g1388 - (lambda () - (begin (if g1397 - (syntax-error - (g394 g1400 - g1398 - g1399) - '"not valid at top-level") - (void)) - ((lambda (g1460) - ((lambda (g1461) - (if (memv g1461 - '(module)) - (g430 g1459 - (g405 (g233 g1460))) - (if (memv g1461 - '(displaced-lexical)) - (g250 g1459) - (syntax-error - g1459 - '"import from unknown module")))) - (g232 g1460))) - (g253 (g377 g1459 - '(())) - '()))))))) - ((lambda (g1462) - (begin (if (eq? g1386 - 'c&e) - (g91 g1462) - (void)) - g1462)) - (g433 g1401 - g1397 - g1400 - g1385 - g1398 - g1399)))))))))) - g1401))))) - (g399 - (lambda (g1099 g1096 g1098 g1097) - (call-with-values - (lambda () (g398 g1099 g1096 g1098 '#f g1097)) - (lambda (g1104 g1100 g1103 g1101 g1102) - (g433 g1104 g1100 g1103 g1096 g1101 g1102))))) - (g398 - (lambda (g1370 g1366 g1369 g1367 g1368) - (if (symbol? g1370) - ((lambda (g1371) - ((lambda (g1372) - ((lambda (g1373) - ((lambda () - ((lambda (g1374) - (if (memv g1374 '(lexical)) - (values - g1373 - (g233 g1372) - g1370 - g1369 - g1367) - (if (memv g1374 '(global)) - (values - g1373 - (g233 g1372) - g1370 - g1369 - g1367) - (if (memv g1374 '(macro macro!)) - (g398 (g436 (g233 g1372) - g1370 - g1366 - g1369 - g1367 - g1368) - g1366 - '(()) - '#f - g1368) - (values - g1373 - (g233 g1372) - g1370 - g1369 - g1367))))) - g1373)))) - (g232 g1372))) - (g253 g1371 g1366))) - (g377 g1370 g1369)) - (if (pair? g1370) - ((lambda (g1375) - (if (g256 g1375) - ((lambda (g1376) - ((lambda (g1377) - ((lambda (g1378) - ((lambda () - ((lambda (g1379) - (if (memv g1379 '(lexical)) - (values - 'lexical-call - (g233 g1377) - g1370 - g1369 - g1367) - (if (memv g1379 - '(macro macro!)) - (g398 (g436 (g233 g1377) - g1370 - g1366 - g1369 - g1367 - g1368) - g1366 - '(()) - '#f - g1368) - (if (memv g1379 - '(core)) - (values - g1378 - (g233 g1377) - g1370 - g1369 - g1367) - (if (memv g1379 - '(local-syntax)) - (values - 'local-syntax-form - (g233 g1377) - g1370 - g1369 - g1367) - (if (memv g1379 - '(begin)) - (values - 'begin-form - '#f - g1370 - g1369 - g1367) - (if (memv g1379 - '(eval-when)) - (values - 'eval-when-form - '#f - g1370 - g1369 - g1367) - (if (memv g1379 - '(define)) - (values - 'define-form - '#f - g1370 - g1369 - g1367) - (if (memv g1379 - '(define-syntax)) - (values - 'define-syntax-form - '#f - g1370 - g1369 - g1367) - (if (memv g1379 - '(module-key)) - (values - 'module-form - '#f - g1370 - g1369 - g1367) - (if (memv g1379 - '(import)) - (values - 'import-form - (if (g233 g1377) - (g393 g1375 - g1369) - '#f) - g1370 - g1369 - g1367) - (if (memv g1379 - '(set!)) - (g435 g1370 - g1366 - g1369 - g1367 - g1368) - (values - 'call - '#f - g1370 - g1369 - g1367))))))))))))) - g1378)))) - (g232 g1377))) - (g253 g1376 g1366))) - (g377 g1375 g1369)) - (values 'call '#f g1370 g1369 g1367))) - (car g1370)) - (if (g204 g1370) - (g398 (g205 g1370) - g1366 - (g371 g1369 (g206 g1370)) - '#f - g1368) - (if (g90 g1370) - (g398 (annotation-expression g1370) - g1366 - g1369 - (annotation-source g1370) - g1368) - (if ((lambda (g1380) - ((lambda (g1381) - (if g1381 - g1381 - ((lambda (g1382) - (if g1382 - g1382 - ((lambda (g1383) - (if g1383 - g1383 - ((lambda (g1384) - (if g1384 - g1384 - (null? - g1380))) - (char? - g1380)))) - (string? g1380)))) - (number? g1380)))) - (boolean? g1380))) - g1370) - (values 'constant '#f g1370 g1369 g1367) - (values - 'other - '#f - g1370 - g1369 - g1367)))))))) - (g397 - (lambda (g1107 g1105 g1106) - ((letrec ((g1108 - (lambda (g1110 g1109) - (if (null? g1110) - g1109 - (g1108 - (cdr g1110) - (cons ((lambda (g1111) - (if (g378 g1111 - '#(syntax-object - compile - ((top) - #(ribcage - () - () - ()) - #(ribcage - () - () - ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - () - () - ()) - #(ribcage - #(when-list - situations) - #((top) (top)) - #("i" "i")) - #(ribcage - #(f) - #((top)) - #("i")) - #(ribcage - () - () - ()) - #(ribcage - () - () - ()) - #(ribcage - #(e when-list w) - #((top) - (top) - (top)) - #("i" "i" "i")) - #(ribcage - (lambda-var-list - gen-var - strip - strip* - strip-annotation - ellipsis? - chi-void - chi-local-syntax - chi-lambda-clause - parse-define-syntax - parse-define - parse-import - parse-module - do-import! - chi-internal - chi-body - chi-macro - chi-set! - chi-application - chi-expr - chi - ct-eval/residualize - do-top-import - vfor-each - vmap - chi-external - check-defined-ids - check-module-exports - extend-store! - id-set-diff - chi-top-module - set-module-binding-val! - set-module-binding-imps! - set-module-binding-label! - set-module-binding-id! - set-module-binding-type! - module-binding-val - module-binding-imps - module-binding-label - module-binding-id - module-binding-type - module-binding? - make-module-binding - make-resolved-interface - make-trimmed-interface - set-interface-token! - set-interface-exports! - interface-token - interface-exports - interface? - make-interface - flatten-exports - chi-top - chi-top-expr - syntax-type - chi-when-list - chi-top-sequence - chi-sequence - source-wrap - wrap - bound-id-member? - invalid-ids-error - distinct-bound-ids? - valid-bound-ids? - bound-id=? - literal-id=? - free-id=? - id-var-name - id-var-name-loc - id-var-name&marks - id-var-name-loc&marks - same-marks? - join-marks - join-wraps - smart-append - make-trimmed-syntax-object - make-binding-wrap - lookup-import-binding-name - extend-ribcage-subst! - extend-ribcage-barrier-help! - extend-ribcage-barrier! - extend-ribcage! - make-empty-ribcage - import-token-key - import-token? - make-import-token - barrier-marker - new-mark - anti-mark - the-anti-mark - only-top-marked? - top-marked? - top-wrap - empty-wrap - set-ribcage-labels! - set-ribcage-marks! - set-ribcage-symnames! - ribcage-labels - ribcage-marks - ribcage-symnames - ribcage? - make-ribcage - set-indirect-label! - get-indirect-label - indirect-label? - gen-indirect-label - gen-labels - label? - gen-label - make-rename - rename-marks - rename-new - rename-old - subst-rename? - wrap-subst - wrap-marks - make-wrap - id-sym-name&marks - id-sym-name - id? - nonsymbol-id? - global-extend - lookup - sanitize-binding - lookup* - displaced-lexical-error - transformer-env - extend-var-env* - extend-env* - extend-env - null-env - binding? - set-binding-value! - set-binding-type! - binding-value - binding-type - make-binding - arg-check - source-annotation - no-source - unannotate - set-syntax-object-wrap! - set-syntax-object-expression! - syntax-object-wrap - syntax-object-expression - syntax-object? - make-syntax-object - self-evaluating? - build-lexical-var - build-letrec - build-sequence - build-data - build-primref - build-lambda - build-cte-install - build-module-definition - build-global-definition - build-global-assignment - build-global-reference - build-lexical-assignment - build-lexical-reference - build-conditional - build-application - generate-id - get-import-binding - get-global-definition-hook - put-global-definition-hook - gensym-hook - error-hook - local-eval-hook - top-level-eval-hook - annotation? - fx< - fx= - fx- - fx+ - noexpand - define-structure - unless - when) - ((top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top)) - ("i" "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i")) - #(ribcage - ((import-token - . - *top*)) - () - ()) - #(ribcage - ((import-token - . - *top*)) - () - ())))) - 'compile - (if (g378 g1111 - '#(syntax-object - load - ((top) - #(ribcage - () - () - ()) - #(ribcage - () - () - ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - () - () - ()) - #(ribcage - #(when-list - situations) - #((top) - (top)) - #("i" "i")) - #(ribcage - #(f) - #((top)) - #("i")) - #(ribcage - () - () - ()) - #(ribcage - () - () - ()) - #(ribcage - #(e - when-list - w) - #((top) - (top) - (top)) - #("i" - "i" - "i")) - #(ribcage - (lambda-var-list - gen-var - strip - strip* - strip-annotation - ellipsis? - chi-void - chi-local-syntax - chi-lambda-clause - parse-define-syntax - parse-define - parse-import - parse-module - do-import! - chi-internal - chi-body - chi-macro - chi-set! - chi-application - chi-expr - chi - ct-eval/residualize - do-top-import - vfor-each - vmap - chi-external - check-defined-ids - check-module-exports - extend-store! - id-set-diff - chi-top-module - set-module-binding-val! - set-module-binding-imps! - set-module-binding-label! - set-module-binding-id! - set-module-binding-type! - module-binding-val - module-binding-imps - module-binding-label - module-binding-id - module-binding-type - module-binding? - make-module-binding - make-resolved-interface - make-trimmed-interface - set-interface-token! - set-interface-exports! - interface-token - interface-exports - interface? - make-interface - flatten-exports - chi-top - chi-top-expr - syntax-type - chi-when-list - chi-top-sequence - chi-sequence - source-wrap - wrap - bound-id-member? - invalid-ids-error - distinct-bound-ids? - valid-bound-ids? - bound-id=? - literal-id=? - free-id=? - id-var-name - id-var-name-loc - id-var-name&marks - id-var-name-loc&marks - same-marks? - join-marks - join-wraps - smart-append - make-trimmed-syntax-object - make-binding-wrap - lookup-import-binding-name - extend-ribcage-subst! - extend-ribcage-barrier-help! - extend-ribcage-barrier! - extend-ribcage! - make-empty-ribcage - import-token-key - import-token? - make-import-token - barrier-marker - new-mark - anti-mark - the-anti-mark - only-top-marked? - top-marked? - top-wrap - empty-wrap - set-ribcage-labels! - set-ribcage-marks! - set-ribcage-symnames! - ribcage-labels - ribcage-marks - ribcage-symnames - ribcage? - make-ribcage - set-indirect-label! - get-indirect-label - indirect-label? - gen-indirect-label - gen-labels - label? - gen-label - make-rename - rename-marks - rename-new - rename-old - subst-rename? - wrap-subst - wrap-marks - make-wrap - id-sym-name&marks - id-sym-name - id? - nonsymbol-id? - global-extend - lookup - sanitize-binding - lookup* - displaced-lexical-error - transformer-env - extend-var-env* - extend-env* - extend-env - null-env - binding? - set-binding-value! - set-binding-type! - binding-value - binding-type - make-binding - arg-check - source-annotation - no-source - unannotate - set-syntax-object-wrap! - set-syntax-object-expression! - syntax-object-wrap - syntax-object-expression - syntax-object? - make-syntax-object - self-evaluating? - build-lexical-var - build-letrec - build-sequence - build-data - build-primref - build-lambda - build-cte-install - build-module-definition - build-global-definition - build-global-assignment - build-global-reference - build-lexical-assignment - build-lexical-reference - build-conditional - build-application - generate-id - get-import-binding - get-global-definition-hook - put-global-definition-hook - gensym-hook - error-hook - local-eval-hook - top-level-eval-hook - annotation? - fx< - fx= - fx- - fx+ - noexpand - define-structure - unless - when) - ((top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top)) - ("i" "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i")) - #(ribcage - ((import-token - . - *top*)) - () - ()) - #(ribcage - ((import-token - . - *top*)) - () - ())))) - 'load - (if (g378 g1111 - '#(syntax-object - eval - ((top) - #(ribcage - () - () - ()) - #(ribcage - () - () - ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - () - () - ()) - #(ribcage - #(when-list - situations) - #((top) - (top)) - #("i" - "i")) - #(ribcage - #(f) - #((top)) - #("i")) - #(ribcage - () - () - ()) - #(ribcage - () - () - ()) - #(ribcage - #(e - when-list - w) - #((top) - (top) - (top)) - #("i" - "i" - "i")) - #(ribcage - (lambda-var-list - gen-var - strip - strip* - strip-annotation - ellipsis? - chi-void - chi-local-syntax - chi-lambda-clause - parse-define-syntax - parse-define - parse-import - parse-module - do-import! - chi-internal - chi-body - chi-macro - chi-set! - chi-application - chi-expr - chi - ct-eval/residualize - do-top-import - vfor-each - vmap - chi-external - check-defined-ids - check-module-exports - extend-store! - id-set-diff - chi-top-module - set-module-binding-val! - set-module-binding-imps! - set-module-binding-label! - set-module-binding-id! - set-module-binding-type! - module-binding-val - module-binding-imps - module-binding-label - module-binding-id - module-binding-type - module-binding? - make-module-binding - make-resolved-interface - make-trimmed-interface - set-interface-token! - set-interface-exports! - interface-token - interface-exports - interface? - make-interface - flatten-exports - chi-top - chi-top-expr - syntax-type - chi-when-list - chi-top-sequence - chi-sequence - source-wrap - wrap - bound-id-member? - invalid-ids-error - distinct-bound-ids? - valid-bound-ids? - bound-id=? - literal-id=? - free-id=? - id-var-name - id-var-name-loc - id-var-name&marks - id-var-name-loc&marks - same-marks? - join-marks - join-wraps - smart-append - make-trimmed-syntax-object - make-binding-wrap - lookup-import-binding-name - extend-ribcage-subst! - extend-ribcage-barrier-help! - extend-ribcage-barrier! - extend-ribcage! - make-empty-ribcage - import-token-key - import-token? - make-import-token - barrier-marker - new-mark - anti-mark - the-anti-mark - only-top-marked? - top-marked? - top-wrap - empty-wrap - set-ribcage-labels! - set-ribcage-marks! - set-ribcage-symnames! - ribcage-labels - ribcage-marks - ribcage-symnames - ribcage? - make-ribcage - set-indirect-label! - get-indirect-label - indirect-label? - gen-indirect-label - gen-labels - label? - gen-label - make-rename - rename-marks - rename-new - rename-old - subst-rename? - wrap-subst - wrap-marks - make-wrap - id-sym-name&marks - id-sym-name - id? - nonsymbol-id? - global-extend - lookup - sanitize-binding - lookup* - displaced-lexical-error - transformer-env - extend-var-env* - extend-env* - extend-env - null-env - binding? - set-binding-value! - set-binding-type! - binding-value - binding-type - make-binding - arg-check - source-annotation - no-source - unannotate - set-syntax-object-wrap! - set-syntax-object-expression! - syntax-object-wrap - syntax-object-expression - syntax-object? - make-syntax-object - self-evaluating? - build-lexical-var - build-letrec - build-sequence - build-data - build-primref - build-lambda - build-cte-install - build-module-definition - build-global-definition - build-global-assignment - build-global-reference - build-lexical-assignment - build-lexical-reference - build-conditional - build-application - generate-id - get-import-binding - get-global-definition-hook - put-global-definition-hook - gensym-hook - error-hook - local-eval-hook - top-level-eval-hook - annotation? - fx< - fx= - fx- - fx+ - noexpand - define-structure - unless - when) - ((top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top)) - ("i" "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i")) - #(ribcage - ((import-token - . - *top*)) - () - ()) - #(ribcage - ((import-token - . - *top*)) - () - ())))) - 'eval - (syntax-error - (g393 g1111 g1106) - '"invalid eval-when situation"))))) - (car g1110)) - g1109)))))) - g1108) - g1105 - '()))) - (g396 - (lambda (g1358 g1352 g1357 g1353 g1356 g1354 g1355) - (g190 g1353 - ((letrec ((g1359 - (lambda (g1364 g1360 g1363 g1361 g1362) - (if (null? g1364) - '() - ((lambda (g1365) - (cons g1365 - (g1359 - (cdr g1364) - g1360 - g1363 - g1361 - g1362))) - (g400 (car g1364) - g1360 - g1363 - g1361 - g1362 - g1355)))))) - g1359) - g1358 - g1352 - g1357 - g1356 - g1354)))) - (g395 - (lambda (g1115 g1112 g1114 g1113) - (g190 g1113 - ((letrec ((g1116 - (lambda (g1119 g1117 g1118) - (if (null? g1119) - '() - ((lambda (g1120) - (cons g1120 - (g1116 - (cdr g1119) - g1117 - g1118))) - (g432 (car g1119) g1117 g1118)))))) - g1116) - g1115 - g1112 - g1114)))) - (g394 - (lambda (g1351 g1349 g1350) - (g393 (if g1350 (make-annotation g1351 g1350 '#f) g1351) - g1349))) - (g393 - (lambda (g1122 g1121) - (if (if (null? (g264 g1121)) (null? (g265 g1121)) '#f) - g1122 - (if (g204 g1122) - (g203 (g205 g1122) (g371 g1121 (g206 g1122))) - (if (null? g1122) g1122 (g203 g1122 g1121)))))) - (g392 - (lambda (g1347 g1346) - (if (not (null? g1346)) - ((lambda (g1348) - (if g1348 g1348 (g392 g1347 (cdr g1346)))) - (g388 g1347 (car g1346))) - '#f))) - (g391 - (lambda (g1125 g1123 g1124) - ((letrec ((g1126 - (lambda (g1128 g1127) - (if (null? g1128) - (syntax-error g1123) - (if (g256 (car g1128)) - (if (g392 (car g1128) g1127) - (syntax-error - (car g1128) - '"duplicate " - g1124) - (g1126 - (cdr g1128) - (cons (car g1128) g1127))) - (syntax-error - (car g1128) - '"invalid " - g1124)))))) - g1126) - g1125 - '()))) - (g390 - (lambda (g1342) - ((letrec ((g1343 - (lambda (g1344) - ((lambda (g1345) - (if g1345 - g1345 - (if (not (g392 (car g1344) (cdr g1344))) - (g1343 (cdr g1344)) - '#f))) - (null? g1344))))) - g1343) - g1342))) - (g389 - (lambda (g1129) - (if ((letrec ((g1130 - (lambda (g1131) - ((lambda (g1132) - (if g1132 - g1132 - (if (g256 (car g1131)) - (g1130 (cdr g1131)) - '#f))) - (null? g1131))))) - g1130) - g1129) - (g390 g1129) - '#f))) - (g388 - (lambda (g1337 g1336) - (if (if (g204 g1337) (g204 g1336) '#f) - (if (eq? ((lambda (g1339) - (if (g90 g1339) - (annotation-expression g1339) - g1339)) - (g205 g1337)) - ((lambda (g1338) - (if (g90 g1338) - (annotation-expression g1338) - g1338)) - (g205 g1336))) - (g373 (g264 (g206 g1337)) (g264 (g206 g1336))) - '#f) - (eq? ((lambda (g1341) - (if (g90 g1341) - (annotation-expression g1341) - g1341)) - g1337) - ((lambda (g1340) - (if (g90 g1340) - (annotation-expression g1340) - g1340)) - g1336))))) - (g378 - (lambda (g1134 g1133) - (if (eq? ((lambda (g1137) - ((lambda (g1138) - (if (g90 g1138) - (annotation-expression g1138) - g1138)) - (if (g204 g1137) (g205 g1137) g1137))) - g1134) - ((lambda (g1135) - ((lambda (g1136) - (if (g90 g1136) - (annotation-expression g1136) - g1136)) - (if (g204 g1135) (g205 g1135) g1135))) - g1133)) - (eq? (g377 g1134 '(())) (g377 g1133 '(()))) - '#f))) - (g377 - (lambda (g1333 g1332) - (call-with-values - (lambda () (g374 g1333 g1332)) - (lambda (g1335 g1334) - (if (g301 g1335) (g302 g1335) g1335))))) - (g376 - (lambda (g1140 g1139) - (call-with-values - (lambda () (g374 g1140 g1139)) - (lambda (g1142 g1141) g1142)))) - (g375 - (lambda (g1329 g1328) - (call-with-values - (lambda () (g374 g1329 g1328)) - (lambda (g1331 g1330) - (values (if (g301 g1331) (g302 g1331) g1331) g1330))))) - (g374 - (lambda (g1144 g1143) - (letrec ((g1147 - (lambda (g1174 g1170 g1173 g1171 g1172) - ((lambda (g1175) - ((letrec ((g1176 - (lambda (g1177) - (if (= g1177 g1175) - (g1145 - g1174 - (cdr g1170) - g1173) - (if (if (eq? (vector-ref - g1171 - g1177) - g1174) - (g373 g1173 - (vector-ref - (g307 g1172) - g1177)) - '#f) - (values - (vector-ref - (g308 g1172) - g1177) - g1173) - (g1176 (+ g1177 '1))))))) - g1176) - '0)) - (vector-length g1171)))) - (g1146 - (lambda (g1159 g1155 g1158 g1156 g1157) - ((letrec ((g1160 - (lambda (g1162 g1161) - (if (null? g1162) - (g1145 g1159 (cdr g1155) g1158) - (if (if (eq? (car g1162) g1159) - (g373 g1158 - (list-ref - (g307 g1157) - g1161)) - '#f) - (values - (list-ref - (g308 g1157) - g1161) - g1158) - (if (g357 (car g1162)) - ((lambda (g1163) - (if g1163 - ((lambda (g1164) - (if (symbol? - g1164) - (values - g1164 - g1158) - (g375 g1164 - '(())))) - g1163) - (g1160 - (cdr g1162) - g1161))) - (g367 g1159 - (g358 (car g1162)) - g1158)) - (if (if (eq? (car g1162) - g354) - (g373 g1158 - (list-ref - (g307 g1157) - g1161)) - '#f) - (values '#f g1158) - (g1160 - (cdr g1162) - (+ g1161 - '1))))))))) - g1160) - g1156 - '0))) - (g1145 - (lambda (g1167 g1165 g1166) - (if (null? g1165) - (values g1167 g1166) - ((lambda (g1168) - (if (eq? g1168 'shift) - (g1145 g1167 (cdr g1165) (cdr g1166)) - ((lambda (g1169) - (if (vector? g1169) - (g1147 - g1167 - g1165 - g1166 - g1169 - g1168) - (g1146 - g1167 - g1165 - g1166 - g1169 - g1168))) - (g306 g1168)))) - (car g1165)))))) - (if (symbol? g1144) - (g1145 g1144 (g265 g1143) (g264 g1143)) - (if (g204 g1144) - ((lambda (g1149 g1148) - ((lambda (g1150) - (call-with-values - (lambda () - (g1145 g1149 (g265 g1143) g1150)) - (lambda (g1152 g1151) - (if (eq? g1152 g1149) - (g1145 g1149 (g265 g1148) g1151) - (values g1152 g1151))))) - (g372 (g264 g1143) (g264 g1148)))) - ((lambda (g1153) - (if (g90 g1153) - (annotation-expression g1153) - g1153)) - (g205 g1144)) - (g206 g1144)) - (if (g90 g1144) - (g1145 - ((lambda (g1154) - (if (g90 g1154) - (annotation-expression g1154) - g1154)) - g1144) - (g265 g1143) - (g264 g1143)) - (g93 'id-var-name '"invalid id" g1144))))))) - (g373 - (lambda (g1326 g1325) - ((lambda (g1327) - (if g1327 - g1327 - (if (not (null? g1326)) - (if (not (null? g1325)) - (if (eq? (car g1326) (car g1325)) - (g373 (cdr g1326) (cdr g1325)) - '#f) - '#f) - '#f))) - (eq? g1326 g1325)))) - (g372 (lambda (g1179 g1178) (g370 g1179 g1178))) - (g371 - (lambda (g1322 g1321) - ((lambda (g1324 g1323) - (if (null? g1324) - (if (null? g1323) - g1321 - (g263 (g264 g1321) (g370 g1323 (g265 g1321)))) - (g263 (g370 g1324 (g264 g1321)) - (g370 g1323 (g265 g1321))))) - (g264 g1322) - (g265 g1322)))) - (g370 - (lambda (g1181 g1180) - (if (null? g1180) g1181 (append g1181 g1180)))) - (g369 - (lambda (g1315) - (call-with-values - (lambda () (g375 g1315 '(()))) - (lambda (g1317 g1316) - (begin (if (not g1317) - (syntax-error - g1315 - '"identifier not visible for export") - (void)) - ((lambda (g1318) - (g203 g1318 - (g263 g1316 - (list (g304 (vector g1318) - (vector g1316) - (vector g1317)))))) - ((lambda (g1319) - ((lambda (g1320) - (if (g90 g1320) - (annotation-expression g1320) - g1320)) - (if (g204 g1319) (g205 g1319) g1319))) - g1315))))))) - (g368 - (lambda (g1184 g1182 g1183) - (if (null? g1184) - g1183 - (g263 (g264 g1183) - (cons ((lambda (g1185) - ((lambda (g1186) - ((lambda (g1188 g1187) - (begin ((letrec ((g1189 - (lambda (g1191 - g1190) - (if (not (null? - g1191)) - (call-with-values - (lambda () - (g262 (car g1191) - g1183)) - (lambda (g1193 - g1192) - (begin (vector-set! - g1188 - g1190 - g1193) - (vector-set! - g1187 - g1190 - g1192) - (g1189 - (cdr g1191) - (+ g1190 - '1))))) - (void))))) - g1189) - g1184 - '0) - (g304 g1188 g1187 g1185))) - (make-vector g1186) - (make-vector g1186))) - (vector-length g1185))) - (list->vector g1182)) - (g265 g1183)))))) - (g367 - (lambda (g1310 g1308 g1309) - ((lambda (g1311) - (if g1311 - ((letrec ((g1312 - (lambda (g1313) - (if (pair? g1313) - ((lambda (g1314) - (if g1314 - g1314 - (g1312 (cdr g1313)))) - (g1312 (car g1313))) - (if (g373 g1309 (g264 (g206 g1313))) - g1313 - '#f))))) - g1312) - g1311) - '#f)) - (g100 g1310 g1308)))) - (g366 - (lambda (g1195 g1194) - (g309 g1195 (cons (g356 g1194) (g306 g1195))))) - (g365 - (lambda (g1307 g1306) - (begin (g309 g1307 (cons g354 (g306 g1307))) - (g310 g1307 (cons (g264 g1306) (g307 g1307)))))) - (g364 (lambda (g1197 g1196) (g365 g1197 (g206 g1196)))) - (g363 - (lambda (g1304 g1302 g1303) - (begin (g309 g1304 - (cons ((lambda (g1305) - (if (g90 g1305) - (annotation-expression g1305) - g1305)) - (g205 g1302)) - (g306 g1304))) - (g310 g1304 (cons (g264 (g206 g1302)) (g307 g1304))) - (g311 g1304 (cons g1303 (g308 g1304)))))) - (g358 cdr) - (g357 - (lambda (g1301) - (if (pair? g1301) (eq? (car g1301) g355) '#f))) - (g356 (lambda (g1198) (cons g355 g1198))) - (g355 'import-token) - (g354 '#f) - (g349 - (lambda (g1300) - (g263 (cons '#f (g264 g1300)) (cons 'shift (g265 g1300))))) - (g311 (lambda (g1200 g1199) (vector-set! g1200 '3 g1199))) - (g310 (lambda (g1299 g1298) (vector-set! g1299 '2 g1298))) - (g309 (lambda (g1202 g1201) (vector-set! g1202 '1 g1201))) - (g308 (lambda (g1297) (vector-ref g1297 '3))) - (g307 (lambda (g1203) (vector-ref g1203 '2))) - (g306 (lambda (g1296) (vector-ref g1296 '1))) - (g305 - (lambda (g1204) - (if (vector? g1204) - (if (= (vector-length g1204) '4) - (eq? (vector-ref g1204 '0) 'ribcage) - '#f) - '#f))) - (g304 - (lambda (g1295 g1293 g1294) - (vector 'ribcage g1295 g1293 g1294))) - (g303 set-car!) - (g302 car) - (g301 pair?) - (g300 (lambda () (list (g297)))) - (g299 - (lambda (g1205) - (if (null? g1205) '() (cons (g297) (g299 (cdr g1205)))))) - (g298 - (lambda (g1290) - ((lambda (g1291) - (if g1291 - g1291 - ((lambda (g1292) (if g1292 g1292 (g301 g1290))) - (symbol? g1290)))) - (string? g1290)))) - (g297 (lambda () (string '#\i))) - (g265 cdr) - (g264 car) - (g263 cons) - (g262 - (lambda (g1207 g1206) - (if (g204 g1207) - (values - ((lambda (g1208) - (if (g90 g1208) - (annotation-expression g1208) - g1208)) - (g205 g1207)) - (g372 (g264 g1206) (g264 (g206 g1207)))) - (values - ((lambda (g1209) - (if (g90 g1209) - (annotation-expression g1209) - g1209)) - g1207) - (g264 g1206))))) - (g256 - (lambda (g1288) - (if (symbol? g1288) - '#t - (if (g204 g1288) - (symbol? - ((lambda (g1289) - (if (g90 g1289) - (annotation-expression g1289) - g1289)) - (g205 g1288))) - (if (g90 g1288) - (symbol? (annotation-expression g1288)) - '#f))))) - (g255 - (lambda (g1210) - (if (g204 g1210) - (symbol? - ((lambda (g1211) - (if (g90 g1211) - (annotation-expression g1211) - g1211)) - (g205 g1210))) - '#f))) - (g254 - (lambda (g1287 g1285 g1286) (g98 g1285 (g231 g1287 g1286)))) - (g253 - (lambda (g1213 g1212) - (letrec ((g1214 - (lambda (g1221 g1220) - (begin (g234 g1221 (g232 g1220)) - (g235 g1221 (g233 g1220)))))) - ((lambda (g1215) - ((lambda (g1216) - (if (memv g1216 '(deferred)) - (begin (g1214 - g1215 - ((lambda (g1217) - ((lambda (g1218) - (if g1218 - g1218 - (syntax-error - g1217 - '"invalid transformer"))) - (g252 g1217))) - (g92 (g233 g1215)))) - ((lambda (g1219) g1215) (g232 g1215))) - g1215)) - (g232 g1215))) - (g251 g1213 g1212))))) - (g252 - (lambda (g1283) - (if (procedure? g1283) - (g231 'macro g1283) - (if (g236 g1283) - ((lambda (g1284) - (if (memv g1284 '(core macro macro!)) - (if (procedure? (g233 g1283)) g1283 '#f) - (if (memv g1284 '(module)) - (if (g403 (g233 g1283)) g1283 '#f) - g1283))) - (g232 g1283)) - '#f)))) - (g251 - (lambda (g1223 g1222) - ((lambda (g1224) - (if g1224 - (cdr g1224) - (if (symbol? g1223) - ((lambda (g1225) - (if g1225 g1225 (g231 'global g1223))) - (g99 g1223)) - (g231 'displaced-lexical '#f)))) - (assq g1223 g1222)))) - (g250 - (lambda (g1282) - (syntax-error - g1282 - (if (g377 g1282 '(())) - '"identifier out of context" - '"identifier not visible")))) - (g249 - (lambda (g1226) - (if (null? g1226) - '() - ((lambda (g1227) - (if (eq? (cadr g1227) 'lexical) - (g249 (cdr g1226)) - (cons g1227 (g249 (cdr g1226))))) - (car g1226))))) - (g248 - (lambda (g1281 g1279 g1280) - (if (null? g1281) - g1280 - (g248 (cdr g1281) - (cdr g1279) - (g246 (car g1281) - (g231 'lexical (car g1279)) - g1280))))) - (g247 - (lambda (g1230 g1228 g1229) - (if (null? g1230) - g1229 - (g247 (cdr g1230) - (cdr g1228) - (g246 (car g1230) (car g1228) g1229))))) - (g246 - (lambda (g1278 g1276 g1277) - (cons (cons g1278 g1276) g1277))) - (g236 - (lambda (g1231) - (if (pair? g1231) (symbol? (car g1231)) '#f))) - (g235 set-cdr!) - (g234 set-car!) - (g233 cdr) - (g232 car) - (g231 (lambda (g1275 g1274) (cons g1275 g1274))) - (g223 - (lambda (g1232) - (if (g90 g1232) - (annotation-source g1232) - (if (g204 g1232) (g223 (g205 g1232)) '#f)))) - (g208 (lambda (g1273 g1272) (vector-set! g1273 '2 g1272))) - (g207 (lambda (g1234 g1233) (vector-set! g1234 '1 g1233))) - (g206 (lambda (g1271) (vector-ref g1271 '2))) - (g205 (lambda (g1235) (vector-ref g1235 '1))) - (g204 - (lambda (g1270) - (if (vector? g1270) - (if (= (vector-length g1270) '3) - (eq? (vector-ref g1270 '0) 'syntax-object) - '#f) - '#f))) - (g203 - (lambda (g1237 g1236) (vector 'syntax-object g1237 g1236))) - (g191 - (lambda (g1269 g1266 g1268 g1267) - (if (null? g1266) - g1267 - (list 'letrec (map list g1266 g1268) g1267)))) - (g190 - (lambda (g1239 g1238) - (if (null? (cdr g1238)) (car g1238) (cons 'begin g1238)))) - (g101 - ((lambda (g1251) - (letrec ((g1254 - (lambda (g1260) - ((letrec ((g1261 - (lambda (g1263 g1262) - (if (< g1263 g1251) - (list->string - (cons (g1253 g1263) g1262)) - ((lambda (g1265 g1264) - (g1261 - g1264 - (cons (g1253 g1265) - g1262))) - (modulo g1263 g1251) - (quotient g1263 g1251)))))) - g1261) - g1260 - '()))) - (g1253 - (lambda (g1259) (integer->char (+ g1259 '33)))) - (g1252 (lambda () '0))) - ((lambda (g1256 g1255) - (lambda (g1257) - (begin (set! g1255 (+ g1255 '1)) - ((lambda (g1258) g1258) - (string->symbol - (string-append - '"#" - g1256 - (g1254 g1255))))))) - (g1254 (g1252)) - '-1))) - (- '127 '32 '2))) - (g100 (lambda (g1241 g1240) (getprop g1241 g1240))) - (g99 (lambda (g1250) (getprop g1250 '*sc-expander*))) - (g98 (lambda (g1243 g1242) ($sc-put-cte g1243 g1242))) - (g93 - (lambda (g1249 g1247 g1248) - (error g1249 '"~a ~s" g1247 g1248))) - (g92 (lambda (g1244) (eval (list g53 g1244)))) - (g91 (lambda (g1246) (eval (list g53 g1246)))) - (g90 (lambda (g1245) '#f)) - (g53 '"noexpand")) - (begin (set! $sc-put-cte - (lambda (g802 g801) - (letrec ((g805 - (lambda (g831 g830) - ((lambda (g832) - (putprop g832 '*sc-expander* g830)) - (if (symbol? g831) g831 (g377 g831 '(())))))) - (g804 - (lambda (g815 g814) - (g429 (lambda (g816) (g803 g816 g814)) g815))) - (g803 - (lambda (g818 g817) - (letrec ((g820 - (lambda (g828 g827) - (if (pair? g827) - (if (g388 (car g827) g828) - (g820 g828 (cdr g827)) - (g819 (car g827) - (g820 g828 - (cdr g827)))) - (if ((lambda (g829) - (if g829 - g829 - (g388 g827 g828))) - (not g827)) - '#f - g827)))) - (g819 - (lambda (g826 g825) - (if (not g825) - g826 - (cons g826 g825))))) - ((lambda (g821) - ((lambda (g822) - (if (if (not g822) (symbol? g818) '#f) - (remprop g821 g817) - (putprop - g821 - g817 - (g819 g818 g822)))) - (g820 g818 (getprop g821 g817)))) - ((lambda (g823) - ((lambda (g824) - (if (g90 g824) - (annotation-expression g824) - g824)) - (if (g204 g823) (g205 g823) g823))) - g818)))))) - ((lambda (g806) - ((lambda (g807) - (if (memv g807 '(module)) - (begin ((lambda (g808) - (g804 (g404 g808) (g405 g808))) - (g233 g806)) - (g805 g802 g806)) - (if (memv g807 '(do-import)) - ((lambda (g809) - ((lambda (g810) - ((lambda (g811) - (if (memv g811 '(module)) - ((lambda (g812) - (begin (if (not (eq? (g405 g812) - g809)) - (syntax-error - g802 - '"import mismatch for module") - (void)) - (g804 (g404 g812) - '*top*))) - (g233 g810)) - (syntax-error - g802 - '"import from unknown module"))) - (g232 g810))) - (g253 (g377 g802 '(())) '()))) - (g233 g801)) - (g805 g802 g806)))) - (g232 g806))) - ((lambda (g813) - (if g813 - g813 - (error 'define-syntax - '"invalid transformer ~s" - g801))) - (g252 g801)))))) - (g254 'local-syntax 'letrec-syntax '#t) - (g254 'local-syntax 'let-syntax '#f) - (g254 'core - 'fluid-let-syntax - (lambda (g456 g453 g455 g454) - ((lambda (g457) - ((lambda (g458) - (if (if g458 - (apply - (lambda (g463 g459 g462 g460 g461) - (g389 g459)) - g458) - '#f) - (apply - (lambda (g469 g465 g468 g466 g467) - ((lambda (g470) - (begin (for-each - (lambda (g477 g476) - ((lambda (g478) - (if (memv g478 - '(displaced-lexical)) - (g250 (g393 g477 - g455)) - (void))) - (g232 (g253 g476 g453)))) - g465 - g470) - (g437 (cons g466 g467) - (g394 g456 g455 g454) - (g247 g470 - ((lambda (g471) - (map (lambda (g473) - (g231 'deferred - (g432 g473 - g471 - g455))) - g468)) - (g249 g453)) - g453) - g455))) - (map (lambda (g480) (g377 g480 g455)) - g465))) - g458) - ((lambda (g481) - (syntax-error (g394 g456 g455 g454))) - g457))) - ($syntax-dispatch - g457 - '(any #(each (any any)) any . each-any)))) - g456))) - (g254 'core - 'quote - (lambda (g795 g792 g794 g793) - ((lambda (g796) - ((lambda (g797) - (if g797 - (apply - (lambda (g799 g798) - (list 'quote (g450 g798 g794))) - g797) - ((lambda (g800) - (syntax-error (g394 g795 g794 g793))) - g796))) - ($syntax-dispatch g796 '(any any)))) - g795))) - (g254 'core - 'syntax - ((lambda () - (letrec ((g489 - (lambda (g584) - ((lambda (g585) - (if (memv g585 '(ref)) - (cadr g584) - (if (memv g585 '(primitive)) - (cadr g584) - (if (memv g585 '(quote)) - (list 'quote (cadr g584)) - (if (memv g585 '(lambda)) - (list 'lambda - (cadr g584) - (g489 (caddr - g584))) - (if (memv g585 '(map)) - ((lambda (g586) - (cons (if (= (length - g586) - '2) - 'map - 'map) - g586)) - (map g489 - (cdr g584))) - (cons (car g584) - (map g489 - (cdr g584))))))))) - (car g584)))) - (g488 - (lambda (g502) - (if (eq? (car g502) 'list) - (cons 'vector (cdr g502)) - (if (eq? (car g502) 'quote) - (list 'quote - (list->vector (cadr g502))) - (list 'list->vector g502))))) - (g487 - (lambda (g583 g582) - (if (equal? g582 ''()) - g583 - (list 'append g583 g582)))) - (g486 - (lambda (g504 g503) - ((lambda (g505) - (if (memv g505 '(quote)) - (if (eq? (car g504) 'quote) - (list 'quote - (cons (cadr g504) - (cadr g503))) - (if (eq? (cadr g503) '()) - (list 'list g504) - (list 'cons g504 g503))) - (if (memv g505 '(list)) - (cons 'list - (cons g504 (cdr g503))) - (list 'cons g504 g503)))) - (car g503)))) - (g485 - (lambda (g575 g574) - ((lambda (g577 g576) - (if (eq? (car g575) 'ref) - (car g576) - (if (andmap - (lambda (g578) - (if (eq? (car g578) 'ref) - (memq (cadr g578) g577) - '#f)) - (cdr g575)) - (cons 'map - (cons (list 'primitive - (car g575)) - (map ((lambda (g579) - (lambda (g580) - (cdr (assq (cadr g580) - g579)))) - (map cons - g577 - g576)) - (cdr g575)))) - (cons 'map - (cons (list 'lambda - g577 - g575) - g576))))) - (map cdr g574) - (map (lambda (g581) - (list 'ref (car g581))) - g574)))) - (g484 - (lambda (g507 g506) - (list 'apply - '(primitive append) - (g485 g507 g506)))) - (g483 - (lambda (g569 g566 g568 g567) - (if (= g568 '0) - (values g566 g567) - (if (null? g567) - (syntax-error - g569 - '"missing ellipsis in syntax form") - (call-with-values - (lambda () - (g483 g569 - g566 - (- g568 '1) - (cdr g567))) - (lambda (g571 g570) - ((lambda (g572) - (if g572 - (values - (cdr g572) - g567) - ((lambda (g573) - (values - g573 - (cons (cons (cons g571 - g573) - (car g567)) - g570))) - (g451 'tmp)))) - (assq g571 (car g567))))))))) - (g482 - (lambda (g512 g508 g511 g509 g510) - (if (g256 g508) - ((lambda (g513) - ((lambda (g514) - (if (eq? (g232 g514) 'syntax) - (call-with-values - (lambda () - ((lambda (g517) - (g483 g512 - (car g517) - (cdr g517) - g509)) - (g233 g514))) - (lambda (g516 g515) - (values - (list 'ref g516) - g515))) - (if (g510 g508) - (syntax-error - g512 - '"misplaced ellipsis in syntax form") - (values - (list 'quote g508) - g509)))) - (g253 g513 g511))) - (g377 g508 '(()))) - ((lambda (g518) - ((lambda (g519) - (if (if g519 - (apply - (lambda (g521 g520) - (g510 g521)) - g519) - '#f) - (apply - (lambda (g523 g522) - (g482 g512 - g522 - g511 - g509 - (lambda (g524) - '#f))) - g519) - ((lambda (g525) - (if (if g525 - (apply - (lambda (g528 - g526 - g527) - (g510 g526)) - g525) - '#f) - (apply - (lambda (g531 - g529 - g530) - ((letrec ((g532 - (lambda (g534 - g533) - ((lambda (g535) - ((lambda (g536) - (if (if g536 - (apply - (lambda (g538 - g537) - (g510 g538)) - g536) - '#f) - (apply - (lambda (g540 - g539) - (g532 g539 - (lambda (g541) - (call-with-values - (lambda () - (g533 (cons '() - g541))) - (lambda (g543 - g542) - (if (null? - (car g542)) - (syntax-error - g512 - '"extra ellipsis in syntax form") - (values - (g484 g543 - (car g542)) - (cdr g542)))))))) - g536) - ((lambda (g544) - (call-with-values - (lambda () - (g482 g512 - g534 - g511 - g509 - g510)) - (lambda (g546 - g545) - (call-with-values - (lambda () - (g533 g545)) - (lambda (g548 - g547) - (values - (g487 g548 - g546) - g547)))))) - g535))) - ($syntax-dispatch - g535 - '(any . - any)))) - g534)))) - g532) - g530 - (lambda (g549) - (call-with-values - (lambda () - (g482 g512 - g531 - g511 - (cons '() - g549) - g510)) - (lambda (g551 - g550) - (if (null? - (car g550)) - (syntax-error - g512 - '"extra ellipsis in syntax form") - (values - (g485 g551 - (car g550)) - (cdr g550)))))))) - g525) - ((lambda (g552) - (if g552 - (apply - (lambda (g554 - g553) - (call-with-values - (lambda () - (g482 g512 - g554 - g511 - g509 - g510)) - (lambda (g556 - g555) - (call-with-values - (lambda () - (g482 g512 - g553 - g511 - g555 - g510)) - (lambda (g558 - g557) - (values - (g486 g556 - g558) - g557)))))) - g552) - ((lambda (g559) - (if g559 - (apply - (lambda (g561 - g560) - (call-with-values - (lambda () - (g482 g512 - (cons g561 - g560) - g511 - g509 - g510)) - (lambda (g563 - g562) - (values - (g488 g563) - g562)))) - g559) - ((lambda (g565) - (values - (list 'quote - g508) - g509)) - g518))) - ($syntax-dispatch - g518 - '#(vector - (any . - each-any)))))) - ($syntax-dispatch - g518 - '(any . any))))) - ($syntax-dispatch - g518 - '(any any . any))))) - ($syntax-dispatch - g518 - '(any any)))) - g508))))) - (lambda (g493 g490 g492 g491) - ((lambda (g494) - ((lambda (g495) - ((lambda (g496) - (if g496 - (apply - (lambda (g498 g497) - (call-with-values - (lambda () - (g482 g494 - g497 - g490 - '() - g447)) - (lambda (g500 g499) - (g489 g500)))) - g496) - ((lambda (g501) (syntax-error g494)) - g495))) - ($syntax-dispatch g495 '(any any)))) - g494)) - (g394 g493 g492 g491))))))) - (g254 'core - 'lambda - (lambda (g785 g782 g784 g783) - ((lambda (g786) - ((lambda (g787) - (if g787 - (apply - (lambda (g789 g788) - (g444 (g394 g785 g784 g783) - g788 - g782 - g784 - (lambda (g791 g790) - (list 'lambda g791 g790)))) - g787) - (syntax-error g786))) - ($syntax-dispatch g786 '(any . any)))) - g785))) - (g254 'core - 'letrec - (lambda (g590 g587 g589 g588) - ((lambda (g591) - ((lambda (g592) - (if g592 - (apply - (lambda (g597 g593 g596 g594 g595) - ((lambda (g598) - (if (not (g389 g598)) - (g391 (map (lambda (g599) - (g393 g599 g589)) - g598) - (g394 g590 g589 g588) - '"bound variable") - ((lambda (g601 g600) - ((lambda (g603 g602) - (g191 g588 - g600 - (map (lambda (g606) - (g432 g606 - g602 - g603)) - g596) - (g437 (cons g594 g595) - (g394 g590 - g603 - g588) - g602 - g603))) - (g368 g598 g601 g589) - (g248 g601 g600 g587))) - (g299 g598) - (map g451 g598)))) - g593)) - g592) - ((lambda (g608) - (syntax-error (g394 g590 g589 g588))) - g591))) - ($syntax-dispatch - g591 - '(any #(each (any any)) any . each-any)))) - g590))) - (g254 'core - 'if - (lambda (g770 g767 g769 g768) - ((lambda (g771) - ((lambda (g772) - (if g772 - (apply - (lambda (g775 g773 g774) - (list 'if - (g432 g773 g767 g769) - (g432 g774 g767 g769) - (g446))) - g772) - ((lambda (g776) - (if g776 - (apply - (lambda (g780 g777 g779 g778) - (list 'if - (g432 g777 g767 g769) - (g432 g779 g767 g769) - (g432 g778 g767 g769))) - g776) - ((lambda (g781) - (syntax-error - (g394 g770 g769 g768))) - g771))) - ($syntax-dispatch - g771 - '(any any any any))))) - ($syntax-dispatch g771 '(any any any)))) - g770))) - (g254 'set! 'set! '()) - (g254 'begin 'begin '()) - (g254 'module-key 'module '()) - (g254 'import 'import '#f) - (g254 'import 'import-only '#t) - (g254 'define 'define '()) - (g254 'define-syntax 'define-syntax '()) - (g254 'eval-when 'eval-when '()) - (g254 'core - 'syntax-case - ((lambda () - (letrec ((g612 - (lambda (g693 g690 g692 g691) - (if (null? g692) - (list 'syntax-error g693) - ((lambda (g694) - ((lambda (g695) - (if g695 - (apply - (lambda (g697 g696) - (if (if (g256 g697) - (if (not (g392 g697 - g690)) - (not (g447 g697)) - '#f) - '#f) - ((lambda (g699 g698) - (list (list 'lambda - (list g698) - (g432 g696 - (g246 g699 - (g231 'syntax - (cons g698 - '0)) - g691) - (g368 (list g697) - (list g699) - '(())))) - g693)) - (g297) - (g451 g697)) - (g611 g693 - g690 - (cdr g692) - g691 - g697 - '#t - g696))) - g695) - ((lambda (g700) - (if g700 - (apply - (lambda (g703 - g701 - g702) - (g611 g693 - g690 - (cdr g692) - g691 - g703 - g701 - g702)) - g700) - ((lambda (g704) - (syntax-error - (car g692) - '"invalid syntax-case clause")) - g694))) - ($syntax-dispatch - g694 - '(any any any))))) - ($syntax-dispatch - g694 - '(any any)))) - (car g692))))) - (g611 - (lambda (g635 g629 g634 g630 g633 g631 g632) - (call-with-values - (lambda () (g609 g633 g629)) - (lambda (g637 g636) - (if (not (g390 (map car g636))) - (g391 (map car g636) - g633 - '"pattern variable") - (if (not (andmap - (lambda (g638) - (not (g447 (car g638)))) - g636)) - (syntax-error - g633 - '"misplaced ellipsis in syntax-case pattern") - ((lambda (g639) - (list (list 'lambda - (list g639) - (list 'if - ((lambda (g649) - ((lambda (g650) - (if g650 - (apply - (lambda () - g639) - g650) - ((lambda (g651) - (list 'if - g639 - (g610 g636 - g631 - g639 - g630) - (list 'quote - '#f))) - g649))) - ($syntax-dispatch - g649 - '#(atom - #t)))) - g631) - (g610 g636 - g632 - g639 - g630) - (g612 g635 - g629 - g634 - g630))) - (if (eq? g637 'any) - (list 'list g635) - (list '$syntax-dispatch - g635 - (list 'quote - g637))))) - (g451 'tmp)))))))) - (g610 - (lambda (g683 g680 g682 g681) - ((lambda (g685 g684) - ((lambda (g687 g686) - (list 'apply - (list 'lambda - g686 - (g432 g680 - (g247 g687 - (map (lambda (g689 - g688) - (g231 'syntax - (cons g689 - g688))) - g686 - (map cdr - g683)) - g681) - (g368 g685 - g687 - '(())))) - g682)) - (g299 g685) - (map g451 g685))) - (map car g683) - (map cdr g683)))) - (g609 - (lambda (g653 g652) - ((letrec ((g654 - (lambda (g657 g655 g656) - (if (g256 g657) - (if (g392 g657 g652) - (values - (vector - 'free-id - g657) - g656) - (values - 'any - (cons (cons g657 - g655) - g656))) - ((lambda (g658) - ((lambda (g659) - (if (if g659 - (apply - (lambda (g661 - g660) - (g447 g660)) - g659) - '#f) - (apply - (lambda (g663 - g662) - (call-with-values - (lambda () - (g654 g663 - (+ g655 - '1) - g656)) - (lambda (g665 - g664) - (values - (if (eq? g665 - 'any) - 'each-any - (vector - 'each - g665)) - g664)))) - g659) - ((lambda (g666) - (if g666 - (apply - (lambda (g668 - g667) - (call-with-values - (lambda () - (g654 g667 - g655 - g656)) - (lambda (g670 - g669) - (call-with-values - (lambda () - (g654 g668 - g655 - g669)) - (lambda (g672 - g671) - (values - (cons g672 - g670) - g671)))))) - g666) - ((lambda (g673) - (if g673 - (apply - (lambda () - (values - '() - g656)) - g673) - ((lambda (g674) - (if g674 - (apply - (lambda (g675) - (call-with-values - (lambda () - (g654 g675 - g655 - g656)) - (lambda (g677 - g676) - (values - (vector - 'vector - g677) - g676)))) - g674) - ((lambda (g679) - (values - (vector - 'atom - (g450 g657 - '(()))) - g656)) - g658))) - ($syntax-dispatch - g658 - '#(vector - each-any))))) - ($syntax-dispatch - g658 - '())))) - ($syntax-dispatch - g658 - '(any . - any))))) - ($syntax-dispatch - g658 - '(any any)))) - g657))))) - g654) - g653 - '0 - '())))) - (lambda (g616 g613 g615 g614) - ((lambda (g617) - ((lambda (g618) - ((lambda (g619) - (if g619 - (apply - (lambda (g623 g620 g622 g621) - (if (andmap - (lambda (g625) - (if (g256 g625) - (not (g447 g625)) - '#f)) - g622) - ((lambda (g626) - (list (list 'lambda - (list g626) - (g612 g626 - g622 - g621 - g613)) - (g432 g620 - g613 - '(())))) - (g451 'tmp)) - (syntax-error - g617 - '"invalid literals list in"))) - g619) - (syntax-error g618))) - ($syntax-dispatch - g618 - '(any any each-any . each-any)))) - g617)) - (g394 g616 g615 g614))))))) - (set! sc-expand - ((lambda (g763 g761 g762) - ((lambda (g764) - (lambda (g765) - (if (if (pair? g765) (equal? (car g765) g53) '#f) - (cadr g765) - (g400 g765 '() g764 g763 g761 g762)))) - (g263 (g264 '((top))) (cons g762 (g265 '((top))))))) - 'e - '(eval) - ((lambda (g766) (begin (g366 g766 '*top*) g766)) - (g304 '() '() '())))) - (set! identifier? (lambda (g705) (g255 g705))) - (set! datum->syntax-object - (lambda (g759 g758) - (begin ((lambda (g760) - (if (not (g255 g760)) - (g93 'datum->syntax-object - '"invalid argument" - g760) - (void))) - g759) - (g203 g758 (g206 g759))))) - (set! syntax-object->datum - (lambda (g706) (g450 g706 '(())))) - (set! generate-temporaries - (lambda (g755) - (begin ((lambda (g757) - (if (not (list? g757)) - (g93 'generate-temporaries - '"invalid argument" - g757) - (void))) - g755) - (map (lambda (g756) (g393 (gensym) '((top)))) - g755)))) - (set! free-identifier=? - (lambda (g708 g707) - (begin ((lambda (g710) - (if (not (g255 g710)) - (g93 'free-identifier=? - '"invalid argument" - g710) - (void))) - g708) - ((lambda (g709) - (if (not (g255 g709)) - (g93 'free-identifier=? - '"invalid argument" - g709) - (void))) - g707) - (g378 g708 g707)))) - (set! bound-identifier=? - (lambda (g752 g751) - (begin ((lambda (g754) - (if (not (g255 g754)) - (g93 'bound-identifier=? - '"invalid argument" - g754) - (void))) - g752) - ((lambda (g753) - (if (not (g255 g753)) - (g93 'bound-identifier=? - '"invalid argument" - g753) - (void))) - g751) - (g388 g752 g751)))) - (set! syntax-error - (lambda (g711 . g712) - (begin (for-each - (lambda (g714) - ((lambda (g715) - (if (not (string? g715)) - (g93 'syntax-error - '"invalid argument" - g715) - (void))) - g714)) - g712) - ((lambda (g713) (g93 '#f g713 (g450 g711 '(())))) - (if (null? g712) - '"invalid syntax" - (apply string-append g712)))))) - ((lambda () - (letrec ((g720 - (lambda (g748 g745 g747 g746) - (if (not g746) - '#f - (if (eq? g745 'any) - (cons (g393 g748 g747) g746) - (if (g204 g748) - (g719 ((lambda (g749) - (if (g90 g749) - (annotation-expression - g749) - g749)) - (g205 g748)) - g745 - (g371 g747 (g206 g748)) - g746) - (g719 ((lambda (g750) - (if (g90 g750) - (annotation-expression - g750) - g750)) - g748) - g745 - g747 - g746)))))) - (g719 - (lambda (g728 g725 g727 g726) - (if (null? g725) - (if (null? g728) g726 '#f) - (if (pair? g725) - (if (pair? g728) - (g720 (car g728) - (car g725) - g727 - (g720 (cdr g728) - (cdr g725) - g727 - g726)) - '#f) - (if (eq? g725 'each-any) - ((lambda (g729) - (if g729 (cons g729 g726) '#f)) - (g717 g728 g727)) - ((lambda (g730) - (if (memv g730 '(each)) - (if (null? g728) - (g718 (vector-ref - g725 - '1) - g726) - ((lambda (g731) - (if g731 - ((letrec ((g732 - (lambda (g733) - (if (null? - (car g733)) - g726 - (cons (map car - g733) - (g732 (map cdr - g733))))))) - g732) - g731) - '#f)) - (g716 g728 - (vector-ref - g725 - '1) - g727))) - (if (memv g730 '(free-id)) - (if (g256 g728) - (if (g378 (g393 g728 - g727) - (vector-ref - g725 - '1)) - g726 - '#f) - '#f) - (if (memv g730 '(atom)) - (if (equal? - (vector-ref - g725 - '1) - (g450 g728 - g727)) - g726 - '#f) - (if (memv g730 - '(vector)) - (if (vector? - g728) - (g720 (vector->list - g728) - (vector-ref - g725 - '1) - g727 - g726) - '#f) - (void)))))) - (vector-ref g725 '0))))))) - (g718 - (lambda (g743 g742) - (if (null? g743) - g742 - (if (eq? g743 'any) - (cons '() g742) - (if (pair? g743) - (g718 (car g743) - (g718 (cdr g743) g742)) - (if (eq? g743 'each-any) - (cons '() g742) - ((lambda (g744) - (if (memv g744 '(each)) - (g718 (vector-ref - g743 - '1) - g742) - (if (memv g744 - '(free-id - atom)) - g742 - (if (memv g744 - '(vector)) - (g718 (vector-ref - g743 - '1) - g742) - (void))))) - (vector-ref g743 '0)))))))) - (g717 - (lambda (g735 g734) - (if (g90 g735) - (g717 (annotation-expression g735) g734) - (if (pair? g735) - ((lambda (g736) - (if g736 - (cons (g393 (car g735) g734) - g736) - '#f)) - (g717 (cdr g735) g734)) - (if (null? g735) - '() - (if (g204 g735) - (g717 (g205 g735) - (g371 g734 (g206 g735))) - '#f)))))) - (g716 - (lambda (g739 g737 g738) - (if (g90 g739) - (g716 (annotation-expression g739) - g737 - g738) - (if (pair? g739) - ((lambda (g740) - (if g740 - ((lambda (g741) - (if g741 - (cons g740 g741) - '#f)) - (g716 (cdr g739) g737 g738)) - '#f)) - (g720 (car g739) g737 g738 '())) - (if (null? g739) - '() - (if (g204 g739) - (g716 (g205 g739) - g737 - (g371 g738 (g206 g739))) - '#f))))))) - (set! $syntax-dispatch - (lambda (g722 g721) - (if (eq? g721 'any) - (list g722) - (if (g204 g722) - (g719 ((lambda (g723) - (if (g90 g723) - (annotation-expression g723) - g723)) - (g205 g722)) - g721 - (g206 g722) - '()) - (g719 ((lambda (g724) - (if (g90 g724) - (annotation-expression g724) - g724)) - g722) - g721 - '(()) - '())))))))))))) -($sc-put-cte - 'with-syntax - (lambda (g1828) - ((lambda (g1829) - ((lambda (g1830) - (if g1830 - (apply - (lambda (g1833 g1831 g1832) - (cons '#(syntax-object - begin - ((top) - #(ribcage - #(_ e1 e2) - #((top) (top) (top)) - #("i" "i" "i")) - #(ribcage () () ()) - #(ribcage #(x) #((top)) #("i")) - #(ribcage ((import-token . *top*)) () ()))) - (cons g1831 g1832))) - g1830) - ((lambda (g1835) - (if g1835 - (apply - (lambda (g1840 g1836 g1839 g1837 g1838) - (list '#(syntax-object - syntax-case - ((top) - #(ribcage - #(_ out in e1 e2) - #((top) (top) (top) (top) (top)) - #("i" "i" "i" "i" "i")) - #(ribcage () () ()) - #(ribcage #(x) #((top)) #("i")) - #(ribcage - ((import-token . *top*)) - () - ()))) - g1839 - '() - (list g1836 - (cons '#(syntax-object - begin - ((top) - #(ribcage - #(_ out in e1 e2) - #((top) - (top) - (top) - (top) - (top)) - #("i" "i" "i" "i" "i")) - #(ribcage () () ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token . *top*)) - () - ()))) - (cons g1837 g1838))))) - g1835) - ((lambda (g1842) - (if g1842 - (apply - (lambda (g1847 g1843 g1846 g1844 g1845) - (list '#(syntax-object - syntax-case - ((top) - #(ribcage - #(_ out in e1 e2) - #((top) - (top) - (top) - (top) - (top)) - #("i" "i" "i" "i" "i")) - #(ribcage () () ()) - #(ribcage #(x) #((top)) #("i")) - #(ribcage - ((import-token . *top*)) - () - ()))) - (cons '#(syntax-object - list - ((top) - #(ribcage - #(_ out in e1 e2) - #((top) - (top) - (top) - (top) - (top)) - #("i" "i" "i" "i" "i")) - #(ribcage () () ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token . *top*)) - () - ()))) - g1846) - '() - (list g1843 - (cons '#(syntax-object - begin - ((top) - #(ribcage - #(_ out in e1 e2) - #((top) - (top) - (top) - (top) - (top)) - #("i" - "i" - "i" - "i" - "i")) - #(ribcage () () ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - (cons g1844 g1845))))) - g1842) - (syntax-error g1829))) - ($syntax-dispatch - g1829 - '(any #(each (any any)) any . each-any))))) - ($syntax-dispatch - g1829 - '(any ((any any)) any . each-any))))) - ($syntax-dispatch g1829 '(any () any . each-any)))) - g1828))) -($sc-put-cte - 'syntax-rules - (lambda (g1851) - ((lambda (g1852) - ((lambda (g1853) - (if g1853 - (apply - (lambda (g1858 g1854 g1857 g1855 g1856) - (list '#(syntax-object - lambda - ((top) - #(ribcage - #(_ k keyword pattern template) - #((top) (top) (top) (top) (top)) - #("i" "i" "i" "i" "i")) - #(ribcage () () ()) - #(ribcage #(x) #((top)) #("i")) - #(ribcage ((import-token . *top*)) () ()))) - '(#(syntax-object - x - ((top) - #(ribcage - #(_ k keyword pattern template) - #((top) (top) (top) (top) (top)) - #("i" "i" "i" "i" "i")) - #(ribcage () () ()) - #(ribcage #(x) #((top)) #("i")) - #(ribcage ((import-token . *top*)) () ())))) - (cons '#(syntax-object - syntax-case - ((top) - #(ribcage - #(_ k keyword pattern template) - #((top) (top) (top) (top) (top)) - #("i" "i" "i" "i" "i")) - #(ribcage () () ()) - #(ribcage #(x) #((top)) #("i")) - #(ribcage - ((import-token . *top*)) - () - ()))) - (cons '#(syntax-object - x - ((top) - #(ribcage - #(_ k keyword pattern template) - #((top) (top) (top) (top) (top)) - #("i" "i" "i" "i" "i")) - #(ribcage () () ()) - #(ribcage #(x) #((top)) #("i")) - #(ribcage - ((import-token . *top*)) - () - ()))) - (cons g1854 - (map (lambda (g1861 g1860) - (list (cons '#(syntax-object - dummy - ((top) - #(ribcage - #(_ - k - keyword - pattern - template) - #((top) - (top) - (top) - (top) - (top)) - #("i" - "i" - "i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - g1860) - (list '#(syntax-object - syntax - ((top) - #(ribcage - #(_ - k - keyword - pattern - template) - #((top) - (top) - (top) - (top) - (top)) - #("i" - "i" - "i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - g1861))) - g1856 - g1855)))))) - g1853) - (syntax-error g1852))) - ($syntax-dispatch - g1852 - '(any each-any . #(each ((any . any) any)))))) - g1851))) -($sc-put-cte - 'or - (lambda (g1862) - ((lambda (g1863) - ((lambda (g1864) - (if g1864 - (apply - (lambda (g1865) - '#(syntax-object - #f - ((top) - #(ribcage #(_) #((top)) #("i")) - #(ribcage () () ()) - #(ribcage #(x) #((top)) #("i")) - #(ribcage ((import-token . *top*)) () ())))) - g1864) - ((lambda (g1866) - (if g1866 - (apply (lambda (g1868 g1867) g1867) g1866) - ((lambda (g1869) - (if g1869 - (apply - (lambda (g1873 g1870 g1872 g1871) - (list '#(syntax-object - let - ((top) - #(ribcage - #(_ e1 e2 e3) - #((top) (top) (top) (top)) - #("i" "i" "i" "i")) - #(ribcage () () ()) - #(ribcage #(x) #((top)) #("i")) - #(ribcage - ((import-token . *top*)) - () - ()))) - (list (list '#(syntax-object - t - ((top) - #(ribcage - #(_ e1 e2 e3) - #((top) - (top) - (top) - (top)) - #("i" "i" "i" "i")) - #(ribcage () () ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - g1870)) - (list '#(syntax-object - if - ((top) - #(ribcage - #(_ e1 e2 e3) - #((top) - (top) - (top) - (top)) - #("i" "i" "i" "i")) - #(ribcage () () ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token . *top*)) - () - ()))) - '#(syntax-object - t - ((top) - #(ribcage - #(_ e1 e2 e3) - #((top) - (top) - (top) - (top)) - #("i" "i" "i" "i")) - #(ribcage () () ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token . *top*)) - () - ()))) - '#(syntax-object - t - ((top) - #(ribcage - #(_ e1 e2 e3) - #((top) - (top) - (top) - (top)) - #("i" "i" "i" "i")) - #(ribcage () () ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token . *top*)) - () - ()))) - (cons '#(syntax-object - or - ((top) - #(ribcage - #(_ e1 e2 e3) - #((top) - (top) - (top) - (top)) - #("i" "i" "i" "i")) - #(ribcage () () ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - (cons g1872 g1871))))) - g1869) - (syntax-error g1863))) - ($syntax-dispatch g1863 '(any any any . each-any))))) - ($syntax-dispatch g1863 '(any any))))) - ($syntax-dispatch g1863 '(any)))) - g1862))) -($sc-put-cte - 'and - (lambda (g1875) - ((lambda (g1876) - ((lambda (g1877) - (if g1877 - (apply - (lambda (g1881 g1878 g1880 g1879) - (cons '#(syntax-object - if - ((top) - #(ribcage - #(_ e1 e2 e3) - #((top) (top) (top) (top)) - #("i" "i" "i" "i")) - #(ribcage () () ()) - #(ribcage #(x) #((top)) #("i")) - #(ribcage ((import-token . *top*)) () ()))) - (cons g1878 - (cons (cons '#(syntax-object - and - ((top) - #(ribcage - #(_ e1 e2 e3) - #((top) (top) (top) (top)) - #("i" "i" "i" "i")) - #(ribcage () () ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token . *top*)) - () - ()))) - (cons g1880 g1879)) - '(#(syntax-object - #f - ((top) - #(ribcage - #(_ e1 e2 e3) - #((top) (top) (top) (top)) - #("i" "i" "i" "i")) - #(ribcage () () ()) - #(ribcage #(x) #((top)) #("i")) - #(ribcage - ((import-token . *top*)) - () - ())))))))) - g1877) - ((lambda (g1883) - (if g1883 - (apply (lambda (g1885 g1884) g1884) g1883) - ((lambda (g1886) - (if g1886 - (apply - (lambda (g1887) - '#(syntax-object - #t - ((top) - #(ribcage #(_) #((top)) #("i")) - #(ribcage () () ()) - #(ribcage #(x) #((top)) #("i")) - #(ribcage - ((import-token . *top*)) - () - ())))) - g1886) - (syntax-error g1876))) - ($syntax-dispatch g1876 '(any))))) - ($syntax-dispatch g1876 '(any any))))) - ($syntax-dispatch g1876 '(any any any . each-any)))) - g1875))) -($sc-put-cte - 'let - (lambda (g1888) - ((lambda (g1889) - ((lambda (g1890) - (if (if g1890 - (apply - (lambda (g1895 g1891 g1894 g1892 g1893) - (andmap identifier? g1891)) - g1890) - '#f) - (apply - (lambda (g1901 g1897 g1900 g1898 g1899) - (cons (cons '#(syntax-object - lambda - ((top) - #(ribcage - #(_ x v e1 e2) - #((top) (top) (top) (top) (top)) - #("i" "i" "i" "i" "i")) - #(ribcage () () ()) - #(ribcage #(x) #((top)) #("i")) - #(ribcage - ((import-token . *top*)) - () - ()))) - (cons g1897 (cons g1898 g1899))) - g1900)) - g1890) - ((lambda (g1905) - (if (if g1905 - (apply - (lambda (g1911 g1906 g1910 g1907 g1909 g1908) - (andmap identifier? (cons g1906 g1910))) - g1905) - '#f) - (apply - (lambda (g1918 g1913 g1917 g1914 g1916 g1915) - (cons (list '#(syntax-object - letrec - ((top) - #(ribcage - #(_ f x v e1 e2) - #((top) - (top) - (top) - (top) - (top) - (top)) - #("i" "i" "i" "i" "i" "i")) - #(ribcage () () ()) - #(ribcage #(x) #((top)) #("i")) - #(ribcage - ((import-token . *top*)) - () - ()))) - (list (list g1913 - (cons '#(syntax-object - lambda - ((top) - #(ribcage - #(_ - f - x - v - e1 - e2) - #((top) - (top) - (top) - (top) - (top) - (top)) - #("i" - "i" - "i" - "i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - (cons g1917 - (cons g1916 - g1915))))) - g1913) - g1914)) - g1905) - (syntax-error g1889))) - ($syntax-dispatch - g1889 - '(any any #(each (any any)) any . each-any))))) - ($syntax-dispatch - g1889 - '(any #(each (any any)) any . each-any)))) - g1888))) -($sc-put-cte - 'let* - (lambda (g1922) - ((lambda (g1923) - ((lambda (g1924) - (if (if g1924 - (apply - (lambda (g1929 g1925 g1928 g1926 g1927) - (andmap identifier? g1925)) - g1924) - '#f) - (apply - (lambda (g1935 g1931 g1934 g1932 g1933) - ((letrec ((g1936 - (lambda (g1937) - (if (null? g1937) - (cons '#(syntax-object - let - ((top) - #(ribcage () () ()) - #(ribcage - #(bindings) - #((top)) - #("i")) - #(ribcage - #(f) - #((top)) - #("i")) - #(ribcage - #(let* x v e1 e2) - #((top) - (top) - (top) - (top) - (top)) - #("i" "i" "i" "i" "i")) - #(ribcage () () ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token . *top*)) - () - ()))) - (cons '() (cons g1932 g1933))) - ((lambda (g1939) - ((lambda (g1940) - (if g1940 - (apply - (lambda (g1942 g1941) - (list '#(syntax-object - let - ((top) - #(ribcage - #(body - binding) - #((top) (top)) - #("i" "i")) - #(ribcage - () - () - ()) - #(ribcage - #(bindings) - #((top)) - #("i")) - #(ribcage - #(f) - #((top)) - #("i")) - #(ribcage - #(let* - x - v - e1 - e2) - #((top) - (top) - (top) - (top) - (top)) - #("i" - "i" - "i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - (list g1941) - g1942)) - g1940) - (syntax-error g1939))) - ($syntax-dispatch - g1939 - '(any any)))) - (list (g1936 (cdr g1937)) - (car g1937))))))) - g1936) - (map list g1931 g1934))) - g1924) - (syntax-error g1923))) - ($syntax-dispatch - g1923 - '(any #(each (any any)) any . each-any)))) - g1922))) -($sc-put-cte - 'cond - (lambda (g1945) - ((lambda (g1946) - ((lambda (g1947) - (if g1947 - (apply - (lambda (g1950 g1948 g1949) - ((letrec ((g1951 - (lambda (g1953 g1952) - (if (null? g1952) - ((lambda (g1954) - ((lambda (g1955) - (if g1955 - (apply - (lambda (g1957 g1956) - (cons '#(syntax-object - begin - ((top) - #(ribcage - #(e1 e2) - #((top) (top)) - #("i" "i")) - #(ribcage - () - () - ()) - #(ribcage - #(clause - clauses) - #((top) (top)) - #("i" "i")) - #(ribcage - #(f) - #((top)) - #("i")) - #(ribcage - #(_ m1 m2) - #((top) - (top) - (top)) - #("i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - (cons g1957 g1956))) - g1955) - ((lambda (g1959) - (if g1959 - (apply - (lambda (g1960) - (cons '#(syntax-object - let - ((top) - #(ribcage - #(e0) - #((top)) - #("i")) - #(ribcage - () - () - ()) - #(ribcage - #(clause - clauses) - #((top) - (top)) - #("i" - "i")) - #(ribcage - #(f) - #((top)) - #("i")) - #(ribcage - #(_ - m1 - m2) - #((top) - (top) - (top)) - #("i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - (cons (list (list '#(syntax-object - t - ((top) - #(ribcage - #(e0) - #((top)) - #("i")) - #(ribcage - () - () - ()) - #(ribcage - #(clause - clauses) - #((top) - (top)) - #("i" - "i")) - #(ribcage - #(f) - #((top)) - #("i")) - #(ribcage - #(_ - m1 - m2) - #((top) - (top) - (top)) - #("i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - g1960)) - '((#(syntax-object - if - ((top) - #(ribcage - #(e0) - #((top)) - #("i")) - #(ribcage - () - () - ()) - #(ribcage - #(clause - clauses) - #((top) - (top)) - #("i" - "i")) - #(ribcage - #(f) - #((top)) - #("i")) - #(ribcage - #(_ - m1 - m2) - #((top) - (top) - (top)) - #("i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - #(syntax-object - t - ((top) - #(ribcage - #(e0) - #((top)) - #("i")) - #(ribcage - () - () - ()) - #(ribcage - #(clause - clauses) - #((top) - (top)) - #("i" - "i")) - #(ribcage - #(f) - #((top)) - #("i")) - #(ribcage - #(_ - m1 - m2) - #((top) - (top) - (top)) - #("i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - #(syntax-object - t - ((top) - #(ribcage - #(e0) - #((top)) - #("i")) - #(ribcage - () - () - ()) - #(ribcage - #(clause - clauses) - #((top) - (top)) - #("i" - "i")) - #(ribcage - #(f) - #((top)) - #("i")) - #(ribcage - #(_ - m1 - m2) - #((top) - (top) - (top)) - #("i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ())))))))) - g1959) - ((lambda (g1961) - (if g1961 - (apply - (lambda (g1963 - g1962) - (list '#(syntax-object - let - ((top) - #(ribcage - #(e0 - e1) - #((top) - (top)) - #("i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(clause - clauses) - #((top) - (top)) - #("i" - "i")) - #(ribcage - #(f) - #((top)) - #("i")) - #(ribcage - #(_ - m1 - m2) - #((top) - (top) - (top)) - #("i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - (list (list '#(syntax-object - t - ((top) - #(ribcage - #(e0 - e1) - #((top) - (top)) - #("i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(clause - clauses) - #((top) - (top)) - #("i" - "i")) - #(ribcage - #(f) - #((top)) - #("i")) - #(ribcage - #(_ - m1 - m2) - #((top) - (top) - (top)) - #("i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - g1963)) - (list '#(syntax-object - if - ((top) - #(ribcage - #(e0 - e1) - #((top) - (top)) - #("i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(clause - clauses) - #((top) - (top)) - #("i" - "i")) - #(ribcage - #(f) - #((top)) - #("i")) - #(ribcage - #(_ - m1 - m2) - #((top) - (top) - (top)) - #("i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - '#(syntax-object - t - ((top) - #(ribcage - #(e0 - e1) - #((top) - (top)) - #("i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(clause - clauses) - #((top) - (top)) - #("i" - "i")) - #(ribcage - #(f) - #((top)) - #("i")) - #(ribcage - #(_ - m1 - m2) - #((top) - (top) - (top)) - #("i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - (cons g1962 - '(#(syntax-object - t - ((top) - #(ribcage - #(e0 - e1) - #((top) - (top)) - #("i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(clause - clauses) - #((top) - (top)) - #("i" - "i")) - #(ribcage - #(f) - #((top)) - #("i")) - #(ribcage - #(_ - m1 - m2) - #((top) - (top) - (top)) - #("i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ())))))))) - g1961) - ((lambda (g1964) - (if g1964 - (apply - (lambda (g1967 - g1965 - g1966) - (list '#(syntax-object - if - ((top) - #(ribcage - #(e0 - e1 - e2) - #((top) - (top) - (top)) - #("i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(clause - clauses) - #((top) - (top)) - #("i" - "i")) - #(ribcage - #(f) - #((top)) - #("i")) - #(ribcage - #(_ - m1 - m2) - #((top) - (top) - (top)) - #("i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - g1967 - (cons '#(syntax-object - begin - ((top) - #(ribcage - #(e0 - e1 - e2) - #((top) - (top) - (top)) - #("i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(clause - clauses) - #((top) - (top)) - #("i" - "i")) - #(ribcage - #(f) - #((top)) - #("i")) - #(ribcage - #(_ - m1 - m2) - #((top) - (top) - (top)) - #("i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - (cons g1965 - g1966)))) - g1964) - ((lambda (g1969) - (syntax-error - g1945)) - g1954))) - ($syntax-dispatch - g1954 - '(any any - . - each-any))))) - ($syntax-dispatch - g1954 - '(any #(free-id - #(syntax-object - => - ((top) - #(ribcage - () - () - ()) - #(ribcage - #(clause - clauses) - #((top) - (top)) - #("i" - "i")) - #(ribcage - #(f) - #((top)) - #("i")) - #(ribcage - #(_ - m1 - m2) - #((top) - (top) - (top)) - #("i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ())))) - any))))) - ($syntax-dispatch - g1954 - '(any))))) - ($syntax-dispatch - g1954 - '(#(free-id - #(syntax-object - else - ((top) - #(ribcage () () ()) - #(ribcage - #(clause clauses) - #((top) (top)) - #("i" "i")) - #(ribcage - #(f) - #((top)) - #("i")) - #(ribcage - #(_ m1 m2) - #((top) (top) (top)) - #("i" "i" "i")) - #(ribcage () () ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token . *top*)) - () - ())))) - any - . - each-any)))) - g1953) - ((lambda (g1970) - ((lambda (g1971) - ((lambda (g1972) - ((lambda (g1973) - (if g1973 - (apply - (lambda (g1974) - (list '#(syntax-object - let - ((top) - #(ribcage - #(e0) - #((top)) - #("i")) - #(ribcage - #(rest) - #((top)) - #("i")) - #(ribcage - () - () - ()) - #(ribcage - #(clause - clauses) - #((top) - (top)) - #("i" - "i")) - #(ribcage - #(f) - #((top)) - #("i")) - #(ribcage - #(_ - m1 - m2) - #((top) - (top) - (top)) - #("i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - (list (list '#(syntax-object - t - ((top) - #(ribcage - #(e0) - #((top)) - #("i")) - #(ribcage - #(rest) - #((top)) - #("i")) - #(ribcage - () - () - ()) - #(ribcage - #(clause - clauses) - #((top) - (top)) - #("i" - "i")) - #(ribcage - #(f) - #((top)) - #("i")) - #(ribcage - #(_ - m1 - m2) - #((top) - (top) - (top)) - #("i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - g1974)) - (list '#(syntax-object - if - ((top) - #(ribcage - #(e0) - #((top)) - #("i")) - #(ribcage - #(rest) - #((top)) - #("i")) - #(ribcage - () - () - ()) - #(ribcage - #(clause - clauses) - #((top) - (top)) - #("i" - "i")) - #(ribcage - #(f) - #((top)) - #("i")) - #(ribcage - #(_ - m1 - m2) - #((top) - (top) - (top)) - #("i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - '#(syntax-object - t - ((top) - #(ribcage - #(e0) - #((top)) - #("i")) - #(ribcage - #(rest) - #((top)) - #("i")) - #(ribcage - () - () - ()) - #(ribcage - #(clause - clauses) - #((top) - (top)) - #("i" - "i")) - #(ribcage - #(f) - #((top)) - #("i")) - #(ribcage - #(_ - m1 - m2) - #((top) - (top) - (top)) - #("i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - '#(syntax-object - t - ((top) - #(ribcage - #(e0) - #((top)) - #("i")) - #(ribcage - #(rest) - #((top)) - #("i")) - #(ribcage - () - () - ()) - #(ribcage - #(clause - clauses) - #((top) - (top)) - #("i" - "i")) - #(ribcage - #(f) - #((top)) - #("i")) - #(ribcage - #(_ - m1 - m2) - #((top) - (top) - (top)) - #("i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - g1971))) - g1973) - ((lambda (g1975) - (if g1975 - (apply - (lambda (g1977 - g1976) - (list '#(syntax-object - let - ((top) - #(ribcage - #(e0 - e1) - #((top) - (top)) - #("i" - "i")) - #(ribcage - #(rest) - #((top)) - #("i")) - #(ribcage - () - () - ()) - #(ribcage - #(clause - clauses) - #((top) - (top)) - #("i" - "i")) - #(ribcage - #(f) - #((top)) - #("i")) - #(ribcage - #(_ - m1 - m2) - #((top) - (top) - (top)) - #("i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - (list (list '#(syntax-object - t - ((top) - #(ribcage - #(e0 - e1) - #((top) - (top)) - #("i" - "i")) - #(ribcage - #(rest) - #((top)) - #("i")) - #(ribcage - () - () - ()) - #(ribcage - #(clause - clauses) - #((top) - (top)) - #("i" - "i")) - #(ribcage - #(f) - #((top)) - #("i")) - #(ribcage - #(_ - m1 - m2) - #((top) - (top) - (top)) - #("i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - g1977)) - (list '#(syntax-object - if - ((top) - #(ribcage - #(e0 - e1) - #((top) - (top)) - #("i" - "i")) - #(ribcage - #(rest) - #((top)) - #("i")) - #(ribcage - () - () - ()) - #(ribcage - #(clause - clauses) - #((top) - (top)) - #("i" - "i")) - #(ribcage - #(f) - #((top)) - #("i")) - #(ribcage - #(_ - m1 - m2) - #((top) - (top) - (top)) - #("i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - '#(syntax-object - t - ((top) - #(ribcage - #(e0 - e1) - #((top) - (top)) - #("i" - "i")) - #(ribcage - #(rest) - #((top)) - #("i")) - #(ribcage - () - () - ()) - #(ribcage - #(clause - clauses) - #((top) - (top)) - #("i" - "i")) - #(ribcage - #(f) - #((top)) - #("i")) - #(ribcage - #(_ - m1 - m2) - #((top) - (top) - (top)) - #("i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - (cons g1976 - '(#(syntax-object - t - ((top) - #(ribcage - #(e0 - e1) - #((top) - (top)) - #("i" - "i")) - #(ribcage - #(rest) - #((top)) - #("i")) - #(ribcage - () - () - ()) - #(ribcage - #(clause - clauses) - #((top) - (top)) - #("i" - "i")) - #(ribcage - #(f) - #((top)) - #("i")) - #(ribcage - #(_ - m1 - m2) - #((top) - (top) - (top)) - #("i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))))) - g1971))) - g1975) - ((lambda (g1978) - (if g1978 - (apply - (lambda (g1981 - g1979 - g1980) - (list '#(syntax-object - if - ((top) - #(ribcage - #(e0 - e1 - e2) - #((top) - (top) - (top)) - #("i" - "i" - "i")) - #(ribcage - #(rest) - #((top)) - #("i")) - #(ribcage - () - () - ()) - #(ribcage - #(clause - clauses) - #((top) - (top)) - #("i" - "i")) - #(ribcage - #(f) - #((top)) - #("i")) - #(ribcage - #(_ - m1 - m2) - #((top) - (top) - (top)) - #("i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - g1981 - (cons '#(syntax-object - begin - ((top) - #(ribcage - #(e0 - e1 - e2) - #((top) - (top) - (top)) - #("i" - "i" - "i")) - #(ribcage - #(rest) - #((top)) - #("i")) - #(ribcage - () - () - ()) - #(ribcage - #(clause - clauses) - #((top) - (top)) - #("i" - "i")) - #(ribcage - #(f) - #((top)) - #("i")) - #(ribcage - #(_ - m1 - m2) - #((top) - (top) - (top)) - #("i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - (cons g1979 - g1980)) - g1971)) - g1978) - ((lambda (g1983) - (syntax-error - g1945)) - g1972))) - ($syntax-dispatch - g1972 - '(any any - . - each-any))))) - ($syntax-dispatch - g1972 - '(any #(free-id - #(syntax-object - => - ((top) - #(ribcage - #(rest) - #((top)) - #("i")) - #(ribcage - () - () - ()) - #(ribcage - #(clause - clauses) - #((top) - (top)) - #("i" - "i")) - #(ribcage - #(f) - #((top)) - #("i")) - #(ribcage - #(_ - m1 - m2) - #((top) - (top) - (top)) - #("i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ())))) - any))))) - ($syntax-dispatch - g1972 - '(any)))) - g1953)) - g1970)) - (g1951 (car g1952) (cdr g1952))))))) - g1951) - g1948 - g1949)) - g1947) - (syntax-error g1946))) - ($syntax-dispatch g1946 '(any any . each-any)))) - g1945))) -($sc-put-cte - 'do - (lambda (g1985) - ((lambda (g1986) - ((lambda (g1987) - (if g1987 - (apply - (lambda (g1994 g1988 g1993 g1989 g1992 g1990 g1991) - ((lambda (g1995) - ((lambda (g2005) - (if g2005 - (apply - (lambda (g2006) - ((lambda (g2007) - ((lambda (g2009) - (if g2009 - (apply - (lambda () - (list '#(syntax-object - let - ((top) - #(ribcage - #(step) - #((top)) - #("i")) - #(ribcage - #(_ - var - init - step - e0 - e1 - c) - #((top) - (top) - (top) - (top) - (top) - (top) - (top)) - #("i" - "i" - "i" - "i" - "i" - "i" - "i")) - #(ribcage () () ()) - #(ribcage - #(orig-x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - '#(syntax-object - doloop - ((top) - #(ribcage - #(step) - #((top)) - #("i")) - #(ribcage - #(_ - var - init - step - e0 - e1 - c) - #((top) - (top) - (top) - (top) - (top) - (top) - (top)) - #("i" - "i" - "i" - "i" - "i" - "i" - "i")) - #(ribcage () () ()) - #(ribcage - #(orig-x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - (map list g1988 g1993) - (list '#(syntax-object - if - ((top) - #(ribcage - #(step) - #((top)) - #("i")) - #(ribcage - #(_ - var - init - step - e0 - e1 - c) - #((top) - (top) - (top) - (top) - (top) - (top) - (top)) - #("i" - "i" - "i" - "i" - "i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(orig-x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - (list '#(syntax-object - not - ((top) - #(ribcage - #(step) - #((top)) - #("i")) - #(ribcage - #(_ - var - init - step - e0 - e1 - c) - #((top) - (top) - (top) - (top) - (top) - (top) - (top)) - #("i" - "i" - "i" - "i" - "i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(orig-x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - g1992) - (cons '#(syntax-object - begin - ((top) - #(ribcage - #(step) - #((top)) - #("i")) - #(ribcage - #(_ - var - init - step - e0 - e1 - c) - #((top) - (top) - (top) - (top) - (top) - (top) - (top)) - #("i" - "i" - "i" - "i" - "i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(orig-x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - (append - g1991 - (list (cons '#(syntax-object - doloop - ((top) - #(ribcage - #(step) - #((top)) - #("i")) - #(ribcage - #(_ - var - init - step - e0 - e1 - c) - #((top) - (top) - (top) - (top) - (top) - (top) - (top)) - #("i" - "i" - "i" - "i" - "i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(orig-x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - g2006))))))) - g2009) - ((lambda (g2014) - (if g2014 - (apply - (lambda (g2016 g2015) - (list '#(syntax-object - let - ((top) - #(ribcage - #(e1 e2) - #((top) - (top)) - #("i" - "i")) - #(ribcage - #(step) - #((top)) - #("i")) - #(ribcage - #(_ - var - init - step - e0 - e1 - c) - #((top) - (top) - (top) - (top) - (top) - (top) - (top)) - #("i" - "i" - "i" - "i" - "i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(orig-x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - '#(syntax-object - doloop - ((top) - #(ribcage - #(e1 e2) - #((top) - (top)) - #("i" - "i")) - #(ribcage - #(step) - #((top)) - #("i")) - #(ribcage - #(_ - var - init - step - e0 - e1 - c) - #((top) - (top) - (top) - (top) - (top) - (top) - (top)) - #("i" - "i" - "i" - "i" - "i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(orig-x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - (map list - g1988 - g1993) - (list '#(syntax-object - if - ((top) - #(ribcage - #(e1 - e2) - #((top) - (top)) - #("i" - "i")) - #(ribcage - #(step) - #((top)) - #("i")) - #(ribcage - #(_ - var - init - step - e0 - e1 - c) - #((top) - (top) - (top) - (top) - (top) - (top) - (top)) - #("i" - "i" - "i" - "i" - "i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(orig-x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - g1992 - (cons '#(syntax-object - begin - ((top) - #(ribcage - #(e1 - e2) - #((top) - (top)) - #("i" - "i")) - #(ribcage - #(step) - #((top)) - #("i")) - #(ribcage - #(_ - var - init - step - e0 - e1 - c) - #((top) - (top) - (top) - (top) - (top) - (top) - (top)) - #("i" - "i" - "i" - "i" - "i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(orig-x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - (cons g2016 - g2015)) - (cons '#(syntax-object - begin - ((top) - #(ribcage - #(e1 - e2) - #((top) - (top)) - #("i" - "i")) - #(ribcage - #(step) - #((top)) - #("i")) - #(ribcage - #(_ - var - init - step - e0 - e1 - c) - #((top) - (top) - (top) - (top) - (top) - (top) - (top)) - #("i" - "i" - "i" - "i" - "i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(orig-x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - (append - g1991 - (list (cons '#(syntax-object - doloop - ((top) - #(ribcage - #(e1 - e2) - #((top) - (top)) - #("i" - "i")) - #(ribcage - #(step) - #((top)) - #("i")) - #(ribcage - #(_ - var - init - step - e0 - e1 - c) - #((top) - (top) - (top) - (top) - (top) - (top) - (top)) - #("i" - "i" - "i" - "i" - "i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(orig-x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - g2006))))))) - g2014) - (syntax-error g2007))) - ($syntax-dispatch - g2007 - '(any . each-any))))) - ($syntax-dispatch g2007 '()))) - g1990)) - g2005) - (syntax-error g1995))) - ($syntax-dispatch g1995 'each-any))) - (map (lambda (g1999 g1998) - ((lambda (g2000) - ((lambda (g2001) - (if g2001 - (apply (lambda () g1999) g2001) - ((lambda (g2002) - (if g2002 - (apply - (lambda (g2003) g2003) - g2002) - ((lambda (g2004) - (syntax-error g1985)) - g2000))) - ($syntax-dispatch g2000 '(any))))) - ($syntax-dispatch g2000 '()))) - g1998)) - g1988 - g1989))) - g1987) - (syntax-error g1986))) - ($syntax-dispatch - g1986 - '(any #(each (any any . any)) - (any . each-any) - . - each-any)))) - g1985))) -($sc-put-cte - 'quasiquote - (letrec ((g2030 - (lambda (g2142) - (if (identifier? g2142) - (free-identifier=? - g2142 - '#(syntax-object - quote - ((top) - #(ribcage () () ()) - #(ribcage () () ()) - #(ribcage #(x) #((top)) #("i")) - #(ribcage - #(isquote? - islist? - iscons? - quote-nil? - quasilist* - quasicons - quasiappend - quasivector - quasi) - #((top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top)) - #("i" "i" "i" "i" "i" "i" "i" "i" "i")) - #(ribcage ((import-token . *top*)) () ())))) - '#f))) - (g2022 - (lambda (g2036) - (if (identifier? g2036) - (free-identifier=? - g2036 - '#(syntax-object - list - ((top) - #(ribcage () () ()) - #(ribcage () () ()) - #(ribcage #(x) #((top)) #("i")) - #(ribcage - #(isquote? - islist? - iscons? - quote-nil? - quasilist* - quasicons - quasiappend - quasivector - quasi) - #((top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top)) - #("i" "i" "i" "i" "i" "i" "i" "i" "i")) - #(ribcage ((import-token . *top*)) () ())))) - '#f))) - (g2029 - (lambda (g2141) - (if (identifier? g2141) - (free-identifier=? - g2141 - '#(syntax-object - cons - ((top) - #(ribcage () () ()) - #(ribcage () () ()) - #(ribcage #(x) #((top)) #("i")) - #(ribcage - #(isquote? - islist? - iscons? - quote-nil? - quasilist* - quasicons - quasiappend - quasivector - quasi) - #((top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top)) - #("i" "i" "i" "i" "i" "i" "i" "i" "i")) - #(ribcage ((import-token . *top*)) () ())))) - '#f))) - (g2023 - (lambda (g2037) - ((lambda (g2038) - ((lambda (g2039) - (if g2039 - (apply (lambda (g2040) (g2030 g2040)) g2039) - ((lambda (g2041) '#f) g2038))) - ($syntax-dispatch g2038 '(any ())))) - g2037))) - (g2028 - (lambda (g2138 g2137) - ((letrec ((g2139 - (lambda (g2140) - (if (null? g2140) - g2137 - (g2024 (car g2140) (g2139 (cdr g2140))))))) - g2139) - g2138))) - (g2024 - (lambda (g2043 g2042) - ((lambda (g2044) - ((lambda (g2045) - (if g2045 - (apply - (lambda (g2047 g2046) - ((lambda (g2048) - ((lambda (g2049) - (if (if g2049 - (apply - (lambda (g2051 g2050) - (g2030 g2051)) - g2049) - '#f) - (apply - (lambda (g2053 g2052) - ((lambda (g2054) - ((lambda (g2055) - (if (if g2055 - (apply - (lambda (g2057 - g2056) - (g2030 g2057)) - g2055) - '#f) - (apply - (lambda (g2059 g2058) - (list '#(syntax-object - quote - ((top) - #(ribcage - #(quote? - dx) - #((top) - (top)) - #("i" - "i")) - #(ribcage - #(quote? - dy) - #((top) - (top)) - #("i" - "i")) - #(ribcage - #(x y) - #((top) - (top)) - #("i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - () - () - ()) - #(ribcage - #(x y) - #((top) - (top)) - #("i" - "i")) - #(ribcage - #(isquote? - islist? - iscons? - quote-nil? - quasilist* - quasicons - quasiappend - quasivector - quasi) - #((top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top)) - #("i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - (cons g2058 - g2052))) - g2055) - ((lambda (g2060) - (if (null? g2052) - (list '#(syntax-object - list - ((top) - #(ribcage - #(_) - #((top)) - #("i")) - #(ribcage - #(quote? - dy) - #((top) - (top)) - #("i" - "i")) - #(ribcage - #(x - y) - #((top) - (top)) - #("i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - () - () - ()) - #(ribcage - #(x - y) - #((top) - (top)) - #("i" - "i")) - #(ribcage - #(isquote? - islist? - iscons? - quote-nil? - quasilist* - quasicons - quasiappend - quasivector - quasi) - #((top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top)) - #("i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - g2047) - (list '#(syntax-object - cons - ((top) - #(ribcage - #(_) - #((top)) - #("i")) - #(ribcage - #(quote? - dy) - #((top) - (top)) - #("i" - "i")) - #(ribcage - #(x - y) - #((top) - (top)) - #("i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - () - () - ()) - #(ribcage - #(x - y) - #((top) - (top)) - #("i" - "i")) - #(ribcage - #(isquote? - islist? - iscons? - quote-nil? - quasilist* - quasicons - quasiappend - quasivector - quasi) - #((top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top)) - #("i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - g2047 - g2046))) - g2054))) - ($syntax-dispatch - g2054 - '(any any)))) - g2047)) - g2049) - ((lambda (g2061) - (if (if g2061 - (apply - (lambda (g2063 g2062) - (g2022 g2063)) - g2061) - '#f) - (apply - (lambda (g2065 g2064) - (cons '#(syntax-object - list - ((top) - #(ribcage - #(listp stuff) - #((top) (top)) - #("i" "i")) - #(ribcage - #(x y) - #((top) (top)) - #("i" "i")) - #(ribcage - () - () - ()) - #(ribcage - () - () - ()) - #(ribcage - #(x y) - #((top) (top)) - #("i" "i")) - #(ribcage - #(isquote? - islist? - iscons? - quote-nil? - quasilist* - quasicons - quasiappend - quasivector - quasi) - #((top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top)) - #("i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - (cons g2047 g2064))) - g2061) - ((lambda (g2066) - (list '#(syntax-object - cons - ((top) - #(ribcage - #(else) - #((top)) - #("i")) - #(ribcage - #(x y) - #((top) (top)) - #("i" "i")) - #(ribcage - () - () - ()) - #(ribcage - () - () - ()) - #(ribcage - #(x y) - #((top) (top)) - #("i" "i")) - #(ribcage - #(isquote? - islist? - iscons? - quote-nil? - quasilist* - quasicons - quasiappend - quasivector - quasi) - #((top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top)) - #("i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - g2047 - g2046)) - g2048))) - ($syntax-dispatch - g2048 - '(any . any))))) - ($syntax-dispatch g2048 '(any any)))) - g2046)) - g2045) - (syntax-error g2044))) - ($syntax-dispatch g2044 '(any any)))) - (list g2043 g2042)))) - (g2027 - (lambda (g2129 g2128) - ((lambda (g2130) - (if (null? g2130) - '(#(syntax-object - quote - ((top) - #(ribcage () () ()) - #(ribcage () () ()) - #(ribcage #(ls) #((top)) #("i")) - #(ribcage () () ()) - #(ribcage () () ()) - #(ribcage #(x y) #((top) (top)) #("i" "i")) - #(ribcage - #(isquote? - islist? - iscons? - quote-nil? - quasilist* - quasicons - quasiappend - quasivector - quasi) - #((top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top)) - #("i" "i" "i" "i" "i" "i" "i" "i" "i")) - #(ribcage ((import-token . *top*)) () ()))) - ()) - (if (null? (cdr g2130)) - (car g2130) - ((lambda (g2131) - ((lambda (g2132) - (if g2132 - (apply - (lambda (g2133) - (cons '#(syntax-object - append - ((top) - #(ribcage - #(p) - #((top)) - #("i")) - #(ribcage () () ()) - #(ribcage () () ()) - #(ribcage - #(ls) - #((top)) - #("i")) - #(ribcage () () ()) - #(ribcage () () ()) - #(ribcage - #(x y) - #((top) (top)) - #("i" "i")) - #(ribcage - #(isquote? - islist? - iscons? - quote-nil? - quasilist* - quasicons - quasiappend - quasivector - quasi) - #((top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top)) - #("i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i")) - #(ribcage - ((import-token . *top*)) - () - ()))) - g2133)) - g2132) - (syntax-error g2131))) - ($syntax-dispatch g2131 'each-any))) - g2130)))) - ((letrec ((g2135 - (lambda (g2136) - (if (null? g2136) - (if (g2023 g2128) '() (list g2128)) - (if (g2023 (car g2136)) - (g2135 (cdr g2136)) - (cons (car g2136) - (g2135 (cdr g2136)))))))) - g2135) - g2129)))) - (g2025 - (lambda (g2067) - ((lambda (g2068) - ((lambda (g2069) - ((lambda (g2070) - ((lambda (g2071) - (if (if g2071 - (apply - (lambda (g2073 g2072) (g2030 g2073)) - g2071) - '#f) - (apply - (lambda (g2075 g2074) - (list '#(syntax-object - quote - ((top) - #(ribcage - #(quote? x) - #((top) (top)) - #("i" "i")) - #(ribcage - #(pat-x) - #((top)) - #("i")) - #(ribcage () () ()) - #(ribcage () () ()) - #(ribcage #(x) #((top)) #("i")) - #(ribcage - #(isquote? - islist? - iscons? - quote-nil? - quasilist* - quasicons - quasiappend - quasivector - quasi) - #((top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top)) - #("i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i")) - #(ribcage - ((import-token . *top*)) - () - ()))) - (list->vector g2074))) - g2071) - ((lambda (g2077) - ((letrec ((g2078 - (lambda (g2080 g2079) - ((lambda (g2081) - ((lambda (g2082) - (if (if g2082 - (apply - (lambda (g2084 - g2083) - (g2030 - g2084)) - g2082) - '#f) - (apply - (lambda (g2086 - g2085) - (g2079 - (map (lambda (g2087) - (list '#(syntax-object - quote - ((top) - #(ribcage - #(quote? - x) - #((top) - (top)) - #("i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(x - k) - #((top) - (top)) - #("i" - "i")) - #(ribcage - #(f) - #((top)) - #("i")) - #(ribcage - #(_) - #((top)) - #("i")) - #(ribcage - #(pat-x) - #((top)) - #("i")) - #(ribcage - () - () - ()) - #(ribcage - () - () - ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - #(isquote? - islist? - iscons? - quote-nil? - quasilist* - quasicons - quasiappend - quasivector - quasi) - #((top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top)) - #("i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - g2087)) - g2085))) - g2082) - ((lambda (g2088) - (if (if g2088 - (apply - (lambda (g2090 - g2089) - (g2022 - g2090)) - g2088) - '#f) - (apply - (lambda (g2092 - g2091) - (g2079 - g2091)) - g2088) - ((lambda (g2094) - (if (if g2094 - (apply - (lambda (g2097 - g2095 - g2096) - (g2029 - g2097)) - g2094) - '#f) - (apply - (lambda (g2100 - g2098 - g2099) - (g2078 - g2099 - (lambda (g2101) - (g2079 - (cons g2098 - g2101))))) - g2094) - ((lambda (g2102) - (list '#(syntax-object - list->vector - ((top) - #(ribcage - #(else) - #((top)) - #("i")) - #(ribcage - () - () - ()) - #(ribcage - #(x - k) - #((top) - (top)) - #("i" - "i")) - #(ribcage - #(f) - #((top)) - #("i")) - #(ribcage - #(_) - #((top)) - #("i")) - #(ribcage - #(pat-x) - #((top)) - #("i")) - #(ribcage - () - () - ()) - #(ribcage - () - () - ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - #(isquote? - islist? - iscons? - quote-nil? - quasilist* - quasicons - quasiappend - quasivector - quasi) - #((top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top)) - #("i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - g2069)) - g2081))) - ($syntax-dispatch - g2081 - '(any any - any))))) - ($syntax-dispatch - g2081 - '(any . - each-any))))) - ($syntax-dispatch - g2081 - '(any each-any)))) - g2080)))) - g2078) - g2067 - (lambda (g2103) - (cons '#(syntax-object - vector - ((top) - #(ribcage () () ()) - #(ribcage () () ()) - #(ribcage - #(ls) - #((top)) - #("i")) - #(ribcage - #(_) - #((top)) - #("i")) - #(ribcage - #(pat-x) - #((top)) - #("i")) - #(ribcage () () ()) - #(ribcage () () ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - #(isquote? - islist? - iscons? - quote-nil? - quasilist* - quasicons - quasiappend - quasivector - quasi) - #((top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top)) - #("i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i")) - #(ribcage - ((import-token . *top*)) - () - ()))) - g2103)))) - g2070))) - ($syntax-dispatch g2070 '(any each-any)))) - g2069)) - g2068)) - g2067))) - (g2026 - (lambda (g2105 g2104) - ((lambda (g2106) - ((lambda (g2107) - (if g2107 - (apply - (lambda (g2108) - (if (= g2104 '0) - g2108 - (g2024 - '(#(syntax-object - quote - ((top) - #(ribcage #(p) #((top)) #("i")) - #(ribcage () () ()) - #(ribcage - #(p lev) - #((top) (top)) - #("i" "i")) - #(ribcage - #(isquote? - islist? - iscons? - quote-nil? - quasilist* - quasicons - quasiappend - quasivector - quasi) - #((top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top)) - #("i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i")) - #(ribcage - ((import-token . *top*)) - () - ()))) - #(syntax-object - unquote - ((top) - #(ribcage #(p) #((top)) #("i")) - #(ribcage () () ()) - #(ribcage - #(p lev) - #((top) (top)) - #("i" "i")) - #(ribcage - #(isquote? - islist? - iscons? - quote-nil? - quasilist* - quasicons - quasiappend - quasivector - quasi) - #((top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top)) - #("i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i")) - #(ribcage - ((import-token . *top*)) - () - ())))) - (g2026 (list g2108) (- g2104 '1))))) - g2107) - ((lambda (g2109) - (if g2109 - (apply - (lambda (g2111 g2110) - (if (= g2104 '0) - (g2028 g2111 (g2026 g2110 g2104)) - (g2024 - (g2024 - '(#(syntax-object - quote - ((top) - #(ribcage - #(p q) - #((top) (top)) - #("i" "i")) - #(ribcage () () ()) - #(ribcage - #(p lev) - #((top) (top)) - #("i" "i")) - #(ribcage - #(isquote? - islist? - iscons? - quote-nil? - quasilist* - quasicons - quasiappend - quasivector - quasi) - #((top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top)) - #("i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i")) - #(ribcage - ((import-token . *top*)) - () - ()))) - #(syntax-object - unquote - ((top) - #(ribcage - #(p q) - #((top) (top)) - #("i" "i")) - #(ribcage () () ()) - #(ribcage - #(p lev) - #((top) (top)) - #("i" "i")) - #(ribcage - #(isquote? - islist? - iscons? - quote-nil? - quasilist* - quasicons - quasiappend - quasivector - quasi) - #((top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top)) - #("i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i")) - #(ribcage - ((import-token . *top*)) - () - ())))) - (g2026 g2111 (- g2104 '1))) - (g2026 g2110 g2104)))) - g2109) - ((lambda (g2114) - (if g2114 - (apply - (lambda (g2116 g2115) - (if (= g2104 '0) - (g2027 - g2116 - (g2026 g2115 g2104)) - (g2024 - (g2024 - '(#(syntax-object - quote - ((top) - #(ribcage - #(p q) - #((top) (top)) - #("i" "i")) - #(ribcage () () ()) - #(ribcage - #(p lev) - #((top) (top)) - #("i" "i")) - #(ribcage - #(isquote? - islist? - iscons? - quote-nil? - quasilist* - quasicons - quasiappend - quasivector - quasi) - #((top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top)) - #("i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - #(syntax-object - unquote-splicing - ((top) - #(ribcage - #(p q) - #((top) (top)) - #("i" "i")) - #(ribcage () () ()) - #(ribcage - #(p lev) - #((top) (top)) - #("i" "i")) - #(ribcage - #(isquote? - islist? - iscons? - quote-nil? - quasilist* - quasicons - quasiappend - quasivector - quasi) - #((top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top)) - #("i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i")) - #(ribcage - ((import-token - . - *top*)) - () - ())))) - (g2026 - g2116 - (- g2104 '1))) - (g2026 g2115 g2104)))) - g2114) - ((lambda (g2119) - (if g2119 - (apply - (lambda (g2120) - (g2024 - '(#(syntax-object - quote - ((top) - #(ribcage - #(p) - #((top)) - #("i")) - #(ribcage () () ()) - #(ribcage - #(p lev) - #((top) (top)) - #("i" "i")) - #(ribcage - #(isquote? - islist? - iscons? - quote-nil? - quasilist* - quasicons - quasiappend - quasivector - quasi) - #((top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top)) - #("i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - #(syntax-object - quasiquote - ((top) - #(ribcage - #(p) - #((top)) - #("i")) - #(ribcage - () - () - ()) - #(ribcage - #(p lev) - #((top) (top)) - #("i" "i")) - #(ribcage - #(isquote? - islist? - iscons? - quote-nil? - quasilist* - quasicons - quasiappend - quasivector - quasi) - #((top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top)) - #("i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i")) - #(ribcage - ((import-token - . - *top*)) - () - ())))) - (g2026 - (list g2120) - (+ g2104 '1)))) - g2119) - ((lambda (g2121) - (if g2121 - (apply - (lambda (g2123 g2122) - (g2024 - (g2026 - g2123 - g2104) - (g2026 - g2122 - g2104))) - g2121) - ((lambda (g2124) - (if g2124 - (apply - (lambda (g2125) - (g2025 - (g2026 - g2125 - g2104))) - g2124) - ((lambda (g2127) - (list '#(syntax-object - quote - ((top) - #(ribcage - #(p) - #((top)) - #("i")) - #(ribcage - () - () - ()) - #(ribcage - #(p - lev) - #((top) - (top)) - #("i" - "i")) - #(ribcage - #(isquote? - islist? - iscons? - quote-nil? - quasilist* - quasicons - quasiappend - quasivector - quasi) - #((top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top)) - #("i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - g2127)) - g2106))) - ($syntax-dispatch - g2106 - '#(vector - each-any))))) - ($syntax-dispatch - g2106 - '(any . any))))) - ($syntax-dispatch - g2106 - '(#(free-id - #(syntax-object - quasiquote - ((top) - #(ribcage () () ()) - #(ribcage - #(p lev) - #((top) (top)) - #("i" "i")) - #(ribcage - #(isquote? - islist? - iscons? - quote-nil? - quasilist* - quasicons - quasiappend - quasivector - quasi) - #((top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top)) - #("i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i")) - #(ribcage - ((import-token . *top*)) - () - ())))) - any))))) - ($syntax-dispatch - g2106 - '((#(free-id - #(syntax-object - unquote-splicing - ((top) - #(ribcage () () ()) - #(ribcage - #(p lev) - #((top) (top)) - #("i" "i")) - #(ribcage - #(isquote? - islist? - iscons? - quote-nil? - quasilist* - quasicons - quasiappend - quasivector - quasi) - #((top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top)) - #("i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i")) - #(ribcage - ((import-token . *top*)) - () - ())))) - . - each-any) - . - any))))) - ($syntax-dispatch - g2106 - '((#(free-id - #(syntax-object - unquote - ((top) - #(ribcage () () ()) - #(ribcage - #(p lev) - #((top) (top)) - #("i" "i")) - #(ribcage - #(isquote? - islist? - iscons? - quote-nil? - quasilist* - quasicons - quasiappend - quasivector - quasi) - #((top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top)) - #("i" - "i" - "i" - "i" - "i" - "i" - "i" - "i" - "i")) - #(ribcage - ((import-token . *top*)) - () - ())))) - . - each-any) - . - any))))) - ($syntax-dispatch - g2106 - '(#(free-id - #(syntax-object - unquote - ((top) - #(ribcage () () ()) - #(ribcage #(p lev) #((top) (top)) #("i" "i")) - #(ribcage - #(isquote? - islist? - iscons? - quote-nil? - quasilist* - quasicons - quasiappend - quasivector - quasi) - #((top) - (top) - (top) - (top) - (top) - (top) - (top) - (top) - (top)) - #("i" "i" "i" "i" "i" "i" "i" "i" "i")) - #(ribcage ((import-token . *top*)) () ())))) - any)))) - g2105)))) - (lambda (g2031) - ((lambda (g2032) - ((lambda (g2033) - (if g2033 - (apply (lambda (g2035 g2034) (g2026 g2034 '0)) g2033) - (syntax-error g2032))) - ($syntax-dispatch g2032 '(any any)))) - g2031)))) -($sc-put-cte - 'include - (lambda (g2143) - (letrec ((g2144 - (lambda (g2155 g2154) - ((lambda (g2156) - ((letrec ((g2157 - (lambda () - ((lambda (g2158) - (if (eof-object? g2158) - (begin (close-input-port g2156) '()) - (cons (datum->syntax-object - g2154 - g2158) - (g2157)))) - (read g2156))))) - g2157))) - (open-input-file g2155))))) - ((lambda (g2145) - ((lambda (g2146) - (if g2146 - (apply - (lambda (g2148 g2147) - ((lambda (g2149) - ((lambda (g2150) - ((lambda (g2151) - (if g2151 - (apply - (lambda (g2152) - (cons '#(syntax-object - begin - ((top) - #(ribcage - #(exp) - #((top)) - #("i")) - #(ribcage () () ()) - #(ribcage () () ()) - #(ribcage - #(fn) - #((top)) - #("i")) - #(ribcage - #(k filename) - #((top) (top)) - #("i" "i")) - #(ribcage - (read-file) - ((top)) - ("i")) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token . *top*)) - () - ()))) - g2152)) - g2151) - (syntax-error g2150))) - ($syntax-dispatch g2150 'each-any))) - (g2144 g2149 g2148))) - (syntax-object->datum g2147))) - g2146) - (syntax-error g2145))) - ($syntax-dispatch g2145 '(any any)))) - g2143)))) -($sc-put-cte - 'unquote - (lambda (g2159) - ((lambda (g2160) - ((lambda (g2161) - (if g2161 - (apply - (lambda (g2163 g2162) - (syntax-error - g2159 - '"expression not valid outside of quasiquote")) - g2161) - (syntax-error g2160))) - ($syntax-dispatch g2160 '(any . each-any)))) - g2159))) -($sc-put-cte - 'unquote-splicing - (lambda (g2164) - ((lambda (g2165) - ((lambda (g2166) - (if g2166 - (apply - (lambda (g2168 g2167) - (syntax-error - g2164 - '"expression not valid outside of quasiquote")) - g2166) - (syntax-error g2165))) - ($syntax-dispatch g2165 '(any . each-any)))) - g2164))) -($sc-put-cte - 'case - (lambda (g2169) - ((lambda (g2170) - ((lambda (g2171) - (if g2171 - (apply - (lambda (g2175 g2172 g2174 g2173) - ((lambda (g2176) - ((lambda (g2203) - (list '#(syntax-object - let - ((top) - #(ribcage #(body) #((top)) #("i")) - #(ribcage - #(_ e m1 m2) - #((top) (top) (top) (top)) - #("i" "i" "i" "i")) - #(ribcage () () ()) - #(ribcage #(x) #((top)) #("i")) - #(ribcage - ((import-token . *top*)) - () - ()))) - (list (list '#(syntax-object - t - ((top) - #(ribcage - #(body) - #((top)) - #("i")) - #(ribcage - #(_ e m1 m2) - #((top) (top) (top) (top)) - #("i" "i" "i" "i")) - #(ribcage () () ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token . *top*)) - () - ()))) - g2172)) - g2203)) - g2176)) - ((letrec ((g2177 - (lambda (g2179 g2178) - (if (null? g2178) - ((lambda (g2180) - ((lambda (g2181) - (if g2181 - (apply - (lambda (g2183 g2182) - (cons '#(syntax-object - begin - ((top) - #(ribcage - #(e1 e2) - #((top) - (top)) - #("i" "i")) - #(ribcage - () - () - ()) - #(ribcage - #(clause - clauses) - #((top) - (top)) - #("i" "i")) - #(ribcage - #(f) - #((top)) - #("i")) - #(ribcage - #(_ e m1 m2) - #((top) - (top) - (top) - (top)) - #("i" - "i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - (cons g2183 - g2182))) - g2181) - ((lambda (g2185) - (if g2185 - (apply - (lambda (g2188 - g2186 - g2187) - (list '#(syntax-object - if - ((top) - #(ribcage - #(k - e1 - e2) - #((top) - (top) - (top)) - #("i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(clause - clauses) - #((top) - (top)) - #("i" - "i")) - #(ribcage - #(f) - #((top)) - #("i")) - #(ribcage - #(_ - e - m1 - m2) - #((top) - (top) - (top) - (top)) - #("i" - "i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - (list '#(syntax-object - memv - ((top) - #(ribcage - #(k - e1 - e2) - #((top) - (top) - (top)) - #("i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(clause - clauses) - #((top) - (top)) - #("i" - "i")) - #(ribcage - #(f) - #((top)) - #("i")) - #(ribcage - #(_ - e - m1 - m2) - #((top) - (top) - (top) - (top)) - #("i" - "i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - '#(syntax-object - t - ((top) - #(ribcage - #(k - e1 - e2) - #((top) - (top) - (top)) - #("i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(clause - clauses) - #((top) - (top)) - #("i" - "i")) - #(ribcage - #(f) - #((top)) - #("i")) - #(ribcage - #(_ - e - m1 - m2) - #((top) - (top) - (top) - (top)) - #("i" - "i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - (list '#(syntax-object - quote - ((top) - #(ribcage - #(k - e1 - e2) - #((top) - (top) - (top)) - #("i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(clause - clauses) - #((top) - (top)) - #("i" - "i")) - #(ribcage - #(f) - #((top)) - #("i")) - #(ribcage - #(_ - e - m1 - m2) - #((top) - (top) - (top) - (top)) - #("i" - "i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - g2188)) - (cons '#(syntax-object - begin - ((top) - #(ribcage - #(k - e1 - e2) - #((top) - (top) - (top)) - #("i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(clause - clauses) - #((top) - (top)) - #("i" - "i")) - #(ribcage - #(f) - #((top)) - #("i")) - #(ribcage - #(_ - e - m1 - m2) - #((top) - (top) - (top) - (top)) - #("i" - "i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - (cons g2186 - g2187)))) - g2185) - ((lambda (g2191) - (syntax-error - g2169)) - g2180))) - ($syntax-dispatch - g2180 - '(each-any - any - . - each-any))))) - ($syntax-dispatch - g2180 - '(#(free-id - #(syntax-object - else - ((top) - #(ribcage () () ()) - #(ribcage - #(clause clauses) - #((top) (top)) - #("i" "i")) - #(ribcage - #(f) - #((top)) - #("i")) - #(ribcage - #(_ e m1 m2) - #((top) - (top) - (top) - (top)) - #("i" "i" "i" "i")) - #(ribcage () () ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token . *top*)) - () - ())))) - any - . - each-any)))) - g2179) - ((lambda (g2192) - ((lambda (g2193) - ((lambda (g2194) - ((lambda (g2195) - (if g2195 - (apply - (lambda (g2198 - g2196 - g2197) - (list '#(syntax-object - if - ((top) - #(ribcage - #(k - e1 - e2) - #((top) - (top) - (top)) - #("i" - "i" - "i")) - #(ribcage - #(rest) - #((top)) - #("i")) - #(ribcage - () - () - ()) - #(ribcage - #(clause - clauses) - #((top) - (top)) - #("i" - "i")) - #(ribcage - #(f) - #((top)) - #("i")) - #(ribcage - #(_ - e - m1 - m2) - #((top) - (top) - (top) - (top)) - #("i" - "i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - (list '#(syntax-object - memv - ((top) - #(ribcage - #(k - e1 - e2) - #((top) - (top) - (top)) - #("i" - "i" - "i")) - #(ribcage - #(rest) - #((top)) - #("i")) - #(ribcage - () - () - ()) - #(ribcage - #(clause - clauses) - #((top) - (top)) - #("i" - "i")) - #(ribcage - #(f) - #((top)) - #("i")) - #(ribcage - #(_ - e - m1 - m2) - #((top) - (top) - (top) - (top)) - #("i" - "i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - '#(syntax-object - t - ((top) - #(ribcage - #(k - e1 - e2) - #((top) - (top) - (top)) - #("i" - "i" - "i")) - #(ribcage - #(rest) - #((top)) - #("i")) - #(ribcage - () - () - ()) - #(ribcage - #(clause - clauses) - #((top) - (top)) - #("i" - "i")) - #(ribcage - #(f) - #((top)) - #("i")) - #(ribcage - #(_ - e - m1 - m2) - #((top) - (top) - (top) - (top)) - #("i" - "i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - (list '#(syntax-object - quote - ((top) - #(ribcage - #(k - e1 - e2) - #((top) - (top) - (top)) - #("i" - "i" - "i")) - #(ribcage - #(rest) - #((top)) - #("i")) - #(ribcage - () - () - ()) - #(ribcage - #(clause - clauses) - #((top) - (top)) - #("i" - "i")) - #(ribcage - #(f) - #((top)) - #("i")) - #(ribcage - #(_ - e - m1 - m2) - #((top) - (top) - (top) - (top)) - #("i" - "i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - g2198)) - (cons '#(syntax-object - begin - ((top) - #(ribcage - #(k - e1 - e2) - #((top) - (top) - (top)) - #("i" - "i" - "i")) - #(ribcage - #(rest) - #((top)) - #("i")) - #(ribcage - () - () - ()) - #(ribcage - #(clause - clauses) - #((top) - (top)) - #("i" - "i")) - #(ribcage - #(f) - #((top)) - #("i")) - #(ribcage - #(_ - e - m1 - m2) - #((top) - (top) - (top) - (top)) - #("i" - "i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - (cons g2196 - g2197)) - g2193)) - g2195) - ((lambda (g2201) - (syntax-error - g2169)) - g2194))) - ($syntax-dispatch - g2194 - '(each-any - any - . - each-any)))) - g2179)) - g2192)) - (g2177 (car g2178) (cdr g2178))))))) - g2177) - g2174 - g2173))) - g2171) - (syntax-error g2170))) - ($syntax-dispatch g2170 '(any any any . each-any)))) - g2169))) -($sc-put-cte - 'identifier-syntax - (lambda (g2204) - ((lambda (g2205) - ((lambda (g2206) - (if g2206 - (apply - (lambda (g2208 g2207) - (list '#(syntax-object - lambda - ((top) - #(ribcage #(_ e) #((top) (top)) #("i" "i")) - #(ribcage () () ()) - #(ribcage #(x) #((top)) #("i")) - #(ribcage ((import-token . *top*)) () ()))) - '(#(syntax-object - x - ((top) - #(ribcage #(_ e) #((top) (top)) #("i" "i")) - #(ribcage () () ()) - #(ribcage #(x) #((top)) #("i")) - #(ribcage ((import-token . *top*)) () ())))) - (list '#(syntax-object - syntax-case - ((top) - #(ribcage - #(_ e) - #((top) (top)) - #("i" "i")) - #(ribcage () () ()) - #(ribcage #(x) #((top)) #("i")) - #(ribcage - ((import-token . *top*)) - () - ()))) - '#(syntax-object - x - ((top) - #(ribcage - #(_ e) - #((top) (top)) - #("i" "i")) - #(ribcage () () ()) - #(ribcage #(x) #((top)) #("i")) - #(ribcage - ((import-token . *top*)) - () - ()))) - '() - (list '#(syntax-object - id - ((top) - #(ribcage - #(_ e) - #((top) (top)) - #("i" "i")) - #(ribcage () () ()) - #(ribcage #(x) #((top)) #("i")) - #(ribcage - ((import-token . *top*)) - () - ()))) - '(#(syntax-object - identifier? - ((top) - #(ribcage - #(_ e) - #((top) (top)) - #("i" "i")) - #(ribcage () () ()) - #(ribcage #(x) #((top)) #("i")) - #(ribcage - ((import-token . *top*)) - () - ()))) - (#(syntax-object - syntax - ((top) - #(ribcage - #(_ e) - #((top) (top)) - #("i" "i")) - #(ribcage () () ()) - #(ribcage #(x) #((top)) #("i")) - #(ribcage - ((import-token . *top*)) - () - ()))) - #(syntax-object - id - ((top) - #(ribcage - #(_ e) - #((top) (top)) - #("i" "i")) - #(ribcage () () ()) - #(ribcage #(x) #((top)) #("i")) - #(ribcage - ((import-token . *top*)) - () - ()))))) - (list '#(syntax-object - syntax - ((top) - #(ribcage - #(_ e) - #((top) (top)) - #("i" "i")) - #(ribcage () () ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token . *top*)) - () - ()))) - g2207)) - (list (cons g2208 - '(#(syntax-object - x - ((top) - #(ribcage - #(_ e) - #((top) (top)) - #("i" "i")) - #(ribcage () () ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token . *top*)) - () - ()))) - #(syntax-object - ... - ((top) - #(ribcage - #(_ e) - #((top) (top)) - #("i" "i")) - #(ribcage () () ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token . *top*)) - () - ()))))) - (list '#(syntax-object - syntax - ((top) - #(ribcage - #(_ e) - #((top) (top)) - #("i" "i")) - #(ribcage () () ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token . *top*)) - () - ()))) - (cons g2207 - '(#(syntax-object - x - ((top) - #(ribcage - #(_ e) - #((top) (top)) - #("i" "i")) - #(ribcage () () ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - #(syntax-object - ... - ((top) - #(ribcage - #(_ e) - #((top) (top)) - #("i" "i")) - #(ribcage () () ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ())))))))))) - g2206) - ((lambda (g2209) - (if (if g2209 - (apply - (lambda (g2215 g2210 g2214 g2211 g2213 g2212) - (if (identifier? g2210) - (identifier? g2211) - '#f)) - g2209) - '#f) - (apply - (lambda (g2221 g2216 g2220 g2217 g2219 g2218) - (list '#(syntax-object - cons - ((top) - #(ribcage - #(_ id exp1 var val exp2) - #((top) (top) (top) (top) (top) (top)) - #("i" "i" "i" "i" "i" "i")) - #(ribcage () () ()) - #(ribcage #(x) #((top)) #("i")) - #(ribcage - ((import-token . *top*)) - () - ()))) - '(#(syntax-object - quote - ((top) - #(ribcage - #(_ id exp1 var val exp2) - #((top) - (top) - (top) - (top) - (top) - (top)) - #("i" "i" "i" "i" "i" "i")) - #(ribcage () () ()) - #(ribcage #(x) #((top)) #("i")) - #(ribcage - ((import-token . *top*)) - () - ()))) - #(syntax-object - macro! - ((top) - #(ribcage - #(_ id exp1 var val exp2) - #((top) - (top) - (top) - (top) - (top) - (top)) - #("i" "i" "i" "i" "i" "i")) - #(ribcage () () ()) - #(ribcage #(x) #((top)) #("i")) - #(ribcage - ((import-token . *top*)) - () - ())))) - (list '#(syntax-object - lambda - ((top) - #(ribcage - #(_ id exp1 var val exp2) - #((top) - (top) - (top) - (top) - (top) - (top)) - #("i" "i" "i" "i" "i" "i")) - #(ribcage () () ()) - #(ribcage #(x) #((top)) #("i")) - #(ribcage - ((import-token . *top*)) - () - ()))) - '(#(syntax-object - x - ((top) - #(ribcage - #(_ id exp1 var val exp2) - #((top) - (top) - (top) - (top) - (top) - (top)) - #("i" "i" "i" "i" "i" "i")) - #(ribcage () () ()) - #(ribcage #(x) #((top)) #("i")) - #(ribcage - ((import-token . *top*)) - () - ())))) - (list '#(syntax-object - syntax-case - ((top) - #(ribcage - #(_ id exp1 var val exp2) - #((top) - (top) - (top) - (top) - (top) - (top)) - #("i" - "i" - "i" - "i" - "i" - "i")) - #(ribcage () () ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token . *top*)) - () - ()))) - '#(syntax-object - x - ((top) - #(ribcage - #(_ id exp1 var val exp2) - #((top) - (top) - (top) - (top) - (top) - (top)) - #("i" - "i" - "i" - "i" - "i" - "i")) - #(ribcage () () ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token . *top*)) - () - ()))) - '(#(syntax-object - set! - ((top) - #(ribcage - #(_ id exp1 var val exp2) - #((top) - (top) - (top) - (top) - (top) - (top)) - #("i" - "i" - "i" - "i" - "i" - "i")) - #(ribcage () () ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token . *top*)) - () - ())))) - (list (list '#(syntax-object - set! - ((top) - #(ribcage - #(_ - id - exp1 - var - val - exp2) - #((top) - (top) - (top) - (top) - (top) - (top)) - #("i" - "i" - "i" - "i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - g2217 - g2219) - (list '#(syntax-object - syntax - ((top) - #(ribcage - #(_ - id - exp1 - var - val - exp2) - #((top) - (top) - (top) - (top) - (top) - (top)) - #("i" - "i" - "i" - "i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - g2218)) - (list (cons g2216 - '(#(syntax-object - x - ((top) - #(ribcage - #(_ - id - exp1 - var - val - exp2) - #((top) - (top) - (top) - (top) - (top) - (top)) - #("i" - "i" - "i" - "i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - #(syntax-object - ... - ((top) - #(ribcage - #(_ - id - exp1 - var - val - exp2) - #((top) - (top) - (top) - (top) - (top) - (top)) - #("i" - "i" - "i" - "i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))))) - (list '#(syntax-object - syntax - ((top) - #(ribcage - #(_ - id - exp1 - var - val - exp2) - #((top) - (top) - (top) - (top) - (top) - (top)) - #("i" - "i" - "i" - "i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - (cons g2220 - '(#(syntax-object - x - ((top) - #(ribcage - #(_ - id - exp1 - var - val - exp2) - #((top) - (top) - (top) - (top) - (top) - (top)) - #("i" - "i" - "i" - "i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - #(syntax-object - ... - ((top) - #(ribcage - #(_ - id - exp1 - var - val - exp2) - #((top) - (top) - (top) - (top) - (top) - (top)) - #("i" - "i" - "i" - "i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))))))) - (list g2216 - (list '#(syntax-object - identifier? - ((top) - #(ribcage - #(_ - id - exp1 - var - val - exp2) - #((top) - (top) - (top) - (top) - (top) - (top)) - #("i" - "i" - "i" - "i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - (list '#(syntax-object - syntax - ((top) - #(ribcage - #(_ - id - exp1 - var - val - exp2) - #((top) - (top) - (top) - (top) - (top) - (top)) - #("i" - "i" - "i" - "i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - g2216)) - (list '#(syntax-object - syntax - ((top) - #(ribcage - #(_ - id - exp1 - var - val - exp2) - #((top) - (top) - (top) - (top) - (top) - (top)) - #("i" - "i" - "i" - "i" - "i" - "i")) - #(ribcage - () - () - ()) - #(ribcage - #(x) - #((top)) - #("i")) - #(ribcage - ((import-token - . - *top*)) - () - ()))) - g2220)))))) - g2209) - (syntax-error g2205))) - ($syntax-dispatch - g2205 - '(any (any any) - ((#(free-id - #(syntax-object - set! - ((top) - #(ribcage () () ()) - #(ribcage #(x) #((top)) #("i")) - #(ribcage ((import-token . *top*)) () ())))) - any - any) - any)))))) - ($syntax-dispatch g2205 '(any any)))) - g2204))) diff --git a/module/language/r5rs/psyntax.ss b/module/language/r5rs/psyntax.ss deleted file mode 100644 index c8ac3e503..000000000 --- a/module/language/r5rs/psyntax.ss +++ /dev/null @@ -1,3202 +0,0 @@ -;;; Portable implementation of syntax-case -;;; Extracted from Chez Scheme Version 6.3 -;;; Authors: R. Kent Dybvig, Oscar Waddell, Bob Hieb, Carl Bruggeman - -;;; Copyright (c) 1992-2000 Cadence Research Systems -;;; Permission to copy this software, in whole or in part, to use this -;;; software for any lawful purpose, and to redistribute this software -;;; is granted subject to the restriction that all copies made of this -;;; software must include this copyright notice in full. This software -;;; is provided AS IS, with NO WARRANTY, EITHER EXPRESS OR IMPLIED, -;;; INCLUDING BUT NOT LIMITED TO IMPLIED WARRANTIES OF MERCHANTABILITY -;;; OR FITNESS FOR ANY PARTICULAR PURPOSE. IN NO EVENT SHALL THE -;;; AUTHORS BE LIABLE FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES OF ANY -;;; NATURE WHATSOEVER. - -;;; Before attempting to port this code to a new implementation of -;;; Scheme, please read the notes below carefully. - -;;; This file defines the syntax-case expander, sc-expand, and a set -;;; of associated syntactic forms and procedures. Of these, the -;;; following are documented in The Scheme Programming Language, -;;; Second Edition (R. Kent Dybvig, Prentice Hall, 1996), which can be -;;; found online at http://www.scheme.com. Most are also documented -;;; in the R4RS and draft R5RS. -;;; -;;; bound-identifier=? -;;; datum->syntax-object -;;; define-syntax -;;; fluid-let-syntax -;;; free-identifier=? -;;; generate-temporaries -;;; identifier? -;;; identifier-syntax -;;; let-syntax -;;; letrec-syntax -;;; syntax -;;; syntax-case -;;; syntax-object->datum -;;; syntax-rules -;;; with-syntax -;;; -;;; All standard Scheme syntactic forms are supported by the expander -;;; or syntactic abstractions defined in this file. Only the R4RS -;;; delay is omitted, since its expansion is implementation-dependent. - -;;; Also defined are three forms that support modules: module, import, -;;; and import-only. These are documented in the Chez Scheme User's -;;; Guide (R. Kent Dybvig, Cadence Research Systems, 1998), which can -;;; also be found online at http://www.scheme.com. They are described -;;; briefly here as well. -;;; -;;; Both are definitions and may appear where and only where other -;;; definitions may appear. modules may be named: -;;; -;;; (module id (ex ...) defn ... init ...) -;;; -;;; or anonymous: -;;; -;;; (module (ex ...) defn ... init ...) -;;; -;;; The latter form is semantically equivalent to: -;;; -;;; (module T (ex ...) defn ... init ...) -;;; (import T) -;;; -;;; where T is a fresh identifier. -;;; -;;; In either form, each of the exports in (ex ...) is either an -;;; identifier or of the form (id ex ...). In the former case, the -;;; single identifier ex is exported. In the latter, the identifier -;;; id is exported and the exports ex ... are "implicitly" exported. -;;; This listing of implicit exports is useful only when id is a -;;; keyword bound to a transformer that expands into references to -;;; the listed implicit exports. In the present implementation, -;;; listing of implicit exports is necessary only for top-level -;;; modules and allows the implementation to avoid placing all -;;; identifiers into the top-level environment where subsequent passes -;;; of the compiler will be unable to deal effectively with them. -;;; -;;; Named modules may be referenced in import statements, which -;;; always take one of the forms: -;;; -;;; (import id) -;;; (import-only id) -;;; -;;; id must name a module. Each exported identifier becomes visible -;;; within the scope of the import form. In the case of import-only, -;;; all other identifiers become invisible in the scope of the -;;; import-only form, except for those established by definitions -;;; that appear textually after the import-only form. - -;;; The remaining exports are listed below. sc-expand, eval-when, and -;;; syntax-error are described in the Chez Scheme User's Guide. -;;; -;;; (sc-expand datum) -;;; if datum represents a valid expression, sc-expand returns an -;;; expanded version of datum in a core language that includes no -;;; syntactic abstractions. The core language includes begin, -;;; define, if, lambda, letrec, quote, and set!. -;;; (eval-when situations expr ...) -;;; conditionally evaluates expr ... at compile-time or run-time -;;; depending upon situations -;;; (syntax-error object message) -;;; used to report errors found during expansion -;;; ($syntax-dispatch e p) -;;; used by expanded code to handle syntax-case matching -;;; ($sc-put-cte symbol val) -;;; used to establish top-level compile-time (expand-time) bindings. - -;;; The following nonstandard procedures must be provided by the -;;; implementation for this code to run. -;;; -;;; (void) -;;; returns the implementation's cannonical "unspecified value". The -;;; following usually works: -;;; -;;; (define void (lambda () (if #f #f))). -;;; -;;; (andmap proc list1 list2 ...) -;;; returns true if proc returns true when applied to each element of list1 -;;; along with the corresponding elements of list2 .... The following -;;; definition works but does no error checking: -;;; -;;; (define andmap -;;; (lambda (f first . rest) -;;; (or (null? first) -;;; (if (null? rest) -;;; (let andmap ((first first)) -;;; (let ((x (car first)) (first (cdr first))) -;;; (if (null? first) -;;; (f x) -;;; (and (f x) (andmap first))))) -;;; (let andmap ((first first) (rest rest)) -;;; (let ((x (car first)) -;;; (xr (map car rest)) -;;; (first (cdr first)) -;;; (rest (map cdr rest))) -;;; (if (null? first) -;;; (apply f (cons x xr)) -;;; (and (apply f (cons x xr)) (andmap first rest))))))))) -;;; -;;; (ormap proc list1) -;;; returns the first non-false return result of proc applied to -;;; the elements of list1 or false if none. The following definition -;;; works but does no error checking: -;;; -;;; (define ormap -;;; (lambda (proc list1) -;;; (and (not (null? list1)) -;;; (or (proc (car list1)) (ormap proc (cdr list1)))))) -;;; -;;; The following nonstandard procedures must also be provided by the -;;; implementation for this code to run using the standard portable -;;; hooks and output constructors. They are not used by expanded code, -;;; and so need be present only at expansion time. -;;; -;;; (eval x) -;;; where x is always in the form ("noexpand" expr). -;;; returns the value of expr. the "noexpand" flag is used to tell the -;;; evaluator/expander that no expansion is necessary, since expr has -;;; already been fully expanded to core forms. -;;; -;;; eval will not be invoked during the loading of psyntax.pp. After -;;; psyntax.pp has been loaded, the expansion of any macro definition, -;;; whether local or global, results in a call to eval. If, however, -;;; sc-expand has already been registered as the expander to be used -;;; by eval, and eval accepts one argument, nothing special must be done -;;; to support the "noexpand" flag, since it is handled by sc-expand. -;;; -;;; (error who format-string why what) -;;; where who is either a symbol or #f, format-string is always "~a ~s", -;;; why is always a string, and what may be any object. error should -;;; signal an error with a message something like -;;; -;;; "error in <who>: <why> <what>" -;;; -;;; (gensym) -;;; returns a unique symbol each time it's called. In Chez Scheme, gensym -;;; returns a symbol with a "globally" unique name so that gensyms that -;;; end up in the object code of separately compiled files cannot conflict. -;;; This is necessary only if you intend to support compiled files. -;;; -;;; (putprop symbol key value) -;;; (getprop symbol key) -;;; (remprop symbol key) -;;; key is always a symbol; value may be any object. putprop should -;;; associate the given value with the given symbol and key in some way -;;; that it can be retrieved later with getprop. getprop should return -;;; #f if no value is associated with the given symbol and key. remprop -;;; should remove the association between the given symbol and key. - -;;; When porting to a new Scheme implementation, you should define the -;;; procedures listed above, load the expanded version of psyntax.ss -;;; (psyntax.pp, which should be available whereever you found -;;; psyntax.ss), and register sc-expand as the current expander (how -;;; you do this depends upon your implementation of Scheme). You may -;;; change the hooks and constructors defined toward the beginning of -;;; the code below, but to avoid bootstrapping problems, do so only -;;; after you have a working version of the expander. - -;;; Chez Scheme allows the syntactic form (syntax <template>) to be -;;; abbreviated to #'<template>, just as (quote <datum>) may be -;;; abbreviated to '<datum>. The #' syntax makes programs written -;;; using syntax-case shorter and more readable and draws out the -;;; intuitive connection between syntax and quote. If you have access -;;; to the source code of your Scheme system's reader, you might want -;;; to implement this extension. - -;;; If you find that this code loads or runs slowly, consider -;;; switching to faster hardware or a faster implementation of -;;; Scheme. In Chez Scheme on a 200Mhz Pentium Pro, expanding, -;;; compiling (with full optimization), and loading this file takes -;;; between one and two seconds. - -;;; In the expander implementation, we sometimes use syntactic abstractions -;;; when procedural abstractions would suffice. For example, we define -;;; top-wrap and top-marked? as -;;; (define-syntax top-wrap (identifier-syntax '((top)))) -;;; (define-syntax top-marked? -;;; (syntax-rules () -;;; ((_ w) (memq 'top (wrap-marks w))))) -;;; rather than -;;; (define top-wrap '((top))) -;;; (define top-marked? -;;; (lambda (w) (memq 'top (wrap-marks w)))) -;;; On ther other hand, we don't do this consistently; we define make-wrap, -;;; wrap-marks, and wrap-subst simply as -;;; (define make-wrap cons) -;;; (define wrap-marks car) -;;; (define wrap-subst cdr) -;;; In Chez Scheme, the syntactic and procedural forms of these -;;; abstractions are equivalent, since the optimizer consistently -;;; integrates constants and small procedures. Some Scheme -;;; implementations, however, may benefit from more consistent use -;;; of one form or the other. - - -;;; Implementation notes: - -;;; "begin" is treated as a splicing construct at top level and at -;;; the beginning of bodies. Any sequence of expressions that would -;;; be allowed where the "begin" occurs is allowed. - -;;; "let-syntax" and "letrec-syntax" are also treated as splicing -;;; constructs, in violation of the R5RS. A consequence is that let-syntax -;;; and letrec-syntax do not create local contours, as do let and letrec. -;;; Although the functionality is greater as it is presently implemented, -;;; we will probably change it to conform to the R5RS. modules provide -;;; similar functionality to nonsplicing letrec-syntax when the latter is -;;; used as a definition. - -;;; Objects with no standard print syntax, including objects containing -;;; cycles and syntax objects, are allowed in quoted data as long as they -;;; are contained within a syntax form or produced by datum->syntax-object. -;;; Such objects are never copied. - -;;; When the expander encounters a reference to an identifier that has -;;; no global or lexical binding, it treats it as a global-variable -;;; reference. This allows one to write mutually recursive top-level -;;; definitions, e.g.: -;;; -;;; (define f (lambda (x) (g x))) -;;; (define g (lambda (x) (f x))) -;;; -;;; but may not always yield the intended when the variable in question -;;; is later defined as a keyword. - -;;; Top-level variable definitions of syntax keywords are permitted. -;;; In order to make this work, top-level define not only produces a -;;; top-level definition in the core language, but also modifies the -;;; compile-time environment (using $sc-put-cte) to record the fact -;;; that the identifier is a variable. - -;;; Top-level definitions of macro-introduced identifiers are visible -;;; only in code produced by the macro. That is, a binding for a -;;; hidden (generated) identifier is created instead, and subsequent -;;; references within the macro output are renamed accordingly. For -;;; example: -;;; -;;; (define-syntax a -;;; (syntax-rules () -;;; ((_ var exp) -;;; (begin -;;; (define secret exp) -;;; (define var -;;; (lambda () -;;; (set! secret (+ secret 17)) -;;; secret)))))) -;;; (a x 0) -;;; (x) => 17 -;;; (x) => 34 -;;; secret => Error: variable secret is not bound -;;; -;;; The definition above would fail if the definition for secret -;;; were placed after the definition for var, since the expander would -;;; encounter the references to secret before the definition that -;;; establishes the compile-time map from the identifier secret to -;;; the generated identifier. - -;;; Identifiers and syntax objects are implemented as vectors for -;;; portability. As a result, it is possible to "forge" syntax -;;; objects. - -;;; The input to sc-expand may contain "annotations" describing, e.g., the -;;; source file and character position from where each object was read if -;;; it was read from a file. These annotations are handled properly by -;;; sc-expand only if the annotation? hook (see hooks below) is implemented -;;; properly and the operators make-annotation, annotation-expression, -;;; annotation-source, annotation-stripped, and set-annotation-stripped! -;;; are supplied. If annotations are supplied, the proper annotation -;;; source is passed to the various output constructors, allowing -;;; implementations to accurately correlate source and expanded code. -;;; Contact one of the authors for details if you wish to make use of -;;; this feature. - -;;; Implementation of modules: -;;; -;;; The implementation of modules requires that implicit top-level exports -;;; be listed with the exported macro at some level where both are visible, -;;; e.g., -;;; -;;; (module M (alpha (beta b)) -;;; (module ((alpha a) b) -;;; (define-syntax alpha (identifier-syntax a)) -;;; (define a 'a) -;;; (define b 'b)) -;;; (define-syntax beta (identifier-syntax b))) -;;; -;;; Listing of implicit imports is not needed for macros that do not make -;;; it out to top level, including all macros that are local to a "body". -;;; (They may be listed in this case, however.) We need this information -;;; for top-level modules since a top-level module expands into a letrec -;;; for non-top-level variables and top-level definitions (assignments) for -;;; top-level variables. Because of the general nature of macro -;;; transformers, we cannot determine the set of implicit exports from the -;;; transformer code, so without the user's help, we'd have to put all -;;; variables at top level. -;;; -;;; Each such top-level identifier is given a generated name (gensym). -;;; When a top-level module is imported at top level, a compile-time -;;; alias is established from the top-level name to the generated name. -;;; The expander follows these aliases transparently. When any module is -;;; imported anywhere other than at top level, the id-var-name of the -;;; import identifier is set to the id-var-name of the export identifier. -;;; Since we can't determine the actual labels for identifiers defined in -;;; top-level modules until we determine which are placed in the letrec -;;; and which make it to top level, we give each an "indirect" label---a -;;; pair whose car will eventually contain the actual label. Import does -;;; not follow the indirect, but id-var-name does. -;;; -;;; All identifiers defined within a local module are folded into the -;;; letrec created for the enclosing body. Visibility is controlled in -;;; this case and for nested top-level modules by introducing a new wrap -;;; for each module. - - -;;; Bootstrapping: - -;;; When changing syntax-object representations, it is necessary to support -;;; both old and new syntax-object representations in id-var-name. It -;;; should be sufficient to recognize old representations and treat -;;; them as not lexically bound. - - -(let () - -(define-syntax when - (syntax-rules () - ((_ test e1 e2 ...) (if test (begin e1 e2 ...))))) -(define-syntax unless - (syntax-rules () - ((_ test e1 e2 ...) (when (not test) (begin e1 e2 ...))))) -(define-syntax define-structure - (lambda (x) - (define construct-name - (lambda (template-identifier . args) - (datum->syntax-object - template-identifier - (string->symbol - (apply string-append - (map (lambda (x) - (if (string? x) - x - (symbol->string (syntax-object->datum x)))) - args)))))) - (syntax-case x () - ((_ (name id1 ...)) - (andmap identifier? (syntax (name id1 ...))) - (with-syntax - ((constructor (construct-name (syntax name) "make-" (syntax name))) - (predicate (construct-name (syntax name) (syntax name) "?")) - ((access ...) - (map (lambda (x) (construct-name x (syntax name) "-" x)) - (syntax (id1 ...)))) - ((assign ...) - (map (lambda (x) - (construct-name x "set-" (syntax name) "-" x "!")) - (syntax (id1 ...)))) - (structure-length - (+ (length (syntax (id1 ...))) 1)) - ((index ...) - (let f ((i 1) (ids (syntax (id1 ...)))) - (if (null? ids) - '() - (cons i (f (+ i 1) (cdr ids))))))) - (syntax (begin - (define constructor - (lambda (id1 ...) - (vector 'name id1 ... ))) - (define predicate - (lambda (x) - (and (vector? x) - (= (vector-length x) structure-length) - (eq? (vector-ref x 0) 'name)))) - (define access - (lambda (x) - (vector-ref x index))) - ... - (define assign - (lambda (x update) - (vector-set! x index update))) - ...))))))) - -(define noexpand "noexpand") - -;;; hooks to nonportable run-time helpers -(begin -(define-syntax fx+ (identifier-syntax +)) -(define-syntax fx- (identifier-syntax -)) -(define-syntax fx= (identifier-syntax =)) -(define-syntax fx< (identifier-syntax <)) - -(define annotation? (lambda (x) #f)) - -(define top-level-eval-hook - (lambda (x) - (eval `(,noexpand ,x)))) - -(define local-eval-hook - (lambda (x) - (eval `(,noexpand ,x)))) - -(define error-hook - (lambda (who why what) - (error who "~a ~s" why what))) - -(define-syntax gensym-hook - (syntax-rules () - ((_) (gensym)))) - -(define put-global-definition-hook - (lambda (symbol val) - ($sc-put-cte symbol val))) - -(define get-global-definition-hook - (lambda (symbol) - (getprop symbol '*sc-expander*))) - -(define get-import-binding - (lambda (symbol token) - (getprop symbol token))) - -(define generate-id - (let ((b (- 127 32 2))) - ; session-key should generate a unique integer for each system run - ; to support separate compilation - (define session-key (lambda () 0)) - (define make-digit (lambda (x) (integer->char (fx+ x 33)))) - (define fmt - (lambda (n) - (let fmt ((n n) (a '())) - (if (< n b) - (list->string (cons (make-digit n) a)) - (let ((r (modulo n b)) (rest (quotient n b))) - (fmt rest (cons (make-digit r) a))))))) - (let ((prefix (fmt (session-key))) (n -1)) - (lambda (name) - (set! n (+ n 1)) - (let ((newsym (string->symbol (string-append "#" prefix (fmt n))))) - newsym))))) -) - - -;;; output constructors -(begin -(define-syntax build-application - (syntax-rules () - ((_ source fun-exp arg-exps) - `(,fun-exp . ,arg-exps)))) - -(define-syntax build-conditional - (syntax-rules () - ((_ source test-exp then-exp else-exp) - `(if ,test-exp ,then-exp ,else-exp)))) - -(define-syntax build-lexical-reference - (syntax-rules () - ((_ type source var) - var))) - -(define-syntax build-lexical-assignment - (syntax-rules () - ((_ source var exp) - `(set! ,var ,exp)))) - -(define-syntax build-global-reference - (syntax-rules () - ((_ source var) - var))) - -(define-syntax build-global-assignment - (syntax-rules () - ((_ source var exp) - `(set! ,var ,exp)))) - -(define-syntax build-global-definition - (syntax-rules () - ((_ source var exp) - `(define ,var ,exp)))) - -(define-syntax build-module-definition - ; should have the effect of a global definition but may not appear at top level - (identifier-syntax build-global-assignment)) - -(define-syntax build-cte-install - ; should build a call that has the same effect as calling the - ; global definition hook - (syntax-rules () - ((_ sym exp) `($sc-put-cte ',sym ,exp)))) - -(define-syntax build-lambda - (syntax-rules () - ((_ src vars exp) - `(lambda ,vars ,exp)))) - -(define-syntax build-primref - (syntax-rules () - ((_ src name) name) - ((_ src level name) name))) - -(define-syntax build-data - (syntax-rules () - ((_ src exp) `',exp))) - -(define build-sequence - (lambda (src exps) - (if (null? (cdr exps)) - (car exps) - `(begin ,@exps)))) - -(define build-letrec - (lambda (src vars val-exps body-exp) - (if (null? vars) - body-exp - `(letrec ,(map list vars val-exps) ,body-exp)))) - -(define-syntax build-lexical-var - (syntax-rules () - ((_ src id) (gensym)))) - -(define-syntax self-evaluating? - (syntax-rules () - ((_ e) - (let ((x e)) - (or (boolean? x) (number? x) (string? x) (char? x) (null? x)))))) -) - -(define-structure (syntax-object expression wrap)) - -(define-syntax unannotate - (syntax-rules () - ((_ x) - (let ((e x)) - (if (annotation? e) - (annotation-expression e) - e))))) - -(define-syntax no-source (identifier-syntax #f)) - -(define source-annotation - (lambda (x) - (cond - ((annotation? x) (annotation-source x)) - ((syntax-object? x) (source-annotation (syntax-object-expression x))) - (else no-source)))) - -(define-syntax arg-check - (syntax-rules () - ((_ pred? e who) - (let ((x e)) - (if (not (pred? x)) (error-hook who "invalid argument" x)))))) - -;;; compile-time environments - -;;; wrap and environment comprise two level mapping. -;;; wrap : id --> label -;;; env : label --> <element> - -;;; environments are represented in two parts: a lexical part and a global -;;; part. The lexical part is a simple list of associations from labels -;;; to bindings. The global part is implemented by -;;; {put,get}-global-definition-hook and associates symbols with -;;; bindings. - -;;; global (assumed global variable) and displaced-lexical (see below) -;;; do not show up in any environment; instead, they are fabricated by -;;; lookup when it finds no other bindings. - -;;; <environment> ::= ((<label> . <binding>)*) - -;;; identifier bindings include a type and a value - -;;; <binding> ::= (macro . <procedure>) macros -;;; (deferred . <expanded code>) lazy-evaluation of transformers -;;; (core . <procedure>) core forms -;;; (begin) begin -;;; (define) define -;;; (define-syntax) define-syntax -;;; (local-syntax . rec?) let-syntax/letrec-syntax -;;; (eval-when) eval-when -;;; (syntax . (<var> . <level>)) pattern variables -;;; (global . <symbol>) assumed global variable -;;; (lexical . <var>) lexical variables -;;; (displaced-lexical . #f) id-var-name not found in store -;;; <level> ::= <nonnegative integer> -;;; <var> ::= variable returned by build-lexical-var - -;;; a macro is a user-defined syntactic-form. a core is a system-defined -;;; syntactic form. begin, define, define-syntax, and eval-when are -;;; treated specially since they are sensitive to whether the form is -;;; at top-level and (except for eval-when) can denote valid internal -;;; definitions. - -;;; a pattern variable is a variable introduced by syntax-case and can -;;; be referenced only within a syntax form. - -;;; any identifier for which no top-level syntax definition or local -;;; binding of any kind has been seen is assumed to be a global -;;; variable. - -;;; a lexical variable is a lambda- or letrec-bound variable. - -;;; a displaced-lexical identifier is a lexical identifier removed from -;;; it's scope by the return of a syntax object containing the identifier. -;;; a displaced lexical can also appear when a letrec-syntax-bound -;;; keyword is referenced on the rhs of one of the letrec-syntax clauses. -;;; a displaced lexical should never occur with properly written macros. - -(define make-binding (lambda (x y) (cons x y))) -(define binding-type car) -(define binding-value cdr) -(define set-binding-type! set-car!) -(define set-binding-value! set-cdr!) -(define binding? (lambda (x) (and (pair? x) (symbol? (car x))))) - -(define-syntax null-env (identifier-syntax '())) - -(define extend-env - (lambda (label binding r) - (cons (cons label binding) r))) - -(define extend-env* - (lambda (labels bindings r) - (if (null? labels) - r - (extend-env* (cdr labels) (cdr bindings) - (extend-env (car labels) (car bindings) r))))) - -(define extend-var-env* - ; variant of extend-env* that forms "lexical" binding - (lambda (labels vars r) - (if (null? labels) - r - (extend-var-env* (cdr labels) (cdr vars) - (extend-env (car labels) (make-binding 'lexical (car vars)) r))))) - -;;; we use a "macros only" environment in expansion of local macro -;;; definitions so that their definitions can use local macros without -;;; attempting to use other lexical identifiers. -;;; -;;; - can make this null-env if we don't want to allow macros to use other -;;; macros in defining their transformers -;;; - can add a cache here if it pays off -(define transformer-env - (lambda (r) - (if (null? r) - '() - (let ((a (car r))) - (if (eq? (cadr a) 'lexical) ; only strip out lexical so that (transformer x) works - (transformer-env (cdr r)) - (cons a (transformer-env (cdr r)))))))) - -(define displaced-lexical-error - (lambda (id) - (syntax-error id - (if (id-var-name id empty-wrap) - "identifier out of context" - "identifier not visible")))) - -(define lookup* - ; x may be a label or a symbol - ; although symbols are usually global, we check the environment first - ; anyway because a temporary binding may have been established by - ; fluid-let-syntax - (lambda (x r) - (cond - ((assq x r) => cdr) - ((symbol? x) - (or (get-global-definition-hook x) (make-binding 'global x))) - (else (make-binding 'displaced-lexical #f))))) - -(define sanitize-binding - (lambda (b) - (cond - ((procedure? b) (make-binding 'macro b)) - ((binding? b) - (case (binding-type b) - ((core macro macro!) (and (procedure? (binding-value b)) b)) - ((module) (and (interface? (binding-value b)) b)) - (else b))) - (else #f)))) - -(define lookup - (lambda (x r) - (define whack-binding! - (lambda (b *b) - (set-binding-type! b (binding-type *b)) - (set-binding-value! b (binding-value *b)))) - (let ((b (lookup* x r))) - (case (binding-type b) -; ((*alias) (lookup (id-var-name (binding-value b) empty-wrap) r)) - ((deferred) - (whack-binding! b - (let ((*b (local-eval-hook (binding-value b)))) - (or (sanitize-binding *b) - (syntax-error *b "invalid transformer")))) - (case (binding-type b) -; ((*alias) (lookup (id-var-name (binding-value b) empty-wrap) r)) - (else b))) - (else b))))) - -(define global-extend - (lambda (type sym val) - (put-global-definition-hook sym (make-binding type val)))) - - -;;; Conceptually, identifiers are always syntax objects. Internally, -;;; however, the wrap is sometimes maintained separately (a source of -;;; efficiency and confusion), so that symbols are also considered -;;; identifiers by id?. Externally, they are always wrapped. - -(define nonsymbol-id? - (lambda (x) - (and (syntax-object? x) - (symbol? (unannotate (syntax-object-expression x)))))) - -(define id? - (lambda (x) - (cond - ((symbol? x) #t) - ((syntax-object? x) (symbol? (unannotate (syntax-object-expression x)))) - ((annotation? x) (symbol? (annotation-expression x))) - (else #f)))) - -(define-syntax id-sym-name - (syntax-rules () - ((_ e) - (let ((x e)) - (unannotate (if (syntax-object? x) (syntax-object-expression x) x)))))) - -(define id-sym-name&marks - (lambda (x w) - (if (syntax-object? x) - (values - (unannotate (syntax-object-expression x)) - (join-marks (wrap-marks w) (wrap-marks (syntax-object-wrap x)))) - (values (unannotate x) (wrap-marks w))))) - -;;; syntax object wraps - -;;; <wrap> ::= ((<mark> ...) . (<subst> ...)) -;;; <subst> ::= <ribcage> | <shift> -;;; <ribcage> ::= #((<ex-symname> ...) (<mark> ...) (<label> ...)) ; extensible, for chi-internal/external -;;; | #(#(<symname> ...) #(<mark> ...) #(<label> ...)) ; nonextensible -;;; <ex-symname> ::= <symname> | <import token> | <barrier> -;;; <shift> ::= shift -;;; <barrier> ::= #f ; inserted by import-only -;;; <import token> ::= #<"import-token" <token>> -;;; <token> ::= <generated id> - -(define make-wrap cons) -(define wrap-marks car) -(define wrap-subst cdr) - -(define-syntax subst-rename? (identifier-syntax vector?)) -(define-syntax rename-old (syntax-rules () ((_ x) (vector-ref x 0)))) -(define-syntax rename-new (syntax-rules () ((_ x) (vector-ref x 1)))) -(define-syntax rename-marks (syntax-rules () ((_ x) (vector-ref x 2)))) -(define-syntax make-rename - (syntax-rules () - ((_ old new marks) (vector old new marks)))) - -;;; labels - -;;; simple labels must be comparable with "eq?" and distinct from symbols -;;; and pairs. - -;;; indirect labels, which are implemented as pairs, are used to support -;;; import aliasing for identifiers exported (explictly or implicitly) from -;;; top-level modules. chi-external creates an indirect label for each -;;; defined identifier, import causes the pair to be shared aliases it -;;; establishes, and chi-top-module whacks the pair to hold the top-level -;;; identifier name (symbol) if the id is to be placed at top level, before -;;; expanding the right-hand sides of the definitions in the module. - -(define gen-label - (lambda () (string #\i))) -(define label? - (lambda (x) - (or (string? x) ; normal lexical labels - (symbol? x) ; global labels (symbolic names) - (indirect-label? x)))) - -(define gen-labels - (lambda (ls) - (if (null? ls) - '() - (cons (gen-label) (gen-labels (cdr ls)))))) - -(define gen-indirect-label - (lambda () (list (gen-label)))) - -(define indirect-label? pair?) -(define get-indirect-label car) -(define set-indirect-label! set-car!) - -(define-structure (ribcage symnames marks labels)) -(define-syntax empty-wrap (identifier-syntax '(()))) - -(define-syntax top-wrap (identifier-syntax '((top)))) - -(define-syntax top-marked? - (syntax-rules () - ((_ w) (memq 'top (wrap-marks w))))) - -(define-syntax only-top-marked? - (syntax-rules () - ((_ id) (same-marks? (wrap-marks (syntax-object-wrap id)) (wrap-marks top-wrap))))) - -;;; Marks must be comparable with "eq?" and distinct from pairs and -;;; the symbol top. We do not use integers so that marks will remain -;;; unique even across file compiles. - -(define-syntax the-anti-mark (identifier-syntax #f)) - -(define anti-mark - (lambda (w) - (make-wrap (cons the-anti-mark (wrap-marks w)) - (cons 'shift (wrap-subst w))))) - -(define-syntax new-mark - (syntax-rules () - ((_) (string #\m)))) - -(define barrier-marker #f) -(module (make-import-token import-token? import-token-key) - (define tag 'import-token) - (define make-import-token (lambda (x) (cons tag x))) - (define import-token? (lambda (x) (and (pair? x) (eq? (car x) tag)))) - (define import-token-key cdr)) - -;;; make-empty-ribcage and extend-ribcage maintain list-based ribcages for -;;; internal definitions, in which the ribcages are built incrementally -(define-syntax make-empty-ribcage - (syntax-rules () - ((_) (make-ribcage '() '() '())))) - -(define extend-ribcage! - ; must receive ids with complete wraps - ; ribcage guaranteed to be list-based - (lambda (ribcage id label) - (set-ribcage-symnames! ribcage - (cons (unannotate (syntax-object-expression id)) - (ribcage-symnames ribcage))) - (set-ribcage-marks! ribcage - (cons (wrap-marks (syntax-object-wrap id)) - (ribcage-marks ribcage))) - (set-ribcage-labels! ribcage - (cons label (ribcage-labels ribcage))))) - -(define extend-ribcage-barrier! - ; must receive ids with complete wraps - ; ribcage guaranteed to be list-based - (lambda (ribcage killer-id) - (extend-ribcage-barrier-help! ribcage (syntax-object-wrap killer-id)))) - -(define extend-ribcage-barrier-help! - (lambda (ribcage wrap) - (set-ribcage-symnames! ribcage - (cons barrier-marker (ribcage-symnames ribcage))) - (set-ribcage-marks! ribcage - (cons (wrap-marks wrap) (ribcage-marks ribcage))))) - -(define extend-ribcage-subst! - ; ribcage guaranteed to be list-based - (lambda (ribcage token) - (set-ribcage-symnames! ribcage - (cons (make-import-token token) (ribcage-symnames ribcage))))) - -(define lookup-import-binding-name - (lambda (sym key marks) - (let ((new (get-import-binding sym key))) - (and new - (let f ((new new)) - (cond - ((pair? new) (or (f (car new)) (f (cdr new)))) - ((same-marks? marks (wrap-marks (syntax-object-wrap new))) new) - (else #f))))))) - -;;; make-binding-wrap creates vector-based ribcages -(define make-binding-wrap - (lambda (ids labels w) - (if (null? ids) - w - (make-wrap - (wrap-marks w) - (cons - (let ((labelvec (list->vector labels))) - (let ((n (vector-length labelvec))) - (let ((symnamevec (make-vector n)) (marksvec (make-vector n))) - (let f ((ids ids) (i 0)) - (if (not (null? ids)) - (call-with-values - (lambda () (id-sym-name&marks (car ids) w)) - (lambda (symname marks) - (vector-set! symnamevec i symname) - (vector-set! marksvec i marks) - (f (cdr ids) (fx+ i 1)))))) - (make-ribcage symnamevec marksvec labelvec)))) - (wrap-subst w)))))) - -;;; make-trimmed-syntax-object is used by make-resolved-interface to support -;;; creation of module export lists whose constituent ids do not contain -;;; unnecessary substitutions or marks. -(define make-trimmed-syntax-object - (lambda (id) - (call-with-values - (lambda () (id-var-name&marks id empty-wrap)) - (lambda (tosym marks) - (unless tosym - (syntax-error id "identifier not visible for export")) - (let ((fromsym (id-sym-name id))) - (make-syntax-object fromsym - (make-wrap marks - (list (make-ribcage (vector fromsym) (vector marks) (vector tosym)))))))))) - -;;; Scheme's append should not copy the first argument if the second is -;;; nil, but it does, so we define a smart version here. -(define smart-append - (lambda (m1 m2) - (if (null? m2) - m1 - (append m1 m2)))) - -(define join-wraps - (lambda (w1 w2) - (let ((m1 (wrap-marks w1)) (s1 (wrap-subst w1))) - (if (null? m1) - (if (null? s1) - w2 - (make-wrap - (wrap-marks w2) - (smart-append s1 (wrap-subst w2)))) - (make-wrap - (smart-append m1 (wrap-marks w2)) - (smart-append s1 (wrap-subst w2))))))) - -(define join-marks - (lambda (m1 m2) - (smart-append m1 m2))) - -(define same-marks? - (lambda (x y) - (or (eq? x y) - (and (not (null? x)) - (not (null? y)) - (eq? (car x) (car y)) - (same-marks? (cdr x) (cdr y)))))) - -(define id-var-name-loc&marks - (lambda (id w) - (define search - (lambda (sym subst marks) - (if (null? subst) - (values sym marks) - (let ((fst (car subst))) - (if (eq? fst 'shift) - (search sym (cdr subst) (cdr marks)) - (let ((symnames (ribcage-symnames fst))) - (if (vector? symnames) - (search-vector-rib sym subst marks symnames fst) - (search-list-rib sym subst marks symnames fst)))))))) - (define search-list-rib - (lambda (sym subst marks symnames ribcage) - (let f ((symnames symnames) (i 0)) - (cond - ((null? symnames) (search sym (cdr subst) marks)) - ((and (eq? (car symnames) sym) - (same-marks? marks (list-ref (ribcage-marks ribcage) i))) - (values (list-ref (ribcage-labels ribcage) i) marks)) - ((import-token? (car symnames)) - (cond - ((lookup-import-binding-name sym (import-token-key (car symnames)) marks) => - (lambda (id) - (if (symbol? id) - (values id marks) - (id-var-name&marks id empty-wrap)))) ; could be more efficient: new is a resolved id - (else (f (cdr symnames) i)))) - ((and (eq? (car symnames) barrier-marker) - (same-marks? marks (list-ref (ribcage-marks ribcage) i))) - (values #f marks)) - (else (f (cdr symnames) (fx+ i 1))))))) - (define search-vector-rib - (lambda (sym subst marks symnames ribcage) - (let ((n (vector-length symnames))) - (let f ((i 0)) - (cond - ((fx= i n) (search sym (cdr subst) marks)) - ((and (eq? (vector-ref symnames i) sym) - (same-marks? marks (vector-ref (ribcage-marks ribcage) i))) - (values (vector-ref (ribcage-labels ribcage) i) marks)) - (else (f (fx+ i 1)))))))) - (cond - ((symbol? id) (search id (wrap-subst w) (wrap-marks w))) - ((syntax-object? id) - (let ((sym (unannotate (syntax-object-expression id))) - (w1 (syntax-object-wrap id))) - (let ((marks (join-marks (wrap-marks w) (wrap-marks w1)))) - (call-with-values (lambda () (search sym (wrap-subst w) marks)) - (lambda (new-id marks) - (if (eq? new-id sym) - (search sym (wrap-subst w1) marks) - (values new-id marks))))))) - ((annotation? id) (search (unannotate id) (wrap-subst w) (wrap-marks w))) - (else (error-hook 'id-var-name "invalid id" id))))) - -(define id-var-name&marks - ; this version follows indirect labels - (lambda (id w) - (call-with-values - (lambda () (id-var-name-loc&marks id w)) - (lambda (label marks) - (values (if (indirect-label? label) (get-indirect-label label) label) marks))))) - -(define id-var-name-loc - ; this version doesn't follow indirect labels - (lambda (id w) - (call-with-values - (lambda () (id-var-name-loc&marks id w)) - (lambda (label marks) label)))) - -(define id-var-name - ; this version follows indirect labels - (lambda (id w) - (call-with-values - (lambda () (id-var-name-loc&marks id w)) - (lambda (label marks) - (if (indirect-label? label) (get-indirect-label label) label))))) - -;;; free-id=? must be passed fully wrapped ids since (free-id=? x y) -;;; may be true even if (free-id=? (wrap x w) (wrap y w)) is not. - -(define free-id=? - (lambda (i j) - (and (eq? (id-sym-name i) (id-sym-name j)) ; accelerator - (eq? (id-var-name i empty-wrap) (id-var-name j empty-wrap))))) - -(define-syntax literal-id=? (identifier-syntax free-id=?)) - -;;; bound-id=? may be passed unwrapped (or partially wrapped) ids as -;;; long as the missing portion of the wrap is common to both of the ids -;;; since (bound-id=? x y) iff (bound-id=? (wrap x w) (wrap y w)) - -(define bound-id=? - (lambda (i j) - (if (and (syntax-object? i) (syntax-object? j)) - (and (eq? (unannotate (syntax-object-expression i)) - (unannotate (syntax-object-expression j))) - (same-marks? (wrap-marks (syntax-object-wrap i)) - (wrap-marks (syntax-object-wrap j)))) - (eq? (unannotate i) (unannotate j))))) - -;;; "valid-bound-ids?" returns #t if it receives a list of distinct ids. -;;; valid-bound-ids? may be passed unwrapped (or partially wrapped) ids -;;; as long as the missing portion of the wrap is common to all of the -;;; ids. - -(define valid-bound-ids? - (lambda (ids) - (and (let all-ids? ((ids ids)) - (or (null? ids) - (and (id? (car ids)) - (all-ids? (cdr ids))))) - (distinct-bound-ids? ids)))) - -;;; distinct-bound-ids? expects a list of ids and returns #t if there are -;;; no duplicates. It is quadratic on the length of the id list; long -;;; lists could be sorted to make it more efficient. distinct-bound-ids? -;;; may be passed unwrapped (or partially wrapped) ids as long as the -;;; missing portion of the wrap is common to all of the ids. - -(define distinct-bound-ids? - (lambda (ids) - (let distinct? ((ids ids)) - (or (null? ids) - (and (not (bound-id-member? (car ids) (cdr ids))) - (distinct? (cdr ids))))))) - -(define invalid-ids-error - ; find first bad one and complain about it - (lambda (ids exp class) - (let find ((ids ids) (gooduns '())) - (if (null? ids) - (syntax-error exp) ; shouldn't happen - (if (id? (car ids)) - (if (bound-id-member? (car ids) gooduns) - (syntax-error (car ids) "duplicate " class) - (find (cdr ids) (cons (car ids) gooduns))) - (syntax-error (car ids) "invalid " class)))))) - -(define bound-id-member? - (lambda (x list) - (and (not (null? list)) - (or (bound-id=? x (car list)) - (bound-id-member? x (cdr list)))))) - -;;; wrapping expressions and identifiers - -(define wrap - (lambda (x w) - (cond - ((and (null? (wrap-marks w)) (null? (wrap-subst w))) x) - ((syntax-object? x) - (make-syntax-object - (syntax-object-expression x) - (join-wraps w (syntax-object-wrap x)))) - ((null? x) x) - (else (make-syntax-object x w))))) - -(define source-wrap - (lambda (x w s) - (wrap (if s (make-annotation x s #f) x) w))) - -;;; expanding - -(define chi-sequence - (lambda (body r w s) - (build-sequence s - (let dobody ((body body) (r r) (w w)) - (if (null? body) - '() - (let ((first (chi (car body) r w))) - (cons first (dobody (cdr body) r w)))))))) - -(define chi-top-sequence - (lambda (body r w s m esew ribcage) - (build-sequence s - (let dobody ((body body) (r r) (w w) (m m) (esew esew)) - (if (null? body) - '() - (let ((first (chi-top (car body) r w m esew ribcage))) - (cons first (dobody (cdr body) r w m esew)))))))) - -(define chi-when-list - (lambda (e when-list w) - ; when-list is syntax'd version of list of situations - (let f ((when-list when-list) (situations '())) - (if (null? when-list) - situations - (f (cdr when-list) - (cons (let ((x (car when-list))) - (cond - ((literal-id=? x (syntax compile)) 'compile) - ((literal-id=? x (syntax load)) 'load) - ((literal-id=? x (syntax eval)) 'eval) - (else (syntax-error (wrap x w) - "invalid eval-when situation")))) - situations)))))) - -;;; syntax-type returns five values: type, value, e, w, and s. The first -;;; two are described in the table below. -;;; -;;; type value explanation -;;; ------------------------------------------------------------------- -;;; begin none begin keyword -;;; begin-form none begin expression -;;; call none any other call -;;; constant none self-evaluating datum -;;; core procedure core form (including singleton) -;;; define none define keyword -;;; define-form none variable definition -;;; define-syntax none define-syntax keyword -;;; define-syntax-form none syntax definition -;;; displaced-lexical none displaced lexical identifier -;;; eval-when none eval-when keyword -;;; eval-when-form none eval-when form -;;; global name global variable reference -;;; import none import keyword -;;; import-form none import form -;;; lexical name lexical variable reference -;;; lexical-call name call to lexical variable -;;; local-syntax rec? letrec-syntax/let-syntax keyword -;;; local-syntax-form rec? syntax definition -;;; module none module keyword -;;; module-form none module definition -;;; other none anything else -;;; syntax level pattern variable -;;; -;;; For all forms, e is the form, w is the wrap for e. and s is the source. -;;; -;;; syntax-type expands macros and unwraps as necessary to get to -;;; one of the forms above. - -(define syntax-type - (lambda (e r w s rib) - (cond - ((symbol? e) - (let* ((n (id-var-name e w)) - (b (lookup n r)) - (type (binding-type b))) - (case type - ((lexical) (values type (binding-value b) e w s)) - ((global) (values type (binding-value b) e w s)) - ((macro macro!) (syntax-type (chi-macro (binding-value b) e r w s rib) r empty-wrap #f rib)) - (else (values type (binding-value b) e w s))))) - ((pair? e) - (let ((first (car e))) - (if (id? first) - (let* ((n (id-var-name first w)) - (b (lookup n r)) - (type (binding-type b))) - (case type - ((lexical) (values 'lexical-call (binding-value b) e w s)) - ((macro macro!) - (syntax-type (chi-macro (binding-value b) e r w s rib) - r empty-wrap #f rib)) - ((core) (values type (binding-value b) e w s)) - ((local-syntax) - (values 'local-syntax-form (binding-value b) e w s)) - ((begin) (values 'begin-form #f e w s)) - ((eval-when) (values 'eval-when-form #f e w s)) - ((define) (values 'define-form #f e w s)) - ((define-syntax) (values 'define-syntax-form #f e w s)) - ((module-key) (values 'module-form #f e w s)) - ((import) (values 'import-form (and (binding-value b) (wrap first w)) e w s)) - ((set!) (chi-set! e r w s rib)) - (else (values 'call #f e w s)))) - (values 'call #f e w s)))) - ((syntax-object? e) - ;; s can't be valid source if we've unwrapped - (syntax-type (syntax-object-expression e) - r - (join-wraps w (syntax-object-wrap e)) - no-source rib)) - ((annotation? e) - (syntax-type (annotation-expression e) r w (annotation-source e) rib)) - ((self-evaluating? e) (values 'constant #f e w s)) - (else (values 'other #f e w s))))) - -(define chi-top-expr - (lambda (e r w top-ribcage) - (call-with-values - (lambda () (syntax-type e r w no-source top-ribcage)) - (lambda (type value e w s) - (chi-expr type value e r w s))))) - -(define chi-top - (lambda (e r w m esew top-ribcage) - (define-syntax eval-if-c&e - (syntax-rules () - ((_ m e) - (let ((x e)) - (if (eq? m 'c&e) (top-level-eval-hook x)) - x)))) - (call-with-values - (lambda () (syntax-type e r w no-source top-ribcage)) - (lambda (type value e w s) - (case type - ((begin-form) - (syntax-case e () - ((_) (chi-void)) - ((_ e1 e2 ...) - (chi-top-sequence (syntax (e1 e2 ...)) r w s m esew top-ribcage)))) - ((local-syntax-form) - (chi-local-syntax value e r w s - (lambda (body r w s) - (chi-top-sequence body r w s m esew top-ribcage)))) - ((eval-when-form) - (syntax-case e () - ((_ (x ...) e1 e2 ...) - (let ((when-list (chi-when-list e (syntax (x ...)) w)) - (body (syntax (e1 e2 ...)))) - (cond - ((eq? m 'e) - (if (memq 'eval when-list) - (chi-top-sequence body r w s 'e '(eval) top-ribcage) - (chi-void))) - ((memq 'load when-list) - (if (or (memq 'compile when-list) - (and (eq? m 'c&e) (memq 'eval when-list))) - (chi-top-sequence body r w s 'c&e '(compile load) top-ribcage) - (if (memq m '(c c&e)) - (chi-top-sequence body r w s 'c '(load) top-ribcage) - (chi-void)))) - ((or (memq 'compile when-list) - (and (eq? m 'c&e) (memq 'eval when-list))) - (top-level-eval-hook - (chi-top-sequence body r w s 'e '(eval) top-ribcage)) - (chi-void)) - (else (chi-void))))))) - ((define-syntax-form) - (parse-define-syntax e w s - (lambda (id rhs w) - (let ((id (wrap id w))) - (let ((n (id-var-name id empty-wrap))) - (let ((b (lookup n r))) - (case (binding-type b) - ((displaced-lexical) (displaced-lexical-error id))))) - (ct-eval/residualize m esew - (lambda () - (build-cte-install - (let ((sym (id-sym-name id))) - (if (only-top-marked? id) - sym - (let ((marks (wrap-marks (syntax-object-wrap id)))) - (make-syntax-object sym - (make-wrap marks - (list (make-ribcage (vector sym) - (vector marks) (vector (generate-id sym))))))))) - (chi rhs (transformer-env r) w)))))))) - ((define-form) - (parse-define e w s - (lambda (id rhs w) - (let ((id (wrap id w))) - (let ((n (id-var-name id empty-wrap))) - (let ((b (lookup n r))) - (case (binding-type b) - ((displaced-lexical) (displaced-lexical-error id))))) - (let ((sym (id-sym-name id))) - (let ((valsym (if (only-top-marked? id) sym (generate-id sym)))) - (build-sequence no-source - (list - (ct-eval/residualize m esew - (lambda () - (build-cte-install - (if (eq? sym valsym) - sym - (let ((marks (wrap-marks (syntax-object-wrap id)))) - (make-syntax-object sym - (make-wrap marks - (list (make-ribcage (vector sym) - (vector marks) (vector valsym))))))) - (build-data no-source (make-binding 'global valsym))))) - (eval-if-c&e m (build-global-definition s valsym (chi rhs r w)))))) - ))))) - ((module-form) - (let ((r (cons '("top-level module placeholder" . (placeholder)) r)) - (ribcage (make-empty-ribcage))) - (parse-module e w s (make-wrap (wrap-marks w) (cons ribcage (wrap-subst w))) - (lambda (id exports forms) - (if id - (begin - (let ((n (id-var-name id empty-wrap))) - (let ((b (lookup n r))) - (case (binding-type b) - ((displaced-lexical) (displaced-lexical-error (wrap id w)))))) - (chi-top-module e r ribcage w s m esew id exports forms)) - (chi-top-module e r ribcage w s m esew #f exports forms)))))) - ((import-form) - (parse-import e w s - (lambda (mid) - (ct-eval/residualize m esew - (lambda () - (when value (syntax-error (source-wrap e w s) "not valid at top-level")) - (let ((binding (lookup (id-var-name mid empty-wrap) null-env))) - (case (binding-type binding) - ((module) (do-top-import mid (interface-token (binding-value binding)))) - ((displaced-lexical) (displaced-lexical-error mid)) - (else (syntax-error mid "import from unknown module"))))))))) - (else (eval-if-c&e m (chi-expr type value e r w s)))))))) - -(define flatten-exports - (lambda (exports) - (let loop ((exports exports) (ls '())) - (if (null? exports) - ls - (loop (cdr exports) - (if (pair? (car exports)) - (loop (car exports) ls) - (cons (car exports) ls))))))) - - -(define-structure (interface exports token)) - -(define make-trimmed-interface - ; trim out implicit exports - (lambda (exports) - (make-interface - (list->vector (map (lambda (x) (if (pair? x) (car x) x)) exports)) - #f))) - -(define make-resolved-interface - ; trim out implicit exports & resolve others to actual top-level symbol - (lambda (exports import-token) - (make-interface - (list->vector (map (lambda (x) (make-trimmed-syntax-object (if (pair? x) (car x) x))) exports)) - import-token))) - -(define-structure (module-binding type id label imps val)) - -(define chi-top-module - (lambda (e r ribcage w s m esew id exports forms) - (let ((fexports (flatten-exports exports))) - (chi-external ribcage (source-wrap e w s) - (map (lambda (d) (cons r d)) forms) r exports fexports m esew - (lambda (bindings inits) - ; dvs & des: "defined" (letrec-bound) vars & rhs expressions - ; svs & ses: "set!" (top-level) vars & rhs expressions - (let partition ((fexports fexports) (bs bindings) (svs '()) (ses '()) (ctdefs '())) - (if (null? fexports) - ; remaining bindings are either local vars or local macros/modules - (let partition ((bs bs) (dvs '()) (des '())) - (if (null? bs) - (let ((ses (map (lambda (x) (chi (cdr x) (car x) empty-wrap)) ses)) - (des (map (lambda (x) (chi (cdr x) (car x) empty-wrap)) des)) - (inits (map (lambda (x) (chi (cdr x) (car x) empty-wrap)) inits))) - ; we wait to do this here so that expansion of des & ses use - ; local versions, which in particular, allows us to use macros - ; locally even if esew tells us not to eval them - (for-each (lambda (x) - (apply (lambda (t label sym val) - (when label (set-indirect-label! label sym))) - x)) - ctdefs) - (build-sequence no-source - (list (ct-eval/residualize m esew - (lambda () - (if (null? ctdefs) - (chi-void) - (build-sequence no-source - (map (lambda (x) - (apply (lambda (t label sym val) - (build-cte-install sym - (if (eq? t 'define-syntax-form) - val - (build-data no-source - (make-binding 'module - (make-resolved-interface val sym)))))) - x)) - ctdefs))))) - (ct-eval/residualize m esew - (lambda () - (let ((n (if id (id-sym-name id) #f))) - (let* ((token (generate-id n)) - (b (build-data no-source - (make-binding 'module - (make-resolved-interface exports token))))) - (if n - (build-cte-install - (if (only-top-marked? id) - n - (let ((marks (wrap-marks (syntax-object-wrap id)))) - (make-syntax-object n - (make-wrap marks - (list (make-ribcage (vector n) - (vector marks) (vector (generate-id n)))))))) - b) - (let ((n (generate-id 'tmp))) - (build-sequence no-source - (list (build-cte-install n b) - (do-top-import n token))))))))) - ; Some systems complain when undefined variables are assigned. - (build-sequence no-source - (map (lambda (v) (build-global-definition no-source v (chi-void))) svs)) - (build-letrec no-source - dvs - des - (build-sequence no-source - (list - (if (null? svs) - (chi-void) - (build-sequence no-source - (map (lambda (v e) - (build-module-definition no-source v e)) - svs - ses))) - (if (null? inits) - (chi-void) - (build-sequence no-source inits))))) - (chi-void)))) - (let ((b (car bs))) - (case (module-binding-type b) - ((define-form) - (let ((var (gen-var (module-binding-id b)))) - (extend-store! r - (get-indirect-label (module-binding-label b)) - (make-binding 'lexical var)) - (partition (cdr bs) (cons var dvs) - (cons (module-binding-val b) des)))) - ((define-syntax-form module-form) (partition (cdr bs) dvs des)) - (else (error 'sc-expand-internal "unexpected module binding type")))))) - (let ((id (car fexports)) (fexports (cdr fexports))) - (define pluck-binding - (lambda (id bs succ fail) - (let loop ((bs bs) (new-bs '())) - (if (null? bs) - (fail) - (if (bound-id=? (module-binding-id (car bs)) id) - (succ (car bs) (smart-append (reverse new-bs) (cdr bs))) - (loop (cdr bs) (cons (car bs) new-bs))))))) - (pluck-binding id bs - (lambda (b bs) - (let ((t (module-binding-type b)) - (label (module-binding-label b)) - (imps (module-binding-imps b))) - (let ((fexports (append imps fexports)) - (sym (generate-id (id-sym-name id)))) - (case t - ((define-form) - (set-indirect-label! label sym) - (partition fexports bs (cons sym svs) - (cons (module-binding-val b) ses) - ctdefs)) - ((define-syntax-form) - (partition fexports bs svs ses - (cons (list t label sym (module-binding-val b)) ctdefs))) - ((module-form) - (let ((exports (module-binding-val b))) - (partition (append (flatten-exports exports) fexports) bs - svs ses - (cons (list t label sym exports) ctdefs)))) - (else (error 'sc-expand-internal "unexpected module binding type")))))) - (lambda () (partition fexports bs svs ses ctdefs))))))))))) - -(define id-set-diff - (lambda (exports defs) - (cond - ((null? exports) '()) - ((bound-id-member? (car exports) defs) (id-set-diff (cdr exports) defs)) - (else (cons (car exports) (id-set-diff (cdr exports) defs)))))) - -(define extend-store! - (lambda (r label binding) - (set-cdr! r (extend-env label binding (cdr r))))) - -(define check-module-exports - ; After processing the definitions of a module this is called to verify that the - ; module has defined or imported each exported identifier. Because ids in fexports are - ; wrapped with the given ribcage, they will contain substitutions for anything defined - ; or imported here. These subsitutions can be used by do-import! and do-import-top! to - ; provide access to reexported bindings, for example. - (lambda (source-exp fexports ids) - (define defined? - (lambda (e ids) - (ormap (lambda (x) - (if (interface? x) - (let ((token (interface-token x))) - (if token - (lookup-import-binding-name (id-sym-name e) token (wrap-marks (syntax-object-wrap e))) - (let ((v (interface-exports x))) - (let lp ((i (fx- (vector-length v) 1))) - (and (fx>= i 0) - (or (bound-id=? e (vector-ref v i)) - (lp (fx- i 1)))))))) - (bound-id=? e x))) - ids))) - (let loop ((fexports fexports) (missing '())) - (if (null? fexports) - (unless (null? missing) (syntax-error missing "missing definition for export(s)")) - (let ((e (car fexports)) (fexports (cdr fexports))) - (if (defined? e ids) - (loop fexports missing) - (loop fexports (cons e missing)))))))) - -(define check-defined-ids - (lambda (source-exp ls) - (define b-i=? - ; cope with fat-fingered top-level - (lambda (x y) - (if (symbol? x) - (if (symbol? y) - (eq? x y) - (and (eq? x (id-sym-name y)) - (same-marks? (wrap-marks (syntax-object-wrap y)) (wrap-marks top-wrap)))) - (if (symbol? y) - (and (eq? y (id-sym-name x)) - (same-marks? (wrap-marks (syntax-object-wrap x)) (wrap-marks top-wrap))) - (bound-id=? x y))))) - (define vfold - (lambda (v p cls) - (let ((len (vector-length v))) - (let lp ((i 0) (cls cls)) - (if (fx= i len) - cls - (lp (fx+ i 1) (p (vector-ref v i) cls))))))) - (define conflicts - (lambda (x y cls) - (if (interface? x) - (if (interface? y) - (call-with-values - (lambda () - (let ((xe (interface-exports x)) (ye (interface-exports y))) - (if (fx> (vector-length xe) (vector-length ye)) - (values x ye) - (values y xe)))) - (lambda (iface exports) - (vfold exports (lambda (id cls) (id-iface-conflicts id iface cls)) cls))) - (id-iface-conflicts y x cls)) - (if (interface? y) - (id-iface-conflicts x y cls) - (if (b-i=? x y) (cons x cls) cls))))) - (define id-iface-conflicts - (lambda (id iface cls) - (let ((token (interface-token iface))) - (if token - (if (lookup-import-binding-name (id-sym-name id) token - (if (symbol? id) - (wrap-marks top-wrap) - (wrap-marks (syntax-object-wrap id)))) - (cons id cls) - cls) - (vfold (interface-exports iface) - (lambda (*id cls) (if (b-i=? *id id) (cons *id cls) cls)) - cls))))) - (unless (null? ls) - (let lp ((x (car ls)) (ls (cdr ls)) (cls '())) - (if (null? ls) - (unless (null? cls) - (let ((cls (syntax-object->datum cls))) - (syntax-error source-exp "duplicate definition for " - (symbol->string (car cls)) - " in"))) - (let lp2 ((ls2 ls) (cls cls)) - (if (null? ls2) - (lp (car ls) (cdr ls) cls) - (lp2 (cdr ls2) (conflicts x (car ls2) cls))))))))) - -(define chi-external - (lambda (ribcage source-exp body r exports fexports m esew k) - (define return - (lambda (bindings ids inits) - (check-defined-ids source-exp ids) - (check-module-exports source-exp fexports ids) - (k bindings inits))) - (define get-implicit-exports - (lambda (id) - (let f ((exports exports)) - (if (null? exports) - '() - (if (and (pair? (car exports)) (bound-id=? id (caar exports))) - (flatten-exports (cdar exports)) - (f (cdr exports))))))) - (define update-imp-exports - (lambda (bindings exports) - (let ((exports (map (lambda (x) (if (pair? x) (car x) x)) exports))) - (map (lambda (b) - (let ((id (module-binding-id b))) - (if (not (bound-id-member? id exports)) - b - (make-module-binding - (module-binding-type b) - id - (module-binding-label b) - (append (get-implicit-exports id) (module-binding-imps b)) - (module-binding-val b))))) - bindings)))) - (let parse ((body body) (ids '()) (bindings '()) (inits '())) - (if (null? body) - (return bindings ids inits) - (let ((e (cdar body)) (er (caar body))) - (call-with-values - (lambda () (syntax-type e er empty-wrap no-source ribcage)) - (lambda (type value e w s) - (case type - ((define-form) - (parse-define e w s - (lambda (id rhs w) - (let* ((id (wrap id w)) - (label (gen-indirect-label)) - (imps (get-implicit-exports id))) - (extend-ribcage! ribcage id label) - (parse - (cdr body) - (cons id ids) - (cons (make-module-binding type id label - imps (cons er (wrap rhs w))) - bindings) - inits))))) - ((define-syntax-form) - (parse-define-syntax e w s - (lambda (id rhs w) - (let* ((id (wrap id w)) - (label (gen-indirect-label)) - (imps (get-implicit-exports id)) - (exp (chi rhs (transformer-env er) w))) - ; arrange to evaluate the transformer lazily - (extend-store! r (get-indirect-label label) (cons 'deferred exp)) - (extend-ribcage! ribcage id label) - (parse - (cdr body) - (cons id ids) - (cons (make-module-binding type id label imps exp) - bindings) - inits))))) - ((module-form) - (let* ((*ribcage (make-empty-ribcage)) - (*w (make-wrap (wrap-marks w) (cons *ribcage (wrap-subst w))))) - (parse-module e w s *w - (lambda (id *exports forms) - (chi-external *ribcage (source-wrap e w s) - (map (lambda (d) (cons er d)) forms) - r *exports (flatten-exports *exports) m esew - (lambda (*bindings *inits) - (let* ((iface (make-trimmed-interface *exports)) - (bindings (append (if id *bindings (update-imp-exports *bindings *exports)) bindings)) - (inits (append inits *inits))) - (if id - (let ((label (gen-indirect-label)) - (imps (get-implicit-exports id))) - (extend-store! r (get-indirect-label label) - (make-binding 'module iface)) - (extend-ribcage! ribcage id label) - (parse - (cdr body) - (cons id ids) - (cons (make-module-binding type id label imps *exports) bindings) - inits)) - (let () - (do-import! iface ribcage) - (parse (cdr body) (cons iface ids) bindings inits)))))))))) - ((import-form) - (parse-import e w s - (lambda (mid) - (let ((mlabel (id-var-name mid empty-wrap))) - (let ((binding (lookup mlabel r))) - (case (binding-type binding) - ((module) - (let ((iface (binding-value binding))) - (when value (extend-ribcage-barrier! ribcage value)) - (do-import! iface ribcage) - (parse - (cdr body) - (cons iface ids) - (update-imp-exports bindings (vector->list (interface-exports iface))) - inits))) - ((displaced-lexical) (displaced-lexical-error mid)) - (else (syntax-error mid "import from unknown module")))))))) - ((begin-form) - (syntax-case e () - ((_ e1 ...) - (parse (let f ((forms (syntax (e1 ...)))) - (if (null? forms) - (cdr body) - (cons (cons er (wrap (car forms) w)) - (f (cdr forms))))) - ids bindings inits)))) - ((local-syntax-form) - (chi-local-syntax value e er w s - (lambda (forms er w s) - (parse (let f ((forms forms)) - (if (null? forms) - (cdr body) - (cons (cons er (wrap (car forms) w)) - (f (cdr forms))))) - ids bindings inits)))) - (else ; found an init expression - (return bindings ids - (append inits (cons (cons er (source-wrap e w s)) (cdr body))))))))))))) - -(define vmap - (lambda (fn v) - (do ((i (fx- (vector-length v) 1) (fx- i 1)) - (ls '() (cons (fn (vector-ref v i)) ls))) - ((fx< i 0) ls)))) - -(define vfor-each - (lambda (fn v) - (let ((len (vector-length v))) - (do ((i 0 (fx+ i 1))) - ((fx= i len)) - (fn (vector-ref v i)))))) - -(define do-top-import - (lambda (mid token) - (build-cte-install mid - (build-data no-source - (make-binding 'do-import token))))) - -(define ct-eval/residualize - (lambda (m esew thunk) - (case m - ((c) (if (memq 'compile esew) - (let ((e (thunk))) - (top-level-eval-hook e) - (if (memq 'load esew) e (chi-void))) - (if (memq 'load esew) (thunk) (chi-void)))) - ((c&e) (let ((e (thunk))) (top-level-eval-hook e) e)) - (else (if (memq 'eval esew) (top-level-eval-hook (thunk))) (chi-void))))) - -(define chi - (lambda (e r w) - (call-with-values - (lambda () (syntax-type e r w no-source #f)) - (lambda (type value e w s) - (chi-expr type value e r w s))))) - -(define chi-expr - (lambda (type value e r w s) - (case type - ((lexical) - (build-lexical-reference 'value s value)) - ((core) (value e r w s)) - ((lexical-call) - (chi-application - (build-lexical-reference 'fun (source-annotation (car e)) value) - e r w s)) - ((constant) (build-data s (strip (source-wrap e w s) empty-wrap))) - ((global) (build-global-reference s value)) - ((call) (chi-application (chi (car e) r w) e r w s)) - ((begin-form) - (syntax-case e () - ((_ e1 e2 ...) (chi-sequence (syntax (e1 e2 ...)) r w s)))) - ((local-syntax-form) - (chi-local-syntax value e r w s chi-sequence)) - ((eval-when-form) - (syntax-case e () - ((_ (x ...) e1 e2 ...) - (let ((when-list (chi-when-list e (syntax (x ...)) w))) - (if (memq 'eval when-list) - (chi-sequence (syntax (e1 e2 ...)) r w s) - (chi-void)))))) - ((define-form define-syntax-form module-form import-form) - (syntax-error (source-wrap e w s) "invalid context for definition")) - ((syntax) - (syntax-error (source-wrap e w s) - "reference to pattern variable outside syntax form")) - ((displaced-lexical) (displaced-lexical-error (source-wrap e w s))) - (else (syntax-error (source-wrap e w s)))))) - -(define chi-application - (lambda (x e r w s) - (syntax-case e () - ((e0 e1 ...) - (build-application s x - (map (lambda (e) (chi e r w)) (syntax (e1 ...))))) - (_ (syntax-error (source-wrap e w s)))))) - -(define chi-set! - (lambda (e r w s rib) - (syntax-case e () - ((_ id val) - (id? (syntax id)) - (let ((n (id-var-name (syntax id) w))) - (let ((b (lookup n r))) - (case (binding-type b) - ((macro!) - (let ((id (wrap (syntax id) w)) (val (wrap (syntax val) w))) - (syntax-type (chi-macro (binding-value b) - `(,(syntax set!) ,id ,val) - r empty-wrap s rib) r empty-wrap s rib))) - (else - (values 'core - (lambda (e r w s) - ; repeat lookup in case we were first expression (init) in - ; module or lambda body. we repeat id-var-name as well, - ; although this is only necessary if we allow inits to - ; preced definitions - (let ((val (chi (syntax val) r w)) - (n (id-var-name (syntax id) w))) - (let ((b (lookup n r))) - (case (binding-type b) - ((lexical) (build-lexical-assignment s (binding-value b) val)) - ((global) (build-global-assignment s (binding-value b) val)) - ((displaced-lexical) - (syntax-error (wrap (syntax id) w) "identifier out of context")) - (else (syntax-error (source-wrap e w s))))))) - e w s)))))) - (_ (syntax-error (source-wrap e w s)))))) - -(define chi-macro - (lambda (p e r w s rib) - (define rebuild-macro-output - (lambda (x m) - (cond ((pair? x) - (cons (rebuild-macro-output (car x) m) - (rebuild-macro-output (cdr x) m))) - ((syntax-object? x) - (let ((w (syntax-object-wrap x))) - (let ((ms (wrap-marks w)) (s (wrap-subst w))) - (make-syntax-object (syntax-object-expression x) - (if (and (pair? ms) (eq? (car ms) the-anti-mark)) - (make-wrap (cdr ms) - (if rib (cons rib (cdr s)) (cdr s))) - (make-wrap (cons m ms) - (if rib - (cons rib (cons 'shift s)) - (cons 'shift s)))))))) - ((vector? x) - (let* ((n (vector-length x)) (v (make-vector n))) - (do ((i 0 (fx+ i 1))) - ((fx= i n) v) - (vector-set! v i - (rebuild-macro-output (vector-ref x i) m))))) - ((symbol? x) - (syntax-error (source-wrap e w s) - "encountered raw symbol " - (format "~s" x) - " in output of macro")) - (else x)))) - (rebuild-macro-output - (let ((out (p (source-wrap e (anti-mark w) s)))) - (if (procedure? out) - (out (lambda (id) - (unless (identifier? id) - (syntax-error id - "environment argument is not an identifier")) - (lookup (id-var-name id empty-wrap) r))) - out)) - (new-mark)))) - -(define chi-body - ;; Here we create the empty wrap and new environment with placeholder - ;; as required by chi-internal. On return we extend the environment - ;; to recognize the var-labels as lexical variables and build a letrec - ;; binding them to the var-vals which we expand here. - (lambda (body outer-form r w) - (let* ((r (cons '("placeholder" . (placeholder)) r)) - (ribcage (make-empty-ribcage)) - (w (make-wrap (wrap-marks w) (cons ribcage (wrap-subst w)))) - (body (map (lambda (x) (cons r (wrap x w))) body))) - (chi-internal ribcage outer-form body r - (lambda (exprs ids vars vals inits) - (when (null? exprs) (syntax-error outer-form "no expressions in body")) - (build-letrec no-source - vars - (map (lambda (x) (chi (cdr x) (car x) empty-wrap)) vals) - (build-sequence no-source - (map (lambda (x) (chi (cdr x) (car x) empty-wrap)) (append inits exprs))))))))) - -(define chi-internal - ;; In processing the forms of the body, we create a new, empty wrap. - ;; This wrap is augmented (destructively) each time we discover that - ;; the next form is a definition. This is done: - ;; - ;; (1) to allow the first nondefinition form to be a call to - ;; one of the defined ids even if the id previously denoted a - ;; definition keyword or keyword for a macro expanding into a - ;; definition; - ;; (2) to prevent subsequent definition forms (but unfortunately - ;; not earlier ones) and the first nondefinition form from - ;; confusing one of the bound identifiers for an auxiliary - ;; keyword; and - ;; (3) so that we do not need to restart the expansion of the - ;; first nondefinition form, which is problematic anyway - ;; since it might be the first element of a begin that we - ;; have just spliced into the body (meaning if we restarted, - ;; we'd really need to restart with the begin or the macro - ;; call that expanded into the begin, and we'd have to give - ;; up allowing (begin <defn>+ <expr>+), which is itself - ;; problematic since we don't know if a begin contains only - ;; definitions until we've expanded it). - ;; - ;; Before processing the body, we also create a new environment - ;; containing a placeholder for the bindings we will add later and - ;; associate this environment with each form. In processing a - ;; let-syntax or letrec-syntax, the associated environment may be - ;; augmented with local keyword bindings, so the environment may - ;; be different for different forms in the body. Once we have - ;; gathered up all of the definitions, we evaluate the transformer - ;; expressions and splice into r at the placeholder the new variable - ;; and keyword bindings. This allows let-syntax or letrec-syntax - ;; forms local to a portion or all of the body to shadow the - ;; definition bindings. - ;; - ;; Subforms of a begin, let-syntax, or letrec-syntax are spliced - ;; into the body. - ;; - ;; outer-form is fully wrapped w/source - (lambda (ribcage source-exp body r k) - (define return - (lambda (exprs ids vars vals inits) - (check-defined-ids source-exp ids) - (k exprs ids vars vals inits))) - (let parse ((body body) (ids '()) (vars '()) (vals '()) (inits '())) - (if (null? body) - (return body ids vars vals inits) - (let ((e (cdar body)) (er (caar body))) - (call-with-values - (lambda () (syntax-type e er empty-wrap no-source ribcage)) - (lambda (type value e w s) - (case type - ((define-form) - (parse-define e w s - (lambda (id rhs w) - (let ((id (wrap id w)) (label (gen-label))) - (let ((var (gen-var id))) - (extend-ribcage! ribcage id label) - (extend-store! r label (make-binding 'lexical var)) - (parse - (cdr body) - (cons id ids) - (cons var vars) - (cons (cons er (wrap rhs w)) vals) - inits)))))) - ((define-syntax-form) - (parse-define-syntax e w s - (lambda (id rhs w) - (let ((id (wrap id w)) - (label (gen-label)) - (exp (chi rhs (transformer-env er) w))) - (extend-ribcage! ribcage id label) - (extend-store! r label (make-binding 'deferred exp)) - (parse (cdr body) (cons id ids) vars vals inits))))) - ((module-form) - (let* ((*ribcage (make-empty-ribcage)) - (*w (make-wrap (wrap-marks w) (cons *ribcage (wrap-subst w))))) - (parse-module e w s *w - (lambda (id exports forms) - (chi-internal *ribcage (source-wrap e w s) - (map (lambda (d) (cons er d)) forms) r - (lambda (*body *ids *vars *vals *inits) - ; valid bound ids checked already by chi-internal - (check-module-exports source-exp (flatten-exports exports) *ids) - (let ((iface (make-trimmed-interface exports)) - (vars (append *vars vars)) - (vals (append *vals vals)) - (inits (append inits *inits *body))) - (if id - (let ((label (gen-label))) - (extend-ribcage! ribcage id label) - (extend-store! r label (make-binding 'module iface)) - (parse (cdr body) (cons id ids) vars vals inits)) - (let () - (do-import! iface ribcage) - (parse (cdr body) (cons iface ids) vars vals inits)))))))))) - ((import-form) - (parse-import e w s - (lambda (mid) - (let ((mlabel (id-var-name mid empty-wrap))) - (let ((binding (lookup mlabel r))) - (case (car binding) - ((module) - (let ((iface (cdr binding))) - (when value (extend-ribcage-barrier! ribcage value)) - (do-import! iface ribcage) - (parse (cdr body) (cons iface ids) vars vals inits))) - ((displaced-lexical) (displaced-lexical-error mid)) - (else (syntax-error mid "import from unknown module")))))))) - ((begin-form) - (syntax-case e () - ((_ e1 ...) - (parse (let f ((forms (syntax (e1 ...)))) - (if (null? forms) - (cdr body) - (cons (cons er (wrap (car forms) w)) - (f (cdr forms))))) - ids vars vals inits)))) - ((local-syntax-form) - (chi-local-syntax value e er w s - (lambda (forms er w s) - (parse (let f ((forms forms)) - (if (null? forms) - (cdr body) - (cons (cons er (wrap (car forms) w)) - (f (cdr forms))))) - ids vars vals inits)))) - (else ; found a non-definition - (return (cons (cons er (source-wrap e w s)) (cdr body)) - ids vars vals inits)))))))))) - -(define do-import! - (lambda (interface ribcage) - (let ((token (interface-token interface))) - (if token - (extend-ribcage-subst! ribcage token) - (vfor-each - (lambda (id) - (let ((label1 (id-var-name-loc id empty-wrap))) - (unless label1 - (syntax-error id "exported identifier not visible")) - (extend-ribcage! ribcage id label1))) - (interface-exports interface)))))) - -(define parse-module - (lambda (e w s *w k) - (define listify - (lambda (exports) - (if (null? exports) - '() - (cons (syntax-case (car exports) () - ((ex ...) (listify (syntax (ex ...)))) - (x (if (id? (syntax x)) - (wrap (syntax x) *w) - (syntax-error (source-wrap e w s) - "invalid exports list in")))) - (listify (cdr exports)))))) - (define return - (lambda (id exports forms) - (k id (listify exports) (map (lambda (x) (wrap x *w)) forms)))) - (syntax-case e () - ((_ (ex ...) form ...) - (return #f (syntax (ex ...)) (syntax (form ...)))) - ((_ mid (ex ...) form ...) - (id? (syntax mid)) - ; id receives old wrap so it won't be confused with id of same name - ; defined within the module - (return (wrap (syntax mid) w) (syntax (ex ...)) (syntax (form ...)))) - (_ (syntax-error (source-wrap e w s)))))) - -(define parse-import - (lambda (e w s k) - (syntax-case e () - ((_ mid) - (id? (syntax mid)) - (k (wrap (syntax mid) w))) - (_ (syntax-error (source-wrap e w s)))))) - -(define parse-define - (lambda (e w s k) - (syntax-case e () - ((_ name val) - (id? (syntax name)) - (k (syntax name) (syntax val) w)) - ((_ (name . args) e1 e2 ...) - (and (id? (syntax name)) - (valid-bound-ids? (lambda-var-list (syntax args)))) - (k (wrap (syntax name) w) - (cons (syntax lambda) (wrap (syntax (args e1 e2 ...)) w)) - empty-wrap)) - ((_ name) - (id? (syntax name)) - (k (wrap (syntax name) w) (syntax (void)) empty-wrap)) - (_ (syntax-error (source-wrap e w s)))))) - -(define parse-define-syntax - (lambda (e w s k) - (syntax-case e () - ((_ name val) - (id? (syntax name)) - (k (syntax name) (syntax val) w)) - (_ (syntax-error (source-wrap e w s)))))) - -(define chi-lambda-clause - (lambda (e c r w k) - (syntax-case c () - (((id ...) e1 e2 ...) - (let ((ids (syntax (id ...)))) - (if (not (valid-bound-ids? ids)) - (syntax-error e "invalid parameter list in") - (let ((labels (gen-labels ids)) - (new-vars (map gen-var ids))) - (k new-vars - (chi-body (syntax (e1 e2 ...)) - e - (extend-var-env* labels new-vars r) - (make-binding-wrap ids labels w))))))) - ((ids e1 e2 ...) - (let ((old-ids (lambda-var-list (syntax ids)))) - (if (not (valid-bound-ids? old-ids)) - (syntax-error e "invalid parameter list in") - (let ((labels (gen-labels old-ids)) - (new-vars (map gen-var old-ids))) - (k (let f ((ls1 (cdr new-vars)) (ls2 (car new-vars))) - (if (null? ls1) - ls2 - (f (cdr ls1) (cons (car ls1) ls2)))) - (chi-body (syntax (e1 e2 ...)) - e - (extend-var-env* labels new-vars r) - (make-binding-wrap old-ids labels w))))))) - (_ (syntax-error e))))) - -(define chi-local-syntax - (lambda (rec? e r w s k) - (syntax-case e () - ((_ ((id val) ...) e1 e2 ...) - (let ((ids (syntax (id ...)))) - (if (not (valid-bound-ids? ids)) - (invalid-ids-error (map (lambda (x) (wrap x w)) ids) - (source-wrap e w s) - "keyword") - (let ((labels (gen-labels ids))) - (let ((new-w (make-binding-wrap ids labels w))) - (k (syntax (e1 e2 ...)) - (extend-env* - labels - (let ((w (if rec? new-w w)) - (trans-r (transformer-env r))) - (map (lambda (x) (make-binding 'deferred (chi x trans-r w))) (syntax (val ...)))) - r) - new-w - s)))))) - (_ (syntax-error (source-wrap e w s)))))) - -(define chi-void - (lambda () - (build-application no-source (build-primref no-source 'void) '()))) - -(define ellipsis? - (lambda (x) - (and (nonsymbol-id? x) - (literal-id=? x (syntax (... ...)))))) - -;;; data - -;;; strips all annotations from potentially circular reader output - -(define strip-annotation - (lambda (x parent) - (cond - ((pair? x) - (let ((new (cons #f #f))) - (when parent (set-annotation-stripped! parent new)) - (set-car! new (strip-annotation (car x) #f)) - (set-cdr! new (strip-annotation (cdr x) #f)) - new)) - ((annotation? x) - (or (annotation-stripped x) - (strip-annotation (annotation-expression x) x))) - ((vector? x) - (let ((new (make-vector (vector-length x)))) - (when parent (set-annotation-stripped! parent new)) - (let loop ((i (- (vector-length x) 1))) - (unless (fx< i 0) - (vector-set! new i (strip-annotation (vector-ref x i) #f)) - (loop (fx- i 1)))) - new)) - (else x)))) - -;;; strips syntax-objects down to top-wrap; if top-wrap is layered directly -;;; on an annotation, strips the annotation as well. -;;; since only the head of a list is annotated by the reader, not each pair -;;; in the spine, we also check for pairs whose cars are annotated in case -;;; we've been passed the cdr of an annotated list - -(define strip* - (lambda (x w fn) - (if (top-marked? w) - (fn x) - (let f ((x x)) - (cond - ((syntax-object? x) - (strip* (syntax-object-expression x) (syntax-object-wrap x) fn)) - ((pair? x) - (let ((a (f (car x))) (d (f (cdr x)))) - (if (and (eq? a (car x)) (eq? d (cdr x))) - x - (cons a d)))) - ((vector? x) - (let ((old (vector->list x))) - (let ((new (map f old))) - (if (andmap eq? old new) x (list->vector new))))) - (else x)))))) - -(define strip - (lambda (x w) - (strip* x w - (lambda (x) - (if (or (annotation? x) (and (pair? x) (annotation? (car x)))) - (strip-annotation x #f) - x))))) - -;;; lexical variables - -(define gen-var - (lambda (id) - (let ((id (if (syntax-object? id) (syntax-object-expression id) id))) - (if (annotation? id) - (build-lexical-var (annotation-source id) (annotation-expression id)) - (build-lexical-var no-source id))))) - -(define lambda-var-list - (lambda (vars) - (let lvl ((vars vars) (ls '()) (w empty-wrap)) - (cond - ((pair? vars) (lvl (cdr vars) (cons (wrap (car vars) w) ls) w)) - ((id? vars) (cons (wrap vars w) ls)) - ((null? vars) ls) - ((syntax-object? vars) - (lvl (syntax-object-expression vars) - ls - (join-wraps w (syntax-object-wrap vars)))) - ((annotation? vars) - (lvl (annotation-expression vars) ls w)) - ; include anything else to be caught by subsequent error - ; checking - (else (cons vars ls)))))) - - -; must precede global-extends - -(set! $sc-put-cte - (lambda (id b) - (define put-token - (lambda (id token) - (define cons-id - (lambda (id x) - (if (not x) id (cons id x)))) - (define weed - (lambda (id x) - (if (pair? x) - (if (bound-id=? (car x) id) ; could just check same-marks - (weed id (cdr x)) - (cons-id (car x) (weed id (cdr x)))) - (if (or (not x) (bound-id=? x id)) - #f - x)))) - (let ((sym (id-sym-name id))) - (let ((x (weed id (getprop sym token)))) - (if (and (not x) (symbol? id)) - ; don't pollute property list when all we have is a plain - ; top-level binding, since that's what's assumed anyway - (remprop sym token) - (putprop sym token (cons-id id x))))))) - (define sc-put-module - (lambda (exports token) - (vfor-each - (lambda (id) (put-token id token)) - exports))) - (define (put-cte id binding) - ;; making assumption here that all macros should be visible to the user and that system - ;; globals don't come through here (primvars.ss sets up their properties) - (let ((sym (if (symbol? id) id (id-var-name id empty-wrap)))) - (putprop sym '*sc-expander* binding))) - (let ((binding (or (sanitize-binding b) (error 'define-syntax "invalid transformer ~s" b)))) - (case (binding-type binding) - ((module) - (let ((iface (binding-value binding))) - (sc-put-module (interface-exports iface) (interface-token iface))) - (put-cte id binding)) - ((do-import) ; fake binding: id is module id, binding-value is import token - (let ((token (binding-value b))) - (let ((b (lookup (id-var-name id empty-wrap) null-env))) - (case (binding-type b) - ((module) - (let ((iface (binding-value b))) - (unless (eq? (interface-token iface) token) - (syntax-error id "import mismatch for module")) - (sc-put-module (interface-exports iface) '*top*))) - (else (syntax-error id "import from unknown module")))))) - (else (put-cte id binding)))))) - - -;;; core transformers - -(global-extend 'local-syntax 'letrec-syntax #t) -(global-extend 'local-syntax 'let-syntax #f) - - -(global-extend 'core 'fluid-let-syntax - (lambda (e r w s) - (syntax-case e () - ((_ ((var val) ...) e1 e2 ...) - (valid-bound-ids? (syntax (var ...))) - (let ((names (map (lambda (x) (id-var-name x w)) (syntax (var ...))))) - (for-each - (lambda (id n) - (case (binding-type (lookup n r)) - ((displaced-lexical) (displaced-lexical-error (wrap id w))))) - (syntax (var ...)) - names) - (chi-body - (syntax (e1 e2 ...)) - (source-wrap e w s) - (extend-env* - names - (let ((trans-r (transformer-env r))) - (map (lambda (x) (make-binding 'deferred (chi x trans-r w))) (syntax (val ...)))) - r) - w))) - (_ (syntax-error (source-wrap e w s)))))) - -(global-extend 'core 'quote - (lambda (e r w s) - (syntax-case e () - ((_ e) (build-data s (strip (syntax e) w))) - (_ (syntax-error (source-wrap e w s)))))) - -(global-extend 'core 'syntax - (let () - (define gen-syntax - (lambda (src e r maps ellipsis?) - (if (id? e) - (let ((label (id-var-name e empty-wrap))) - (let ((b (lookup label r))) - (if (eq? (binding-type b) 'syntax) - (call-with-values - (lambda () - (let ((var.lev (binding-value b))) - (gen-ref src (car var.lev) (cdr var.lev) maps))) - (lambda (var maps) (values `(ref ,var) maps))) - (if (ellipsis? e) - (syntax-error src "misplaced ellipsis in syntax form") - (values `(quote ,e) maps))))) - (syntax-case e () - ((dots e) - (ellipsis? (syntax dots)) - (gen-syntax src (syntax e) r maps (lambda (x) #f))) - ((x dots . y) - ; this could be about a dozen lines of code, except that we - ; choose to handle (syntax (x ... ...)) forms - (ellipsis? (syntax dots)) - (let f ((y (syntax y)) - (k (lambda (maps) - (call-with-values - (lambda () - (gen-syntax src (syntax x) r - (cons '() maps) ellipsis?)) - (lambda (x maps) - (if (null? (car maps)) - (syntax-error src - "extra ellipsis in syntax form") - (values (gen-map x (car maps)) - (cdr maps)))))))) - (syntax-case y () - ((dots . y) - (ellipsis? (syntax dots)) - (f (syntax y) - (lambda (maps) - (call-with-values - (lambda () (k (cons '() maps))) - (lambda (x maps) - (if (null? (car maps)) - (syntax-error src - "extra ellipsis in syntax form") - (values (gen-mappend x (car maps)) - (cdr maps)))))))) - (_ (call-with-values - (lambda () (gen-syntax src y r maps ellipsis?)) - (lambda (y maps) - (call-with-values - (lambda () (k maps)) - (lambda (x maps) - (values (gen-append x y) maps))))))))) - ((x . y) - (call-with-values - (lambda () (gen-syntax src (syntax x) r maps ellipsis?)) - (lambda (x maps) - (call-with-values - (lambda () (gen-syntax src (syntax y) r maps ellipsis?)) - (lambda (y maps) (values (gen-cons x y) maps)))))) - (#(e1 e2 ...) - (call-with-values - (lambda () - (gen-syntax src (syntax (e1 e2 ...)) r maps ellipsis?)) - (lambda (e maps) (values (gen-vector e) maps)))) - (_ (values `(quote ,e) maps)))))) - - (define gen-ref - (lambda (src var level maps) - (if (fx= level 0) - (values var maps) - (if (null? maps) - (syntax-error src "missing ellipsis in syntax form") - (call-with-values - (lambda () (gen-ref src var (fx- level 1) (cdr maps))) - (lambda (outer-var outer-maps) - (let ((b (assq outer-var (car maps)))) - (if b - (values (cdr b) maps) - (let ((inner-var (gen-var 'tmp))) - (values inner-var - (cons (cons (cons outer-var inner-var) - (car maps)) - outer-maps))))))))))) - - (define gen-mappend - (lambda (e map-env) - `(apply (primitive append) ,(gen-map e map-env)))) - - (define gen-map - (lambda (e map-env) - (let ((formals (map cdr map-env)) - (actuals (map (lambda (x) `(ref ,(car x))) map-env))) - (cond - ((eq? (car e) 'ref) - ; identity map equivalence: - ; (map (lambda (x) x) y) == y - (car actuals)) - ((andmap - (lambda (x) (and (eq? (car x) 'ref) (memq (cadr x) formals))) - (cdr e)) - ; eta map equivalence: - ; (map (lambda (x ...) (f x ...)) y ...) == (map f y ...) - `(map (primitive ,(car e)) - ,@(map (let ((r (map cons formals actuals))) - (lambda (x) (cdr (assq (cadr x) r)))) - (cdr e)))) - (else `(map (lambda ,formals ,e) ,@actuals)))))) - - (define gen-cons - (lambda (x y) - (case (car y) - ((quote) - (if (eq? (car x) 'quote) - `(quote (,(cadr x) . ,(cadr y))) - (if (eq? (cadr y) '()) - `(list ,x) - `(cons ,x ,y)))) - ((list) `(list ,x ,@(cdr y))) - (else `(cons ,x ,y))))) - - (define gen-append - (lambda (x y) - (if (equal? y '(quote ())) - x - `(append ,x ,y)))) - - (define gen-vector - (lambda (x) - (cond - ((eq? (car x) 'list) `(vector ,@(cdr x))) - ((eq? (car x) 'quote) `(quote #(,@(cadr x)))) - (else `(list->vector ,x))))) - - - (define regen - (lambda (x) - (case (car x) - ((ref) (build-lexical-reference 'value no-source (cadr x))) - ((primitive) (build-primref no-source (cadr x))) - ((quote) (build-data no-source (cadr x))) - ((lambda) (build-lambda no-source (cadr x) (regen (caddr x)))) - ((map) (let ((ls (map regen (cdr x)))) - (build-application no-source - (if (fx= (length ls) 2) - (build-primref no-source 'map) - ; really need to do our own checking here - (build-primref no-source 2 'map)) ; require error check - ls))) - (else (build-application no-source - (build-primref no-source (car x)) - (map regen (cdr x))))))) - - (lambda (e r w s) - (let ((e (source-wrap e w s))) - (syntax-case e () - ((_ x) - (call-with-values - (lambda () (gen-syntax e (syntax x) r '() ellipsis?)) - (lambda (e maps) (regen e)))) - (_ (syntax-error e))))))) - - -(global-extend 'core 'lambda - (lambda (e r w s) - (syntax-case e () - ((_ . c) - (chi-lambda-clause (source-wrap e w s) (syntax c) r w - (lambda (vars body) (build-lambda s vars body))))))) - - -(global-extend 'core 'letrec - (lambda (e r w s) - (syntax-case e () - ((_ ((id val) ...) e1 e2 ...) - (let ((ids (syntax (id ...)))) - (if (not (valid-bound-ids? ids)) - (invalid-ids-error (map (lambda (x) (wrap x w)) ids) - (source-wrap e w s) "bound variable") - (let ((labels (gen-labels ids)) - (new-vars (map gen-var ids))) - (let ((w (make-binding-wrap ids labels w)) - (r (extend-var-env* labels new-vars r))) - (build-letrec s - new-vars - (map (lambda (x) (chi x r w)) (syntax (val ...))) - (chi-body (syntax (e1 e2 ...)) (source-wrap e w s) r w))))))) - (_ (syntax-error (source-wrap e w s)))))) - -(global-extend 'core 'if - (lambda (e r w s) - (syntax-case e () - ((_ test then) - (build-conditional s - (chi (syntax test) r w) - (chi (syntax then) r w) - (chi-void))) - ((_ test then else) - (build-conditional s - (chi (syntax test) r w) - (chi (syntax then) r w) - (chi (syntax else) r w))) - (_ (syntax-error (source-wrap e w s)))))) - - - -(global-extend 'set! 'set! '()) - -(global-extend 'begin 'begin '()) - -(global-extend 'module-key 'module '()) -(global-extend 'import 'import #f) -(global-extend 'import 'import-only #t) - -(global-extend 'define 'define '()) - -(global-extend 'define-syntax 'define-syntax '()) - -(global-extend 'eval-when 'eval-when '()) - -(global-extend 'core 'syntax-case - (let () - (define convert-pattern - ; accepts pattern & keys - ; returns syntax-dispatch pattern & ids - (lambda (pattern keys) - (let cvt ((p pattern) (n 0) (ids '())) - (if (id? p) - (if (bound-id-member? p keys) - (values (vector 'free-id p) ids) - (values 'any (cons (cons p n) ids))) - (syntax-case p () - ((x dots) - (ellipsis? (syntax dots)) - (call-with-values - (lambda () (cvt (syntax x) (fx+ n 1) ids)) - (lambda (p ids) - (values (if (eq? p 'any) 'each-any (vector 'each p)) - ids)))) - ((x . y) - (call-with-values - (lambda () (cvt (syntax y) n ids)) - (lambda (y ids) - (call-with-values - (lambda () (cvt (syntax x) n ids)) - (lambda (x ids) - (values (cons x y) ids)))))) - (() (values '() ids)) - (#(x ...) - (call-with-values - (lambda () (cvt (syntax (x ...)) n ids)) - (lambda (p ids) (values (vector 'vector p) ids)))) - (x (values (vector 'atom (strip p empty-wrap)) ids))))))) - - (define build-dispatch-call - (lambda (pvars exp y r) - (let ((ids (map car pvars)) (levels (map cdr pvars))) - (let ((labels (gen-labels ids)) (new-vars (map gen-var ids))) - (build-application no-source - (build-primref no-source 'apply) - (list (build-lambda no-source new-vars - (chi exp - (extend-env* - labels - (map (lambda (var level) - (make-binding 'syntax `(,var . ,level))) - new-vars - (map cdr pvars)) - r) - (make-binding-wrap ids labels empty-wrap))) - y)))))) - - (define gen-clause - (lambda (x keys clauses r pat fender exp) - (call-with-values - (lambda () (convert-pattern pat keys)) - (lambda (p pvars) - (cond - ((not (distinct-bound-ids? (map car pvars))) - (invalid-ids-error (map car pvars) pat "pattern variable")) - ((not (andmap (lambda (x) (not (ellipsis? (car x)))) pvars)) - (syntax-error pat - "misplaced ellipsis in syntax-case pattern")) - (else - (let ((y (gen-var 'tmp))) - ; fat finger binding and references to temp variable y - (build-application no-source - (build-lambda no-source (list y) - (let-syntax ((y (identifier-syntax - (build-lexical-reference 'value no-source y)))) - (build-conditional no-source - (syntax-case fender () - (#t y) - (_ (build-conditional no-source - y - (build-dispatch-call pvars fender y r) - (build-data no-source #f)))) - (build-dispatch-call pvars exp y r) - (gen-syntax-case x keys clauses r)))) - (list (if (eq? p 'any) - (build-application no-source - (build-primref no-source 'list) - (list (build-lexical-reference no-source 'value x))) - (build-application no-source - (build-primref no-source '$syntax-dispatch) - (list (build-lexical-reference no-source 'value x) - (build-data no-source p))))))))))))) - - (define gen-syntax-case - (lambda (x keys clauses r) - (if (null? clauses) - (build-application no-source - (build-primref no-source 'syntax-error) - (list (build-lexical-reference 'value no-source x))) - (syntax-case (car clauses) () - ((pat exp) - (if (and (id? (syntax pat)) - (not (bound-id-member? (syntax pat) keys)) - (not (ellipsis? (syntax pat)))) - (let ((label (gen-label)) - (var (gen-var (syntax pat)))) - (build-application no-source - (build-lambda no-source (list var) - (chi (syntax exp) - (extend-env label (make-binding 'syntax `(,var . 0)) r) - (make-binding-wrap (syntax (pat)) - (list label) empty-wrap))) - (list (build-lexical-reference 'value no-source x)))) - (gen-clause x keys (cdr clauses) r - (syntax pat) #t (syntax exp)))) - ((pat fender exp) - (gen-clause x keys (cdr clauses) r - (syntax pat) (syntax fender) (syntax exp))) - (_ (syntax-error (car clauses) "invalid syntax-case clause")))))) - - (lambda (e r w s) - (let ((e (source-wrap e w s))) - (syntax-case e () - ((_ val (key ...) m ...) - (if (andmap (lambda (x) (and (id? x) (not (ellipsis? x)))) - (syntax (key ...))) - (let ((x (gen-var 'tmp))) - ; fat finger binding and references to temp variable x - (build-application s - (build-lambda no-source (list x) - (gen-syntax-case x - (syntax (key ...)) (syntax (m ...)) - r)) - (list (chi (syntax val) r empty-wrap)))) - (syntax-error e "invalid literals list in")))))))) - -;;; The portable sc-expand seeds chi-top's mode m with 'e (for -;;; evaluating) and esew (which stands for "eval syntax expanders -;;; when") with '(eval). In Chez Scheme, m is set to 'c instead of e -;;; if we are compiling a file, and esew is set to -;;; (eval-syntactic-expanders-when), which defaults to the list -;;; '(compile load eval). This means that, by default, top-level -;;; syntactic definitions are evaluated immediately after they are -;;; expanded, and the expanded definitions are also residualized into -;;; the object file if we are compiling a file. -(set! sc-expand - (let ((m 'e) (esew '(eval)) - (user-ribcage - (let ((ribcage (make-empty-ribcage))) - (extend-ribcage-subst! ribcage '*top*) - ribcage))) - (let ((user-top-wrap - (make-wrap (wrap-marks top-wrap) - (cons user-ribcage (wrap-subst top-wrap))))) - (lambda (x) - (if (and (pair? x) (equal? (car x) noexpand)) - (cadr x) - (chi-top x null-env user-top-wrap m esew user-ribcage)))))) - -(set! identifier? - (lambda (x) - (nonsymbol-id? x))) - -(set! datum->syntax-object - (lambda (id datum) - (arg-check nonsymbol-id? id 'datum->syntax-object) - (make-syntax-object datum (syntax-object-wrap id)))) - -(set! syntax-object->datum - ; accepts any object, since syntax objects may consist partially - ; or entirely of unwrapped, nonsymbolic data - (lambda (x) - (strip x empty-wrap))) - -(set! generate-temporaries - (lambda (ls) - (arg-check list? ls 'generate-temporaries) - (map (lambda (x) (wrap (gensym-hook) top-wrap)) ls))) - -(set! free-identifier=? - (lambda (x y) - (arg-check nonsymbol-id? x 'free-identifier=?) - (arg-check nonsymbol-id? y 'free-identifier=?) - (free-id=? x y))) - -(set! bound-identifier=? - (lambda (x y) - (arg-check nonsymbol-id? x 'bound-identifier=?) - (arg-check nonsymbol-id? y 'bound-identifier=?) - (bound-id=? x y))) - - -(set! syntax-error - (lambda (object . messages) - (for-each (lambda (x) (arg-check string? x 'syntax-error)) messages) - (let ((message (if (null? messages) - "invalid syntax" - (apply string-append messages)))) - (error-hook #f message (strip object empty-wrap))))) - -;;; syntax-dispatch expects an expression and a pattern. If the expression -;;; matches the pattern a list of the matching expressions for each -;;; "any" is returned. Otherwise, #f is returned. (This use of #f will -;;; not work on r4rs implementations that violate the ieee requirement -;;; that #f and () be distinct.) - -;;; The expression is matched with the pattern as follows: - -;;; pattern: matches: -;;; () empty list -;;; any anything -;;; (<pattern>1 . <pattern>2) (<pattern>1 . <pattern>2) -;;; each-any (any*) -;;; #(free-id <key>) <key> with free-identifier=? -;;; #(each <pattern>) (<pattern>*) -;;; #(vector <pattern>) (list->vector <pattern>) -;;; #(atom <object>) <object> with "equal?" - -;;; Vector cops out to pair under assumption that vectors are rare. If -;;; not, should convert to: -;;; #(vector <pattern>*) #(<pattern>*) - -(let () - -(define match-each - (lambda (e p w) - (cond - ((annotation? e) - (match-each (annotation-expression e) p w)) - ((pair? e) - (let ((first (match (car e) p w '()))) - (and first - (let ((rest (match-each (cdr e) p w))) - (and rest (cons first rest)))))) - ((null? e) '()) - ((syntax-object? e) - (match-each (syntax-object-expression e) - p - (join-wraps w (syntax-object-wrap e)))) - (else #f)))) - -(define match-each-any - (lambda (e w) - (cond - ((annotation? e) - (match-each-any (annotation-expression e) w)) - ((pair? e) - (let ((l (match-each-any (cdr e) w))) - (and l (cons (wrap (car e) w) l)))) - ((null? e) '()) - ((syntax-object? e) - (match-each-any (syntax-object-expression e) - (join-wraps w (syntax-object-wrap e)))) - (else #f)))) - -(define match-empty - (lambda (p r) - (cond - ((null? p) r) - ((eq? p 'any) (cons '() r)) - ((pair? p) (match-empty (car p) (match-empty (cdr p) r))) - ((eq? p 'each-any) (cons '() r)) - (else - (case (vector-ref p 0) - ((each) (match-empty (vector-ref p 1) r)) - ((free-id atom) r) - ((vector) (match-empty (vector-ref p 1) r))))))) - -(define match* - (lambda (e p w r) - (cond - ((null? p) (and (null? e) r)) - ((pair? p) - (and (pair? e) (match (car e) (car p) w - (match (cdr e) (cdr p) w r)))) - ((eq? p 'each-any) - (let ((l (match-each-any e w))) (and l (cons l r)))) - (else - (case (vector-ref p 0) - ((each) - (if (null? e) - (match-empty (vector-ref p 1) r) - (let ((l (match-each e (vector-ref p 1) w))) - (and l - (let collect ((l l)) - (if (null? (car l)) - r - (cons (map car l) (collect (map cdr l))))))))) - ((free-id) (and (id? e) (literal-id=? (wrap e w) (vector-ref p 1)) r)) - ((atom) (and (equal? (vector-ref p 1) (strip e w)) r)) - ((vector) - (and (vector? e) - (match (vector->list e) (vector-ref p 1) w r)))))))) - -(define match - (lambda (e p w r) - (cond - ((not r) #f) - ((eq? p 'any) (cons (wrap e w) r)) - ((syntax-object? e) - (match* - (unannotate (syntax-object-expression e)) - p - (join-wraps w (syntax-object-wrap e)) - r)) - (else (match* (unannotate e) p w r))))) - -(set! $syntax-dispatch - (lambda (e p) - (cond - ((eq? p 'any) (list e)) - ((syntax-object? e) - (match* (unannotate (syntax-object-expression e)) - p (syntax-object-wrap e) '())) - (else (match* (unannotate e) p empty-wrap '()))))) -)) - - -(define-syntax with-syntax - (lambda (x) - (syntax-case x () - ((_ () e1 e2 ...) - (syntax (begin e1 e2 ...))) - ((_ ((out in)) e1 e2 ...) - (syntax (syntax-case in () (out (begin e1 e2 ...))))) - ((_ ((out in) ...) e1 e2 ...) - (syntax (syntax-case (list in ...) () - ((out ...) (begin e1 e2 ...)))))))) - -(define-syntax syntax-rules - (lambda (x) - (syntax-case x () - ((_ (k ...) ((keyword . pattern) template) ...) - (syntax (lambda (x) - (syntax-case x (k ...) - ((dummy . pattern) (syntax template)) - ...))))))) - -(define-syntax or - (lambda (x) - (syntax-case x () - ((_) (syntax #f)) - ((_ e) (syntax e)) - ((_ e1 e2 e3 ...) - (syntax (let ((t e1)) (if t t (or e2 e3 ...)))))))) - -(define-syntax and - (lambda (x) - (syntax-case x () - ((_ e1 e2 e3 ...) (syntax (if e1 (and e2 e3 ...) #f))) - ((_ e) (syntax e)) - ((_) (syntax #t))))) - -(define-syntax let - (lambda (x) - (syntax-case x () - ((_ ((x v) ...) e1 e2 ...) - (andmap identifier? (syntax (x ...))) - (syntax ((lambda (x ...) e1 e2 ...) v ...))) - ((_ f ((x v) ...) e1 e2 ...) - (andmap identifier? (syntax (f x ...))) - (syntax ((letrec ((f (lambda (x ...) e1 e2 ...))) f) - v ...)))))) - -(define-syntax let* - (lambda (x) - (syntax-case x () - ((let* ((x v) ...) e1 e2 ...) - (andmap identifier? (syntax (x ...))) - (let f ((bindings (syntax ((x v) ...)))) - (if (null? bindings) - (syntax (let () e1 e2 ...)) - (with-syntax ((body (f (cdr bindings))) - (binding (car bindings))) - (syntax (let (binding) body))))))))) - -(define-syntax cond - (lambda (x) - (syntax-case x () - ((_ m1 m2 ...) - (let f ((clause (syntax m1)) (clauses (syntax (m2 ...)))) - (if (null? clauses) - (syntax-case clause (else =>) - ((else e1 e2 ...) (syntax (begin e1 e2 ...))) - ((e0) (syntax (let ((t e0)) (if t t)))) - ((e0 => e1) (syntax (let ((t e0)) (if t (e1 t))))) - ((e0 e1 e2 ...) (syntax (if e0 (begin e1 e2 ...)))) - (_ (syntax-error x))) - (with-syntax ((rest (f (car clauses) (cdr clauses)))) - (syntax-case clause (else =>) - ((e0) (syntax (let ((t e0)) (if t t rest)))) - ((e0 => e1) (syntax (let ((t e0)) (if t (e1 t) rest)))) - ((e0 e1 e2 ...) (syntax (if e0 (begin e1 e2 ...) rest))) - (_ (syntax-error x)))))))))) - -(define-syntax do - (lambda (orig-x) - (syntax-case orig-x () - ((_ ((var init . step) ...) (e0 e1 ...) c ...) - (with-syntax (((step ...) - (map (lambda (v s) - (syntax-case s () - (() v) - ((e) (syntax e)) - (_ (syntax-error orig-x)))) - (syntax (var ...)) - (syntax (step ...))))) - (syntax-case (syntax (e1 ...)) () - (() (syntax (let doloop ((var init) ...) - (if (not e0) - (begin c ... (doloop step ...)))))) - ((e1 e2 ...) - (syntax (let doloop ((var init) ...) - (if e0 - (begin e1 e2 ...) - (begin c ... (doloop step ...)))))))))))) - -(define-syntax quasiquote - (letrec - ; these are here because syntax-case uses literal-identifier=?, - ; and we want the more precise free-identifier=? - ((isquote? (lambda (x) - (and (identifier? x) - (free-identifier=? x (syntax quote))))) - (islist? (lambda (x) - (and (identifier? x) - (free-identifier=? x (syntax list))))) - (iscons? (lambda (x) - (and (identifier? x) - (free-identifier=? x (syntax cons))))) - (quote-nil? (lambda (x) - (syntax-case x () - ((quote? ()) (isquote? (syntax quote?))) - (_ #f)))) - (quasilist* - (lambda (x y) - (let f ((x x)) - (if (null? x) - y - (quasicons (car x) (f (cdr x))))))) - (quasicons - (lambda (x y) - (with-syntax ((x x) (y y)) - (syntax-case (syntax y) () - ((quote? dy) - (isquote? (syntax quote?)) - (syntax-case (syntax x) () - ((quote? dx) - (isquote? (syntax quote?)) - (syntax (quote (dx . dy)))) - (_ (if (null? (syntax dy)) - (syntax (list x)) - (syntax (cons x y)))))) - ((listp . stuff) - (islist? (syntax listp)) - (syntax (list x . stuff))) - (else (syntax (cons x y))))))) - (quasiappend - (lambda (x y) - (let ((ls (let f ((x x)) - (if (null? x) - (if (quote-nil? y) - '() - (list y)) - (if (quote-nil? (car x)) - (f (cdr x)) - (cons (car x) (f (cdr x)))))))) - (cond - ((null? ls) (syntax (quote ()))) - ((null? (cdr ls)) (car ls)) - (else (with-syntax (((p ...) ls)) - (syntax (append p ...)))))))) - (quasivector - (lambda (x) - (with-syntax ((pat-x x)) - (syntax-case (syntax pat-x) () - ((quote? (x ...)) - (isquote? (syntax quote?)) - (syntax (quote #(x ...)))) - (_ (let f ((x x) (k (lambda (ls) `(,(syntax vector) ,@ls)))) - (syntax-case x () - ((quote? (x ...)) - (isquote? (syntax quote?)) - (k (syntax ((quote x) ...)))) - ((listp x ...) - (islist? (syntax listp)) - (k (syntax (x ...)))) - ((cons? x y) - (iscons? (syntax cons?)) - (f (syntax y) (lambda (ls) (k (cons (syntax x) ls))))) - (else - (syntax (list->vector pat-x)))))))))) - (quasi - (lambda (p lev) - (syntax-case p (unquote unquote-splicing quasiquote) - ((unquote p) - (if (= lev 0) - (syntax p) - (quasicons (syntax (quote unquote)) - (quasi (syntax (p)) (- lev 1))))) - (((unquote p ...) . q) - (if (= lev 0) - (quasilist* (syntax (p ...)) (quasi (syntax q) lev)) - (quasicons (quasicons (syntax (quote unquote)) - (quasi (syntax (p ...)) (- lev 1))) - (quasi (syntax q) lev)))) - (((unquote-splicing p ...) . q) - (if (= lev 0) - (quasiappend (syntax (p ...)) (quasi (syntax q) lev)) - (quasicons (quasicons (syntax (quote unquote-splicing)) - (quasi (syntax (p ...)) (- lev 1))) - (quasi (syntax q) lev)))) - ((quasiquote p) - (quasicons (syntax (quote quasiquote)) - (quasi (syntax (p)) (+ lev 1)))) - ((p . q) - (quasicons (quasi (syntax p) lev) (quasi (syntax q) lev))) - (#(x ...) (quasivector (quasi (syntax (x ...)) lev))) - (p (syntax (quote p))))))) - (lambda (x) - (syntax-case x () - ((_ e) (quasi (syntax e) 0)))))) - -(define-syntax include - (lambda (x) - (define read-file - (lambda (fn k) - (let ((p (open-input-file fn))) - (let f () - (let ((x (read p))) - (if (eof-object? x) - (begin (close-input-port p) '()) - (cons (datum->syntax-object k x) (f)))))))) - (syntax-case x () - ((k filename) - (let ((fn (syntax-object->datum (syntax filename)))) - (with-syntax (((exp ...) (read-file fn (syntax k)))) - (syntax (begin exp ...)))))))) - -(define-syntax unquote - (lambda (x) - (syntax-case x () - ((_ e ...) - (syntax-error x - "expression not valid outside of quasiquote"))))) - -(define-syntax unquote-splicing - (lambda (x) - (syntax-case x () - ((_ e ...) - (syntax-error x - "expression not valid outside of quasiquote"))))) - -(define-syntax case - (lambda (x) - (syntax-case x () - ((_ e m1 m2 ...) - (with-syntax - ((body (let f ((clause (syntax m1)) (clauses (syntax (m2 ...)))) - (if (null? clauses) - (syntax-case clause (else) - ((else e1 e2 ...) (syntax (begin e1 e2 ...))) - (((k ...) e1 e2 ...) - (syntax (if (memv t '(k ...)) (begin e1 e2 ...)))) - (_ (syntax-error x))) - (with-syntax ((rest (f (car clauses) (cdr clauses)))) - (syntax-case clause (else) - (((k ...) e1 e2 ...) - (syntax (if (memv t '(k ...)) - (begin e1 e2 ...) - rest))) - (_ (syntax-error x)))))))) - (syntax (let ((t e)) body))))))) - -(define-syntax identifier-syntax - (lambda (x) - (syntax-case x (set!) - ((_ e) - (syntax - (lambda (x) - (syntax-case x () - (id - (identifier? (syntax id)) - (syntax e)) - ((_ x (... ...)) - (syntax (e x (... ...)))))))) - ((_ (id exp1) ((set! var val) exp2)) - (and (identifier? (syntax id)) (identifier? (syntax var))) - (syntax - (cons 'macro! - (lambda (x) - (syntax-case x (set!) - ((set! var val) (syntax exp2)) - ((id x (... ...)) (syntax (exp1 x (... ...)))) - (id (identifier? (syntax id)) (syntax exp1)))))))))) - diff --git a/module/language/r5rs/spec.scm b/module/language/r5rs/spec.scm deleted file mode 100644 index 67f8d74cf..000000000 --- a/module/language/r5rs/spec.scm +++ /dev/null @@ -1,63 +0,0 @@ -;;; Guile R5RS - -;; Copyright (C) 2001 Free Software Foundation, Inc. - -;;;; This library is free software; you can redistribute it and/or -;;;; modify it under the terms of the GNU Lesser General Public -;;;; License as published by the Free Software Foundation; either -;;;; version 3 of the License, or (at your option) any later version. -;;;; -;;;; This library is distributed in the hope that it will be useful, -;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -;;;; Lesser General Public License for more details. -;;;; -;;;; You should have received a copy of the GNU Lesser General Public -;;;; License along with this library; if not, write to the Free Software -;;;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - -;;; Code: - -(define-module (language r5rs spec) - #:use-module (system base language) - #:use-module (language r5rs expand) - #:use-module (language r5rs translate) - #:export (r5rs)) - - -;;; -;;; Translator -;;; - -(define (translate x) (if (pair? x) (translate-pair x) x)) - -(define (translate-pair x) - (let ((head (car x)) (rest (cdr x))) - (case head - ((quote) (cons '@quote rest)) - ((define set! if and or begin) - (cons (symbol-append '@ head) (map translate rest))) - ((let let* letrec) - (cons* (symbol-append '@ head) - (map (lambda (b) (cons (car b) (map translate (cdr b)))) - (car rest)) - (map translate (cdr rest)))) - ((lambda) - (cons* '@lambda (car rest) (map translate (cdr rest)))) - (else - (cons (translate head) (map translate rest)))))) - - -;;; -;;; Language definition -;;; - -(define-language r5rs - #:title "Standard Scheme (R5RS + syntax-case)" - #:version "0.3" - #:reader read - #:expander expand - #:translator translate - #:printer write -;; #:environment (global-ref 'Language::R5RS::core) - ) diff --git a/module/language/scheme/compile-ghil.scm b/module/language/scheme/compile-ghil.scm deleted file mode 100644 index dc03af6cf..000000000 --- a/module/language/scheme/compile-ghil.scm +++ /dev/null @@ -1,494 +0,0 @@ -;;; Guile Scheme specification - -;; Copyright (C) 2001 Free Software Foundation, Inc. - -;;;; This library is free software; you can redistribute it and/or -;;;; modify it under the terms of the GNU Lesser General Public -;;;; License as published by the Free Software Foundation; either -;;;; version 3 of the License, or (at your option) any later version. -;;;; -;;;; This library is distributed in the hope that it will be useful, -;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -;;;; Lesser General Public License for more details. -;;;; -;;;; You should have received a copy of the GNU Lesser General Public -;;;; License along with this library; if not, write to the Free Software -;;;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - -;;; Code: - -(define-module (language scheme compile-ghil) - #:use-module (system base pmatch) - #:use-module (system base language) - #:use-module (language ghil) - #:use-module (language scheme inline) - #:use-module (system vm objcode) - #:use-module (ice-9 receive) - #:use-module (ice-9 optargs) - #:use-module (language tree-il) - #:use-module ((system base compile) #:select (syntax-error)) - #:export (compile-ghil translate-1 - *translate-table* define-scheme-translator)) - -;;; environment := #f -;;; | MODULE -;;; | COMPILE-ENV -;;; compile-env := (MODULE LEXICALS|GHIL-ENV . EXTERNALS) -(define (cenv-module env) - (cond ((not env) #f) - ((module? env) env) - ((and (pair? env) (module? (car env))) (car env)) - (else (error "bad environment" env)))) - -(define (cenv-ghil-env env) - (cond ((not env) (make-ghil-toplevel-env)) - ((module? env) (make-ghil-toplevel-env)) - ((pair? env) - (if (struct? (cadr env)) - (cadr env) - (ghil-env-dereify (cadr env)))) - (else (error "bad environment" env)))) - -(define (cenv-externals env) - (cond ((not env) '()) - ((module? env) '()) - ((pair? env) (cddr env)) - (else (error "bad environment" env)))) - -(define (make-cenv module lexicals externals) - (cons module (cons lexicals externals))) - - - -(define (compile-ghil x e opts) - (save-module-excursion - (lambda () - (and=> (cenv-module e) set-current-module) - (call-with-ghil-environment (cenv-ghil-env e) '() - (lambda (env vars) - (let ((x (tree-il->scheme - (sc-expand x 'c '(compile load eval))))) - (let ((x (make-ghil-lambda env #f vars #f '() - (translate-1 env #f x))) - (cenv (make-cenv (current-module) - (ghil-env-parent env) - (if e (cenv-externals e) '())))) - (values x cenv cenv)))))))) - - -;;; -;;; Translator -;;; - -(define *forbidden-primitives* - ;; Guile's `procedure->macro' family is evil because it crosses the - ;; compilation boundary. One solution might be to evaluate calls to - ;; `procedure->memoizing-macro' at compilation time, but it may be more - ;; compicated than that. - '(procedure->syntax procedure->macro)) - -;; Looks up transformers relative to the current module at -;; compilation-time. See also the discussion of ghil-lookup in ghil.scm. -;; -;; FIXME shadowing lexicals? -(define (lookup-transformer head retrans) - (define (module-ref/safe mod sym) - (and mod - (and=> (module-variable mod sym) - (lambda (var) - ;; unbound vars can happen if the module - ;; definition forward-declared them - (and (variable-bound? var) (variable-ref var)))))) - (let* ((mod (current-module)) - (val (cond - ((symbol? head) (module-ref/safe mod head)) - ((pmatch head - ((@ ,modname ,sym) - (module-ref/safe (resolve-interface modname) sym)) - ((@@ ,modname ,sym) - (module-ref/safe (resolve-module modname) sym)) - (else #f))) - (else #f)))) - (cond - ((hashq-ref *translate-table* val)) - - ((macro? val) - (syntax-error #f "unknown kind of macro" head)) - - (else #f)))) - -(define (translate-1 e l x) - (let ((l (or l (location x)))) - (define (retrans x) (translate-1 e #f x)) - (define (retrans/loc x) (translate-1 e (or (location x) l) x)) - (cond ((pair? x) - (let ((head (car x)) (tail (cdr x))) - (cond - ((lookup-transformer head retrans/loc) - => (lambda (t) (t e l x))) - - ;; FIXME: lexical/module overrides of forbidden primitives - ((memq head *forbidden-primitives*) - (syntax-error l (format #f "`~a' is forbidden" head) - (cons head tail))) - - (else - (let ((tail (map retrans tail))) - (or (and (symbol? head) - (try-inline-with-env e l (cons head tail))) - (make-ghil-call e l (retrans head) tail))))))) - - ((symbol? x) - (make-ghil-ref e l (ghil-var-for-ref! e x))) - - ;; fixme: non-self-quoting objects like #<foo> - (else - (make-ghil-quote e l x))))) - -(define (valid-bindings? bindings . it-is-for-do) - (define (valid-binding? b) - (pmatch b - ((,sym ,var) (guard (symbol? sym)) #t) - ((,sym ,var ,update) (guard (pair? it-is-for-do) (symbol? sym)) #t) - (else #f))) - (and (list? bindings) (and-map valid-binding? bindings))) - -(define *translate-table* (make-hash-table)) - -(define-macro (-> form) - `(,(symbol-append 'make-ghil- (car form)) e l . ,(cdr form))) - -(define-macro (define-scheme-translator sym . clauses) - `(hashq-set! (@ (language scheme compile-ghil) *translate-table*) - (module-ref (current-module) ',sym) - (lambda (e l exp) - (define (retrans x) - ((@ (language scheme compile-ghil) translate-1) - e - (or ((@@ (language scheme compile-ghil) location) x) l) - x)) - (define syntax-error (@ (system base compile) syntax-error)) - (pmatch (cdr exp) - ,@clauses - ,@(if (assq 'else clauses) '() - `((else - (syntax-error l (format #f "bad ~A" ',sym) exp)))))))) - -(define-scheme-translator quote - ;; (quote OBJ) - ((,obj) - (-> (quote obj)))) - -(define-scheme-translator quasiquote - ;; (quasiquote OBJ) - ((,obj) - (-> (quasiquote (trans-quasiquote e l obj 0))))) - -(define-scheme-translator define - ;; (define NAME VAL) - ((,name ,val) (guard (symbol? name) - (ghil-toplevel-env? (ghil-env-parent e))) - (-> (define (ghil-var-define! (ghil-env-parent e) name) - (maybe-name-value! (retrans val) name)))) - ;; (define (NAME FORMALS...) BODY...) - (((,name . ,formals) . ,body) (guard (symbol? name)) - ;; -> (define NAME (lambda FORMALS BODY...)) - (retrans `(define ,name (lambda ,formals ,@body))))) - -(define-scheme-translator set! - ;; (set! NAME VAL) - ((,name ,val) (guard (symbol? name)) - (-> (set (ghil-var-for-set! e name) (retrans val)))) - - ;; FIXME: Would be nice to verify the values of @ and @@ relative - ;; to imported modules... - (((@ ,modname ,name) ,val) (guard (symbol? name) - (list? modname) - (and-map symbol? modname) - (not (ghil-var-is-bound? e '@))) - (-> (set (ghil-var-at-module! e modname name #t) (retrans val)))) - - (((@@ ,modname ,name) ,val) (guard (symbol? name) - (list? modname) - (and-map symbol? modname) - (not (ghil-var-is-bound? e '@@))) - (-> (set (ghil-var-at-module! e modname name #f) (retrans val)))) - - ;; (set! (NAME ARGS...) VAL) - (((,name . ,args) ,val) (guard (symbol? name)) - ;; -> ((setter NAME) ARGS... VAL) - (retrans `((setter ,name) . (,@args ,val))))) - -(define-scheme-translator if - ;; (if TEST THEN [ELSE]) - ((,test ,then) - (-> (if (retrans test) (retrans then) (retrans '(begin))))) - ((,test ,then ,else) - (-> (if (retrans test) (retrans then) (retrans else))))) - -(define-scheme-translator and - ;; (and EXPS...) - (,tail - (-> (and (map retrans tail))))) - -(define-scheme-translator or - ;; (or EXPS...) - (,tail - (-> (or (map retrans tail))))) - -(define-scheme-translator begin - ;; (begin EXPS...) - (,tail - (-> (begin (map retrans tail))))) - -(define-scheme-translator let - ;; (let NAME ((SYM VAL) ...) BODY...) - ((,name ,bindings . ,body) (guard (symbol? name) - (valid-bindings? bindings)) - ;; -> (letrec ((NAME (lambda (SYM...) BODY...))) (NAME VAL...)) - (retrans `(letrec ((,name (lambda ,(map car bindings) ,@body))) - (,name ,@(map cadr bindings))))) - - ;; (let () BODY...) - ((() . ,body) - ;; Note: this differs from `begin' - (-> (begin (list (trans-body e l body))))) - - ;; (let ((SYM VAL) ...) BODY...) - ((,bindings . ,body) (guard (valid-bindings? bindings)) - (let ((vals (map (lambda (b) - (maybe-name-value! (retrans (cadr b)) (car b))) - bindings))) - (call-with-ghil-bindings e (map car bindings) - (lambda (vars) - (-> (bind vars vals (trans-body e l body)))))))) - -(define-scheme-translator let* - ;; (let* ((SYM VAL) ...) BODY...) - ((() . ,body) - (retrans `(let () ,@body))) - ((((,sym ,val) . ,rest) . ,body) (guard (symbol? sym)) - (retrans `(let ((,sym ,val)) (let* ,rest ,@body))))) - -(define-scheme-translator letrec - ;; (letrec ((SYM VAL) ...) BODY...) - ((,bindings . ,body) (guard (valid-bindings? bindings)) - (call-with-ghil-bindings e (map car bindings) - (lambda (vars) - (let ((vals (map (lambda (b) - (maybe-name-value! - (retrans (cadr b)) (car b))) - bindings))) - (-> (bind vars vals (trans-body e l body)))))))) - -(define-scheme-translator cond - ;; (cond (CLAUSE BODY...) ...) - (() (retrans '(begin))) - (((else . ,body)) (retrans `(begin ,@body))) - (((,test) . ,rest) (retrans `(or ,test (cond ,@rest)))) - (((,test => ,proc) . ,rest) - ;; FIXME hygiene! - (retrans `(let ((_t ,test)) (if _t (,proc _t) (cond ,@rest))))) - (((,test . ,body) . ,rest) - (retrans `(if ,test (begin ,@body) (cond ,@rest))))) - -(define-scheme-translator case - ;; (case EXP ((KEY...) BODY...) ...) - ((,exp . ,clauses) - (retrans - ;; FIXME hygiene! - `(let ((_t ,exp)) - ,(let loop ((ls clauses)) - (cond ((null? ls) '(begin)) - ((eq? (caar ls) 'else) `(begin ,@(cdar ls))) - (else `(if (memv _t ',(caar ls)) - (begin ,@(cdar ls)) - ,(loop (cdr ls)))))))))) - -(define-scheme-translator do - ;; (do ((SYM VAL [UPDATE]) ...) (TEST RESULT...) BODY...) - ((,bindings (,test . ,result) . ,body) - (let ((sym (map car bindings)) - (val (map cadr bindings)) - (update (map cddr bindings))) - (define (next s x) (if (pair? x) (car x) s)) - (retrans - ;; FIXME hygiene! - `(letrec ((_l (lambda ,sym - (if ,test - (begin ,@result) - (begin ,@body - (_l ,@(map next sym update))))))) - (_l ,@val)))))) - -(define-scheme-translator lambda - ;; (lambda FORMALS BODY...) - ((,formals . ,body) - (receive (syms rest) (parse-formals formals) - (call-with-ghil-environment e syms - (lambda (e vars) - (receive (meta body) (parse-lambda-meta body) - (-> (lambda vars rest meta (trans-body e l body))))))))) - -(define-scheme-translator delay - ;; FIXME not hygienic - ((,expr) - (retrans `(make-promise (lambda () ,expr))))) - -(define-scheme-translator @ - ((,modname ,sym) - (-> (ref (ghil-var-at-module! e modname sym #t))))) - -(define-scheme-translator @@ - ((,modname ,sym) - (-> (ref (ghil-var-at-module! e modname sym #f))))) - -(define *the-compile-toplevel-symbol* 'compile-toplevel) -(define-scheme-translator eval-when - ((,when . ,body) (guard (list? when) (and-map symbol? when)) - (if (memq 'compile when) - (primitive-eval `(begin . ,body))) - (if (memq 'load when) - (retrans `(begin . ,body)) - (retrans `(begin))))) - -(define-scheme-translator apply - ;; FIXME: not hygienic, relies on @apply not being shadowed - (,args (retrans `(@apply ,@args)))) - -;; FIXME: we could add inliners for `list' and `vector' - -(define-scheme-translator @apply - ((,proc ,arg1 . ,args) - (let ((args (cons (retrans arg1) (map retrans args)))) - (cond ((and (symbol? proc) - (not (ghil-var-is-bound? e proc)) - (and=> (module-variable (current-module) proc) - (lambda (var) - (and (variable-bound? var) - (lookup-apply-transformer (variable-ref var)))))) - ;; that is, a variable, not part of this compilation - ;; unit, but defined in the toplevel environment, and has - ;; an apply transformer registered - => (lambda (t) (t e l args))) - (else - (-> (inline 'apply (cons (retrans proc) args)))))))) - -(define-scheme-translator call-with-values - ;; FIXME: not hygienic, relies on @call-with-values not being shadowed - ((,producer ,consumer) - (retrans `(@call-with-values ,producer ,consumer))) - (else #f)) - -(define-scheme-translator @call-with-values - ((,producer ,consumer) - (-> (mv-call (retrans producer) (retrans consumer))))) - -(define-scheme-translator call-with-current-continuation - ;; FIXME: not hygienic, relies on @call-with-current-continuation - ;; not being shadowed - ((,proc) - (retrans `(@call-with-current-continuation ,proc))) - (else #f)) - -(define-scheme-translator @call-with-current-continuation - ((,proc) - (-> (inline 'call/cc (list (retrans proc)))))) - -(define-scheme-translator receive - ((,formals ,producer-exp . ,body) - ;; Lovely, self-referential usage. Not strictly necessary, the - ;; macro would do the trick; but it's good to test the mv-bind - ;; code. - (receive (syms rest) (parse-formals formals) - (let ((producer (retrans `(lambda () ,producer-exp)))) - (call-with-ghil-bindings e syms - (lambda (vars) - (-> (mv-bind producer vars rest - (trans-body e l body))))))))) - -(define-scheme-translator values - ((,x) (retrans x)) - (,args - (-> (values (map retrans args))))) - -(define (lookup-apply-transformer proc) - (cond ((eq? proc values) - (lambda (e l args) - (-> (values* args)))) - (else #f))) - -(define (trans-quasiquote e l x level) - (cond ((not (pair? x)) x) - ((memq (car x) '(unquote unquote-splicing)) - (let ((l (location x))) - (pmatch (cdr x) - ((,obj) - (cond - ((zero? level) - (if (eq? (car x) 'unquote) - (-> (unquote (translate-1 e l obj))) - (-> (unquote-splicing (translate-1 e l obj))))) - (else - (list (car x) (trans-quasiquote e l obj (1- level)))))) - (else (syntax-error l (format #f "bad ~A" (car x)) x))))) - ((eq? (car x) 'quasiquote) - (let ((l (location x))) - (pmatch (cdr x) - ((,obj) (list 'quasiquote (trans-quasiquote e l obj (1+ level)))) - (else (syntax-error l (format #f "bad ~A" (car x)) x))))) - (else (cons (trans-quasiquote e l (car x) level) - (trans-quasiquote e l (cdr x) level))))) - -(define (trans-body e l body) - (define (define->binding df) - (pmatch (cdr df) - ((,name ,val) (guard (symbol? name)) (list name val)) - (((,name . ,formals) . ,body) (guard (symbol? name)) - (list name `(lambda ,formals ,@body))) - (else (syntax-error (location df) "bad define" df)))) - ;; main - (let loop ((ls body) (ds '())) - (pmatch ls - (() (syntax-error l "bad body" body)) - (((define . _) . _) - (loop (cdr ls) (cons (car ls) ds))) - (else - (if (null? ds) - (translate-1 e l `(begin ,@ls)) - (translate-1 e l `(letrec ,(map define->binding ds) ,@ls))))))) - -(define (parse-formals formals) - (cond - ;; (lambda x ...) - ((symbol? formals) (values (list formals) #t)) - ;; (lambda (x y z) ...) - ((list? formals) (values formals #f)) - ;; (lambda (x y . z) ...) - ((pair? formals) - (let loop ((l formals) (v '())) - (if (pair? l) - (loop (cdr l) (cons (car l) v)) - (values (reverse! (cons l v)) #t)))) - (else (syntax-error (location formals) "bad formals" formals)))) - -(define (parse-lambda-meta body) - (cond ((or (null? body) (null? (cdr body))) (values '() body)) - ((string? (car body)) - (values `((documentation . ,(car body))) (cdr body))) - (else (values '() body)))) - -(define (maybe-name-value! val name) - (cond - ((ghil-lambda? val) - (if (not (assq-ref (ghil-lambda-meta val) 'name)) - (set! (ghil-lambda-meta val) - (acons 'name name (ghil-lambda-meta val)))))) - val) - -(define (location x) - (and (pair? x) - (let ((props (source-properties x))) - (and (not (null? props)) - props)))) diff --git a/module/language/scheme/inline.scm b/module/language/scheme/inline.scm deleted file mode 100644 index b178b2adc..000000000 --- a/module/language/scheme/inline.scm +++ /dev/null @@ -1,205 +0,0 @@ -;;; GHIL macros - -;; Copyright (C) 2001 Free Software Foundation, Inc. - -;;;; This library is free software; you can redistribute it and/or -;;;; modify it under the terms of the GNU Lesser General Public -;;;; License as published by the Free Software Foundation; either -;;;; version 3 of the License, or (at your option) any later version. -;;;; -;;;; This library is distributed in the hope that it will be useful, -;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -;;;; Lesser General Public License for more details. -;;;; -;;;; You should have received a copy of the GNU Lesser General Public -;;;; License along with this library; if not, write to the Free Software -;;;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - -;;; Code: - -(define-module (language scheme inline) - #:use-module (system base syntax) - #:use-module (language ghil) - #:use-module (srfi srfi-16) - #:export (*inline-table* define-inline try-inline try-inline-with-env)) - -(define *inline-table* '()) - -(define-macro (define-inline sym . clauses) - (define (inline-args args) - (let lp ((in args) (out '())) - (cond ((null? in) `(list ,@(reverse out))) - ((symbol? in) `(cons* ,@(reverse out) ,in)) - ((pair? (car in)) - (lp (cdr in) - (cons `(or (try-inline ,(caar in) ,(inline-args (cdar in))) - (error "what" ',(car in))) - out))) - ((symbol? (car in)) - ;; assume it's locally bound - (lp (cdr in) (cons (car in) out))) - ((number? (car in)) - (lp (cdr in) (cons `(make-ghil-quote #f #f ,(car in)) out))) - (else - (error "what what" (car in)))))) - (define (consequent exp) - (cond - ((pair? exp) - `(make-ghil-inline #f #f ',(car exp) ,(inline-args (cdr exp)))) - ((symbol? exp) - ;; assume locally bound - exp) - ((number? exp) - `(make-ghil-quote #f #f ,exp)) - (else (error "bad consequent yall" exp)))) - `(set! (@ (language scheme inline) *inline-table*) - (assq-set! (@ (language scheme inline) *inline-table*) - ,sym - (let ((make-ghil-inline (@ (language ghil) make-ghil-inline)) - (make-ghil-quote (@ (language ghil) make-ghil-quote)) - (try-inline (@ (language scheme inline) try-inline))) - (case-lambda - ,@(let lp ((in clauses) (out '())) - (if (null? in) - (reverse (cons '(else #f) out)) - (lp (cddr in) - (cons `(,(car in) - ,(consequent (cadr in))) out))))))))) - -(define (try-inline head-value args) - (and=> (assq-ref *inline-table* head-value) - (lambda (proc) (apply proc args)))) - - -(define (try-inline-with-env env loc exp) - (let ((sym (car exp))) - (let loop ((e env)) - (record-case e - ((<ghil-toplevel-env> table) - (let ((mod (current-module))) - (and (not (assoc-ref table (cons (module-name mod) sym))) - (module-bound? mod sym) - (try-inline (module-ref mod sym) (cdr exp))))) - ((<ghil-env> parent table variables) - (and (not (assq-ref table sym)) - (loop parent))))))) - -(define-inline eq? (x y) - (eq? x y)) - -(define-inline eqv? (x y) - (eqv? x y)) - -(define-inline equal? (x y) - (equal? x y)) - -(define-inline = (x y) - (ee? x y)) - -(define-inline < (x y) - (lt? x y)) - -(define-inline > (x y) - (gt? x y)) - -(define-inline <= (x y) - (le? x y)) - -(define-inline >= (x y) - (ge? x y)) - -(define-inline zero? (x) - (ee? x 0)) - -(define-inline + - () 0 - (x) x - (x y) (add x y) - (x y . rest) (add x (+ y . rest))) - -(define-inline * - () 1 - (x) x - (x y) (mul x y) - (x y . rest) (mul x (* y . rest))) - -(define-inline - - (x) (sub 0 x) - (x y) (sub x y) - (x y . rest) (sub x (+ y . rest))) - -(define-inline 1- - (x) (sub x 1)) - -(define-inline / - (x) (div 1 x) - (x y) (div x y) - (x y . rest) (div x (* y . rest))) - -(define-inline quotient (x y) - (quo x y)) - -(define-inline remainder (x y) - (rem x y)) - -(define-inline modulo (x y) - (mod x y)) - -(define-inline not (x) - (not x)) - -(define-inline pair? (x) - (pair? x)) - -(define-inline cons (x y) - (cons x y)) - -(define-inline car (x) (car x)) -(define-inline cdr (x) (cdr x)) - -(define-inline set-car! (x y) (set-car! x y)) -(define-inline set-cdr! (x y) (set-cdr! x y)) - -(define-inline caar (x) (car (car x))) -(define-inline cadr (x) (car (cdr x))) -(define-inline cdar (x) (cdr (car x))) -(define-inline cddr (x) (cdr (cdr x))) -(define-inline caaar (x) (car (car (car x)))) -(define-inline caadr (x) (car (car (cdr x)))) -(define-inline cadar (x) (car (cdr (car x)))) -(define-inline caddr (x) (car (cdr (cdr x)))) -(define-inline cdaar (x) (cdr (car (car x)))) -(define-inline cdadr (x) (cdr (car (cdr x)))) -(define-inline cddar (x) (cdr (cdr (car x)))) -(define-inline cdddr (x) (cdr (cdr (cdr x)))) -(define-inline caaaar (x) (car (car (car (car x))))) -(define-inline caaadr (x) (car (car (car (cdr x))))) -(define-inline caadar (x) (car (car (cdr (car x))))) -(define-inline caaddr (x) (car (car (cdr (cdr x))))) -(define-inline cadaar (x) (car (cdr (car (car x))))) -(define-inline cadadr (x) (car (cdr (car (cdr x))))) -(define-inline caddar (x) (car (cdr (cdr (car x))))) -(define-inline cadddr (x) (car (cdr (cdr (cdr x))))) -(define-inline cdaaar (x) (cdr (car (car (car x))))) -(define-inline cdaadr (x) (cdr (car (car (cdr x))))) -(define-inline cdadar (x) (cdr (car (cdr (car x))))) -(define-inline cdaddr (x) (cdr (car (cdr (cdr x))))) -(define-inline cddaar (x) (cdr (cdr (car (car x))))) -(define-inline cddadr (x) (cdr (cdr (car (cdr x))))) -(define-inline cdddar (x) (cdr (cdr (cdr (car x))))) -(define-inline cddddr (x) (cdr (cdr (cdr (cdr x))))) - -(define-inline null? (x) - (null? x)) - -(define-inline list? (x) - (list? x)) - -(define-inline cons* - (x) x - (x y) (cons x y) - (x y . rest) (cons x (cons* y . rest))) - -(define-inline acons - (x y z) (cons (cons x y) z)) |