expander: fix interaction of expand+eval across namespaces

This repair was motivated by tests in the "rex" package. The
new test added here failed before by finding 'new both times,
but in the "rex" case, the mixup led to the same variable
being imported and exported at the linklet level.
This commit is contained in:
Matthew Flatt 2018-06-12 12:58:56 -06:00
parent cf0c06d810
commit 380dc42427
4 changed files with 216 additions and 140 deletions

View File

@ -2670,6 +2670,26 @@ case of module-leve bindings; it doesn't cover local bindings.
(ct-eval (+ 1 2)))
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Make sure "self" module path indices are not mixed up
;; across namespaces
(module mixes-top-level-namespaces racket/base
(define ns (variable-reference->namespace (#%variable-reference)))
(define x 'orig)
(namespace-require 'racket/base)
(eval '(define x 'new))
(define result
(eval
`(list x ,(parameterize ([current-namespace ns])
(expand #'x)))))
(provide result))
(test '(new orig) dynamic-require ''mixes-top-level-namespaces 'result)
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(report-errs)

View File

@ -139,11 +139,11 @@
(eql? (module-path-index-base a)
(module-path-index-base b))))
(lambda (a hash-code)
(and (+ (hash-code (module-path-index-path a))
(hash-code (module-path-index-base a)))))
(+ (hash-code (module-path-index-path a))
(hash-code (module-path-index-base a))))
(lambda (a hash-code)
(and (+ (hash-code (module-path-index-path a))
(hash-code (module-path-index-base a))))))
(+ (hash-code (module-path-index-path a))
(hash-code (module-path-index-base a)))))
#:property prop:custom-write
(lambda (r port mode)
(write-string "#<module-path-index" port)

View File

@ -1,4 +1,5 @@
#lang racket/base
(require "../common/module-path.rkt")
;; A `module-use` record is just a part of module path index plus
;; phase, since that combination is commonly needed
@ -6,6 +7,24 @@
(provide (struct-out module-use))
(struct module-use (module phase)
;; transparent for hashing; note that module path indices will
;; be hashed as `equal?`, which makes sense within a module
#:transparent)
#:property prop:equal+hash
(list (lambda (a b eql?)
(define a-mod (module-use-module a))
(define b-mod (module-use-module b))
(and (eql? a-mod b-mod)
(eql? (module-use-phase a)
(module-use-phase b))
;; Unusual, but possible with top-level evaluation: can have
;; different "self" MPIs that refer to different modules
(let-values ([(a-path a-base) (module-path-index-split a-mod)]
[(b-path b-base) (module-path-index-split b-mod)])
(or a-path
b-path
(eq? (module-path-index-resolved a-mod)
(module-path-index-resolved b-mod))))))
(lambda (a hash-code)
(+ (hash-code (module-use-module a))
(hash-code (module-use-phase a))))
(lambda (a hash-code)
(+ (hash-code (module-use-module a))
(hash-code (module-use-phase a))))))

View File

@ -13212,7 +13212,44 @@ static const char *startup_source =
"(struct:module-use module-use1.1 module-use? module-use-module module-use-phase)"
"(let-values(((struct:_0 make-_0 ?_0 -ref_0 -set!_0)"
"(let-values()"
"(let-values()(make-struct-type 'module-use #f 2 0 #f null #f #f '(0 1) #f 'module-use)))))"
"(let-values()"
"(make-struct-type"
" 'module-use"
" #f"
" 2"
" 0"
" #f"
"(list"
"(cons"
" prop:equal+hash"
"(list"
"(lambda(a_36 b_22 eql?_2)"
"(let-values(((a-mod_0)(module-use-module a_36)))"
"(let-values(((b-mod_0)(module-use-module b_22)))"
"(if(eql?_2 a-mod_0 b-mod_0)"
"(if(eql?_2(module-use-phase a_36)(module-use-phase b_22))"
"(let-values(((a-path_0 a-base_0)(1/module-path-index-split a-mod_0))"
"((b-path_0 b-base_0)(1/module-path-index-split b-mod_0)))"
"(let-values(((or-part_78) a-path_0))"
"(if or-part_78"
" or-part_78"
"(let-values(((or-part_79) b-path_0))"
"(if or-part_79"
" or-part_79"
"(eq?"
"(module-path-index-resolved a-mod_0)"
"(module-path-index-resolved b-mod_0)))))))"
" #f)"
" #f))))"
"(lambda(a_37 hash-code_4)"
"(+(hash-code_4(module-use-module a_37))(hash-code_4(module-use-phase a_37))))"
"(lambda(a_38 hash-code_5)"
"(+(hash-code_5(module-use-module a_38))(hash-code_5(module-use-phase a_38)))))))"
"(current-inspector)"
" #f"
" '(0 1)"
" #f"
" 'module-use)))))"
"(values"
" struct:_0"
" make-_0"
@ -14712,13 +14749,13 @@ static const char *startup_source =
"(let-values(((access_1)"
"(let-values(((or-part_27)(module-access m_11)))"
"(if or-part_27 or-part_27(module-compute-access! m_11)))))"
"(let-values(((a_36)"
"(let-values(((a_39)"
"(hash-ref"
"(hash-ref access_1(module-binding-phase b_42) '#hasheq())"
"(module-binding-sym b_42)"
" 'unexported)))"
"(if(let-values(((or-part_10)(eq? a_36 'unexported)))"
"(if or-part_10 or-part_10(eq? a_36 'protected)))"
"(if(let-values(((or-part_10)(eq? a_39 'unexported)))"
"(if or-part_10 or-part_10(eq? a_39 'protected)))"
"(let-values()"
"(begin"
"(if(let-values(((or-part_158)"
@ -14749,7 +14786,7 @@ static const char *startup_source =
" #f"
"(format"
" \"access disallowed by code inspector to ~a ~a\\n from module: ~a\""
" a_36"
" a_39"
" what_0"
"(1/module-path-index-resolve(namespace-mpi(module-instance-namespace mi_13))))"
" complain-id_0"
@ -15170,7 +15207,7 @@ static const char *startup_source =
"(if(syntax-tainted?$1 id_19)"
" (let-values () (raise-syntax-error$1 #f \"cannot use identifier tainted by macro transformation\" id_19))"
"(void)))))"
"(define-values(cons-ish)(lambda(a_37 b_61)(begin(if(null? b_61) a_37(cons a_37 b_61)))))"
"(define-values(cons-ish)(lambda(a_40 b_61)(begin(if(null? b_61) a_40(cons a_40 b_61)))))"
"(define-values"
"(free-id-set)"
"(lambda(phase_39 ids_0)"
@ -17119,10 +17156,10 @@ static const char *startup_source =
"(let-values(((lst_92)"
"(let-values(((temp1_2)(hash-ref info_5 'bindings null))"
"((temp2_2)"
"(lambda(a_38 b_67)"
"(lambda(a_41 b_67)"
"(begin"
" 'temp2"
"(if(hash-ref a_38 'match? #f)"
"(if(hash-ref a_41 'match? #f)"
"(not(hash-ref b_67 'match? #f))"
" #f)))))"
"(sort7.1 #f #f temp1_2 temp2_2))))"
@ -20300,7 +20337,7 @@ static const char *startup_source =
"(values(box-immutable v_154) next-pos_18))))"
"(if(unsafe-fx< index_0 12)"
"(let-values()"
"(let-values(((a_39 next-pos_19)"
"(let-values(((a_42 next-pos_19)"
"(decode"
" vec_50"
"(add1 pos_51)"
@ -20316,7 +20353,7 @@ static const char *startup_source =
" inspector_8"
" bulk-binding-registry_7"
" shared_2)))"
"(values(cons a_39 d_24) next-pos_20))))"
"(values(cons a_42 d_24) next-pos_20))))"
"(if(unsafe-fx< index_0 13)"
"(let-values()"
"(let-values(((len_20)(vector*-ref vec_50(add1 pos_51))))"
@ -20967,11 +21004,11 @@ static const char *startup_source =
"(begin(deserialize-scope-fill! v_159 c_23) next-pos_70)))"
"(if(equal? tmp_23 '#:representative-scope-fill!)"
"(let-values()"
"(let-values(((a_40 next-pos_71)"
"(let-values(((a_43 next-pos_71)"
"(decode vec_51(add1 pos_72) mpis_10 inspector_9 bulk-binding-registry_9 shared_3)))"
"(let-values(((d_25 done-pos_3)"
"(decode vec_51 next-pos_71 mpis_10 inspector_9 bulk-binding-registry_9 shared_3)))"
"(begin(deserialize-representative-scope-fill! v_159 a_40 d_25) done-pos_3))))"
"(begin(deserialize-representative-scope-fill! v_159 a_43 d_25) done-pos_3))))"
" (let-values () (error 'deserialize \"bad fill encoding: ~v\" (vector*-ref vec_51 pos_72)))))))))))))"
"(define-values"
"(find-reachable-scopes)"
@ -33211,13 +33248,13 @@ static const char *startup_source =
" #f)))))))))"
"(define-values"
"(arity-includes?)"
"(lambda(a_41 n_26)"
"(lambda(a_44 n_26)"
"(begin"
"(let-values(((or-part_251)(equal? a_41 n_26)))"
"(let-values(((or-part_251)(equal? a_44 n_26)))"
"(if or-part_251"
" or-part_251"
"(if(list? a_41)"
"(let-values(((lst_257) a_41))"
"(if(list? a_44)"
"(let-values(((lst_257) a_44))"
"(begin"
"(if(variable-reference-from-unsafe?(#%variable-reference))"
"(void)"
@ -33227,14 +33264,14 @@ static const char *startup_source =
"(begin"
" 'for-loop"
"(if(pair? lst_258)"
"(let-values(((a_42)(unsafe-car lst_258))((rest_141)(unsafe-cdr lst_258)))"
"(let-values(((a_45)(unsafe-car lst_258))((rest_141)(unsafe-cdr lst_258)))"
"(let-values(((result_108)"
"(let-values()"
"(let-values(((result_109)"
"(let-values()"
"(let-values()(equal? a_42 n_26)))))"
"(let-values()(equal? a_45 n_26)))))"
"(values result_109)))))"
"(if(if(not((lambda x_69 result_108) a_42))(not #f) #f)"
"(if(if(not((lambda x_69 result_108) a_45))(not #f) #f)"
"(for-loop_233 result_108 rest_141)"
" result_108)))"
" result_107)))))"
@ -33314,15 +33351,15 @@ static const char *startup_source =
"(lambda(e_70 locals_17 type_1 defns_10)"
"(begin"
"(let-values(((l_63)(correlated->list e_70)))"
"(let-values(((a_43)"
"(let-values(((a_46)"
"(if(let-values(((or-part_255)(=(length l_63) 3)))"
"(if or-part_255 or-part_255(=(length l_63) 4)))"
"(let-values(((or-part_256)(hash-ref locals_17(correlated-e(list-ref l_63 1)) #f)))"
"(if or-part_256 or-part_256(lookup-defn defns_10(correlated-e(list-ref l_63 1)))))"
" #f)))"
"(if(known-struct-op? a_43)"
"(if(eq?(known-struct-op-type a_43) type_1)"
"(if(<(field-count-expr-to-field-count(list-ref l_63 2))(known-struct-op-field-count a_43))"
"(if(known-struct-op? a_46)"
"(if(eq?(known-struct-op-type a_46) type_1)"
"(if(<(field-count-expr-to-field-count(list-ref l_63 2))(known-struct-op-field-count a_46))"
"(let-values(((or-part_257)(=(length l_63) 3)))"
"(if or-part_257 or-part_257(quoted? symbol?(list-ref l_63 3))))"
" #f)"
@ -34126,7 +34163,7 @@ static const char *startup_source =
"(let-values()"
"(begin"
"(let-values()"
"(let-values(((a_44)"
"(let-values(((a_47)"
"(hash-ref"
"(hash-ref"
" access_2"
@ -34137,12 +34174,12 @@ static const char *startup_source =
" 'unexported)))"
"(if(let-values(((or-part_21)"
"(eq?"
" a_44"
" a_47"
" 'unexported)))"
"(if or-part_21"
" or-part_21"
"(eq?"
" a_44"
" a_47"
" 'protected)))"
"(let-values()"
"(let-values(((guard-insp_3)"
@ -34181,7 +34218,7 @@ static const char *startup_source =
" \"access disallowed by code inspector to ~a variable\\n\""
" \" variable: ~s\\n\""
" \" from module: ~a\")"
" a_44"
" a_47"
" import-sym_0"
"(1/module-path-index-resolve"
"(namespace-mpi"
@ -34222,9 +34259,9 @@ static const char *startup_source =
"(let-values(((access_3)"
"(let-values(((or-part_261)(module-access m_16)))"
"(if or-part_261 or-part_261(module-compute-access! m_16)))))"
"(let-values(((a_45)(hash-ref(hash-ref access_3 phase_89 '#hasheq()) sym_65 'unexported)))"
"(if(let-values(((or-part_34)(eq? a_45 'unexported)))"
"(if or-part_34 or-part_34(eq? a_45 'protected)))"
"(let-values(((a_48)(hash-ref(hash-ref access_3 phase_89 '#hasheq()) sym_65 'unexported)))"
"(if(let-values(((or-part_34)(eq? a_48 'unexported)))"
"(if or-part_34 or-part_34(eq? a_48 'protected)))"
"(let-values()"
"(let-values(((guard-insp_4)(namespace-inspector(module-instance-namespace mi_17))))"
"(let-values(((or-part_262)(if insp_11(inspector-superior? insp_11 guard-insp_4) #f)))"
@ -34233,8 +34270,8 @@ static const char *startup_source =
"(define-values(module-cache)(make-weak-hasheq))"
"(define-values"
"(make-module-cache-key)"
"(lambda(hash-code_4)"
" (begin (if hash-code_4 (string->symbol (format \"~s\" (list hash-code_4 (current-load-relative-directory)))) #f))))"
"(lambda(hash-code_6)"
" (begin (if hash-code_6 (string->symbol (format \"~s\" (list hash-code_6 (current-load-relative-directory)))) #f))))"
"(define-values"
"(module-cache-set!)"
"(lambda(key_10 proc_9)(begin(hash-set! module-cache key_10(make-ephemeron key_10 proc_9)))))"
@ -41359,18 +41396,18 @@ static const char *startup_source =
" \"(or/c internal-definition-context? (listof internal-definition-context?))\""
" intdef_8)))"
"(let-values(((x_76)"
"(let-values(((a_46) intdef_8))"
"(if(list? a_46)"
"(let-values()(reverse$1 a_46))"
"(if(not a_46)(let-values() null)(let-values()(list a_46)))))))"
"(let-values(((a_49) intdef_8))"
"(if(list? a_49)"
"(let-values()(reverse$1 a_49))"
"(if(not a_49)(let-values() null)(let-values()(list a_49)))))))"
"(begin"
" #t"
"((letrec-values(((for-loop_259)"
"(lambda(id_73 a_47)"
"(lambda(id_73 a_50)"
"(begin"
" 'for-loop"
"(if(pair? a_47)"
"(let-values(((intdef_9)(car a_47)))"
"(if(pair? a_50)"
"(let-values(((intdef_9)(car a_50)))"
"(let-values(((id_74)"
"(let-values(((id_75) id_73))"
"(let-values(((id_76)"
@ -41380,7 +41417,7 @@ static const char *startup_source =
" id_75"
" 'remove))))"
"(values id_76)))))"
"(if(not #f)(for-loop_259 id_74(cdr a_47)) id_74)))"
"(if(not #f)(for-loop_259 id_74(cdr a_50)) id_74)))"
" id_73)))))"
" for-loop_259)"
" id_72"
@ -41403,18 +41440,18 @@ static const char *startup_source =
"(lambda(env_11 intdefs_0)"
"(begin"
"(let-values(((x_79)"
"(let-values(((a_48) intdefs_0))"
"(if(list? a_48)"
"(let-values()(reverse$1 a_48))"
"(if(not a_48)(let-values() null)(let-values()(list a_48)))))))"
"(let-values(((a_51) intdefs_0))"
"(if(list? a_51)"
"(let-values()(reverse$1 a_51))"
"(if(not a_51)(let-values() null)(let-values()(list a_51)))))))"
"(begin"
" #t"
"((letrec-values(((for-loop_260)"
"(lambda(env_12 a_49)"
"(lambda(env_12 a_52)"
"(begin"
" 'for-loop"
"(if(pair? a_49)"
"(let-values(((intdef_10)(car a_49)))"
"(if(pair? a_52)"
"(let-values(((intdef_10)(car a_52)))"
"(let-values(((env_13)"
"(let-values(((env_14) env_12))"
"(let-values(((env_15)"
@ -41472,7 +41509,7 @@ static const char *startup_source =
" parent-env_0"
" env-mixins_1)))))))"
"(values env_15)))))"
"(if(not #f)(for-loop_260 env_13(cdr a_49)) env_13)))"
"(if(not #f)(for-loop_260 env_13(cdr a_52)) env_13)))"
" env_12)))))"
" for-loop_260)"
" env_11"
@ -41488,18 +41525,18 @@ static const char *startup_source =
"(let-values(((action_0)(if(eq? action19_0 unsafe-undefined) add-scope action19_0)))"
"(let-values()"
"(let-values(((x_80)"
"(let-values(((a_50) intdefs_1))"
"(if(list? a_50)"
"(let-values()(reverse$1 a_50))"
"(if(not a_50)(let-values() null)(let-values()(list a_50)))))))"
"(let-values(((a_53) intdefs_1))"
"(if(list? a_53)"
"(let-values()(reverse$1 a_53))"
"(if(not a_53)(let-values() null)(let-values()(list a_53)))))))"
"(begin"
" #t"
"((letrec-values(((for-loop_261)"
"(lambda(s_425 a_51)"
"(lambda(s_425 a_54)"
"(begin"
" 'for-loop"
"(if(pair? a_51)"
"(let-values(((intdef_11)(car a_51)))"
"(if(pair? a_54)"
"(let-values(((intdef_11)(car a_54)))"
"(let-values(((s_323)"
"(let-values(((s_71) s_425))"
"(if(let-values(((or-part_279) always?_0))"
@ -41516,7 +41553,7 @@ static const char *startup_source =
" intdef_11)))))"
"(values s_427)))"
" s_71))))"
"(if(not #f)(for-loop_261 s_323(cdr a_51)) s_323)))"
"(if(not #f)(for-loop_261 s_323(cdr a_54)) s_323)))"
" s_425)))))"
" for-loop_261)"
" s_39"
@ -41570,20 +41607,20 @@ static const char *startup_source =
" #f))"
"((frame-id72_0)"
"(let-values(((x_81)"
"(let-values(((a_52) intdefs_2))"
"(if(list? a_52)"
"(let-values()(reverse$1 a_52))"
"(if(not a_52)"
"(let-values(((a_55) intdefs_2))"
"(if(list? a_55)"
"(let-values()(reverse$1 a_55))"
"(if(not a_55)"
"(let-values() null)"
"(let-values()(list a_52)))))))"
"(let-values()(list a_55)))))))"
"(begin"
" #t"
"((letrec-values(((for-loop_262)"
"(lambda(frame-id_9 a_53)"
"(lambda(frame-id_9 a_56)"
"(begin"
" 'for-loop"
"(if(pair? a_53)"
"(let-values(((intdef_12)(car a_53)))"
"(if(pair? a_56)"
"(let-values(((intdef_12)(car a_56)))"
"(let-values(((frame-id_10)"
"(let-values(((frame-id_11)"
" frame-id_9))"
@ -41613,7 +41650,7 @@ static const char *startup_source =
"(if(not #f)"
"(for-loop_262"
" frame-id_10"
"(cdr a_53))"
"(cdr a_56))"
" frame-id_10)))"
" frame-id_9)))))"
" for-loop_262)"
@ -43091,7 +43128,7 @@ static const char *startup_source =
"(lambda(a9_0 b10_0 phase8_0)"
"(begin"
" 'bound-identifier=?11"
"(let-values(((a_54) a9_0))"
"(let-values(((a_57) a9_0))"
"(let-values(((b_65) b10_0))"
"(let-values(((phase_123)"
"(if(eq? phase8_0 unsafe-undefined)(1/syntax-local-phase-level) phase8_0)))"
@ -43099,26 +43136,26 @@ static const char *startup_source =
"(let-values()"
"(let-values()"
"(begin"
"(if(identifier? a_54)"
"(if(identifier? a_57)"
"(void)"
" (let-values () (raise-argument-error 'bound-identifier=? \"identifier?\" a_54)))"
" (let-values () (raise-argument-error 'bound-identifier=? \"identifier?\" a_57)))"
"(if(identifier? b_65)"
"(void)"
" (let-values () (raise-argument-error 'bound-identifier=? \"identifier?\" b_65)))"
"(if(phase? phase_123)"
"(void)"
"(let-values()(raise-argument-error 'bound-identifier=? phase?-string phase_123)))"
"(bound-identifier=?$1 a_54 b_65 phase_123))))))))))))"
"(bound-identifier=?$1 a_57 b_65 phase_123))))))))))))"
"(case-lambda"
"((a_55 b_84)(begin 'bound-identifier=?(bound-identifier=?11_0 a_55 b_84 unsafe-undefined)))"
"((a_56 b_85 phase8_1)(bound-identifier=?11_0 a_56 b_85 phase8_1)))))"
"((a_58 b_84)(begin 'bound-identifier=?(bound-identifier=?11_0 a_58 b_84 unsafe-undefined)))"
"((a_59 b_85 phase8_1)(bound-identifier=?11_0 a_59 b_85 phase8_1)))))"
"(define-values"
"(1/free-identifier=?)"
"(let-values(((free-identifier=?17_0)"
"(lambda(a15_0 b16_1 a-phase13_0 b-phase14_0)"
"(begin"
" 'free-identifier=?17"
"(let-values(((a_57) a15_0))"
"(let-values(((a_60) a15_0))"
"(let-values(((b_86) b16_1))"
"(let-values(((a-phase_1)"
"(if(eq? a-phase13_0 unsafe-undefined)(1/syntax-local-phase-level) a-phase13_0)))"
@ -43127,9 +43164,9 @@ static const char *startup_source =
"(let-values()"
"(let-values()"
"(begin"
"(if(identifier? a_57)"
"(if(identifier? a_60)"
"(void)"
" (let-values () (raise-argument-error 'free-identifier=? \"identifier?\" a_57)))"
" (let-values () (raise-argument-error 'free-identifier=? \"identifier?\" a_60)))"
"(if(identifier? b_86)"
"(void)"
" (let-values () (raise-argument-error 'free-identifier=? \"identifier?\" b_86)))"
@ -43139,23 +43176,23 @@ static const char *startup_source =
"(if(phase? b-phase_1)"
"(void)"
"(let-values()(raise-argument-error 'free-identifier=? phase?-string b-phase_1)))"
"(free-identifier=?$1 a_57 b_86 a-phase_1 b-phase_1)))))))))))))"
"(free-identifier=?$1 a_60 b_86 a-phase_1 b-phase_1)))))))))))))"
"(case-lambda"
"((a_58 b_39)(begin 'free-identifier=?(free-identifier=?17_0 a_58 b_39 unsafe-undefined unsafe-undefined)))"
"((a_59 b_87 a-phase_2 b-phase14_1)(free-identifier=?17_0 a_59 b_87 a-phase_2 b-phase14_1))"
"((a_60 b_88 a-phase13_1)(free-identifier=?17_0 a_60 b_88 a-phase13_1 unsafe-undefined)))))"
"((a_61 b_39)(begin 'free-identifier=?(free-identifier=?17_0 a_61 b_39 unsafe-undefined unsafe-undefined)))"
"((a_62 b_87 a-phase_2 b-phase14_1)(free-identifier=?17_0 a_62 b_87 a-phase_2 b-phase14_1))"
"((a_63 b_88 a-phase13_1)(free-identifier=?17_0 a_63 b_88 a-phase13_1 unsafe-undefined)))))"
"(define-values"
"(1/free-transformer-identifier=?)"
"(lambda(a_61 b_89)"
"(lambda(a_64 b_89)"
"(begin"
" 'free-transformer-identifier=?"
"(let-values()"
"(let-values()"
"(let-values((()"
"(begin"
"(if(identifier? a_61)"
"(if(identifier? a_64)"
"(void)"
" (let-values () (raise-argument-error 'free-transformer-identifier=? \"identifier?\" a_61)))"
" (let-values () (raise-argument-error 'free-transformer-identifier=? \"identifier?\" a_64)))"
"(values))))"
"(let-values((()"
"(begin"
@ -43164,19 +43201,19 @@ static const char *startup_source =
" (let-values () (raise-argument-error 'free-transformer-identifier=? \"identifier?\" b_89)))"
"(values))))"
"(let-values(((phase_124)(add1(1/syntax-local-phase-level))))"
"(free-identifier=?$1 a_61 b_89 phase_124 phase_124)))))))))"
"(free-identifier=?$1 a_64 b_89 phase_124 phase_124)))))))))"
"(define-values"
"(1/free-template-identifier=?)"
"(lambda(a_62 b_90)"
"(lambda(a_65 b_90)"
"(begin"
" 'free-template-identifier=?"
"(let-values()"
"(let-values()"
"(let-values((()"
"(begin"
"(if(identifier? a_62)"
"(if(identifier? a_65)"
"(void)"
" (let-values () (raise-argument-error 'free-template-identifier=? \"identifier?\" a_62)))"
" (let-values () (raise-argument-error 'free-template-identifier=? \"identifier?\" a_65)))"
"(values))))"
"(let-values((()"
"(begin"
@ -43185,22 +43222,22 @@ static const char *startup_source =
" (let-values () (raise-argument-error 'free-template-identifier=? \"identifier?\" b_90)))"
"(values))))"
"(let-values(((phase_125)(sub1(1/syntax-local-phase-level))))"
"(free-identifier=?$1 a_62 b_90 phase_125 phase_125)))))))))"
"(free-identifier=?$1 a_65 b_90 phase_125 phase_125)))))))))"
"(define-values"
"(1/free-label-identifier=?)"
"(lambda(a_63 b_91)"
"(lambda(a_66 b_91)"
"(begin"
" 'free-label-identifier=?"
"(let-values()"
"(let-values()"
"(begin"
"(if(identifier? a_63)"
"(if(identifier? a_66)"
"(void)"
" (let-values () (raise-argument-error 'free-label-identifier=? \"identifier?\" a_63)))"
" (let-values () (raise-argument-error 'free-label-identifier=? \"identifier?\" a_66)))"
"(if(identifier? b_91)"
"(void)"
" (let-values () (raise-argument-error 'free-label-identifier=? \"identifier?\" b_91)))"
"(free-identifier=?$1 a_63 b_91 #f #f)))))))"
"(free-identifier=?$1 a_66 b_91 #f #f)))))))"
"(define-values"
"(1/identifier-binding)"
"(let-values(((identifier-binding22_0)"
@ -45618,7 +45655,7 @@ static const char *startup_source =
" 'next)))"
"(void)))"
"(values))))"
"(let-values(((a_64)"
"(let-values(((a_67)"
"(if combine_0"
"(loop_101"
"(car"
@ -45636,7 +45673,7 @@ static const char *startup_source =
"(void)))))"
"(if combine_0"
"(combine_0"
" a_64"
" a_67"
"(begin-loop_0"
"(cdr"
" es_2)))"
@ -47252,7 +47289,7 @@ static const char *startup_source =
"(call-with-input-file*61.1 'binary path9_0 temp10_4)))))"
"(define-values"
"(no-file-stamp?)"
"(lambda(a_65)(begin(let-values(((or-part_31)(not a_65)))(if or-part_31 or-part_31(not(car a_65)))))))"
"(lambda(a_68)(begin(let-values(((or-part_31)(not a_68)))(if or-part_31 or-part_31(not(car a_68)))))))"
"(define-values"
"(get-linked-collections)"
"(lambda(links-path_0)"
@ -49088,66 +49125,66 @@ static const char *startup_source =
"(lambda(config_26)"
"(begin"
"(let-values(((st_1)(read-config-st config_26)))"
"(let-values(((a_66)(read-config-state-accum-str st_1)))"
"(if a_66"
"(let-values()(begin(set-read-config-state-accum-str! st_1 #f)(set-accum-string-pos! a_66 0) a_66))"
"(let-values(((a_69)(read-config-state-accum-str st_1)))"
"(if a_69"
"(let-values()(begin(set-read-config-state-accum-str! st_1 #f)(set-accum-string-pos! a_69 0) a_69))"
"(let-values()(accum-string1.1 0(make-string 32)))))))))"
"(define-values"
"(accum-string-add!)"
"(lambda(a_67 c_50)"
"(lambda(a_70 c_50)"
"(begin"
"(let-values(((pos_113)(accum-string-pos a_67)))"
"(let-values(((str_27)(accum-string-str a_67)))"
"(let-values(((pos_113)(accum-string-pos a_70)))"
"(let-values(((str_27)(accum-string-str a_70)))"
"(let-values(((str2_0)"
"(if(< pos_113(string-length str_27))"
"(let-values() str_27)"
"(let-values()"
"(let-values(((str2_1)(make-string(*(string-length str_27) 2))))"
"(begin(string-copy! str2_1 0 str_27)(set-accum-string-str! a_67 str2_1) str2_1))))))"
"(begin(string-set! str2_0 pos_113 c_50)(set-accum-string-pos! a_67(add1 pos_113)))))))))"
"(define-values(accum-string-count)(lambda(a_68)(begin(accum-string-pos a_68))))"
"(define-values(set-accum-string-count!)(lambda(a_69 pos_12)(begin(set-accum-string-pos! a_69 pos_12))))"
"(begin(string-copy! str2_1 0 str_27)(set-accum-string-str! a_70 str2_1) str2_1))))))"
"(begin(string-set! str2_0 pos_113 c_50)(set-accum-string-pos! a_70(add1 pos_113)))))))))"
"(define-values(accum-string-count)(lambda(a_71)(begin(accum-string-pos a_71))))"
"(define-values(set-accum-string-count!)(lambda(a_72 pos_12)(begin(set-accum-string-pos! a_72 pos_12))))"
"(define-values"
"(accum-string-convert!)"
"(lambda(a_70 convert_1 start-pos_6)"
"(lambda(a_73 convert_1 start-pos_6)"
"(begin"
"(let-values(((str_28)(accum-string-str a_70)))"
"(let-values(((s_80)(convert_1(substring str_28 start-pos_6(accum-string-pos a_70)))))"
"(let-values(((str_28)(accum-string-str a_73)))"
"(let-values(((s_80)(convert_1(substring str_28 start-pos_6(accum-string-pos a_73)))))"
"(let-values(((len_36)(string-length s_80)))"
"(begin"
"(if(<(+ len_36 start-pos_6)(string-length str_28))"
"(void)"
"(let-values()"
"(let-values(((str2_2)(make-string(+ start-pos_6 len_36))))"
"(begin(string-copy! str2_2 0 str_28 0 start-pos_6)(set-accum-string-str! a_70 str2_2)))))"
"(string-copy!(accum-string-str a_70) start-pos_6 s_80)"
"(set-accum-string-pos! a_70(+ start-pos_6 len_36)))))))))"
"(begin(string-copy! str2_2 0 str_28 0 start-pos_6)(set-accum-string-str! a_73 str2_2)))))"
"(string-copy!(accum-string-str a_73) start-pos_6 s_80)"
"(set-accum-string-pos! a_73(+ start-pos_6 len_36)))))))))"
"(define-values"
"(accum-string-get!6.1)"
"(lambda(start-pos2_0 a4_0 config5_0)"
"(begin"
" 'accum-string-get!6"
"(let-values(((a_55) a4_0))"
"(let-values(((a_58) a4_0))"
"(let-values(((config_27) config5_0))"
"(let-values(((start-pos_7) start-pos2_0))"
"(let-values()"
"(let-values(((s_43)(substring(accum-string-str a_55) start-pos_7(accum-string-pos a_55))))"
"(begin(accum-string-abandon! a_55 config_27) s_43)))))))))"
"(let-values(((s_43)(substring(accum-string-str a_58) start-pos_7(accum-string-pos a_58))))"
"(begin(accum-string-abandon! a_58 config_27) s_43)))))))))"
"(define-values"
"(accum-string-get-bytes!13.1)"
"(lambda(start-pos9_0 a11_0 config12_0)"
"(begin"
" 'accum-string-get-bytes!13"
"(let-values(((a_61) a11_0))"
"(let-values(((a_64) a11_0))"
"(let-values(((config_28) config12_0))"
"(let-values(((start-pos_8) start-pos9_0))"
"(let-values()"
"(let-values(((bstr_3)"
"(string->bytes/latin-1(accum-string-str a_61) #f start-pos_8(accum-string-pos a_61))))"
"(begin(accum-string-abandon! a_61 config_28) bstr_3)))))))))"
"(string->bytes/latin-1(accum-string-str a_64) #f start-pos_8(accum-string-pos a_64))))"
"(begin(accum-string-abandon! a_64 config_28) bstr_3)))))))))"
"(define-values"
"(accum-string-abandon!)"
"(lambda(a_71 config_29)(begin(set-read-config-state-accum-str!(read-config-st config_29) a_71))))"
"(lambda(a_74 config_29)(begin(set-read-config-state-accum-str!(read-config-st config_29) a_74))))"
"(define-values"
"(struct:indentation"
" indentation1.1"
@ -59738,11 +59775,11 @@ static const char *startup_source =
"(lambda(i_181)"
"(begin"
"(let-values(((pos_15)(linklet-bundle-or-directory-start i_181 '#\\B)))"
"(let-values(((hash-code_5)(if pos_15(peek-bytes 20 pos_15 i_181) #f)))"
"(if(bytes? hash-code_5)"
"(if(= 20(bytes-length hash-code_5))"
"(let-values(((hash-code_7)(if pos_15(peek-bytes 20 pos_15 i_181) #f)))"
"(if(bytes? hash-code_7)"
"(if(= 20(bytes-length hash-code_7))"
"(if(let-values(((vec_70 len_37)"
"(let-values(((vec_71) hash-code_5))"
"(let-values(((vec_71) hash-code_7))"
"(begin(check-bytes vec_71)(values vec_71(unsafe-bytes-length vec_71))))))"
"(begin"
" #f"
@ -59765,7 +59802,7 @@ static const char *startup_source =
" for-loop_237)"
" #f"
" 0)))"
" hash-code_5"
" hash-code_7"
" #f)"
" #f)"
" #f))))))"
@ -59925,22 +59962,22 @@ static const char *startup_source =
"(let-values(((v_72)(file-or-directory-modify-seconds a_29 #f(lambda() #f))))"
"(if v_72(cons a_29 v_72) #f))))))"
"(let-values(((date-of_0)"
"(lambda(a_36 modes_1 roots_1)"
"(lambda(a_39 modes_1 roots_1)"
"(begin"
" 'date-of"
"(ormap2"
"(lambda(root-dir_0)"
"(ormap2"
"(lambda(compiled-dir_0)"
"(let-values(((a_72)(a_36 root-dir_0 compiled-dir_0)))(date-of-1_0 a_72)))"
"(let-values(((a_75)(a_39 root-dir_0 compiled-dir_0)))(date-of-1_0 a_75)))"
" modes_1))"
" roots_1)))))"
"(let-values(((date>=?_0)"
"(lambda(modes_2 roots_2 a_73 bm_0)"
"(lambda(modes_2 roots_2 a_76 bm_0)"
"(begin"
" 'date>=?"
"(if a_73"
"(let-values(((am_0)(date-of_0 a_73 modes_2 roots_2)))"
"(if a_76"
"(let-values(((am_0)(date-of_0 a_76 modes_2 roots_2)))"
"(let-values(((or-part_28)(if(not bm_0) am_0 #f)))"
"(if or-part_28"
" or-part_28"
@ -60272,7 +60309,7 @@ static const char *startup_source =
"(let-values(((i_45)(modulo(abs(equal-hash-code p_47)) CACHE-N)))"
"(let-values(((w_1)(vector-ref -path-cache i_45)))"
"(let-values(((l_84)(if w_1(weak-box-value w_1) #f)))"
"(if l_84(let-values(((a_74)(1/assoc p_47 l_84)))(if a_74(cdr a_74) #f)) #f)))))))"
"(if l_84(let-values(((a_77)(1/assoc p_47 l_84)))(if a_77(cdr a_77) #f)) #f)))))))"
"(define-values"
"(path-cache-set!)"
"(lambda(p_78 v_257)"
@ -60454,17 +60491,17 @@ static const char *startup_source =
"(begin"
" 'flatten-sub-path"
"((letrec-values(((loop_119)"
"(lambda(a_75 l_35)"
"(lambda(a_78 l_35)"
"(begin"
" 'loop"
"(if(null? l_35)"
"(let-values()"
"(if(null? a_75)"
"(if(null? a_78)"
" base_27"
"(cons base_27(reverse$1 a_75))))"
"(cons base_27(reverse$1 a_78))))"
" (if (equal? (car l_35) \"..\")"
"(let-values()"
"(if(null? a_75)"
"(if(null? a_78)"
"(error"
" 'standard-module-name-resolver"
" \"too many \\\"..\\\"s in submodule path: ~.s\""
@ -60480,10 +60517,10 @@ static const char *startup_source =
" 'file)"
" base_27)))"
" orig-l_10))"
"(loop_119(cdr a_75)(cdr l_35))))"
"(loop_119(cdr a_78)(cdr l_35))))"
"(let-values()"
"(loop_119"
"(cons(car l_35) a_75)"
"(cons(car l_35) a_78)"
"(cdr l_35)))))))))"
" loop_119)"
" null"