ref: a166a709b349edcb414326a3c1750ec667cf7269
parent: c07007dc7ac255eaed3e1f9da20ba02974d9f950
author: Sigrid Solveig Haflínudóttir <sigrid@ftrv.se>
date: Wed Apr 23 13:52:58 EDT 2025
calculate function's max stack size in the compiler Pass it to "fn" builtin and print out when needed. This renders "compute_maxstack" C function unused and allows not to run repeated calculations on every startup.
--- a/boot/sl.boot
+++ b/boot/sl.boot
@@ -1,17 +1,17 @@
-(*builtins* #(NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL #fn("n10<:")
- #fn("n10=:") NIL NIL NIL NIL #fn("n10B:") NIL NIL NIL NIL NIL #fn("n10H:") NIL NIL NIL
- #fn("z0700}2:" #(<)) NIL #fn("n201N:") NIL #fn("n201P:")
- #fn("n201Q:") #fn("n10R:") #fn("n10S:")
- #fn("n10T:") NIL #fn("n10V:") NIL #fn("n10X:")
- #fn("n10Y:") #fn("n10Z:") #fn("n10[:")
- #fn("n10\\:") #fn("n10]:") NIL #fn("n201_:") NIL NIL NIL #fn("n201c:")
- #fn("n201d:") #fn("z00:") #fn("z0700}2:" #(apply))
- #fn("z0700}2:" #(+)) #fn("z0700}2:" #(-))
- #fn("z0700}2:" #(*)) #fn("z0700}2:" #(/))
- #fn("z0700}2:" #(div0)) #fn("z0700}2:" #(=))
- #fn("n201m:") NIL #fn("z0700}2:" #(vec))
- #fn("z0700}2:" #(aset!)) NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL #fn("n3012082>1|:" #(#fn("n1A061:")))
- NIL NIL NIL NIL NIL NIL NIL NIL #fn("z0700}2:" #(aref)) NIL NIL)
+(*builtins* #(NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL #fn("n10<:" 5)
+ #fn("n10=:" 5) NIL NIL NIL NIL #fn("n10B:" 5) NIL NIL NIL NIL NIL #fn("n10H:" 5) NIL
+ NIL NIL #fn("z0700}2:" #(<) 6) NIL #fn("n201N:" 6) NIL #fn("n201P:" 6)
+ #fn("n201Q:" 6) #fn("n10R:" 5) #fn("n10S:" 5)
+ #fn("n10T:" 5) NIL #fn("n10V:" 5) NIL #fn("n10X:" 5)
+ #fn("n10Y:" 5) #fn("n10Z:" 5) #fn("n10[:" 5)
+ #fn("n10\\:" 5) #fn("n10]:" 5) NIL #fn("n201_:" 6) NIL NIL NIL #fn("n201c:" 6)
+ #fn("n201d:" 6) #fn("z00:" 4) #fn("z0700}2:" #(apply) 6)
+ #fn("z0700}2:" #(+) 6) #fn("z0700}2:" #(-) 6)
+ #fn("z0700}2:" #(*) 6) #fn("z0700}2:" #(/) 6)
+ #fn("z0700}2:" #(div0) 6) #fn("z0700}2:" #(=) 6)
+ #fn("n201m:" 6) NIL #fn("z0700}2:" #(vec) 6)
+ #fn("z0700}2:" #(aset!) 6) NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL #fn("n3012082>1|:" #(#fn("n1A061:" 6)) 7)
+ NIL NIL NIL NIL NIL NIL NIL NIL #fn("z0700}2:" #(aref) 6) NIL NIL)
*properties* #table(*formals-list* #table(identity ((x)) bound? ((symbol)) sym-set-doc ((symbol
doc-seq . formals-list)) io-eof? ((io)) < ((a . rest)) cadr ((cell)) sym (term) nan? ((v)) for ((min
max fn)) fixnum? ((v)) exit (((status NIL))) > ((a . rest)) + (rest) div0 ((a b)) __finish ((status)) lz-unpack ((data
@@ -50,209 +50,214 @@
-group . builtin)) buffer ((:doc-group . io)) num? ((:doc-group . builtin)) rand-float ((:doc-group . rand)) builtin? ((:doc-group . builtin)) set-car! ((:doc-group . list)
(:doc-group . builtin)) cons? ((:doc-group . builtin)) doc-group ((:doc-group . doc)) aref ((:doc-group . builtin)) *properties* ((:doc-group . prop)) vec ((:doc-group . builtin)) >= ((:doc-group . compare)) sym? ((:doc-group . builtin)) zero? ((:doc-group . compare)) length= ((:doc-group . list)) positive? ((:doc-group . compare)) doc-for ((:doc-group . doc)) aset! ((:doc-group . builtin)) T ((:doc-see)) car ((:doc-group . list)
(:doc-group . builtin)) *builtins* ((:doc-group . builtin)) str ((:doc-group . string)) cons ((:doc-group . list)
-ltin)) zero? ((:doc-group . compare)) length= ((:doc-group . list)) positive? ((:doc-group . compare)) doc-for ((:doc-group . doc)) aset! ((:doc-group . builtin)) T ((:doc-see)) car ((:doc-group . list)
- (:doc-group . builtin)) *builtins* ((:doc-group . builtin)) str ((:doc-group . string)) cons ((:doc-group . list)
- (:doc-group . builtin)) - ((:doc-group . builtin)) remprop ((:doc-group . prop)) <= ((:doc-group . compare)) rand ((:doc-group . rand)) negative? ((:doc-group . compare)) Instructions ((:doc-group . builtin)) file ((:doc-group . io)) rand-double ((:doc-group . rand)) cdr ((:doc-group . list)
- (:doc-group . builtin)) atom? ((:doc-group . builtin)) vec? ((:doc-group . builtin)) / ((:doc-group . builtin)) equal? ((:doc-group . compare)
- (:doc-group . builtin)) eqv? ((:doc-group . compare) (:doc-group . builtin)) io? ((:doc-group . io)) eof-object? ((:doc-group . io)) list ((:doc-group . builtin)) apply ((:doc-group . builtin)) help ((:doc-group . doc)) rand-u32 ((:doc-group . rand)) = ((:doc-group . compare)
+ltin)) zero? ((:doc-group . compare)) length= ((:doc-group . list)) positive? ((:doc-group . compare)) doc-for ((:doc-group . doc)) aset! ((:doc-group . builtin)) T ((:doc-see)) car ((:doc-group . list)
+ (:doc-group . builtin)) *builtins* ((:doc-group . builtin)) str ((:doc-group . string)) cons ((:doc-group . list)
+ (:doc-group . builtin)) - ((:doc-group . builtin)) remprop ((:doc-group . prop)) <= ((:doc-group . compare)) rand ((:doc-group . rand)) negative? ((:doc-group . compare)) Instructions ((:doc-group . builtin)) file ((:doc-group . io)) rand-double ((:doc-group . rand)) cdr ((:doc-group . list)
+ (:doc-group . builtin)) atom? ((:doc-group . builtin)) vec? ((:doc-group . builtin)) / ((:doc-group . builtin)) equal? ((:doc-group . compare)
+ (:doc-group . builtin)) eqv? ((:doc-group . compare) (:doc-group . builtin)) io? ((:doc-group . io)) eof-object? ((:doc-group . io)) list ((:doc-group . builtin)) apply ((:doc-group . builtin)) help ((:doc-group . doc)) rand-u32 ((:doc-group . rand)) = ((:doc-group . compare)
al? ((:doc-group . compare)
-roup . builtin)) help ((:doc-group . doc)) rand-u32 ((:doc-group . rand)) = ((:doc-group . compare)
- (:doc-group . builtin)) rand-u64 ((:doc-group . rand)) not ((:doc-group . builtin)) separate-doc-from-body ((:doc-group . doc)) set-cdr! ((:doc-group . list)
- (:doc-group . builtin)) fn? ((:doc-group . builtin)) help-print-header ((:doc-group . doc)) lz-pack ((:doc-group . compress)) arg-counts ((:doc-group . builtin)) eq? ((:doc-group . compare)
- (:doc-group . builtin)) getprop ((:doc-group . prop) (:doc-see . putprop)) vm-stats ((:doc-group . vm)) * ((:doc-group . builtin)) putprop ((:doc-group . prop)
- (:doc-see . getprop)) io->str ((:doc-group . io))))
- *syntax-environment* #table(bcode:nconst #fn("n1200r2e3:" #(aref)) doc-for #fn("z10B86;35040<;J404086;35040=70211225251<863I0232487e22489e22488e2e4:232487e22489e2e3:" #(separate-doc-from-body
+oc-group . rand)) = ((:doc-group . compare)
+ (:doc-group . builtin)) rand-u64 ((:doc-group . rand)) not ((:doc-group . builtin)) separate-doc-from-body ((:doc-group . doc)) set-cdr! ((:doc-group . list)
+ (:doc-group . builtin)) fn? ((:doc-group . builtin)) help-print-header ((:doc-group . doc)) lz-pack ((:doc-group . compress)) arg-counts ((:doc-group . builtin)) eq? ((:doc-group . compare)
+ (:doc-group . builtin)) getprop ((:doc-group . prop) (:doc-see . putprop)) vm-stats ((:doc-group . vm)) * ((:doc-group . builtin)) putprop ((:doc-group . prop)
+ (:doc-see . getprop)) io->str ((:doc-group . io))))
+ *syntax-environment* #table(bcode:spmax #fn("n1200r5e3:" #(aref) 7) bcode:nconst #fn("n1200r2e3:" #(aref) 7) doc-for #fn("z10B86;35040<;J404086;35040=70211225251<863I0232487e22489e22488e2e4:232487e22489e2e3:" #(separate-doc-from-body
+ #fn(append) (NIL) sym-set-doc quote) 13) with-input-from #fn("z12021e1220e2e1e17315163:" #(#fn(nconc)
+ with-bindings *io-in* copy-list) 9) unless #fn("z1200q211Pe4:" #(if begin) 9) defmacro #fn("z17015186<86=873?0710<870=53@30q42223240<e22526e10=e177885153e3e2:" #(separate-doc-from-body
+ sym-set-doc void set-syntax! quote #fn(nconc) λ copy-list) 15) time #fn("n1202122e1e2e123024252622e121e32728e5e3e3:" #(let
+ #:g472 time-now prog1 princ "Elapsed time: " - " seconds" *linefeed*) 13) cond #fn("z0Ib520852185>1_51485<061:" #(#0=#fn("z0I:" #() void 4)
:85T23C\x94074758551513c07675855151278685<e2e12886217975855151PA<0=51e4e3:272:85<e2e1282:7585512:e2A<0=51e4e3:2885<2185=PA<0=51e4:" #(else
begin or => 1arg-lambda? caddr caadr let if cddr #:g19) cond-clauses->if))) do #fn("z21<2071052207205220230522425268827872829e17:1=51522829e17:82512825e18:52e153e4e3e2e12825e18952e3:" #(#fn(map)
car cadr #fn("n170051B38071061:0<:" #(cddr caddr)) letrec #:g441 λ if #fn(nconc) begin copy-list)) assert-fail #fn("z12021220qe32324e113E0252624e2271<e2e3@30De3e3e2:" #(assert
-51522829e17:82512825e18:52e153e4e3e2e12825e18952e3:" #(#fn(map)
+ begin λ e
fn("n170051B38071061:0<:" #(cddr caddr)) letrec #:g441 λ if #fn(nconc) begin copy-list)) assert-fail #fn("z12021220qe32324e113E0252624e2271<e2e3@30De3e3e2:" #(assert
-e3@30De3e3e2:" #(assert
- trycatch begin λ e eq? car quote)) bcode:code #fn("n1200Ee3:" #(aref)) let #fn("z1q0R3B00?641<?041=?1@30q42021e12223052e174151532225052863C0268687e2e186e3@408788P:" #(#fn(nconc)
+ quote) 13) bcode:code #fn("n1200Ee3:" #(aref) 7) let #fn("z1q0R3B00?641<?041=?1@30q42021e12223052e174151532225052863C0268687e2e186e3@408788P:" #(#fn(nconc)
+ λ #fn(map) #fn("n10B3500<:0:" 5) copy-list #fn("n10B3500T:7060:" #(void) 5) letrec) 10) with-bindings #fn("z12071052207205220230522425e12076888653e17720288687535129242:e17715152242:e177202;8688535152e3e164:" #(#fn(map)
186e3@408788P:" #(#fn(nconc)
λ #fn(map) #fn("n10B3500<:0:") copy-list #fn("n10B3500T:7060:" #(void)) letrec)) with-bindings #fn("z12071052207205220230522425e12076888653e17720288687535129242:e17715152242:e177202;8688535152e3e164:" #(#fn(map)
-535152e3e164:" #(#fn(map)
+map)
01e3:" #(set!))
unwind-protect begin #fn("n22001e3:" #(set!)))) %defstruct% #fn("O10005000*///z6W1000J7021?14W2000;J60D?24W3000;J60D?34W4000;J60D?44W5000;J60D?54II22230>1??5142224?@514258651262786528@8651268?8652121C60D@C0128C60q@90792:1528E3B082;J904792;51@;082;35048;;36040e185DQ;3:042<02=52;J504858G;3L048F3708G@A08>3;0792>51@30q8E3:02?0e2@7002@e283DQ83;3\\0483H;3M0483DQ;3:042<2A052;J504838CP;J5048384DQ;3:042B02C52;J50484I222D8E108B8F>5?M5142E2Fe18H3{02G8H2He28E3E02I2J2He22K8Ie2e3@V02L2M2N2HEe32K0e2e32O2P2He27Q8A51e3e3e3@30qe18K3C02G8K<8M8K=51e3@30qe18E3U02R2K0e22K2Se28J3808K<@808M8C51e4@30qe17T7U2V8D8B8L8E8H8I8F0>88A525165:" #(#(:constructor
2 :predicate 4 NIL NIL :type 0 :named 1 :conc-name 3 NIL NIL) vec #0#
-02C52;J50484I222D8E108B8F>5?M5142E2Fe18H3{02G8H2He28E3E02I2J2He22K8Ie2e3@V02L2M2N2HEe32K0e2e32O2P2He27Q8A51e3e3e3@30qe18K3C02G8K<8M8K=51e3@30qe18E3U02R2K0e22K2Se28J3808K<@808M8C51e4@30qe17T7U2V8D8B8L8E8H8I8F0>88A525165:" #(#(:constructor
- 2 :predicate 4 NIL NIL :type 0 :named 1 :conc-name 3 NIL NIL) vec #0#
- #fn("n10H370q:@30q4207172051f22324850A>38652486:" #((:read-only) assoc-list cddr #fn(for-each)
+8E108B8F>5?M5142E2Fe18H3{02G8H2He28E3E02I2J2He22K8Ie2e3@V02L2M2N2HEe32K0e2e32O2P2He27Q8A51e3e3e3@30qe18K3C02G8K<8M8K=51e3@30qe18E3U02R2K0e22K2Se28J3808K<@808M8C51e4@30qe17T7U2V8D8B8L8E8H8I8F0>88A525165:" #(#(:constructor
+ 2 :predicate 4 NIL NIL :type 0 :named 1 :conc-name 3 NIL NIL) vec #0#
+ #fn("n10H370q:@30q4207172051f22324850A>38652486:" #((:read-only) assoc-list cddr #fn(for-each)
\:))) tokw)
#fn(length) #fn(map) #fn("n10B3500<:0:") list arg-error "invalid struct type: " "structs of type `vec` are always :named T"
- #fn(sym) #\? "predicate not possible unless the struct is :named T" struct … "make-" #fn(str) "-"
- #fn("n1200A3Y021Fe12223e2e12292e2e1747526q93535154@f0943S02127e12122e174945152e174935153@@02127e174935152e3:" #(λ
- #fn(nconc) quote %struct% copy-list foldr #fn("n2202105201PP:" #(#fn(sym) ":")) list) make-constructor)
- #fn(nconc) begin def s equal? type-of quote and eq? aref = length 1+ putprop constructor
- copy-list map-int #fn("n170A05270F052923=021928652@4086933<0r20i2KM@30022872324q25e3e3943K0269423e2272895e223e3e3@30q292:25e22;2396360K@30E88Me37<2=85523O02>2?2@2886e22A2897e22Be6e2@G02C2396360K@30E88M24e4e4e4:" #(list-ref
+e not possible unless the struct is :named T" struct … "make-" #fn(str) "-"
+ #fn("n1200A3Y021Fe12223e2e12292e2e1747526q93535154@f0943S02127e12122e174945152e174935153@@02127e174935152e3:" #(λ
+ #fn(nconc) quote %struct% copy-list foldr #fn("n2202105201PP:" #(#fn(sym) ":") 7) list) make-constructor 15)
+ #fn(nconc) begin def s equal? type-of quote and eq? aref = length 1+ putprop constructor
+ copy-list map-int #fn("n170A05270F052923=021928652@4086933<0r20i2KM@30022872324q25e3e3943K0269423e2272895e223e3e3@30q292:25e22;2396360K@30E88Me37<2=85523O02>2?2@2886e22A2897e22Be6e2@G02C2396360K@30E88M24e4e4e4:" #(list-ref
prop constructor
-052923=021928652@4086933<0r20i2KM@30022872324q25e3e3943K0269423e2272895e223e3e3@30q292:25e22;2396360K@30E88Me37<2=85523O02>2?2@2886e22A2897e22Be6e2@G02C2396360K@30E88M24e4e4e4:" #(list-ref
- #fn(sym) def s v v-supplied? unless type-error quote if not aref assv :read-only error str "slot "
- " in struct " " is :read-only" aset!)))) make-label #fn("n120e1:" #(gensym)) bcode:cenv #fn("n1200r3e3:" #(aref)) mark-label #fn("n22002122e21e4:" #(emit
- quote label)) quasiquote #fn("n1700E62:" #(bq-process)) > #fn("z12021e1721510e163:" #(#fn(nconc)
- < reverse)) when #fn("z1200211Pqe4:" #(if begin)) help #fn("O100010003000W1000J60q?14W2000J7071?241;3<0422231520P13;02410e3@3007588265275882752IIIIIb;b<288;29_514288<2:_514282;?=514282<87>1?>514282=??51402>CM02?2@8<>18?2A7B26528=5252@$089;J5048:3\xe3082888:2C154475882D527E2F8@527E2G8@52893H07H7I2J898A535147K50@30q48B3W07K5047H2L5147K5042?2M8;>18B5247K50@30q^1^1^1413c07K5047H2N5147K5042?2O8;>18?2A7B26528>525247K50@30q47P50@g07H2Q13<02R12S52@402T05341JE00R3@00ZJ;07H2U51@30q47K5047P60:" #(#(:print-header
- 0) help-print-header #fn(sym) ":doc-" doc getprop *doc* *formals-list* #0#
+0i2KM@30022872324q25e3e3943K0269423e2272895e223e3e3@30q292:25e22;2396360K@30E88Me37<2=85523O02>2?2@2886e22A2897e22Be6e2@G02C2396360K@30E88M24e4e4e4:" #(list-ref
+ #fn(sym) def s v v-supplied? unless type-error quote if not aref assv :read-only error str "slot "
+ " in struct " " is :read-only" aset!) 21)) 33) make-label #fn("n120e1:" #(gensym) 5) bcode:cenv #fn("n1200r3e3:" #(aref) 7) mark-label #fn("n22002122e21e4:" #(emit
+ quote label) 8) quasiquote #fn("n1700E62:" #(bq-process) 7) > #fn("z12021e1721510e163:" #(#fn(nconc)
+ < reverse) 8) when #fn("z1200211Pqe4:" #(if begin) 8) help #fn("O100010003000W1000J60q?14W2000J7071?241;3<0422231520P13;02410e3@3007588265275882752IIIIIb;b<288;29_514288<2:_514282;?=514282<87>1?>514282=??51402>CM02?2@8<>18?2A7B26528=5252@$089;J5048:3\xe3082888:2C154475882D527E2F8@527E2G8@52893H07H7I2J898A535147K50@30q48B3W07K5047H2L5147K5042?2M8;>18B5247K50@30q^1^1^1413c07K5047H2N5147K5042?2O8;>18?2A7B26528>525247K50@30q47P50@g07H2Q13<02R12S52@402T05341JE00R3@00ZJ;07H2U51@30q47K5047P60:" #(#(:print-header
+ 0) help-print-header #fn(sym) ":doc-" doc getprop *doc* *formals-list* #0#
241;3<0422231520P13;02410e3@3007588265275882752IIIIIb;b<288;29_514288<2:_514282;?=514282<87>1?>514282=??51402>CM02?2@8<>18?2A7B26528=5252@$089;J5048:3\xe3082888:2C154475882D527E2F8@527E2G8@52893H07H7I2J898A535147K50@30q48B3W07K5047H2L5147K5042?2M8;>18B5247K50@30q^1^1^1413c07K5047H2N5147K5042?2O8;>18?2A7B26528>525247K50@30q47P50@g07H2Q13<02R12S52@402T05341JE00R3@00ZJ;07H2U51@30q47K5047P60:" #(#(:print-header
0) help-print-header #fn(sym) ":doc-" doc getprop *doc* *formals-list* #0#
-5147K50@30q48B3W07K5047H2L5147K5042?2M8;>18B5247K50@30q^1^1^1413c07K5047H2N5147K5042?2O8;>18?2A7B26528>525247K50@30q47P50@g07H2Q13<02R12S52@402T05341JE00R3@00ZJ;07H2U51@30q47K5047P60:" #(#(:print-header
- 0) help-print-header #fn(sym) ":doc-" doc getprop *doc* *formals-list* #0#
- #fn("n313?02021820>2162:72504738251474061:" #(#fn(for-each)
- #fn("n17050471A51472F0P61:" #(newline princ print))
- newline princ print) print-sig)
- #fn("n12002152853;0220E8563:0:" #(#fn(str-find) "\n" #fn(str-sub)) first-line)
+K5042?2M8;>18B5247K50@30q^1^1^1413c07K5047H2N5147K5042?2O8;>18?2A7B26528>525247K50@30q47P50@g07H2Q13<02R12S52@402T05341JE00R3@00ZJ;07H2U51@30q47K5047P60:" #(#(:print-header
+ 0) help-print-header #fn(sym) ":doc-" doc getprop *doc* *formals-list* #0#
+ #fn("n313?02021820>2162:72504738251474061:" #(#fn(for-each)
+ #fn("n17050471A51472F0P61:" #(newline princ print) 7)
+ newline princ print) print-sig 7)
+ #fn("n12002152853;0220E8563:0:" #(#fn(str-find) "\n" #fn(str-sub)) first-line 9)
inc caddr ": " getprop *doc* newline))
-)
- #fn("n10<20Q:" #(:doc-see)) princ foldl #fn("n20=161:") newline "See also:" #fn("n1A<0=700=21522263:" #(getprop
- *formals-list* " ")) "Members:" #fn("n1A<070021522263:" #(getprop *formals-list* " ")) void
- "no help for " #fn(str) " " "" " (undefined)")) defstruct #fn("z0700=5185<85=0<I21228887>2?9514863H0738824862589Pe15252@30q42627e188e178875163:" #(separate-doc-from-body
- #0# #fn("n12002152853=0220E8553@300853<02208552@402324752627AF5351285229862:7;882<528764:" #(#fn(str-find)
- "\n\n" #fn(str-sub) "" #fn(str-split) print-to-str #fn(list*) defstruct "\n" #fn(str) "\n\n "
- str-join "\n ") fmt) sym-set-doc #fn(append) :doc-fmt #fn(nconc) %defstruct% copy-list)) bcode:ctable #fn("n1200Ke3:" #(aref)) with-output-to #fn("z12021e1220e2e1e17315163:" #(#fn(nconc)
- with-bindings *io-out* copy-list)) catch #fn("n22012122e123242522e2262722e22829e2e3262:22e20e3e42;22e22<22e2e4e3e3:" #(trycatch
- λ #:g464 if and cons? eq? car quote thrown-value cadr caddr raise)) let* #fn("z10H3E02021e1qe17215153e1:2021e173051e1e1720=B3H02024e10=e17215153e1@301515375051e2:" #(#fn(nconc)
- λ copy-list caar let* cadar)) letrec #fn("z1202021e12273052e122240527515154e1227605262:" #(#fn(nconc)
- λ #fn(map) car #fn("n12021e17205162:" #(#fn(nconc) set! copy-list)) copy-list void)) bcode:sp #fn("n1200r4e3:" #(aref)) bcode:stack #fn("n2200r421220e21e3e4:" #(aset!
+"n10<20Q:" #(:doc-fmt) 6)
+ #fn("n10<20Q:" #(:doc-see) 6) princ foldl #fn("n20=161:" 6) newline "See also:" #fn("n1A<0=700=21522263:" #(getprop
+ *formals-list* " ") 9) "Members:" #fn("n1A<070021522263:" #(getprop *formals-list* " ") 9)
+ void "no help for " #fn(str) " " "" " (undefined)") 21) defstruct #fn("z0700=5185<85=0<I21228887>2?9514863H0738824862589Pe15252@30q42627e188e178875163:" #(separate-doc-from-body
+ #0# #fn("n12002152853=0220E8553@300853<02208552@402324752627AF5351285229862:7;882<528764:" #(#fn(str-find)
+ "\n\n" #fn(str-sub) "" #fn(str-split) print-to-str #fn(list*) defstruct "\n" #fn(str) "\n\n "
+ str-join "\n ") fmt 14) sym-set-doc #fn(append) :doc-fmt #fn(nconc) %defstruct% copy-list) 15) bcode:ctable #fn("n1200Ke3:" #(aref) 7) with-output-to #fn("z12021e1220e2e1e17315163:" #(#fn(nconc)
+ with-bindings *io-out* copy-list) 9) catch #fn("n22012122e123242522e2262722e22829e2e3262:22e20e3e42;22e22<22e2e4e3e3:" #(trycatch
+ λ #:g464 if and cons? eq? car quote thrown-value cadr caddr raise) 15) let* #fn("z10H3E02021e1qe17215153e1:2021e173051e1e1720=B3H02024e10=e17215153e1@301515375051e2:" #(#fn(nconc)
+ λ copy-list caar let* cadar) 13) letrec #fn("z1202021e12273052e122240527515154e1227605262:" #(#fn(nconc)
+ λ #fn(map) car #fn("n12021e17205162:" #(#fn(nconc) set! copy-list) 8) copy-list void) 11) bcode:sp #fn("n1200r4e3:" #(aref) 7) assert #fn("n1200D2122230e2e2e2e4:" #(if
+ raise quote assert-failed) 11) case #fn("z1Ib6208621_514225023870e2e12425e126278687>215252e3:" #(#0#
e1227605262:" #(#fn(nconc)
-0B;3D040<20Q;3:04710TK62:" #(λ length=) 1arg-lambda?)
+ #(λ length=) 1arg-lambda? 7)
<0L2;J5040V340q:A<1<1=62:")) <=) >
-#(#fn("n21S;JE041<0L2;3;04A<1<1=62:")) >) >= #fn("z1Ib6862086>1_486<^10162:" #(#fn("n21S;JL0401<L2;J5040V340q:A<1<1=62:")) >=)
+3;04A<1<1=62:" 7)) > 7) >=
(#fn("n21S;JL0401<L2;J5040V340q:A<1<1=62:")) >=)
-oadg.l #u8(68) aref2 #u8(23) box #u8(50) cadr #u8(36) argc #u8(62) setg #u8(71) load0 #u8(21) nan? #u8(38) fixnum? #u8(41) loadc0 #u8(17) loada0 #u8(0) div0 #u8(59) keyargs #u8(31) call #u8(5) loada.l #u8(69) num? #u8(40) sub2 #u8(78) add2 #u8(29) loadc.l #u8(70) loadc #u8(9) builtin? #u8(43) set-car! #u8(47) vargc.l #u8(80) vec #u8(63) ret #u8(10) loadi8 #u8(66) tapply #u8(77) loadvoid #u8(25) loada1 #u8(1) shift #u8(46) atom? #u8(24) cdr #u8(13) brne.l #u8(83) / #u8(58) equal? #u8(52) apply #u8(54) dup #u8(11) loadt #u8(20) bounda #u8(39) jmp.l #u8(48) = #u8(60) not #u8(35) set-cdr! #u8(30) fn? #u8(44) eq? #u8(33) * #u8(57) load1 #u8(27) bound? #u8(42) box.l #u8(86) < #u8(28) brnn.l #u8(84) jmp #u8(16) loadv #u8(2) for #u8(76) + #u8(55) brne #u8(19) argc.l #u8(79) compare #u8(61) brn #u8(3) neg #u8(37) loadv.l #u8(67) vargc #u8(74) loadc1 #u8(22) setg.l #u8(72) cons? #u8(18) aref #u8(85) sym? #u8(34) aset! #u8(64) car #u8(12) cons #u8(32) tcall.l #u8(82) - #u8(56) brn.l #u8(49) optargs #u8(87) closure #u8(14) vec? #u8(45) pop #u8(4) eqv? #u8(51) list #u8(53) seta #u8(15) seta.l #u8(73) brnn #u8(26) loadnil #u8(65) loadg #u8(7) loada #u8(8) tcall #u8(6))
- S #fn("z1700215286380861}2:7223062:" #(getprop constructor error "no default constructor for struct: ") S)
- __finish #fn("n120Z3>021220>17062:q:" #(*exit-hooks* #fn(for-each)
+ #u8(68) aref2 #u8(23) box #u8(50) cadr #u8(36) argc #u8(62) setg #u8(71) load0 #u8(21) nan? #u8(38) fixnum? #u8(41) loadc0 #u8(17) loada0 #u8(0) div0 #u8(59) keyargs #u8(31) call #u8(5) loada.l #u8(69) num? #u8(40) sub2 #u8(78) add2 #u8(29) loadc.l #u8(70) loadc #u8(9) builtin? #u8(43) set-car! #u8(47) vargc.l #u8(80) vec #u8(63) ret #u8(10) loadi8 #u8(66) tapply #u8(77) loadvoid #u8(25) loada1 #u8(1) shift #u8(46) atom? #u8(24) cdr #u8(13) brne.l #u8(83) / #u8(58) equal? #u8(52) apply #u8(54) dup #u8(11) loadt #u8(20) bounda #u8(39) jmp.l #u8(48) = #u8(60) not #u8(35) set-cdr! #u8(30) fn? #u8(44) eq? #u8(33) * #u8(57) load1 #u8(27) bound? #u8(42) box.l #u8(86) < #u8(28) brnn.l #u8(84) jmp #u8(16) loadv #u8(2) for #u8(76) + #u8(55) brne #u8(19) argc.l #u8(79) compare #u8(61) brn #u8(3) neg #u8(37) loadv.l #u8(67) vargc #u8(74) loadc1 #u8(22) setg.l #u8(72) cons? #u8(18) aref #u8(85) sym? #u8(34) aset! #u8(64) car #u8(12) cons #u8(32) tcall.l #u8(82) - #u8(56) brn.l #u8(49) optargs #u8(87) closure #u8(14) vec? #u8(45) pop #u8(4) eqv? #u8(51) list #u8(53) seta #u8(15) seta.l #u8(73) brnn #u8(26) loadnil #u8(65) loadg #u8(7) loada #u8(8) tcall #u8(6))
+ S #fn("z1700215286380861}2:7223062:" #(getprop constructor error "no default constructor for struct: ") S 8)
+ __finish #fn("n120Z3>021220>17062:q:" #(*exit-hooks* #fn(for-each)
ub2 #u8(78) add2 #u8(29) loadc.l #u8(70) loadc #u8(9) builtin? #u8(43) set-car! #u8(47) vargc.l #u8(80) vec #u8(63) ret #u8(10) loadi8 #u8(66) tapply #u8(77) loadvoid #u8(25) loada1 #u8(1) shift #u8(46) atom? #u8(24) cdr #u8(13) brne.l #u8(83) / #u8(58) equal? #u8(52) apply #u8(54) dup #u8(11) loadt #u8(20) bounda #u8(39) jmp.l #u8(48) = #u8(60) not #u8(35) set-cdr! #u8(30) fn? #u8(44) eq? #u8(33) * #u8(57) load1 #u8(27) bound? #u8(42) box.l #u8(86) < #u8(28) brnn.l #u8(84) jmp #u8(16) loadv #u8(2) for #u8(76) + #u8(55) brne #u8(19) argc.l #u8(79) compare #u8(61) brn #u8(3) neg #u8(37) loadv.l #u8(67) vargc #u8(74) loadc1 #u8(22) setg.l #u8(72) cons? #u8(18) aref #u8(85) sym? #u8(34) aset! #u8(64) car #u8(12) cons #u8(32) tcall.l #u8(82) - #u8(56) brn.l #u8(49) optargs #u8(87) closure #u8(14) vec? #u8(45) pop #u8(4) eqv? #u8(51) list #u8(53) seta #u8(15) seta.l #u8(73) brnn #u8(26) loadnil #u8(65) loadg #u8(7) loada #u8(8) tcall #u8(6))
S #fn("z1700215286380861}2:7223062:" #(getprop constructor error "no default constructor for struct: ") S)
-) equal? #u8(52) apply #u8(54) dup #u8(11) loadt #u8(20) bounda #u8(39) jmp.l #u8(48) = #u8(60) not #u8(35) set-cdr! #u8(30) fn? #u8(44) eq? #u8(33) * #u8(57) load1 #u8(27) bound? #u8(42) box.l #u8(86) < #u8(28) brnn.l #u8(84) jmp #u8(16) loadv #u8(2) for #u8(76) + #u8(55) brne #u8(19) argc.l #u8(79) compare #u8(61) brn #u8(3) neg #u8(37) loadv.l #u8(67) vargc #u8(74) loadc1 #u8(22) setg.l #u8(72) cons? #u8(18) aref #u8(85) sym? #u8(34) aset! #u8(64) car #u8(12) cons #u8(32) tcall.l #u8(82) - #u8(56) brn.l #u8(49) optargs #u8(87) closure #u8(14) vec? #u8(45) pop #u8(4) eqv? #u8(51) list #u8(53) seta #u8(15) seta.l #u8(73) brnn #u8(26) loadnil #u8(65) loadg #u8(7) loada #u8(8) tcall #u8(6))
- S #fn("z1700215286380861}2:7223062:" #(getprop constructor error "no default constructor for struct: ") S)
+8(52) apply #u8(54) dup #u8(11) loadt #u8(20) bounda #u8(39) jmp.l #u8(48) = #u8(60) not #u8(35) set-cdr! #u8(30) fn? #u8(44) eq? #u8(33) * #u8(57) load1 #u8(27) bound? #u8(42) box.l #u8(86) < #u8(28) brnn.l #u8(84) jmp #u8(16) loadv #u8(2) for #u8(76) + #u8(55) brne #u8(19) argc.l #u8(79) compare #u8(61) brn #u8(3) neg #u8(37) loadv.l #u8(67) vargc #u8(74) loadc1 #u8(22) setg.l #u8(72) cons? #u8(18) aref #u8(85) sym? #u8(34) aset! #u8(64) car #u8(12) cons #u8(32) tcall.l #u8(82) - #u8(56) brn.l #u8(49) optargs #u8(87) closure #u8(14) vec? #u8(45) pop #u8(4) eqv? #u8(51) list #u8(53) seta #u8(15) seta.l #u8(73) brnn #u8(26) loadnil #u8(65) loadg #u8(7) loada #u8(8) tcall #u8(6))
+ S #fn("z1700215286380861}2:7223062:" #(getprop constructor error "no default constructor for struct: ") S 8)
(44) eq? #u8(33) * #u8(57) load1 #u8(27) bound? #u8(42) box.l #u8(86) < #u8(28) brnn.l #u8(84) jmp #u8(16) loadv #u8(2) for #u8(76) + #u8(55) brne #u8(19) argc.l #u8(79) compare #u8(61) brn #u8(3) neg #u8(37) loadv.l #u8(67) vargc #u8(74) loadc1 #u8(22) setg.l #u8(72) cons? #u8(18) aref #u8(85) sym? #u8(34) aset! #u8(64) car #u8(12) cons #u8(32) tcall.l #u8(82) - #u8(56) brn.l #u8(49) optargs #u8(87) closure #u8(14) vec? #u8(45) pop #u8(4) eqv? #u8(51) list #u8(53) seta #u8(15) seta.l #u8(73) brnn #u8(26) loadnil #u8(65) loadg #u8(7) loada #u8(8) tcall #u8(6))
S #fn("z1700215286380861}2:7223062:" #(getprop constructor error "no default constructor for struct: ") S)
- #u8(79) compare #u8(61) brn #u8(3) neg #u8(37) loadv.l #u8(67) vargc #u8(74) loadc1 #u8(22) setg.l #u8(72) cons? #u8(18) aref #u8(85) sym? #u8(34) aset! #u8(64) car #u8(12) cons #u8(32) tcall.l #u8(82) - #u8(56) brn.l #u8(49) optargs #u8(87) closure #u8(14) vec? #u8(45) pop #u8(4) eqv? #u8(51) list #u8(53) seta #u8(15) seta.l #u8(73) brnn #u8(26) loadnil #u8(65) loadg #u8(7) loada #u8(8) tcall #u8(6))
+ #u8(61) brn #u8(3) neg #u8(37) loadv.l #u8(67) vargc #u8(74) loadc1 #u8(22) setg.l #u8(72) cons? #u8(18) aref #u8(85) sym? #u8(34) aset! #u8(64) car #u8(12) cons #u8(32) tcall.l #u8(82) - #u8(56) brn.l #u8(49) optargs #u8(87) closure #u8(14) vec? #u8(45) pop #u8(4) eqv? #u8(51) list #u8(53) seta #u8(15) seta.l #u8(73) brnn #u8(26) loadnil #u8(65) loadg #u8(7) loada #u8(8) tcall #u8(6))
#u8(22) setg.l #u8(72) cons? #u8(18) aref #u8(85) sym? #u8(34) aset! #u8(64) car #u8(12) cons #u8(32) tcall.l #u8(82) - #u8(56) brn.l #u8(49) optargs #u8(87) closure #u8(14) vec? #u8(45) pop #u8(4) eqv? #u8(51) list #u8(53) seta #u8(15) seta.l #u8(73) brnn #u8(26) loadnil #u8(65) loadg #u8(7) loada #u8(8) tcall #u8(6))
-2) tcall.l #u8(82) - #u8(56) brn.l #u8(49) optargs #u8(87) closure #u8(14) vec? #u8(45) pop #u8(4) eqv? #u8(51) list #u8(53) seta #u8(15) seta.l #u8(73) brnn #u8(26) loadnil #u8(65) loadg #u8(7) loada #u8(8) tcall #u8(6))
- S #fn("z1700215286380861}2:7223062:" #(getprop constructor error "no default constructor for struct: ") S)
- __finish #fn("n120Z3>021220>17062:q:" #(*exit-hooks* #fn(for-each)
+- #u8(56) brn.l #u8(49) optargs #u8(87) closure #u8(14) vec? #u8(45) pop #u8(4) eqv? #u8(51) list #u8(53) seta #u8(15) seta.l #u8(73) brnn #u8(26) loadnil #u8(65) loadg #u8(7) loada #u8(8) tcall #u8(6))
+ S #fn("z1700215286380861}2:7223062:" #(getprop constructor error "no default constructor for struct: ") S 8)
+ __finish #fn("n120Z3>021220>17062:q:" #(*exit-hooks* #fn(for-each)
S #fn("z1700215286380861}2:7223062:" #(getprop constructor error "no default constructor for struct: ") S)
- #fn("n10A61:")) __finish)
- __init_globals #fn("n07021d37022@402384w4^147025d;350426;J50427w8429w:4qw;47<w=47>w?47@wA:" #(*os-name*
- "macos" #fn("n0702161:" #(princ "\e[0m\e[1m#;> \e[0m"))
- #fn("n0702161:" #(princ "#;> ")) *prompt* "dos" "\\" "/" *directory-separator* "\n" *linefeed*
- *exit-hooks* *stdout* *io-out* *stdin* *io-in* *stderr* *io-err*) __init_globals)
+__finish 7)
+ __init_globals #fn("n07021d37022@402384w4^147025d;350426;J50427w8429w:4qw;47<w=47>w?47@wA:" #(*os-name*
+ "macos" #fn("n0702161:" #(princ "\e[0m\e[1m#;> \e[0m") 6)
+ #fn("n0702161:" #(princ "#;> ") 6) *prompt* "dos" "\\" "/" *directory-separator* "\n" *linefeed*
+ *exit-hooks* *stdout* *io-out* *stdin* *io-in* *stderr* *io-err*) __init_globals 6)
;857<865387;3D042=8751;39047>8761:" #(*os-name*
"unknown" "plan9" "home" "macos" princ "\e]0;StreetLISP v0.999\a" "HOME" #fn(os-getenv) "lib/slrc"
-#fn(str) *directory-separator* #fn(path-exists?) load) __rcscript)
- __script #fn("n1200>121{:" #(#fn("n070A61:" #(load))
- #fn("n1700514212205161:" #(top-level-exception-handler
- #fn(exit)
+ #fn(path-exists?) load) __rcscript 11)
+ __script #fn("n1200>121{:" #(#fn("n070A61:" #(load) 6)
+ #fn("n1700514212205161:" #(top-level-exception-handler
+ #fn(exit)
#fn(str)))) __script)
__start #fn("n2705040w141w240=B3@00=w14730T51@50Dw24723>0745047550@30q42660:" #(__init_globals
-23500U:0:" #() abs) add-exit-hook
+ 6) any #fn("n21B;3D0401<51;J:047001=62:" #(any) any 7)
#fn("n1070Pw047160:" #(*exit-hooks* void) add-exit-hook) any #fn("n21B;3D0401<51;J:047001=62:" #(any) any)
-62:" #(any) any)
+3 fixnum? 1 cdr 1 atom? 1 div0 2 vec? 1 equal? 2 eqv? 2 compare 2 not 1 set-cdr! 2 num? 1 fn? 1 eq? 2 builtin? 1 cons? 1 set-car! 2)
xnum? 1 cdr 1 atom? 1 div0 2 vec? 1 equal? 2 eqv? 2 compare 2 not 1 set-cdr! 2 num? 1 fn? 1 eq? 2 builtin? 1 cons? 1 set-car! 2)
arg-error #fn("z020210P61:" #(#fn(raise) arg-error) arg-error) argc-error
- #fn("n10];JF042005185B;390485<21Q:" #(#fn(type-of) arr) arr?) assoc
+501<:13:07101=62:q:" #(caar assoc) assoc 7) assoc-list #fn("z00=85B3A00<85<P7085=f2P:q:" #(assoc-list) assoc-list 8)
ssoc
-) assoc-list)
- assv #fn("n2701510c3501<:13:07101=62:q:" #(caar assv) assv) bcode:indexfor
- #fn("n20KG0r2G20861523:02186162:2286187534870r287KMp4:" #(#fn(has?)
- #fn(get)
- #fn(put!)) bcode:indexfor)
- bounds-error #fn("z020210P61:" #(#fn(raise) bounds-error) bounds-error) box-vars
- #fn("n2Ib68620086>2_486<^1161:" #(#fn("n10B3Q00<T3B070A21720<5153@30q4F<0=61:q:" #(emit
- box caddr))) box-vars)
- bq-bracket #fn("n20H3=070710152e2:0<22CS01El2380700=P:707324710=1K~52e3e2:0<25CT01El2390260Te2:707027710T1K~52e3e2:0<28CP01El23500T:707029710T1K~52e3e2:70710152e2:" #(list
- bq-process unquote cons 'unquote unquote-splicing copy-list 'unquote-splicing unquote-nsplicing
- 'unquote-nsplicing) bq-bracket)
- bq-bracket1 #fn("n20B3S00<20CL01El23500T:7122730=1K~52e3:730162:" #(unquote cons 'unquote
- bq-process) bq-bracket1)
- bq-process #fn("n20R380200e2:0]3T0717205115286<73C907486=P:757486e3:0H3400:0<26CB07327710T1KM52e3:0<28CV01El23?0790r2523500T:7:2;710=1K~52e3:7<7=052Jt07>0512?2@1>105286J807387P:87=JA07:87<7186152e3:2A7B87P7186152e162:Ib6862C186>2_486<^10q62:" #(quote
- bq-process vec->list list vec apply quasiquote 'quasiquote unquote length= cons 'unquote any
- splice-form? lastcdr #fn(map) #fn("n1700A62:" #(bq-bracket1))
- #fn(nconc) list* #fn("n20J;02071151P:0B3o00<22CX020731AEl23700=@C07425e2760=AK~52e252P:F<0=770<A521P62:2071760A521P51P:" #(nconc
- reverse! unquote nreconc list 'unquote bq-process bq-bracket))) bq-process)
- builtin->instruction #fn("n120A0q63:" #(#fn(get)) #(#table(#.cadr cadr #.aset! aset! #.+ + #.- - #.equal? equal? #.eq? eq? #.builtin? builtin? #.not not #.cons? cons? #.cdr cdr #./ / #.div0 div0 #.set-car! set-car! #.vec vec #.set-cdr! set-cdr! #.< < #.aref aref #.for for #.cons cons #.apply apply #.eqv? eqv? #.vec? vec? #.list list #.car car #.bound? bound? #.nan? nan? #.fn? fn? #.sym? sym? #.compare compare #.fixnum? fixnum? #.atom? atom? #.= = #.num? num? #.* *)))
- caaaar #fn("n10<<<<:" #() caaaar) caaadr
- #fn("n10T<<:" #() caaadr) caaar #fn("n10<<<:" #() caaar) caadar
- #fn("n10<T<:" #() caadar) caaddr #fn("n10=T<:" #() caaddr) caadr
- #fn("n10T<:" #() caadr) caar #fn("n10<<:" #() caar) cadaar
- #fn("n10<<T:" #() cadaar) cadadr #fn("n10TT:" #() cadadr) cadar
+indexfor
+ #fn("n20KG0r2G20861523:02186162:2286187534870r287KMp4:" #(#fn(has?)
+ #fn(get)
+ #fn(put!)) bcode:indexfor 11)
+ bcode:stack #fn("n20r4G1M0r5G86L23;00r586p@30q40r486p:" #() bcode:stack 8) bounds-error
+ #fn("z020210P61:" #(#fn(raise) bounds-error) bounds-error 7) box-vars #fn("n2Ib68620086>2_486<^1161:" #(#fn("n10B3Q00<T3B070A21720<5153@30q4F<0=61:q:" #(emit
+ box caddr) 9)) box-vars 6)
+ bq-bracket #fn("n20H3=070710152e2:0<22CS01El2380700=P:707324710=1K~52e3e2:0<25CT01El2390260Te2:707027710T1K~52e3e2:0<28CP01El23500T:707029710T1K~52e3e2:70710152e2:" #(list
+ bq-process unquote cons 'unquote unquote-splicing copy-list 'unquote-splicing unquote-nsplicing
+ 'unquote-nsplicing) bq-bracket 11)
+ bq-bracket1 #fn("n20B3S00<20CL01El23500T:7122730=1K~52e3:730162:" #(unquote cons 'unquote
+ bq-process) bq-bracket1 10)
+ bq-process #fn("n20R380200e2:0]3T0717205115286<73C907486=P:757486e3:0H3400:0<26CB07327710T1KM52e3:0<28CV01El23?0790r2523500T:7:2;710=1K~52e3:7<7=052Jt07>0512?2@1>105286J807387P:87=JA07:87<7186152e3:2A7B87P7186152e162:Ib6862C186>2_486<^10q62:" #(quote
+ bq-process vec->list list vec apply quasiquote 'quasiquote unquote length= cons 'unquote any
+ splice-form? lastcdr #fn(map) #fn("n1700A62:" #(bq-bracket1) 7)
+ #fn(nconc) list* #fn("n20J;02071151P:0B3o00<22CX020731AEl23700=@C07425e2760=AK~52e252P:F<0=770<A521P62:2071760A521P51P:" #(nconc
+ reverse! unquote nreconc list 'unquote bq-process bq-bracket) 12)) bq-process 11)
+ builtin->instruction #fn("n120A0q63:" #(#fn(get)) #(#table(#.cadr cadr #.aset! aset! #.+ + #.- - #.equal? equal? #.eq? eq? #.builtin? builtin? #.not not #.cons? cons? #.cdr cdr #./ / #.div0 div0 #.set-car! set-car! #.vec vec #.set-cdr! set-cdr! #.< < #.aref aref #.for for #.cons cons #.apply apply #.eqv? eqv? #.vec? vec? #.list list #.car car #.bound? bound? #.nan? nan? #.fn? fn? #.sym? sym? #.compare compare #.fixnum? fixnum? #.atom? atom? #.= = #.num? num? #.* *)) 8)
+ caaaar #fn("n10<<<<:" #() caaaar 5) caaadr
+ #fn("n10T<<:" #() caaadr 5) caaar #fn("n10<<<:" #() caaar 5) caadar
+ #fn("n10<T<:" #() caadar 5) caaddr #fn("n10=T<:" #() caaddr 5) caadr
+ #fn("n10T<:" #() caadr 5) caar #fn("n10<<:" #() caar 5) cadaar
+ #fn("n10<<T:" #() cadaar 5) cadadr #fn("n10TT:" #() cadadr 5) cadar
+ #fn("n10<T:" #() cadar 5) caddar #fn("n10<=T:" #() caddar 5) cadddr
"n10<T:" #() cadar) caddar #fn("n10<=T:" #() caddar) cadddr
-fn("n10==T:" #() cadddr) caddr #4=#fn("n10=T:" #() caddr) call-with-values
- #fn("n205086B3@0A86<C90186=}2:18661:" #() #(#3=(*values*))) capture-var! #fn("n20r3G70186E5387;JG042186510r322861e152p4:" #(index-of
- #fn(length) #fn(nconc)) capture-var!)
- cdaaar #fn("n10<<<=:" #() cdaaar) cdaadr
+("n10=T:" #() caddr 5) call-with-values
+ #fn("n205086B3@0A86<C90186=}2:18661:" #() #(#3=(*values*)) 7) capture-var! #fn("n20r3G70186E5387;JG042186510r322861e152p4:" #(index-of
+ #fn(length) #fn(nconc)) capture-var! 12)
+ cdaaar #fn("n10<<<=:" #() cdaaar 5) cdaadr
+ #fn("n10T<=:" #() cdaadr 5) cdaar #fn("n10<<=:" #() cdaar 5) cdadar
ar) cdaddr #fn("n10=T=:" #() cdaddr) cdadr
- #fn("n10<<==:" #() cddaar) cddadr #fn("n10T==:" #() cddadr) cddar
+#fn("n10<===:" #() cdddar 5) cddddr
("n10T==:" #() cddadr) cddar
-0887283=23523q07401q895440r40r4GKMp4750183=530r40r4G8:UMp47608237027@40288:63:89[;3904798951892:Cf07089152J\\0212:517:d3P07;83r2523E07401q83T5447602:62:89B3N089<2<CF07=83513=07>01828364:8:360q@F07401q895440r40r4GKMp4750183=530r40r4G8;UMp48:360q@=00r40r4Gr/Mp48:3C07?018283898:8;67:760823702@@402A8;63:" #(in-env?
+517;d3P07<83r2523E07401q83T5447702;62:89B3N089<2=CF07>83513=07?01828364:8:360q@B07401q89544750K524760183=537508;U5248:360q@90750r/5248:3C07@018283898:8;67:770823702A@402B8;63:" #(in-env?
27@40288:63:89[;3904798951892:Cf07089152J\\0212:517:d3P07;83r2523E07401q83T5447602:62:89B3N089<2<CF07=83513=07>01828364:8:360q@F07401q895440r40r4GKMp4750183=530r40r4G8;UMp48:360q@=00r40r4Gr/Mp48:3C07?018283898:8;67:760823702@@402A8;63:" #(in-env?
-CF07=83513=07>01828364:8:360q@F07401q895440r40r4GKMp4750183=530r40r4G8;UMp48:360q@=00r40r4Gr/Mp48:3C07?018283898:8;67:760823702@@402A8;63:" #(in-env?
- #fn(top-level-value) length> 255 compile-in compile-arglist emit tcall.l call.l
- builtin->instruction cadr length= λ inlineable? compile-let compile-builtin-call tcall call) compile-app)
- compile-arglist #fn("n3202101>282524228261:" #(#fn(for-each)
- #fn("n170AFq0544Ar4Ar4GKMp:" #(compile-in))
- #fn(length)) compile-arglist)
+@402B8;63:" #(in-env?
+ #fn(top-level-value) length> 255 compile-in bcode:stack compile-arglist emit tcall.l call.l
+ builtin->instruction cadr length= λ inlineable? compile-let compile-builtin-call tcall call) compile-app 16)
+ compile-arglist #fn("n3202101>282524228261:" #(#fn(for-each)
+ #fn("n170AFq054471AK62:" #(compile-in
+ bcode:stack) 9)
<5447202352474018283=64:" #(compile-in
void emit pop compile-begin) compile-begin)
compile-builtin-call #fn("n7I202186850>3?;514227385q538<3I07483=8<52J=075858<52@30q4858=26CL086El23:07702862:770858663:8=29C708;60:8=2:C708;60:8=2;C]086El23:07702<62:86r2l23:07702=62:770858663:8=2>Cm086El23:07585K62:86Kl23:07702?62:86r2l23:07702@62:770858663:8=2ACL086El23:07702B62:770858663:8=2CCL086El23:07585K62:770858663:8=2DCN086El23<07702E2F63:770858663:8=2GCX086r2L23;07585r262:770823702H@402G8663:8=2ICb086r2l23:07702J62:r286L23?07708586r3~63:7585r262:7708562:" #(#0#
-0858663:8=2>Cm086El23:07585K62:86Kl23:07702?62:86r2l23:07702@62:770858663:8=2ACL086El23:07702B62:770858663:8=2CCL086El23:07585K62:770858663:8=2DCN086El23<07702E2F63:770858663:8=2GCX086r2L23;07585r262:770823702H@402G8663:8=2ICb086r2l23:07702J62:r286L23?07708586r3~63:7585r262:7708562:" #(#0#
- #fn("n0AEl239070FK62:7192FA63:" #(argc-error emit) num-compare)
+l23:07702?62:86r2l23:07702@62:770858663:8=2ACL086El23:07702B62:770858663:8=2CCL086El23:07585K62:770858663:8=2DCN086El23<07702E2F63:770858663:8=2GCX086r2L23;07585r262:770823702H@402G8663:8=2ICb086r2l23:07702J62:r286L23?07708586r3~63:7585r262:7708562:" #(#0#
+ #fn("n0AEl239070FK62:7192FA63:" #(argc-error emit) num-compare 8)
6El23<07702E2F63:770858663:8=2GCX086r2L23;07585r262:770823702H@402G8663:8=2ICb086r2l23:07702J62:r286L23?07708586r3~63:7585r262:7708562:" #(#0#
- arg-counts length= argc-error list emit loadnil < = + load0 add2 - neg sub2 * load1 /
+l < = + load0 add2 - neg sub2 * load1 /
neg sub2 * load1 /
vec loadv #() apply tapply aref aref2) compile-builtin-call)
compile-error #fn("z070210P}2:" #(error "compile error: ") compile-error) compile-f
-=863J0702185>18652;J904A<8661:q:" #(any #fn("n1A0Q;3404A:")) any-duplicates)
+4A<8661:q:" #(any #fn("n1A0Q;3404A:" 6)) any-duplicates 9)
plicates)
-cddr λ #fn(length) keyword-arg?
+keyword-arg?
ect-hash-table cons car
iota keyargs 255 vargc.l argc.l vargc argc emit-optional-arg-inits #fn(append)
-s compile-in ret values #fn(fn)
- encode-byte-code const-to-idx-vec) compile-f-)
- compile-if #fn("n420502050205083T718351728351B3;0738351@30q8;DC=07401828<64:8;J=07401828=64:7401q8;89554750268953475027885347401828<544823<07502852@;0750298:53475027895347401828=544750278:63:" #(#fn(gensym)
- caddr cdddr cadddr compile-in emit brn label ret jmp) compile-if)
- compile-in #fn("\x8740005000W4000J60q?4483R3<0700183D64:83H3\x97083EC:07102262:83KC:07102362:83DC:07102462:83J:07102562:7683513:07102762:7883513<0710298363:7102:8363:83<2;C<07<0183=63:83<RS;JD0483<Z;J;047=83<1523=07>01828364:83<892?CS07@83T513>07A018283T64:7102:83T63:892BC=07C01828364:892DC>07E018283=64:892FC;07G018363:892HCD07I2J183>22K01>262:892LC@07M018283=8465:892NC>07O018283=64:892PCE07Q0183T2D7R8351P64:892SCS07A01D83=B38083T@607T505447102U62:892VC\x97083T7W7R8351518;<<8;=8:R360q@>07X2Y2Z8:2[5448<3Y07\\8:8<8=<B;3F048=<<2HQ;3:047]8=<5153@30q47^018:8=<64:892_Cp07A01q2Hq83Te35447`7a835151360q@807b2c5147A01q7a83515447102_62:7>01828364:" #(compile-sym
- emit load0 load1 loadt loadnil void? loadvoid fits-i8 loadi8 loadv aset! compile-aset! in-env?
- compile-app quote self-evaluating? compile-in if compile-if begin compile-begin prog1
- compile-prog1 λ call-with-values #fn("n070AF62:" #(compile-f-))
- #fn("n270A21053413K02223AF>2152470A242515163:q:" #(emit loadv #fn(for-each)
- #fn("n170AF0q64:" #(compile-sym)) closure #fn(length)))
- and compile-and or compile-or while compile-while cddr return void ret set!
+ ret
+ values #fn(fn) encode-byte-code const-to-idx-vec) compile-f- 30)
+ compile-if #fn("n420502050205083T718351728351B3;0738351@30q8;DC=07401828<64:8;J=07401828=64:7401q8;89554750268953475027885347401828<544823<07502852@;0750298:53475027895347401828=544750278:63:" #(#fn(gensym)
+ caddr cdddr cadddr compile-in emit brn label ret jmp) compile-if 16)
+ compile-in #fn("\x8740005000W4000J60q?4483R3<0700183D64:83H3\x97083EC:07102262:83KC:07102362:83DC:07102462:83J:07102562:7683513:07102762:7883513<0710298363:7102:8363:83<2;C<07<0183=63:83<RS;JD0483<Z;J;047=83<1523=07>01828364:83<892?CS07@83T513>07A018283T64:7102:83T63:892BC=07C01828364:892DC>07E018283=64:892FC;07G018363:892HCD07I2J183>22K01>262:892LC@07M018283=8465:892NC>07O018283=64:892PCE07Q0183T2D7R8351P64:892SCS07A01D83=B38083T@607T505447102U62:892VC\x97083T7W7R8351518;<<8;=8:R360q@>07X2Y2Z8:2[5448<3Y07\\8:8<8=<B;3F048=<<2HQ;3:047]8=<5153@30q47^018:8=<64:892_Cp07A01q2Hq83Te35447`7a835151360q@807b2c5147A01q7a83515447102_62:7>01828364:" #(compile-sym
+ emit load0 load1 loadt loadnil void? loadvoid fits-i8 loadi8 loadv aset! compile-aset! in-env?
+ compile-app quote self-evaluating? compile-in if compile-if begin compile-begin prog1
+ compile-prog1 λ call-with-values #fn("n070AF62:" #(compile-f-) 7)
+ #fn("n270A21053413K02223AF>2152470A242515163:q:" #(emit loadv #fn(for-each)
+ #fn("n170AF0q64:" #(compile-sym) 9) closure #fn(length)) 9)
+ and compile-and or compile-or while compile-while cddr return void ret set!
)
#fn("n270A21053413K02223AF>2152470A242515163:q:" #(emit loadv #fn(for-each)
-ody type-error "set!" symbol "name" sym-set-doc lambda:vars compile-set!
- trycatch 1arg-lambda? caddr compile-error "trycatch: second form must be a 1-argument lambda") compile-in)
- compile-let #fn("n483<83=0r4G88T70018953718;727388518;528:537408=524258=1<521=P7608>827388515440r40r4G8<UMp4E8<L23A082J<0770288<63:q:" #(compile-arglist
- vars-to-env complex-bindings caddr box-vars #fn(nconc) compile-in emit shift) compile-let)
+m-set-doc lambda:vars compile-set!
+ trycatch 1arg-lambda? caddr compile-error "trycatch: second form must be a 1-argument lambda") compile-in 14)
+ compile-let #fn("n483<83=0r4G88T70018953718;727388518;528:537408=524258=1<521=P7608>827388515447708<U524E8<L23A082J<0780298<63:q:" #(compile-arglist
+ vars-to-env complex-bindings caddr box-vars #fn(nconc) compile-in bcode:stack emit shift) compile-let 17)
-arglist
vars-to-env complex-bindings caddr box-vars #fn(nconc) compile-in emit shift) compile-let)
-e-or)
- compile-prog1 #fn("n37001q82T544718251B3_00r40r4GKMp47201q718251544730245240r40r4Gr/Mp:q:" #(compile-in
+n("n37001q82T544718251B3W0720K5247301q71825154474025524720r/62:q:" #(compile-in
+ cddr bcode:stack compile-begin emit pop) compile-prog1 10)
44730248263:88<El288=T893<07588=51@9076082528:3o07308937027@40288;5340r40r4GKMp47201q835440r40r4Gr/Mp47302962:7201q8354489360q@>07:2;2<82525147302=8;63:" #(lookup-sym
global compile-in emit setg vinfo:index capture-var! loada loadc set-car! error #fn(str)
-("n783H3?0700182848665:83=H3@070018283<8665:86;J70421507001q83<865540r40r4GKMp486360q@9072023524720858;5340r40r4Gr/Mp486360q@907202452475018283=84858657486340q:720268;63:" #(compile-in
+=H3@070018283<8665:86;J70421507001q83<86554720K52486360q@9073024524730858;534720r/52486360q@907302552476018283=84858657486340q:730278;63:" #(compile-in
540r40r4GKMp486360q@9072023524720858;5340r40r4Gr/Mp486360q@907202452475018283=84858657486340q:720268;63:" #(compile-in
#fn(gensym) emit dup pop compile-short-circuit label) compile-short-circuit)
--circuit label) compile-short-circuit)
+rt-circuit 13)
251513@07502624825163:750278263:88<El23W0750287988=51534833A088=T3:07502:62:q:7502;7<08252534833A088=T3:07502:62:q:" #(lookup-sym
-833A088=T3:07502:62:q:" #(lookup-sym
- global #fn(const?) printable? #fn(top-level-value) emit loadv loadg loada vinfo:index car loadc
+okup-sym
+ global #fn(const?) printable? #fn(top-level-value) emit loadv loadg loada vinfo:index car loadc
ile-thunk #fn("n170q21q72051e362:" #(compile-f λ lower-def) compile-thunk)
-er-def) compile-thunk)
+ compile-while #fn("n4205020507101q7250544730K52474025885347101q82544740268953474027524730r/5247101q835447402888534740258963:" #(#fn(gensym)
2589534730265240r40r4Gr/Mp47101q835447302788534730248963:" #(#fn(gensym)
compile-in void emit label brn pop jmp) compile-while)
- complex-bindings-
- filter #fn("n120A062:" #(#fn(has?)))
- table-keys) complex-bindings)
- complex-bindings- #fn("n61J40q:0R3K0833D02001523;021840D63:q:0H;J80472051340q:0<23Co0200T1523Q021850TD534833>021840TD53@30q@30q474750511q83848566:0<26CU074770517817905152q82S;J50483848566:740<17:051838485562;2<1838485>40=52P:" #(#fn(memq)
- #fn(put!) quoted? set! complex-bindings- caddr λ lambda:body diff lambda:vars inlineable? #fn(map)
- #fn("n1700AqF929366:" #(complex-bindings-))) complex-bindings-)
- const-to-idx-vec #fn("n1200r2G51212285>10KG52485:" #(#fn(vec-alloc)
- #fn(for-each)
- #fn("n2A10p:")) const-to-idx-vec)
+ complex-bindings-
+ filter #fn("n120A062:" #(#fn(has?)) 7)
+ table-keys) complex-bindings 13)
+ complex-bindings- #fn("n61J40q:0R3K0833D02001523;021840D63:q:0H;J80472051340q:0<23Co0200T1523Q021850TD534833>021840TD53@30q@30q474750511q83848566:0<26CU074770517817905152q82S;J50483848566:740<17:051838485562;2<1838485>40=52P:" #(#fn(memq)
+ #fn(put!) quoted? set! complex-bindings- caddr λ lambda:body diff lambda:vars inlineable? #fn(map)
+ #fn("n1700AqF929366:" #(complex-bindings-) 11)) complex-bindings- 11)
+ const-to-idx-vec #fn("n1200r2G51212285>10KG52485:" #(#fn(vec-alloc)
+ #fn(for-each)
7=:" #(#0#
#fn("n382;3?0482El2;3504I:41360q@40I:41<qP087N4A<871=82;390470825163:" #(1-) copy-)) copy-list)
- #fn("n31J5082:A<01=01<5139082KM@408263:" #() count-)) count)
+6>1_51486<01E63:" #(#0#
9082KM@408263:" #() count-)) count)
delete-duplicates #fn("n1700rD523O02150Ib686228586>2_486<^10q62:0H3400:0<0=73858652390748661:85748651P:" #(length>
#fn(table) #fn("n20H38070161:21A0<523:0F<0=162:22A0<D534F<0=0<1P62:" #(reverse! #fn(has?)
@@ -260,146 +265,148 @@
8<12EQ;3b04892FCB00E82<2G88=PPp@J0892HCB00E82<2I88=PPp@30q;J@040E7J182P8852p^140:" #(#0#
#fn("n17002162:" #(member (load0 load1 loadt loadf loadnil loadvoid)) load?) car cdr cadr pop #fn(memq)
(loadv loadg setg) bcode:indexfor #fn(assq) ((loadv loadv.l) (loadg loadg.l) (setg setg.l) (loada
-) (loada
- loada.l)
- (seta seta.l) (box box.l)) 255 ((loadc
- loadc.l)) loada (0) loada0 (1) loada1 loadc loadc0 loadc1 brn not brnn eq? brne nreconc) emit)
- emit-optional-arg-inits #fn("n582B3\xa70205071022845347382513<07102452@30q471025895347607717883E8453q53q7982515447102:845347102;5247102<895347=0182=8384KM65:q:" #(#fn(gensym)
+r #fn(assq)
+ ((loadv loadv.l) (loadg loadg.l) (setg setg.l) (loada loada.l) (seta seta.l) (box box.l)) 255 ((loadc
+ loadc.l)) loada (0) loada0 (1) loada1 loadc loadc0 loadc1 brn not brnn eq? brne nreconc) emit 12)
+ emit-optional-arg-inits #fn("n582B3\xa70205071022845347382513<07102452@30q471025895347607717883E8453q53q7982515447102:845347102;5247102<895347=0182=8384KM65:q:" #(#fn(gensym)
+ emit bounda cddar dup brnn compile-in extend-env subseq cadar seta pop label
65:q:" #(#fn(gensym)
--arg-inits) emit-optional-arg-inits)
- encode-byte-code #fn("n1700517185512286517387r387r2ki2M2452255025502650qqEI8>87L23\xbc14868>G?<48<27CP02889868>KMG298;515348>r2M?>@\x8b12:8;2;7<883k08<8C2=C702>@X08C2?C702@@L08C2AC702B@@08C2CC702D@408<^1@408<525248>KM?>48>87L2;3804868>G?=42E8<2F523`0288:298;518=5342:8;883707G@407HE515248>KM?>@\xeb08<2ICH02:8;2J8=515248>KM?>@\xce08=X3\xc708<2E8?2K523H02:8;2J8=515248>KM?>@\x9f02E8?2L523\x8102:8;2J8=515248>KM?>42:8;2J868>G515248>KM?>48<2MCK02:8;2J868>G515248>KM?>@30q@E02:8;2N8=515248>KM?>^1@30q@\x9f.42O2P8;8889>38:5242Q8;61:" #(reverse!
- list->vec #fn(length) >= 65536 #fn(table) #fn(buffer) label #fn(put!)
+optional-arg-inits 13)
+ encode-byte-code #fn("n1700517185512286517387r387r2ki2M2452255025502650qqEI8>87L23\xbc14868>G?<48<27CP02889868>KMG298;515348>r2M?>@\x8b12:8;2;7<883k08<8C2=C702>@X08C2?C702@@L08C2AC702B@@08C2CC702D@408<^1@408<525248>KM?>48>87L2;3804868>G?=42E8<2F523`0288:298;518=5342:8;883707G@407HE515248>KM?>@\xeb08<2ICH02:8;2J8=515248>KM?>@\xce08=X3\xc708<2E8?2K523H02:8;2J8=515248>KM?>@\x9f02E8?2L523\x8102:8;2J8=515248>KM?>42:8;2J868>G515248>KM?>48<2MCK02:8;2J868>G515248>KM?>@30q@E02:8;2N8=515248>KM?>^1@30q@\x9f.42O2P8;8889>38:5242Q8;61:" #(reverse!
+ list->vec #fn(length) >= 65536 #fn(table) #fn(buffer) label #fn(put!)
3`0288:298;518=5342:8;883707G@407HE515248>KM?>@\xeb08<2ICH02:8;2J8=515248>KM?>@\xce08=X3\xc708<2E8?2K523H02:8;2J8=515248>KM?>@\x9f02E8?2L523\x8102:8;2J8=515248>KM?>42:8;2J868>G515248>KM?>48<2MCK02:8;2J868>G515248>KM?>@30q@E02:8;2N8=515248>KM?>^1@30q@\x9f.42O2P8;8889>38:5242Q8;61:" #(reverse!
list->vec #fn(length) >= 65536 #fn(table) #fn(buffer) label #fn(put!)
-8>KM?>^1@30q@\x9f.42O2P8;8889>38:5242Q8;61:" #(reverse!
+8;8889>38:5242Q8;61:" #(reverse!
uffer) label #fn(put!)
#fn(sizeof) #fn(io-write) #fn(get) Instructions jmp jmp.l brne brne.l brnn brnn.l brn brn.l #fn(memq)
- call.l tcall.l loadc.l box.l) (optargs keyargs)
- keyargs #fn(u8) #fn(for-each) #fn("n220A052421AF37072@407324921520~5162:" #(#fn(io-seek)
- #fn(io-write) s32 s16
+call.l loadc.l box.l) (optargs keyargs)
+ keyargs #fn(u8) #fn(for-each) #fn("n220A052421AF37072@407324921520~5162:" #(#fn(io-seek)
+ #fn(io-write) s32 s16
#fn(io-write) s32 s16
#fn(get)))
-)
+ find #fn("O200050007000W2000J7071?24W3000J7072?34W4000J60E?44W5000J60q?54W6000J60q?647324830>2125822684278528866::" #(#(:key
47324830>2125822684278528866::" #(#(:key
-3 :start 2 NIL NIL NIL NIL NIL NIL NIL NIL
- NIL NIL NIL NIL :from-end 4) identity equal? find-if #fn("n1AF062:") :key :start :end :from-end) find)
- find-if #fn("O200040006000W2000J7071?24W3000J60E?34W4000J60q?44W5000J60q?54Ib:228:230828:>3_514741838453?14853<075151?1@30q48:<161:" #(#(:key
+L NIL NIL NIL NIL NIL NIL NIL
+ NIL NIL NIL NIL :from-end 4) identity equal? find-if #fn("n1AF062:" 7) :key :start :end :from-end) find 15)
+ find-if #fn("O200040006000W2000J7071?24W3000J60E?34W4000J60q?44W5000J60q?54Ib:228:230828:>3_514741838453?14853<075151?1@30q48:<161:" #(#(:key
853<075151?1@30q48:<161:" #(#(:key
0 NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL :end 2 :start 1 NIL NIL NIL NIL NIL NIL NIL NIL
-513500<:92<0=61:" #() find-if-)
- subseq reverse!) find-if)
- fits-i8 #fn("n10Y;3<0470r\xaf0r\xb063:" #(>=) fits-i8) fn-disasm
- #fn("\x871000.///z2W1000J60q?140[3I07021122534735047460:@30q482JG07501E534735047460:@30q482<2605127051II282987>1?:514282:187>2?;514E2;8851b<I8<<8=L23\x8a242<2=888<>2q7>53E8<<L23907350@30q4E87K~2?|48<8<<KM_48>2@8?2A523[08;8>8<<r45348:897B888<<52G5148<8<<r4M_@\x1912@8?2C523V08;8>8<<K5348:89888<<GG5148<8<<KM_@\xea12@8?2D523e08;8>8<<K534702E888<<G8>2FC70r3@30EM515148<8<<KM_@\xac12@8?2G523\\08;8>8<<r4534702E7B888<<52515148<8<<r4M_@w12@8?2H523\xb808;8>8<<r88>2IC70r4@30EM534702E7B888<<52512J5248<8<<r4M_4702E7B888<<52515148<8<<r4M_48>2ICY0702J514702E7B888<<52512J5248<8<<r4M_@30q@\xe608?2Kc3^08;8>8<<r4534702E7B888<<52512J5248<8<<r4M_@\xb202@8?2L523b08;8>8<<r2534702M7N8<<7O888<<52M515248<8<<r2M_@w02@8?2P523b08;8>8<<r4534702M7N8<<7B888<<52M515248<8<<r4M_@<08;8>8<<E53^1^1@\xd0-:" #(princ
- " > " " // PC" newline void fn-disasm #fn(fn-code)
- #fn(fn-vals) #1# #fn("n10\\3F00[JA070504710qAKM63:72061:" #(newline fn-disasm print) print-val)
+:" #() find-if- 7)
+ subseq reverse!) find-if 9)
+ fits-i8 #fn("n10Y;3<0470r\xaf0r\xb063:" #(>=) fits-i8 8) fn-disasm
+ #fn("\x871000.///z2W1000J60q?140[3I07021122534735047460:@30q482JG07501E534735047460:@30q482<2605127051II282987>1?:514282:187>2?;514E2;8851b<I8<<8=L23\x8a242<2=888<>2q7>53E8<<L23907350@30q4E87K~2?|48<8<<KM_48>2@8?2A523[08;8>8<<r45348:897B888<<52G5148<8<<r4M_@\x1912@8?2C523V08;8>8<<K5348:89888<<GG5148<8<<KM_@\xea12@8?2D523e08;8>8<<K534702E888<<G8>2FC70r3@30EM515148<8<<KM_@\xac12@8?2G523\\08;8>8<<r4534702E7B888<<52515148<8<<r4M_@w12@8?2H523\xb808;8>8<<r88>2IC70r4@30EM534702E7B888<<52512J5248<8<<r4M_4702E7B888<<52515148<8<<r4M_48>2ICY0702J514702E7B888<<52512J5248<8<<r4M_@30q@\xe608?2Kc3^08;8>8<<r4534702E7B888<<52512J5248<8<<r4M_@\xb202@8?2L523b08;8>8<<r2534702M7N8<<7O888<<52M515248<8<<r2M_@w02@8?2P523b08;8>8<<r4534702M7N8<<7B888<<52M515248<8<<r4M_@<08;8>8<<E53^1^1@\xd0-:" #(princ
+ " > " " // PC" newline void fn-disasm #fn(fn-code)
+ #fn(fn-vals) #1# #fn("n10\\3F00[JA070504710qAKM63:72061:" #(newline fn-disasm print) print-val 9)
4702E7B888<<52515148<8<<r4M_48>2ICY0702J514702E7B888<<52512J5248<8<<r4M_@30q@\xe608?2Kc3^08;8>8<<r4534702E7B888<<52512J5248<8<<r4M_@\xb202@8?2L523b08;8>8<<r2534702M7N8<<7O888<<52M515248<8<<r2M_@w02@8?2P523b08;8>8<<r4534702M7N8<<7B888<<52M515248<8<<r4M_@<08;8>8<<E53^1^1@\xd0-:" #(princ
-b08;8>8<<r2534702M7N8<<7O888<<52M515248<8<<r2M_@w02@8?2P523b08;8>8<<r4534702M7N8<<7B888<<52M515248<8<<r4M_@<08;8>8<<E53^1^1@\xd0-:" #(princ
- " > " " // PC" newline void fn-disasm #fn(fn-code)
- #fn(fn-vals) #1# #fn("n10\\3F00[JA070504710qAKM63:72061:" #(newline fn-disasm print) print-val)
- #fn("n370A3U0FEl23N071A72151523A0A182ML237023@4024751K~512602765:" #(princ >= 1- " >" " " hex5
- ": " " ") print-inst)
- #fn(length) #fn(table-foldl) #fn("n382;J@041AF<Gl2;34040:") Instructions #fn("n1702161:" #(princ
+888<<52M515248<8<<r2M_@w02@8?2P523b08;8>8<<r4534702M7N8<<7B888<<52M515248<8<<r4M_@<08;8>8<<E53^1^1@\xd0-:" #(princ
+ " > " " // PC" newline void fn-disasm #fn(fn-code)
+ #fn(fn-vals) #1# #fn("n10\\3F00[JA070504710qAKM63:72061:" #(newline fn-disasm print) print-val 9)
+ #fn("n370A3U0FEl23N071A72151523A0A182ML237023@4024751K~512602765:" #(princ >= 1- " >" " " hex5
+ ": " " ") print-inst 10)
+ #fn(length) #fn(table-foldl) #fn("n382;J@041AF<Gl2;34040:" 7) Instructions #fn("n1702161:" #(princ
AF<Gl2;34040:") Instructions #fn("n1702161:" #(princ
-32-LE (loadv loadg setg)
+ada seta loadc call tcall list + - * / < = vec argc vargc loadi8 apply tapply closure box
* / < = vec argc vargc loadi8 apply tapply closure box
shift aref) #fn(num->str) aref (loada.l seta.l loadc.l argc.l vargc.l call.l tcall.l box.l) (optargs
-l.l tcall.l box.l) (optargs
- keyargs) keyargs " " bounda (jmp brne brnn brn) "@" hex5 ref-s16-LE (jmp.l brne.l brnn.l brn.l)) fn-disasm)
- foldl #fn("n382J401:700082<15282=63:" #(foldl) foldl) foldr
- #fn("n382J401:082<700182=5362:" #(foldr) foldr) get-defined-vars #fn("n170A<05161:" #(delete-duplicates) #(#2=(#fn("n10H340q:0<20Cd00=B3^00TR;37040Te1;JM040TB;3E0471051R;3:0471051e1:0<22C?07324A<0=52}2:q:" #(def
+yargs) keyargs " " bounda (jmp brne brnn brn) "@" hex5 ref-s16-LE (jmp.l brne.l brnn.l brn.l)) fn-disasm 20)
+ foldl #fn("n382J401:700082<15282=63:" #(foldl) foldl 9) foldr
+ #fn("n382J401:082<700182=5362:" #(foldr) foldr 10) get-defined-vars #fn("n170A<05161:" #(delete-duplicates) #(#2=(#fn("n10H340q:0<20Cd00=B3^00TR;37040Te1;JM040TB;3E0471051R;3:0471051e1:0<22C?07324A<0=52}2:q:" #(def
+ caadr begin nconc #fn(map)) #(#2#) 8))) 7)
<05161:" #(delete-duplicates) #(#2=(#fn("n10H340q:0<20Cd00=B3^00TR;37040Te1;JM040TB;3E0471051R;3:0471051e1:0<22C?07324A<0=52}2:q:" #(def
caadr begin nconc #fn(map)) #(#2#)))))
get-syntax #fn("n120710q63:" #(#fn(get) *syntax-environment*) get-syntax) getprop
#fn("\x8720003000W2000J60q?2420711q5387;3<04208708253;J50482:" #(#fn(get) *properties*) getprop)
-08708253;J50482:" #(#fn(get) *properties*) getprop)
- help-print-header #fn("O200020004000W2000J60q?24W3000J7021?3413A02223830>2152@V07483514823@074750512652@70770514785047860:" #(#(:kind
+t) *properties*) getprop 9)
+ help-print-header #fn("O200020004000W2000J60q?24W3000J7021?3413A02223830>2152@V07483514823@074750512652@70770514785047860:" #(#(:kind
kind
0 NIL NIL :lpad 1 NIL NIL) "" #fn(for-each) #fn("n170A51471F0P5147260:" #(princ print newline))
princ caddr " (group)" print newline) help-print-header)
hex5 #fn("n170210r@52r52263:" #(str-lpad #fn(num->str) #\0) hex5) identity
-;3i047185T51;3]04727385T52;3O047485T2552S;3@047685T270=5162:" #(λ
- list? every sym? length> 255 length= #fn(length)) inlineable?)
- io-readall #fn("n1205021850524228561:" #(#fn(buffer)
- #fn(io-copy)
- #fn(io->str)) io-readall)
- io-readline #fn("n12002162:" #(#fn(io-readuntil) #\newline) io-readline) io-readlines
- #fn("n17071062:" #(read-all-of io-readline) io-readlines) iota #fn("n17071062:" #(map-int
- identity) iota)
- keyword->sym #fn("n1200513K021220512386K24865153^161:0:" #(#fn(keyword?)
- #fn(sym)
- #fn(str)
- #fn(str-sub)
+04727385T52;3O047485T2552S;3@047685T270=5162:" #(λ
+ list? every sym? length> 255 length= #fn(length)) inlineable? 9)
+ io-readall #fn("n1205021850524228561:" #(#fn(buffer)
+ #fn(io-copy)
+ #fn(io->str)) io-readall 8)
+ io-readline #fn("n12002162:" #(#fn(io-readuntil) #\newline) io-readline 7) io-readlines
+ #fn("n17071062:" #(read-all-of io-readline) io-readlines 7) iota #fn("n17071062:" #(map-int
+ identity) iota 7)
+ keyword->sym #fn("n1200513K021220512386K24865153^161:0:" #(#fn(keyword?)
+ #fn(sym)
+ #fn(str)
+ #fn(str-sub)
->sym)
- #fn("n40S;J5040R340D:0B3Z00<R3T082;J504833<0702112263:A<0=1828364:0B3\xa500<B3\x9f073051R3Y0740<r252;JF04740<r352;390475051R360q@=070260<2715442873051513=0A<0=182D64:833<0702112963:A<0=1D8364:0B3>0702:0<27164:01C:07021162:702:027164:" #(compile-error
- "invalid argument list " ": optional arguments must come after required" caar length= caddar "invalid optional argument "
- " in list " #fn(keyword?) ": keyword arguments must come last."
- "invalid formal argument ") check-formals) #fn(map)
+ #fn("n40S;J5040R340D:0B3Z00<R3T082;J504833<0702112263:A<0=1828364:0B3\xa500<B3\x9f073051R3Y0740<r252;JF04740<r352;390475051R360q@=070260<2715442873051513=0A<0=182D64:833<0702112963:A<0=1D8364:0B3>0702:0<27164:01C:07021162:702:027164:" #(compile-error
+ "invalid argument list " ": optional arguments must come after required" caar length= caddar "invalid optional argument "
+ " in list " #fn(keyword?) ": keyword arguments must come last."
+ "invalid formal argument ") check-formals 9) #fn(map)
+ #fn("n10B390700<61:0:" #(keyword->sym) 6)
after required" caar length= caddar "invalid optional argument "
" in list " #fn(keyword?) ": keyword arguments must come last."
- #fn("n10B390700<61:0:" #(keyword->sym))
- to-proper) lambda-vars)
- lambda:body #fn("n170061:" #(caddr) lambda:body) lambda:vars
+ to-proper) lambda-vars 10)
+ lambda:body #fn("n170061:" #(caddr) lambda:body 6) lambda:vars
+ #fn("n1700T61:" #(lambda-vars) lambda:vars 6) last-pair #fn("n10=H3400:700=61:" #(last-pair) last-pair 6)
n1700T61:" #(lambda-vars) lambda:vars) last-pair #fn("n10=H3400:700=61:" #(last-pair) last-pair)
-th= #fn(length)) length=)
- length> #fn("n21EL2340D:1El23;00B;34040:0B3<0700=1K~62:121051L2:" #(length> #fn(length)) length>)
- list->vec #fn("n1202172063:" #(#fn(map) vec identity) list->vec) list-ref
+;34040:0B3<0700=1K~62:121051L2:" #(length> #fn(length)) length> 8)
+ list->vec #fn("n1202172063:" #(#fn(map) vec identity) list->vec 8) list-ref
+ #fn("n2700152<:" #(list-tail) list-ref 7) list-tail #fn("n2701E523400:710=1K~62:" #(<=
5>12385>1{:" #(#fn(file) :read #fn("n0Ib48420A84>2_484<^1III63:" #(#fn("n320A51JG0F<21A510721514735063:24A514737215161:" #(#fn(io-eof?)
-735063:24A514737215161:" #(#fn(io-eof?)
- #fn(read) load-process void #fn(io-close))))) #fn("n120A51421220e261:" #(#fn(io-close)
- #fn(raise) load-error))) load)
+id #fn(io-close)) 9)) 8)
+ #fn("n120A51421220e261:" #(#fn(io-close)
+ #fn(raise) load-error) 7)) load 7)
load-process #fn("n170061:" #(eval) load-process) lookup-sym
-3808288P:7201=82KM63:" #(global #fn(assq) lookup-sym) lookup-sym)
+obal #fn(assq) lookup-sym) lookup-sym 11)
;J804720513400:0<23C@024757605151e2:0<27CK02827e10Te185051e17905164:2:75062:" #(#0#
#fn("n170051B3N071051B3=02270051P@7073051@607450758551768551863D0278687e328748652P:87:" #(cddr
-y) quoted? def #1# lower-def
- expand-def λ #fn(nconc) lastcdr #fn(map)) lower-def)
- macrocall? #fn("n10<R;3904700<61:" #(get-syntax) macrocall?) macroexpand
- #fn("n1IIIIIIIIIIIb5b6b7b8b9b:b;b<b=b>b?208521_51420862286>1_514208723e1_51420882485868?87>4_5142089258?89>2_514208:268:>1_514208;278:8988>3_514208<288?8:8988>4_514208=29888?>2_514208>2:_514208?2;8?8>8;8<8=>5_5148?<0q62:" #(#0#
- #fn("n20Z;J904200152S:" #(#fn(assq)) top?) #fn("n10H3400:020d3400:0<B3P07105122CF023A<7405151A<0=5162:0<A<0=51P:" #(((begin))
- caar begin #fn(append) cdar) splice-begin) *expanded* #fn("n20H3400:A<201523:0F<051@300A<2115287;39047286512324758852152b987JA024269289>28662:Ib:8:278:928993>4_48:<^186518:I8;B3c0493<788;51QJC08;92<8;<89<52_@;08;798;51_48;=?;@\xfb/48::" #(begin
- def get-defined-vars #fn(nconc) #fn(map) list #fn("n1A<0F<62:")
- #fn("n10H3400:0<B3F02071051C<00<A<0=51P:F<0<92<52922223747585515292<52_493<85PA<0=51P:" #(def
+er-def expand-def λ #fn(nconc) lastcdr #fn(map)) lower-def 11)
+ macrocall? #fn("n10<R;3904700<61:" #(get-syntax) macrocall? 6) macroexpand
+ #fn("n1IIIIIIIIIIIb5b6b7b8b9b:b;b<b=b>b?208521_51420862286>1_514208723e1_51420882485868?87>4_5142089258?89>2_514208:268:>1_514208;278:8988>3_514208<288?8:8988>4_514208=29888?>2_514208>2:_514208?2;8?8>8;8<8=>5_5148?<0q62:" #(#0#
+ #fn("n20Z;J904200152S:" #(#fn(assq)) top? 7) #fn("n10H3400:020d3400:0<B3P07105122CF023A<7405151A<0=5162:0<A<0=51P:" #(((begin))
+ caar begin #fn(append) cdar) splice-begin 8) *expanded* #fn("n20H3400:A<201523:0F<051@300A<2115287;39047286512324758852152b987JA024269289>28662:Ib:8:278:928993>4_48:<^186518:I8;B3c0493<788;51QJC08;92<8;<89<52_@;08;798;51_48;=?;@\xfb/48::" #(begin
+ def get-defined-vars #fn(nconc) #fn(map) list #fn("n1A<0F<62:" 7)
+ #fn("n10H3400:0<B3F02071051C<00<A<0=51P:F<0<92<52922223747585515292<52_493<85PA<0=51P:" #(def
+ caar #fn(nconc) #fn(map) list get-defined-vars) 11) caar cdar) expand-body 14)
2071051C<00<A<0=51P:F<0<92<52922223747585515292<52_493<85PA<0=51P:" #(def
-fn(map) list get-defined-vars)) caar cdar) expand-body)
+ expand-body 14)
n20H3400:0<B3R00<=B3K070051A<7105115272051PP@400<F<0=152P:" #(caar cadar cddar) expand-lambda-list)
#fn("n10H3600e1:0<B3?070051A<0=51P:0<A<0=51P:" #(caar) l-vars)
-522225e1F<868:52e192<888:528764:" #(lastcdr cddr #fn(nconc)
+astcdr cddr #fn(nconc)
#fn(nconc)
#fn(map) list λ) expand-lambda)
#fn("n20=S;J6040TH3n070051J400:0T71700515187<87=883=072868852@30q42386A<89<152e3:740517505171700515188<88=F<86512627788;52152893?07287898653@30q42623e18792<868<52Pe193<8:8<5263:" #(cddr
separate-doc-from-body sym-set-doc def cdadr caadr #fn(nconc)
-fn(map) list) expand-define) #fn("n20T20A<71051222324F1>2865215252P:" #(begin cddr #fn(nconc)
+20A<71051222324F1>2865215252P:" #(begin cddr #fn(nconc)
nconc)
-525150Fe3:" #(compile-thunk))) expand-let-syntax)
- #fn("n20:" #() local-expansion-env) #fn("n20H3400:0<208615221A10>3873P087=B3I0A<87T0=f2F<72875115262:73051893>0A<890=f2162:87;J?0486RS;J60486Z3708860:8624C400:8625C:092<0162:8626C:093<0162:8627C:094<0162:8860:" #(#fn(assq)
+xpand-let-syntax 12)
+ #fn("n20:" #() local-expansion-env 4) #fn("n20H3400:0<208615221A10>3873P087=B3I0A<87T0=f2F<72875115262:73051893>0A<890=f2162:87;J?0486RS;J60486Z3708860:8624C400:8625C:092<0162:8626C:093<0162:8627C:094<0162:8860:" #(#fn(assq)
+ #fn("n0Ib48420AF84>3_484<^19261:" #(#fn("n10H3400:0<H3700<@90A<0<F5292<0=51P:" 7)) 6) caddr
24C400:8625C:092<0162:8626C:093<0162:8627C:094<0162:8860:" #(#fn(assq)
-3_484<^19261:" #(#fn("n10H3400:0<H3700<@90A<0<F5292<0=51P:"))) caddr
- macrocall? quote λ def let-syntax) expand-in)) macroexpand)
- macroexpand-1 #fn("n10H3400:7005185390850=}2:0:" #(macrocall?) macroexpand-1)
- make-code-emitter #fn("n0q2050EqEo5:" #(#fn(table)) make-code-emitter)
- make-perfect-hash-table #fn("n1Ib5208521_514Ib6862285860>3_486<^12305161:" #(#1#
- #fn("n270712205151162:" #(mod0 abs #fn(hash)) $hash-keyword)
- #fn("n120r20i2q52Ib68621A085F86>5_486<^19261:" #(#fn(vec-alloc)
- #fn("n10B3p070051r2A<85F52i29286G3;093<FKM61:928685p49286KM71051p494<0=61:92:" #(caar
- cdar)))) #fn(length)) make-perfect-hash-table)
+ax) expand-in 12)) macroexpand 18)
+ macroexpand-1 #fn("n10H3400:7005185390850=}2:0:" #(macrocall?) macroexpand-1 7)
+ make-code-emitter #fn("n0q2050EqEEo6:" #(#fn(table)) make-code-emitter 10)
+ make-perfect-hash-table #fn("n1Ib5208521_514Ib6862285860>3_486<^12305161:" #(#1#
+ #fn("n270712205151162:" #(mod0 abs #fn(hash)) $hash-keyword 8)
+ #fn("n120r20i2q52Ib68621A085F86>5_486<^19261:" #(#fn(vec-alloc)
+ #fn("n10B3p070051r2A<85F52i29286G3;093<FKM61:928685p49286KM71051p494<0=61:92:" #(caar
+ cdar) 10)) 7) #fn(length)) make-perfect-hash-table 8)
+ make-system-image #fn("n120021222354247576Dw54Dw64278788>2288685>22989>1{89504:" #(#fn(file)
#(#fn(file)
--hooks*
- *print-pretty* *print-width* *print-readably* *print-level*
- *print-length* *os-name* *interactive* *prompt* *os-version* ptr)
- *print-pretty* *print-readably* #fn("n0Aw04Fw1:" #(*print-pretty* *print-readably*))
- #fn("n07021A>1722350245252752677842678845253f22985F5242:F7;52^1^142<F61:" #(filter #fn("n10Z;3u0420051S;3j0421051[S;JC0422051222105151dS;3I04230A52S;3=04242105151S:" #(#fn(const?)
- #fn(top-level-value) #fn(str) #fn(memq) #fn(io?))) sort #fn(environment) #.< nconc #fn(map) list
- top-level-value #fn(write)
- #fn(io-write)
- *linefeed* #fn(io-close)))
+ *print-length* *os-name* *interactive* *prompt* *os-version* ptr)
+ *print-pretty* *print-readably* #fn("n0Aw04Fw1:" #(*print-pretty* *print-readably*) 4)
+ #fn("n07021A>1722350245252752677842678845253f22985F5242:F7;52^1^142<F61:" #(filter #fn("n10Z;3u0420051S;3j0421051[S;JC0422051222105151dS;3I04230A52S;3=04242105151S:" #(#fn(const?)
+ #fn(top-level-value) #fn(str) #fn(memq) #fn(io?)) 8) sort #fn(environment) #.< nconc #fn(map)
+ list top-level-value
+ #fn(write)
+ #fn(io-write)
+ *linefeed* #fn(io-close)) 12)
+ #fn("n1A50420061:" #(#fn(raise)) 6)) make-system-image 11)
61:" #(#fn(raise)))) make-system-image)
map! #fn("n21I1B3B04101<51_41=?1@\x1d/4:" #() map!) map-int
-00015182K~53P:" #(nestlist) nestlist)
+#fn("n10EL2:" #() negative? 6) nestlist #fn("n3E82L2;3B041700015182K~53P:" #(nestlist) nestlist 10)
" #(*io-out* #fn(io-write)
*linefeed* void) newline)
nreconc #fn("n2701062:" #(reverse!-) nreconc) odd?
#fn("n170051S:" #(even?) odd?) partition #fn("n2I2021?65148601qe1qe164:" #(#0#
- #fn("n48283PI1B3Z0401<513?0821<qPN=?2@<0831<qPN=?341=?1@\x05/47088<=88==62:" #(values) partition-)) partition)
+83PI1B3Z0401<513?0821<qPN=?2@<0831<qPN=?341=?1@\x05/47088<=88==62:" #(values) partition- 8)) partition 10)
62:" #(values) partition-)) partition)
positive? #fn("n1E0L2:" #() positive?) princ
#fn("z070qw042185>1220>12386>1{86504:" #(*print-readably* #fn("n0Aw0:" #(*print-readably*))
@@ -406,121 +413,121 @@
#fn("n1A50420061:" #(#fn(raise)))) princ)
print #fn("z02071062:" #(#fn(for-each) write) print) print-exception
#fn("n170051;3N04700<51;3C04217205151;35040<853700=@30086;3?0486<R;360486<87;360486=853O0732485<512585T257685512756@30q48728C\x84073295147:88r252360q@A07388<2752488=?842;2<7=8851524732>88<2?2@88T51275547A88T51@M1872BCH0732C88T2D5347A88<51@01872EC@0732F88<2G53@\x1b0872HCB0732I5147388f2@\x040872JC?07K88<514I:@\xf00872LCB0732M5147388f2@\xd90872NCB0732O5147388f2@\xc20872PC>0732Q88<52@\xaf0872RCR0732S88<513702T@402U5147A88<51@\x880872VCB0732W5147388f2@q0872XCB0732Y5147388f2@Z0872ZQ;J804872[Q3;07388f2@?0732\\5147A865147]60:" #(list?
-512585T257685512756@30q48728C\x84073295147:88r252360q@A07388<2752488=?842;2<7=8851524732>88<2?2@88T51275547A88T51@M1872BCH0732C88T2D5347A88<51@01872EC@0732F88<2G53@\x1b0872HCB0732I5147388f2@\x040872JC?07K88<514I:@\xf00872LCB0732M5147388f2@\xd90872NCB0732O5147388f2@\xc20872PC>0732Q88<52@\xaf0872RCR0732S88<513702T@402U5147A88<51@\x880872VCB0732W5147388f2@q0872XCB0732Y5147388f2@Z0872ZQ;J804872[Q3;07388f2@?0732\\5147A865147]60:" #(list?
+5T257685512756@30q48728C\x84073295147:88r252360q@A07388<2752488=?842;2<7=8851524732>88<2?2@88T51275547A88T51@M1872BCH0732C88T2D5347A88<51@01872EC@0732F88<2G53@\x1b0872HCB0732I5147388f2@\x040872JC?07K88<514I:@\xf00872LCB0732M5147388f2@\xd90872NCB0732O5147388f2@\xc20872PC>0732Q88<52@\xaf0872RCR0732S88<513702T@402U5147A88<51@\x880872VCB0732W5147388f2@q0872XCB0732Y5147388f2@Z0872ZQ;J804872[Q3;07388f2@?0732\\5147A865147]60:" #(list?
347A88<51@01872EC@0732F88<2G53@\x1b0872HCB0732I5147388f2@\x040872JC?07K88<514I:@\xf00872LCB0732M5147388f2@\xd90872NCB0732O5147388f2@\xc20872PC>0732Q88<52@\xaf0872RCR0732S88<513702T@402U5147A88<51@\x880872VCB0732W5147388f2@q0872XCB0732Y5147388f2@Z0872ZQ;J804872[Q3;07388f2@?0732\\5147A865147]60:" #(list?
-88f2@\xd90872NCB0732O5147388f2@\xc20872PC>0732Q88<52@\xaf0872RCR0732S88<513702T@402U5147A88<51@\x880872VCB0732W5147388f2@q0872XCB0732Y5147388f2@Z0872ZQ;J804872[Q3;07388f2@?0732\\5147A865147]60:" #(list?
+872NCB0732O5147388f2@\xc20872PC>0732Q88<52@\xaf0872RCR0732S88<513702T@402U5147A88<51@\x880872VCB0732W5147388f2@q0872XCB0732Y5147388f2@Z0872ZQ;J804872[Q3;07388f2@?0732\\5147A865147]60:" #(list?
732W5147388f2@q0872XCB0732Y5147388f2@Z0872ZQ;J804872[Q3;07388f2@?0732\\5147A865147]60:" #(list?
-c #fn(io-filename) ":" caddr ": " type-error "type error: " length= #fn(for-each)
- #fn("n17002162:" #(princ ": ")) cddr "expected " ", got " #fn(type-of) print bounds-error "index "
+ame) ":" caddr ": " type-error "type error: " length= #fn(for-each)
+ #fn("n17002162:" #(princ ": ") 7) cddr "expected " ", got " #fn(type-of) print bounds-error "index "
unds-error "index "
-t-exception parse-error "parsing error: " arg-error "arguments error: " key-error "key not found: "
- const-error #fn(keyword?) "keywords are read-only: "
+rror "parsing error: " arg-error "arguments error: " key-error "key not found: "
+ const-error #fn(keyword?) "keywords are read-only: "
rd?) "keywords are read-only: "
"tried to modify a constant: " io-error "I/O error: " assert-failed "assertion failed: "
--error "*** Unhandled exception: " newline) print-exception)
- print-stack-trace #fn("n1IIb5b620852185>1_51420862285>1_5147374252627505252Eb82829868788>37:05162:" #(#0#
- #fn("n32005182P2105121151C?022232487e361:25051E76278851512888A187>4|:" #(#fn(fn-name)
+ption: " newline) print-exception 15)
+ print-stack-trace #fn("n1IIb5b620852185>1_51420862285>1_5147374252627505252Eb82829868788>37:05162:" #(#0#
+ #fn("n32005182P2105121151C?022232487e361:25051E76278851512888A187>4|:" #(#fn(fn-name)
#fn(fn-code)
#fn(raise) thrown-value
- ffound #fn(fn-vals) 1-
- #fn(length)
- #fn("n170A0G513>0F<A0G929363:q:" #(closure?))) find-in-f)
- #fn("n220A01>321{863E0722374758651522662:0[38027061:28:" #(#fn("n02021AF>292524q:" #(#fn(for-each)
- #fn("n1A<0Fq63:")))
+ ffound #fn(fn-vals) 1-
+ #fn(length)
+ #fn("n170A0G513>0F<A0G929363:q:" #(closure?) 8)) find-in-f 10)
+ #fn("n220A01>321{863E0722374758651522662:0[38027061:28:" #(#fn("n02021AF>292524q:" #(#fn(for-each)
+ #fn("n1A<0Fq63:" 8)) 7)
#fn("n1A<0Fq63:")))
- #fn("n10B3F00<20C?00T21C8072061:23061:" #(thrown-value
+ #fn("n10B3F00<20C?00T21C8072061:23061:" #(thrown-value
#fn("n10B3F00<20C?00T21C8072061:23061:" #(thrown-value
-ffound caddr #fn(raise))) str-join #fn(map) str reverse! "/" #fn(fn-name) "λ") fname) filter
+n #fn(map) str reverse! "/" #fn(fn-name) "λ") fname 10) filter
me) filter
-) #fn(for-each) #fn("n17021A<0KGF52524r2722305151240>1|470257652492<El23?0770KG0EG52@30q49292<KM_:" #(princ
+GF52524r2722305151240>1|470257652492<El23?0770KG0EG52@30q49292<KM_:" #(princ
"(" 1- #fn(length) #fn("n1702151472A0G61:" #(princ " " print)) ")" *linefeed* fn-disasm))
-rse!) print-stack-trace)
+ print-to-str #fn("z02050212285>10524238561:" #(#fn(buffer)
n(buffer)
#fn(for-each)
#fn("n1200A62:" #(#fn(write)))
-@F02250237118853488?7^14238708253482:" #(#fn(get)
- *properties* #fn(table)
- #fn(put!)) putprop)
- quote-value #fn("n1700513400:210e2:" #(self-evaluating? quote) quote-value) quoted?
- #fn("n10<20Q:" #(quote) quoted?) random #fn("n1200513<0712250062:23500i2:" #(#fn(int?)
- mod #fn(rand) #fn(rand-double)) random)
- read-all #fn("n17071062:" #(read-all-of read) read-all) read-all-of
- #fn("n2Ib686201860>3_486<^1q015162:" #(#fn("n220A5138071061:F<10P92A5162:" #(#fn(io-eof?)
- reverse!))) read-all-of)
+4238708253482:" #(#fn(get)
+ *properties* #fn(table)
+ #fn(put!)) putprop 10)
+ quote-value #fn("n1700513400:210e2:" #(self-evaluating? quote) quote-value 6) quoted?
+ #fn("n10<20Q:" #(quote) quoted? 6) random #fn("n1200513<0712250062:23500i2:" #(#fn(int?)
+ mod #fn(rand) #fn(rand-double)) random 7)
+ read-all #fn("n17071062:" #(read-all-of read) read-all 7) read-all-of
+ #fn("n2Ib686201860>3_486<^1q015162:" #(#fn("n220A5138071061:F<10P92A5162:" #(#fn(io-eof?)
+ reverse!) 8)) read-all-of 8)
-s16-LE)
- #fn(ash)) ref-s32-LE)
+ #fn(ash)) ref-s32-LE 12)
#fn(ash)) ref-s32-LE)
remprop #fn("n220711q5386;3F042286052;3:042386062:" #(#fn(get) *properties* #fn(has?)
#fn(del!)) remprop)
- *io-out* #0#
- #fn("n02021{227351S;3q047484517585513M07584513@076504277851@30q@=079855147:5047;85w<61:" #(#fn("n0207122D63:" #(#fn(read)
- *io-in* :whitespace)) #fn("n1207151422061:" #(#fn(io-discardbuffer) *io-in* #fn(raise)))
+ *io-out* #0#
+ #fn("n02021{227351S;3q047484517585513M07584513@076504277851@30q@=079855147:5047;85w<61:" #(#fn("n0207122D63:" #(#fn(read)
+ *io-in* :whitespace) 8) #fn("n1207151422061:" #(#fn(io-discardbuffer) *io-in* #fn(raise)) 6)
o-in* :whitespace)) #fn("n1207151422061:" #(#fn(io-discardbuffer) *io-in* #fn(raise)))
#fn(io-eof?) *io-in* load-process void? *prompt* #fn(io-flush) *io-out* print newline void that) prompt)
- #fn("n020A>121{370F<60:q:" #(#fn("n0A<60:")
+ #fn("n020A>121{370F<60:q:" #(#fn("n0A<60:" 5)
n1700514D:" #(top-level-exception-handler))) reploop) newline) repl)
-#(reverse-) revappend) reverse
+
0q062:" #(reverse-) reverse) reverse! #fn("n170q062:" #(reverse!-) reverse!)
reverse!- #fn("n2I1B3B041=101?04N4?1@\x1d/40:" #() reverse!-) reverse-
#fn("n21J400:701<0P1=62:" #(reverse-) reverse-) rune? #fn("n12005121Q:" #(#fn(type-of)
- rune) rune?)
- self-evaluating? #fn("n120051S;3Z040H;36040RS;JK0421051;3A040R;3:04022051Q:" #(#fn(gensym?)
- #fn(const?) #fn(top-level-value)) self-evaluating?)
+ rune) rune? 6)
+ self-evaluating? #fn("n120051S;3Z040H;36040RS;JK0421051;3A040R;3:04022051Q:" #(#fn(gensym?)
+ #fn(const?) #fn(top-level-value)) self-evaluating? 7)
W1000J60q?14I2021?65140<0=2287513F01JB0883=07388871P62:13X02487513O086258751513B07388=8788<P1P62:761510P:" #(#0#
-P:" #(#0#
+1L2;3i04210K5222Q;3[04210r25223Q;3L04210r35224Q;3=04210r45225Q:" #(#fn(str-length)
=04210r45225Q:" #(#fn(str-length)
-)
- #\d #\o #\c #\-) doc?)
- #fn(str?) separate-doc-from-body #fn(keyword?) #fn(str) reverse) separate-doc-from-body)
+ #\d #\o #\c #\-) doc? 7)
+ #fn(str?) separate-doc-from-body #fn(keyword?) #fn(str) reverse) separate-doc-from-body 11)
+ set-syntax! #fn("n220710163:" #(#fn(put!) *syntax-environment*) set-syntax! 8) sort
set-syntax! #fn("n220710163:" #(#fn(put!) *syntax-environment*) set-syntax!) sort
#fn("O200010003000W2000J7071?240=J400:0<7223182870>42418287>362:" #(#(:key 0) identity
- call-with-values #fn("n07021AF92>393=62:" #(partition
- #fn("n1AF051F925162:"))) #fn("n220710A22F5492e1711A22F5463:" #(#fn(nconc) sort :key))) sort)
- splice-form? #fn("n10B;3X040<20Q;JN040<21Q;JD040<22Q;3:04730r252;J704022Q:" #(unquote-splicing
+-values #fn("n07021AF92>393=62:" #(partition
+ #fn("n1AF051F925162:" 8)) 7) #fn("n220710A22F5492e1711A22F5463:" #(#fn(nconc) sort :key) 12)) sort 8)
+ splice-form? #fn("n10B;3X040<20Q;JN040<21Q;JD040<22Q;3:04730r252;J704022Q:" #(unquote-splicing
ote length>) splice-form?)
-fn(buffer)
+ #fn(io-write)
#fn(for-each)
#fn("n120AF52420A062:" #(#fn(io-write)))
- str-lpad #fn("n3207182122051~52062:" #(#fn(str) str-rep #fn(str-length)) str-lpad)
- str-map #fn("n2205021151EI8887L23O0422860231885251524748851?8@\f/^14258661:" #(#fn(buffer)
- #fn(str-length) #fn(io-putrune) #fn(str-rune) 1+ #fn(io->str)) str-map)
+182122051~52062:" #(#fn(str) str-rep #fn(str-length)) str-lpad 10)
+ str-map #fn("n2205021151EI8887L23O0422860231885251524748851?8@\f/^14258661:" #(#fn(buffer)
+ #fn(str-length) #fn(io-putrune) #fn(str-rune) 1+ #fn(io->str)) str-map 13)
r)) str-map)
-ail #fn("n2200162:" #(#fn(str-sub)) str-tail) str-trim
+(str-sub)) str-tail 7) str-trim
82288>1_5142305124087<01E895488<082895363:" #(#0#
- #fn("n48283L23P02012108252523A0A<017282518364:82:" #(#fn(str-find)
- #fn(str-rune) 1+) trim-start) #fn("n3E82L23R020121072825152523?0A<0172825163:82:" #(#fn(str-find)
- #fn(str-rune)
- 1-) trim-end)
+ #fn("n48283L23P02012108252523A0A<017282518364:82:" #(#fn(str-find)
+ #fn(str-rune) 1+) trim-start 9) #fn("n3E82L23R020121072825152523?0A<0172825163:82:" #(#fn(str-find)
+ #fn(str-rune)
1-) trim-end)
#fn(str-length)
- #fn(str-length)
+ #fn(str-length)
#fn(str-sub)) str-trim)
subseq #fn("\x8720003000W2000J60q?24IIb77007115152360q@90722315247418252360q@=07225182e252482;3L0470071825152S;3;0472268252427872882187>3_51427298201>3?85147:0513:087<0162:0]390887;61:7<0513C02=051T882>89>161:q:" #(length>
-07225182e252482;3L0470071825152S;3;0472268252427872882187>3_51427298201>3?85147:0513:087<0162:0]390887;61:7<0513C02=051T882>89>161:q:" #(length>
+0003000W2000J60q?24IIb77007115152360q@90722315247418252360q@=07225182e252482;3L0470071825152S;3;0472268252427872882187>3_51427298201>3?85147:0513:087<0162:0]390887;61:7<0513C02=051T882>89>161:q:" #(length>
;61:7<0513C02=051T882>89>161:q:" #(length>
- "start" <= "start <= end" "end" #0#
+:7<0513C02=051T882>89>161:q:" #(length>
0=7115162:" #(copy-list 1-) subseq-l)
-92~5192718551228692F>3|486:" #(#fn(length) 1- #fn("n1A0F~920Gp:")) subseq-av)
+2:" #(copy-list 1-) subseq-l 8)
v)
-arr-alloc)))) subseq)
- sym-set-doc #fn("z2Ib720872187>1_51422151883601@401<88360q@401=2387<825224Z3\xb40893\xaf0258926528<<8<=77288>528?;3H04298?51297:8?2;2<5351~8?;3?04232=8@>18>52748=8AP26527>02?8B5348:3>07>02@8:53@30q^1^1^1^1^1^1^1@30q48;B3[07A02B527C2D8<>18;527>02B2E8<8=5253^1^1@30q47F60:" #(#0#
+st? vec-alloc arr? #fn(type-of) #fn("n120A0E63:" #(#fn(arr-alloc)) 8)) subseq 10)
+ sym-set-doc #fn("z2Ib720872187>1_51422151883601@401<88360q@401=2387<825224Z3\xb40893\xaf0258926528<<8<=77288>528?;3H04298?51297:8?2;2<5351~8?;3?04232=8@>18>52748=8AP26527>02?8B5348:3>07>02@8:53@30q^1^1^1^1^1^1^1@30q48;B3[07A02B527C2D8<>18;527>02B2E8<8=5253^1^1@30q47F60:" #(#0#
?51297:8?2;2<5351~8?;3?04232=8@>18>52748=8AP26527>02?8B5348:3>07>02@8:53@30q^1^1^1^1^1^1^1@30q48;B3[07A02B527C2D8<>18;527>02B2E8<8=5253^1^1@30q47F60:" #(#0#
-07A02B527C2D8<>18;527>02B2E8<8=5253^1^1@30q47F60:" #(#0#
+527>02?8B5348:3>07>02@8:53@30q^1^1^1^1^1^1^1@30q48;B3[07A02B527C2D8<>18;527>02B2E8<8=5253^1^1@30q47F60:" #(#0#
085A<0=51P:" #(length> subseq) formals-clean)
-5222Q;34040:" #(#fn(str-length)
+-join #fn(str-split) "\n" any #fn("n1E20051L2;3B04210E5222Q;34040:" #(#fn(str-length)
2390220A62:0:" #(<= #fn(length)
-(str-sub)))
+tra* getprop *formals-list* filter #fn("n1700A52S:" #(member) 7)
))
- #fn(table-foldl)
- #fn("n320A0163:" #(#fn(put!)))) table-clone)
+ #fn(table-foldl)
+ #fn("n320A0163:" #(#fn(put!)) 8)) table-clone 9)
fn("n320A0163:" #(#fn(put!)))) table-clone)
- #fn(table-foldl)
- #fn("n320A1063:" #(#fn(put!)))) table-invert)
+ #fn(table-foldl)
+ #fn("n320A1063:" #(#fn(put!)) 8)) table-invert 9)
invert)
-(table-foldl)
- #fn("n3082P:")) table-keys)
- table-pairs #fn("n12021q063:" #(#fn(table-foldl)
+ #fn("n3082P:" 6)) table-keys 8)
+ table-pairs #fn("n12021q063:" #(#fn(table-foldl)
+ #fn("n301P82P:" 6)) table-pairs 8)
+ table-values #fn("n12021q063:" #(#fn(table-foldl)
foldl)
- #fn("n3182P:")) table-values)
- to-proper #fn("n10J400:0H3600e1:0<700=51P:" #(to-proper) to-proper)
- top-level-exception-handler #fn("n17071w042285>1230>12486>1{86504:" #(*io-out* *stderr*
+00:0H3600e1:0<700=51P:" #(to-proper) to-proper 7)
+ top-level-exception-handler #fn("n17071w042285>1230>12486>1{86504:" #(*io-out* *stderr*
+ #fn("n0Aw0:" #(*io-out*) 4)
--- a/src/compiler.sl
+++ b/src/compiler.sl
@@ -1,13 +1,18 @@
;;;; built-in compiler
;; code generation state, constant tables, bytecode encoding
-(def (make-code-emitter) (vec NIL (table) 0 NIL 0))
+(def (make-code-emitter) (vec NIL (table) 0 NIL 0 0))
(defmacro (bcode:code b) `(aref ,b 0))
(defmacro (bcode:ctable b) `(aref ,b 1))
(defmacro (bcode:nconst b) `(aref ,b 2))
(defmacro (bcode:cenv b) `(aref ,b 3))
(defmacro (bcode:sp b) `(aref ,b 4))
-(defmacro (bcode:stack b n) `(aset! ,b 4 (+ (bcode:sp ,b) ,n)))
+(defmacro (bcode:spmax b) `(aref ,b 5))
+(def (bcode:stack b n)
+ (let ((sp (+ (bcode:sp b) n)))
+ (when (> sp (bcode:spmax b))
+ (aset! b 5 sp))
+ (aset! b 4 sp)))
(def (compile-error . rest)
(apply error (cons "compile error: " rest)))
@@ -745,7 +750,8 @@
(when opta
(emit-optional-arg-inits g env opta vars nreq))
- (let* {[bpvars (if suppl ; "supplied?" are placed at the current frame start
+ (let* {[args vars]
+ [bpvars (if suppl ; "supplied?" are placed at the current frame start
(append vars '(nil nil nil nil) suppl)
vars)]
[vars (if suppl (append vars suppl) vars)]
@@ -752,13 +758,14 @@
[newenv (extend-env env bpvars (complex-bindings (lambda:body f) vars))]}
(box-vars g (car newenv))
;; set initial stack pointer
- (aset! g 4 (+ (length vars) 4))
+ (bcode:stack g (+ (length vars) 4))
;; compile body and return
(compile-in g newenv T (lambda:body f))
(emit g 'ret)
(values (fn (encode-byte-code (bcode:code g))
(const-to-idx-vec g)
- name)
+ name
+ (- (bcode:spmax g) (length args)))
(bcode:cenv g)))))
;; disassembler
--- a/src/maxstack.h
+++ /dev/null
@@ -1,171 +1,0 @@
-#if BYTE_ORDER == BIG_ENDIAN
-#undef SWAP_INT32
-#undef SWAP_INT16
-#define SWAP_INT32(a) \
- do{ \
- uint8_t *x = (void*)a, y; \
- y = x[0]; x[0] = x[3]; x[3] = y; \
- y = x[1]; x[1] = x[2]; x[2] = y; \
- }while(0)
-#define SWAP_INT16(a) \
- do{ \
- uint8_t *x = (void*)a, y; \
- y = x[0]; x[0] = x[1]; x[1] = y; \
- }while(0)
-#else
-#define SWAP_INT32(a)
-#define SWAP_INT16(a)
-#endif
-
-sl_purefn
-static int
-compute_maxstack(u8int *code, usize len)
-{
- u8int *ip = code, *end = code+len;
- int i, n, sp = 0, maxsp = 0;
-
- while(ip < end){
- sl_op op = *ip++;
- switch(op){
- case OP_LOADA: case OP_LOADI8: case OP_LOADV: case OP_LOADG:
- ip++; // fallthrough
- case OP_LOADA0: case OP_LOADA1:
- case OP_DUP: case OP_LOADT: case OP_LOADNIL: case OP_LOADVOID:
- case OP_LOAD0:
- case OP_LOAD1: case OP_LOADC0:
- case OP_LOADC1:
- sp++;
- break;
-
- case OP_POP: case OP_RET:
- case OP_CONS: case OP_SETCAR: case OP_SETCDR:
- case OP_EQP: case OP_EQVP: case OP_EQUALP: case OP_ADD2: case OP_SUB2:
- case OP_DIV0: case OP_COMPARE:
- case OP_AREF2: case OP_TRYCATCH:
- sp--;
- break;
-
- case OP_AREF:
- n = 2 + *ip++;
- sp -= n;
- break;
-
- case OP_ARGC: case OP_SETG: case OP_SETA: case OP_BOX:
- ip++;
- continue;
-
- case OP_TCALL: case OP_CALL: case OP_CLOSURE: case OP_SHIFT:
- n = *ip++; // nargs
- sp -= n;
- break;
-
- case OP_LOADVL: case OP_LOADGL: case OP_LOADAL:
- sp++; // fallthrough
- case OP_SETGL: case OP_SETAL: case OP_ARGCL: case OP_BOXL:
- SWAP_INT32(ip);
- ip += 4;
- break;
-
- case OP_LOADC:
- sp++;
- ip++;
- break;
-
- case OP_VARGC:
- n = *ip++;
- sp += n+2;
- break;
- case OP_VARGCL:
- SWAP_INT32(ip);
- n = GET_S32(ip); ip += 4;
- sp += n+2;
- break;
- case OP_OPTARGS:
- SWAP_INT32(ip);
- i = GET_S32(ip); ip += 4;
- SWAP_INT32(ip);
- n = abs(GET_S32(ip)); ip += 4;
- sp += n-i;
- break;
- case OP_KEYARGS:
- SWAP_INT32(ip);
- i = GET_S32(ip); ip += 4;
- SWAP_INT32(ip);
- ip += 4;
- SWAP_INT32(ip);
- n = abs(GET_S32(ip)); ip += 4;
- sp += n-i;
- break;
- case OP_BOUNDA:
- SWAP_INT32(ip);
- ip += 4;
- sp++;
- break;
- case OP_TCALLL: case OP_CALLL:
- SWAP_INT32(ip);
- n = GET_S32(ip); ip+=4;
- sp -= n;
- break;
- case OP_JMP:
- SWAP_INT16(ip);
- ip += 2;
- continue;
- case OP_JMPL:
- SWAP_INT32(ip);
- ip += 4;
- continue;
- case OP_BRNE:
- SWAP_INT16(ip);
- ip += 2;
- sp -= 2;
- break;
- case OP_BRNEL:
- SWAP_INT32(ip);
- ip += 4;
- sp -= 2;
- break;
- case OP_BRNN: case OP_BRN:
- SWAP_INT16(ip);
- ip += 2;
- sp--;
- break;
- case OP_BRNNL: case OP_BRNL:
- SWAP_INT32(ip);
- ip += 4; // fallthrough
- case OP_TAPPLY: case OP_APPLY:
- case OP_LIST: case OP_ADD: case OP_SUB: case OP_MUL: case OP_DIV:
- case OP_VEC: case OP_LT: case OP_NUMEQP:
- n = *ip++;
- sp -= n-1;
- break;
-
- case OP_FOR:
- if(maxsp < sp+2)
- maxsp = sp+2; // fallthrough
- case OP_ASET:
- sp -= 2;
- break;
-
- case OP_LOADCL:
- sp++; // fallthrough
- SWAP_INT32(ip);
- ip += 4;
- break;
-
- case OP_CAR: case OP_CDR: case OP_CADR:
- case OP_NOT: case OP_NEG: case OP_NUMP:
- case OP_CONSP: case OP_ATOMP: case OP_SYMP:
- case OP_FIXNUMP: case OP_BOUNDP: case OP_BUILTINP:
- case OP_FNP: case OP_VECP: case OP_NANP:
- continue;
-
- case N_OPCODES:
- return -1;
- }
- if((s32int)sp > (s32int)maxsp)
- maxsp = sp;
- }
- assert(ip == end);
- assert(maxsp >= 0);
- return maxsp+4;
-}
--- a/src/print.c
+++ b/src/print.c
@@ -480,6 +480,8 @@
sl_print_child(f, fn->name);
}
}
+ outc(f, ' ');
+ sl_print_child(f, fixnum(fn->maxstack));
outc(f, ')');
}else{
outs(f, "#<fn>");
--- a/src/sl.c
+++ b/src/sl.c
@@ -877,8 +877,6 @@
#define GET_S16(a) (s16int)((a)[0]<<0 | (a)[1]<<8)
#endif
-#include "maxstack.h"
-
/*
stack on entry: <fn> <nargs args...>
caller's responsibility:
@@ -984,47 +982,51 @@
{
if(nargs == 1 && issym(args[0]))
return fn_builtin_builtin(args, nargs);
- if(nargs < 1 || nargs > 4)
+ if(nargs < 1 || nargs > 5)
argcount(nargs, 1);
- if(sl_unlikely(!isstr(args[0])))
- bthrow(type_error("code", "str", args[0]));
- sl_v vals = sl_emptyvec;
- if(nargs > 1){
- vals = args[1];
- if(sl_unlikely(!isvec(vals)))
- bthrow(type_error("vals", "vec", vals));
- }
- sl_cv *arr = ptr(args[0]);
- cv_pin(arr);
- u8int *data = cv_data(arr);
- usize sz = cv_len(arr);
- if(slg.loading){
- // read syntax, shifted 48 for compact text representation
- for(usize i = 0; i < sz; i++)
- data[i] -= 48;
- }
sl_fn *fn = alloc_words(sizeof(sl_fn)/sizeof(sl_v));
sl_v fv = tagptr(fn, TAG_FN);
- fn->bcode = args[0];
- fn->vals = vals;
+ fn->bcode = sl_emptystr;
+ fn->vals = sl_emptyvec;
fn->env = sl_nil;
fn->name = sl_lambda;
- fn->maxstack = compute_maxstack(data, sz);
- if(nargs > 2){
- if(issym(args[2])){
- fn->name = args[2];
- if(nargs > 3)
- fn->env = args[3];
- }else{
- fn->env = args[2];
- if(nargs > 3){
- if(sl_unlikely(!issym(args[3])))
- bthrow(type_error("name", "sym", args[3]));
- fn->name = args[3];
+ fn->maxstack = ~(usize)0;
+ u8int *data = nil;
+ usize sz = 0;
+ bool envset = false, valsset = false, nameset = false, maxstackset = false, bcodeset = false;
+ for(int i = 0; nargs > i; i++){
+ sl_v v = args[i];
+ if(!envset && (v == sl_nil || (valsset && isvec(v)))){
+ envset = true;
+ fn->env = v;
+ }else if(!valsset && isvec(v)){
+ valsset = true;
+ fn->vals = v;
+ }else if(!nameset && issym(v)){
+ if(sl_unlikely(isgensym(v)))
+ bthrow(lerrorf(sl_errarg, "name cannot be a gensym"));
+ nameset = true;
+ fn->name = v;
+ }else if(!maxstackset && isfixnum(v)){
+ if(sl_unlikely(numval(v) < 0))
+ bthrow(lerrorf(sl_errarg, "invalid maxstack value"));
+ maxstackset = true;
+ fn->maxstack = numval(v);
+ }else if(!bcodeset && isstr(v)){
+ bcodeset = true;
+ sl_cv *arr = ptr(v);
+ cv_pin(arr);
+ data = cv_data(arr);
+ sz = cv_len(arr);
+ if(slg.loading){
+ // read syntax, shifted 48 for compact text representation
+ for(usize j = 0; j < sz; j++)
+ data[j] -= 48;
}
+ fn->bcode = v;
+ }else{
+ bthrow(lerrorf(sl_errarg, "unexpected argument type"));
}
- if(sl_unlikely(isgensym(fn->name)))
- bthrow(lerrorf(sl_errarg, "name must not be a gensym"));
}
return fv;
}