From 41dc6f13358acc49092d54e71c470b22b2e13c68 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Tue, 11 Jun 2019 15:53:00 -0600 Subject: [PATCH] measure resolver time instead of resolve calls in instantiate The total time of module name resolver calls is more useful, because each one takes longer, there should be many fewer, and there are tasks that end up resolving module paths. --- racket/src/expander/common/module-path.rkt | 17 +- racket/src/expander/namespace/module.rkt | 4 +- racket/src/racket/src/startup.inc | 1102 ++++++++++---------- 3 files changed, 563 insertions(+), 560 deletions(-) diff --git a/racket/src/expander/common/module-path.rkt b/racket/src/expander/common/module-path.rkt index 117849b388..adfc93d26c 100644 --- a/racket/src/expander/common/module-path.rkt +++ b/racket/src/expander/common/module-path.rkt @@ -2,6 +2,7 @@ (require racket/private/place-local ffi/unsafe/atomic "../compile/serialize-property.rkt" + "../common/performance.rkt" "contract.rkt" "parse-module-path.rkt" "intern.rkt") @@ -200,13 +201,15 @@ (define/who (module-path-index-resolve mpi [load? #f]) (check who module-path-index? mpi) (or (module-path-index-resolved mpi) - (let ([mod-name ((current-module-name-resolver) - (module-path-index-path mpi) - (module-path-index-resolve/maybe - (module-path-index-base mpi) - load?) - #f - load?)]) + (let ([mod-name (performance-region + ['eval 'resolver] + ((current-module-name-resolver) + (module-path-index-path mpi) + (module-path-index-resolve/maybe + (module-path-index-base mpi) + load?) + #f + load?))]) (unless (resolved-module-path? mod-name) (raise-arguments-error 'module-path-index-resolve "current module name resolver's result is not a resolved module path" diff --git a/racket/src/expander/namespace/module.rkt b/racket/src/expander/namespace/module.rkt index 1044fd13b9..0fd46499ba 100644 --- a/racket/src/expander/namespace/module.rkt +++ b/racket/src/expander/namespace/module.rkt @@ -372,9 +372,7 @@ #:seen [seen #hasheq()]) (unless (module-path-index? mpi) (error "not a module path index:" mpi)) - (define name (performance-region - ['eval 'resolve] - (module-path-index-resolve mpi #t))) + (define name (module-path-index-resolve mpi #t)) (define m (namespace->module ns name)) (unless m (raise-unknown-module-error 'instantiate name)) (define (instantiate! instance-phase run-phase ns) diff --git a/racket/src/racket/src/startup.inc b/racket/src/racket/src/startup.inc index 1c03209f61..eaa3f90a81 100644 --- a/racket/src/racket/src/startup.inc +++ b/racket/src/racket/src/startup.inc @@ -3091,6 +3091,524 @@ static const char *startup_source = "(prop:binding-reach-scopes binding-reach-scopes? binding-reach-scopes-ref)" "(make-struct-type-property 'binding-reach-scopes))" "(define-values" +"(log-performance?)" +" (if (environment-variables-ref (current-environment-variables) #\"PLT_EXPANDER_TIMES\") #t #f))" +"(define-values(cell.1$7)(unsafe-make-place-local #f))" +"(define-values(cell.2$4)(unsafe-make-place-local(make-hasheq)))" +"(define-values(performance-place-init!)(lambda()(begin(unsafe-place-local-set! cell.2$4(make-hasheq)))))" +"(define-values" +"(struct:region" +" region1.1" +" region?" +" region-path" +" region-start" +" region-start-memory" +" region-as-nested" +" region-as-nested-memory" +" set-region-start!" +" set-region-start-memory!" +" set-region-as-nested!" +" set-region-as-nested-memory!)" +"(let-values(((struct:_0 make-_0 ?_0 -ref_0 -set!_0)" +"(let-values()" +"(let-values()(make-struct-type 'region #f 5 0 #f null(current-inspector) #f '(0) #f 'region)))))" +"(values" +" struct:_0" +" make-_0" +" ?_0" +"(make-struct-field-accessor -ref_0 0 'path)" +"(make-struct-field-accessor -ref_0 1 'start)" +"(make-struct-field-accessor -ref_0 2 'start-memory)" +"(make-struct-field-accessor -ref_0 3 'as-nested)" +"(make-struct-field-accessor -ref_0 4 'as-nested-memory)" +"(make-struct-field-mutator -set!_0 1 'start)" +"(make-struct-field-mutator -set!_0 2 'start-memory)" +"(make-struct-field-mutator -set!_0 3 'as-nested)" +"(make-struct-field-mutator -set!_0 4 'as-nested-memory))))" +"(define-values" +"(struct:stat stat2.1 stat? stat-msecs stat-memory stat-count set-stat-msecs! set-stat-memory! set-stat-count!)" +"(let-values(((struct:_0 make-_0 ?_0 -ref_0 -set!_0)" +"(let-values()" +"(let-values()(make-struct-type 'stat #f 3 0 #f null(current-inspector) #f '() #f 'stat)))))" +"(values" +" struct:_0" +" make-_0" +" ?_0" +"(make-struct-field-accessor -ref_0 0 'msecs)" +"(make-struct-field-accessor -ref_0 1 'memory)" +"(make-struct-field-accessor -ref_0 2 'count)" +"(make-struct-field-mutator -set!_0 0 'msecs)" +"(make-struct-field-mutator -set!_0 1 'memory)" +"(make-struct-field-mutator -set!_0 2 'count))))" +"(define-values(stat-key)(gensym))" +"(define-values" +"(start-performance-region)" +"(lambda path_0" +"(begin" +"(unsafe-place-local-set!" +" cell.1$7" +"(cons" +"(region1.1" +"(if(unsafe-place-local-ref cell.1$7)" +"((letrec-values(((loop_0)" +"(lambda(path_1 enclosing-path_0)" +"(begin" +" 'loop" +"(if(null? path_1)" +" null" +"(cons" +"(if(if(eq? '_(car path_1))(pair? enclosing-path_0) #f)" +"(car enclosing-path_0)" +"(car path_1))" +"(loop_0" +"(cdr path_1)" +"(if(pair? enclosing-path_0)(cdr enclosing-path_0) null))))))))" +" loop_0)" +" path_0" +"(region-path(car(unsafe-place-local-ref cell.1$7))))" +" path_0)" +"(current-inexact-milliseconds)" +"(current-memory-use 'cumulative)" +" 0.0" +" 0)" +"(unsafe-place-local-ref cell.1$7))))))" +"(define-values" +"(end-performance-region)" +"(lambda()" +"(begin" +"(let-values(((now_0)(current-inexact-milliseconds)))" +"(let-values(((now-memory_0)(current-memory-use 'cumulative)))" +"(let-values(((r_0)(car(unsafe-place-local-ref cell.1$7))))" +"(let-values((()" +"(begin(unsafe-place-local-set! cell.1$7(cdr(unsafe-place-local-ref cell.1$7)))(values))))" +"(let-values(((full-delta_0)(- now_0(region-start r_0))))" +"(let-values(((delta_0)(- full-delta_0(region-as-nested r_0))))" +"(let-values(((full-delta-memory_0)(- now-memory_0(region-start-memory r_0))))" +"(let-values(((delta-memory_0)(- full-delta-memory_0(region-as-nested-memory r_0))))" +"(begin" +"((letrec-values(((loop_0)" +"(lambda(accums_0 path_0)" +"(begin" +" 'loop" +"(let-values(((key_0)(car path_0)))" +"(let-values(((accum_0)" +"(let-values(((or-part_0)(hash-ref accums_0 key_0 #f)))" +"(if or-part_0" +" or-part_0" +"(let-values(((accum_0)(make-hasheq)))" +"(begin" +"(hash-set! accums_0 key_0 accum_0)" +" accum_0))))))" +"(let-values(((s_0)" +"(let-values(((or-part_0)" +"(hash-ref accum_0 stat-key #f)))" +"(if or-part_0" +" or-part_0" +"(let-values(((s_0)(stat2.1 0.0 0 0)))" +"(begin(hash-set! accum_0 stat-key s_0) s_0))))))" +"(begin" +"(set-stat-msecs! s_0(+ delta_0(stat-msecs s_0)))" +"(set-stat-memory! s_0(+ delta-memory_0(stat-memory s_0)))" +"(if(null?(cdr path_0))" +"(let-values()(set-stat-count! s_0(add1(stat-count s_0))))" +"(void))" +"(if(null?(cdr path_0))" +"(void)" +"(let-values()(loop_0 accum_0(cdr path_0))))))))))))" +" loop_0)" +"(unsafe-place-local-ref cell.2$4)" +"(region-path r_0))" +"(if(unsafe-place-local-ref cell.1$7)" +"(let-values()" +"(begin" +"(set-region-as-nested!" +"(car(unsafe-place-local-ref cell.1$7))" +"(+(region-as-nested(car(unsafe-place-local-ref cell.1$7))) full-delta_0))" +"(set-region-as-nested-memory!" +"(car(unsafe-place-local-ref cell.1$7))" +"(+" +"(region-as-nested-memory(car(unsafe-place-local-ref cell.1$7)))" +" full-delta-memory_0))))" +"(void))))))))))))))" +"(call-with-values" +"(lambda()" +"(if log-performance?" +"(let-values()" +"(void" +"(plumber-add-flush!" +"(current-plumber)" +"(lambda(h_0)" +"(let-values(((whole-len_0)" +"(lambda(s_0)" +"(begin" +" 'whole-len" +"(caar" +" (let-values (((or-part_0) (regexp-match-positions '#rx\"[.]\" s_0)))" +"(if or-part_0 or-part_0 '(0))))))))" +"(let-values(((kb_0)" +"(lambda(b_0)" +"(begin" +" 'kb" +"(let-values(((s_0)(number->string(quotient b_0 1024))))" +"(list->string" +"(let-values(((lst_0)(reverse$1(string->list s_0)))((start_0) 0))" +"(begin" +"(if(variable-reference-from-unsafe?(#%variable-reference))" +"(void)" +"(let-values()(check-list lst_0)))" +"(if(variable-reference-from-unsafe?(#%variable-reference))" +"(void)" +"(let-values()(check-naturals start_0)))" +"((letrec-values(((for-loop_0)" +"(lambda(l_0 lst_1 pos_0)" +"(begin" +" 'for-loop" +"(if(if(pair? lst_1) #t #f)" +"(let-values(((c_0)(unsafe-car lst_1))" +"((rest_0)(unsafe-cdr lst_1))" +"((i_0) pos_0))" +"(let-values(((l_1)" +"(let-values(((l_1) l_0))" +"(let-values(((l_2)" +"(let-values()" +"(if(if(positive? i_0)" +"(zero?" +"(modulo i_0 3))" +" #f)" +"(let-values()" +"(list*" +" c_0" +" '#\\," +" l_1))" +"(let-values()" +"(cons c_0 l_1))))))" +"(values l_2)))))" +"(if(not #f)" +"(for-loop_0 l_1 rest_0(+ pos_0 1))" +" l_1)))" +" l_0)))))" +" for-loop_0)" +" null" +" lst_0" +" start_0)))))))))" +"(let-values(((label-max-len_0 value-max-len_0 memory-max-len_0 count-max-len_0)" +"((letrec-values(((loop_0)" +"(lambda(accums_0" +" label-len_0" +" value-len_0" +" memory-len_0" +" count-len_0" +" indent_0)" +"(begin" +" 'loop" +"(let-values(((ht_0) accums_0))" +"(begin" +"(if(variable-reference-from-unsafe?(#%variable-reference))" +"(void)" +"(let-values()(check-in-hash ht_0)))" +"((letrec-values(((for-loop_0)" +"(lambda(label-len_1" +" value-len_1" +" memory-len_1" +" count-len_1" +" i_0)" +"(begin" +" 'for-loop" +"(if i_0" +"(let-values(((k_0 v_0)" +"(hash-iterate-key+value" +" ht_0" +" i_0)))" +"(let-values(((label-len_2" +" value-len_2" +" memory-len_2" +" count-len_2)" +"(let-values(((label-len_2)" +" label-len_1)" +"((value-len_2)" +" value-len_1)" +"((memory-len_2)" +" memory-len_1)" +"((count-len_2)" +" count-len_1))" +"(let-values(((label-len_3" +" value-len_3" +" memory-len_3" +" count-len_3)" +"(let-values()" +"(if(eq?" +" k_0" +" stat-key)" +"(let-values()" +"(values" +" label-len_2" +"(max" +" value-len_2" +"(whole-len_0" +"(format" +" \"~a\"" +"(stat-msecs" +" v_0))))" +"(max" +" memory-len_2" +"(string-length" +"(format" +" \"~a\"" +"(kb_0" +"(stat-memory" +" v_0)))))" +"(max" +" count-len_2" +"(string-length" +"(format" +" \"~a\"" +"(stat-count" +" v_0))))))" +"(let-values()" +"(loop_0" +" v_0" +"(max" +" label-len_2" +"(+" +" indent_0" +"(string-length" +"(format" +" \"~a\"" +" k_0))))" +" value-len_2" +" memory-len_2" +" count-len_2" +"(+" +" 2" +" indent_0)))))))" +"(values" +" label-len_3" +" value-len_3" +" memory-len_3" +" count-len_3)))))" +"(if(not #f)" +"(for-loop_0" +" label-len_2" +" value-len_2" +" memory-len_2" +" count-len_2" +"(hash-iterate-next ht_0 i_0))" +"(values" +" label-len_2" +" value-len_2" +" memory-len_2" +" count-len_2))))" +"(values" +" label-len_1" +" value-len_1" +" memory-len_1" +" count-len_1))))))" +" for-loop_0)" +" label-len_0" +" value-len_0" +" memory-len_0" +" count-len_0" +"(hash-iterate-first ht_0))))))))" +" loop_0)" +"(unsafe-place-local-ref cell.2$4)" +" 6" +" 5" +" 4" +" 5" +" 2)))" +"(begin" +"(let-values(((l_0)(current-logger)))" +"(if(log-level? l_0 'error(logger-name l_0))" +"(let-values()" +"(log-message" +" l_0" +" 'error" +"(format" +" \"REGION ~aMSECS ~aMEMK ~aCOUNT\"" +"(make-string(-(+ label-max-len_0 value-max-len_0) 11) '#\\space)" +"(make-string(- memory-max-len_0 4) '#\\space)" +"(make-string(- count-max-len_0 5) '#\\space))" +"(current-continuation-marks)))" +"(void)))" +"((letrec-values(((loop_0)" +"(lambda(name_0 accums_0 indent_0 newline?_0)" +"(begin" +" 'loop" +"(let-values((()" +"(begin" +"(if name_0" +"(let-values()" +"(let-values(((v_0)(hash-ref accums_0 stat-key)))" +"(let-values(((l_0)(current-logger)))" +"(if(log-level? l_0 'error(logger-name l_0))" +"(let-values()" +"(log-message" +" l_0" +" 'error" +"(format" +" \"~a~a ~a~a ~a~a ~a~a\"" +" indent_0" +" name_0" +"(make-string" +"(+" +"(-" +" label-max-len_0" +" (string-length (format \"~a\" name_0))" +"(string-length indent_0))" +"(-" +" value-max-len_0" +"(whole-len_0" +" (format \"~a\" (stat-msecs v_0)))))" +" '#\\space)" +"(regexp-replace" +" '#rx\"[.](..).*\"" +" (format \"~a00\" (stat-msecs v_0))" +" \".\\\\1\")" +"(make-string" +"(-" +" memory-max-len_0" +"(string-length" +" (format \"~a\" (kb_0 (stat-memory v_0)))))" +" '#\\space)" +"(kb_0(stat-memory v_0))" +"(make-string" +"(-" +" count-max-len_0" +"(string-length" +" (format \"~a\" (stat-count v_0))))" +" '#\\space)" +"(stat-count v_0))" +"(current-continuation-marks)))" +"(void)))))" +"(void))" +"(values))))" +"(let-values(((keys_0)" +"(let-values(((temp5_0)" +"(reverse$1" +"(let-values(((ht_0) accums_0))" +"(begin" +"(if(variable-reference-from-unsafe?" +"(#%variable-reference))" +"(void)" +"(let-values()" +"(check-in-hash-keys ht_0)))" +"((letrec-values(((for-loop_0)" +"(lambda(fold-var_0 i_0)" +"(begin" +" 'for-loop" +"(if i_0" +"(let-values(((k_0)" +"(hash-iterate-key" +" ht_0" +" i_0)))" +"(let-values(((fold-var_1)" +"(let-values(((fold-var_1)" +" fold-var_0))" +"(if(not" +"(eq?" +" k_0" +" stat-key))" +"(let-values(((fold-var_2)" +" fold-var_1))" +"(let-values(((fold-var_3)" +"(let-values()" +"(cons" +"(let-values()" +" k_0)" +" fold-var_2))))" +"(values" +" fold-var_3)))" +" fold-var_1))))" +"(if(not #f)" +"(for-loop_0" +" fold-var_1" +"(hash-iterate-next" +" ht_0" +" i_0))" +" fold-var_1)))" +" fold-var_0)))))" +" for-loop_0)" +" null" +"(hash-iterate-first ht_0))))))" +"((>6_0) >)" +"((temp7_0)" +"(lambda(key_0)" +"(stat-msecs" +"(hash-ref" +"(hash-ref accums_0 key_0)" +" stat-key)))))" +"(sort7.1 #f temp7_0 temp5_0 >6_0))))" +"(begin" +"(let-values(((lst_0) keys_0)((start_0) 0))" +"(begin" +"(if(variable-reference-from-unsafe?(#%variable-reference))" +"(void)" +"(let-values()(check-list lst_0)))" +"(if(variable-reference-from-unsafe?(#%variable-reference))" +"(void)" +"(let-values()(check-naturals start_0)))" +"((letrec-values(((for-loop_0)" +"(lambda(lst_1 pos_0)" +"(begin" +" 'for-loop" +"(if(if(pair? lst_1) #t #f)" +"(let-values(((k_0)(unsafe-car lst_1))" +"((rest_0)(unsafe-cdr lst_1))" +"((i_0) pos_0))" +"(let-values((()" +"(let-values()" +"(let-values((()" +"(let-values()" +"(begin" +"(let-values()" +"(begin" +"(if(if newline?_0" +"(positive?" +" i_0)" +" #f)" +"(let-values()" +"(let-values(((l_0)" +"(current-logger)))" +"(if(log-level?" +" l_0" +" 'error" +"(logger-name" +" l_0))" +"(let-values()" +"(log-message" +" l_0" +" 'error" +" \"\"" +"(current-continuation-marks)))" +"(void))))" +"(void))" +"(loop_0" +" k_0" +"(hash-ref" +" accums_0" +" k_0)" +"(string-append" +" indent_0" +" \" \")" +" #f)))" +"(values)))))" +"(values)))))" +"(if(not #f)" +"(for-loop_0 rest_0(+ pos_0 1))" +"(values))))" +"(values))))))" +" for-loop_0)" +" lst_0" +" start_0)))" +"(void))))))))" +" loop_0)" +" #f" +"(unsafe-place-local-ref cell.2$4)" +" \"\"" +" #t)))))))))" +"(void)))" +" print-values)" +"(define-values" "(1/module-path?)" "(lambda(v_0)" "(begin" @@ -4298,13 +4816,22 @@ static const char *startup_source = "(if or-part_0" " or-part_0" "(let-values(((mod-name_0)" +"(begin" +"(if log-performance?" +"(let-values()(start-performance-region 'eval 'resolver))" +"(void))" +"(begin0" +"(let-values()" "((1/current-module-name-resolver)" "(module-path-index-path mpi_0)" "(module-path-index-resolve/maybe" "(module-path-index-base mpi_0)" " load?_0)" " #f" -" load?_0)))" +" load?_0))" +"(if log-performance?" +"(let-values()(end-performance-region))" +"(void))))))" "(begin" "(if(1/resolved-module-path? mod-name_0)" "(void)" @@ -4458,9 +4985,9 @@ static const char *startup_source = "(make-self-module-path-index" "(let-values(((name25_0) name_0)((temp26_0)(if enclosing_0(1/module-path-index-resolve enclosing_0) #f)))" "(build-module-name16.1 unsafe-undefined name25_0 temp26_0))))))" -"(define-values(cell.1$7)(unsafe-make-place-local(make-weak-hash)))" +"(define-values(cell.1$6)(unsafe-make-place-local(make-weak-hash)))" "(define-values(generic-module-name) '|expanded module|)" -"(define-values(module-path-place-init!)(lambda()(begin(unsafe-place-local-set! cell.1$7(make-weak-hash)))))" +"(define-values(module-path-place-init!)(lambda()(begin(unsafe-place-local-set! cell.1$6(make-weak-hash)))))" "(define-values" "(make-generic-self-module-path-index)" "(lambda(self_0)" @@ -4470,12 +4997,12 @@ static const char *startup_source = "(start-atomic)" "(begin0" "(let-values(((or-part_0)" -"(let-values(((e_0)(hash-ref(unsafe-place-local-ref cell.1$7) r_0 #f)))" +"(let-values(((e_0)(hash-ref(unsafe-place-local-ref cell.1$6) r_0 #f)))" "(if e_0(ephemeron-value e_0) #f))))" "(if or-part_0" " or-part_0" "(let-values(((mpi_0)(module-path-index2.1 #f #f r_0 #f)))" -"(begin(hash-set!(unsafe-place-local-ref cell.1$7) r_0(make-ephemeron r_0 mpi_0)) mpi_0))))" +"(begin(hash-set!(unsafe-place-local-ref cell.1$6) r_0(make-ephemeron r_0 mpi_0)) mpi_0))))" "(end-atomic)))))))" "(define-values" "(resolved-module-path-to-generic-resolved-module-path)" @@ -7922,20 +8449,20 @@ static const char *startup_source = "(fallback->list)" "(lambda(smss_0)(begin(if(fallback? smss_0)(fallback-search-list smss_0)(list smss_0)))))" "(define-values(make-cache)(lambda()(begin(box(make-weak-box #f)))))" -"(define-values(cell.1$6)(unsafe-make-place-local(make-cache)))" -"(define-values(resolve-cache-place-init!)(lambda()(begin(unsafe-place-local-set! cell.1$6(make-cache)))))" +"(define-values(cell.1$5)(unsafe-make-place-local(make-cache)))" +"(define-values(resolve-cache-place-init!)(lambda()(begin(unsafe-place-local-set! cell.1$5(make-cache)))))" "(define-values" "(clear-resolve-cache!)" "(case-lambda" "((sym_0)" "(begin" -"(let-values(((c_0)(weak-box-value(unbox*(unsafe-place-local-ref cell.1$6)))))" +"(let-values(((c_0)(weak-box-value(unbox*(unsafe-place-local-ref cell.1$5)))))" "(begin" "(if c_0(let-values()(hash-remove! c_0 sym_0))(void))" -"(set-box*!(unsafe-place-local-ref cell.2$4) #f)))))" +"(set-box*!(unsafe-place-local-ref cell.2$3) #f)))))" "(()" -"(let-values(((c_0)(weak-box-value(unbox*(unsafe-place-local-ref cell.1$6)))))" -"(begin(if c_0(let-values()(hash-clear! c_0))(void))(set-box*!(unsafe-place-local-ref cell.2$4) #f))))))" +"(let-values(((c_0)(weak-box-value(unbox*(unsafe-place-local-ref cell.1$5)))))" +"(begin(if c_0(let-values()(hash-clear! c_0))(void))(set-box*!(unsafe-place-local-ref cell.2$3) #f))))))" "(define-values" "(struct:entry entry1.1 entry? entry-scs entry-smss entry-phase entry-binding)" "(let-values(((struct:_0 make-_0 ?_0 -ref_0 -set!_0)" @@ -7965,7 +8492,7 @@ static const char *startup_source = "(resolve-cache-get)" "(lambda(sym_0 phase_0 scs_0 smss_0)" "(begin" -"(let-values(((c_0)(weak-box-value(unbox*(unsafe-place-local-ref cell.1$6)))))" +"(let-values(((c_0)(weak-box-value(unbox*(unsafe-place-local-ref cell.1$5)))))" "(if c_0" "(let-values(((v_0)(hash-ref c_0 sym_0 #f)))" "(if v_0" @@ -7978,16 +8505,16 @@ static const char *startup_source = "(resolve-cache-set!)" "(lambda(sym_0 phase_0 scs_0 smss_0 b_0)" "(begin" -"(let-values(((wb_0)(unbox*(unsafe-place-local-ref cell.1$6))))" +"(let-values(((wb_0)(unbox*(unsafe-place-local-ref cell.1$5))))" "(let-values(((c_0)(weak-box-value wb_0)))" "(if(not c_0)" "(let-values()" "(begin" -"(box-cas!(unsafe-place-local-ref cell.1$6) wb_0(make-weak-box(make-hasheq)))" +"(box-cas!(unsafe-place-local-ref cell.1$5) wb_0(make-weak-box(make-hasheq)))" "(resolve-cache-set! sym_0 phase_0 scs_0 smss_0 b_0)))" "(let-values()(hash-set! c_0 sym_0(entry1.1 scs_0 smss_0 phase_0 b_0)))))))))" "(define-values(SHIFTED-CACHE-SIZE) 16)" -"(define-values(cell.2$4)(unsafe-make-place-local(box #f)))" +"(define-values(cell.2$3)(unsafe-make-place-local(box #f)))" "(define-values(cell.3$1)(unsafe-make-place-local 0))" "(define-values" "(struct:shifted-entry shifted-entry2.1 shifted-entry? shifted-entry-s shifted-entry-phase shifted-entry-binding)" @@ -8017,13 +8544,13 @@ static const char *startup_source = "(shifted-cache-vector)" "(lambda()" "(begin" -"(let-values(((wb_0)(unbox*(unsafe-place-local-ref cell.2$4))))" +"(let-values(((wb_0)(unbox*(unsafe-place-local-ref cell.2$3))))" "(let-values(((c1_0)(if wb_0(weak-box-value wb_0) #f)))" "(if c1_0" "((lambda(vec_0) vec_0) c1_0)" "(let-values()" "(let-values(((vec_0)(make-vector SHIFTED-CACHE-SIZE #f)))" -"(begin(set-box*!(unsafe-place-local-ref cell.2$4)(make-weak-box vec_0)) vec_0)))))))))" +"(begin(set-box*!(unsafe-place-local-ref cell.2$3)(make-weak-box vec_0)) vec_0)))))))))" "(define-values" "(resolve+shift-cache-get)" "(lambda(s_0 phase_0)" @@ -8581,20 +9108,20 @@ static const char *startup_source = " #f" " 'shifted-to-label-phase)))))" "(values struct:_0 make-_0 ?_0(make-struct-field-accessor -ref_0 0 'from))))" -"(define-values(cell.1$5)(unsafe-make-place-local 0))" +"(define-values(cell.1$4)(unsafe-make-place-local 0))" "(define-values" "(new-scope-id!)" "(lambda()" "(begin" "(begin" -"(unsafe-place-local-set! cell.1$5(add1(unsafe-place-local-ref cell.1$5)))" -"(unsafe-place-local-ref cell.1$5)))))" +"(unsafe-place-local-set! cell.1$4(add1(unsafe-place-local-ref cell.1$4)))" +"(unsafe-place-local-ref cell.1$4)))))" "(define-values(new-deserialize-scope-id!)(lambda()(begin(-(new-scope-id!)))))" "(define-values(deserialized-scope-id?)(lambda(scope-id_0)(begin(negative? scope-id_0))))" "(define-values(top-level-common-scope)(scope1.1 0 'module empty-binding-table))" "(define-values(new-scope)(lambda(kind_0)(begin(scope1.1(new-scope-id!) kind_0 empty-binding-table))))" -"(define-values(cell.2$3)(unsafe-make-place-local(make-weak-hasheq)))" -"(define-values(scope-place-init!)(lambda()(begin(unsafe-place-local-set! cell.2$3(make-weak-hasheq)))))" +"(define-values(cell.2$2)(unsafe-make-place-local(make-weak-hasheq)))" +"(define-values(scope-place-init!)(lambda()(begin(unsafe-place-local-set! cell.2$2(make-weak-hasheq)))))" "(define-values" "(make-interned-scope)" "(lambda(sym_0)" @@ -8608,11 +9135,11 @@ static const char *startup_source = "(interned-scope2.1(-(new-scope-id!)) 'interned empty-binding-table sym_0))))))" "(call-as-atomic" "(lambda()" -"(let-values(((or-part_0)(ephemeron-value(hash-ref!(unsafe-place-local-ref cell.2$3) sym_0 make_0))))" +"(let-values(((or-part_0)(ephemeron-value(hash-ref!(unsafe-place-local-ref cell.2$2) sym_0 make_0))))" "(if or-part_0" " or-part_0" "(let-values(((new_0)(make_0)))" -"(begin(hash-set!(unsafe-place-local-ref cell.2$3) sym_0 new_0)(ephemeron-value new_0)))))))))))" +"(begin(hash-set!(unsafe-place-local-ref cell.2$2) sym_0 new_0)(ephemeron-value new_0)))))))))))" "(define-values" "(new-multi-scope)" "(let-values(((new-multi-scope8_0)" @@ -12985,524 +13512,6 @@ static const char *startup_source = "(define-values(current-previously-unbound)(lambda()(begin #f)))" "(define-values(set-current-previously-unbound!)(lambda(proc_0)(begin(set! current-previously-unbound proc_0))))" "(define-values" -"(log-performance?)" -" (if (environment-variables-ref (current-environment-variables) #\"PLT_EXPANDER_TIMES\") #t #f))" -"(define-values(cell.1$4)(unsafe-make-place-local #f))" -"(define-values(cell.2$2)(unsafe-make-place-local(make-hasheq)))" -"(define-values(performance-place-init!)(lambda()(begin(unsafe-place-local-set! cell.2$2(make-hasheq)))))" -"(define-values" -"(struct:region" -" region1.1" -" region?" -" region-path" -" region-start" -" region-start-memory" -" region-as-nested" -" region-as-nested-memory" -" set-region-start!" -" set-region-start-memory!" -" set-region-as-nested!" -" set-region-as-nested-memory!)" -"(let-values(((struct:_0 make-_0 ?_0 -ref_0 -set!_0)" -"(let-values()" -"(let-values()(make-struct-type 'region #f 5 0 #f null(current-inspector) #f '(0) #f 'region)))))" -"(values" -" struct:_0" -" make-_0" -" ?_0" -"(make-struct-field-accessor -ref_0 0 'path)" -"(make-struct-field-accessor -ref_0 1 'start)" -"(make-struct-field-accessor -ref_0 2 'start-memory)" -"(make-struct-field-accessor -ref_0 3 'as-nested)" -"(make-struct-field-accessor -ref_0 4 'as-nested-memory)" -"(make-struct-field-mutator -set!_0 1 'start)" -"(make-struct-field-mutator -set!_0 2 'start-memory)" -"(make-struct-field-mutator -set!_0 3 'as-nested)" -"(make-struct-field-mutator -set!_0 4 'as-nested-memory))))" -"(define-values" -"(struct:stat stat2.1 stat? stat-msecs stat-memory stat-count set-stat-msecs! set-stat-memory! set-stat-count!)" -"(let-values(((struct:_0 make-_0 ?_0 -ref_0 -set!_0)" -"(let-values()" -"(let-values()(make-struct-type 'stat #f 3 0 #f null(current-inspector) #f '() #f 'stat)))))" -"(values" -" struct:_0" -" make-_0" -" ?_0" -"(make-struct-field-accessor -ref_0 0 'msecs)" -"(make-struct-field-accessor -ref_0 1 'memory)" -"(make-struct-field-accessor -ref_0 2 'count)" -"(make-struct-field-mutator -set!_0 0 'msecs)" -"(make-struct-field-mutator -set!_0 1 'memory)" -"(make-struct-field-mutator -set!_0 2 'count))))" -"(define-values(stat-key)(gensym))" -"(define-values" -"(start-performance-region)" -"(lambda path_0" -"(begin" -"(unsafe-place-local-set!" -" cell.1$4" -"(cons" -"(region1.1" -"(if(unsafe-place-local-ref cell.1$4)" -"((letrec-values(((loop_0)" -"(lambda(path_1 enclosing-path_0)" -"(begin" -" 'loop" -"(if(null? path_1)" -" null" -"(cons" -"(if(if(eq? '_(car path_1))(pair? enclosing-path_0) #f)" -"(car enclosing-path_0)" -"(car path_1))" -"(loop_0" -"(cdr path_1)" -"(if(pair? enclosing-path_0)(cdr enclosing-path_0) null))))))))" -" loop_0)" -" path_0" -"(region-path(car(unsafe-place-local-ref cell.1$4))))" -" path_0)" -"(current-inexact-milliseconds)" -"(current-memory-use 'cumulative)" -" 0.0" -" 0)" -"(unsafe-place-local-ref cell.1$4))))))" -"(define-values" -"(end-performance-region)" -"(lambda()" -"(begin" -"(let-values(((now_0)(current-inexact-milliseconds)))" -"(let-values(((now-memory_0)(current-memory-use 'cumulative)))" -"(let-values(((r_0)(car(unsafe-place-local-ref cell.1$4))))" -"(let-values((()" -"(begin(unsafe-place-local-set! cell.1$4(cdr(unsafe-place-local-ref cell.1$4)))(values))))" -"(let-values(((full-delta_0)(- now_0(region-start r_0))))" -"(let-values(((delta_0)(- full-delta_0(region-as-nested r_0))))" -"(let-values(((full-delta-memory_0)(- now-memory_0(region-start-memory r_0))))" -"(let-values(((delta-memory_0)(- full-delta-memory_0(region-as-nested-memory r_0))))" -"(begin" -"((letrec-values(((loop_0)" -"(lambda(accums_0 path_0)" -"(begin" -" 'loop" -"(let-values(((key_0)(car path_0)))" -"(let-values(((accum_0)" -"(let-values(((or-part_0)(hash-ref accums_0 key_0 #f)))" -"(if or-part_0" -" or-part_0" -"(let-values(((accum_0)(make-hasheq)))" -"(begin" -"(hash-set! accums_0 key_0 accum_0)" -" accum_0))))))" -"(let-values(((s_0)" -"(let-values(((or-part_0)" -"(hash-ref accum_0 stat-key #f)))" -"(if or-part_0" -" or-part_0" -"(let-values(((s_0)(stat2.1 0.0 0 0)))" -"(begin(hash-set! accum_0 stat-key s_0) s_0))))))" -"(begin" -"(set-stat-msecs! s_0(+ delta_0(stat-msecs s_0)))" -"(set-stat-memory! s_0(+ delta-memory_0(stat-memory s_0)))" -"(if(null?(cdr path_0))" -"(let-values()(set-stat-count! s_0(add1(stat-count s_0))))" -"(void))" -"(if(null?(cdr path_0))" -"(void)" -"(let-values()(loop_0 accum_0(cdr path_0))))))))))))" -" loop_0)" -"(unsafe-place-local-ref cell.2$2)" -"(region-path r_0))" -"(if(unsafe-place-local-ref cell.1$4)" -"(let-values()" -"(begin" -"(set-region-as-nested!" -"(car(unsafe-place-local-ref cell.1$4))" -"(+(region-as-nested(car(unsafe-place-local-ref cell.1$4))) full-delta_0))" -"(set-region-as-nested-memory!" -"(car(unsafe-place-local-ref cell.1$4))" -"(+" -"(region-as-nested-memory(car(unsafe-place-local-ref cell.1$4)))" -" full-delta-memory_0))))" -"(void))))))))))))))" -"(call-with-values" -"(lambda()" -"(if log-performance?" -"(let-values()" -"(void" -"(plumber-add-flush!" -"(current-plumber)" -"(lambda(h_0)" -"(let-values(((whole-len_0)" -"(lambda(s_0)" -"(begin" -" 'whole-len" -"(caar" -" (let-values (((or-part_0) (regexp-match-positions '#rx\"[.]\" s_0)))" -"(if or-part_0 or-part_0 '(0))))))))" -"(let-values(((kb_0)" -"(lambda(b_0)" -"(begin" -" 'kb" -"(let-values(((s_0)(number->string(quotient b_0 1024))))" -"(list->string" -"(let-values(((lst_0)(reverse$1(string->list s_0)))((start_0) 0))" -"(begin" -"(if(variable-reference-from-unsafe?(#%variable-reference))" -"(void)" -"(let-values()(check-list lst_0)))" -"(if(variable-reference-from-unsafe?(#%variable-reference))" -"(void)" -"(let-values()(check-naturals start_0)))" -"((letrec-values(((for-loop_0)" -"(lambda(l_0 lst_1 pos_0)" -"(begin" -" 'for-loop" -"(if(if(pair? lst_1) #t #f)" -"(let-values(((c_0)(unsafe-car lst_1))" -"((rest_0)(unsafe-cdr lst_1))" -"((i_0) pos_0))" -"(let-values(((l_1)" -"(let-values(((l_1) l_0))" -"(let-values(((l_2)" -"(let-values()" -"(if(if(positive? i_0)" -"(zero?" -"(modulo i_0 3))" -" #f)" -"(let-values()" -"(list*" -" c_0" -" '#\\," -" l_1))" -"(let-values()" -"(cons c_0 l_1))))))" -"(values l_2)))))" -"(if(not #f)" -"(for-loop_0 l_1 rest_0(+ pos_0 1))" -" l_1)))" -" l_0)))))" -" for-loop_0)" -" null" -" lst_0" -" start_0)))))))))" -"(let-values(((label-max-len_0 value-max-len_0 memory-max-len_0 count-max-len_0)" -"((letrec-values(((loop_0)" -"(lambda(accums_0" -" label-len_0" -" value-len_0" -" memory-len_0" -" count-len_0" -" indent_0)" -"(begin" -" 'loop" -"(let-values(((ht_0) accums_0))" -"(begin" -"(if(variable-reference-from-unsafe?(#%variable-reference))" -"(void)" -"(let-values()(check-in-hash ht_0)))" -"((letrec-values(((for-loop_0)" -"(lambda(label-len_1" -" value-len_1" -" memory-len_1" -" count-len_1" -" i_0)" -"(begin" -" 'for-loop" -"(if i_0" -"(let-values(((k_0 v_0)" -"(hash-iterate-key+value" -" ht_0" -" i_0)))" -"(let-values(((label-len_2" -" value-len_2" -" memory-len_2" -" count-len_2)" -"(let-values(((label-len_2)" -" label-len_1)" -"((value-len_2)" -" value-len_1)" -"((memory-len_2)" -" memory-len_1)" -"((count-len_2)" -" count-len_1))" -"(let-values(((label-len_3" -" value-len_3" -" memory-len_3" -" count-len_3)" -"(let-values()" -"(if(eq?" -" k_0" -" stat-key)" -"(let-values()" -"(values" -" label-len_2" -"(max" -" value-len_2" -"(whole-len_0" -"(format" -" \"~a\"" -"(stat-msecs" -" v_0))))" -"(max" -" memory-len_2" -"(string-length" -"(format" -" \"~a\"" -"(kb_0" -"(stat-memory" -" v_0)))))" -"(max" -" count-len_2" -"(string-length" -"(format" -" \"~a\"" -"(stat-count" -" v_0))))))" -"(let-values()" -"(loop_0" -" v_0" -"(max" -" label-len_2" -"(+" -" indent_0" -"(string-length" -"(format" -" \"~a\"" -" k_0))))" -" value-len_2" -" memory-len_2" -" count-len_2" -"(+" -" 2" -" indent_0)))))))" -"(values" -" label-len_3" -" value-len_3" -" memory-len_3" -" count-len_3)))))" -"(if(not #f)" -"(for-loop_0" -" label-len_2" -" value-len_2" -" memory-len_2" -" count-len_2" -"(hash-iterate-next ht_0 i_0))" -"(values" -" label-len_2" -" value-len_2" -" memory-len_2" -" count-len_2))))" -"(values" -" label-len_1" -" value-len_1" -" memory-len_1" -" count-len_1))))))" -" for-loop_0)" -" label-len_0" -" value-len_0" -" memory-len_0" -" count-len_0" -"(hash-iterate-first ht_0))))))))" -" loop_0)" -"(unsafe-place-local-ref cell.2$2)" -" 6" -" 5" -" 4" -" 5" -" 2)))" -"(begin" -"(let-values(((l_0)(current-logger)))" -"(if(log-level? l_0 'error(logger-name l_0))" -"(let-values()" -"(log-message" -" l_0" -" 'error" -"(format" -" \"REGION ~aMSECS ~aMEMK ~aCOUNT\"" -"(make-string(-(+ label-max-len_0 value-max-len_0) 11) '#\\space)" -"(make-string(- memory-max-len_0 4) '#\\space)" -"(make-string(- count-max-len_0 5) '#\\space))" -"(current-continuation-marks)))" -"(void)))" -"((letrec-values(((loop_0)" -"(lambda(name_0 accums_0 indent_0 newline?_0)" -"(begin" -" 'loop" -"(let-values((()" -"(begin" -"(if name_0" -"(let-values()" -"(let-values(((v_0)(hash-ref accums_0 stat-key)))" -"(let-values(((l_0)(current-logger)))" -"(if(log-level? l_0 'error(logger-name l_0))" -"(let-values()" -"(log-message" -" l_0" -" 'error" -"(format" -" \"~a~a ~a~a ~a~a ~a~a\"" -" indent_0" -" name_0" -"(make-string" -"(+" -"(-" -" label-max-len_0" -" (string-length (format \"~a\" name_0))" -"(string-length indent_0))" -"(-" -" value-max-len_0" -"(whole-len_0" -" (format \"~a\" (stat-msecs v_0)))))" -" '#\\space)" -"(regexp-replace" -" '#rx\"[.](..).*\"" -" (format \"~a00\" (stat-msecs v_0))" -" \".\\\\1\")" -"(make-string" -"(-" -" memory-max-len_0" -"(string-length" -" (format \"~a\" (kb_0 (stat-memory v_0)))))" -" '#\\space)" -"(kb_0(stat-memory v_0))" -"(make-string" -"(-" -" count-max-len_0" -"(string-length" -" (format \"~a\" (stat-count v_0))))" -" '#\\space)" -"(stat-count v_0))" -"(current-continuation-marks)))" -"(void)))))" -"(void))" -"(values))))" -"(let-values(((keys_0)" -"(let-values(((temp5_0)" -"(reverse$1" -"(let-values(((ht_0) accums_0))" -"(begin" -"(if(variable-reference-from-unsafe?" -"(#%variable-reference))" -"(void)" -"(let-values()" -"(check-in-hash-keys ht_0)))" -"((letrec-values(((for-loop_0)" -"(lambda(fold-var_0 i_0)" -"(begin" -" 'for-loop" -"(if i_0" -"(let-values(((k_0)" -"(hash-iterate-key" -" ht_0" -" i_0)))" -"(let-values(((fold-var_1)" -"(let-values(((fold-var_1)" -" fold-var_0))" -"(if(not" -"(eq?" -" k_0" -" stat-key))" -"(let-values(((fold-var_2)" -" fold-var_1))" -"(let-values(((fold-var_3)" -"(let-values()" -"(cons" -"(let-values()" -" k_0)" -" fold-var_2))))" -"(values" -" fold-var_3)))" -" fold-var_1))))" -"(if(not #f)" -"(for-loop_0" -" fold-var_1" -"(hash-iterate-next" -" ht_0" -" i_0))" -" fold-var_1)))" -" fold-var_0)))))" -" for-loop_0)" -" null" -"(hash-iterate-first ht_0))))))" -"((>6_0) >)" -"((temp7_0)" -"(lambda(key_0)" -"(stat-msecs" -"(hash-ref" -"(hash-ref accums_0 key_0)" -" stat-key)))))" -"(sort7.1 #f temp7_0 temp5_0 >6_0))))" -"(begin" -"(let-values(((lst_0) keys_0)((start_0) 0))" -"(begin" -"(if(variable-reference-from-unsafe?(#%variable-reference))" -"(void)" -"(let-values()(check-list lst_0)))" -"(if(variable-reference-from-unsafe?(#%variable-reference))" -"(void)" -"(let-values()(check-naturals start_0)))" -"((letrec-values(((for-loop_0)" -"(lambda(lst_1 pos_0)" -"(begin" -" 'for-loop" -"(if(if(pair? lst_1) #t #f)" -"(let-values(((k_0)(unsafe-car lst_1))" -"((rest_0)(unsafe-cdr lst_1))" -"((i_0) pos_0))" -"(let-values((()" -"(let-values()" -"(let-values((()" -"(let-values()" -"(begin" -"(let-values()" -"(begin" -"(if(if newline?_0" -"(positive?" -" i_0)" -" #f)" -"(let-values()" -"(let-values(((l_0)" -"(current-logger)))" -"(if(log-level?" -" l_0" -" 'error" -"(logger-name" -" l_0))" -"(let-values()" -"(log-message" -" l_0" -" 'error" -" \"\"" -"(current-continuation-marks)))" -"(void))))" -"(void))" -"(loop_0" -" k_0" -"(hash-ref" -" accums_0" -" k_0)" -"(string-append" -" indent_0" -" \" \")" -" #f)))" -"(values)))))" -"(values)))))" -"(if(not #f)" -"(for-loop_0 rest_0(+ pos_0 1))" -"(values))))" -"(values))))))" -" for-loop_0)" -" lst_0" -" start_0)))" -"(void))))))))" -" loop_0)" -" #f" -"(unsafe-place-local-ref cell.2$2)" -" \"\"" -" #t)))))))))" -"(void)))" -" print-values)" -"(define-values" "(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()" @@ -14195,14 +14204,7 @@ static const char *startup_source = "(void)" " (let-values () (error \"not a module path index:\" mpi_0)))" "(values))))" -"(let-values(((name_0)" -"(begin" -"(if log-performance?" -"(let-values()(start-performance-region 'eval 'resolve))" -"(void))" -"(begin0" -"(let-values()(1/module-path-index-resolve mpi_0 #t))" -"(if log-performance?(let-values()(end-performance-region))(void))))))" +"(let-values(((name_0)(1/module-path-index-resolve mpi_0 #t)))" "(let-values(((m_0)(namespace->module ns_0 name_0)))" "(let-values((()" "(begin"