From 15280640d458181d25a483a05ae30ba3dcef3ed3 Mon Sep 17 00:00:00 2001 From: Alexis King Date: Thu, 13 Sep 2018 15:44:32 -0500 Subject: [PATCH] Track disappeared define-syntaxes in internal definition contexts --- .../racket-test-core/tests/racket/syntax.rktl | 23 + racket/src/expander/expand/body.rkt | 22 +- racket/src/racket/src/startup.inc | 616 ++++++++++-------- 3 files changed, 372 insertions(+), 289 deletions(-) diff --git a/pkgs/racket-test-core/tests/racket/syntax.rktl b/pkgs/racket-test-core/tests/racket/syntax.rktl index e94f7025c0..eea7ec4b72 100644 --- a/pkgs/racket-test-core/tests/racket/syntax.rktl +++ b/pkgs/racket-test-core/tests/racket/syntax.rktl @@ -2131,6 +2131,29 @@ 'disappeared-use) (list #'=>1 #'=>2 #'else1))) +;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Check origin for internal definitions includes define-syntax itself + +(define (all-srclocs-included? as bs) + (and (for/and ([a (in-list as)]) + (member a bs srclocs-equal?)) + #t)) + +(with-syntax ([define-syntax1 #'define-syntax]) + (define expanded-stx + (parameterize ([current-namespace (make-base-namespace)]) + (expand (strip-context #'(let () + (define-syntax1 foo (syntax-rules ())) + (void)))))) + (define expanded-body-stx + (syntax-case expanded-stx (let-values) + [(let-values _ form) #'form])) + (test + #t + all-srclocs-included? + (list #'define-syntax1) + (syntax-property expanded-body-stx 'origin))) + ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (module tries-to-use-foo-before-defined racket/base diff --git a/racket/src/expander/expand/body.rkt b/racket/src/expander/expand/body.rkt index e0c060c2da..ae8dea8f99 100644 --- a/racket/src/expander/expand/body.rkt +++ b/racket/src/expander/expand/body.rkt @@ -76,6 +76,7 @@ [val-rhss null] ; accumulated binding right-hand sides [track-stxs null] ; accumulated syntax for tracking [trans-idss null] ; accumulated `define-syntaxes` identifiers that have disappeared + [trans-stxs null] ; accumulated `define-syntaxes` forms for tracking [stx-clauses null] ; accumulated syntax-binding clauses, used when observing [dups (make-check-no-duplicate-table)]) (cond @@ -89,7 +90,8 @@ #:source s #:stratified? stratified? #:name name - #:disappeared-transformer-bindings (reverse trans-idss))] + #:disappeared-transformer-bindings (reverse trans-idss) + #:disappeared-transformer-forms (reverse trans-stxs))] [else (define rest-bodys (cdr bodys)) (log-expand body-ctx 'next) @@ -114,6 +116,7 @@ val-rhss track-stxs trans-idss + trans-stxs stx-clauses dups)] [(define-values) @@ -157,6 +160,7 @@ #f) track-stxs)) trans-idss + trans-stxs stx-clauses new-dups)] [(define-syntaxes) @@ -191,6 +195,7 @@ val-rhss track-stxs (cons ids trans-idss) + (cons exp-body trans-stxs) (cons (datum->syntax #f (list ids (m 'rhs)) exp-body) stx-clauses) new-dups)] [else @@ -209,6 +214,7 @@ val-rhss track-stxs trans-idss + trans-stxs stx-clauses dups)] [else @@ -221,6 +227,7 @@ val-rhss track-stxs trans-idss + trans-stxs stx-clauses dups)])])]))) @@ -233,7 +240,8 @@ #:source s #:stratified? stratified? #:name name - #:disappeared-transformer-bindings disappeared-transformer-bindings) + #:disappeared-transformer-bindings disappeared-transformer-bindings + #:disappeared-transformer-forms disappeared-transformer-forms) (when (null? done-bodys) (raise-syntax-error (string->symbol "begin (possibly implicit)") "no expression after a sequence of internal definitions" @@ -287,9 +295,13 @@ (log-expand* body-ctx ['exit-prim exp-s] ['return exp-s]) (if (expand-context-to-parsed? body-ctx) (list exp-s) - (list (attach-disappeared-transformer-bindings - exp-s - disappeared-transformer-bindings)))])) + (list (for/fold ([exp-s (attach-disappeared-transformer-bindings + exp-s + disappeared-transformer-bindings)]) + ([disappeared-transformer-form (in-list disappeared-transformer-forms)]) + (syntax-track-origin exp-s + disappeared-transformer-form + (car (syntax-e disappeared-transformer-form))))))])) ;; Roughly, create a `letrec-values` for for the given ids, right-hand sides, and ;; body. While expanding right-hand sides, though, keep track of whether any diff --git a/racket/src/racket/src/startup.inc b/racket/src/racket/src/startup.inc index 68db32a7e1..475f5f1a29 100644 --- a/racket/src/racket/src/startup.inc +++ b/racket/src/racket/src/startup.inc @@ -61294,40 +61294,40 @@ static const char *startup_source = "(let-values(((v_0) ctx_0))" "(let-values(((the-struct_0) v_0))" "(if(expand-context/outer? the-struct_0)" -"(let-values(((context53_0)(list(make-liberal-define-context)))" -"((name54_0) #f)" -"((only-immediate?55_0) #t)" -"((def-ctx-scopes56_0) def-ctx-scopes_0)" -"((post-expansion57_0)" +"(let-values(((context55_0)(list(make-liberal-define-context)))" +"((name56_0) #f)" +"((only-immediate?57_0) #t)" +"((def-ctx-scopes58_0) def-ctx-scopes_0)" +"((post-expansion59_0)" "(lambda(s_1)" "(begin" -" 'post-expansion57" +" 'post-expansion59" "(add-scope s_1 inside-sc_0))))" -"((scopes58_0)" +"((scopes60_0)" "(cons inside-sc_0(expand-context-scopes ctx_0)))" -"((use-site-scopes59_0)(box null))" -"((frame-id60_0) frame-id_0)" -"((reference-records61_0)" +"((use-site-scopes61_0)(box null))" +"((frame-id62_0) frame-id_0)" +"((reference-records63_0)" "(cons" " frame-id_0" "(expand-context-reference-records ctx_0)))" -"((inner62_0)(root-expand-context/outer-inner v_0)))" +"((inner64_0)(root-expand-context/outer-inner v_0)))" "(expand-context/outer1.1" -" inner62_0" -" post-expansion57_0" -" use-site-scopes59_0" -" frame-id60_0" -" context53_0" +" inner64_0" +" post-expansion59_0" +" use-site-scopes61_0" +" frame-id62_0" +" context55_0" "(expand-context/outer-env the-struct_0)" -" scopes58_0" -" def-ctx-scopes56_0" +" scopes60_0" +" def-ctx-scopes58_0" "(expand-context/outer-binding-layer the-struct_0)" -" reference-records61_0" -" only-immediate?55_0" +" reference-records63_0" +" only-immediate?57_0" "(expand-context/outer-need-eventually-defined the-struct_0)" "(expand-context/outer-current-introduction-scopes the-struct_0)" "(expand-context/outer-current-use-scopes the-struct_0)" -" name54_0))" +" name56_0))" "(raise-argument-error" " 'struct-copy" " \"expand-context/outer?\"" @@ -61351,41 +61351,44 @@ static const char *startup_source = " val-rhss_0" " track-stxs_0" " trans-idss_0" +" trans-stxs_0" " stx-clauses_0" " dups_0)" "(begin" " 'loop" "(if(null? bodys_1)" "(let-values()" -"(let-values(((body-ctx63_0) body-ctx_1)" -"((frame-id64_0) frame-id_0)" -"((def-ctx-scopes65_0) def-ctx-scopes_0)" -"((temp66_0)(reverse$1 val-idss_0))" -"((temp67_0)(reverse$1 val-keyss_0))" -"((temp68_0)(reverse$1 val-rhss_0))" -"((temp69_0)(reverse$1 track-stxs_0))" -"((temp70_0)(reverse$1 stx-clauses_0))" -"((temp71_0)(reverse$1 done-bodys_0))" -"((init-bodys72_0) init-bodys_0)" -"((s73_0) s_0)" -"((stratified?74_0) stratified?_0)" -"((name75_0) name_0)" -"((temp76_0)(reverse$1 trans-idss_0)))" -"(finish-expanding-body29.1" -" temp76_0" -" name75_0" -" init-bodys72_0" -" s73_0" -" stratified?74_0" -" body-ctx63_0" -" frame-id64_0" -" def-ctx-scopes65_0" -" temp66_0" -" temp67_0" +"(let-values(((body-ctx65_0) body-ctx_1)" +"((frame-id66_0) frame-id_0)" +"((def-ctx-scopes67_0) def-ctx-scopes_0)" +"((temp68_0)(reverse$1 val-idss_0))" +"((temp69_0)(reverse$1 val-keyss_0))" +"((temp70_0)(reverse$1 val-rhss_0))" +"((temp71_0)(reverse$1 track-stxs_0))" +"((temp72_0)(reverse$1 stx-clauses_0))" +"((temp73_0)(reverse$1 done-bodys_0))" +"((init-bodys74_0) init-bodys_0)" +"((s75_0) s_0)" +"((stratified?76_0) stratified?_0)" +"((name77_0) name_0)" +"((temp78_0)(reverse$1 trans-idss_0))" +"((temp79_0)(reverse$1 trans-stxs_0)))" +"(finish-expanding-body31.1" +" temp78_0" +" temp79_0" +" name77_0" +" init-bodys74_0" +" s75_0" +" stratified?76_0" +" body-ctx65_0" +" frame-id66_0" +" def-ctx-scopes67_0" " temp68_0" " temp69_0" " temp70_0" -" temp71_0)))" +" temp71_0" +" temp72_0" +" temp73_0)))" "(let-values()" "(let-values(((rest-bodys_0)(cdr bodys_1)))" "(let-values((()" @@ -61402,8 +61405,8 @@ static const char *startup_source = "(void)))" "(values))))" "(let-values(((exp-body_0)" -"(let-values(((temp77_0)(car bodys_1))" -"((temp78_0)" +"(let-values(((temp80_0)(car bodys_1))" +"((temp81_0)" "(if(if name_0" "(null?" "(cdr bodys_1))" @@ -61414,13 +61417,13 @@ static const char *startup_source = " v_0))" "(if(expand-context/outer?" " the-struct_0)" -"(let-values(((name79_0)" +"(let-values(((name82_0)" " name_0)" -"((inner80_0)" +"((inner83_0)" "(root-expand-context/outer-inner" " v_0)))" "(expand-context/outer1.1" -" inner80_0" +" inner83_0" "(root-expand-context/outer-post-expansion" " the-struct_0)" "(root-expand-context/outer-use-site-scopes" @@ -61447,7 +61450,7 @@ static const char *startup_source = " the-struct_0)" "(expand-context/outer-current-use-scopes" " the-struct_0)" -" name79_0))" +" name82_0))" "(raise-argument-error" " 'struct-copy" " \"expand-context/outer?\"" @@ -61457,8 +61460,8 @@ static const char *startup_source = " #f" " #f" " #f" -" temp77_0" -" temp78_0))))" +" temp80_0" +" temp81_0))))" "(let-values(((disarmed-exp-body_0)" "(syntax-disarm$1 exp-body_0)))" "(let-values(((tmp_0)" @@ -61480,13 +61483,13 @@ static const char *startup_source = " 'prim-begin)))" "(void)))" "(values))))" -"(let-values(((ok?_0 begin81_0 e82_0)" +"(let-values(((ok?_0 begin84_0 e85_0)" "(let-values(((s_1)" " disarmed-exp-body_0))" "(let-values(((orig-s_0)" " s_1))" -"(let-values(((begin81_0" -" e82_0)" +"(let-values(((begin84_0" +" e85_0)" "(let-values(((s_2)" "(if(syntax?$1" " s_1)" @@ -61495,12 +61498,12 @@ static const char *startup_source = " s_1)))" "(if(pair?" " s_2)" -"(let-values(((begin83_0)" +"(let-values(((begin86_0)" "(let-values(((s_3)" "(car" " s_2)))" " s_3))" -"((e84_0)" +"((e87_0)" "(let-values(((s_3)" "(cdr" " s_2)))" @@ -61523,16 +61526,16 @@ static const char *startup_source = "(let-values()" " flat-s_0)))))))" "(values" -" begin83_0" -" e84_0))" +" begin86_0" +" e87_0))" "(raise-syntax-error$1" " #f" " \"bad syntax\"" " orig-s_0)))))" "(values" " #t" -" begin81_0" -" e82_0))))))" +" begin84_0" +" e85_0))))))" "(let-values(((track_0)" "(lambda(e_0)" "(begin" @@ -61542,7 +61545,7 @@ static const char *startup_source = " exp-body_0)))))" "(let-values(((splice-bodys_0)" "(append" -"(map2 track_0 e82_0)" +"(map2 track_0 e85_0)" " rest-bodys_0)))" "(begin" "(let-values(((obs_0)" @@ -61565,6 +61568,7 @@ static const char *startup_source = " val-rhss_0" " track-stxs_0" " trans-idss_0" +" trans-stxs_0" " stx-clauses_0" " dups_0)))))))" "(if(equal? tmp_0 'define-values)" @@ -61583,16 +61587,16 @@ static const char *startup_source = "(void)))" "(values))))" "(let-values(((ok?_0" -" define-values85_0" -" id86_0" -" rhs87_0)" +" define-values88_0" +" id89_0" +" rhs90_0)" "(let-values(((s_1)" " disarmed-exp-body_0))" "(let-values(((orig-s_0)" " s_1))" -"(let-values(((define-values85_0" -" id86_0" -" rhs87_0)" +"(let-values(((define-values88_0" +" id89_0" +" rhs90_0)" "(let-values(((s_2)" "(if(syntax?$1" " s_1)" @@ -61601,13 +61605,13 @@ static const char *startup_source = " s_1)))" "(if(pair?" " s_2)" -"(let-values(((define-values88_0)" +"(let-values(((define-values91_0)" "(let-values(((s_3)" "(car" " s_2)))" " s_3))" -"((id89_0" -" rhs90_0)" +"((id92_0" +" rhs93_0)" "(let-values(((s_3)" "(cdr" " s_2)))" @@ -61619,7 +61623,7 @@ static const char *startup_source = " s_3)))" "(if(pair?" " s_4)" -"(let-values(((id91_0)" +"(let-values(((id94_0)" "(let-values(((s_5)" "(car" " s_4)))" @@ -61668,7 +61672,7 @@ static const char *startup_source = " id_0))" "(let-values(((id_2)" "(let-values()" -"(let-values(((id94_0)" +"(let-values(((id97_0)" "(let-values()" "(if(let-values(((or-part_0)" "(if(syntax?$1" @@ -61688,7 +61692,7 @@ static const char *startup_source = " orig-s_0" " s_7)))))" "(cons" -" id94_0" +" id97_0" " id_1)))))" "(values" " id_2)))))" @@ -61704,7 +61708,7 @@ static const char *startup_source = " lst_0)))))" "(reverse$1" " id_0))))))))" -"((rhs92_0)" +"((rhs95_0)" "(let-values(((s_5)" "(cdr" " s_4)))" @@ -61716,7 +61720,7 @@ static const char *startup_source = " s_5)))" "(if(pair?" " s_6)" -"(let-values(((rhs93_0)" +"(let-values(((rhs96_0)" "(let-values(((s_7)" "(car" " s_6)))" @@ -61739,34 +61743,34 @@ static const char *startup_source = " \"bad syntax\"" " orig-s_0))))))" "(values" -" rhs93_0))" +" rhs96_0))" "(raise-syntax-error$1" " #f" " \"bad syntax\"" " orig-s_0))))))" "(values" -" id91_0" -" rhs92_0))" +" id94_0" +" rhs95_0))" "(raise-syntax-error$1" " #f" " \"bad syntax\"" " orig-s_0))))))" "(values" -" define-values88_0" -" id89_0" -" rhs90_0))" +" define-values91_0" +" id92_0" +" rhs93_0))" "(raise-syntax-error$1" " #f" " \"bad syntax\"" " orig-s_0)))))" "(values" " #t" -" define-values85_0" -" id86_0" -" rhs87_0))))))" +" define-values88_0" +" id89_0" +" rhs90_0))))))" "(let-values(((ids_0)" "(remove-use-site-scopes" -" id86_0" +" id89_0" " body-ctx_1)))" "(let-values((()" "(begin" @@ -61783,24 +61787,24 @@ static const char *startup_source = " #f" "(list" " ids_0" -" rhs87_0)))))" +" rhs90_0)))))" "(void)))" "(values))))" "(let-values(((new-dups_0)" -"(let-values(((ids95_0)" +"(let-values(((ids98_0)" " ids_0)" -"((phase96_0)" +"((phase99_0)" " phase_0)" -"((exp-body97_0)" +"((exp-body100_0)" " exp-body_0)" -"((dups98_0)" +"((dups101_0)" " dups_0))" "(check-no-duplicate-ids7.1" " unsafe-undefined" -" ids95_0" -" phase96_0" -" exp-body97_0" -" dups98_0))))" +" ids98_0" +" phase99_0" +" exp-body100_0" +" dups101_0))))" "(let-values(((counter_0)" "(root-expand-context-counter" " ctx_0)))" @@ -61835,22 +61839,22 @@ static const char *startup_source = "(let-values()" "(cons" "(let-values()" -"(let-values(((id99_0)" +"(let-values(((id102_0)" " id_0)" -"((phase100_0)" +"((phase103_0)" " phase_0)" -"((counter101_0)" +"((counter104_0)" " counter_0)" -"((frame-id102_0)" +"((frame-id105_0)" " frame-id_0)" -"((exp-body103_0)" +"((exp-body106_0)" " exp-body_0))" "(add-local-binding!37.1" -" frame-id102_0" -" exp-body103_0" -" id99_0" -" phase100_0" -" counter101_0)))" +" frame-id105_0" +" exp-body106_0" +" id102_0" +" phase103_0" +" counter104_0)))" " fold-var_1))))" "(values" " fold-var_2)))))" @@ -61937,17 +61941,17 @@ static const char *startup_source = " v_0))" "(if(expand-context/outer?" " the-struct_0)" -"(let-values(((env104_0)" +"(let-values(((env107_0)" " extended-env_0)" -"((binding-layer105_0)" +"((binding-layer108_0)" "(maybe-increment-binding-layer_0" " ids_0" " body-ctx_1))" -"((inner106_0)" +"((inner109_0)" "(root-expand-context/outer-inner" " v_0)))" "(expand-context/outer1.1" -" inner106_0" +" inner109_0" "(root-expand-context/outer-post-expansion" " the-struct_0)" "(root-expand-context/outer-use-site-scopes" @@ -61956,12 +61960,12 @@ static const char *startup_source = " the-struct_0)" "(expand-context/outer-context" " the-struct_0)" -" env104_0" +" env107_0" "(expand-context/outer-scopes" " the-struct_0)" "(expand-context/outer-def-ctx-scopes" " the-struct_0)" -" binding-layer105_0" +" binding-layer108_0" "(expand-context/outer-reference-records" " the-struct_0)" "(expand-context/outer-only-immediate?" @@ -62077,7 +62081,7 @@ static const char *startup_source = " lst_0))))" " val-keyss_0))" "(cons" -" rhs87_0" +" rhs90_0" "(append" "(reverse$1" "(let-values(((lst_0)" @@ -62176,6 +62180,7 @@ static const char *startup_source = " lst_0))))" " track-stxs_0))" " trans-idss_0" +" trans-stxs_0" " stx-clauses_0" " new-dups_0))))))))))" "(if(equal? tmp_0 'define-syntaxes)" @@ -62194,16 +62199,16 @@ static const char *startup_source = "(void)))" "(values))))" "(let-values(((ok?_0" -" define-syntaxes107_0" -" id108_0" -" rhs109_0)" +" define-syntaxes110_0" +" id111_0" +" rhs112_0)" "(let-values(((s_1)" " disarmed-exp-body_0))" "(let-values(((orig-s_0)" " s_1))" -"(let-values(((define-syntaxes107_0" -" id108_0" -" rhs109_0)" +"(let-values(((define-syntaxes110_0" +" id111_0" +" rhs112_0)" "(let-values(((s_2)" "(if(syntax?$1" " s_1)" @@ -62212,13 +62217,13 @@ static const char *startup_source = " s_1)))" "(if(pair?" " s_2)" -"(let-values(((define-syntaxes110_0)" +"(let-values(((define-syntaxes113_0)" "(let-values(((s_3)" "(car" " s_2)))" " s_3))" -"((id111_0" -" rhs112_0)" +"((id114_0" +" rhs115_0)" "(let-values(((s_3)" "(cdr" " s_2)))" @@ -62230,7 +62235,7 @@ static const char *startup_source = " s_3)))" "(if(pair?" " s_4)" -"(let-values(((id113_0)" +"(let-values(((id116_0)" "(let-values(((s_5)" "(car" " s_4)))" @@ -62279,7 +62284,7 @@ static const char *startup_source = " id_0))" "(let-values(((id_2)" "(let-values()" -"(let-values(((id116_0)" +"(let-values(((id119_0)" "(let-values()" "(if(let-values(((or-part_0)" "(if(syntax?$1" @@ -62299,7 +62304,7 @@ static const char *startup_source = " orig-s_0" " s_7)))))" "(cons" -" id116_0" +" id119_0" " id_1)))))" "(values" " id_2)))))" @@ -62315,7 +62320,7 @@ static const char *startup_source = " lst_0)))))" "(reverse$1" " id_0))))))))" -"((rhs114_0)" +"((rhs117_0)" "(let-values(((s_5)" "(cdr" " s_4)))" @@ -62327,7 +62332,7 @@ static const char *startup_source = " s_5)))" "(if(pair?" " s_6)" -"(let-values(((rhs115_0)" +"(let-values(((rhs118_0)" "(let-values(((s_7)" "(car" " s_6)))" @@ -62350,34 +62355,34 @@ static const char *startup_source = " \"bad syntax\"" " orig-s_0))))))" "(values" -" rhs115_0))" +" rhs118_0))" "(raise-syntax-error$1" " #f" " \"bad syntax\"" " orig-s_0))))))" "(values" -" id113_0" -" rhs114_0))" +" id116_0" +" rhs117_0))" "(raise-syntax-error$1" " #f" " \"bad syntax\"" " orig-s_0))))))" "(values" -" define-syntaxes110_0" -" id111_0" -" rhs112_0))" +" define-syntaxes113_0" +" id114_0" +" rhs115_0))" "(raise-syntax-error$1" " #f" " \"bad syntax\"" " orig-s_0)))))" "(values" " #t" -" define-syntaxes107_0" -" id108_0" -" rhs109_0))))))" +" define-syntaxes110_0" +" id111_0" +" rhs112_0))))))" "(let-values(((ids_0)" "(remove-use-site-scopes" -" id108_0" +" id111_0" " body-ctx_1)))" "(let-values((()" "(begin" @@ -62394,24 +62399,24 @@ static const char *startup_source = " #f" "(list" " ids_0" -" rhs109_0)))))" +" rhs112_0)))))" "(void)))" "(values))))" "(let-values(((new-dups_0)" -"(let-values(((ids117_0)" +"(let-values(((ids120_0)" " ids_0)" -"((phase118_0)" +"((phase121_0)" " phase_0)" -"((exp-body119_0)" +"((exp-body122_0)" " exp-body_0)" -"((dups120_0)" +"((dups123_0)" " dups_0))" "(check-no-duplicate-ids7.1" " unsafe-undefined" -" ids117_0" -" phase118_0" -" exp-body119_0" -" dups120_0))))" +" ids120_0" +" phase121_0" +" exp-body122_0" +" dups123_0))))" "(let-values(((counter_0)" "(root-expand-context-counter" " ctx_0)))" @@ -62446,22 +62451,22 @@ static const char *startup_source = "(let-values()" "(cons" "(let-values()" -"(let-values(((id121_0)" +"(let-values(((id124_0)" " id_0)" -"((phase122_0)" +"((phase125_0)" " phase_0)" -"((counter123_0)" +"((counter126_0)" " counter_0)" -"((frame-id124_0)" +"((frame-id127_0)" " frame-id_0)" -"((exp-body125_0)" +"((exp-body128_0)" " exp-body_0))" "(add-local-binding!37.1" -" frame-id124_0" -" exp-body125_0" -" id121_0" -" phase122_0" -" counter123_0)))" +" frame-id127_0" +" exp-body128_0" +" id124_0" +" phase125_0" +" counter126_0)))" " fold-var_1))))" "(values" " fold-var_2)))))" @@ -62509,7 +62514,7 @@ static const char *startup_source = "(let-values(((vals_0)" "(eval-for-syntaxes-binding" " 'define-syntaxes" -" rhs109_0" +" rhs112_0" " ids_0" " body-ctx_1)))" "(let-values(((extended-env_0)" @@ -62621,17 +62626,17 @@ static const char *startup_source = " v_0))" "(if(expand-context/outer?" " the-struct_0)" -"(let-values(((env126_0)" +"(let-values(((env129_0)" " extended-env_0)" -"((binding-layer127_0)" +"((binding-layer130_0)" "(maybe-increment-binding-layer_0" " ids_0" " body-ctx_1))" -"((inner128_0)" +"((inner131_0)" "(root-expand-context/outer-inner" " v_0)))" "(expand-context/outer1.1" -" inner128_0" +" inner131_0" "(root-expand-context/outer-post-expansion" " the-struct_0)" "(root-expand-context/outer-use-site-scopes" @@ -62640,12 +62645,12 @@ static const char *startup_source = " the-struct_0)" "(expand-context/outer-context" " the-struct_0)" -" env126_0" +" env129_0" "(expand-context/outer-scopes" " the-struct_0)" "(expand-context/outer-def-ctx-scopes" " the-struct_0)" -" binding-layer127_0" +" binding-layer130_0" "(expand-context/outer-reference-records" " the-struct_0)" "(expand-context/outer-only-immediate?" @@ -62672,11 +62677,14 @@ static const char *startup_source = " ids_0" " trans-idss_0)" "(cons" +" exp-body_0" +" trans-stxs_0)" +"(cons" "(datum->syntax$1" " #f" "(list" " ids_0" -" rhs109_0)" +" rhs112_0)" " exp-body_0)" " stx-clauses_0)" " new-dups_0)))))))))))))))" @@ -62714,6 +62722,7 @@ static const char *startup_source = " val-rhss_0" " track-stxs_0" " trans-idss_0" +" trans-stxs_0" " stx-clauses_0" " dups_0)))" "(let-values()" @@ -62726,6 +62735,7 @@ static const char *startup_source = " val-rhss_0" " track-stxs_0" " trans-idss_0" +" trans-stxs_0" " stx-clauses_0" " dups_0))))))))))))))))))" " loop_0)" @@ -62738,48 +62748,51 @@ static const char *startup_source = " null" " null" " null" +" null" "(make-check-no-duplicate-table))))))))))))))))))))" "(define-values" -"(finish-expanding-body29.1)" +"(finish-expanding-body31.1)" "(lambda(disappeared-transformer-bindings14_0" +" disappeared-transformer-forms15_0" " name13_0" " original-bodys10_0" " source11_0" " stratified?12_0" -" body-ctx20_0" -" frame-id21_0" -" def-ctx-scopes22_0" -" val-idss23_0" -" val-keyss24_0" -" val-rhss25_0" -" track-stxs26_0" -" stx-clauses27_0" -" done-bodys28_0)" +" body-ctx22_0" +" frame-id23_0" +" def-ctx-scopes24_0" +" val-idss25_0" +" val-keyss26_0" +" val-rhss27_0" +" track-stxs28_0" +" stx-clauses29_0" +" done-bodys30_0)" "(begin" -" 'finish-expanding-body29" -"(let-values(((body-ctx_0) body-ctx20_0))" -"(let-values(((frame-id_0) frame-id21_0))" -"(let-values(((def-ctx-scopes_0) def-ctx-scopes22_0))" -"(let-values(((val-idss_0) val-idss23_0))" -"(let-values(((val-keyss_0) val-keyss24_0))" -"(let-values(((val-rhss_0) val-rhss25_0))" -"(let-values(((track-stxs_0) track-stxs26_0))" -"(let-values(((stx-clauses_0) stx-clauses27_0))" -"(let-values(((done-bodys_0) done-bodys28_0))" +" 'finish-expanding-body31" +"(let-values(((body-ctx_0) body-ctx22_0))" +"(let-values(((frame-id_0) frame-id23_0))" +"(let-values(((def-ctx-scopes_0) def-ctx-scopes24_0))" +"(let-values(((val-idss_0) val-idss25_0))" +"(let-values(((val-keyss_0) val-keyss26_0))" +"(let-values(((val-rhss_0) val-rhss27_0))" +"(let-values(((track-stxs_0) track-stxs28_0))" +"(let-values(((stx-clauses_0) stx-clauses29_0))" +"(let-values(((done-bodys_0) done-bodys30_0))" "(let-values(((init-bodys_0) original-bodys10_0))" "(let-values(((s_0) source11_0))" "(let-values(((stratified?_0) stratified?12_0))" "(let-values(((name_0) name13_0))" "(let-values(((disappeared-transformer-bindings_0)" " disappeared-transformer-bindings14_0))" +"(let-values(((disappeared-transformer-forms_0) disappeared-transformer-forms15_0))" "(let-values()" "(let-values((()" "(begin" "(if(null? done-bodys_0)" "(let-values()" "(raise-syntax-error$1" -" (string->symbol \"begin (possibly implicit)\")" -" \"no expression after a sequence of internal definitions\"" +" (string->symbol \"begin (possibly implicit)\")" +" \"no expression after a sequence of internal definitions\"" "(datum->syntax$1 #f(cons 'begin init-bodys_0) s_0)))" "(void))" "(values))))" @@ -62790,39 +62803,40 @@ static const char *startup_source = " def-ctx-scopes_0)))" "(let-values(((the-struct_0) v_0))" "(if(expand-context/outer? the-struct_0)" -"(let-values(((context129_0) 'expression)" -"((use-site-scopes130_0)(box null))" -"((scopes131_0)" +"(let-values(((context132_0) 'expression)" +"((use-site-scopes133_0)(box null))" +"((scopes134_0)" "(append" "(unbox" "(root-expand-context-use-site-scopes" " body-ctx_0))" "(expand-context-scopes body-ctx_0)))" -"((only-immediate?132_0) #f)" -"((def-ctx-scopes133_0) #f)" -"((post-expansion134_0) #f)" -"((inner135_0)" +"((only-immediate?135_0) #f)" +"((def-ctx-scopes136_0) #f)" +"((post-expansion137_0) #f)" +"((inner138_0)" "(root-expand-context/outer-inner v_0)))" "(expand-context/outer1.1" -" inner135_0" -" post-expansion134_0" -" use-site-scopes130_0" +" inner138_0" +" post-expansion137_0" +" use-site-scopes133_0" "(root-expand-context/outer-frame-id the-struct_0)" -" context129_0" +" context132_0" "(expand-context/outer-env the-struct_0)" -" scopes131_0" -" def-ctx-scopes133_0" +" scopes134_0" +" def-ctx-scopes136_0" "(expand-context/outer-binding-layer the-struct_0)" "(expand-context/outer-reference-records the-struct_0)" -" only-immediate?132_0" -"(expand-context/outer-need-eventually-defined the-struct_0)" +" only-immediate?135_0" +"(expand-context/outer-need-eventually-defined" +" the-struct_0)" "(expand-context/outer-current-introduction-scopes" " the-struct_0)" "(expand-context/outer-current-use-scopes the-struct_0)" "(expand-context/outer-name the-struct_0)))" "(raise-argument-error" " 'struct-copy" -" \"expand-context/outer?\"" +" \"expand-context/outer?\"" " the-struct_0))))))" "(let-values(((finish-bodys_0)" "(lambda()" @@ -62913,9 +62927,9 @@ static const char *startup_source = " obs_0" " 'next)))" "(void)))" -"(let-values(((done-body136_0)" +"(let-values(((done-body139_0)" " done-body_0)" -"((temp137_0)" +"((temp140_0)" "(if(if name_0" "(=" " i_0" @@ -62927,13 +62941,13 @@ static const char *startup_source = " v_0))" "(if(expand-context/outer?" " the-struct_0)" -"(let-values(((name138_0)" +"(let-values(((name141_0)" " name_0)" -"((inner139_0)" +"((inner142_0)" "(root-expand-context/outer-inner" " v_0)))" "(expand-context/outer1.1" -" inner139_0" +" inner142_0" "(root-expand-context/outer-post-expansion" " the-struct_0)" "(root-expand-context/outer-use-site-scopes" @@ -62960,18 +62974,18 @@ static const char *startup_source = " the-struct_0)" "(expand-context/outer-current-use-scopes" " the-struct_0)" -" name138_0))" +" name141_0))" "(raise-argument-error" " 'struct-copy" -" \"expand-context/outer?\"" +" \"expand-context/outer?\"" " the-struct_0))))" " finish-ctx_0)))" "(expand9.1" " #f" " #f" " #f" -" done-body136_0" -" temp137_0))))" +" done-body139_0" +" temp140_0))))" " fold-var_1))))" "(values" " fold-var_2)))))" @@ -63035,29 +63049,29 @@ static const char *startup_source = "(void)))" "(values))))" "(let-values(((exp-s_0)" -"(let-values(((val-idss140_0) val-idss_0)" -"((val-keyss141_0) val-keyss_0)" -"((val-rhss142_0) val-rhss_0)" -"((track-stxs143_0) track-stxs_0)" -"((temp144_0)(not stratified?_0))" -"((frame-id145_0) frame-id_0)" -"((finish-ctx146_0) finish-ctx_0)" -"((s147_0) s_0)" -"((temp148_0)(pair? stx-clauses_0))" -"((finish-bodys149_0) finish-bodys_0)" -"((temp150_0) #f))" -"(expand-and-split-bindings-by-reference50.1" -" finish-ctx146_0" -" frame-id145_0" -" finish-bodys149_0" -" temp148_0" -" s147_0" -" temp144_0" -" temp150_0" -" val-idss140_0" -" val-keyss141_0" -" val-rhss142_0" -" track-stxs143_0))))" +"(let-values(((val-idss143_0) val-idss_0)" +"((val-keyss144_0) val-keyss_0)" +"((val-rhss145_0) val-rhss_0)" +"((track-stxs146_0) track-stxs_0)" +"((temp147_0)(not stratified?_0))" +"((frame-id148_0) frame-id_0)" +"((finish-ctx149_0) finish-ctx_0)" +"((s150_0) s_0)" +"((temp151_0)(pair? stx-clauses_0))" +"((finish-bodys152_0) finish-bodys_0)" +"((temp153_0) #f))" +"(expand-and-split-bindings-by-reference52.1" +" finish-ctx149_0" +" frame-id148_0" +" finish-bodys152_0" +" temp151_0" +" s150_0" +" temp147_0" +" temp153_0" +" val-idss143_0" +" val-keyss144_0" +" val-rhss145_0" +" track-stxs146_0))))" "(begin" "(let-values(((obs_0)(expand-context-observer body-ctx_0)))" "(if obs_0" @@ -63070,35 +63084,69 @@ static const char *startup_source = "(if(expand-context-to-parsed? body-ctx_0)" "(list exp-s_0)" "(list" +"(let-values(((lst_0) disappeared-transformer-forms_0))" +"(begin" +"(if(variable-reference-from-unsafe?" +"(#%variable-reference))" +"(void)" +"(let-values()(check-list lst_0)))" +"((letrec-values(((for-loop_0)" +"(lambda(exp-s_1 lst_1)" +"(begin" +" 'for-loop" +"(if(pair? lst_1)" +"(let-values(((disappeared-transformer-form_0)" +"(unsafe-car lst_1))" +"((rest_0)" +"(unsafe-cdr lst_1)))" +"(let-values(((exp-s_2)" +"(let-values(((exp-s_2)" +" exp-s_1))" +"(let-values(((exp-s_3)" +"(let-values()" +"(syntax-track-origin$1" +" exp-s_2" +" disappeared-transformer-form_0" +"(car" +"(syntax-e$1" +" disappeared-transformer-form_0))))))" +"(values" +" exp-s_3)))))" +"(if(not #f)" +"(for-loop_0 exp-s_2 rest_0)" +" exp-s_2)))" +" exp-s_1)))))" +" for-loop_0)" "(attach-disappeared-transformer-bindings" " exp-s_0" -" disappeared-transformer-bindings_0)))))))))))))))))))))))))))))" +" disappeared-transformer-bindings_0)" +" lst_0))))))))))))))))))))))))))))))))" "(define-values" -"(expand-and-split-bindings-by-reference50.1)" -"(lambda(ctx34_0" -" frame-id33_0" -" get-body37_0" -" had-stxes?36_0" -" source35_0" -" split?32_0" -" track?38_0" -" idss46_0" -" keyss47_0" -" rhss48_0" -" track-stxs49_0)" +"(expand-and-split-bindings-by-reference52.1)" +"(lambda(ctx36_0" +" frame-id35_0" +" get-body39_0" +" had-stxes?38_0" +" source37_0" +" split?34_0" +" track?40_0" +" idss48_0" +" keyss49_0" +" rhss50_0" +" track-stxs51_0)" "(begin" -" 'expand-and-split-bindings-by-reference50" -"(let-values(((idss_0) idss46_0))" -"(let-values(((keyss_0) keyss47_0))" -"(let-values(((rhss_0) rhss48_0))" -"(let-values(((track-stxs_0) track-stxs49_0))" -"(let-values(((split?_0) split?32_0))" -"(let-values(((frame-id_0) frame-id33_0))" -"(let-values(((ctx_0) ctx34_0))" -"(let-values(((s_0) source35_0))" -"(let-values(((had-stxes?_0) had-stxes?36_0))" -"(let-values(((get-body_0) get-body37_0))" -"(let-values(((track?_0) track?38_0))" +" 'expand-and-split-bindings-by-reference52" +"(let-values(((idss_0) idss48_0))" +"(let-values(((keyss_0) keyss49_0))" +"(let-values(((rhss_0) rhss50_0))" +"(let-values(((track-stxs_0) track-stxs51_0))" +"(let-values(((split?_0) split?34_0))" +"(let-values(((frame-id_0) frame-id35_0))" +"(let-values(((ctx_0) ctx36_0))" +"(let-values(((s_0) source37_0))" +"(let-values(((had-stxes?_0) had-stxes?38_0))" +"(let-values(((get-body_0) get-body39_0))" +"(let-values(((track?_0) track?40_0))" "(let-values()" "(let-values(((phase_0)(expand-context-phase ctx_0)))" "((letrec-values(((loop_0)" @@ -63138,9 +63186,9 @@ static const char *startup_source = " accum-keyss_0" " accum-rhss_0))" " exp-body_0))" -"(let-values(((track?151_0) track?_1)" -"((s152_0) s_0)" -"((temp153_0)" +"(let-values(((track?154_0) track?_1)" +"((s155_0) s_0)" +"((temp156_0)" "(list*" "(if(null? accum-idss_0)" "(core-id" @@ -63155,9 +63203,9 @@ static const char *startup_source = " accum-track-stxs_0)" " exp-body_0)))" "(rebuild5.1" -" track?151_0" -" s152_0" -" temp153_0)))))" +" track?154_0" +" s155_0" +" temp156_0)))))" "(begin" "(let-values(((obs_0)" "(expand-context-observer ctx_0)))" @@ -63188,8 +63236,8 @@ static const char *startup_source = "(values))))" "(let-values(((ids_0)(car idss_1)))" "(let-values(((expanded-rhs_0)" -"(let-values(((temp154_0)(car rhss_1))" -"((temp155_0)" +"(let-values(((temp157_0)(car rhss_1))" +"((temp158_0)" "(as-named-context" " ctx_0" " ids_0)))" @@ -63197,8 +63245,8 @@ static const char *startup_source = " #f" " #f" " #f" -" temp154_0" -" temp155_0))))" +" temp157_0" +" temp158_0))))" "(let-values(((track-stx_0)(car track-stxs_1)))" "(let-values(((local-or-forward-references?_0)" "(reference-record-forward-references?" @@ -63249,11 +63297,11 @@ static const char *startup_source = "(car keyss_1)" " expanded-rhs_0))" " exp-rest_0)" -"(let-values(((track?156_0)" +"(let-values(((track?159_0)" " track?_1)" -"((s157_0)" +"((s160_0)" " s_0)" -"((temp158_0)" +"((temp161_0)" "(list*" "(core-id" " 'let-values" @@ -63265,9 +63313,9 @@ static const char *startup_source = " track-stx_0))" " exp-rest_0)))" "(rebuild5.1" -" track?156_0" -" s157_0" -" temp158_0)))))" +" track?159_0" +" s160_0" +" temp161_0)))))" "(begin" "(let-values(((obs_0)" "(expand-context-observer" @@ -63329,11 +63377,11 @@ static const char *startup_source = " accum-keyss_0" " accum-rhss_0)))" " exp-rest_0)" -"(let-values(((track?159_0)" +"(let-values(((track?162_0)" " track?_1)" -"((s160_0)" +"((s163_0)" " s_0)" -"((temp161_0)" +"((temp164_0)" "(list*" "(core-id" " 'letrec-values" @@ -63350,9 +63398,9 @@ static const char *startup_source = " accum-track-stxs_0))" " exp-rest_0)))" "(rebuild5.1" -" track?159_0" -" s160_0" -" temp161_0)))))" +" track?162_0" +" s163_0" +" temp164_0)))))" "(begin" "(let-values(((obs_0)" "(expand-context-observer" @@ -66537,7 +66585,7 @@ static const char *startup_source = " get-body_0)" "((temp213_0)" " #t))" -"(expand-and-split-bindings-by-reference50.1" +"(expand-and-split-bindings-by-reference52.1" " rec-ctx209_0" " frame-id208_0" " get-body212_0"