From 9704cc473199167cc709dddf2f93f38887a443b4 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Wed, 15 Aug 2018 10:18:18 -0600 Subject: [PATCH] add `syntax-binding-set` functions The `syntax-binding-set` functions enable explicit construction of lexical information for a syntax objects. --- pkgs/base/info.rkt | 2 +- .../scribblings/reference/stx-ops.scrbl | 35 + pkgs/racket-test-core/tests/racket/stx.rktl | 55 ++ racket/collects/racket/private/base.rkt | 4 +- .../racket/private/kw-syntax-binding.rkt | 18 + racket/src/expander/boot/core-primitive.rkt | 7 +- racket/src/expander/demo.rkt | 14 + racket/src/expander/main.rkt | 5 +- racket/src/expander/syntax/api.rkt | 41 + racket/src/expander/syntax/binding-set.rkt | 38 + racket/src/expander/syntax/module-binding.rkt | 1 - racket/src/racket/src/schvers.h | 4 +- racket/src/racket/src/startup.inc | 781 +++++++++++++----- 13 files changed, 794 insertions(+), 211 deletions(-) create mode 100644 racket/collects/racket/private/kw-syntax-binding.rkt create mode 100644 racket/src/expander/syntax/binding-set.rkt diff --git a/pkgs/base/info.rkt b/pkgs/base/info.rkt index 03291544f5..9c39445591 100644 --- a/pkgs/base/info.rkt +++ b/pkgs/base/info.rkt @@ -12,7 +12,7 @@ (define collection 'multi) -(define version "7.0.0.11") +(define version "7.0.0.12") (define deps `("racket-lib" ["racket" #:version ,version])) diff --git a/pkgs/racket-doc/scribblings/reference/stx-ops.scrbl b/pkgs/racket-doc/scribblings/reference/stx-ops.scrbl index c1a1d121e4..d048014964 100644 --- a/pkgs/racket-doc/scribblings/reference/stx-ops.scrbl +++ b/pkgs/racket-doc/scribblings/reference/stx-ops.scrbl @@ -279,6 +279,41 @@ then the @exnraise[exn:fail:contract]. The @racket[ignored] argument is allowed for backward compatibility and has no effect on the returned syntax object.} +@deftogether[( +@defproc[(syntax-binding-set? [v any/c]) boolean?] +@defproc[(syntax-binding-set) syntax-binding-set?] +@defproc[(syntax-binding-set->syntax [binding-set syntax-binding-set?] [datum any/c]) syntax-binding-set?] +@defproc[(syntax-binding-set-extend [binding-set syntax-binding-set?] + [symbol symbol?] + [phase (or/c exact-integer? #f)] + [mpi module-path-index?] + [#:source-symbol source-symbol symbol? symbol] + [#:source-phase source-phase (or/c exact-integer? #f) phase] + [#:nominal-module nominal-mpi module-path-index? mpi] + [#:nominal-phase nominal-phase (or/c exact-integer? #f) source-phase] + [#:nominal-symbol nominal-symbol symbol? source-symbol] + [#:nominal-require-phase nominal-require-phase (or/c exact-integer? #f) 0] + [#:inspector inspector (or/c inspector? #f) #f]) + syntax-binding-set?] +)]{ + +A @deftech{syntax binding set} supports explicit construction of +binding information for a syntax object. Start by creating an empty +binding set with @racket[syntax-binding-set], add bindings with +@racket[binding-set-extend], and create a syntax object that hash the +bindings as its @tech{lexical information} using +@racket[syntax-binding-set->syntax]. + +The first three arguments to @racket[syntax-binding-set-extend] +establish a binding of @racket[symbol] at @racket[phase] to an +identifier that is defined in the module referenced by @racket[mpi]. +Supply @racket[source-symbol] to make the binding of @racket[symbol] +refer to a different provided variable from @racket[mpi], and so on; +the optional arguments correspond to the results of +@racket[identifier-binding]. + +@history[#:added "7.0.0.12"]} + @defproc[(datum-intern-literal [v any/c]) any/c]{ diff --git a/pkgs/racket-test-core/tests/racket/stx.rktl b/pkgs/racket-test-core/tests/racket/stx.rktl index f15b034929..ebceb5bc1d 100644 --- a/pkgs/racket-test-core/tests/racket/stx.rktl +++ b/pkgs/racket-test-core/tests/racket/stx.rktl @@ -1922,6 +1922,61 @@ (error-test #'(a-rule-pattern) no-match?) (error-test #'(a-rule-pattern 1) no-match?)) +;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Explicit binding sets + +(let ([bs (syntax-binding-set-extend + (syntax-binding-set-extend + (syntax-binding-set-extend + (syntax-binding-set) + 'car 0 (module-path-index-join ''#%runtime #f)) + 'cdr 1 (module-path-index-join ''#%runtime #f) + #:source-phase 0 + #:nominal-require-phase 1) + 'items 0 (module-path-index-join ''#%runtime #f) + #:source-symbol 'list)]) + (test #t free-identifier=? + (syntax-binding-set->syntax bs 'car) + #'car) + (test #f free-identifier=? + (syntax-binding-set->syntax bs 'cdr) + #'cdr) + (test #t free-identifier=? + (syntax-binding-set->syntax bs 'cdr) + #'cdr + 1) + (test #f free-identifier=? + (syntax-binding-set->syntax bs 'list) + #'list) + (test #t free-identifier=? + (syntax-binding-set->syntax bs 'items) + #'list)) + +(module synthesizes-self-reference racket/base + (require (for-syntax racket/base)) + (provide results) + + (define x 5) + + (define-syntax (f stx) + (define the-x + (syntax-binding-set->syntax + (syntax-binding-set-extend + (syntax-binding-set) + 'x 0 (variable-reference->module-path-index + (#%variable-reference))) + 'x)) + + #`(list #,the-x + x + (eval (quote-syntax #,the-x)) + (eval (quote-syntax x)))) + + (define results (f))) + +(dynamic-require ''synthesizes-self-reference 0) +(test '(5 5 5 5) dynamic-require ''synthesizes-self-reference 'results) + ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Extra taint tests diff --git a/racket/collects/racket/private/base.rkt b/racket/collects/racket/private/base.rkt index ae1842be83..415aafdaa0 100644 --- a/racket/collects/racket/private/base.rkt +++ b/racket/collects/racket/private/base.rkt @@ -12,7 +12,8 @@ "cert.rkt" "submodule.rkt" "generic-interfaces.rkt" - "kw-syntax-local.rkt" ; shadows local-expand and variants + "kw-syntax-local.rkt" ; shadows `local-expand` and variants + "kw-syntax-binding.rkt" ; shadows `syntax-binding-set-extend` (for-syntax "stxcase-scheme.rkt")) (#%provide (all-from-except "pre-base.rkt" @@ -40,6 +41,7 @@ (all-from "submodule.rkt") (all-from "generic-interfaces.rkt") (all-from "kw-syntax-local.rkt") + (all-from "kw-syntax-binding.rkt") (for-syntax syntax-rules syntax-id-rules ... _) (rename -open-input-file open-input-file) (rename -open-output-file open-output-file) diff --git a/racket/collects/racket/private/kw-syntax-binding.rkt b/racket/collects/racket/private/kw-syntax-binding.rkt new file mode 100644 index 0000000000..8fef177622 --- /dev/null +++ b/racket/collects/racket/private/kw-syntax-binding.rkt @@ -0,0 +1,18 @@ +(module kw-syntax-local "pre-base.rkt" + (require (prefix-in k: '#%kernel)) + + (provide syntax-binding-set-extend) + + (define (syntax-binding-set-extend bs as-sym as-phase mpi + #:source-symbol [sym as-sym] + #:source-phase [phase as-phase] + #:nominal-module [nominal-mpi mpi] + #:nominal-phase [nominal-phase phase] + #:nominal-symbol [nominal-sym sym] + #:nominal-require-phase [nominal-require-phase 0] + #:inspector [insp #f]) + (k:syntax-binding-set-extend bs as-sym as-phase mpi + sym phase + nominal-mpi nominal-phase nominal-sym + nominal-require-phase + insp))) diff --git a/racket/src/expander/boot/core-primitive.rkt b/racket/src/expander/boot/core-primitive.rkt index af2a3c6b7f..31439bfb06 100644 --- a/racket/src/expander/boot/core-primitive.rkt +++ b/racket/src/expander/boot/core-primitive.rkt @@ -79,7 +79,12 @@ syntax-disarm syntax-rearm syntax-taint - + + syntax-binding-set + syntax-binding-set? + syntax-binding-set-extend + syntax-binding-set->syntax + raise-syntax-error struct:exn:fail:syntax exn:fail:syntax diff --git a/racket/src/expander/demo.rkt b/racket/src/expander/demo.rkt index 9668022025..d49bf375de 100644 --- a/racket/src/expander/demo.rkt +++ b/racket/src/expander/demo.rkt @@ -1407,3 +1407,17 @@ 'kar) (check-value (cadr (identifier-binding s-also-in-alt)) 'car) ; because using combined scopes is ambiguous + +;; ---------------------------------------- +;; Explicitly constructed binding sets + +(eval-expression + #:check '(#t #f) + '(let-values ([(bs) (syntax-binding-set-extend + (syntax-binding-set) + 'car 0 (module-path-index-join ''#%runtime #f))]) + (list + (free-identifier=? (syntax-binding-set->syntax bs 'car) + (quote-syntax car)) + (free-identifier=? (syntax-binding-set->syntax bs 'cdr) + (quote-syntax cdr))))) diff --git a/racket/src/expander/main.rkt b/racket/src/expander/main.rkt index db57947b31..62bac92374 100644 --- a/racket/src/expander/main.rkt +++ b/racket/src/expander/main.rkt @@ -109,8 +109,9 @@ compile-keep-source-locations! ; to enable if the back end wants them - ;; This functions are provided for basic testing + ;; The remaining functions are provided for basic testing ;; (such as "demo.rkt") + syntax? syntax-e identifier? syntax-property @@ -118,7 +119,7 @@ module-compiled-exports module-compiled-indirect-exports read-accept-compiled - + syntax-shift-phase-level bound-identifier=?) diff --git a/racket/src/expander/syntax/api.rkt b/racket/src/expander/syntax/api.rkt index 1ac1d6bb1e..a2627afda5 100644 --- a/racket/src/expander/syntax/api.rkt +++ b/racket/src/expander/syntax/api.rkt @@ -1,5 +1,6 @@ #lang racket/base (require "../common/phase.rkt" + "../common/module-path.rkt" (rename-in "syntax.rkt" [syntax->datum raw:syntax->datum] [datum->syntax raw:datum->syntax]) @@ -17,6 +18,10 @@ [identifier-binding-symbol raw:identifier-binding-symbol]) (rename-in "track.rkt" [syntax-track-origin raw:syntax-track-origin]) + (rename-in "binding-set.rkt" + [syntax-binding-set raw:syntax-binding-set] + [syntax-binding-set-extend raw:syntax-binding-set-extend] + [syntax-binding-set->syntax raw:syntax-binding-set->syntax]) "../expand/syntax-local.rkt" "srcloc.rkt" "../common/contract.rkt" @@ -38,6 +43,10 @@ syntax->datum maybe-syntax->datum datum->syntax + syntax-binding-set? + syntax-binding-set + syntax-binding-set-extend + syntax-binding-set->syntax syntax->list identifier? bound-identifier=? @@ -91,6 +100,38 @@ (raise-argument-error who "(or #f syntax?)" stx-p)) (raw:datum->syntax stx-c s (to-srcloc-stx stx-l) stx-p)) +(define/who (syntax-binding-set) + (raw:syntax-binding-set null)) + +(define/who (syntax-binding-set-extend bs as-sym as-phase mpi + [sym as-sym] + [phase as-phase] + [nominal-mpi mpi] + [nominal-phase phase] + [nominal-sym sym] + [nominal-require-phase 0] + [insp #f]) + (check who syntax-binding-set? bs) + (check who symbol? as-sym) + (check who phase? #:contract phase?-string as-phase) + (check who module-path-index? mpi) + (check who symbol? sym) + (check who phase? #:contract phase?-string phase) + (check who module-path-index? nominal-mpi) + (check who phase? #:contract phase?-string nominal-phase) + (check who symbol? nominal-sym) + (check who phase? #:contract phase?-string nominal-require-phase) + (check who inspector? #:or-false insp) + (raw:syntax-binding-set-extend bs as-sym as-phase mpi + sym phase + nominal-mpi nominal-phase nominal-sym + nominal-require-phase + insp)) + +(define/who (syntax-binding-set->syntax bs datum) + (check who syntax-binding-set? bs) + (raw:syntax-binding-set->syntax bs datum)) + (define/who (syntax->list s) (check who syntax? s) (raw:syntax->list s)) diff --git a/racket/src/expander/syntax/binding-set.rkt b/racket/src/expander/syntax/binding-set.rkt new file mode 100644 index 0000000000..d6c620d14b --- /dev/null +++ b/racket/src/expander/syntax/binding-set.rkt @@ -0,0 +1,38 @@ +#lang racket/base +(require "syntax.rkt" + "scope.rkt" + "module-binding.rkt") + +(provide syntax-binding-set + syntax-binding-set? + syntax-binding-set-extend + syntax-binding-set->syntax) + +(struct syntax-binding-set (binds)) +(struct bind (sym phase binding)) + +(define (syntax-binding-set-extend bs as-sym as-phase mpi + sym phase + nominal-mpi nominal-phase nominal-sym + nominal-require-phase + inspector) + (struct-copy syntax-binding-set bs + [binds + (cons (bind as-sym + as-phase + (make-module-binding mpi phase sym + #:extra-inspector inspector + #:nominal-module nominal-mpi + #:nominal-phase nominal-phase + #:nominal-sym nominal-sym + #:nominal-require-phase nominal-require-phase)) + (syntax-binding-set-binds bs))])) + +(define (syntax-binding-set->syntax bs datum) + (define s (add-scope (datum->syntax #f datum) + (new-multi-scope 'binding-set))) + (for ([bind (in-list (syntax-binding-set-binds bs))]) + (add-binding-in-scopes! (syntax-scope-set s (bind-phase bind)) + (bind-sym bind) + (bind-binding bind))) + s) diff --git a/racket/src/expander/syntax/module-binding.rkt b/racket/src/expander/syntax/module-binding.rkt index e46988dc34..df1051a8e4 100644 --- a/racket/src/expander/syntax/module-binding.rkt +++ b/racket/src/expander/syntax/module-binding.rkt @@ -22,7 +22,6 @@ ;; ---------------------------------------- (define (make-module-binding module phase sym - #:wrt [wrt-sym sym] #:nominal-module [nominal-module module] #:nominal-phase [nominal-phase phase] #:nominal-sym [nominal-sym sym] diff --git a/racket/src/racket/src/schvers.h b/racket/src/racket/src/schvers.h index dfbff86ee0..2c50346f96 100644 --- a/racket/src/racket/src/schvers.h +++ b/racket/src/racket/src/schvers.h @@ -13,12 +13,12 @@ consistently.) */ -#define MZSCHEME_VERSION "7.0.0.11" +#define MZSCHEME_VERSION "7.0.0.12" #define MZSCHEME_VERSION_X 7 #define MZSCHEME_VERSION_Y 0 #define MZSCHEME_VERSION_Z 0 -#define MZSCHEME_VERSION_W 11 +#define MZSCHEME_VERSION_W 12 #define MZSCHEME_VERSION_MAJOR ((MZSCHEME_VERSION_X * 100) + MZSCHEME_VERSION_Y) #define MZSCHEME_VERSION_MINOR ((MZSCHEME_VERSION_Z * 1000) + MZSCHEME_VERSION_W) diff --git a/racket/src/racket/src/startup.inc b/racket/src/racket/src/startup.inc index 6a53684897..4f69584a42 100644 --- a/racket/src/racket/src/startup.inc +++ b/racket/src/racket/src/startup.inc @@ -6005,34 +6005,31 @@ static const char *startup_source = "(define-values(binding-frame-id)(lambda(b_0)(begin(if(full-binding? b_0)(full-binding-frame-id b_0) #f))))" "(define-values(binding-free=id)(lambda(b_0)(begin(if(full-binding? b_0)(full-binding-free=id b_0) #f))))" "(define-values" -"(make-module-binding22.1)" -"(lambda(extra-inspector8_0" -" extra-nominal-bindings9_0" -" frame-id6_0" -" free=id7_0" -" nominal-module2_0" -" nominal-phase3_0" -" nominal-require-phase5_0" -" nominal-sym4_0" -" wrt1_0" -" module19_0" -" phase20_0" -" sym21_0)" +"(make-module-binding20.1)" +"(lambda(extra-inspector7_0" +" extra-nominal-bindings8_0" +" frame-id5_0" +" free=id6_0" +" nominal-module1_0" +" nominal-phase2_0" +" nominal-require-phase4_0" +" nominal-sym3_0" +" module17_0" +" phase18_0" +" sym19_0)" "(begin" -" 'make-module-binding22" -"(let-values(((module_0) module19_0))" -"(let-values(((phase_0) phase20_0))" -"(let-values(((sym_0) sym21_0))" -"(let-values()" -"(let-values(((nominal-module_0)" -"(if(eq? nominal-module2_0 unsafe-undefined) module_0 nominal-module2_0)))" -"(let-values(((nominal-phase_0)(if(eq? nominal-phase3_0 unsafe-undefined) phase_0 nominal-phase3_0)))" -"(let-values(((nominal-sym_0)(if(eq? nominal-sym4_0 unsafe-undefined) sym_0 nominal-sym4_0)))" -"(let-values(((nominal-require-phase_0) nominal-require-phase5_0))" -"(let-values(((frame-id_0) frame-id6_0))" -"(let-values(((free=id_0) free=id7_0))" -"(let-values(((extra-inspector_0) extra-inspector8_0))" -"(let-values(((extra-nominal-bindings_0) extra-nominal-bindings9_0))" +" 'make-module-binding20" +"(let-values(((module_0) module17_0))" +"(let-values(((phase_0) phase18_0))" +"(let-values(((sym_0) sym19_0))" +"(let-values(((nominal-module_0)(if(eq? nominal-module1_0 unsafe-undefined) module_0 nominal-module1_0)))" +"(let-values(((nominal-phase_0)(if(eq? nominal-phase2_0 unsafe-undefined) phase_0 nominal-phase2_0)))" +"(let-values(((nominal-sym_0)(if(eq? nominal-sym3_0 unsafe-undefined) sym_0 nominal-sym3_0)))" +"(let-values(((nominal-require-phase_0) nominal-require-phase4_0))" +"(let-values(((frame-id_0) frame-id5_0))" +"(let-values(((free=id_0) free=id6_0))" +"(let-values(((extra-inspector_0) extra-inspector7_0))" +"(let-values(((extra-nominal-bindings_0) extra-nominal-bindings8_0))" "(let-values()" "(if(let-values(((or-part_0) frame-id_0))" "(if or-part_0" @@ -6052,7 +6049,7 @@ static const char *startup_source = " #f)" " #f))))))))" "(let-values()" -"(full-module-binding51.1" +"(full-module-binding49.1" " frame-id_0" " free=id_0" " module_0" @@ -6065,84 +6062,79 @@ static const char *startup_source = " extra-inspector_0" " extra-nominal-bindings_0))" "(let-values()" -"(simple-module-binding52.1" -" module_0" -" phase_0" -" sym_0" -" nominal-module_0)))))))))))))))))))" +"(simple-module-binding50.1 module_0 phase_0 sym_0 nominal-module_0))))))))))))))))))" "(define-values" -"(module-binding-update48.1)" -"(lambda(extra-inspector34_0" -" extra-nominal-bindings35_0" -" frame-id32_0" -" free=id33_0" -" module25_0" -" nominal-module28_0" -" nominal-phase29_0" -" nominal-require-phase31_0" -" nominal-sym30_0" -" phase26_0" -" sym27_0" -" b47_0)" +"(module-binding-update46.1)" +"(lambda(extra-inspector32_0" +" extra-nominal-bindings33_0" +" frame-id30_0" +" free=id31_0" +" module23_0" +" nominal-module26_0" +" nominal-phase27_0" +" nominal-require-phase29_0" +" nominal-sym28_0" +" phase24_0" +" sym25_0" +" b45_0)" "(begin" -" 'module-binding-update48" -"(let-values(((b_0) b47_0))" -"(let-values(((module_0)(if(eq? module25_0 unsafe-undefined)(module-binding-module b_0) module25_0)))" -"(let-values(((phase_0)(if(eq? phase26_0 unsafe-undefined)(module-binding-phase b_0) phase26_0)))" -"(let-values(((sym_0)(if(eq? sym27_0 unsafe-undefined)(module-binding-sym b_0) sym27_0)))" +" 'module-binding-update46" +"(let-values(((b_0) b45_0))" +"(let-values(((module_0)(if(eq? module23_0 unsafe-undefined)(module-binding-module b_0) module23_0)))" +"(let-values(((phase_0)(if(eq? phase24_0 unsafe-undefined)(module-binding-phase b_0) phase24_0)))" +"(let-values(((sym_0)(if(eq? sym25_0 unsafe-undefined)(module-binding-sym b_0) sym25_0)))" "(let-values(((nominal-module_0)" -"(if(eq? nominal-module28_0 unsafe-undefined)" +"(if(eq? nominal-module26_0 unsafe-undefined)" "(module-binding-nominal-module b_0)" -" nominal-module28_0)))" +" nominal-module26_0)))" "(let-values(((nominal-phase_0)" -"(if(eq? nominal-phase29_0 unsafe-undefined)" +"(if(eq? nominal-phase27_0 unsafe-undefined)" "(module-binding-nominal-phase b_0)" -" nominal-phase29_0)))" +" nominal-phase27_0)))" "(let-values(((nominal-sym_0)" -"(if(eq? nominal-sym30_0 unsafe-undefined)" +"(if(eq? nominal-sym28_0 unsafe-undefined)" "(module-binding-nominal-sym b_0)" -" nominal-sym30_0)))" +" nominal-sym28_0)))" "(let-values(((nominal-require-phase_0)" -"(if(eq? nominal-require-phase31_0 unsafe-undefined)" +"(if(eq? nominal-require-phase29_0 unsafe-undefined)" "(module-binding-nominal-require-phase b_0)" -" nominal-require-phase31_0)))" +" nominal-require-phase29_0)))" "(let-values(((frame-id_0)" -"(if(eq? frame-id32_0 unsafe-undefined)(binding-frame-id b_0) frame-id32_0)))" +"(if(eq? frame-id30_0 unsafe-undefined)(binding-frame-id b_0) frame-id30_0)))" "(let-values(((free=id_0)" -"(if(eq? free=id33_0 unsafe-undefined)(binding-free=id b_0) free=id33_0)))" +"(if(eq? free=id31_0 unsafe-undefined)(binding-free=id b_0) free=id31_0)))" "(let-values(((extra-inspector_0)" -"(if(eq? extra-inspector34_0 unsafe-undefined)" +"(if(eq? extra-inspector32_0 unsafe-undefined)" "(module-binding-extra-inspector b_0)" -" extra-inspector34_0)))" +" extra-inspector32_0)))" "(let-values(((extra-nominal-bindings_0)" -"(if(eq? extra-nominal-bindings35_0 unsafe-undefined)" +"(if(eq? extra-nominal-bindings33_0 unsafe-undefined)" "(module-binding-extra-nominal-bindings b_0)" -" extra-nominal-bindings35_0)))" +" extra-nominal-bindings33_0)))" "(let-values()" -"(let-values(((module53_0) module_0)" -"((phase54_0) phase_0)" -"((sym55_0) sym_0)" -"((nominal-module56_0) nominal-module_0)" -"((nominal-phase57_0) nominal-phase_0)" -"((nominal-sym58_0) nominal-sym_0)" -"((nominal-require-phase59_0) nominal-require-phase_0)" -"((frame-id60_0) frame-id_0)" -"((free=id61_0) free=id_0)" -"((extra-inspector62_0) extra-inspector_0)" -"((extra-nominal-bindings63_0) extra-nominal-bindings_0))" -"(make-module-binding22.1" -" extra-inspector62_0" -" extra-nominal-bindings63_0" -" frame-id60_0" -" free=id61_0" -" nominal-module56_0" -" nominal-phase57_0" -" nominal-require-phase59_0" -" nominal-sym58_0" -" unsafe-undefined" -" module53_0" -" phase54_0" -" sym55_0))))))))))))))))))" +"(let-values(((module51_0) module_0)" +"((phase52_0) phase_0)" +"((sym53_0) sym_0)" +"((nominal-module54_0) nominal-module_0)" +"((nominal-phase55_0) nominal-phase_0)" +"((nominal-sym56_0) nominal-sym_0)" +"((nominal-require-phase57_0) nominal-require-phase_0)" +"((frame-id58_0) frame-id_0)" +"((free=id59_0) free=id_0)" +"((extra-inspector60_0) extra-inspector_0)" +"((extra-nominal-bindings61_0) extra-nominal-bindings_0))" +"(make-module-binding20.1" +" extra-inspector60_0" +" extra-nominal-bindings61_0" +" frame-id58_0" +" free=id59_0" +" nominal-module54_0" +" nominal-phase55_0" +" nominal-require-phase57_0" +" nominal-sym56_0" +" module51_0" +" phase52_0" +" sym53_0))))))))))))))))))" "(define-values" "(module-binding?)" "(lambda(b_0)" @@ -6150,7 +6142,7 @@ static const char *startup_source = "(let-values(((or-part_0)(simple-module-binding? b_0)))(if or-part_0 or-part_0(full-module-binding? b_0))))))" "(define-values" "(struct:full-module-binding" -" full-module-binding51.1" +" full-module-binding49.1" " full-module-binding?" " full-module-binding-module" " full-module-binding-phase" @@ -6177,11 +6169,11 @@ static const char *startup_source = "(lambda(b_0 ser-push!_0 state_0)" "(let-values(((simplified-b_0)" "(if(full-binding-frame-id b_0)" -"(let-values(((b65_0) b_0)((temp66_0) #f))" -"(module-binding-update48.1" +"(let-values(((b63_0) b_0)((temp64_0) #f))" +"(module-binding-update46.1" " unsafe-undefined" " unsafe-undefined" -" temp66_0" +" temp64_0" " unsafe-undefined" " unsafe-undefined" " unsafe-undefined" @@ -6190,7 +6182,7 @@ static const char *startup_source = " unsafe-undefined" " unsafe-undefined" " unsafe-undefined" -" b65_0))" +" b63_0))" " b_0)))" "(if(full-module-binding? simplified-b_0)" "(let-values()" @@ -6229,7 +6221,7 @@ static const char *startup_source = "(make-struct-field-accessor -ref_0 8 'extra-nominal-bindings))))" "(define-values" "(struct:simple-module-binding" -" simple-module-binding52.1" +" simple-module-binding50.1" " simple-module-binding?" " simple-module-binding-module" " simple-module-binding-phase" @@ -6281,33 +6273,32 @@ static const char *startup_source = " extra-inspector_0" " extra-nominal-bindings_0)" "(begin" -"(let-values(((module68_0) module_0)" -"((phase69_0) phase_0)" -"((sym70_0) sym_0)" -"((nominal-module71_0) nominal-module_0)" -"((nominal-phase72_0) nominal-phase_0)" -"((nominal-sym73_0) nominal-sym_0)" -"((nominal-require-phase74_0) nominal-require-phase_0)" -"((free=id75_0) free=id_0)" -"((extra-inspector76_0) extra-inspector_0)" -"((extra-nominal-bindings77_0) extra-nominal-bindings_0))" -"(make-module-binding22.1" -" extra-inspector76_0" -" extra-nominal-bindings77_0" +"(let-values(((module66_0) module_0)" +"((phase67_0) phase_0)" +"((sym68_0) sym_0)" +"((nominal-module69_0) nominal-module_0)" +"((nominal-phase70_0) nominal-phase_0)" +"((nominal-sym71_0) nominal-sym_0)" +"((nominal-require-phase72_0) nominal-require-phase_0)" +"((free=id73_0) free=id_0)" +"((extra-inspector74_0) extra-inspector_0)" +"((extra-nominal-bindings75_0) extra-nominal-bindings_0))" +"(make-module-binding20.1" +" extra-inspector74_0" +" extra-nominal-bindings75_0" " #f" -" free=id75_0" -" nominal-module71_0" -" nominal-phase72_0" -" nominal-require-phase74_0" -" nominal-sym73_0" -" unsafe-undefined" -" module68_0" -" phase69_0" -" sym70_0)))))" +" free=id73_0" +" nominal-module69_0" +" nominal-phase70_0" +" nominal-require-phase72_0" +" nominal-sym71_0" +" module66_0" +" phase67_0" +" sym68_0)))))" "(define-values" "(deserialize-simple-module-binding)" "(lambda(module_0 sym_0 phase_0 nominal-module_0)" -"(begin(simple-module-binding52.1 module_0 phase_0 sym_0 nominal-module_0))))" +"(begin(simple-module-binding50.1 module_0 phase_0 sym_0 nominal-module_0))))" "(define-values" "(module-binding-module)" "(lambda(b_0)" @@ -10659,7 +10650,7 @@ static const char *startup_source = "(if(module-binding? b_0)" "(let-values()" "(let-values(((b69_0) b_0)((free=id70_0) free=id_0))" -"(module-binding-update48.1" +"(module-binding-update46.1" " unsafe-undefined" " unsafe-undefined" " unsafe-undefined" @@ -10880,7 +10871,7 @@ static const char *startup_source = " for-loop_0)" " null" " lst_0))))))" -"(module-binding-update48.1" +"(module-binding-update46.1" " unsafe-undefined" " temp92_0" " unsafe-undefined" @@ -10972,7 +10963,7 @@ static const char *startup_source = " for-loop_0)" " null" " lst_0))))))" -"(module-binding-update48.1" +"(module-binding-update46.1" " unsafe-undefined" " temp98_0" " unsafe-undefined" @@ -11240,7 +11231,7 @@ static const char *startup_source = "(module-binding-extra-inspector binding_0)" " #f))" "((null25_0) null))" -"(module-binding-update48.1" +"(module-binding-update46.1" " temp24_0" " null25_0" " temp23_0" @@ -12513,6 +12504,123 @@ static const char *startup_source = " new-stx_0" " lst_0))))))" "(define-values" +"(struct:syntax-binding-set syntax-binding-set1.1 1/syntax-binding-set? syntax-binding-set-binds)" +"(let-values(((struct:_0 make-_0 ?_0 -ref_0 -set!_0)" +"(let-values()" +"(let-values()" +"(make-struct-type" +" 'syntax-binding-set" +" #f" +" 1" +" 0" +" #f" +" null" +"(current-inspector)" +" #f" +" '(0)" +" #f" +" 'syntax-binding-set)))))" +"(values struct:_0 make-_0 ?_0(make-struct-field-accessor -ref_0 0 'binds))))" +"(define-values" +"(struct:bind bind2.1 bind? bind-sym bind-phase bind-binding)" +"(let-values(((struct:_0 make-_0 ?_0 -ref_0 -set!_0)" +"(let-values()" +"(let-values()(make-struct-type 'bind #f 3 0 #f null(current-inspector) #f '(0 1 2) #f 'bind)))))" +"(values" +" struct:_0" +" make-_0" +" ?_0" +"(make-struct-field-accessor -ref_0 0 'sym)" +"(make-struct-field-accessor -ref_0 1 'phase)" +"(make-struct-field-accessor -ref_0 2 'binding))))" +"(define-values" +"(syntax-binding-set-extend$1)" +"(lambda(bs_0" +" as-sym_0" +" as-phase_0" +" mpi_0" +" sym_0" +" phase_0" +" nominal-mpi_0" +" nominal-phase_0" +" nominal-sym_0" +" nominal-require-phase_0" +" inspector_0)" +"(begin" +" 'syntax-binding-set-extend" +"(let-values(((the-struct_0) bs_0))" +"(if(1/syntax-binding-set? the-struct_0)" +"(let-values(((binds5_0)" +"(cons" +"(bind2.1" +" as-sym_0" +" as-phase_0" +"(let-values(((mpi6_0) mpi_0)" +"((phase7_0) phase_0)" +"((sym8_0) sym_0)" +"((inspector9_0) inspector_0)" +"((nominal-mpi10_0) nominal-mpi_0)" +"((nominal-phase11_0) nominal-phase_0)" +"((nominal-sym12_0) nominal-sym_0)" +"((nominal-require-phase13_0) nominal-require-phase_0))" +"(make-module-binding20.1" +" inspector9_0" +" null" +" #f" +" #f" +" nominal-mpi10_0" +" nominal-phase11_0" +" nominal-require-phase13_0" +" nominal-sym12_0" +" mpi6_0" +" phase7_0" +" sym8_0)))" +"(syntax-binding-set-binds bs_0))))" +"(syntax-binding-set1.1 binds5_0))" +" (raise-argument-error 'struct-copy \"syntax-binding-set?\" the-struct_0))))))" +"(define-values" +"(syntax-binding-set->syntax$1)" +"(lambda(bs_0 datum_0)" +"(begin" +" 'syntax-binding-set->syntax" +"(let-values(((s_0)(add-scope(datum->syntax$1 #f datum_0)(new-multi-scope 'binding-set))))" +"(begin" +"(let-values(((lst_0)(syntax-binding-set-binds bs_0)))" +"(begin" +"(if(variable-reference-from-unsafe?(#%variable-reference))(void)(let-values()(check-list lst_0)))" +"((letrec-values(((for-loop_0)" +"(lambda(lst_1)" +"(begin" +" 'for-loop" +"(if(pair? lst_1)" +"(let-values(((bind_0)(unsafe-car lst_1))((rest_0)(unsafe-cdr lst_1)))" +"(let-values((()" +"(let-values()" +"(let-values((()" +"(let-values()" +"(begin" +"(let-values()" +"(let-values(((temp14_0)" +"(syntax-scope-set" +" s_0" +"(bind-phase bind_0)))" +"((temp15_0)(bind-sym bind_0))" +"((temp16_0)" +"(bind-binding bind_0)))" +"(add-binding-in-scopes!20.1" +" #f" +" temp14_0" +" temp15_0" +" temp16_0)))" +"(values)))))" +"(values)))))" +"(if(not #f)(for-loop_0 rest_0)(values))))" +"(values))))))" +" for-loop_0)" +" lst_0)))" +"(void)" +" s_0)))))" +"(define-values" "(1/struct:exn:fail:syntax make-exn:fail:syntax$1 1/exn:fail:syntax? 1/exn:fail:syntax-exprs)" "(let-values(((struct:_0 make-_0 ?_0 -ref_0 -set!_0)" "(let-values()" @@ -14919,7 +15027,7 @@ static const char *startup_source = " #f)" "(let-values()" "(let-values(((next-b4_0) next-b_0)((temp5_0)(syntax-inspector id_1)))" -"(module-binding-update48.1" +"(module-binding-update46.1" " temp5_0" " unsafe-undefined" " unsafe-undefined" @@ -15336,7 +15444,7 @@ static const char *startup_source = "(let-values(((temp1_0)(datum->syntax$1 core-stx sym_0))" "((temp2_0)" "(let-values(((core-mpi4_0) core-mpi)((temp5_0) 0)((sym6_0) sym_0))" -"(make-module-binding22.1" +"(make-module-binding20.1" " #f" " null" " #f" @@ -15345,7 +15453,6 @@ static const char *startup_source = " unsafe-undefined" " 0" " unsafe-undefined" -" unsafe-undefined" " core-mpi4_0" " temp5_0" " sym6_0)))" @@ -15415,7 +15522,7 @@ static const char *startup_source = " 0)" "((sym19_0)" " sym_0))" -"(make-module-binding22.1" +"(make-module-binding20.1" " #f" " null" " #f" @@ -15424,7 +15531,6 @@ static const char *startup_source = " unsafe-undefined" " 0" " unsafe-undefined" -" unsafe-undefined" " core-mpi17_0" " temp18_0" " sym19_0))))" @@ -22677,7 +22783,7 @@ static const char *startup_source = " b_0" "(module-binding-extra-nominal-bindings" " b_0))))" -"(module-binding-update48.1" +"(module-binding-update46.1" " unsafe-undefined" " temp168_0" " unsafe-undefined" @@ -23169,7 +23275,7 @@ static const char *startup_source = "(let-values(((plain-binding_0)" "(if(binding-free=id binding_0)" "(let-values(((binding169_0) binding_0)((temp170_0) #f))" -"(module-binding-update48.1" +"(module-binding-update46.1" " unsafe-undefined" " unsafe-undefined" " unsafe-undefined" @@ -26392,7 +26498,7 @@ static const char *startup_source = "((phase5_0) phase_0)" "((sym6_0) sym_0)" "((temp7_0)(root-expand-context-frame-id(namespace-get-root-expand-ctx ns_0))))" -"(make-module-binding22.1" +"(make-module-binding20.1" " #f" " null" " temp7_0" @@ -26401,7 +26507,6 @@ static const char *startup_source = " unsafe-undefined" " 0" " unsafe-undefined" -" unsafe-undefined" " mpi4_0" " phase5_0" " sym6_0))))" @@ -27862,7 +27967,7 @@ static const char *startup_source = "(let-values(((temp43_0)(compile-context-self cctx_0))" "((temp44_0)(compile-context-phase cctx_0))" "((temp45_0)(syntax-e$1(parsed-s p_0))))" -"(make-module-binding22.1" +"(make-module-binding20.1" " #f" " null" " #f" @@ -27871,7 +27976,6 @@ static const char *startup_source = " unsafe-undefined" " 0" " unsafe-undefined" -" unsafe-undefined" " temp43_0" " temp44_0" " temp45_0))))))" @@ -33564,7 +33668,7 @@ static const char *startup_source = " frame-id_0)" "((sym27_0)" " sym_0))" -"(make-module-binding22.1" +"(make-module-binding20.1" " #f" " null" " frame-id26_0" @@ -33573,7 +33677,6 @@ static const char *startup_source = " unsafe-undefined" " 0" " sym27_0" -" unsafe-undefined" " self23_0" " phase24_0" " defined-sym25_0))))" @@ -33879,7 +33982,7 @@ static const char *startup_source = " phase_0)" "((sym15_0)" " sym_0))" -"(make-module-binding22.1" +"(make-module-binding20.1" " #f" " null" " #f" @@ -33888,7 +33991,6 @@ static const char *startup_source = " unsafe-undefined" " 0" " unsafe-undefined" -" unsafe-undefined" " self13_0" " phase14_0" " sym15_0)))" @@ -37994,7 +38096,7 @@ static const char *startup_source = "((sym2_0) sym_0)" "((temp3_0)" "(let-values(((runtime-mpi4_0) runtime-mpi)((temp5_0) 0)((sym6_0) sym_0))" -"(make-module-binding22.1" +"(make-module-binding20.1" " #f" " null" " #f" @@ -38003,7 +38105,6 @@ static const char *startup_source = " unsafe-undefined" " 0" " unsafe-undefined" -" unsafe-undefined" " runtime-mpi4_0" " temp5_0" " sym6_0))))" @@ -43064,6 +43165,275 @@ static const char *startup_source = "((stx-c_0 s_0 stx-l_0 stx-p2_0)(datum->syntax6_0 stx-c_0 s_0 stx-l_0 stx-p2_0 #f))" "((stx-c_0 s_0 stx-l1_0)(datum->syntax6_0 stx-c_0 s_0 stx-l1_0 #f #f)))))" "(define-values" +"(1/syntax-binding-set)" +"(lambda()(begin 'syntax-binding-set(let-values()(let-values()(syntax-binding-set1.1 null))))))" +"(define-values" +"(1/syntax-binding-set-extend)" +"(let-values(((syntax-binding-set-extend19_0)" +"(lambda(bs15_0" +" as-sym16_0" +" as-phase17_0" +" mpi18_0" +" sym8_0" +" phase9_0" +" nominal-mpi10_0" +" nominal-phase11_0" +" nominal-sym12_0" +" nominal-require-phase13_0" +" insp14_0)" +"(begin" +" 'syntax-binding-set-extend19" +"(let-values(((bs_0) bs15_0))" +"(let-values(((as-sym_0) as-sym16_0))" +"(let-values(((as-phase_0) as-phase17_0))" +"(let-values(((mpi_0) mpi18_0))" +"(let-values(((sym_0)(if(eq? sym8_0 unsafe-undefined) as-sym_0 sym8_0)))" +"(let-values(((phase_0)(if(eq? phase9_0 unsafe-undefined) as-phase_0 phase9_0)))" +"(let-values(((nominal-mpi_0)" +"(if(eq? nominal-mpi10_0 unsafe-undefined) mpi_0 nominal-mpi10_0)))" +"(let-values(((nominal-phase_0)" +"(if(eq? nominal-phase11_0 unsafe-undefined)" +" phase_0" +" nominal-phase11_0)))" +"(let-values(((nominal-sym_0)" +"(if(eq? nominal-sym12_0 unsafe-undefined) sym_0 nominal-sym12_0)))" +"(let-values(((nominal-require-phase_0) nominal-require-phase13_0))" +"(let-values(((insp_0) insp14_0))" +"(let-values()" +"(let-values()" +"(let-values()" +"(begin" +"(if(1/syntax-binding-set? bs_0)" +"(void)" +"(let-values()" +"(raise-argument-error" +" 'syntax-binding-set-extend" +" \"syntax-binding-set?\"" +" bs_0)))" +"(if(symbol? as-sym_0)" +"(void)" +"(let-values()" +"(raise-argument-error" +" 'syntax-binding-set-extend" +" \"symbol?\"" +" as-sym_0)))" +"(if(phase? as-phase_0)" +"(void)" +"(let-values()" +"(raise-argument-error" +" 'syntax-binding-set-extend" +" phase?-string" +" as-phase_0)))" +"(if(1/module-path-index? mpi_0)" +"(void)" +"(let-values()" +"(raise-argument-error" +" 'syntax-binding-set-extend" +" \"module-path-index?\"" +" mpi_0)))" +"(if(symbol? sym_0)" +"(void)" +"(let-values()" +"(raise-argument-error" +" 'syntax-binding-set-extend" +" \"symbol?\"" +" sym_0)))" +"(if(phase? phase_0)" +"(void)" +"(let-values()" +"(raise-argument-error" +" 'syntax-binding-set-extend" +" phase?-string" +" phase_0)))" +"(if(1/module-path-index? nominal-mpi_0)" +"(void)" +"(let-values()" +"(raise-argument-error" +" 'syntax-binding-set-extend" +" \"module-path-index?\"" +" nominal-mpi_0)))" +"(if(phase? nominal-phase_0)" +"(void)" +"(let-values()" +"(raise-argument-error" +" 'syntax-binding-set-extend" +" phase?-string" +" nominal-phase_0)))" +"(if(symbol? nominal-sym_0)" +"(void)" +"(let-values()" +"(raise-argument-error" +" 'syntax-binding-set-extend" +" \"symbol?\"" +" nominal-sym_0)))" +"(if(phase? nominal-require-phase_0)" +"(void)" +"(let-values()" +"(raise-argument-error" +" 'syntax-binding-set-extend" +" phase?-string" +" nominal-require-phase_0)))" +"(if((lambda(x_0)" +"(let-values(((or-part_0)(not x_0)))" +"(if or-part_0 or-part_0(inspector? x_0))))" +" insp_0)" +"(void)" +"(let-values()" +"(raise-argument-error" +" 'syntax-binding-set-extend" +" \"(or/c inspector? #f)\"" +" insp_0)))" +"(syntax-binding-set-extend$1" +" bs_0" +" as-sym_0" +" as-phase_0" +" mpi_0" +" sym_0" +" phase_0" +" nominal-mpi_0" +" nominal-phase_0" +" nominal-sym_0" +" nominal-require-phase_0" +" insp_0))))))))))))))))))))" +"(case-lambda" +"((bs_0 as-sym_0 as-phase_0 mpi_0)" +"(begin" +" 'syntax-binding-set-extend" +"(syntax-binding-set-extend19_0" +" bs_0" +" as-sym_0" +" as-phase_0" +" mpi_0" +" unsafe-undefined" +" unsafe-undefined" +" unsafe-undefined" +" unsafe-undefined" +" unsafe-undefined" +" 0" +" #f)))" +"((bs_0" +" as-sym_0" +" as-phase_0" +" mpi_0" +" sym_0" +" phase_0" +" nominal-mpi_0" +" nominal-phase_0" +" nominal-sym_0" +" nominal-require-phase_0" +" insp14_0)" +"(syntax-binding-set-extend19_0" +" bs_0" +" as-sym_0" +" as-phase_0" +" mpi_0" +" sym_0" +" phase_0" +" nominal-mpi_0" +" nominal-phase_0" +" nominal-sym_0" +" nominal-require-phase_0" +" insp14_0))" +"((bs_0" +" as-sym_0" +" as-phase_0" +" mpi_0" +" sym_0" +" phase_0" +" nominal-mpi_0" +" nominal-phase_0" +" nominal-sym_0" +" nominal-require-phase13_0)" +"(syntax-binding-set-extend19_0" +" bs_0" +" as-sym_0" +" as-phase_0" +" mpi_0" +" sym_0" +" phase_0" +" nominal-mpi_0" +" nominal-phase_0" +" nominal-sym_0" +" nominal-require-phase13_0" +" #f))" +"((bs_0 as-sym_0 as-phase_0 mpi_0 sym_0 phase_0 nominal-mpi_0 nominal-phase_0 nominal-sym12_0)" +"(syntax-binding-set-extend19_0" +" bs_0" +" as-sym_0" +" as-phase_0" +" mpi_0" +" sym_0" +" phase_0" +" nominal-mpi_0" +" nominal-phase_0" +" nominal-sym12_0" +" 0" +" #f))" +"((bs_0 as-sym_0 as-phase_0 mpi_0 sym_0 phase_0 nominal-mpi_0 nominal-phase11_0)" +"(syntax-binding-set-extend19_0" +" bs_0" +" as-sym_0" +" as-phase_0" +" mpi_0" +" sym_0" +" phase_0" +" nominal-mpi_0" +" nominal-phase11_0" +" unsafe-undefined" +" 0" +" #f))" +"((bs_0 as-sym_0 as-phase_0 mpi_0 sym_0 phase_0 nominal-mpi10_0)" +"(syntax-binding-set-extend19_0" +" bs_0" +" as-sym_0" +" as-phase_0" +" mpi_0" +" sym_0" +" phase_0" +" nominal-mpi10_0" +" unsafe-undefined" +" unsafe-undefined" +" 0" +" #f))" +"((bs_0 as-sym_0 as-phase_0 mpi_0 sym_0 phase9_0)" +"(syntax-binding-set-extend19_0" +" bs_0" +" as-sym_0" +" as-phase_0" +" mpi_0" +" sym_0" +" phase9_0" +" unsafe-undefined" +" unsafe-undefined" +" unsafe-undefined" +" 0" +" #f))" +"((bs_0 as-sym_0 as-phase_0 mpi_0 sym8_0)" +"(syntax-binding-set-extend19_0" +" bs_0" +" as-sym_0" +" as-phase_0" +" mpi_0" +" sym8_0" +" unsafe-undefined" +" unsafe-undefined" +" unsafe-undefined" +" unsafe-undefined" +" 0" +" #f)))))" +"(define-values" +"(1/syntax-binding-set->syntax)" +"(lambda(bs_0 datum_0)" +"(begin" +" 'syntax-binding-set->syntax" +"(let-values()" +"(let-values()" +"(begin" +"(if(1/syntax-binding-set? bs_0)" +"(void)" +" (let-values () (raise-argument-error 'syntax-binding-set->syntax \"syntax-binding-set?\" bs_0)))" +"(syntax-binding-set->syntax$1 bs_0 datum_0)))))))" +"(define-values" "(1/syntax->list)" "(lambda(s_0)" "(begin" @@ -43085,14 +43455,14 @@ static const char *startup_source = "(if(syntax-property$1 s_0 original-property-sym)(not(syntax-any-macro-scopes? s_0)) #f)))))))" "(define-values" "(1/bound-identifier=?)" -"(let-values(((bound-identifier=?11_0)" -"(lambda(a9_0 b10_0 phase8_0)" +"(let-values(((bound-identifier=?24_0)" +"(lambda(a22_0 b23_0 phase21_0)" "(begin" -" 'bound-identifier=?11" -"(let-values(((a_0) a9_0))" -"(let-values(((b_0) b10_0))" +" 'bound-identifier=?24" +"(let-values(((a_0) a22_0))" +"(let-values(((b_0) b23_0))" "(let-values(((phase_0)" -"(if(eq? phase8_0 unsafe-undefined)(1/syntax-local-phase-level) phase8_0)))" +"(if(eq? phase21_0 unsafe-undefined)(1/syntax-local-phase-level) phase21_0)))" "(let-values()" "(let-values()" "(let-values()" @@ -43108,19 +43478,19 @@ static const char *startup_source = "(let-values()(raise-argument-error 'bound-identifier=? phase?-string phase_0)))" "(bound-identifier=?$1 a_0 b_0 phase_0))))))))))))" "(case-lambda" -"((a_0 b_0)(begin 'bound-identifier=?(bound-identifier=?11_0 a_0 b_0 unsafe-undefined)))" -"((a_0 b_0 phase8_0)(bound-identifier=?11_0 a_0 b_0 phase8_0)))))" +"((a_0 b_0)(begin 'bound-identifier=?(bound-identifier=?24_0 a_0 b_0 unsafe-undefined)))" +"((a_0 b_0 phase21_0)(bound-identifier=?24_0 a_0 b_0 phase21_0)))))" "(define-values" "(1/free-identifier=?)" -"(let-values(((free-identifier=?17_0)" -"(lambda(a15_0 b16_0 a-phase13_0 b-phase14_0)" +"(let-values(((free-identifier=?30_0)" +"(lambda(a28_0 b29_0 a-phase26_0 b-phase27_0)" "(begin" -" 'free-identifier=?17" -"(let-values(((a_0) a15_0))" -"(let-values(((b_0) b16_0))" +" 'free-identifier=?30" +"(let-values(((a_0) a28_0))" +"(let-values(((b_0) b29_0))" "(let-values(((a-phase_0)" -"(if(eq? a-phase13_0 unsafe-undefined)(1/syntax-local-phase-level) a-phase13_0)))" -"(let-values(((b-phase_0)(if(eq? b-phase14_0 unsafe-undefined) a-phase_0 b-phase14_0)))" +"(if(eq? a-phase26_0 unsafe-undefined)(1/syntax-local-phase-level) a-phase26_0)))" +"(let-values(((b-phase_0)(if(eq? b-phase27_0 unsafe-undefined) a-phase_0 b-phase27_0)))" "(let-values()" "(let-values()" "(let-values()" @@ -43139,9 +43509,9 @@ static const char *startup_source = "(let-values()(raise-argument-error 'free-identifier=? phase?-string b-phase_0)))" "(free-identifier=?$1 a_0 b_0 a-phase_0 b-phase_0)))))))))))))" "(case-lambda" -"((a_0 b_0)(begin 'free-identifier=?(free-identifier=?17_0 a_0 b_0 unsafe-undefined unsafe-undefined)))" -"((a_0 b_0 a-phase_0 b-phase14_0)(free-identifier=?17_0 a_0 b_0 a-phase_0 b-phase14_0))" -"((a_0 b_0 a-phase13_0)(free-identifier=?17_0 a_0 b_0 a-phase13_0 unsafe-undefined)))))" +"((a_0 b_0)(begin 'free-identifier=?(free-identifier=?30_0 a_0 b_0 unsafe-undefined unsafe-undefined)))" +"((a_0 b_0 a-phase_0 b-phase27_0)(free-identifier=?30_0 a_0 b_0 a-phase_0 b-phase27_0))" +"((a_0 b_0 a-phase26_0)(free-identifier=?30_0 a_0 b_0 a-phase26_0 unsafe-undefined)))))" "(define-values" "(1/free-transformer-identifier=?)" "(lambda(a_0 b_0)" @@ -43201,14 +43571,14 @@ static const char *startup_source = "(free-identifier=?$1 a_0 b_0 #f #f)))))))" "(define-values" "(1/identifier-binding)" -"(let-values(((identifier-binding22_0)" -"(lambda(id21_0 phase19_0 top-level-symbol?20_0)" +"(let-values(((identifier-binding35_0)" +"(lambda(id34_0 phase32_0 top-level-symbol?33_0)" "(begin" -" 'identifier-binding22" -"(let-values(((id_0) id21_0))" +" 'identifier-binding35" +"(let-values(((id_0) id34_0))" "(let-values(((phase_0)" -"(if(eq? phase19_0 unsafe-undefined)(1/syntax-local-phase-level) phase19_0)))" -"(let-values(((top-level-symbol?_0) top-level-symbol?20_0))" +"(if(eq? phase32_0 unsafe-undefined)(1/syntax-local-phase-level) phase32_0)))" +"(let-values(((top-level-symbol?_0) top-level-symbol?33_0))" "(let-values()" "(let-values()" "(let-values()" @@ -43221,18 +43591,18 @@ static const char *startup_source = "(let-values()(raise-argument-error 'identifier-binding phase?-string phase_0)))" "(identifier-binding$1 id_0 phase_0 top-level-symbol?_0))))))))))))" "(case-lambda" -"((id_0)(begin 'identifier-binding(identifier-binding22_0 id_0 unsafe-undefined #f)))" -"((id_0 phase_0 top-level-symbol?20_0)(identifier-binding22_0 id_0 phase_0 top-level-symbol?20_0))" -"((id_0 phase19_0)(identifier-binding22_0 id_0 phase19_0 #f)))))" +"((id_0)(begin 'identifier-binding(identifier-binding35_0 id_0 unsafe-undefined #f)))" +"((id_0 phase_0 top-level-symbol?33_0)(identifier-binding35_0 id_0 phase_0 top-level-symbol?33_0))" +"((id_0 phase32_0)(identifier-binding35_0 id_0 phase32_0 #f)))))" "(define-values" "(1/identifier-transformer-binding)" -"(let-values(((identifier-transformer-binding26_0)" -"(lambda(id25_0 phase24_0)" +"(let-values(((identifier-transformer-binding39_0)" +"(lambda(id38_0 phase37_0)" "(begin" -" 'identifier-transformer-binding26" -"(let-values(((id_0) id25_0))" +" 'identifier-transformer-binding39" +"(let-values(((id_0) id38_0))" "(let-values(((phase_0)" -"(if(eq? phase24_0 unsafe-undefined)(1/syntax-local-phase-level) phase24_0)))" +"(if(eq? phase37_0 unsafe-undefined)(1/syntax-local-phase-level) phase37_0)))" "(let-values()" "(let-values()" "(let-values()" @@ -43243,8 +43613,8 @@ static const char *startup_source = " (raise-argument-error 'identifier-transformer-binding \"identifier?\" id_0)))" "(identifier-binding$1 id_0(if phase_0(add1 phase_0) #f))))))))))))" "(case-lambda" -"((id_0)(begin 'identifier-transformer-binding(identifier-transformer-binding26_0 id_0 unsafe-undefined)))" -"((id_0 phase24_0)(identifier-transformer-binding26_0 id_0 phase24_0)))))" +"((id_0)(begin 'identifier-transformer-binding(identifier-transformer-binding39_0 id_0 unsafe-undefined)))" +"((id_0 phase37_0)(identifier-transformer-binding39_0 id_0 phase37_0)))))" "(define-values" "(1/identifier-template-binding)" "(lambda(id_0)" @@ -43271,13 +43641,13 @@ static const char *startup_source = "(identifier-binding$1 id_0 #f)))))))" "(define-values" "(1/identifier-binding-symbol)" -"(let-values(((identifier-binding-symbol30_0)" -"(lambda(id29_0 phase28_0)" +"(let-values(((identifier-binding-symbol43_0)" +"(lambda(id42_0 phase41_0)" "(begin" -" 'identifier-binding-symbol30" -"(let-values(((id_0) id29_0))" +" 'identifier-binding-symbol43" +"(let-values(((id_0) id42_0))" "(let-values(((phase_0)" -"(if(eq? phase28_0 unsafe-undefined)(1/syntax-local-phase-level) phase28_0)))" +"(if(eq? phase41_0 unsafe-undefined)(1/syntax-local-phase-level) phase41_0)))" "(let-values()" "(let-values()" "(let-values()" @@ -43291,16 +43661,16 @@ static const char *startup_source = "(raise-argument-error 'identifier-binding-symbol phase?-string phase_0)))" "(identifier-binding-symbol$1 id_0 phase_0)))))))))))" "(case-lambda" -"((id_0)(begin 'identifier-binding-symbol(identifier-binding-symbol30_0 id_0 unsafe-undefined)))" -"((id_0 phase28_0)(identifier-binding-symbol30_0 id_0 phase28_0)))))" +"((id_0)(begin 'identifier-binding-symbol(identifier-binding-symbol43_0 id_0 unsafe-undefined)))" +"((id_0 phase41_0)(identifier-binding-symbol43_0 id_0 phase41_0)))))" "(define-values" "(1/identifier-prune-lexical-context)" -"(let-values(((identifier-prune-lexical-context34_0)" -"(lambda(id33_0 syms32_0)" +"(let-values(((identifier-prune-lexical-context47_0)" +"(lambda(id46_0 syms45_0)" "(begin" -" 'identifier-prune-lexical-context34" -"(let-values(((id_0) id33_0))" -"(let-values(((syms_0) syms32_0))" +" 'identifier-prune-lexical-context47" +"(let-values(((id_0) id46_0))" +"(let-values(((syms_0) syms45_0))" "(let-values()" "(let-values()" "(let-values()" @@ -43315,18 +43685,18 @@ static const char *startup_source = " (raise-argument-error 'identifier-prune-lexical-context \"(listof symbol?)\" syms_0)))" " id_0))))))))))" "(case-lambda" -"((id_0)(begin 'identifier-prune-lexical-context(identifier-prune-lexical-context34_0 id_0 null)))" -"((id_0 syms32_0)(identifier-prune-lexical-context34_0 id_0 syms32_0)))))" +"((id_0)(begin 'identifier-prune-lexical-context(identifier-prune-lexical-context47_0 id_0 null)))" +"((id_0 syms45_0)(identifier-prune-lexical-context47_0 id_0 syms45_0)))))" "(define-values" "(1/syntax-debug-info)" -"(let-values(((syntax-debug-info39_0)" -"(lambda(s38_0 phase36_0 all-bindings?37_0)" +"(let-values(((syntax-debug-info52_0)" +"(lambda(s51_0 phase49_0 all-bindings?50_0)" "(begin" -" 'syntax-debug-info39" -"(let-values(((s_0) s38_0))" +" 'syntax-debug-info52" +"(let-values(((s_0) s51_0))" "(let-values(((phase_0)" -"(if(eq? phase36_0 unsafe-undefined)(1/syntax-local-phase-level) phase36_0)))" -"(let-values(((all-bindings?_0) all-bindings?37_0))" +"(if(eq? phase49_0 unsafe-undefined)(1/syntax-local-phase-level) phase49_0)))" +"(let-values(((all-bindings?_0) all-bindings?50_0))" "(let-values()" "(let-values()" "(let-values()" @@ -43339,9 +43709,9 @@ static const char *startup_source = "(let-values()(raise-argument-error 'syntax-debug-info phase?-string phase_0)))" "(syntax-debug-info$1 s_0 phase_0 all-bindings?_0))))))))))))" "(case-lambda" -"((s_0)(begin 'syntax-debug-info(syntax-debug-info39_0 s_0 unsafe-undefined #f)))" -"((s_0 phase_0 all-bindings?37_0)(syntax-debug-info39_0 s_0 phase_0 all-bindings?37_0))" -"((s_0 phase36_0)(syntax-debug-info39_0 s_0 phase36_0 #f)))))" +"((s_0)(begin 'syntax-debug-info(syntax-debug-info52_0 s_0 unsafe-undefined #f)))" +"((s_0 phase_0 all-bindings?50_0)(syntax-debug-info52_0 s_0 phase_0 all-bindings?50_0))" +"((s_0 phase49_0)(syntax-debug-info52_0 s_0 phase49_0 #f)))))" "(define-values" "(1/syntax-shift-phase-level)" "(lambda(s_0 phase_0)" @@ -43382,7 +43752,7 @@ static const char *startup_source = "(values))))" "(let-values(((s_0)(syntax-track-origin$1 new-stx_0 old-stx_0 id_0)))" "(let-values(((ctx_0)" -"(let-values(((temp60_0) #t))(get-current-expand-context16.1 temp60_0 'unexpected))))" +"(let-values(((temp76_0) #t))(get-current-expand-context16.1 temp76_0 'unexpected))))" "(begin" "(if ctx_0" "(let-values()" @@ -44595,7 +44965,7 @@ static const char *startup_source = "(let-values(((temp126_0)(namespace-mpi ns_0))" "((temp127_0)(namespace-phase ns_0))" "((sym128_0) sym_0))" -"(make-module-binding22.1" +"(make-module-binding20.1" " #f" " null" " #f" @@ -44604,7 +44974,6 @@ static const char *startup_source = " unsafe-undefined" " 0" " unsafe-undefined" -" unsafe-undefined" " temp126_0" " temp127_0" " sym128_0)))" @@ -57192,7 +57561,7 @@ static const char *startup_source = " 0)" "((sym12_0)" " sym_0))" -"(make-module-binding22.1" +"(make-module-binding20.1" " #f" " null" " #f" @@ -57201,7 +57570,6 @@ static const char *startup_source = " unsafe-undefined" " 0" " unsafe-undefined" -" unsafe-undefined" " mpi10_0" " temp11_0" " sym12_0))))" @@ -58273,6 +58641,10 @@ static const char *startup_source = " 'syntax-disarm" " 'syntax-rearm" " 'syntax-taint" +" 'syntax-binding-set" +" 'syntax-binding-set?" +" 'syntax-binding-set-extend" +" 'syntax-binding-set->syntax" " 'raise-syntax-error" " 'struct:exn:fail:syntax" " 'exn:fail:syntax" @@ -58410,6 +58782,10 @@ static const char *startup_source = "(add-core-primitive! 'syntax-disarm 1/syntax-disarm)" "(add-core-primitive! 'syntax-rearm 1/syntax-rearm)" "(add-core-primitive! 'syntax-taint 1/syntax-taint)" +"(add-core-primitive! 'syntax-binding-set 1/syntax-binding-set)" +"(add-core-primitive! 'syntax-binding-set? 1/syntax-binding-set?)" +"(add-core-primitive! 'syntax-binding-set-extend 1/syntax-binding-set-extend)" +"(add-core-primitive! 'syntax-binding-set->syntax 1/syntax-binding-set->syntax)" "(add-core-primitive! 'raise-syntax-error raise-syntax-error$1)" "(add-core-primitive! 'struct:exn:fail:syntax 1/struct:exn:fail:syntax)" "(add-core-primitive! 'exn:fail:syntax make-exn:fail:syntax$1)" @@ -58746,7 +59122,7 @@ static const char *startup_source = " 0)" "((sym78_0)" " sym_0))" -"(make-module-binding22.1" +"(make-module-binding20.1" " #f" " null" " #f" @@ -58755,7 +59131,6 @@ static const char *startup_source = " unsafe-undefined" " 0" " unsafe-undefined" -" unsafe-undefined" " mpi76_0" " temp77_0" " sym78_0))))"