separation of root env (=> root + hidden)

This commit is contained in:
ESL 2024-07-16 21:54:25 -04:00
parent 373e9dec38
commit b89b56655b
2 changed files with 122 additions and 81 deletions

View file

@ -1853,6 +1853,21 @@
; public registry for all non-hidden skint names
(define *root-name-registry* (make-name-registry 300))
; nonpublic registry for all hidden skint names (used by built-in macros)
(define *hidden-name-registry* (make-name-registry 1))
(define (builtin-sr-environment id at)
(cond [(new-id? id) (new-id-lookup id at)]
[(eq? at 'peek) ; for free-id=?
(or (name-lookup *hidden-name-registry* id #f)
(name-lookup *root-name-registry* id #f)
*root-name-registry*)]
[else
(name-lookup *hidden-name-registry* id
(lambda (n) ; create new bindings in rnr:
(name-lookup *root-name-registry* id
(lambda (n) (list 'ref n)))))]))
; register integrable procedures
(let loop ([i 0])
(let ([li (lookup-integrable i)]) ;=> #f, #<void>, or integrable (li == i)
@ -1871,21 +1886,13 @@
(name-lookup *root-name-registry* k (lambda (n) v))
(loop l)]
[(and (pair? v) (eq? (car v) 'syntax-rules))
(body
; this is the mac-env for built-in syntax-rules macros!
(define (sr-env id at)
(cond [(new-id? id) (new-id-lookup id at)]
[(eq? at 'peek) ; for free-id=?
(or (name-lookup *root-name-registry* id #f)
*root-name-registry*)]
[else (name-lookup *root-name-registry* id
(lambda (n) (list 'ref n)))]))
(define sr-v
(if (id? (cadr v))
(syntax-rules* sr-env (cadr v) (caddr v) (cdddr v))
(syntax-rules* sr-env #f (cadr v) (cddr v))))
(name-lookup *root-name-registry* k (lambda (name) sr-v))
(loop l))]))))
(let ([sr-env builtin-sr-environment])
(define sr-v
(if (id? (cadr v))
(syntax-rules* sr-env (cadr v) (caddr v) (cdddr v))
(syntax-rules* sr-env #f (cadr v) (cddr v))))
(name-lookup *root-name-registry* k (lambda (name) sr-v))
(loop l))]))))
; register handcoded transformers
(name-lookup *root-name-registry* 'include (lambda (n) (make-include-transformer #f)))
@ -1980,13 +1987,15 @@
(interaction-environment p v) (null-environment v) (read r v) (scheme-report-environment v)
(write w v) (current-jiffy t) (current-second t) (jiffies-per-second t) (write-shared w)
(write-simple w)
; these are special forms in skint!
(define-library) (import) (export) (program)
; selected extracts from r7rs-large and srfis
(box? x 111) (box x 111) (unbox x 111) (set-box! x 111) (format 28 48)
(fprintf) (format-pretty-print) (format-fixed-print) (format-fresh-line) (format-help-string)
; skint extras go into (skint) only
(set&) (lambda*) (body) (letcc) (withcc) (syntax-lambda) (syntax-length)
(record?) (make-record) (record-length) (record-ref) (record-set!)
(fixnum?) (fxpositive?) (fxnegative?) (fxeven?) (fxodd?) (fx+) (fx*) (fx-) (fx/)
(fixnum?) (fxpositive?) (fxnegative?) (fxeven?) (fxodd?) (fxzero?) (fx+) (fx*) (fx-) (fx/)
(fxquotient) (fxremainder) (fxmodquo) (fxmodulo) (fxeucquo) (fxeucrem) (fxneg)
(fxabs) (fx<?) (fx<=?) (fx>?) (fx>=?) (fx=?) (fx!=?) (fxmin) (fxmax) (fxneg) (fxabs) (fxgcd)
(fxexpt) (fxsqrt) (fxnot) (fxand) (fxior) (fxxor) (fxsll) (fxsrl) (fixnum->flonum) (fixnum->string)
@ -1994,17 +2003,30 @@
(flinfinite?) (flfinite?) (fleven?) (flodd?) (fl+) (fl*) (fl-) (fl/) (flneg) (flabs) (flgcd)
(flexpt) (flsqrt) (flfloor) (flceiling) (fltruncate) (flround) (flexp) (fllog) (flsin) (flcos)
(fltan) (flasin) (flacos) (flatan) (fl<?) (fl<=?) (fl>?) (fl>=?) (fl=?) (fl!=?) (flmin)
(flmax) (flonum->fixnum) (flonum->string) (string->flonum)
(list-cat) (list-head) (meme) (asse) (reverse!) (circular?)
(char-cmp) (char-ci-cmp) (string-cat) (string-position) (string-cmp) (string-ci-cmp)
(vector-cat) (bytevector->list) (list->bytevector) (subbytevector)
(flmax) (flremainder) (flmodulo) (flquotient) (flmodquo) (flonum->fixnum) (flonum->string)
(string->flonum) (list-cat) (last-pair) (list-head) (meme) (asse) (reverse!) (circular?) (cons*)
(list*) (char-cmp) (char-ci-cmp) (string-cat) (string-position) (string-cmp) (string-ci-cmp)
(vector-cat) (bytevector=?) (bytevector->list) (list->bytevector) (subbytevector)
(standard-input-port) (standard-output-port) (standard-error-port) (tty-port?)
(rename-file)
(port-fold-case?) (set-port-fold-case!) (rename-file) (void) (void?) (global-store)
; temporarily here for debugging purposes
(xform) (compile-and-run-core-expr) (compile-to-thunk-code) (deserialize-code)
(closure) (repl-environment)
;(xform) (compile-and-run-core-expr) (compile-to-thunk-code) (deserialize-code)
;(closure) (repl-environment)
))
; clean up root environment by moving all symbolic bindings not in (skint) library
; to hidden name registry (so built-in macros can still work properly)
(let* ([rr *root-name-registry*] [l (name-lookup rr '(skint) #f)]
[eal (library-exports (location-val l))]
[n-1 (- (vector-length rr) 1)]) ; sans listnames
(do ([i 0 (+ i 1)]) [(= i n-1)]
(let loop ([prev #f] [lst (vector-ref rr i)])
(cond [(null? lst)]
[(assq (caar lst) eal) (loop lst (cdr lst))]
[else (if prev (set-cdr! prev (cdr lst)) (vector-set! rr i (cdr lst)))
(name-install! *hidden-name-registry* (caar lst) (cdar lst))
(loop prev (cdr lst))]))))
; private registry for names introduced in repl
(define *user-name-registry* (make-name-registry 200))

135
t.c
View file

@ -1069,6 +1069,17 @@ char *t_code[] = {
"C", 0,
"${'(i300),@(y18:make-name-registry)[01}@!(y20:*root-name-registry*)",
"C", 0,
"${'1,@(y18:make-name-registry)[01}@!(y22:*hidden-name-registry*)",
"P", "builtin-sr-environment",
"%2.0K0?{.1,.1,@(y13:new-id-lookup)[22}'(y4:peek),.2q?{${f,.3,@(y22:*hi"
"dden-name-registry*),@(y11:name-lookup)[03},.0?{.0]3}${f,.4,@(y20:*roo"
"t-name-registry*),@(y11:name-lookup)[03},.0?{.0]4}@(y20:*root-name-reg"
"istry*)]4}.0,&1{%1&0{%1.0,'(y3:ref),l2]1},:0,@(y20:*root-name-registry"
"*),@(y11:name-lookup)[13},.1,@(y22:*hidden-name-registry*),@(y11:name-"
"lookup)[23",
"C", 0,
"${'0,,#0.0,&1{%1.0U5,.0?{.1U0?{.1U7,.0Y0?{${.4,&1{%1:0]1},.3,@(y20:*ro"
"ot-name-registry*),@(y11:name-lookup)[03}}_1}'1,.2+,:0^[21}]2}.!0.0^_1"
@ -1077,13 +1088,11 @@ char *t_code[] = {
"C", 0,
"${U1,,#0.0,&1{%1.0u~?{.0a,.1d,.1a,.2d,.0Y0,.0?{.0}{.1U0}_1?{${.2,&1{%1"
":0]1},.4,@(y20:*root-name-registry*),@(y11:name-lookup)[03}.2,:0^[51}."
"0p?{'(y12:syntax-rules),.1aq}{f}?{,,#0#1&0{%2.0K0?{.1,.1,@(y13:new-id-"
"lookup)[22}'(y4:peek),.2q?{${f,.3,@(y20:*root-name-registry*),@(y11:na"
"me-lookup)[03},.0?{.0]3}@(y20:*root-name-registry*)]3}&0{%1.0,'(y3:ref"
"),l2]1},.1,@(y20:*root-name-registry*),@(y11:name-lookup)[23}.!0${.4da"
",@(y3:id?)[01}?{${.4ddd,.5dda,.6da,.5^,@(y13:syntax-rules*)[04}}{${.4d"
"d,.5da,f,.5^,@(y13:syntax-rules*)[04}}.!1${.3,&1{%1:0^]1},.6,@(y20:*ro"
"ot-name-registry*),@(y11:name-lookup)[03}.4,:0^[71}f]5}]1}.!0.0^_1[01}",
"0p?{'(y12:syntax-rules),.1aq}{f}?{@(y22:builtin-sr-environment),,#0${."
"4da,@(y3:id?)[01}?{${.4ddd,.5dda,.6da,.6,@(y13:syntax-rules*)[04}}{${."
"4dd,.5da,f,.6,@(y13:syntax-rules*)[04}}.!0${.2,&1{%1:0^]1},.6,@(y20:*r"
"oot-name-registry*),@(y11:name-lookup)[03}.4,:0^[71}f]5}]1}.!0.0^_1[01"
"}",
"C", 0,
"${&0{%1f,@(y24:make-include-transformer)[11},'(y7:include),@(y20:*root"
@ -1098,7 +1107,7 @@ char *t_code[] = {
"0:*root-name-registry*),@(y11:name-lookup)[03}",
"C", 0,
"${'(l470:l3:y1:*;y1:v;y1:b;;l3:y1:+;y1:v;y1:b;;l3:y1:-;y1:v;y1:b;;l4:y"
"${'(l482:l3:y1:*;y1:v;y1:b;;l3:y1:+;y1:v;y1:b;;l3:y1:-;y1:v;y1:b;;l4:y"
"3:...;y1:v;y1:u;y1:b;;l3:y1:/;y1:v;y1:b;;l3:y1:<;y1:v;y1:b;;l3:y2:<=;y"
"1:v;y1:b;;l3:y1:=;y1:v;y1:b;;l4:y2:=>;y1:v;y1:u;y1:b;;l3:y1:>;y1:v;y1:"
"b;;l3:y2:>=;y1:v;y1:b;;l2:y1:_;y1:b;;l3:y3:abs;y1:v;y1:b;;l4:y3:and;y1"
@ -1227,56 +1236,66 @@ char *t_code[] = {
"6:null-environment;y1:v;;l3:y4:read;y1:r;y1:v;;l2:y25:scheme-report-en"
"vironment;y1:v;;l3:y5:write;y1:w;y1:v;;l2:y13:current-jiffy;y1:t;;l2:y"
"14:current-second;y1:t;;l2:y18:jiffies-per-second;y1:t;;l2:y12:write-s"
"hared;y1:w;;l2:y12:write-simple;y1:w;;l3:y4:box?;y1:x;i111;;l3:y3:box;"
"y1:x;i111;;l3:y5:unbox;y1:x;i111;;l3:y8:set-box!;y1:x;i111;;l3:y6:form"
"at;i28;i48;;l1:y7:fprintf;;l1:y19:format-pretty-print;;l1:y18:format-f"
"ixed-print;;l1:y17:format-fresh-line;;l1:y18:format-help-string;;l1:y4"
":set&;;l1:y7:lambda*;;l1:y4:body;;l1:y5:letcc;;l1:y6:withcc;;l1:y13:sy"
"ntax-lambda;;l1:y13:syntax-length;;l1:y7:record?;;l1:y11:make-record;;"
"l1:y13:record-length;;l1:y10:record-ref;;l1:y11:record-set!;;l1:y7:fix"
"num?;;l1:y11:fxpositive?;;l1:y11:fxnegative?;;l1:y7:fxeven?;;l1:y6:fxo"
"dd?;;l1:y3:fx+;;l1:y3:fx*;;l1:y3:fx-;;l1:y3:fx/;;l1:y10:fxquotient;;l1"
":y11:fxremainder;;l1:y8:fxmodquo;;l1:y8:fxmodulo;;l1:y8:fxeucquo;;l1:y"
"8:fxeucrem;;l1:y5:fxneg;;l1:y5:fxabs;;l1:y4:fx<?;;l1:y5:fx<=?;;l1:y4:f"
"x>?;;l1:y5:fx>=?;;l1:y4:fx=?;;l1:y5:fx!=?;;l1:y5:fxmin;;l1:y5:fxmax;;l"
"1:y5:fxneg;;l1:y5:fxabs;;l1:y5:fxgcd;;l1:y6:fxexpt;;l1:y6:fxsqrt;;l1:y"
"5:fxnot;;l1:y5:fxand;;l1:y5:fxior;;l1:y5:fxxor;;l1:y5:fxsll;;l1:y5:fxs"
"rl;;l1:y14:fixnum->flonum;;l1:y14:fixnum->string;;l1:y14:string->fixnu"
"m;;l1:y7:flonum?;;l1:y7:flzero?;;l1:y11:flpositive?;;l1:y11:flnegative"
"?;;l1:y10:flinteger?;;l1:y6:flnan?;;l1:y11:flinfinite?;;l1:y9:flfinite"
"?;;l1:y7:fleven?;;l1:y6:flodd?;;l1:y3:fl+;;l1:y3:fl*;;l1:y3:fl-;;l1:y3"
":fl/;;l1:y5:flneg;;l1:y5:flabs;;l1:y5:flgcd;;l1:y6:flexpt;;l1:y6:flsqr"
"t;;l1:y7:flfloor;;l1:y9:flceiling;;l1:y10:fltruncate;;l1:y7:flround;;l"
"1:y5:flexp;;l1:y5:fllog;;l1:y5:flsin;;l1:y5:flcos;;l1:y5:fltan;;l1:y6:"
"flasin;;l1:y6:flacos;;l1:y6:flatan;;l1:y4:fl<?;;l1:y5:fl<=?;;l1:y4:fl>"
"?;;l1:y5:fl>=?;;l1:y4:fl=?;;l1:y5:fl!=?;;l1:y5:flmin;;l1:y5:flmax;;l1:"
"y14:flonum->fixnum;;l1:y14:flonum->string;;l1:y14:string->flonum;;l1:y"
"8:list-cat;;l1:y9:list-head;;l1:y4:meme;;l1:y4:asse;;l1:y8:reverse!;;l"
"1:y9:circular?;;l1:y8:char-cmp;;l1:y11:char-ci-cmp;;l1:y10:string-cat;"
";l1:y15:string-position;;l1:y10:string-cmp;;l1:y13:string-ci-cmp;;l1:y"
"10:vector-cat;;l1:y16:bytevector->list;;l1:y16:list->bytevector;;l1:y1"
"3:subbytevector;;l1:y19:standard-input-port;;l1:y20:standard-output-po"
"rt;;l1:y19:standard-error-port;;l1:y9:tty-port?;;l1:y11:rename-file;;l"
"1:y5:xform;;l1:y25:compile-and-run-core-expr;;l1:y21:compile-to-thunk-"
"code;;l1:y16:deserialize-code;;l1:y7:closure;;l1:y16:repl-environment;"
";),&0{%1,,,,#0#1#2#3&0{%1.0,'(y1:w),.1v?{'(l2:y6:scheme;y5:write;)]2}'"
"(y1:t),.1v?{'(l2:y6:scheme;y4:time;)]2}'(y1:p),.1v?{'(l2:y6:scheme;y4:"
"repl;)]2}'(y1:r),.1v?{'(l2:y6:scheme;y4:read;)]2}'(y1:v),.1v?{'(l2:y6:"
"scheme;y4:r5rs;)]2}'(y1:u),.1v?{'(l2:y6:scheme;y9:r5rs-null;)]2}'(y1:d"
"),.1v?{'(l2:y6:scheme;y4:load;)]2}'(y1:z),.1v?{'(l2:y6:scheme;y4:lazy;"
")]2}'(y1:s),.1v?{'(l2:y6:scheme;y15:process-context;)]2}'(y1:i),.1v?{'"
"(l2:y6:scheme;y7:inexact;)]2}'(y1:f),.1v?{'(l2:y6:scheme;y4:file;)]2}'"
"(y1:e),.1v?{'(l2:y6:scheme;y4:eval;)]2}'(y1:o),.1v?{'(l2:y6:scheme;y7:"
"complex;)]2}'(y1:h),.1v?{'(l2:y6:scheme;y4:char;)]2}'(y1:l),.1v?{'(l2:"
"y6:scheme;y11:case-lambda;)]2}'(y1:a),.1v?{'(l2:y6:scheme;y3:cxr;)]2}'"
"(y1:b),.1v?{'(l2:y6:scheme;y4:base;)]2}'(y1:x),.1v?{'(l2:y6:scheme;y3:"
"box;)]2}.1I0?{.1,'(y4:srfi),l2]2}.1,l1]2}.!0&0{%1${&0{%1n,'(l1:y5:begi"
"n;),V12]1},.3,@(y20:*root-name-registry*),@(y11:name-lookup)[03}z]1}.!"
"1&0{%3'1,.1V4,.0,.3A3,.0?{.4,.1sd]5}.1,.5,.5cc,'1,.4V5]5}.!2&0{%1&0{%1"
".0,'(y5:const),l2]1},.1,@(y20:*root-name-registry*),@(y11:name-lookup)"
"[13}.!3.4d,.5a,,#0.0,.6,.5,.7,.(i10),&5{%2.1u?{${.2,:0^[01},.1,${'(l1:"
"y5:skint;),:1^[01},:3^[23}${${.4,:0^[01},.3,${${.9a,:2^[01},:1^[01},:3"
"^[03}.1d,.1,:4^[22}.!0.0^_1[52},@(y10:%25for-each1)[02}",
"hared;y1:w;;l2:y12:write-simple;y1:w;;l1:y14:define-library;;l1:y6:imp"
"ort;;l1:y6:export;;l1:y7:program;;l3:y4:box?;y1:x;i111;;l3:y3:box;y1:x"
";i111;;l3:y5:unbox;y1:x;i111;;l3:y8:set-box!;y1:x;i111;;l3:y6:format;i"
"28;i48;;l1:y7:fprintf;;l1:y19:format-pretty-print;;l1:y18:format-fixed"
"-print;;l1:y17:format-fresh-line;;l1:y18:format-help-string;;l1:y4:set"
"&;;l1:y7:lambda*;;l1:y4:body;;l1:y5:letcc;;l1:y6:withcc;;l1:y13:syntax"
"-lambda;;l1:y13:syntax-length;;l1:y7:record?;;l1:y11:make-record;;l1:y"
"13:record-length;;l1:y10:record-ref;;l1:y11:record-set!;;l1:y7:fixnum?"
";;l1:y11:fxpositive?;;l1:y11:fxnegative?;;l1:y7:fxeven?;;l1:y6:fxodd?;"
";l1:y7:fxzero?;;l1:y3:fx+;;l1:y3:fx*;;l1:y3:fx-;;l1:y3:fx/;;l1:y10:fxq"
"uotient;;l1:y11:fxremainder;;l1:y8:fxmodquo;;l1:y8:fxmodulo;;l1:y8:fxe"
"ucquo;;l1:y8:fxeucrem;;l1:y5:fxneg;;l1:y5:fxabs;;l1:y4:fx<?;;l1:y5:fx<"
"=?;;l1:y4:fx>?;;l1:y5:fx>=?;;l1:y4:fx=?;;l1:y5:fx!=?;;l1:y5:fxmin;;l1:"
"y5:fxmax;;l1:y5:fxneg;;l1:y5:fxabs;;l1:y5:fxgcd;;l1:y6:fxexpt;;l1:y6:f"
"xsqrt;;l1:y5:fxnot;;l1:y5:fxand;;l1:y5:fxior;;l1:y5:fxxor;;l1:y5:fxsll"
";;l1:y5:fxsrl;;l1:y14:fixnum->flonum;;l1:y14:fixnum->string;;l1:y14:st"
"ring->fixnum;;l1:y7:flonum?;;l1:y7:flzero?;;l1:y11:flpositive?;;l1:y11"
":flnegative?;;l1:y10:flinteger?;;l1:y6:flnan?;;l1:y11:flinfinite?;;l1:"
"y9:flfinite?;;l1:y7:fleven?;;l1:y6:flodd?;;l1:y3:fl+;;l1:y3:fl*;;l1:y3"
":fl-;;l1:y3:fl/;;l1:y5:flneg;;l1:y5:flabs;;l1:y5:flgcd;;l1:y6:flexpt;;"
"l1:y6:flsqrt;;l1:y7:flfloor;;l1:y9:flceiling;;l1:y10:fltruncate;;l1:y7"
":flround;;l1:y5:flexp;;l1:y5:fllog;;l1:y5:flsin;;l1:y5:flcos;;l1:y5:fl"
"tan;;l1:y6:flasin;;l1:y6:flacos;;l1:y6:flatan;;l1:y4:fl<?;;l1:y5:fl<=?"
";;l1:y4:fl>?;;l1:y5:fl>=?;;l1:y4:fl=?;;l1:y5:fl!=?;;l1:y5:flmin;;l1:y5"
":flmax;;l1:y11:flremainder;;l1:y8:flmodulo;;l1:y10:flquotient;;l1:y8:f"
"lmodquo;;l1:y14:flonum->fixnum;;l1:y14:flonum->string;;l1:y14:string->"
"flonum;;l1:y8:list-cat;;l1:y9:last-pair;;l1:y9:list-head;;l1:y4:meme;;"
"l1:y4:asse;;l1:y8:reverse!;;l1:y9:circular?;;l1:y5:cons*;;l1:y5:list*;"
";l1:y8:char-cmp;;l1:y11:char-ci-cmp;;l1:y10:string-cat;;l1:y15:string-"
"position;;l1:y10:string-cmp;;l1:y13:string-ci-cmp;;l1:y10:vector-cat;;"
"l1:y12:bytevector=?;;l1:y16:bytevector->list;;l1:y16:list->bytevector;"
";l1:y13:subbytevector;;l1:y19:standard-input-port;;l1:y20:standard-out"
"put-port;;l1:y19:standard-error-port;;l1:y9:tty-port?;;l1:y15:port-fol"
"d-case?;;l1:y19:set-port-fold-case!;;l1:y11:rename-file;;l1:y4:void;;l"
"1:y5:void?;;l1:y12:global-store;;),&0{%1,,,,#0#1#2#3&0{%1.0,'(y1:w),.1"
"v?{'(l2:y6:scheme;y5:write;)]2}'(y1:t),.1v?{'(l2:y6:scheme;y4:time;)]2"
"}'(y1:p),.1v?{'(l2:y6:scheme;y4:repl;)]2}'(y1:r),.1v?{'(l2:y6:scheme;y"
"4:read;)]2}'(y1:v),.1v?{'(l2:y6:scheme;y4:r5rs;)]2}'(y1:u),.1v?{'(l2:y"
"6:scheme;y9:r5rs-null;)]2}'(y1:d),.1v?{'(l2:y6:scheme;y4:load;)]2}'(y1"
":z),.1v?{'(l2:y6:scheme;y4:lazy;)]2}'(y1:s),.1v?{'(l2:y6:scheme;y15:pr"
"ocess-context;)]2}'(y1:i),.1v?{'(l2:y6:scheme;y7:inexact;)]2}'(y1:f),."
"1v?{'(l2:y6:scheme;y4:file;)]2}'(y1:e),.1v?{'(l2:y6:scheme;y4:eval;)]2"
"}'(y1:o),.1v?{'(l2:y6:scheme;y7:complex;)]2}'(y1:h),.1v?{'(l2:y6:schem"
"e;y4:char;)]2}'(y1:l),.1v?{'(l2:y6:scheme;y11:case-lambda;)]2}'(y1:a),"
".1v?{'(l2:y6:scheme;y3:cxr;)]2}'(y1:b),.1v?{'(l2:y6:scheme;y4:base;)]2"
"}'(y1:x),.1v?{'(l2:y6:scheme;y3:box;)]2}.1I0?{.1,'(y4:srfi),l2]2}.1,l1"
"]2}.!0&0{%1${&0{%1n,'(l1:y5:begin;),V12]1},.3,@(y20:*root-name-registr"
"y*),@(y11:name-lookup)[03}z]1}.!1&0{%3'1,.1V4,.0,.3A3,.0?{.4,.1sd]5}.1"
",.5,.5cc,'1,.4V5]5}.!2&0{%1&0{%1.0,'(y5:const),l2]1},.1,@(y20:*root-na"
"me-registry*),@(y11:name-lookup)[13}.!3.4d,.5a,,#0.0,.6,.5,.7,.(i10),&"
"5{%2.1u?{${.2,:0^[01},.1,${'(l1:y5:skint;),:1^[01},:3^[23}${${.4,:0^[0"
"1},.3,${${.9a,:2^[01},:1^[01},:3^[03}.1d,.1,:4^[22}.!0.0^_1[52},@(y10:"
"%25for-each1)[02}",
"C", 0,
"@(y20:*root-name-registry*),${f,'(l1:y5:skint;),.4,@(y11:name-lookup)["
"03},'1,.1zV4,'1,.3V3-,${'0,,#0.0,.6,.9,.7,&4{%1:0,.1=?{]1}${.2,:1V4,f,"
",#0:2,.6,:1,.3,&4{%2.1u,.0?{.0]3}:3,.3aaA3?{.2d,.3,:0^[32}.1?{.2d,.2sd"
"}{.2d,:2,:1V5}${.4ad,.5aa,@(y22:*hidden-name-registry*),@(y13:name-ins"
"tall!)[03}.2d,.2,:0^[32}.!0.0^_1[02}'1,.1+,:3^[11}.!0.0^_1[01}_1_1_1_1",
"C", 0,
"${'(i200),@(y18:make-name-registry)[01}@!(y20:*user-name-registry*)",