ref: df52f0700401359e68f2c67440c0015af36f25e2
parent: 63832a4728ca4af432ef2b1c272ce4ca97666a91
author: Sigrid Solveig Haflínudóttir <[email protected]>
date: Sun Mar 26 12:15:08 EDT 2023
rearrange vm opcodes to run faster when built without optimizations
--- a/flisp.boot
+++ b/flisp.boot
@@ -1,79 +1,74 @@
(*banner* "; _\n; |_ _ _ |_ _ | . _ _\n; | (-||||_(_)|__|_)|_)\n;-------------------|----------------------------------------------------------\n\n"
- *builtins* #(0 0 0 0 #fn("6000x1\x814S" #())
- #fn("6000x1\x815S" #())
- #fn("6000x1\x816S" #())
- #fn("6000x1\x817S" #()) 0 0 #fn("6000x1\x81:S" #())
- #fn("6000x1\x81;S" #())
- #fn("6000x1\x81<S" #())
- #fn("6000x1\x81=S" #())
- #fn("6000x1\x81>S" #())
- #fn("6000x1\x81?S" #())
- #fn("6000x1\x81@S" #())
- #fn("6000x1\x81AS" #())
- #fn("6000x1\x81BS" #())
- #fn("6000x1\x81CS" #())
- #fn("6000x1\x81DS" #()) 0 #fn("7000x2\x81\x82FS" #())
- #fn("7000x2\x81\x82GS" #())
- #fn("7000x2\x81\x82HS" #()) 0 0 0 0 0 0 0 0 0 0 0 #fn("7000x2\x81\x82TS" #())
- #fn("7000x2\x81\x82US" #())
- #fn("7000x2\x81\x82VS" #())
- #fn("8000y0\x81S" #())
- #fn("9000y0j0\x81|2S" #(#.apply))
- #fn("9000y0j0\x81|2S" #(#.+))
- #fn("9000y0j0\x81|2S" #(#.-))
- #fn("9000y0j0\x81|2S" #(#.*))
- #fn("9000y0j0\x81|2S" #(#./))
- #fn("9000y0j0\x81|2S" #(#.div0))
- #fn("7000x2\x81\x82^S" #())
- #fn("7000x2\x81\x82_S" #())
- #fn("7000x2\x81\x82`S" #())
- #fn("7000x2\x81\x82aS" #())
- #fn("9000y0j0\x81|2S" #(#.vector))
- #fn("8000x3\x81\x82n2cS" #()) 0 0 0 0 0 0 0 0 0 0 0 0 0
- 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- 0 0 0)
+ *builtins* #(0 0 0 0 0 0 0 0 0 0 0 0 #fn("6000n10<:" #())
+ #fn("6000n10=:" #()) 0 0 0 0 #fn("6000n10B:" #()) 0 0 0
+ 0 #fn("7000n201G:" #())
+ #fn("6000n10H:" #()) 0 0 0 #fn("7000n201L:" #()) 0 #fn("7000n201N:" #())
+ 0 #fn("7000n201P:" #())
+ #fn("7000n201Q:" #())
+ #fn("6000n10R:" #())
+ #fn("6000n10S:" #())
+ #fn("6000n10T:" #()) 0 #fn("6000n10V:" #())
+ #fn("6000n10W:" #())
+ #fn("6000n10X:" #())
+ #fn("6000n10Y:" #())
+ #fn("6000n10Z:" #())
+ #fn("6000n10[:" #())
+ #fn("6000n10\\:" #())
+ #fn("6000n10]:" #()) 0 #fn("7000n201_:" #()) 0 0 0 #fn("7000n201c:" #())
+ #fn("7000n201d:" #())
+ #fn("8000|00:" #())
+ #fn("9000|0200\x7f2:" #(#.apply))
+ #fn("9000|0200\x7f2:" #(#.+))
+ #fn("9000|0200\x7f2:" #(#.-))
+ #fn("9000|0200\x7f2:" #(#.*))
+ #fn("9000|0200\x7f2:" #(#./))
+ #fn("9000|0200\x7f2:" #(#.div0))
+ #fn("7000n201l:" #())
+ #fn("7000n201m:" #()) 0 #fn("9000|0200\x7f2:" #(#.vector))
+ #fn("8000n30182p:" #()) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)
*interactive* #f *syntax-environment*
- #table(letrec #fn("?000y1j0j0j1W1j2j3\x81K2W1j2j4\x81K2j5\x82K1K4W1j2j6\x81K2L2S" #(#fn(nconc)
- lambda #fn(map) #.car #fn("9000x1j0j1W1j2\x81K1L2S" #(#fn(nconc) set! #fn(copy-list)))
- #fn(copy-list) #fn("6000x1l0L0S" #(void)))) quasiquote #fn("8000x1l0\x81gL2S" #(bq-process)) when #fn("<000y1j0\x81j1\x82FeW4S" #(if
- begin)) unwind-protect #fn("8000x2j09j1K0j1K0L2S" #(#fn("@000x2j0\x82j1f\x84W3W2W1j2j3\x83j1\x81W1j4\x82W1j5\x81W2W3W3W3\x82W1W3W3S" #(let
- lambda prog1 trycatch begin raise)) #fn(gensym))) dotimes #fn(";000y1j09\x814\x816L2S" #(#fn("=000x2j0gj1\x82hW3j2j3W1\x81W1W1j4\x84K1K3W4S" #(for
- - #fn(nconc) lambda #fn(copy-list))))) define-macro #fn("?000y1j0j1\x814W2j2j3W1\x815W1j4\x82K1K3W3S" #(set-syntax!
- quote #fn(nconc) lambda #fn(copy-list))) receive #fn("@000y2j0j1f\x82W3j2j1W1\x81W1j3n2K1K3W3S" #(call-with-values
- lambda #fn(nconc) #fn(copy-list))) unless #fn("=000y1j0\x81ej1\x82FW4S" #(if
- begin)) let* #fn("A000y1\x81;NE0j0j1W1fW1j2\x82K1K3W1Sj0j1W1l3\x81K1W1W1j2\x815:NH0j0j4W1\x815W1j2\x82K1K3W1M30\x82K1K3l5\x81K1W2S" #(#fn(nconc)
- lambda #fn(copy-list) caar let* cadar)) case #fn(":000y1j09dL1S" #(#fn("7000x1j0t0Jj19j2K0L1S" #(#fn("9000x2\x82j0\x8750j0S\x82\x8940eS\x82>N=0j1\x81l2\x82K1W3S\x82;N=0j3\x81l2\x82K1W3S\x825\x89>0j3\x81l2\x824K1W3Sl4j5\x82K2N=0j6\x81j7\x82W2W3Sj8\x81j7\x82W2W3S" #(else
- eq? quote-value eqv? every #.symbol? memq quote memv) vals->cond)
- #fn("<000x1j0\x81p10W2W1j1j2W1j3j49p11K2K2W3S" #(let #fn(nconc) cond #fn(map)
- #fn("8000x1p10\x83\x814K2\x815FS" #())))
- #fn(gensym))))) catch #fn("7000x2j09j1K0L1S" #(#fn("@000x1j0\x84j1\x81W1j2j3j4\x81W2j5j6\x81W2j7j8W2W3j5j9\x81W2\x83W3W4j:\x81W2j;\x81W2W4W3W3S" #(trycatch
- lambda if and pair? eq car quote thrown-value cadr caddr raise))
- #fn(gensym))) assert #fn("<000x1j0\x81dj1j2j3\x81W2W2W2W4S" #(if
- raise quote assert-failed)) do #fn("A000y2j09j1K0\x824j2j3\x81K2j2j4\x81K2j2j5\x81K2L5S" #(#fn("B000x5j0\x81j1n2j2\x82j3j4W1j5\x845K1K2j3j4W1j5p02K1j3\x81W1n4K2W1K3W4W3W2W1j3\x81W1n3K2W3S" #(letrec
+ #table(with-bindings #fn(">000|120>21220522123052212405263:" #(#fn("B000n32021e1222382053e1242225015351262027e124F51522027e1242228082535152e3e164:" #(#fn(nconc)
+ let #fn(map) #.list #fn(copy-list) #fn("8000n22001e3:" #(set!))
+ unwind-protect begin #fn("8000n22001e3:" #(set!))))
+ #fn(map) #.car #.cadr #fn("6000n12060:" #(#fn(gensym))))) letrec #fn("?000|1202021e12223052e122240522515154e1222605262:" #(#fn(nconc)
+ lambda #fn(map) #.car #fn("9000n12021e12205162:" #(#fn(nconc) set! #fn(copy-list)))
+ #fn(copy-list) #fn("6000n17060:" #(void)))) assert #fn("<000n1200D2122230e2e2e2e4:" #(if
+ raise quote assert-failed)) do #fn("A000|220>21501<22230522224052222505265:" #(#fn("B000n520021822212324e125F=51522324e12590251230e18452e153e4e3e2e1230e18352e3:" #(letrec
lambda if #fn(nconc) begin #fn(copy-list)))
- #fn(gensym) #fn(map) #.car #.cadr #fn("7000x1l0\x81K1:N80l1\x81L1S\x814S" #(cddr
- caddr)))) with-input-from #fn("=000y1j0j1W1j2\x81W2W1W1j3\x82K1L3S" #(#fn(nconc)
- with-bindings *input-stream* #fn(copy-list))) let #fn(":000y1j09eL1S" #(#fn("<000x1\x83>ND0\x83t0J\x844v00J\x845v01M30dJj09j1j2W1j3j4\x83K2W1j5\x84K1K3j3j6\x83K2L2S" #(#fn("8000x2\x83N@0j0\x83\x81W2W1\x83W3M30\x81\x82FS" #(letrec))
- #fn(nconc) lambda #fn(map) #fn("6000x1\x81:N50\x814S\x81S" #())
- #fn(copy-list) #fn("6000x1\x81:N50\x816Sl0L0S" #(void)))))) cond #fn("9000y0j09dL1S" #(#fn("7000x1j09t0J\x81\x83L1S" #(#fn("7000x1\x81;N40eSj09\x814L1S" #(#fn(":000x1\x814j0TIO70J\x814dTN@0\x815\x8950\x814Sj1\x815FS\x815\x89@0j2\x814p10\x835K1W3S\x816j3\x87W0l4l5\x81K1K1NA0j69l7l5\x81K1K1L1Sj89j9K0L1Sj:\x814j1\x815Fp10\x835K1W4S" #(else
- begin or => 1arg-lambda? caddr #fn("=000x1j0\x81\x834W2W1j1\x81j2l3l4\x83K1K1Fp20p105K1W4W3S" #(let
- if begin cddr caddr)) caadr #fn("<000x1j0\x81\x834W2W1j1\x81l2\x83K1\x81W2p20p105K1W4W3S" #(let
- if caddr)) #fn(gensym) if))) cond-clauses->if))))) throw #fn(":000x2j0j1j2j3W2\x81\x82W4W2S" #(raise
- list quote thrown-value)) time #fn("7000x1j09j1K0L1S" #(#fn(">000x1j0\x81j1W1W2W1j2\x83j3j4j5j1W1\x81W3j6W4W3W3S" #(let
+ #fn(gensym) #fn(map) #.car #.cadr #fn("7000n170051B38071061:0<:" #(cddr caddr)))) quasiquote #fn("8000n1700E62:" #(bq-process)) when #fn("<000|1200211POe4:" #(if
+ begin)) with-input-from #fn("=000|12021e1220e2e1e12315163:" #(#fn(nconc)
+ with-bindings
+ *input-stream*
+ #fn(copy-list))) unwind-protect #fn("8000n220>2150215062:" #(#fn("@000n220121qFe3e2e12223A210e1241e1250e2e3e3e31e1e3e3:" #(let
+ lambda prog1 trycatch begin raise)) #fn(gensym))) dotimes #fn(";000|120>0<0T62:" #(#fn("=000n220E211Ke32223e10e1e124F5153e4:" #(for
+ - #fn(nconc) lambda #fn(copy-list))))) define-macro #fn("?000|120210<e22223e10=e12415153e3:" #(set-syntax!
+ quote #fn(nconc) lambda #fn(copy-list))) receive #fn("@000|22021q1e32221e10e123825153e3:" #(call-with-values
+ lambda #fn(nconc) #fn(copy-list))) unless #fn("=000|1200O211Pe4:" #(if begin)) let #fn(":000|120>O61:" #(#fn("<000n1AR3D0A?04F<z004F=z01@30D420>2122e12324A52e125F51532326A5262:" #(#fn("8000n2A3@020A0e2e1Ae3@3001P:" #(letrec))
+ #fn(nconc) lambda #fn(map) #fn("6000n10B3500<:0:" #())
+ #fn(copy-list) #fn("6000n10B3500T:7060:" #(void)))))) cond #fn("9000|020>D61:" #(#fn("7000n120>?040A61:" #(#fn("7000n10H340O:20>0<61:" #(#fn(":000n10<20Q;I7040<DQ3@00=J500<:210=P:0=J@0220<910A=51e3:0T23CW07475051513A026>77750515161:28>295061:2:0<210=P910A=51e4:" #(else
+ begin or => 1arg-lambda? caddr #fn("=000n1200A<e2e1210227374A5151P920910=51e4e3:" #(let
+ if begin cddr caddr)) caadr #fn("<000n1200A<e2e121072A510e2920910=51e4e3:" #(let
+ if caddr)) #fn(gensym) if))) cond-clauses->if))))) throw #fn(":000n220212223e201e4e2:" #(raise
+ list quote thrown-value)) time #fn("7000n120>215061:" #(#fn(">000n120021e1e2e122A23242521e10e326e4e3e3:" #(let
time.now prog1 princ "Elapsed time: " - " seconds\n"))
- #fn(gensym))) with-output-to #fn("=000y1j0j1W1j2\x81W2W1W1j3\x82K1L3S" #(#fn(nconc)
- with-bindings *output-stream* #fn(copy-list))) with-bindings #fn(">000y1j09j1j2\x81K2j1j3\x81K2j1j4\x81K2L3S" #(#fn("B000x3j0j1W1j2j3n2\x81K3W1j4j2j5\x81\x82K3K1j6j0j7W1j4\x84K1K2j0j7W1j4j2j8\x81n2K3K1K2W3W1L4S" #(#fn(nconc)
- let #fn(map) #.list #fn(copy-list) #fn("8000x2j0\x81\x82W3S" #(set!))
- unwind-protect begin #fn("8000x2j0\x81\x82W3S" #(set!))))
- #fn(map) #.car #.cadr #fn("6000x1j0L0S" #(#fn(gensym))))))
+ #fn(gensym))) let* #fn("A000|10H3E02021e1qe12215153e1:2021e173051e1e1220=B3H02024e10=e12215153e1@301515375051e2:" #(#fn(nconc)
+ lambda #fn(copy-list) caar let* cadar)) case #fn(":000|120>D61:" #(#fn("7000n120?0421>225061:" #(#fn("9000n2120C5020:1J40O:1R3=021072151e3:1H3=023072151e3:1=J>0230721<51e3:74251523=0260271e2e3:280271e2e3:" #(else
+ eq? quote-value eqv? every #.symbol? memq quote memv) vals->cond)
+ #fn("<000n1200910e2e12122e12324>9115252e3:" #(let #fn(nconc) cond #fn(map)
+ #fn("8000n1910A0<520=P:" #())))
+ #fn(gensym))))) with-output-to #fn("=000|12021e1220e2e1e12315163:" #(#fn(nconc)
+ with-bindings *output-stream* #fn(copy-list))) catch #fn("7000n220>215061:" #(#fn("@000n120F210e12223240e225260e22728e2e325290e2Ae3e42:0e22;0e2e4e3e3:" #(trycatch
+ lambda if and pair? eq car quote thrown-value cadr caddr raise))
+ #fn(gensym))))
*whitespace* "\t\n\v\f\r \u0085 \u2028\u2029 " 1+
- #fn("7000x1\x81h}S" #() 1+) 1- #fn("7000x1\x81h~S" #() 1-)
- 1arg-lambda? #fn("8000x1\x81:INT0J\x814j0TINJ0J\x815:INB0J\x816:IN:0Jl1\x816hL2S" #(lambda
- length=) 1arg-lambda?)
- <= #fn("7000x2\x82\x81_IOB0Jl0\x81K1IN80Jl0\x82K17S" #(nan?) <=) >
- #fn("7000x2\x82\x81_S" #() >) >= #fn("7000x2\x81\x82_IOB0Jl0\x81K1IN80Jl0\x82K17S" #(nan?) >=)
- Instructions #table(brne 87 vargc 73 load1 56 = 46 setc.l 71 sub2 78 brne.l 88 largc 79 brnn 89 loadc.l 65 loadi8 57 < 47 nop 21 set-cdr! 24 neg 8 bound? 17 / 44 loada 62 brn.l 92 lvargc 80 brt 31 trycatch 74 null? 12 load0 55 jmp.l 32 loadv 58 seta 68 keyargs 95 * 43 function? 19 builtin? 18 aref 49 optargs 93 vector? 20 loadt 52 cdr 5 cadr 6 symbol? 14 brf 30 for 75 pop 26 pair? 10 loadc00 83 closure 9 loadf 53 compare 48 loadv.l 59 setg.l 67 brn 91 eqv? 37 aset! 51 atom? 11 boolean? 13 eq? 36 brt.l 34 tapply 76 dummy_nil 2 loada0 81 brbound 94 dup 25 dummy_t 1 list 39 apply 40 loadc 64 loadc01 84 setg 66 loada1 82 tcall.l 86 jmp 29 fixnum? 16 cons 22 loadg.l 61 tcall 28 dummy_eof 3 call 27 - 42 brf.l 33 + 41 dummy_f 0 add2 77 seta.l 69 loadnil 54 brnn.l 90 setc 70 set-car! 23 vector 50 loadg 60 loada.l 63 argc 72 div0 45 car 4 number? 15 ret 35 equal? 38 call.l 85 not 7)
- __init_globals #fn("6000x0j0r1Jj2r3Jl4r5Jl6r7Jl8r9S" #("/"
+ #fn("7000n10KM:" #() 1+) 1- #fn("7000n10K\x80:" #() 1-) 1arg-lambda?
+ #fn("8000n10B;3T040<20Q;3J040=B;3B040TB;3:04710TK62:" #(lambda
+ length=) 1arg-lambda?)
+ <= #fn("7000n210L;IB0470051;380470151S:" #(nan?) <=) >
+ #fn("7000n210L:" #() >) >= #fn("7000n201L;IB0470051;380470151S:" #(nan?) >=)
+ Instructions #table(not 35 vargc 76 load1 27 = 60 setc.l 75 sub2 80 brne.l 85 largc 81 brnn 26 loadc.l 70 loadi8 66 < 28 nop 46 set-cdr! 30 loada 8 neg 37 bound? 42 / 58 brn.l 88 lvargc 82 brt 25 trycatch 77 null? 38 load0 21 jmp.l 48 loadv 2 seta 15 keyargs 91 * 57 function? 44 builtin? 43 aref 23 optargs 89 loadt 20 vector? 45 cdr 13 brf 3 loadc00 17 symbol? 34 cadr 36 pop 4 pair? 18 for 78 closure 14 loadf 31 compare 61 loadv.l 67 setg.l 72 brn 87 eqv? 51 aset! 64 atom? 24 eq? 33 boolean? 39 brt.l 50 tapply 79 dummy_nil 94 loada0 0 brbound 90 dup 11 loadc01 22 list 53 loadc 9 apply 54 dummy_t 93 setg 71 loada1 1 tcall.l 84 jmp 16 fixnum? 41 cons 32 loadg.l 68 tcall 6 dummy_eof 95 call 5 - 56 brf.l 49 + 55 dummy_f 92 add2 29 seta.l 73 loadnil 65 brnn.l 86 setc 74 set-car! 47 loadg 7 vector 63 loada.l 69 argc 62 div0 59 ret 10 car 12 number? 40 equal? 52 call.l 83 brne 19)
+ __init_globals #fn("6000n020w1422w3474w5476w7478w9:" #("/"
*directory-separator*
"\n"
*linefeed*
@@ -83,87 +78,81 @@
*input-stream*
*stderr*
*error-stream*) __init_globals)
- __script #fn("7000x1j09j1zS" #(#fn("7000x0l0\x83L1S" #(load))
- #fn("7000x1l0\x81K1Jj1hL1S" #(top-level-exception-handler
- #fn(exit)))) __script)
- __start #fn("8000x1l0K0J\x815:ND0\x815r1Jer2Jl3\x816K1ME0\x81r1Jdr2Jl4l5K1Jl6K0Jj7gL1S" #(__init_globals
+ __script #fn("7000n120>21}:" #(#fn("7000n070A61:" #(load))
+ #fn("7000n170051421K61:" #(top-level-exception-handler
+ #fn(exit)))) __script)
+ __start #fn("8000n1705040=B3D00=w14Ow24730T51@E00w14Dw2474755147650427E61:" #(__init_globals
*argv* *interactive* __script princ *banner* repl #fn(exit)) __start)
- abs #fn("7000x1\x81g_N50\x818S\x81S" #() abs) any
- #fn("8000x2\x82:IND0J\x81\x824K1IO:0Jl0\x81\x825L2S" #(any) any)
- arg-counts #table(null? 1 atom? 1 boolean? 1 eq? 2 function? 1 builtin? 1 = 2 aref 2 vector? 1 cdr 1 cadr 1 symbol? 1 pair? 1 set-car! 2 compare 2 < 2 fixnum? 1 div0 2 car 1 number? 1 set-cdr! 2 equal? 2 cons 2 bound? 1 eqv? 2 aset! 3 not 1)
- argc-error #fn("<000x2l0j1\x81j2\x82\x82h^N70j3M40j4L5S" #(error "compile error: "
- " expects " " argument." " arguments.") argc-error)
- array? #fn("8000x1\x81DIO<0Jj0j1\x81K1L1S" #(#fn("7000x1\x81:IN80J\x814j0TS" #(array))
- #fn(typeof)) array?)
- assoc #fn("8000x2\x82;N40eSl0\x82K1\x81VN50\x824Sl1\x81\x825L2S" #(caar
- assoc) assoc)
- assv #fn("8000x2\x82;N40eSl0\x82K1\x81UN50\x824Sl1\x81\x825L2S" #(caar
- assv) assv)
- bcode:cdepth #fn(":000x2\x81i3l0\x81i3a\x82K2cS" #(min) bcode:cdepth)
- bcode:code #fn("7000x1\x81gaS" #() bcode:code) bcode:ctable
- #fn("7000x1\x81haS" #() bcode:ctable) bcode:indexfor #fn("9000x2j09l1\x81K1l2\x81K1L2S" #(#fn(":000x2j0\x81\x84K2N90j1\x81\x84L2Sj2\x81\x84\x82K3J\x82\x83i2\x82h}cJS" #(#fn(has?)
+ abs #fn("7000n10EL3500U:0:" #() abs) any
+ #fn("8000n21B;3D0401<51;I:047001=62:" #(any) any) arg-counts #table(null? 1 atom? 1 eq? 2 boolean? 1 function? 1 builtin? 1 = 2 aref 2 vector? 1 cdr 1 symbol? 1 cadr 1 pair? 1 set-car! 2 compare 2 < 2 fixnum? 1 div0 2 car 1 set-cdr! 2 number? 1 equal? 2 cons 2 bound? 1 eqv? 2 aset! 3 not 1)
+ argc-error #fn("<000n2702102211Kl37023@402465:" #(error "compile error: "
+ " expects " " argument."
+ " arguments.") argc-error)
+ array? #fn("8000n10];I<04202105161:" #(#fn("7000n10B;38040<20Q:" #(array))
+ #fn(typeof)) array?)
+ assoc #fn("8000n21H340O:701510d3501<:7101=62:" #(caar assoc) assoc)
+ assv #fn("8000n21H340O:701510c3501<:7101=62:" #(caar assv) assv)
+ bcode:cdepth #fn(":000n20r3700r3G152p:" #(min) bcode:cdepth)
+ bcode:code #fn("7000n10EG:" #() bcode:code) bcode:ctable
+ #fn("7000n10KG:" #() bcode:ctable) bcode:indexfor #fn("9000n220>710517205162:" #(#fn(":000n2200F52390210F62:220F15341Ar21KMp4:" #(#fn(has?)
#fn(get) #fn(put!))) bcode:ctable bcode:nconst) bcode:indexfor)
- bcode:nconst #fn("7000x1\x81i2aS" #() bcode:nconst) bq-bracket
- #fn("<000x2\x81;N=0j0l1\x81\x82K2W2S\x814j2\x87R0\x82g^N80j0\x815FSj0j3j4l1\x815\x82h~K2W3W2S\x814j5\x87S0\x82g^N90j6\x816W2Sj0j0j7l1\x816\x82h~K2W3W2S\x814j8\x87O0\x82g^N50\x816Sj0j0j9l1\x816\x82h~K2W3W2Sj0l1\x81\x82K2W2S" #(#.list
+ bcode:nconst #fn("7000n10r2G:" #() bcode:nconst) bq-bracket
+ #fn("<000n20H3=020710152e2:0<22CR01El380200=P:202324710=1K\x8052e3e2:0<25CS01El390260Te2:202027710T1K\x8052e3e2:0<28CO01El3500T:202029710T1K\x8052e3e2:20710152e2:" #(#.list
bq-process unquote #.cons 'unquote unquote-splicing copy-list 'unquote-splicing
unquote-nsplicing 'unquote-nsplicing) bq-bracket)
- bq-bracket1 #fn(";000x2\x81:IN80J\x814j0TNK0\x82g^N50\x816Sj1j2l3\x815\x82h~K2W3Sl3\x81\x82L2S" #(unquote
+ bq-bracket1 #fn(";000n20B;38040<20Q3K01El3500T:2122730=1K\x8052e3:730162:" #(unquote
#.cons 'unquote bq-process) bq-bracket1)
- bq-process #fn(";000x2\x81>N80j0\x81W2S\x81DNA0j1l2l3\x81K1\x82K2L1S\x81;N40\x81S\x814j4\x87B0j5j6l2\x816\x82h}K2W3S\x814j7\x87W0\x82g^IN:0Jl8\x81i2K2N50\x816Sj9j:l2\x815\x82h~K2W3Sl;l<\x81K2OE0j=9l>\x81K1j?j@9\x81K2L2SjA9dK1\x81fL2S" #(quote
- #fn("8000x1\x814j0\x8780j1\x815FSj2j1\x81W3S" #(#.list #.vector #.apply))
- bq-process vector->list quasiquote #.list 'quasiquote unquote length= #.cons
- 'unquote any splice-form? #fn(":000x2\x81\x8970j0\x82FS\x825\x89?0j1\x824l2\x81\x84K2W3Sj3j4\x82Fl2\x81\x84K2W1L2S" #(#.list
+ bq-process #fn(";000n20R380200e2:0]3A021727305115261:0H3400:0<24CB02526720T1KM52e3:0<27CW01El;3:04780r2523500T:292:720=1K\x8052e3:7;7<052IE02=>7>0512?2@>05262:2A>D510q62:" #(quote
+ #fn("8000n10<20C80210=P:22210e3:" #(#.list #.vector #.apply)) bq-process
+ vector->list quasiquote #.list 'quasiquote unquote length= #.cons 'unquote
+ any splice-form? #fn(":000n20J70201P:1=J?0211<720F52e3:23241P720F52e162:" #(#.list
#.cons bq-process #fn(nconc) #fn(list*))) lastcdr #fn(map)
- #fn("8000x1l0\x81\x84L2S" #(bq-bracket1))
- #fn("6000x1j09t0J\x81S" #(#fn(">000x2\x81\x89;0j0l1\x82K1FS\x81:Ns0\x814j2\x87[0j0l3\x82p11g^N70\x815ME0j4j5W2l6\x815p11h~K2W2K2FS\x83\x815l7\x814p11K2\x82FL2Sj0l1l6\x81p11K2\x82FK1FS" #(nconc
+ #fn("8000n1700F62:" #(bq-bracket1)) #fn("6000n120>?040:" #(#fn(">000n20J;02071151P:0B3s00<22C[020731911El3700=@E02425e2760=911K\x8052e252P:A0=770<911521P62:2071760911521P51P:" #(nconc
reverse! unquote nreconc #.list 'unquote bq-process bq-bracket))))) bq-process)
- builtin->instruction #fn("9000x1j0\x83\x81eL3S" #(#fn(get)) #(#table(#.vector vector #.eq? eq? #.symbol? symbol? #.= = #.* * #.builtin? builtin? #.bound? bound? #.boolean? boolean? #.set-car! set-car! #.aref aref #.atom? atom? #.< < #.number? number? #.not not #.aset! aset! #.div0 div0 #.function? function? #.null? null? #.- - #.pair? pair? #.fixnum? fixnum? #.cons cons #.compare compare #.equal? equal? #./ / #.vector? vector? #.list list #.car car #.cadr cadr #.+ + #.set-cdr! set-cdr! #.cdr cdr #.eqv? eqv? #.apply apply)
+ builtin->instruction #fn("9000n120A0O63:" #(#fn(get)) #(#table(#.cadr cadr #.aset! aset! #.+ + #.- - #.equal? equal? #.eq? eq? #.builtin? builtin? #.not not #.pair? pair? #.aref aref #.cdr cdr #./ / #.div0 div0 #.set-car! set-car! #.vector vector #.set-cdr! set-cdr! #.< < #.cons cons #.apply apply #.eqv? eqv? #.vector? vector? #.list list #.car car #.bound? bound? #.function? function? #.null? null? #.symbol? symbol? #.compare compare #.boolean? boolean? #.fixnum? fixnum? #.atom? atom? #.= = #.number? number? #.* *)
+ ()))
+ caaaar #fn("6000n10<<<<:" #() caaaar) caaadr
+ #fn("6000n10T<<:" #() caaadr) caaar #fn("6000n10<<<:" #() caaar)
+ caadar #fn("6000n10<T<:" #() caadar) caaddr
+ #fn("6000n10=T<:" #() caaddr) caadr #fn("6000n10T<:" #() caadr) caar
+ #fn("6000n10<<:" #() caar) cadaar #fn("6000n10<<T:" #() cadaar)
+ cadadr #fn("6000n10TT:" #() cadadr) cadar
+ #fn("6000n10<T:" #() cadar) caddar #fn("6000n10<=T:" #() caddar)
+ cadddr #fn("6000n10==T:" #() cadddr) caddr
+ #fn("6000n10=T:" #() caddr) call-with-values #fn("7000n220>05061:" #(#fn("7000n10B;39049100<Q380F0=\x7f2:F061:" #())) #2=#((*values*)
()))
- caaaar #fn("6000x1\x814444S" #() caaaar) caaadr
- #fn("6000x1\x81644S" #() caaadr) caaar #fn("6000x1\x81444S" #() caaar)
- caadar #fn("6000x1\x81464S" #() caadar) caaddr
- #fn("6000x1\x81564S" #() caaddr) caadr #fn("6000x1\x8164S" #() caadr)
- caar #fn("6000x1\x8144S" #() caar) cadaar
- #fn("6000x1\x81446S" #() cadaar) cadadr #fn("6000x1\x8166S" #() cadadr)
- cadar #fn("6000x1\x8146S" #() cadar) caddar
- #fn("6000x1\x81456S" #() caddar) cadddr #fn("6000x1\x81556S" #() cadddr)
- caddr #fn("6000x1\x8156S" #() caddr) call-with-values
- #fn("7000x2j09\x81K0L1S" #(#fn("7000x1\x81:IN90Jp10\x814TN80\x84\x815|2S\x84\x81L1S" #())) #2=#((*values*)
- ()))
- cdaaar #fn("6000x1\x814445S" #() cdaaar) cdaadr
- #fn("6000x1\x81645S" #() cdaadr) cdaar #fn("6000x1\x81445S" #() cdaar)
- cdadar #fn("6000x1\x81465S" #() cdadar) cdaddr
- #fn("6000x1\x81565S" #() cdaddr) cdadr #fn("6000x1\x8165S" #() cdadr)
- cdar #fn("6000x1\x8145S" #() cdar) cddaar
- #fn("6000x1\x814455S" #() cddaar) cddadr #fn("6000x1\x81655S" #() cddadr)
- cddar #fn("6000x1\x81455S" #() cddar) cdddar
- #fn("6000x1\x814555S" #() cdddar) cddddr #fn("6000x1\x815555S" #() cddddr)
- cdddr #fn("6000x1\x81555S" #() cdddr) cddr
- #fn("6000x1\x8155S" #() cddr) char? #fn("7000x1j0\x81K1j1TS" #(#fn(typeof)
- wchar) char?)
- closure? #fn("7000x1\x81CIN60J\x81B7S" #() closure?) compile
- #fn("8000x1l0f\x81L2S" #(compile-f) compile) compile-and #fn("<000x4l0\x81\x82n2n3dj1L6S" #(compile-short-circuit
- brf) compile-and)
- compile-app #fn("7000x4j09n34L1S" #(#fn("9000x1j09\x81>INV0Jl1\x81\x84K27INJ0J\x81AINC0Jj2\x81K1IN90Jj3\x81K1BN:0j3\x81K1M30\x81L1S" #(#fn(":000x1l0p135j1K2NS0l2p10p11e\x81K4Jj39l4p10p11p135K3L1Sj59\x81BIN80Jl6\x81K1L1S" #(length>
- 255 compile-in #fn(":000x1l0p20p22N70j1M40j2\x81L3S" #(emit tcall.l call.l))
- compile-arglist #fn(";000x1\x83j0TINX0Jl1\x83p21K27INJ0Jj2j0K1j3VIN<0Jl4p23i2K2NL0l5p20p21ep236K4Jl6p20j0L2S\x81OA0l5p20p21e\x83K4M30dJj79l8p20p21p235K3L1S" #(cadr
- in-env? #fn(top-level-value) #.cadr length= compile-in emit #fn("=000x1\x83NH0l0p30p31p32p33p10\x83\x81L7Sl1p30p32N70j2M40j3\x81L3S" #(compile-builtin-call
+ cdaaar #fn("6000n10<<<=:" #() cdaaar) cdaadr
+ #fn("6000n10T<=:" #() cdaadr) cdaar #fn("6000n10<<=:" #() cdaar)
+ cdadar #fn("6000n10<T=:" #() cdadar) cdaddr
+ #fn("6000n10=T=:" #() cdaddr) cdadr #fn("6000n10T=:" #() cdadr) cdar
+ #fn("6000n10<=:" #() cdar) cddaar #fn("6000n10<<==:" #() cddaar)
+ cddadr #fn("6000n10T==:" #() cddadr) cddar
+ #fn("6000n10<==:" #() cddar) cdddar #fn("6000n10<===:" #() cdddar)
+ cddddr #fn("6000n10====:" #() cddddr) cdddr
+ #fn("6000n10===:" #() cdddr) cddr #fn("6000n10==:" #() cddr) char?
+ #fn("7000n12005121Q:" #(#fn(typeof) wchar) char?) closure? #fn("7000n10\\;36040[S:" #() closure?)
+ compile #fn("8000n170q062:" #(compile-f) compile) compile-and
+ #fn("<000n470018283D2166:" #(compile-short-circuit brf) compile-and)
+ compile-app #fn("7000n420>83<61:" #(#fn("9000n120>0R;3V04710F52S;3J040Z;3C0422051;390423051[3:023051@30061:" #(#fn(":000n170913=21523S072910911O054423>74910911913=5361:25>0[;38047605161:" #(length>
+ 255 compile-in #fn(":000n17092092237021@4022063:" #(emit tcall.l call.l))
+ compile-arglist #fn(";000n1A20Q;3X0471A92152S;3J0422205123d;3<0474923r2523L075920921O923T544769202062:0IA075920921OA54@30D427>78920921923=5361:" #(cadr
+ in-env? #fn(top-level-value) #.cadr length= compile-in emit #fn("=000n1A3H070930931932933910A067:7193093237022@4023063:" #(compile-builtin-call
emit tcall call)) compile-arglist)) builtin->instruction)) in-env? #fn(constant?)
#fn(top-level-value)))) compile-app)
- compile-arglist #fn("8000x3l0j19n2K2Jj2n2L1S" #(for-each #fn(":000x1l0\x83\x84e\x81L4S" #(compile-in))
+ compile-arglist #fn("8000n37021>82524228261:" #(for-each #fn(":000n170AFO064:" #(compile-in))
#fn(length)) compile-arglist)
- compile-begin #fn(":000x4n3;N?0l0\x81\x82n2l1K0L4Sn35;N>0l0\x81\x82n2n34L4Sl0\x81\x82en34K4Jl2\x81j3K2Jl4\x81\x82n2n35L4S" #(compile-in
+ compile-begin #fn(":000n483H3?0700182715064:83=H3>070018283<64:7001O83<5447202352474018283=64:" #(compile-in
void emit pop compile-begin) compile-begin)
- compile-builtin-call #fn(":000x7j09j1l2n4eK3L1S" #(#fn("8000x1\x81IN=0Jl0p035\x81K27N=0l1p05\x81K2M30dJj29p05L1S" #(length=
- argc-error #fn(":000x1\x81j0\x87R0p16g^N<0l1p10j2L2Sl1p10p15p16L3S\x81j3\x87e0p16g^N<0l1p10j4L2Sp16i2^N<0l1p10j5L2Sl1p10p15p16L3S\x81j6\x87v0p16g^N;0l7p15hL2Sp16h^N<0l1p10j8L2Sp16i2^N<0l1p10j9L2Sl1p10p15p16L3S\x81j:\x87R0p16g^N<0l1p10j;L2Sl1p10p15p16L3S\x81j<\x87Q0p16g^N;0l7p15hL2Sl1p10p15p16L3S\x81j=\x87T0p16g^N>0l1p10j>j?L3Sl1p10p15p16L3S\x81j@\x87]0p16i2_N<0l7p15i2L2Sl1p10p12N70jAM40j@p16L3Sl1p10p15L2S" #(list
+ compile-builtin-call #fn(":000n720>217284O5361:" #(#fn("8000n10;3=0470903=052S3=071905052@30D422>90561:" #(length=
+ argc-error #fn(":000n1020CR0916El3<0719102262:7191091591663:023Ce0916El3<0719102462:916r2l3<0719102562:7191091591663:026Cv0916El3;077915K62:916Kl3<0719102862:916r2l3<0719102962:7191091591663:02:CR0916El3<0719102;62:7191091591663:02<CQ0916El3;077915K62:7191091591663:02=CT0916El3>0719102>2?63:7191091591663:02@C]0916r2L3<077915r262:719109123702A@402@91663:7191091562:" #(list
emit loadnil + load0 add2 - argc-error neg sub2 * load1 / vector loadv #()
apply tapply)))) #fn(get) arg-counts) compile-builtin-call)
- compile-f #fn("8000x2l0j19j2L2S" #(call-with-values #fn("8000x0l0\x83\x84L2S" #(compile-f-))
- #fn("6000x2\x81S" #())) compile-f)
- compile-f- #fn("8000x2j09ddL2S" #(#fn(">000x2j09t0Jj19t1Jj29l3K0\x846l4\x846K1l5\x846K1l6j7\x846K2l4\x84K1p10\x8770j8M70l4\x84K1L6S" #(#fn("9000x1j09l1\x81K1:NN0l2\x81K1:N=0j3l1\x81K1FM70l4\x81K1M60l5K0L1S" #(#fn("8000x1j09l1\x81K1L1S" #(#fn(":000x1\x81\x8940\x83Sj0j1\x81\x83p40K4j2j3\x81K2FS" #(#fn(list*)
- lambda #fn(map) #fn("6000x1l0L0S" #(void)))) get-defined-vars)) cddr cdddr
- begin caddr void) lambda-body) #fn("7000x1l0\x81K1p20\x8780l1\x81L1S\x83\x81L1S" #(lastcdr
- caddr) lam:body) #fn("9000x6j09\x82;N60gM70j1\x82K1L1S" #(#fn("9000x1j09\x81j1p04K1~L1S" #(#fn("9000x1j09l1l2p14K2L1S" #(#fn("C000x1p24\x8b\xa90\x81\x89O0l0p20j1\x83p22\x8980p10M60p108K4Ms0l2p20l3j4j5j4j6\x81K2l7j8\x81K1K1K3K1K2Jl0p20j9\x83j8\x81K1p22\x8980p10M60p108K5Jl:p20p40p24p23\x83K5M30dJl;p10j<K2NL0l0p20p22\x8970j=M40j>p10K3M]0p22\x8bA0l0p20j?p10K3MH0p24\x89A0l0p20j@p10K3M30eJlAp20p23p40Fdp31p41K1K4Jl0p20jBK2JlCjDlElFp20K1K1lGp20K1p25K3p20i3aL2S" #(emit
+ compile-f #fn("8000n27021>2262:" #(call-with-values #fn("8000n070AF62:" #(compile-f-))
+ #fn("6000n20:" #())) compile-f)
+ compile-f- #fn("8000n220>DD62:" #(#fn(">000n220>?0421>?1422>7350FT74FT5175FT517627FT5274F51910C7028@7074F5166:" #(#fn("9000n120>71051B3N072051B3=02371051P@7074051@60755061:" #(#fn("8000n120>7105161:" #(#fn(":000n10J40A:20210A940542223052P:" #(#fn(list*)
+ lambda #fn(map) #fn("6000n17060:" #(void)))) get-defined-vars)) cddr cdddr
+ begin caddr void) lambda-body) #fn("7000n170051920C8071061:A061:" #(lastcdr
+ caddr) lam:body) #fn("9000n620>1H360E@702115161:" #(#fn("9000n120>02190451\x8061:" #(#fn("9000n120>71729145261:" #(#fn("C000n1924\x87\xa900JO07092021A922J80910@60910U54@s072920732425242605277280515153515247092029A28051922J80910@60910U5547:920940924923A55@30D47;9102<523L070920922J702=@402>91053@]0922\x87A0709202?91053@H0924JA0709202@91053@30O47A920923940PD93194151544709202B5247C2D7E7F92051517G9205192553920r3G62:" #(emit
optargs bcode:indexfor make-perfect-hash-table
#fn(map) #.cons #.car iota #fn(length) keyargs emit-optional-arg-inits > 255
largc lvargc vargc argc compile-in ret values #fn(function) encode-byte-code
@@ -170,50 +159,49 @@
bcode:code const-to-idx-vec)) filter keyword-arg?))
#fn(length))) #fn(length))) make-code-emitter lastcdr lambda-vars filter #.pair?
lambda))) #0=#(#:g714 ()))
- compile-for #fn(":000x5l0n4K1NX0l1\x81\x82en2K4Jl1\x81\x82en3K4Jl1\x81\x82en4K4Jl2\x81j3L2Sl4j5L1S" #(1arg-lambda?
+ compile-for #fn(":000n57084513X07101O825447101O835447101O845447202362:742561:" #(1arg-lambda?
compile-in emit for error "for: third form must be a 1-argument lambda") compile-for)
- compile-if #fn("<000x4j09l1\x81K1l1\x81K1n36l2n3K1l3n3K1:N;0l4n3K1M60l5K0L5S" #(#fn(";000x5n2d\x87>0l0\x83\x84p02n3L4Sn2e\x87>0l0\x83\x84p02n4L4Sl0\x83\x84en2K4Jl1\x83j2\x81K3Jl0\x83\x84p02n3K4Jp02N<0l1\x83j3K2M:0l1\x83j4\x82K3Jl5\x83\x81K2Jl0\x83\x84p02n4K4Jl5\x83\x82L2S" #(compile-in
+ compile-if #fn("<000n420>710517105183T728351738351B3;0748351@60755065:" #(#fn(";000n582DC>070AF9028364:82OC>070AF9028464:70AFO8254471A22053470AF902835449023<071A2352@:071A24153475A052470AF9028454475A162:" #(compile-in
emit brf ret jmp mark-label)) make-label caddr cdddr cadddr void) compile-if)
- compile-in #fn(";000x4n3>N=0l0\x81\x82n3j1L4Sn3;N\xaf0n3g\x87:0l2\x81j3L2Sn3h\x87:0l2\x81j4L2Sn3d\x87:0l2\x81j5L2Sn3e\x87:0l2\x81j6L2Sn3f\x87:0l2\x81j7L2Sl8n3K1N<0l2\x81j9n3L3Sj:n3K1NC0l;\x81\x82n2j<j=K1W1L4Sl2\x81j>n3L3Sn34>7IOD0Jn34AIO;0Jl?n34\x82K2N=0l@\x81\x82n2n3L4SjA9n34L1S" #(compile-sym
+ compile-in #fn(";000n483R3=07001832164:83H3\xaf083EC:07202362:83KC:07202462:83DC:07202562:83OC:07202662:83qC:07202762:7883513<0720298363:2:83513C07;01822<2=51e164:7202>8363:83<RS;ID0483<Z;I;047?83<1523=07@01828364:2A>83<61:" #(compile-sym
#(loada loadc loadg) emit load0 load1 loadt loadf loadnil fits-i8 loadi8 #fn(eof-object?)
- compile-in #fn(top-level-value) eof-object loadv in-env? compile-app #fn("<000x1\x81j0\x87W0l1p036K1N@0l2\x83\x84p02p036L4Sl3\x83j4p036L3S\x81j5\x87?0l6\x83\x84p02p03L4S\x81j7\x87@0l8\x83\x84p02p035L4S\x81j9\x87<0l:\x83\x84p03L3S\x81j;\x87=0l<j=9j>9L2S\x81j?\x87@0l@\x83\x84p02p035L4S\x81jA\x87@0lB\x83\x84p02p035L4S\x81jC\x87G0lD\x83\x84p036j7lEp03K1FL4S\x81jF\x87K0lG\x83\x84p036lHp03K1lIp03K1L5S\x81jJ\x87F0l2\x83\x84dp036K4Jl3\x83jKL2S\x81jL\x87_0l2\x83\x84elHp03K1K4Jp036>IO90JlMjNK1JlO\x83\x84p036jPL4S\x81jQ\x87C0l2\x83\x84p02lRp03K1L4S\x81jS\x87s0l2\x83\x84ej;fp036W3K4JlTlHp03K1K1N60eM80lMjUK1Jl2\x83\x84elHp03K1K4Jl3\x83jSL2SlV\x83\x84p02p03L4S" #(quote
+ compile-in #fn(top-level-value) eof-object loadv in-env? compile-app #fn("<000n1020CW071903T513@072AF902903T64:73A24903T63:025C?076AF90290364:027C@078AF902903=64:029C<07:AF90363:02;C=07<2=>2>>62:02?C@07@AF902903=64:02AC@07BAF902903=64:02CCG07DAF903T277E90351P64:02FCK07GAF903T7H903517I9035165:02JCF072AFD903T54473A2K62:02LC_072AFO7H90351544903TR;I9047M2N5147OAF903T2P64:02QCC072AF9027R9035164:02SCs072AFO2;q903Te35447T7H9035151360O@807M2U51472AFO7H9035154473A2S62:7VAF90290364:" #(quote
self-evaluating? compile-in emit loadv if compile-if begin compile-begin
- prog1 compile-prog1 lambda call-with-values #fn("8000x0l0p11p13L2S" #(compile-f-))
- #fn("9000x2l0p10j1\x81K3Jl2p10\x82K2J\x82l3p11K1_N<0l0p10j4L2SdS" #(emit
- loadv bcode:cdepth nnn closure)) and compile-and or compile-or while
- compile-while cddr for compile-for caddr cadddr return ret set! error "set!: second argument must be a symbol"
+ prog1 compile-prog1 lambda call-with-values #fn("8000n07091191362:" #(compile-f-))
+ #fn("9000n27091021053472910152417391151L3<0709102462:D:" #(emit loadv
+ bcode:cdepth nnn
+ closure)) and
+ compile-and or compile-or while compile-while cddr for compile-for caddr
+ cadddr return ret set! error "set!: second argument must be a symbol"
compile-sym #(seta setc setg) define expand-define trycatch 1arg-lambda? "trycatch: second form must be a 1-argument lambda"
compile-app))) compile-in)
- compile-or #fn("<000x4l0\x81\x82n2n3ej1L6S" #(compile-short-circuit
- brt) compile-or)
- compile-prog1 #fn(";000x3l0\x81\x82en26K4Jl1n2K1:NH0l2\x81\x82el1n2K1K4Jl3\x81j4L2SdS" #(compile-in
+ compile-or #fn("<000n470018283O2166:" #(compile-short-circuit brt) compile-or)
+ compile-prog1 #fn(";000n37001O82T544718251B3H07201O7182515447302462:D:" #(compile-in
cddr compile-begin emit pop) compile-prog1)
- compile-short-circuit #fn(":000x6n3;N=0l0\x81\x82n2n4L4Sn35;N>0l0\x81\x82n2n34L4Sj19l2\x81K1L1S" #(compile-in
- #fn("<000x1l0\x83\x84ep034K4Jl1\x83j2K2Jl1\x83p05\x81K3Jl1\x83j3K2Jl4\x83\x84p02p035p04p05K6Jl5\x83\x81L2S" #(compile-in
+ compile-short-circuit #fn(":000n683H3=07001828464:83=H3>070018283<64:21>7205161:" #(compile-in
+ #fn("<000n170AFO903<54471A2252471A905053471A2352474AF902903=90490556475A062:" #(compile-in
emit dup pop compile-short-circuit mark-label)) make-label) compile-short-circuit)
- compile-sym #fn(";000x4j09l1n2\x82gdK4L1S" #(#fn(":000x1\x81?N>0l0\x83p03ga\x81L3S\x814?NR0l0\x83p03ha\x814\x815K4Jl1\x83l2\x845K1h\x814Z3L2Sj3p02K1IN>0Jl4j5p02K1K1NA0l0\x83j6j5p02K1L3Sl0\x83p03i2ap02L3S" #(emit
+ compile-sym #fn(";000n420>71821ED5461:" #(#fn(":000n10X3>070A903EG063:0<X3R070A903KG0<0=54471A72F=51K0<h362:2390251;3>04742590251513A070A26259025163:70A903r2G90263:" #(emit
bcode:cdepth nnn #fn(constant?) printable? #fn(top-level-value) loadv))
- lookup-sym) compile-sym)
- compile-thunk #fn(";000x1l0j1j2W1fW1\x81W1\x83K4L1S" #(compile #fn(nconc)
- lambda) #0#)
- compile-while #fn("9000x4j09l1\x81K1l1\x81K1L2S" #(#fn(":000x2l0\x83\x84el1K0K4Jl2\x83\x81K2Jl0\x83\x84ep02K4Jl3\x83j4\x82K3Jl3\x83j5K2Jl0\x83\x84ep03K4Jl3\x83j6\x81K3Jl2\x83\x82L2S" #(compile-in
+ lookup-sym) compile-sym)
+ compile-thunk #fn(";000n1702122e1qe10e1A5461:" #(compile #fn(nconc)
+ lambda) #0#)
+ compile-while #fn("9000n420>710517105162:" #(#fn(":000n270AFO715054472A052470AFO90254473A24153473A2552470AFO90354473A26053472A162:" #(compile-in
void mark-label emit brf pop jmp)) make-label) compile-while)
- const-to-idx-vec #fn("9000x1j09j1l2\x81K1K1L1S" #(#fn("9000x1l0j19l2\x83K1K2J\x81S" #(table.foreach
- #fn("8000x2\x83\x82\x81cS" #()) bcode:ctable))
- #fn(vector.alloc)
- bcode:nconst) const-to-idx-vec)
- copy-tree #fn("8000x1\x81;N40\x81Sl0\x814K1l0\x815K1FS" #(copy-tree) copy-tree)
- count #fn("7000x2j09dL1S" #(#fn("9000x1j09t0J\x81\x83\x84gL3S" #(#fn(":000x3\x82\x8950n2S\x83\x81\x825\x81\x824K1N90n2h}M40n2L3S" #() count-)))) count)
- delete-duplicates #fn("8000x1l0\x81iDK2N<0j19j2K0L1S\x81;N40\x81Sj3\x814\x815L2S" #(length>
- #fn("8000x1j09dK1\x83fL2S" #(#fn("6000x1j09t0J\x81S" #(#fn("9000x2\x81;N80l0\x82L1Sj1p10\x814K2N90\x83\x815\x82L2Sj2p10\x814dK3J\x83\x815\x814\x82FL2S" #(reverse!
- #fn(has?) #fn(put!))))))) #fn(table) #fn("8000x2l0\x81\x82K2N80l1\x82L1S\x81l1\x82K1FS" #(member
+ const-to-idx-vec #fn("9000n120>21720515161:" #(#fn("9000n17021>72A515240:" #(table.foreach
+ #fn("8000n2A10p:" #()) bcode:ctable)) #fn(vector.alloc) bcode:nconst) const-to-idx-vec)
+ copy-tree #fn("8000n10H3400:700<51700=51P:" #(copy-tree) copy-tree)
+ count #fn("7000n220>D61:" #(#fn("9000n120>?040AFE63:" #(#fn(":000n31J5082:A01=01<5139082KM@408263:" #() count-)))) count)
+ delete-duplicates #fn("8000n1700rD523<021>225061:0H3400:230<0=62:" #(length>
+ #fn("8000n120>D51Aq62:" #(#fn("6000n120>?040:" #(#fn("9000n20H38070161:219100<52390A0=162:229100<D534A0=0<1P62:" #(reverse!
+ #fn(has?) #fn(put!))))))) #fn(table) #fn("8000n270015238071161:071151P:" #(member
delete-duplicates))) delete-duplicates)
- disassemble #fn("=000y1\x82\x89C0l0\x81gK2Jl1K0JdSM30dJj2\x824j3\x81K1j4\x81K1L3S" #(disassemble
- newline #fn("7000x3j09dL1S" #(#fn(":000x1j09t0Jg\x83h~j1{Jl2j3l4\x84gK2j5K3Jj69i4j7\x84K1L2S" #(#fn("9000x1\x81CIN60J\x81B7ND0l0j1K1Jl2\x81p10h}L2Sl3\x81L1S" #(princ
- "\n" disassemble print) print-val) #fn("7000x1l0j1L1S" #(princ "\t")) princ
- "maxstack " ref-int32-LE "\n" #fn(":000x2d\x81\x82_NE0Jj09j1j29el3K3K1M\x19/S" #(#fn(";000x1l0\x83i4K2N90l1K0M30dJgp20h~j2{Jl3l4\x83i4~K1j5j6\x81K1j7K4J\x83h}v00Jj89\x81L1S" #(>
- newline #fn("7000x1l0j1L1S" #(princ "\t")) princ hex5 ": " #fn(string) "\t"
- #fn("=000x1j0\x81j1K2NP0p20p32l2p31p10K2aK1Jp10i4}v10Sj0\x81j3K2NL0p20p32p31p10aaK1Jp10h}v10Sj0\x81j4K2NK0l5j6p31p10aK1K1Jp10h}v10Sj0\x81j7K2NO0l5j6l2p31p10K2K1K1Jp10i4}v10Sj0\x81j8K2Nf0l5j6p31p10aK1j9K2Jp10h}v10Jl5j6p31p10aK1K1Jp10h}v10Sj0\x81j:K2N\x9c0l5j6l2p31p10K2K1j9K2Jp10i4}v10Jl5j6l2p31p10K2K1K1Jp10i4}v10J\x83j;\x87X0l5j9K1Jl5j6l2p31p10K2K1j9K2Jp10i4}v10SdS\x81j<UNQ0l5j6l2p31p10K2K1j9K2Jp10i4}v10Sj0\x81j=K2NX0l5j>l?p10i,l@p31p10K2Y3K1K2Jp10i2}v10Sj0\x81jAK2NX0l5j>l?p10i,l2p31p10K2Y3K1K2Jp10i4}v10SeS" #(#fn(memq)
+ disassemble #fn("=000|11JC0700E52471504D:@30D4221<230512405163:" #(disassemble
+ newline #fn("7000n320>D61:" #(#fn(":000n120>?04EAK\x8021~4722374FE522553426>r427F5162:" #(#fn("9000n10\\;36040[S3D07021514720910KM62:73061:" #(princ
+ "\n" disassemble print) print-val) #fn("7000n1702161:" #(princ "\t")) princ
+ "maxstack " ref-int32-LE "\n" #fn(":000n2D01L3E0420>2122>O735351@\x19/:" #(#fn(";000n170Ar4523907150@30D4E920K\x8022~47374Ar4\x8051252605127544AKMz00428>061:" #(>
+ newline #fn("7000n1702161:" #(princ "\t")) princ hex5 ": " #fn(string) "\t"
+ #fn("=000n120021523P09209327293191052G514910r4Mz10:20023523L0920932931910GG514910KMz10:20024523K07526931910G51514910KMz10:20027523O07526729319105251514910r4Mz10:20028523f07526931910G5129524910KMz1047526931910G51514910KMz10:2002:523\x9c0752672931910525129524910r4Mz1047526729319105251514910r4Mz104A2;CX07529514752672931910525129524910r4Mz10:D:02<c3Q0752672931910525129524910r4Mz10:2002=523X0752>7?910r,7@93191052g351524910r2Mz10:2002A523X0752>7?910r,7293191052g351524910r4Mz10:O:" #(#fn(memq)
(loadv.l loadg.l setg.l) ref-int32-LE (loadv loadg setg)
(loada seta call tcall list + - * / vector argc vargc loadi8 apply tapply)
princ #fn(number->string) (loada.l seta.l largc lvargc call.l tcall.l) (loadc
@@ -220,267 +208,263 @@
setc) " " (loadc.l setc.l optargs keyargs) keyargs brbound (jmp brf brt brne
brnn brn) "@"
hex5 ref-int16-LE (jmp.l brf.l brt.l brne.l brnn.l brn.l)))))
- #fn(table.foldl) #fn("8000x3n2IO@0J\x82p21\x83aTIN40J\x81S" #()) Instructions))
+ #fn(table.foldl) #fn("8000n382;I@041921AGQ;34040:" #()) Instructions))
#fn(length))))) #fn(function:code) #fn(function:vals)) disassemble)
- div #fn("8000x2\x81\x82]\x81g_INC0J\x82g_IN40JhIO50Ji/IO40Jg}S" #() div)
- emit #fn("G000y2n2\x89b0\x82j0TINC0J\x81ga:IN:0J\x81ga4j1TN;0\x81gaj2GM:0\x81g\x82\x81gaFcM\xe20j3\x82j4K2NA0l5\x81n24K2W1t2M30dJj69j7\x82j8K2K1Jj99j7\x82j:K2K1J\x82j;\x87\\0n2j<VN=0j=t1Jft2MF0n2j>VN=0j?t1Jft2M30eM30dJ\x82j@\x87\\0n2jAVN=0jBt1Jft2MF0n2jCVN=0jDt1Jft2M30eM30dJjE9\x81ga:N90\x81ga4M30f\x81gaK2J\x81S" #(car
- cdr cadr #fn(memq) (loadv loadg setg) bcode:indexfor #fn("8000x1\x81IN=0Jl0p024j1K2N80\x816v01SdS" #(>
+ div #fn("8000n201k0EL;3C041EL;3404K;I504r/;I404EM:" #() div) emit
+ #fn("G000|282Jb0120Q;3C040EGB;3:040EG<21Q3;00EG22_@:00E10EGPp@\xe2023124523A075082<52e1?2@30D426>271285251429>2712:5251412;C\\0822<d3=02=?14q?2@F0822>d3=02??14q?2@30O@30D412@C\\0822Ad3=02B?14q?2@F0822Cd3=02D?14q?2@30O@30D42E>0EGB3900EG<@30q0EG5240:" #(car
+ cdr cadr #fn(memq) (loadv loadg setg) bcode:indexfor #fn("8000n10;3=0470902<21523800Tz01:D:" #(>
255)) #fn(assq) ((loadv loadv.l) (loadg loadg.l) (setg setg.l) (loada loada.l)
(seta seta.l))
- #fn("8000x1\x81INL0Jl0p024j1K2IO=0Jl0p026j1K2N80\x816v01SdS" #(> 255))
+ #fn("8000n10;3L0470902<2152;I=0470902T21523800Tz01:D:" #(> 255))
((loadc loadc.l) (setc setc.l)) loada (0) loada0 (1) loada1 loadc (0 0)
- loadc00 (0 1) loadc01 #fn(">000x2\x84j0TIN\x9a0J\x81j1TIN80J\x826j2TNE0\x83gp024j3l4\x82K1FFcMu0\x81j1\x87B0\x83gp024j5\x825FFcM_0\x81j6\x87B0\x83gp024j7\x825FFcMI0\x81j2\x87B0\x83gp024j8\x825FFcM30eIO^0J\x84j5TIN70J\x81j2TN@0\x83gp024j3\x825FFcS\x83gl9\x84p02F\x82K2cS" #(brf
+ loadc00 (0 1) loadc01 #fn(">000n2F20Q;3\x9a04021Q;38041T22Q3E0AE902<2374151PPp@u0021CB0AE902<251=PPp@_0026CB0AE902<271=PPp@I0022CB0AE902<281=PPp@30O;I^04F25Q;3704022Q3@0AE902<231=PPp:AE79F902P152p:" #(brf
not null? brn cddr brt eq? brne brnn nreconc))) emit)
- emit-optional-arg-inits #fn("8000x5n2:N=0j09l1\x81K1L1SdS" #(#fn("<000x1l0\x83j1p04K3Jl0\x83j2\x81K3Jl3\x83l4p03p04K2\x84Fel5p02K1K4Jl0\x83j6p04K3Jl0\x83j7K2Jl8\x83\x81K2Jl9\x83\x84p025p03p04h}L5S" #(emit
+ emit-optional-arg-inits #fn("8000n582B3=020>7105161:D:" #(#fn("<000n170A2190453470A22053473A7490390452FPO759025154470A2690453470A2752478A052479AF902=903904KM65:" #(emit
brbound brt compile-in list-head cadar seta pop mark-label
emit-optional-arg-inits)) make-label) emit-optional-arg-inits)
- encode-byte-code #fn("8000x1j0l1\x81K1L1S" #(#fn("8000x1j0l1\x81K1L1S" #(#fn(";000x1j09l1j2\x81K1i3j2\x81K1i2][2}j3K2L1S" #(#fn("=000x1j09j1\x83K1gj2K0j2K0j3K0eeL7S" #(#fn("?000x7j0n4j1K2Jd\x82\x81_N\xff0Jp10\x82at5Jn5j2\x87O0j3n2p10\x82h}aj4n4K1K3J\x82i2}t1M\xcf0j0n4l5j6l7\x83N<0j89n5K1M40n5K2K1K2J\x82h}t1J\x82\x81_N:0p10\x82aM30et6Jj9n5j:K2N^0j3n3j4n4K1n6K3Jj0n4\x83N70l;M40l<gK1K2J\x82h}t1M_0n5j=\x87G0j0n4l;n6K1K2J\x82h}t1MC0n6?N<0j>9n5K1M30eM_/Jl?j@9n3K2JjAn4L1S" #(#fn(io.write)
- #int32(0) label #fn(put!) #fn(sizeof) byte #fn(get) Instructions #fn("7000x1\x81j0\x8750j1S\x81j2\x8750j3S\x81j4\x8750j5S\x81j6\x8750j7S\x81j8\x8750j9S\x81j:\x8750j;Sp05S" #(jmp
+ encode-byte-code #fn("8000n1207105161:" #(#fn("8000n1207105161:" #(#fn(";000n120>7122051r322051r2ki2M235261:" #(#fn("=000n120>21A51E225022502350OO67:" #(#fn("?000n7208421524D10L3\xff049101G?548522CO023829101KMG2484515341r2M?1@\xcf02084752677A3<028>8551@408552515241KM?1410L3:09101G@30O?6429852:523^02383248451865342084A3707;@407<E515241KM?1@_0852=CG020847;86515241KM?1@C086X3<02>>8551@30O@_/47?2@>835242A8461:" #(#fn(io.write)
+ #int32(0) label #fn(put!) #fn(sizeof) byte #fn(get) Instructions #fn("7000n1020C5021:022C5023:024C5025:026C5027:028C5029:02:C502;:905:" #(jmp
jmp.l brt brt.l brf brf.l brne brne.l brnn brnn.l brn brn.l))
- #fn(memq) (jmp brf brt brne brnn brn) int32 int16 brbound #fn(":000x1j0\x81j1K2NH0j2p04l3p06K1K2J\x84h}v01Sj0\x81j4K2N`0j2p04l5p06K1K2J\x84h}v01Jj2p04l5p20\x84aK1K2J\x84h}v01Sj0\x81j6K2N\x820j2p04l3p06K1K2J\x84h}v01Jj2p04l3p20\x84aK1K2J\x84h}v01Jp05j7\x87J0j2p04l3p20\x84aK1K2J\x84h}v01SdSj2p04l5p06K1K2J\x84h}v01S" #(#fn(memq)
+ #fn(memq) (jmp brf brt brne brnn brn) int32 int16 brbound #fn(":000n120021523H0229047390651524FKMz01:20024523`0229047590651524FKMz0142290475920FG51524FKMz01:20026523\x820229047390651524FKMz0142290473920FG51524FKMz01490527CJ02290473920FG51524FKMz01:D:229047590651524FKMz01:" #(#fn(memq)
(loadv.l loadg.l setg.l loada.l seta.l largc lvargc call.l tcall.l)
#fn(io.write) int32 (loadc setc) uint8 (loadc.l setc.l optargs keyargs)
- keyargs)) table.foreach #fn("<000x2j0p04\x81K2Jj1p04p10N70l2M40l3j4p02\x82K2\x81~K1L2S" #(#fn(io.seek)
+ keyargs)) table.foreach #fn("<000n22090405242190491037072@4073249021520\x805162:" #(#fn(io.seek)
#fn(io.write) int32 int16 #fn(get))) #fn(io.tostring!)))
#fn(length) #fn(table) #fn(buffer))) >= #fn(length) 65536)) list->vector))
- reverse!) encode-byte-code)
- error #fn(":000y0j0j1\x81FL1S" #(#fn(raise) error) error) eval
- #fn("8000x1l0l1\x81K1K1L0S" #(compile-thunk expand) eval) even? #fn("8000x1j0\x81hK2g^S" #(#fn(logand)) even?)
- every #fn("8000x2\x82;IOD0J\x81\x824K1IN:0Jl0\x81\x825L2S" #(every) every)
- expand #fn("A000x1j09dddddddddddL;S" #(#fn("8000x;j0t0Jj19t1Jj2W1t2Jj39t3Jj49t4Jj59t5Jj69t6Jj79t7Jj89t8Jj9t9Jj:9t:Jn:\x83fL2S" #(#fn("8000x2\x81AIO90Jj0\x81\x82K27S" #(#fn(assq)) top?)
- #fn("9000x1\x81;N40\x81S\x81j0VN40\x81S\x814:IN;0Jl1\x81K1j2TND0j3\x84l4\x81K1K1\x84\x815K1L2S\x814\x84\x815K1FS" #(((begin))
- caar begin #fn(append) cdar) splice-begin) *expanded* #fn("9000x2\x81;N40\x81Sj09\x83j1\x82K2N90\x84\x81K1M30\x81L1S" #(#fn("9000x1j09p10j1\x84K2L1S" #(#fn("8000x1j09\x81N:0l1\x83K1M30fL1S" #(#fn(":000x1j09j1j2j3\x81K2p21K2L1S" #(#fn("8000x1p10O=0j0j19p20L2Sj29j39dK1p20K1L1S" #(#fn(map)
- #fn("8000x1p5:\x81\x83L2S" #()) #fn("7000x1j09\x81L1S" #(#fn("9000x1d\x81:N]0Jp62l0\x81K1TOA0\x81p6:\x814p10K2GM90\x81l1\x81K1GJ\x815t0M\x02/J\x83S" #(caar
- cdar)))) #fn("6000x1j09t0J\x81S" #(#fn("9000x1\x81;N40\x81S\x814:IN;0Jj0l1\x81K1TN;0\x814\x83\x815K1FSj29p6:\x814p10K2L1S" #(define
- caar #fn(":000x1j0j1j2l3\x81K1K2p20K2v20Jp72\x81Fp10\x835K1FS" #(#fn(nconc)
- #fn(map) #.list
- get-defined-vars))))))))
+ reverse!) encode-byte-code)
+ error #fn(":000|020210P61:" #(#fn(raise) error) error) eval
+ #fn("8000n170710515160:" #(compile-thunk expand) eval) even? #fn("8000n1200K52El:" #(#fn(logand)) even?)
+ every #fn("8000n21H;ID0401<51;3:047001=62:" #(every) every) expand
+ #fn("A000n120>DDDDDDDDDDD6;:" #(#fn("8000n;20?0421>?1422e1?2423>?3424>?4425>?5426>?6427>?7428>?8429?942:>?:48:Aq62:" #(#fn("8000n20Z;I904200152S:" #(#fn(assq)) top?)
+ #fn("9000n10H3400:020d3400:0<B;3;047105122Q3D023F7405151F0=5162:0<F0=51P:" #(((begin))
+ caar begin #fn(append) cdar) splice-begin) *expanded* #fn("9000n20H3400:20>A21152390F051@30061:" #(#fn("9000n120>91021F5261:" #(#fn("8000n120>03:071A51@30q61:" #(#fn(":000n120>2122230529215261:" #(#fn("8000n1910I=02021>92062:22>23>D519205161:" #(#fn(map)
+ #fn("8000n195:0A62:" #()) #fn("7000n120>061:" #(#fn("9000n1D0B3]0496270051QIA0096:0<91052_@90071051_40=?0@\x02/4A:" #(caar
+ cdar)))) #fn("6000n120>?040:" #(#fn("9000n10H3400:0<B;3;042071051Q3;00<A0=51P:22>96:0<9105261:" #(define
+ caar #fn(":000n1202122730515292052z2049720P910A=51P:" #(#fn(nconc)
+ #fn(map) #.list
+ get-defined-vars))))))))
#fn(nconc) #fn(map) #.list)) get-defined-vars)) define)) begin) expand-body)
- #fn(":000x2\x81;N40\x81S\x814:IN70J\x8145:NG0l0\x81K1p0:l1\x81K1\x82K2W2M40\x814p04\x815\x82K2FS" #(caar
- cadar) expand-lambda-list) #fn("8000x1\x81;N60\x81W1S\x814:N@0l0\x81K1p05\x815K1FS\x814p05\x815K1FS" #(caar) l-vars)
- #fn(";000x2j09\x816l1\x81K1l2\x81K1p05\x816K1L4S" #(#fn(":000x4j09j1j2j3n3K2\x84K2L1S" #(#fn(";000x1j0j1W1p24\x83\x81K2W1p23p02\x81K2\x84L4S" #(#fn(nconc)
+ #fn(":000n20H3400:0<B;37040<=B3G07005190:71051152e2@400<9040=152P:" #(caar
+ cadar) expand-lambda-list) #fn("8000n10H3600e1:0<B3@0700519050=51P:0<9050=51P:" #(caar) l-vars)
+ #fn(";000n220>0T71051720519050T5164:" #(#fn(":000n420>2122238352F5261:" #(#fn(";000n12021e1924A052e1923902052F64:" #(#fn(nconc)
lambda)) #fn(nconc) #fn(map) #.list)) lastcdr cddr) expand-lambda)
- #fn("<000x2\x815<IO60J\x816;NN0l0\x81K1\x8940\x81Sj1\x816p0:l2\x81K1\x82K2W3Sj39l4\x81K1l5\x81K1l0\x81K1p05l4\x81K1K1L4S" #(cddr
- define caddr #fn(":000x4j09j1j2j3n3K2\x84K2L1S" #(#fn(";000x1j0j1W1\x84p24\x83\x81K2FW1p23p02\x81K2L3S" #(#fn(nconc)
+ #fn("<000n20=V;I6040TH3N070051J400:210T90:72051152e3:23>740517505170051905740515164:" #(cddr
+ define caddr #fn(":000n420>2122238352F5261:" #(#fn(";000n12021e1F924A052Pe192390205263:" #(#fn(nconc)
define)) #fn(nconc) #fn(map) #.list)) cdadr caadr) expand-define)
- #fn("7000x2j09\x816L1S" #(#fn("<000x1j0p13l1\x83K1j2j3j49\x81K2\x84K2K2FS" #(begin
- cddr #fn(nconc) #fn(map) #fn(":000x1\x814l0p2:\x816p11K2K1K0p11W3S" #(compile-thunk))))) expand-let-syntax)
- #fn("6000x2\x81S" #() local-expansion-env)
- #fn("7000x2\x81;N40\x81Sj09\x814L1S" #(#fn("9000x1j09j1\x81\x84K2L1S" #(#fn("7000x1j09j19L1S" #(#fn(":000x1\x83IN60J\x835:NM0p3:\x836p205X2p39l0\x83K1p21K2L2S\x83IOA0Jp10>7IO70Jp10AN60\x81L0Sj19l2p20K1L1S" #(caddr
- #fn("8000x1\x81NB0p4:\x81p305X2p31L2Sp20j0\x8760p30Sp20j1\x87>0p46p30p31L2Sp20j2\x87>0p47p30p31L2Sp20j3\x87>0p48p30p31L2S\x83L0S" #(quote
+ #fn("7000n220>0T61:" #(#fn("<000n12091371A51222324>052F5252P:" #(begin cddr
+ #fn(nconc)
+ #fn(map)
+ #fn(":000n10<7092:0T911525150911e3:" #(compile-thunk))))) expand-let-syntax)
+ #fn("6000n20:" #() local-expansion-env)
+ #fn("7000n20H3400:20>0<61:" #(#fn("9000n120>210F5261:" #(#fn("7000n120>21>61:" #(#fn(":000n1A;3604A=B3M093:AT920=f293970A519215262:A;IA04910RS;I704910Z360060:21>729205161:" #(caddr
+ #fn("8000n103B094:0930=f293162:92020C60930:92021C>094693093162:92022C>094793093162:92023C>094893093162:A60:" #(quote
lambda define let-syntax)) macrocall?))
- #fn("7000x0j09dK1p20L1S" #(#fn("6000x1j09t0J\x81S" #(#fn("9000x1\x81;N40\x81S\x814;N70\x814M<0p4:\x814p31K2\x83\x815K1FS" #())))))))
- #fn(assq)))) expand-in)))) expand)
- expand-define #fn("=000x1j0\x816l1\x81K1:N:0l1\x81K1ML0\x816>N;0l2K0W1M=0l3j4l5\x81K1K2L2S" #(#fn("<000x2\x81>N:0j0\x81\x824W3Sj0\x814j1j2W1\x815W1j3\x82K1\x814K4W3S" #(set!
+ #fn("7000n020>D5192061:" #(#fn("6000n120>?040:" #(#fn("9000n10H3400:0<H3700<@<094:0<93152A0=51P:" #())))))))
+ #fn(assq)))) expand-in)))) expand)
+ expand-define #fn("=000n1200T71051B3:071051@L00TR3;07250e1@=07324750515262:" #(#fn("<000n20R3:02001<e3:200<2122e10=e1231510<54e3:" #(set!
#fn(nconc) lambda #fn(copy-list))) cddr void error "compile error: invalid syntax "
print-to-string) expand-define)
- filter #fn("7000x2j09dL1S" #(#fn("9000x1j09t0J\x81\x83\x84fW1L3S" #(#fn("9000x3n2d\x82:NS0Jp10\x824K1N?0n2\x824fFH5t2M30dJ\x825t1M\x0c/J5S" #() filter-)))) filter)
- fits-i8 #fn("8000x1\x81@INF0Jl0\x81i\xb0K2IN:0Jl1\x81i\xafL2S" #(>=
- <=) fits-i8)
- foldl #fn(":000x3n2\x8940\x82Sl0\x81\x81n24\x82K2n25L3S" #(foldl) foldl)
- foldr #fn(";000x3n2\x8940\x82S\x81n24l0\x81\x82n25K3L2S" #(foldr) foldr)
- for-each #fn(";000y2j09dL1S" #(#fn(":000x1j09t0Jp02\x89J0d\x84:NA0J\x83\x844K1J\x845v01M\x1e/M;0\x81\x83\x84p02FK2JdS" #(#fn(":000x2\x824:NI0\x81j0j1\x82K2X2J\x83\x81j0j2\x82K2L2SdS" #(#fn(map)
+ filter #fn("7000n220>D61:" #(#fn("9000n120>?040AFqe163:" #(#fn("9000n382D1B3S049101<513?0821<qPN=?2@30D41=?1@\f/4=:" #() filter-)))) filter)
+ fits-i8 #fn("8000n10Y;3F04700r\xb052;3:04710r\xaf62:" #(>= <=) fits-i8)
+ foldl #fn(":000n382J401:700082<15282=63:" #(foldl) foldl) foldr
+ #fn(";000n382J401:082<700182=5362:" #(foldr) foldr) for-each #fn(";000|220>D61:" #(#fn(":000n120>?04902JJ0DFB3A04AF<514F=z01@\x1e/@;00AF902P524D:" #(#fn(":000n21<B3I002021152f24A0202215262:D:" #(#fn(map)
#.car #.cdr) for-each-n)))) for-each)
- get-defined-vars #fn("8000x1l0\x83\x81K1L1S" #(delete-duplicates) #1=#(#fn("9000x1\x81;N40fS\x814j0TIN60J\x815:Nd0\x816>IN70J\x816W1IOS0J\x816:INE0Jl1\x81K1>IN:0Jl1\x81K1W1IO40JfS\x814j2\x87>0j3j4\x83\x815K2|2SfS" #(define
+ get-defined-vars #fn("8000n170A05161:" #(delete-duplicates) #1=#(#fn("9000n10H340q:0<20Q;36040=B3d00TR;37040Te1;IS040TB;3E0471051R;3:0471051e1;I404q:0<22C>02324A0=52\x7f2:q:" #(define
caadr begin #fn(nconc) #fn(map)) #1#) ()))
- hex5 #fn("9000x1l0j1\x81i@K2i5j2L3S" #(string.lpad #fn(number->string)
- #\0) hex5)
- identity #fn("6000x1\x81S" #() identity) in-env?
- #fn("8000x2\x82:INF0Jj0\x81\x824K2IO:0Jl1\x81\x825L2S" #(#fn(memq)
- in-env?) in-env?)
- index-of #fn(":000x3\x82\x8940eS\x81\x824\x8750n2Sl0\x81\x825n2h}L3S" #(index-of) index-of)
- io.readall #fn("7000x1j09j1K0L1S" #(#fn("8000x1j0\x81\x83K2Jj19j2\x81K1L1S" #(#fn(io.copy)
- #fn("7000x1\x81j0VIN:0Jj1p10K1N70j2L0S\x81S" #("" #fn(io.eof?)
- #fn(eof-object)))
+ hex5 #fn("9000n170210r@52r52263:" #(string.lpad #fn(number->string)
+ #\0) hex5)
+ identity #fn("6000n10:" #() identity) in-env?
+ #fn("8000n21B;3F042001<52;I:047101=62:" #(#fn(memq) in-env?) in-env?)
+ index-of #fn(":000n31J40O:01<C5082:7001=82KM63:" #(index-of) index-of)
+ io.readall #fn("7000n120>215061:" #(#fn("8000n1200A52421>2205161:" #(#fn(io.copy)
+ #fn("7000n1020d;3:0421910513702260:0:" #("" #fn(io.eof?)
+ #fn(eof-object)))
#fn(io.tostring!))) #fn(buffer)) io.readall)
- io.readline #fn("8000x1j0\x81j1L2S" #(#fn(io.readuntil) #\newline) io.readline)
- io.readlines #fn("8000x1l0l1\x81L2S" #(read-all-of io.readline) io.readlines)
- iota #fn("8000x1l0l1\x81L2S" #(map-int identity) iota)
- keyword->symbol #fn("9000x1j0\x81K1N@0j1j2j3\x81K1K1L1S\x81S" #(#fn(keyword?)
- #fn(symbol) #fn("<000x1j0\x81gj1\x81j2\x81K1K2L3S" #(#fn(string.sub)
- #fn(string.dec)
- #fn(length)))
- #fn(string)) keyword->symbol)
- keyword-arg? #fn("7000x1\x81:IN90Jj0\x814L1S" #(#fn(keyword?)) keyword-arg?)
- lambda-arg-names #fn("9000x1l0j1l2\x81K1L2S" #(map! #fn("7000x1\x81:N90l0\x814L1S\x81S" #(keyword->symbol))
- to-proper) lambda-arg-names)
- lambda-vars #fn("7000x1j09dL1S" #(#fn(":000x1j09t0J\x81\x83\x83eeK4Jl1\x83L1S" #(#fn(";000x4\x81<IO50J\x81>N40dS\x81:IN60J\x814>NS0n2IO50Jn3N<0l0j1\x82j2L3S\x83\x815\x82n2n3L4S\x81:IN60J\x814:N\x870l3\x814i2K2IN90Jl4\x81K1>N60eM=0l0j5\x814j6\x82K4Jj7l4\x81K1K1N<0\x83\x815\x82n2dL4Sn3N<0l0j1\x82j8L3S\x83\x815\x82dn3L4S\x81:N>0l0j9\x814j6\x82L4S\x81\x82\x87:0l0j1\x82L2Sl0j9\x81j6\x82L4S" #(error
+ io.readline #fn("8000n12002162:" #(#fn(io.readuntil) #\newline) io.readline)
+ io.readlines #fn("8000n17071062:" #(read-all-of io.readline) io.readlines)
+ iota #fn("8000n17071062:" #(map-int identity) iota) keyword->symbol
+ #fn("9000n1200513@02122230515161:0:" #(#fn(keyword?)
+ #fn(symbol)
+ #fn("<000n1200E210220515263:" #(#fn(string.sub)
+ #fn(string.dec) #fn(length))) #fn(string)) keyword->symbol)
+ keyword-arg? #fn("7000n10B;3904200<61:" #(#fn(keyword?)) keyword-arg?)
+ lambda-arg-names #fn("9000n170217205162:" #(map! #fn("7000n10B390700<61:0:" #(keyword->symbol))
+ to-proper) lambda-arg-names)
+ lambda-vars #fn("7000n120>D61:" #(#fn(":000n120>?040AAOO54471A61:" #(#fn(";000n40V;I5040R340D:0B;36040<R3S082;I504833<0702112263:A0=1828364:0B;36040<B3\x870730<r252;390474051R360O@=070250<2615442774051513<0A0=182D64:833<0702112863:A0=1D8364:0B3>070290<26164:01C:07021162:7029026164:" #(error
"compile error: invalid argument list "
". optional arguments must come after required." length= caar "compile error: invalid optional argument "
" in list " #fn(keyword?) ". keyword arguments must come last."
"compile error: invalid formal argument ") check-formals) lambda-arg-names))) lambda-vars)
- last-pair #fn("7000x1\x815;N40\x81Sl0\x815L1S" #(last-pair) last-pair)
- lastcdr #fn("7000x1\x81;N40\x81Sl0\x81K15S" #(last-pair) lastcdr)
- length= #fn("9000x2\x82g_N40eS\x82g^N50\x81;S\x81;N60\x82g^Sl0\x815\x82h~L2S" #(length=) length=)
- length> #fn("9000x2\x82g_N40\x81S\x82g^N;0\x81:IN40J\x81S\x81;N60\x82g_Sl0\x815\x82h~L2S" #(length>) length>)
- list->vector #fn("7000x1j0\x81|2S" #(#.vector) list->vector)
- list-head #fn(":000x2l0\x82gK2N40fS\x814l1\x815\x82h~K2FS" #(<=
- list-head) list-head)
- list-ref #fn("8000x2l0\x81\x82K24S" #(list-tail) list-ref) list-tail
- #fn("9000x2l0\x82gK2N40\x81Sl1\x815\x82h~L2S" #(<= list-tail) list-tail)
- list? #fn("7000x1\x81<IO@0J\x81:IN90Jl0\x815L1S" #(list?) list?) load
- #fn("9000x1j09j1\x81j2K2L1S" #(#fn("7000x1j09j19zS" #(#fn("9000x0j09dK1dddL3S" #(#fn("6000x1j09t0J\x81S" #(#fn(":000x3j0p10K1OC0\x83j1p10K1\x81l2\x82K1L3Sj3p10K1Jl2\x82L1S" #(#fn(io.eof?)
+ last-pair #fn("7000n10=H3400:700=61:" #(last-pair) last-pair) lastcdr
+ #fn("7000n10H3400:70051=:" #(last-pair) lastcdr) length= #fn("9000n21EL340O:1El3500H:0H3601El:700=1K\x8062:" #(length=) length=)
+ length> #fn("9000n21EL3400:1El3;00B;34040:0H3601EL:700=1K\x8062:" #(length>) length>)
+ list->vector #fn("7000n1200\x7f2:" #(#.vector) list->vector)
+ list-head #fn(":000n2701E52340q:0<710=1K\x8052P:" #(<= list-head) list-head)
+ list-ref #fn("8000n2700152<:" #(list-tail) list-ref) list-tail
+ #fn("9000n2701E523400:710=1K\x8062:" #(<= list-tail) list-tail) list?
+ #fn("7000n10V;I@040B;3904700=61:" #(list?) list?) load #fn("9000n120>210225261:" #(#fn("7000n120>21>}:" #(#fn("9000n020>D51DDD63:" #(#fn("6000n120>?040:" #(#fn(":000n32091051IC0A219105107215163:2391051472161:" #(#fn(io.eof?)
#fn(read) load-process #fn(io.close)))))))
- #fn("9000x1j0\x83K1Jj1j2p10\x81W3L1S" #(#fn(io.close)
- #fn(raise) load-error)))) #fn(file) :read) load)
- load-process #fn("7000x1l0\x81L1S" #(eval) load-process) lookup-sym
- #fn("7000x4\x82\x8950j0Sj19\x824L1S" #((global)
- #fn(":000x1j09l1\x83\x81gK3L1S" #(#fn(";000x1\x81N@0p13N40\x81Sp12\x81FSl0p10p115p13IO50J\x83<N80p12M70p12h}eL4S" #(lookup-sym))
- index-of))) lookup-sym)
- macrocall? #fn("7000x1\x814>IN90Jl0\x814L1S" #(symbol-syntax) macrocall?)
- macroexpand-1 #fn("8000x1\x81;N40\x81Sj09l1\x81K1L1S" #(#fn("7000x1\x81N80\x81\x835|2S\x83S" #())
- macrocall?) macroexpand-1)
- make-code-emitter #fn("9000x0fj0K0gj1b4S" #(#fn(table) +inf.0) make-code-emitter)
- make-label #fn("6000x1j0L0S" #(#fn(gensym)) make-label)
- make-perfect-hash-table #fn("7000x1j09dL1S" #(#fn("8000x1j0t0Jj19dK1j2\x83K1L1S" #(#fn("9000x2l0l1j2\x81K1K1\x82L2S" #(mod0
- abs #fn(hash)) $hash-keyword) #fn("6000x1j09t0J\x81S" #(#fn("9000x1j09j1i2\x81[2eK2L1S" #(#fn("7000x1j09dK1p30L1S" #(#fn("6000x1j09t0J\x81S" #(#fn("8000x1\x81:N=0j09l1\x81K1L1Sp10S" #(#fn(":000x1j09i2p50\x81p30K2[2L1S" #(#fn("9000x1p30\x81aN=0p50p40h}L1Sp30\x81\x83cJp30\x81h}l0p10K1cJp20p105L1S" #(cdar))))
+ #fn("9000n120A51421229100e361:" #(#fn(io.close)
+ #fn(raise) load-error))))
+ #fn(file) :read) load)
+ load-process #fn("7000n170061:" #(eval) load-process) lookup-sym
+ #fn("7000n41J5020:21>1<61:" #((global)
+ #fn(":000n120>71A0E5361:" #(#fn(";000n103@09133400:9120P:70910911=913;I504AV380912@70912KMO64:" #(lookup-sym))
+ index-of))) lookup-sym)
+ macrocall? #fn("7000n10<R;3904700<61:" #(symbol-syntax) macrocall?)
+ macroexpand-1 #fn("8000n10H3400:20>7105161:" #(#fn("7000n103800A=\x7f2:A:" #())
+ macrocall?) macroexpand-1)
+ make-code-emitter #fn("9000n0q2050E21o4:" #(#fn(table) +inf.0) make-code-emitter)
+ make-label #fn("6000n12060:" #(#fn(gensym)) make-label)
+ make-perfect-hash-table #fn("7000n120>D61:" #(#fn("8000n120?0421>D5122A5161:" #(#fn("9000n270712205151162:" #(mod0
+ abs #fn(hash)) $hash-keyword) #fn("6000n120>?040:" #(#fn("9000n120>21r20i2O5261:" #(#fn("7000n120>D5193061:" #(#fn("6000n120>?040:" #(#fn("8000n10B3=020>7105161:910:" #(#fn(":000n120>r2950093052i261:" #(#fn("9000n19300G3=0950940KM61:9300Ap49300KM7091051p4920910=61:" #(cdar))))
caar)))))) #fn(vector.alloc))))) #fn(length)))) make-perfect-hash-table)
- make-system-image #fn(";000x1j0j1\x81j2j3j4K4j5L2S" #(#fn("8000x2j09l1l2L2S" #(#fn("7000x2dr0Jdr1Jj29j39L1S" #(*print-pretty*
- *print-readably* #fn("7000x1j09j19z\x81K0JS" #(#fn(":000x0j09l1j29l3j4K0K1K2K1Jj5p20L1S" #(#fn("=000x1j0j1j2j3\x81j2j4\x81K2K3X2p20K2Jj5p20l6L2S" #(#fn(write)
+ make-system-image #fn(";000n120210222324542562:" #(#fn("8000n220>717262:" #(#fn("7000n2Dw04Dw1422>23>61:" #(*print-pretty*
+ *print-readably* #fn("7000n120>21>}0504:" #(#fn(":000n020>7122>73245051525142592061:" #(#fn("=000n1202122230222405253f2920524259207662:" #(#fn(write)
#fn(nconc) #fn(map) #.list #fn(top-level-value)
- #fn(io.write) *linefeed*)) filter #fn("9000x1\x81AINw0Jj0\x81K17INl0Jj1\x81K1B7IOC0Jj2\x81K1j2j1\x81K1K1V7INK0Jj3\x81p21K27IN=0Jj4j1\x81K1K17S" #(#fn(constant?)
+ #fn(io.write) *linefeed*)) filter #fn("9000n10Z;3w0420051S;3l0421051[S;IC0422051222105151dS;3K0423092152S;3=04242105151S:" #(#fn(constant?)
#fn(top-level-value) #fn(string) #fn(memq)
#fn(iostream?))) simple-sort #fn(environment)
- #fn(io.close))) #fn("7000x1\x83K0Jj0\x81L1S" #(#fn(raise)))))
- #fn("6000x0\x83r0J\x84r1S" #(*print-pretty* *print-readably*))))
- *print-pretty* *print-readably*)) #fn(file) :write :create :truncate (*linefeed*
- *directory-separator* *argv* that *print-pretty* *print-width*
- *print-readably* *print-level* *print-length* *os-name*)) make-system-image)
- map! #fn("9000x2\x82d\x82:NB0J\x82\x81\x824K1GJ\x825t1M\x1d/JS" #() map!)
- map-int #fn("8000x2l0\x82gK2N40fSj19\x81gK1fFfL2S" #(<= #fn(":000x2\x81t1Jh\x84h~j09{J\x81S" #(#fn("8000x1\x84p10\x81K1fFHJ\x845v01S" #())))) map-int)
- mark-label #fn("9000x2l0\x81j1\x82L3S" #(emit label) mark-label) max
- #fn("<000y1\x82\x8940\x81Sl0j1\x81\x82L3S" #(foldl #fn("7000x2\x81\x82_N40\x82S\x81S" #())) max)
- member #fn("8000x2\x82;N40eS\x824\x81VN40\x82Sl0\x81\x825L2S" #(member) member)
- memv #fn("8000x2\x82;N40eS\x824\x81UN40\x82Sl0\x81\x825L2S" #(memv) memv)
- min #fn("<000y1\x82\x8940\x81Sl0j1\x81\x82L3S" #(foldl #fn("7000x2\x81\x82_N40\x81S\x82S" #())) min)
- mod #fn("9000x2\x81l0\x81\x82K2\x82[2~S" #(div) mod) mod0
- #fn("8000x2\x81\x81\x82]\x82[2~S" #() mod0) nan? #fn("7000x1\x81j0VIO70J\x81j1VS" #(+nan.0
+ #fn(io.close))) #fn("7000n1A50420061:" #(#fn(raise)))))
+ #fn("6000n0Aw04Fw1:" #(*print-pretty* *print-readably*)))) *print-pretty*
+ *print-readably*)) #fn(file) :write :create :truncate (*linefeed*
+ *directory-separator*
+ *argv* that
+ *print-pretty*
+ *print-width*
+ *print-readably*
+ *print-level*
+ *print-length*
+ *os-name*)) make-system-image)
+ map! #fn("9000n21D1B3B04101<51_41=?1@\x1d/4:" #() map!) map-int
+ #fn("8000n2701E52340q:21>0E51qPq62:" #(<= #fn(":000n20?14KFK\x8020>~40:" #(#fn("8000n1F910051qPN4F=z01:" #())))) map-int)
+ mark-label #fn("9000n270021163:" #(emit label) mark-label) max
+ #fn("<000|11J400:70210163:" #(foldl #fn("7000n201L3401:0:" #())) max)
+ member #fn("8000n21H340O:1<0d3401:7001=62:" #(member) member) memv
+ #fn("8000n21H340O:1<0c3401:7001=62:" #(memv) memv) min #fn("<000|11J400:70210163:" #(foldl
+ #fn("7000n201L3400:1:" #())) min)
+ mod #fn("9000n207001521i2\x80:" #(div) mod) mod0
+ #fn("8000n2001k1i2\x80:" #() mod0) nan? #fn("7000n1020d;I704021d:" #(+nan.0
-nan.0) nan?)
- negative? #fn("7000x1\x81g_S" #() negative?) nestlist
- #fn(";000x3l0n2gK2N40fS\x82l1\x81\x81\x82K1n2h~K3FS" #(<= nestlist) nestlist)
- newline #fn("9000\x8d00001000\x8e0000O70l0t0Jj1\x81l2K2JdS" #(*output-stream*
+ negative? #fn("7000n10EL:" #() negative?) nestlist
+ #fn(";000n37082E52340q:1710015182K\x8053P:" #(<= nestlist) nestlist)
+ newline #fn("9000\x8900001000\x8a0000I7070?0421072524D:" #(*output-stream*
#fn(io.write) *linefeed*) newline)
- nnn #fn("8000x1l0j1\x81L2S" #(count #fn("6000x1\x81<7S" #())) nnn)
- nreconc #fn("8000x2l0\x82\x81L2S" #(reverse!-) nreconc) odd?
- #fn("7000x1l0\x81K17S" #(even?) odd?) positive? #fn("8000x1l0\x81gL2S" #(>) positive?)
- princ #fn("9000y0j09l1L1S" #(#fn("7000x1er0Jj19j29L1S" #(*print-readably*
- #fn("7000x1j09j19z\x81K0JS" #(#fn("8000x0l0j1p20L2S" #(for-each
- #fn(write))) #fn("7000x1\x83K0Jj0\x81L1S" #(#fn(raise)))))
- #fn("6000x0\x83r0S" #(*print-readably*))))
- *print-readably*) princ)
- print #fn(":000y0l0j1\x81L2S" #(for-each #fn(write)) print)
- print-exception #fn("=000x1\x81:IND0J\x814j0TIN:0Jl1\x81i4K2NP0l2j3\x816j4l5\x81K1j6K5Jl7l8\x81K1K1M\x070\x81:IND0J\x814j9TIN:0Jl1\x81i4K2NN0l2\x816j:l8\x81K1j;K4Jl7l5\x81K1K1M\xd00\x81:IN@0J\x814j<TIN60J\x815:N?0l2j=\x816j>K3M\xac0\x81:IN80J\x814j?TNB0l2j@K1Jl2\x815X2M\x8d0\x81:IN80J\x814jATNG0lBl5\x81K1K1Jl2jC\x816K2Mi0lD\x81K1IN:0Jl1\x81i2K2NI0l7\x814K1Jl2jEK1JjF\x816K1M>0l2jGK1Jl7\x81K1Jl2lHL1S" #(type-error
+ nnn #fn("8000n17021062:" #(count #fn("6000n10VS:" #())) nnn) nreconc
+ #fn("8000n2701062:" #(reverse!-) nreconc) odd? #fn("7000n170051S:" #(even?) odd?)
+ positive? #fn("8000n1700E62:" #(>) positive?) princ
+ #fn("9000|020>7161:" #(#fn("7000n1Ow0421>22>61:" #(*print-readably*
+ #fn("7000n120>21>}0504:" #(#fn("8000n0702192062:" #(for-each
+ #fn(write))) #fn("7000n1A50420061:" #(#fn(raise)))))
+ #fn("6000n0Aw0:" #(*print-readably*))))
+ *print-readably*) princ)
+ print #fn(":000|07021062:" #(for-each #fn(write)) print)
+ print-exception #fn("=000n10B;3D040<20Q;3:04710r4523P072230T247505126554777805151@\x0700B;3D040<29Q;3:04710r4523N0720T2:780512;544777505151@\xd000B;3@040<2<Q;36040=B3?0722=0T2>53@\xac00B;38040<2?Q3B0722@514720=f2@\x8d00B;38040<2AQ3G07B75051514722C0T52@i07D051;3:04710r2523I0770<514722E5142F0T51@>0722G514770514727H61:" #(type-error
length= princ "type error: " ": expected " caddr ", got " print cadddr
bounds-error ": index " " out of bounds for " unbound-error "eval: variable "
" has no value" error "error: " load-error print-exception "in file " list?
- ": " #fn("8000x1j0\x81K1IO50J\x81>N70l1M40l2\x81L1S" #(#fn(string?) princ
- print))
+ ": " #fn("8000n120051;I5040R37071@4072061:" #(#fn(string?) princ print))
"*** Unhandled exception: " *linefeed*) print-exception)
- print-stack-trace #fn("8000x1j09ddL2S" #(#fn("=000x2j09t0Jj19t1Jj29l3l4\x83l5N70i5M40i4K2K1l6l7j8j9j:K0K2K2gL3S" #(#fn("8000x3j09j1\x81K1n2FL1S" #(#fn("9000x1j0\x83K1j0\x84K1\x87>0j1j2j3\x81W3L1Sj49j5\x83K1L1S" #(#fn(function:code)
- #fn(raise) thrown-value ffound #fn(":000x1gl0j1\x81K1K1j29{S" #(1- #fn(length)
- #fn("9000x1l0\x83\x81aK1NA0p30\x83\x81ap21p10L3SdS" #(closure?))))
+ print-stack-trace #fn("8000n120>DD62:" #(#fn("=000n220>?0421>?1422>7374A75370r5@40r45251767728292:505252E63:" #(#fn("8000n320>2105182P61:" #(#fn("9000n120A5120F51C>02122230e361:24>25A5161:" #(#fn(function:code)
+ #fn(raise) thrown-value ffound #fn(":000n1E70210515122>~:" #(1- #fn(length)
+ #fn("9000n170A0G513A0930A0G92191063:D:" #(closure?))))
#fn(function:vals))) #fn(function:name)) find-in-f)
- #fn("8000x2j0j19j2zL1S" #(#fn(";000x1\x81NH0j0l1j2j3l4\x81K1K2j5K2L1Sj6S" #(#fn(symbol)
+ #fn("8000n22021>22}61:" #(#fn(";000n103H0207122237405152255261:26:" #(#fn(symbol)
string.join #fn(map) #fn(string) reverse! "/" lambda))
- #fn("8000x0l0j19\x84K2JeS" #(for-each #fn("9000x1p10\x81\x83fL3S" #())))
- #fn("7000x1\x81:INB0J\x814j0TIN80J\x816j1TN80l2\x81L1Sj3\x81L1S" #(thrown-value
- ffound caddr #fn(raise)))) fn-name) #fn("8000x3l0j19\x81L2S" #(for-each #fn("9000x1l0j1p02j2K3Jl3p11\x81ga\x84K2l4\x81K15FK1Jl5K0Jp02h}v02S" #(princ
+ #fn("8000n07021>F524O:" #(for-each #fn("9000n19100Aq63:" #())))
+ #fn("7000n10B;3B040<20Q;38040T21Q38072061:23061:" #(thrown-value
+ ffound caddr #fn(raise)))) fn-name) #fn("8000n37021>062:" #(for-each #fn("9000n1702190222534739110EGF5274051=P51475504902KMz02:" #(princ
"#" " " print vector->list newline)))) reverse! list-tail *interactive*
- filter closure? #fn(map) #fn("7000x1\x81AIN80Jj0\x81L1S" #(#fn(top-level-value)))
+ filter closure? #fn(map) #fn("7000n10Z;380420061:" #(#fn(top-level-value)))
#fn(environment)))) print-stack-trace)
- print-to-string #fn("7000x1j09j1K0L1S" #(#fn("8000x1j0\x83\x81K2Jj1\x81L1S" #(#fn(write)
+ print-to-string #fn("7000n120>215061:" #(#fn("8000n120A052421061:" #(#fn(write)
#fn(io.tostring!))) #fn(buffer)) print-to-string)
- printable? #fn("7000x1j0\x81K1IO80Jj1\x81K17S" #(#fn(iostream?)
- #fn(eof-object?)) printable?)
- quote-value #fn("7000x1l0\x81K1N40\x81Sj1\x81W2S" #(self-evaluating?
- quote) quote-value)
- random #fn("8000x1j0\x81K1N<0l1j2K0\x81L2Sj3K0\x81[2S" #(#fn(integer?)
- mod #fn(rand)
- #fn(rand.double)) random)
- read-all #fn("8000x1l0j1\x81L2S" #(read-all-of #fn(read)) read-all)
- read-all-of #fn("9000x2j09dK1f\x81\x82K1L2S" #(#fn("6000x1j09t0J\x81S" #(#fn("9000x2j0p11K1N80l1\x81L1S\x83\x82\x81Fp10p11K1L2S" #(#fn(io.eof?)
+ printable? #fn("7000n120051;I80421051S:" #(#fn(iostream?)
+ #fn(eof-object?)) printable?)
+ quote-value #fn("7000n1700513400:210e2:" #(self-evaluating? quote) quote-value)
+ random #fn("8000n1200513<0712250062:23500i2:" #(#fn(integer?) mod #fn(rand)
+ #fn(rand.double)) random)
+ read-all #fn("8000n17021062:" #(read-all-of #fn(read)) read-all)
+ read-all-of #fn("9000n220>D51q015162:" #(#fn("6000n120>?040:" #(#fn("9000n2209115138071061:A10P9109115162:" #(#fn(io.eof?)
reverse!))))) read-all-of)
- ref-int16-LE #fn(";000x2l0j1\x81\x82g}agK2j1\x81\x82h}ai8K2}L1S" #(int16
- #fn(ash)) ref-int16-LE)
- ref-int32-LE #fn("=000x2l0j1\x81\x82g}agK2j1\x81\x82h}ai8K2j1\x81\x82i2}ai@K2j1\x81\x82i3}aiHK2Y4L1S" #(int32
+ ref-int16-LE #fn(";000n2702101EMGE522101KMGr852M61:" #(int16 #fn(ash)) ref-int16-LE)
+ ref-int32-LE #fn("=000n2702101EMGE522101KMGr8522101r2MGr@522101r3MGrH52g461:" #(int32
#fn(ash)) ref-int32-LE)
- repl #fn("8000x0j0ddL2S" #(#fn("6000x2j0t0Jj19t1J\x82K0Jl2L0S" #(#fn("8000x0l0j1K1Jj2l3K1Jj4j5j6zL1S" #(princ
- "> " #fn(io.flush) *output-stream* #fn("8000x1j0l1K17IN<0Jj2l3\x81K1L1S" #(#fn(io.eof?)
- *input-stream* #fn("7000x1l0\x81K1J\x81r1JdS" #(print that)) load-process))
- #fn("6000x0j0L0S" #(#fn(read))) #fn("7000x1j0l1K1Jj2\x81L1S" #(#fn(io.discardbuffer)
- *input-stream*
- #fn(raise)))) prompt)
- #fn("7000x0j09j1zN;0l2K0J\x84L0SeS" #(#fn("7000x0\x83K0IN70Jl0L0S" #(newline))
- #fn("7000x1l0\x81K1JdS" #(top-level-exception-handler))
- newline) reploop) newline))) repl)
- revappend #fn("8000x2l0\x82\x81L2S" #(reverse-) revappend) reverse
- #fn("8000x1l0f\x81L2S" #(reverse-) reverse) reverse! #fn("8000x1l0f\x81L2S" #(reverse!-) reverse!)
- reverse!- #fn("9000x2d\x82:NB0J\x825\x82\x81\x82t0JHJt1M\x1d/J\x81S" #() reverse!-)
- reverse- #fn("8000x2\x82\x8940\x81Sl0\x824\x81F\x825L2S" #(reverse-) reverse-)
- self-evaluating? #fn("8000x1\x81;IN60J\x81>7IOK0Jj0\x81K1INA0J\x81>IN:0J\x81j1\x81K1TS" #(#fn(constant?)
+ repl #fn("8000n020DD62:" #(#fn("6000n220?0421>?1415047260:" #(#fn("8000n070215142273514242526}61:" #(princ
+ "> " #fn(io.flush) *output-stream* #fn("8000n1207151S;3<04227305161:" #(#fn(io.eof?)
+ *input-stream* #fn("7000n17005140w14D:" #(print that)) load-process))
+ #fn("6000n02060:" #(#fn(read))) #fn("7000n1207151422061:" #(#fn(io.discardbuffer)
+ *input-stream* #fn(raise)))) prompt)
+ #fn("7000n020>21}3;072504F60:O:" #(#fn("7000n0A50;37047060:" #(newline))
+ #fn("7000n1700514D:" #(top-level-exception-handler))
+ newline) reploop) newline))) repl)
+ revappend #fn("8000n2701062:" #(reverse-) revappend) reverse
+ #fn("8000n170q062:" #(reverse-) reverse) reverse! #fn("8000n170q062:" #(reverse!-) reverse!)
+ reverse!- #fn("9000n2D1B3B041=101?04N4?1@\x1d/40:" #() reverse!-)
+ reverse- #fn("8000n21J400:701<0P1=62:" #(reverse-) reverse-)
+ self-evaluating? #fn("8000n10H;36040RS;IK0420051;3A040R;3:04021051Q:" #(#fn(constant?)
#fn(top-level-value)) self-evaluating?)
- separate #fn("7000x2j09dL1S" #(#fn(":000x1j0t0J\x81\x83\x84fW1fW1L4S" #(#fn(";000x4j0n2n3Fd\x82:NZ0J\x81\x824K1N?0n2\x824fFH5t2M<0n3\x824fFH5t3J\x825t1M\x05/JL1S" #(#fn("8000x1l0\x8145\x8155L2S" #(values))) separate-)))) separate)
- set-syntax! #fn("9000x2j0l1\x81\x82L3S" #(#fn(put!)
- *syntax-environment*) set-syntax!)
- simple-sort #fn("7000x1\x81<IO60J\x815<N40\x81Sj09\x814L1S" #(#fn("8000x1l0j19j29L2S" #(call-with-values
- #fn("8000x0l0j19p105L2S" #(separate #fn("7000x1\x81\x83_S" #())))
- #fn(":000x2j0l1\x81K1\x83W1l1\x82K1L3S" #(#fn(nconc) simple-sort))))) simple-sort)
- splice-form? #fn("8000x1\x81:INX0J\x814j0TION0J\x814j1TIOD0J\x814j2TIN:0Jl3\x81i2K2IO70J\x81j2TS" #(unquote-splicing
+ separate #fn("7000n220>D61:" #(#fn(":000n120?040AFqe1qe164:" #(#fn(";000n4208283PD1B3Z0401<513?0821<qPN=?2@<0831<qPN=?341=?1@\x05/461:" #(#fn("8000n1700<=0==62:" #(values))) separate-)))) separate)
+ set-syntax! #fn("9000n220710163:" #(#fn(put!)
+ *syntax-environment*) set-syntax!)
+ simple-sort #fn("7000n10V;I6040=V3400:20>0<61:" #(#fn("8000n17021>22>62:" #(call-with-values
+ #fn("8000n07021>910=62:" #(separate #fn("7000n10AL:" #())))
+ #fn(":000n22071051Ae17115163:" #(#fn(nconc) simple-sort))))) simple-sort)
+ splice-form? #fn("8000n10B;3X040<20Q;IN040<21Q;ID040<22Q;3:04730r252;I704022Q:" #(unquote-splicing
unquote-nsplicing unquote length>) splice-form?)
- string.join #fn("7000x2\x81\x8950j0Sj19j2K0L1S" #("" #fn("8000x1j0\x81\x834K2Jl1j29\x835K2Jj3\x81L1S" #(#fn(io.write)
- for-each #fn("8000x1j0\x83p11K2Jj0\x83\x81L2S" #(#fn(io.write)))
+ string.join #fn("7000n20J5020:21>225061:" #("" #fn("8000n1200A<5247122>A=52423061:" #(#fn(io.write)
+ for-each #fn("8000n120A91152420A062:" #(#fn(io.write)))
#fn(io.tostring!))) #fn(buffer)) string.join)
- string.lpad #fn(";000x3j0l1n2\x82j2\x81K1~K2\x81L2S" #(#fn(string)
- string.rep #fn(string.count)) string.lpad)
- string.map #fn("9000x2j09j1K0j2\x82K1L2S" #(#fn("7000x2j09gK1Jj1\x81L1S" #(#fn(";000x1d\x81\x84_NS0Jj0\x83p10j1p11\x81K2K1K2Jj2p11\x81K2t0M\x0b/S" #(#fn(io.putc)
+ string.lpad #fn(";000n3207182122051\x8052062:" #(#fn(string)
+ string.rep #fn(string.count)) string.lpad)
+ string.map #fn("9000n220>21502215162:" #(#fn("7000n220>E51421061:" #(#fn(";000n1D0FL3S0420A910219110525152422911052?0@\v/:" #(#fn(io.putc)
#fn(string.char) #fn(string.inc))) #fn(io.tostring!)))
- #fn(buffer)
- #fn(length)) string.map)
- string.rep #fn(";000x2\x82i4_N`0l0\x82gK2N50j1S\x82h^N80j2\x81L1S\x82i2^N90j2\x81\x81L2Sj2\x81\x81\x81L3Sl3\x82K1N@0j2\x81l4\x81\x82h~K2L2Sl4j2\x81\x81K2\x82i2\\2L2S" #(<=
+ #fn(buffer)
+ #fn(length)) string.map)
+ string.rep #fn(";000n21r4L3`0701E5235021:1Kl38022061:1r2l390220062:2200063:731513@02207401K\x805262:742200521r2j262:" #(<=
"" #fn(string) odd? string.rep) string.rep)
- string.rpad #fn("<000x3j0\x81l1n2\x82j2\x81K1~K2L2S" #(#fn(string)
- string.rep #fn(string.count)) string.rpad)
- string.tail #fn(";000x2j0\x81j1\x81g\x82K3L2S" #(#fn(string.sub)
- #fn(string.inc)) string.tail)
- string.trim #fn("8000x3j09ddL2S" #(#fn("8000x2j09t0Jj19t1Jj29j3\x83K1L1S" #(#fn(";000x4n2n3_IN?0Jj0\x82j1\x81n2K2K2NA0\x83\x81\x82j2\x81n2K2n3L4Sn2S" #(#fn(string.find)
+ string.rpad #fn("<000n32007182122051\x805262:" #(#fn(string)
+ string.rep #fn(string.count)) string.rpad)
+ string.tail #fn(";000n2200210E15362:" #(#fn(string.sub)
+ #fn(string.inc)) string.tail)
+ string.trim #fn("8000n320>DD62:" #(#fn("8000n220>?0421>?1422>23A5161:" #(#fn(";000n48283L;3?042012108252523A0A0122082528364:82:" #(#fn(string.find)
#fn(string.char) #fn(string.inc)) trim-start)
- #fn("<000x3l0n2gK2IND0Jj1\x82j2\x81j3\x81n2K2K2K2N?0\x84\x81\x82j3\x81n2K2L3Sn2S" #(>
- #fn(string.find) #fn(string.char) #fn(string.dec)) trim-end)
- #fn("<000x1j0p10\x83p10p11g\x81K4\x84p10p12\x81K3L3S" #(#fn(string.sub)))
+ #fn("<000n37082E52;3D04211220230825252523?0F01230825263:82:" #(> #fn(string.find)
+ #fn(string.char)
+ #fn(string.dec)) trim-end)
+ #fn("<000n120910A910911E054F91091205363:" #(#fn(string.sub)))
#fn(length)))) string.trim)
- symbol-syntax #fn("9000x1j0l1\x81eL3S" #(#fn(get)
- *syntax-environment*) symbol-syntax)
- table.clone #fn("7000x1j09j1K0L1S" #(#fn("9000x1j0j19f\x83K3J\x81S" #(#fn(table.foldl)
- #fn("9000x3j0\x83\x81\x82L3S" #(#fn(put!)))))
- #fn(table)) table.clone)
- table.foreach #fn("9000x2j0j19f\x82L3S" #(#fn(table.foldl)
- #fn("8000x3\x83\x81\x82K2JdS" #())) table.foreach)
- table.invert #fn("7000x1j09j1K0L1S" #(#fn("9000x1j0j19f\x83K3J\x81S" #(#fn(table.foldl)
- #fn("9000x3j0\x83\x82\x81L3S" #(#fn(put!)))))
- #fn(table)) table.invert)
- table.keys #fn("9000x1j0j1f\x81L3S" #(#fn(table.foldl)
- #fn("7000x3\x81n2FS" #())) table.keys)
- table.pairs #fn("9000x1j0j1f\x81L3S" #(#fn(table.foldl)
- #fn("7000x3\x81\x82Fn2FS" #())) table.pairs)
- table.values #fn("9000x1j0j1f\x81L3S" #(#fn(table.foldl)
- #fn("7000x3\x82n2FS" #())) table.values)
- to-proper #fn("8000x1\x81\x8940\x81S\x81;N60\x81W1S\x814l0\x815K1FS" #(to-proper) to-proper)
- top-level-exception-handler #fn("7000x1j09l1L1S" #(#fn("7000x1l0r1Jj29j39L1S" #(*stderr*
- *output-stream* #fn("7000x1j09j19z\x81K0JS" #(#fn("7000x0l0p20K1Jl1j2K0L1S" #(print-exception
- print-stack-trace #fn(stacktrace))) #fn("7000x1\x83K0Jj0\x81L1S" #(#fn(raise)))))
- #fn("6000x0\x83r0S" #(*output-stream*)))) *output-stream*) top-level-exception-handler)
- trace #fn("8000x1j09j1\x81K1K1Jj2S" #(#fn("7000x1j09j1K0L1S" #(#fn("@000x1l0\x83K1Oe0j1p10l2j3\x81j4j5j6j7p10W2\x81W3W2j8W1j9j7\x83W2\x81W3W4W3K1L2SdS" #(traced?
+ symbol-syntax #fn("9000n120710O63:" #(#fn(get)
+ *syntax-environment*) symbol-syntax)
+ table.clone #fn("7000n120>215061:" #(#fn("9000n12021>qA5340:" #(#fn(table.foldl)
+ #fn("9000n320A0163:" #(#fn(put!))))) #fn(table)) table.clone)
+ table.foreach #fn("9000n22021>q163:" #(#fn(table.foldl)
+ #fn("8000n3A01524D:" #())) table.foreach)
+ table.invert #fn("7000n120>215061:" #(#fn("9000n12021>qA5340:" #(#fn(table.foldl)
+ #fn("9000n320A1063:" #(#fn(put!))))) #fn(table)) table.invert)
+ table.keys #fn("9000n12021q063:" #(#fn(table.foldl)
+ #fn("7000n3082P:" #())) table.keys)
+ table.pairs #fn("9000n12021q063:" #(#fn(table.foldl)
+ #fn("7000n301P82P:" #())) table.pairs)
+ table.values #fn("9000n12021q063:" #(#fn(table.foldl)
+ #fn("7000n3182P:" #())) table.values)
+ to-proper #fn("8000n10J400:0H3600e1:0<700=51P:" #(to-proper) to-proper)
+ top-level-exception-handler #fn("7000n120>7161:" #(#fn("7000n170w1422>23>61:" #(*stderr*
+ *output-stream* #fn("7000n120>21>}0504:" #(#fn("7000n07092051471225061:" #(print-exception
+ print-stack-trace #fn(stacktrace))) #fn("7000n1A50420061:" #(#fn(raise)))))
+ #fn("6000n0Aw0:" #(*output-stream*)))) *output-stream*) top-level-exception-handler)
+ trace #fn("8000n120>2105151422:" #(#fn("7000n120>215061:" #(#fn("@000n170A51Ie0219107223024252627910e20e3e228e12927Ae20e3e4e35162:D:" #(traced?
#fn(set-top-level-value!) eval lambda begin write cons quote newline apply))
#fn(gensym))) #fn(top-level-value) ok) trace)
- traced? #fn("8000x1l0\x81K1IN>0Jj1\x81K1j1\x83K1VS" #(closure? #fn(function:code)) #(#fn(":000y0j0j1\x81FK1Jl2K0Jj3\x81|2S" #(#fn(write)
+ traced? #fn("8000n170051;3>042105121A51d:" #(closure? #fn(function:code)) #(#fn(":000|020210P51472504230\x7f2:" #(#fn(write)
x newline #.apply)) ()))
- untrace #fn("8000x1j09j1\x81K1L1S" #(#fn("9000x1l0\x81K1N@0j1\x83j2\x81K1i2aL2SdS" #(traced?
+ untrace #fn("8000n120>2105161:" #(#fn("9000n1700513@021A22051r2G62:D:" #(traced?
#fn(set-top-level-value!) #fn(function:vals)))
- #fn(top-level-value)) untrace)
- values #fn("9000y0\x81:IN60J\x815<N50\x814S\x83\x81FS" #() #2#)
- vector->list #fn("8000x1j09j1\x81K1fL2S" #(#fn(":000x2h\x81j09{J\x82S" #(#fn("8000x1p10\x83\x81~a\x84Fv01S" #())))
- #fn(length)) vector->list)
- vector.map #fn("8000x2j09j1\x82K1L1S" #(#fn("8000x1j09j1\x81K1L1S" #(#fn(":000x1g\x83h~j09{J\x81S" #(#fn(":000x1\x83\x81p20p21\x81aK1cS" #())))
+ #fn(top-level-value)) untrace)
+ values #fn("9000|00B;36040=V3500<:A0P:" #() #2#) vector->list
+ #fn("8000n120>21051q62:" #(#fn(":000n2K020>~41:" #(#fn("8000n1910A0\x80GFPz01:" #())))
+ #fn(length)) vector->list)
+ vector.map #fn("8000n220>2115161:" #(#fn("8000n120>2105161:" #(#fn(":000n1EAK\x8020>~40:" #(#fn(":000n1A09209210G51p:" #())))
#fn(vector.alloc))) #fn(length)) vector.map)
- void #fn("6000x0dS" #() void) zero?
- #fn("7000x1\x81g^S" #() zero?))
+ void #fn("6000n0D:" #() void) zero?
+ #fn("7000n10El:" #() zero?))
--- a/flisp.c
+++ b/flisp.c
@@ -917,7 +917,7 @@
#endif
#define OP(x) case x:
-#define NEXT_OP goto next_op
+#define NEXT_OP break
/*
stack on entry: <func> <nargs args...>
@@ -940,6 +940,7 @@
uint32_t bp;
const uint8_t *ip;
fixnum_t s, hi;
+ int tail;
// temporary variables (not necessary to preserve across calls)
uint32_t op, i;
@@ -970,128 +971,60 @@
SP++;//PUSH(0); //ip
PUSH(0); //captured?
curr_frame = SP;
+ tail = 0;
- {
- next_op:
- op = *ip++;
- dispatch:
+ op = *ip++;
+ while(1){
switch (op) {
- OP(OP_ARGC)
- n = *ip++;
- if (0) {
- OP(OP_LARGC)
- n = GET_INT32(ip); ip+=4;
- }
- if (nargs != n) {
- if (nargs > n)
- lerrorf(ArgError, "apply: too many arguments");
- else
- lerrorf(ArgError, "apply: too few arguments");
- }
+ OP(OP_LOADA0)
+ if (captured)
+ v = vector_elt(Stack[bp], 0);
+ else
+ v = Stack[bp];
+ PUSH(v);
NEXT_OP;
- OP(OP_VARGC)
- i = *ip++;
- if (0) {
- OP(OP_LVARGC)
- i = GET_INT32(ip); ip+=4;
- }
- s = (fixnum_t)nargs - (fixnum_t)i;
- if (s > 0) {
- v = list(&Stack[bp+i], s, 0);
- Stack[bp+i] = v;
- if (s > 1) {
- Stack[bp+i+1] = Stack[bp+nargs+0];
- Stack[bp+i+2] = Stack[bp+nargs+1];
- Stack[bp+i+3] = i+1;
- //Stack[bp+i+4] = 0;
- Stack[bp+i+5] = 0;
- SP = bp+i+6;
- curr_frame = SP;
- }
- }
- else if (s < 0) {
- lerrorf(ArgError, "apply: too few arguments");
- }
- else {
- PUSH(0);
- Stack[SP-3] = i+1;
- Stack[SP-4] = Stack[SP-5];
- Stack[SP-5] = Stack[SP-6];
- Stack[SP-6] = NIL;
- curr_frame = SP;
- }
- nargs = i+1;
- NEXT_OP;
- OP(OP_BRBOUND)
- i = GET_INT32(ip); ip+=4;
+
+ OP(OP_LOADA1)
if (captured)
- v = vector_elt(Stack[bp], i);
+ v = vector_elt(Stack[bp], 1);
else
- v = Stack[bp+i];
- if (v != UNBOUND) PUSH(FL_T);
- else PUSH(FL_F);
+ v = Stack[bp+1];
+ PUSH(v);
NEXT_OP;
- OP(OP_DUP) SP++; Stack[SP-1] = Stack[SP-2]; NEXT_OP;
- OP(OP_POP) POPN(1); NEXT_OP;
+
+ OP(OP_LOADV)
+ v = fn_vals(Stack[bp-1]);
+ assert(*ip < vector_size(v));
+ v = vector_elt(v, *ip); ip++;
+ PUSH(v);
+ NEXT_OP;
+
+ OP(OP_BRF)
+ v = POP();
+ if (v == FL_F)
+ ip += GET_INT16(ip);
+ else ip += 2;
+ NEXT_OP;
+
+ OP(OP_POP)
+ POPN(1);
+ NEXT_OP;
+
OP(OP_TCALLL)
- n = GET_INT32(ip);
- ip+=4;
+ tail = 1;
if (0) {
- OP(OP_TCALL)
- n = *ip++; // nargs
- }
- do_tcall:
- func = Stack[SP-n-1];
- if (tag(func) == TAG_FUNCTION) {
- if (func > (N_BUILTINS<<3)) {
- curr_frame = Stack[curr_frame-4];
- for(s=-1; s < (fixnum_t)n; s++)
- Stack[bp+s] = Stack[SP-n+s];
- SP = bp+n;
- nargs = n;
- goto apply_cl_top;
- }
- else {
- i = uintval(func);
- if (isbuiltin(func)) {
- s = builtins[i].nargs;
- if (s >= 0)
- argcount(builtins[i].name, n, s);
- else if (s != ANYARGS && (signed)n < -s)
- argcount(builtins[i].name, n, -s);
- // remove function arg
- for(s=SP-n-1; s < (int)SP-1; s++)
- Stack[s] = Stack[s+1];
- SP--;
- switch (i) {
- case OP_LIST: goto apply_list;
- case OP_VECTOR: goto apply_vector;
- case OP_APPLY: goto apply_tapply;
- case OP_ADD: goto apply_add;
- case OP_SUB: goto apply_sub;
- case OP_MUL: goto apply_mul;
- case OP_DIV: goto apply_div;
- default:
- op = (uint8_t)i;
- goto dispatch;
- }
- }
- }
- }
- else if (iscbuiltin(func)) {
- s = SP;
- v = ((builtin_t)(((void**)ptr(func))[3]))(&Stack[SP-n], n);
- SP = s-n;
- Stack[SP-1] = v;
- NEXT_OP;
- }
- type_error("apply", "function", func);
- // WARNING: repeated code ahead
OP(OP_CALLL)
+ tail = 0;
+ }
n = GET_INT32(ip);
ip+=4;
if (0) {
+ OP(OP_TCALL)
+ tail = 1;
+ if (0) {
OP(OP_CALL)
+ tail = 0;
+ }
n = *ip++; // nargs
}
do_call:
@@ -1098,7 +1031,14 @@
func = Stack[SP-n-1];
if (tag(func) == TAG_FUNCTION) {
if (func > (N_BUILTINS<<3)) {
- Stack[curr_frame-2] = (uintptr_t)ip;
+ if (tail) {
+ curr_frame = Stack[curr_frame-4];
+ for(s=-1; s < (fixnum_t)n; s++)
+ Stack[bp+s] = Stack[SP-n+s];
+ SP = bp+n;
+ } else {
+ Stack[curr_frame-2] = (uintptr_t)ip;
+ }
nargs = n;
goto apply_cl_top;
}
@@ -1114,6 +1054,7 @@
for(s=SP-n-1; s < (int)SP-1; s++)
Stack[s] = Stack[s+1];
SP--;
+ op = i;
switch (i) {
case OP_LIST: goto apply_list;
case OP_VECTOR: goto apply_vector;
@@ -1124,7 +1065,7 @@
case OP_DIV: goto apply_div;
default:
op = (uint8_t)i;
- goto dispatch;
+ continue;
}
}
}
@@ -1137,63 +1078,55 @@
NEXT_OP;
}
type_error("apply", "function", func);
- OP(OP_JMP) ip += GET_INT16(ip); NEXT_OP;
- OP(OP_BRF)
- v = POP();
- if (v == FL_F) ip += GET_INT16(ip);
- else ip += 2;
+
+ OP(OP_LOADGL)
+ v = fn_vals(Stack[bp-1]);
+ v = vector_elt(v, GET_INT32(ip)); ip+=4;
+ if (0) {
+ OP(OP_LOADG)
+ v = fn_vals(Stack[bp-1]);
+ assert(*ip < vector_size(v));
+ v = vector_elt(v, *ip); ip++;
+ }
+ assert(issymbol(v));
+ sym = (symbol_t*)ptr(v);
+ if (sym->binding == UNBOUND)
+ fl_raise(fl_list2(UnboundError, v));
+ PUSH(sym->binding);
NEXT_OP;
- OP(OP_BRT)
- v = POP();
- if (v != FL_F) ip += GET_INT16(ip);
- else ip += 2;
+
+ OP(OP_LOADA)
+ assert(nargs > 0);
+ i = *ip++;
+ if (captured) {
+ e = Stack[bp];
+ assert(isvector(e));
+ assert(i < vector_size(e));
+ v = vector_elt(e, i);
+ }
+ else {
+ v = Stack[bp+i];
+ }
+ PUSH(v);
NEXT_OP;
- OP(OP_JMPL) ip += GET_INT32(ip); NEXT_OP;
- OP(OP_BRFL)
- v = POP();
- if (v == FL_F) ip += GET_INT32(ip);
- else ip += 4;
+
+ OP(OP_LOADC)
+ s = *ip++;
+ i = *ip++;
+ v = Stack[bp+nargs];
+ while (s--)
+ v = vector_elt(v, vector_size(v)-1);
+ assert(isvector(v));
+ assert(i < vector_size(v));
+ PUSH(vector_elt(v, i));
NEXT_OP;
- OP(OP_BRTL)
- v = POP();
- if (v != FL_F) ip += GET_INT32(ip);
- else ip += 4;
- NEXT_OP;
- OP(OP_BRNE)
- if (Stack[SP-2] != Stack[SP-1]) ip += GET_INT16(ip);
- else ip += 2;
- POPN(2);
- NEXT_OP;
- OP(OP_BRNEL)
- if (Stack[SP-2] != Stack[SP-1]) ip += GET_INT32(ip);
- else ip += 4;
- POPN(2);
- NEXT_OP;
- OP(OP_BRNN)
- v = POP();
- if (v != NIL) ip += GET_INT16(ip);
- else ip += 2;
- NEXT_OP;
- OP(OP_BRNNL)
- v = POP();
- if (v != NIL) ip += GET_INT32(ip);
- else ip += 4;
- NEXT_OP;
- OP(OP_BRN)
- v = POP();
- if (v == NIL) ip += GET_INT16(ip);
- else ip += 2;
- NEXT_OP;
- OP(OP_BRNL)
- v = POP();
- if (v == NIL) ip += GET_INT32(ip);
- else ip += 4;
- NEXT_OP;
+
OP(OP_RET)
v = POP();
SP = curr_frame;
curr_frame = Stack[SP-4];
- if (curr_frame == top_frame) return v;
+ if (curr_frame == top_frame)
+ return v;
SP -= (5+nargs);
captured = Stack[curr_frame-1];
ip = (uint8_t*)Stack[curr_frame-2];
@@ -1202,56 +1135,248 @@
Stack[SP-1] = v;
NEXT_OP;
- OP(OP_EQ)
- Stack[SP-2] = ((Stack[SP-2] == Stack[SP-1]) ? FL_T : FL_F);
- POPN(1); NEXT_OP;
- OP(OP_EQV)
- if (Stack[SP-2] == Stack[SP-1]) {
- v = FL_T;
+ OP(OP_DUP)
+ SP++;
+ Stack[SP-1] = Stack[SP-2];
+ NEXT_OP;
+
+ OP(OP_CAR)
+ v = Stack[SP-1];
+ if (!iscons(v))
+ type_error("car", "cons", v);
+ Stack[SP-1] = car_(v);
+ NEXT_OP;
+
+ OP(OP_CDR)
+ v = Stack[SP-1];
+ if (!iscons(v))
+ type_error("cdr", "cons", v);
+ Stack[SP-1] = cdr_(v);
+ NEXT_OP;
+
+ OP(OP_CLOSURE)
+ // build a closure (lambda args body . env)
+ if (nargs > 0 && !captured) {
+ // save temporary environment to the heap
+ n = nargs;
+ pv = alloc_words(n + 2);
+ PUSH(tagptr(pv, TAG_VECTOR));
+ pv[0] = fixnum(n+1);
+ pv++;
+ do {
+ pv[n] = Stack[bp+n];
+ } while (n--);
+ // environment representation changed; install
+ // the new representation so everybody can see it
+ captured = 1;
+ Stack[curr_frame-1] = 1;
+ Stack[bp] = Stack[SP-1];
}
- else if (!leafp(Stack[SP-2]) || !leafp(Stack[SP-1])) {
- v = FL_F;
- }
else {
- v = (compare_(Stack[SP-2], Stack[SP-1], 1)==0 ? FL_T : FL_F);
+ PUSH(Stack[bp]); // env has already been captured; share
}
- Stack[SP-2] = v; POPN(1);
+ if (curheap > lim-2)
+ gc(0);
+ pv = (value_t*)curheap;
+ curheap += (4*sizeof(value_t));
+ e = Stack[SP-2]; // closure to copy
+ assert(isfunction(e));
+ pv[0] = ((value_t*)ptr(e))[0];
+ pv[1] = ((value_t*)ptr(e))[1];
+ pv[2] = Stack[SP-1]; // env
+ pv[3] = ((value_t*)ptr(e))[3];
+ POPN(1);
+ Stack[SP-1] = tagptr(pv, TAG_FUNCTION);
NEXT_OP;
- OP(OP_EQUAL)
- if (Stack[SP-2] == Stack[SP-1]) {
- v = FL_T;
+
+ OP(OP_SETA)
+ assert(nargs > 0);
+ v = Stack[SP-1];
+ i = *ip++;
+ if (captured) {
+ e = Stack[bp];
+ assert(isvector(e));
+ assert(i < vector_size(e));
+ vector_elt(e, i) = v;
}
else {
- v = (compare_(Stack[SP-2], Stack[SP-1], 1)==0 ? FL_T : FL_F);
+ Stack[bp+i] = v;
}
- Stack[SP-2] = v; POPN(1);
NEXT_OP;
+
+ OP(OP_JMP)
+ ip += GET_INT16(ip);
+ NEXT_OP;
+
+ OP(OP_LOADC00)
+ PUSH(vector_elt(Stack[bp+nargs], 0));
+ NEXT_OP;
+
OP(OP_PAIRP)
- Stack[SP-1] = (iscons(Stack[SP-1]) ? FL_T : FL_F); NEXT_OP;
+ Stack[SP-1] = iscons(Stack[SP-1]) ? FL_T : FL_F;
+ NEXT_OP;
+
+ OP(OP_BRNE)
+ if (Stack[SP-2] != Stack[SP-1])
+ ip += GET_INT16(ip);
+ else
+ ip += 2;
+ POPN(2);
+ NEXT_OP;
+
+ OP(OP_LOADT)
+ PUSH(FL_T);
+ NEXT_OP;
+
+ OP(OP_LOAD0)
+ PUSH(fixnum(0));
+ NEXT_OP;
+
+ OP(OP_LOADC01)
+ PUSH(vector_elt(Stack[bp+nargs], 1));
+ NEXT_OP;
+
+ OP(OP_AREF)
+ v = Stack[SP-2];
+ if (isvector(v)) {
+ e = Stack[SP-1];
+ if (isfixnum(e))
+ i = numval(e);
+ else
+ i = (uint32_t)toulong(e, "aref");
+ if ((unsigned)i >= vector_size(v))
+ bounds_error("aref", v, e);
+ v = vector_elt(v, i);
+ }
+ else if (isarray(v)) {
+ v = cvalue_array_aref(&Stack[SP-2]);
+ }
+ else {
+ type_error("aref", "sequence", v);
+ }
+ POPN(1);
+ Stack[SP-1] = v;
+ NEXT_OP;
+
OP(OP_ATOMP)
- Stack[SP-1] = (iscons(Stack[SP-1]) ? FL_F : FL_T); NEXT_OP;
+ Stack[SP-1] = iscons(Stack[SP-1]) ? FL_F : FL_T;
+ NEXT_OP;
+
+ OP(OP_BRT)
+ v = POP();
+ if (v != FL_F)
+ ip += GET_INT16(ip);
+ else ip += 2;
+ NEXT_OP;
+
+ OP(OP_BRNN)
+ v = POP();
+ if (v != NIL)
+ ip += GET_INT16(ip);
+ else ip += 2;
+ NEXT_OP;
+
+ OP(OP_LOAD1)
+ PUSH(fixnum(1));
+ NEXT_OP;
+
+ OP(OP_LT)
+ if (bothfixnums(Stack[SP-2], Stack[SP-1]))
+ v = numval(Stack[SP-2]) < numval(Stack[SP-1]) ? FL_T : FL_F;
+ else
+ v = numval(fl_compare(Stack[SP-2], Stack[SP-1])) < 0 ? FL_T : FL_F;
+ POPN(1);
+ Stack[SP-1] = v;
+ NEXT_OP;
+
+ OP(OP_ADD2)
+ if (bothfixnums(Stack[SP-1], Stack[SP-2])) {
+ s = numval(Stack[SP-1]) + numval(Stack[SP-2]);
+ if (fits_fixnum(s))
+ v = fixnum(s);
+ else
+ v = mk_xlong(s);
+ }
+ else {
+ v = fl_add_any(&Stack[SP-2], 2, 0);
+ }
+ POPN(1);
+ Stack[SP-1] = v;
+ NEXT_OP;
+
+ OP(OP_SETCDR)
+ cdr(Stack[SP-2]) = Stack[SP-1];
+ POPN(1);
+ NEXT_OP;
+
+ OP(OP_LOADF)
+ PUSH(FL_F);
+ NEXT_OP;
+
+ OP(OP_CONS)
+ if (curheap > lim)
+ gc(0);
+ c = (cons_t*)curheap;
+ curheap += sizeof(cons_t);
+ c->car = Stack[SP-2];
+ c->cdr = Stack[SP-1];
+ Stack[SP-2] = tagptr(c, TAG_CONS);
+ POPN(1); NEXT_OP;
+
+ OP(OP_EQ)
+ Stack[SP-2] = Stack[SP-2] == Stack[SP-1] ? FL_T : FL_F;
+ POPN(1);
+ NEXT_OP;
+
+ OP(OP_SYMBOLP)
+ Stack[SP-1] = issymbol(Stack[SP-1]) ? FL_T : FL_F;
+ NEXT_OP;
+
OP(OP_NOT)
- Stack[SP-1] = ((Stack[SP-1]==FL_F) ? FL_T : FL_F); NEXT_OP;
+ Stack[SP-1] = Stack[SP-1]==FL_F ? FL_T : FL_F;
+ NEXT_OP;
+
+ OP(OP_CADR)
+ v = Stack[SP-1];
+ if (!iscons(v)) type_error("cdr", "cons", v);
+ v = cdr_(v);
+ if (!iscons(v)) type_error("car", "cons", v);
+ Stack[SP-1] = car_(v);
+ NEXT_OP;
+
+ OP(OP_NEG)
+ do_neg:
+ Stack[SP-1] = fl_neg(Stack[SP-1]);
+ NEXT_OP;
+
OP(OP_NULLP)
- Stack[SP-1] = ((Stack[SP-1]==NIL) ? FL_T : FL_F); NEXT_OP;
+ Stack[SP-1] = Stack[SP-1]==NIL ? FL_T : FL_F;
+ NEXT_OP;
+
OP(OP_BOOLEANP)
v = Stack[SP-1];
- Stack[SP-1] = ((v == FL_T || v == FL_F) ? FL_T:FL_F); NEXT_OP;
- OP(OP_SYMBOLP)
- Stack[SP-1] = (issymbol(Stack[SP-1]) ? FL_T : FL_F); NEXT_OP;
+ Stack[SP-1] = (v == FL_T || v == FL_F) ? FL_T:FL_F;
+ NEXT_OP;
+
OP(OP_NUMBERP)
v = Stack[SP-1];
- Stack[SP-1] = (fl_isnumber(v) ? FL_T:FL_F); NEXT_OP;
+ Stack[SP-1] = fl_isnumber(v) ? FL_T:FL_F;
+ NEXT_OP;
+
OP(OP_FIXNUMP)
- Stack[SP-1] = (isfixnum(Stack[SP-1]) ? FL_T : FL_F); NEXT_OP;
+ Stack[SP-1] = isfixnum(Stack[SP-1]) ? FL_T : FL_F;
+ NEXT_OP;
+
OP(OP_BOUNDP)
sym = tosymbol(Stack[SP-1], "bound?");
- Stack[SP-1] = ((sym->binding == UNBOUND) ? FL_F : FL_T);
+ Stack[SP-1] = sym->binding == UNBOUND ? FL_F : FL_T;
NEXT_OP;
+
OP(OP_BUILTINP)
v = Stack[SP-1];
Stack[SP-1] = (isbuiltin(v) || iscbuiltin(v)) ? FL_T : FL_F;
NEXT_OP;
+
OP(OP_FUNCTIONP)
v = Stack[SP-1];
Stack[SP-1] = ((tag(v)==TAG_FUNCTION &&
@@ -1258,41 +1383,65 @@
(isbuiltin(v) || v>(N_BUILTINS<<3))) ||
iscbuiltin(v)) ? FL_T : FL_F;
NEXT_OP;
+
OP(OP_VECTORP)
- Stack[SP-1] = (isvector(Stack[SP-1]) ? FL_T : FL_F); NEXT_OP;
+ Stack[SP-1] = isvector(Stack[SP-1]) ? FL_T : FL_F;
+ NEXT_OP;
- OP(OP_CONS)
- if (curheap > lim)
- gc(0);
- c = (cons_t*)curheap;
- curheap += sizeof(cons_t);
- c->car = Stack[SP-2];
- c->cdr = Stack[SP-1];
- Stack[SP-2] = tagptr(c, TAG_CONS);
- POPN(1); NEXT_OP;
- OP(OP_CAR)
- v = Stack[SP-1];
- if (!iscons(v)) type_error("car", "cons", v);
- Stack[SP-1] = car_(v);
+ OP(OP_JMPL)
+ ip += GET_INT32(ip);
NEXT_OP;
- OP(OP_CDR)
- v = Stack[SP-1];
- if (!iscons(v)) type_error("cdr", "cons", v);
- Stack[SP-1] = cdr_(v);
+
+ OP(OP_BRFL)
+ ip += POP() == FL_F ? GET_INT32(ip) : 4;
NEXT_OP;
- OP(OP_CADR)
- v = Stack[SP-1];
- if (!iscons(v)) type_error("cdr", "cons", v);
- v = cdr_(v);
- if (!iscons(v)) type_error("car", "cons", v);
- Stack[SP-1] = car_(v);
+
+ OP(OP_BRTL)
+ ip += POP() != FL_F ? GET_INT32(ip) : 4;
NEXT_OP;
+
+ OP(OP_BRNEL)
+ ip += Stack[SP-2] != Stack[SP-1] ? GET_INT32(ip) : 4;
+ POPN(2);
+ NEXT_OP;
+
+ OP(OP_BRNNL)
+ ip += POP() != NIL ? GET_INT32(ip) : 4;
+ NEXT_OP;
+
+ OP(OP_BRN)
+ ip += POP() == NIL ? GET_INT16(ip) : 2;
+ NEXT_OP;
+
+ OP(OP_BRNL)
+ ip += POP() == NIL ? GET_INT32(ip) : 4;
+ NEXT_OP;
+
+ OP(OP_EQV)
+ if (Stack[SP-2] == Stack[SP-1])
+ v = FL_T;
+ else if (!leafp(Stack[SP-2]) || !leafp(Stack[SP-1]))
+ v = FL_F;
+ else
+ v = (compare_(Stack[SP-2], Stack[SP-1], 1)==0 ? FL_T : FL_F);
+ Stack[SP-2] = v;
+ POPN(1);
+ NEXT_OP;
+
+ OP(OP_EQUAL)
+ if (Stack[SP-2] == Stack[SP-1])
+ v = FL_T;
+ else
+ v = (compare_(Stack[SP-2], Stack[SP-1], 1)==0 ? FL_T : FL_F);
+ Stack[SP-2] = v;
+ POPN(1);
+ NEXT_OP;
+
OP(OP_SETCAR)
car(Stack[SP-2]) = Stack[SP-1];
- POPN(1); NEXT_OP;
- OP(OP_SETCDR)
- cdr(Stack[SP-2]) = Stack[SP-1];
- POPN(1); NEXT_OP;
+ POPN(1);
+ NEXT_OP;
+
OP(OP_LIST)
n = *ip++;
apply_list:
@@ -1307,19 +1456,11 @@
NEXT_OP;
OP(OP_TAPPLY)
- n = *ip++;
- apply_tapply:
- v = POP(); // arglist
- n = SP-(n-2); // n-2 == # leading arguments not in the list
- while (iscons(v)) {
- if (SP >= N_STACK)
- grow_stack();
- PUSH(car_(v));
- v = cdr_(v);
- }
- n = SP-n;
- goto do_tcall;
+ tail = 1;
+ if (0) {
OP(OP_APPLY)
+ tail = 0;
+ }
n = *ip++;
apply_apply:
v = POP(); // arglist
@@ -1357,20 +1498,7 @@
POPN(n);
PUSH(v);
NEXT_OP;
- OP(OP_ADD2)
- if (bothfixnums(Stack[SP-1], Stack[SP-2])) {
- s = numval(Stack[SP-1]) + numval(Stack[SP-2]);
- if (fits_fixnum(s))
- v = fixnum(s);
- else
- v = mk_xlong(s);
- }
- else {
- v = fl_add_any(&Stack[SP-2], 2, 0);
- }
- POPN(1);
- Stack[SP-1] = v;
- NEXT_OP;
+
OP(OP_SUB)
n = *ip++;
apply_sub:
@@ -1387,10 +1515,7 @@
POPN(n);
PUSH(v);
NEXT_OP;
- OP(OP_NEG)
- do_neg:
- Stack[SP-1] = fl_neg(Stack[SP-1]);
- NEXT_OP;
+
OP(OP_SUB2)
do_sub2:
if (bothfixnums(Stack[SP-2], Stack[SP-1])) {
@@ -1407,6 +1532,7 @@
POPN(1);
Stack[SP-1] = v;
NEXT_OP;
+
OP(OP_MUL)
n = *ip++;
apply_mul:
@@ -1430,6 +1556,7 @@
POPN(n);
PUSH(v);
NEXT_OP;
+
OP(OP_DIV)
n = *ip++;
apply_div:
@@ -1449,6 +1576,7 @@
PUSH(v);
}
NEXT_OP;
+
OP(OP_IDIV)
v = Stack[SP-2]; e = Stack[SP-1];
if (bothfixnums(v, e)) {
@@ -1460,6 +1588,7 @@
POPN(1);
Stack[SP-1] = v;
NEXT_OP;
+
OP(OP_NUMEQ)
v = Stack[SP-2]; e = Stack[SP-1];
if (bothfixnums(v, e))
@@ -1469,22 +1598,23 @@
POPN(1);
Stack[SP-1] = v;
NEXT_OP;
- OP(OP_LT)
- if (bothfixnums(Stack[SP-2], Stack[SP-1])) {
- v = (numval(Stack[SP-2]) < numval(Stack[SP-1])) ? FL_T : FL_F;
- }
- else {
- v = (numval(fl_compare(Stack[SP-2], Stack[SP-1])) < 0) ?
- FL_T : FL_F;
- }
- POPN(1);
- Stack[SP-1] = v;
- NEXT_OP;
+
OP(OP_COMPARE)
Stack[SP-2] = compare_(Stack[SP-2], Stack[SP-1], 0);
POPN(1);
NEXT_OP;
+ OP(OP_ARGC)
+ n = *ip++;
+ if (0) {
+ OP(OP_LARGC)
+ n = GET_INT32(ip);
+ ip+=4;
+ }
+ if (nargs != n)
+ lerrorf(ArgError, "apply: too %s arguments", nargs > n ? "many" : "few");
+ NEXT_OP;
+
OP(OP_VECTOR)
n = *ip++;
apply_vector:
@@ -1496,27 +1626,6 @@
PUSH(v);
NEXT_OP;
- OP(OP_AREF)
- v = Stack[SP-2];
- if (isvector(v)) {
- e = Stack[SP-1];
- if (isfixnum(e))
- i = numval(e);
- else
- i = (uint32_t)toulong(e, "aref");
- if ((unsigned)i >= vector_size(v))
- bounds_error("aref", v, e);
- v = vector_elt(v, i);
- }
- else if (isarray(v)) {
- v = cvalue_array_aref(&Stack[SP-2]);
- }
- else {
- type_error("aref", "sequence", v);
- }
- POPN(1);
- Stack[SP-1] = v;
- NEXT_OP;
OP(OP_ASET)
e = Stack[SP-3];
if (isvector(e)) {
@@ -1534,6 +1643,7 @@
POPN(2);
Stack[SP-1] = v;
NEXT_OP;
+
OP(OP_FOR)
s = tofixnum(Stack[SP-3], "for");
hi = tofixnum(Stack[SP-2], "for");
@@ -1551,48 +1661,30 @@
Stack[SP-1] = v;
NEXT_OP;
- OP(OP_LOADT) PUSH(FL_T); NEXT_OP;
- OP(OP_LOADF) PUSH(FL_F); NEXT_OP;
- OP(OP_LOADNIL) PUSH(NIL); NEXT_OP;
- OP(OP_LOAD0) PUSH(fixnum(0)); NEXT_OP;
- OP(OP_LOAD1) PUSH(fixnum(1)); NEXT_OP;
- OP(OP_LOADI8) s = (int8_t)*ip++; PUSH(fixnum(s)); NEXT_OP;
- OP(OP_LOADV)
- v = fn_vals(Stack[bp-1]);
- assert(*ip < vector_size(v));
- v = vector_elt(v, *ip); ip++;
- PUSH(v);
+ OP(OP_LOADNIL)
+ PUSH(NIL);
NEXT_OP;
+
+ OP(OP_LOADI8)
+ s = (int8_t)*ip++;
+ PUSH(fixnum(s));
+ NEXT_OP;
+
OP(OP_LOADVL)
v = fn_vals(Stack[bp-1]);
v = vector_elt(v, GET_INT32(ip)); ip+=4;
PUSH(v);
NEXT_OP;
- OP(OP_LOADGL)
- v = fn_vals(Stack[bp-1]);
- v = vector_elt(v, GET_INT32(ip)); ip+=4;
- goto do_loadg;
- OP(OP_LOADG)
- v = fn_vals(Stack[bp-1]);
- assert(*ip < vector_size(v));
- v = vector_elt(v, *ip); ip++;
- do_loadg:
- assert(issymbol(v));
- sym = (symbol_t*)ptr(v);
- if (sym->binding == UNBOUND)
- fl_raise(fl_list2(UnboundError, v));
- PUSH(sym->binding);
- NEXT_OP;
OP(OP_SETGL)
v = fn_vals(Stack[bp-1]);
v = vector_elt(v, GET_INT32(ip)); ip+=4;
- goto do_setg;
+ if (0) {
OP(OP_SETG)
- v = fn_vals(Stack[bp-1]);
- assert(*ip < vector_size(v));
- v = vector_elt(v, *ip); ip++;
- do_setg:
+ v = fn_vals(Stack[bp-1]);
+ assert(*ip < vector_size(v));
+ v = vector_elt(v, *ip); ip++;
+ }
assert(issymbol(v));
sym = (symbol_t*)ptr(v);
v = Stack[SP-1];
@@ -1600,34 +1692,6 @@
sym->binding = v;
NEXT_OP;
- OP(OP_LOADA)
- assert(nargs > 0);
- i = *ip++;
- if (captured) {
- e = Stack[bp];
- assert(isvector(e));
- assert(i < vector_size(e));
- v = vector_elt(e, i);
- }
- else {
- v = Stack[bp+i];
- }
- PUSH(v);
- NEXT_OP;
- OP(OP_LOADA0)
- if (captured)
- v = vector_elt(Stack[bp], 0);
- else
- v = Stack[bp];
- PUSH(v);
- NEXT_OP;
- OP(OP_LOADA1)
- if (captured)
- v = vector_elt(Stack[bp], 1);
- else
- v = Stack[bp+1];
- PUSH(v);
- NEXT_OP;
OP(OP_LOADAL)
assert(nargs > 0);
i = GET_INT32(ip); ip+=4;
@@ -1637,20 +1701,7 @@
v = Stack[bp+i];
PUSH(v);
NEXT_OP;
- OP(OP_SETA)
- assert(nargs > 0);
- v = Stack[SP-1];
- i = *ip++;
- if (captured) {
- e = Stack[bp];
- assert(isvector(e));
- assert(i < vector_size(e));
- vector_elt(e, i) = v;
- }
- else {
- Stack[bp+i] = v;
- }
- NEXT_OP;
+
OP(OP_SETAL)
assert(nargs > 0);
v = Stack[SP-1];
@@ -1660,16 +1711,7 @@
else
Stack[bp+i] = v;
NEXT_OP;
- OP(OP_LOADC)
- s = *ip++;
- i = *ip++;
- v = Stack[bp+nargs];
- while (s--)
- v = vector_elt(v, vector_size(v)-1);
- assert(isvector(v));
- assert(i < vector_size(v));
- PUSH(vector_elt(v, i));
- NEXT_OP;
+
OP(OP_SETC)
s = *ip++;
i = *ip++;
@@ -1680,12 +1722,7 @@
assert(i < vector_size(v));
vector_elt(v, i) = Stack[SP-1];
NEXT_OP;
- OP(OP_LOADC00)
- PUSH(vector_elt(Stack[bp+nargs], 0));
- NEXT_OP;
- OP(OP_LOADC01)
- PUSH(vector_elt(Stack[bp+nargs], 1));
- NEXT_OP;
+
OP(OP_LOADCL)
s = GET_INT32(ip); ip+=4;
i = GET_INT32(ip); ip+=4;
@@ -1694,6 +1731,7 @@
v = vector_elt(v, vector_size(v)-1);
PUSH(vector_elt(v, i));
NEXT_OP;
+
OP(OP_SETCL)
s = GET_INT32(ip); ip+=4;
i = GET_INT32(ip); ip+=4;
@@ -1704,39 +1742,39 @@
vector_elt(v, i) = Stack[SP-1];
NEXT_OP;
- OP(OP_CLOSURE)
- // build a closure (lambda args body . env)
- if (nargs > 0 && !captured) {
- // save temporary environment to the heap
- n = nargs;
- pv = alloc_words(n + 2);
- PUSH(tagptr(pv, TAG_VECTOR));
- pv[0] = fixnum(n+1);
- pv++;
- do {
- pv[n] = Stack[bp+n];
- } while (n--);
- // environment representation changed; install
- // the new representation so everybody can see it
- captured = 1;
- Stack[curr_frame-1] = 1;
- Stack[bp] = Stack[SP-1];
+ OP(OP_VARGC)
+ i = *ip++;
+ if (0) {
+ OP(OP_LVARGC)
+ i = GET_INT32(ip);
+ ip+=4;
}
+ s = (fixnum_t)nargs - (fixnum_t)i;
+ if (s > 0) {
+ v = list(&Stack[bp+i], s, 0);
+ Stack[bp+i] = v;
+ if (s > 1) {
+ Stack[bp+i+1] = Stack[bp+nargs+0];
+ Stack[bp+i+2] = Stack[bp+nargs+1];
+ Stack[bp+i+3] = i+1;
+ //Stack[bp+i+4] = 0;
+ Stack[bp+i+5] = 0;
+ SP = bp+i+6;
+ curr_frame = SP;
+ }
+ }
+ else if (s < 0) {
+ lerrorf(ArgError, "apply: too few arguments");
+ }
else {
- PUSH(Stack[bp]); // env has already been captured; share
+ PUSH(0);
+ Stack[SP-3] = i+1;
+ Stack[SP-4] = Stack[SP-5];
+ Stack[SP-5] = Stack[SP-6];
+ Stack[SP-6] = NIL;
+ curr_frame = SP;
}
- if (curheap > lim-2)
- gc(0);
- pv = (value_t*)curheap;
- curheap += (4*sizeof(value_t));
- e = Stack[SP-2]; // closure to copy
- assert(isfunction(e));
- pv[0] = ((value_t*)ptr(e))[0];
- pv[1] = ((value_t*)ptr(e))[1];
- pv[2] = Stack[SP-1]; // env
- pv[3] = ((value_t*)ptr(e))[3];
- POPN(1);
- Stack[SP-1] = tagptr(pv, TAG_FUNCTION);
+ nargs = i+1;
NEXT_OP;
OP(OP_TRYCATCH)
@@ -1770,6 +1808,17 @@
nargs += n;
}
NEXT_OP;
+
+ OP(OP_BRBOUND)
+ i = GET_INT32(ip); ip+=4;
+ if (captured)
+ v = vector_elt(Stack[bp], i);
+ else
+ v = Stack[bp+i];
+ if (v != UNBOUND) PUSH(FL_T);
+ else PUSH(FL_F);
+ NEXT_OP;
+
OP(OP_KEYARGS)
v = fn_vals(Stack[bp-1]);
v = vector_elt(v, 0);
@@ -1778,10 +1827,8 @@
s = GET_INT32(ip); ip+=4;
nargs = process_keys(v, i, n, labs(s)-(i+n), bp, nargs, s<0);
NEXT_OP;
-
- default:
- goto dispatch;
}
+ op = *ip++;
}
}
--- a/gen.lsp
+++ b/gen.lsp
@@ -1,20 +1,46 @@
(define opcodes '(
; C opcode, lisp compiler opcode, arg count, builtin lambda
- OP_BOOL_CONST_F dummy_f #f 0
- OP_BOOL_CONST_T dummy_t #f 0
- OP_THE_EMPTY_LIST dummy_nil #f 0
- OP_EOF_OBJECT dummy_eof #f 0
+ OP_LOADA0 loada0 #f 0
+ OP_LOADA1 loada1 #f 0
+ OP_LOADV loadv #f 0
+ OP_BRF brf #f 0
+ OP_POP pop #f 0
+ OP_CALL call #f 0
+ OP_TCALL tcall #f 0
+ OP_LOADG loadg #f 0
+ OP_LOADA loada #f 0
+ OP_LOADC loadc #f 0
+ OP_RET ret #f 0
+ OP_DUP dup #f 0
OP_CAR car 1 (lambda (x) (car x))
OP_CDR cdr 1 (lambda (x) (cdr x))
- OP_CADR cadr 1 (lambda (x) (cadr x))
- OP_NOT not 1 (lambda (x) (not x))
- OP_NEG neg #f 0
OP_CLOSURE closure #f 0
+ OP_SETA seta #f 0
+ OP_JMP jmp #f 0
+ OP_LOADC00 loadc00 #f 0
OP_PAIRP pair? 1 (lambda (x) (pair? x))
+ OP_BRNE brne #f 0
+ OP_LOADT loadt #f 0
+ OP_LOAD0 load0 #f 0
+ OP_LOADC01 loadc01 #f 0
+ OP_AREF aref 2 (lambda (x y) (aref x y))
OP_ATOMP atom? 1 (lambda (x) (atom? x))
+ OP_BRT brt #f 0
+ OP_BRNN brnn #f 0
+ OP_LOAD1 load1 #f 0
+ OP_LT < 2 (lambda (x y) (< x y))
+ OP_ADD2 add2 #f 0
+ OP_SETCDR set-cdr! 2 (lambda (x y) (set-cdr! x y))
+ OP_LOADF loadf #f 0
+ OP_CONS cons 2 (lambda (x y) (cons x y))
+ OP_EQ eq? 2 (lambda (x y) (eq? x y))
+ OP_SYMBOLP symbol? 1 (lambda (x) (symbol? x))
+ OP_NOT not 1 (lambda (x) (not x))
+
+ OP_CADR cadr 1 (lambda (x) (cadr x))
+ OP_NEG neg #f 0
OP_NULLP null? 1 (lambda (x) (null? x))
OP_BOOLEANP boolean? 1 (lambda (x) (boolean? x))
- OP_SYMBOLP symbol? 1 (lambda (x) (symbol? x))
OP_NUMBERP number? 1 (lambda (x) (number? x))
OP_FIXNUMP fixnum? 1 (lambda (x) (fixnum? x))
OP_BOUNDP bound? 1 (lambda (x) (bound? x))
@@ -22,21 +48,10 @@
OP_FUNCTIONP function? 1 (lambda (x) (function? x))
OP_VECTORP vector? 1 (lambda (x) (vector? x))
OP_NOP nop #f 0
- OP_CONS cons 2 (lambda (x y) (cons x y))
OP_SETCAR set-car! 2 (lambda (x y) (set-car! x y))
- OP_SETCDR set-cdr! 2 (lambda (x y) (set-cdr! x y))
- OP_DUP dup #f 0
- OP_POP pop #f 0
- OP_CALL call #f 0
- OP_TCALL tcall #f 0
- OP_JMP jmp #f 0
- OP_BRF brf #f 0
- OP_BRT brt #f 0
OP_JMPL jmp.l #f 0
OP_BRFL brf.l #f 0
OP_BRTL brt.l #f 0
- OP_RET ret #f 0
- OP_EQ eq? 2 (lambda (x y) (eq? x y))
OP_EQV eqv? 2 (lambda (x y) (eqv? x y))
OP_EQUAL equal? 2 (lambda (x y) (equal? x y))
OP_LIST list #f (lambda rest rest)
@@ -47,55 +62,42 @@
OP_DIV / #f (lambda rest (apply / rest))
OP_IDIV div0 2 (lambda rest (apply div0 rest))
OP_NUMEQ = 2 (lambda (x y) (= x y))
- OP_LT < 2 (lambda (x y) (< x y))
OP_COMPARE compare 2 (lambda (x y) (compare x y))
- OP_AREF aref 2 (lambda (x y) (aref x y))
+ OP_ARGC argc #f 0
OP_VECTOR vector #f (lambda rest (apply vector rest))
OP_ASET aset! 3 (lambda (x y z) (aset! x y z))
- OP_LOADT loadt #f 0
- OP_LOADF loadf #f 0
OP_LOADNIL loadnil #f 0
- OP_LOAD0 load0 #f 0
- OP_LOAD1 load1 #f 0
OP_LOADI8 loadi8 #f 0
- OP_LOADV loadv #f 0
OP_LOADVL loadv.l #f 0
- OP_LOADG loadg #f 0
OP_LOADGL loadg.l #f 0
- OP_LOADA loada #f 0
OP_LOADAL loada.l #f 0
- OP_LOADC loadc #f 0
OP_LOADCL loadc.l #f 0
OP_SETG setg #f 0
OP_SETGL setg.l #f 0
- OP_SETA seta #f 0
OP_SETAL seta.l #f 0
OP_SETC setc #f 0
OP_SETCL setc.l #f 0
- OP_ARGC argc #f 0
OP_VARGC vargc #f 0
OP_TRYCATCH trycatch #f 0
OP_FOR for #f 0
OP_TAPPLY tapply #f 0
- OP_ADD2 add2 #f 0
OP_SUB2 sub2 #f 0
OP_LARGC largc #f 0
OP_LVARGC lvargc #f 0
- OP_LOADA0 loada0 #f 0
- OP_LOADA1 loada1 #f 0
- OP_LOADC00 loadc00 #f 0
- OP_LOADC01 loadc01 #f 0
OP_CALLL call.l #f 0
OP_TCALLL tcall.l #f 0
- OP_BRNE brne #f 0
OP_BRNEL brne.l #f 0
- OP_BRNN brnn #f 0
OP_BRNNL brnn.l #f 0
OP_BRN brn #f 0
OP_BRNL brn.l #f 0
OP_OPTARGS optargs #f 0
OP_BRBOUND brbound #f 0
- OP_KEYARGS keyargs #f 0))
+ OP_KEYARGS keyargs #f 0
+ OP_BOOL_CONST_F dummy_f #f 0
+ OP_BOOL_CONST_T dummy_t #f 0
+ OP_THE_EMPTY_LIST dummy_nil #f 0
+ OP_EOF_OBJECT dummy_eof #f 0
+))
(define (drop lst n)
(if (<= n 0) lst
--- a/maxstack.inc
+++ b/maxstack.inc
@@ -8,9 +8,55 @@
if ((int32_t)sp > (int32_t)maxsp) maxsp = sp;
op = *ip++;
switch (op) {
- case OP_SETG: case OP_SETA: case OP_ARGC:
+ 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_LOADF: case OP_LOADNIL:
+ case OP_LOAD0:
+ case OP_LOAD1: case OP_LOADC00:
+ case OP_LOADC01:
+ sp++;
+ break;
+
+ case OP_BRF: case OP_BRT:
+ SWAP_INT16(ip);
+ ip += 2;
+ sp--;
+ break;
+
+ case OP_POP: case OP_RET:
+ case OP_CONS: case OP_SETCAR: case OP_SETCDR:
+ case OP_EQ: case OP_EQV: case OP_EQUAL: case OP_ADD2: case OP_SUB2:
+ case OP_IDIV: case OP_NUMEQ: case OP_LT: case OP_COMPARE:
+ case OP_AREF: case OP_TRYCATCH:
+ sp--;
+ break;
+
+ case OP_ARGC: case OP_SETG: case OP_SETA:
ip++;
break;
+
+ case OP_TCALL: case OP_CALL:
+ n = *ip++; // nargs
+ sp -= n;
+ break;
+
+ case OP_SETCL:
+ SWAP_INT32(ip);
+ ip += 4; // fallthrough
+ case OP_LOADVL: case OP_LOADGL: case OP_LOADAL:
+ sp++; // fallthrough
+ case OP_SETGL: case OP_SETAL: case OP_LARGC:
+ SWAP_INT32(ip);
+ ip += 4;
+ break;
+
+ case OP_LOADC:
+ sp++; // fallthrough
+ case OP_SETC:
+ ip += 2;
+ break;
+
case OP_VARGC:
n = *ip++;
sp += n+2;
@@ -41,10 +87,6 @@
ip += 4;
sp++;
break;
- case OP_TCALL: case OP_CALL:
- n = *ip++; // nargs
- sp -= n;
- break;
case OP_TCALLL: case OP_CALLL:
SWAP_INT32(ip);
n = GET_INT32(ip); ip+=4;
@@ -56,11 +98,6 @@
case OP_JMPL:
SWAP_INT32(ip);
ip += 4; break;
- case OP_BRF: case OP_BRT:
- SWAP_INT16(ip);
- ip += 2;
- sp--;
- break;
case OP_BRFL: case OP_BRTL:
SWAP_INT32(ip);
ip += 4;
@@ -84,13 +121,6 @@
case OP_BRNNL: case OP_BRNL:
SWAP_INT32(ip);
ip += 4; // fallthrough
- case OP_RET:
- case OP_CONS: case OP_SETCAR: case OP_SETCDR: case OP_POP:
- case OP_EQ: case OP_EQV: case OP_EQUAL: case OP_ADD2: case OP_SUB2:
- case OP_IDIV: case OP_NUMEQ: case OP_LT: case OP_COMPARE:
- case OP_AREF: case OP_TRYCATCH:
- sp--;
- break;
case OP_TAPPLY: case OP_APPLY:
case OP_LIST: case OP_ADD: case OP_SUB: case OP_MUL: case OP_DIV:
@@ -104,30 +134,6 @@
maxsp = sp+2; // fallthrough
case OP_ASET:
sp -= 2;
- break;
-
- case OP_LOADI8: case OP_LOADV: case OP_LOADG: case OP_LOADA:
- ip++; // fallthrough
- case OP_LOADT: case OP_LOADF: case OP_LOADNIL: case OP_LOAD0:
- case OP_LOAD1: case OP_LOADA0: case OP_LOADA1: case OP_LOADC00:
- case OP_LOADC01: case OP_DUP:
- sp++;
- break;
-
- case OP_SETCL:
- SWAP_INT32(ip);
- ip += 4; // fallthrough
- case OP_LOADVL: case OP_LOADGL: case OP_LOADAL:
- sp++; // fallthrough
- case OP_SETGL: case OP_SETAL: case OP_LARGC:
- SWAP_INT32(ip);
- ip += 4;
- break;
-
- case OP_LOADC:
- sp++; // fallthrough
- case OP_SETC:
- ip += 2;
break;
case OP_LOADCL:
--- a/opcodes.h
+++ b/opcodes.h
@@ -1,19 +1,44 @@
enum {
- OP_BOOL_CONST_F,
- OP_BOOL_CONST_T,
- OP_THE_EMPTY_LIST,
- OP_EOF_OBJECT,
+ OP_LOADA0,
+ OP_LOADA1,
+ OP_LOADV,
+ OP_BRF,
+ OP_POP,
+ OP_CALL,
+ OP_TCALL,
+ OP_LOADG,
+ OP_LOADA,
+ OP_LOADC,
+ OP_RET,
+ OP_DUP,
OP_CAR,
OP_CDR,
- OP_CADR,
- OP_NOT,
- OP_NEG,
OP_CLOSURE,
+ OP_SETA,
+ OP_JMP,
+ OP_LOADC00,
OP_PAIRP,
+ OP_BRNE,
+ OP_LOADT,
+ OP_LOAD0,
+ OP_LOADC01,
+ OP_AREF,
OP_ATOMP,
+ OP_BRT,
+ OP_BRNN,
+ OP_LOAD1,
+ OP_LT,
+ OP_ADD2,
+ OP_SETCDR,
+ OP_LOADF,
+ OP_CONS,
+ OP_EQ,
+ OP_SYMBOLP,
+ OP_NOT,
+ OP_CADR,
+ OP_NEG,
OP_NULLP,
OP_BOOLEANP,
- OP_SYMBOLP,
OP_NUMBERP,
OP_FIXNUMP,
OP_BOUNDP,
@@ -21,21 +46,10 @@
OP_FUNCTIONP,
OP_VECTORP,
OP_NOP,
- OP_CONS,
OP_SETCAR,
- OP_SETCDR,
- OP_DUP,
- OP_POP,
- OP_CALL,
- OP_TCALL,
- OP_JMP,
- OP_BRF,
- OP_BRT,
OP_JMPL,
OP_BRFL,
OP_BRTL,
- OP_RET,
- OP_EQ,
OP_EQV,
OP_EQUAL,
OP_LIST,
@@ -46,49 +60,31 @@
OP_DIV,
OP_IDIV,
OP_NUMEQ,
- OP_LT,
OP_COMPARE,
- OP_AREF,
+ OP_ARGC,
OP_VECTOR,
OP_ASET,
- OP_LOADT,
- OP_LOADF,
OP_LOADNIL,
- OP_LOAD0,
- OP_LOAD1,
OP_LOADI8,
- OP_LOADV,
OP_LOADVL,
- OP_LOADG,
OP_LOADGL,
- OP_LOADA,
OP_LOADAL,
- OP_LOADC,
OP_LOADCL,
OP_SETG,
OP_SETGL,
- OP_SETA,
OP_SETAL,
OP_SETC,
OP_SETCL,
- OP_ARGC,
OP_VARGC,
OP_TRYCATCH,
OP_FOR,
OP_TAPPLY,
- OP_ADD2,
OP_SUB2,
OP_LARGC,
OP_LVARGC,
- OP_LOADA0,
- OP_LOADA1,
- OP_LOADC00,
- OP_LOADC01,
OP_CALLL,
OP_TCALLL,
- OP_BRNE,
OP_BRNEL,
- OP_BRNN,
OP_BRNNL,
OP_BRN,
OP_BRNL,
@@ -95,5 +91,9 @@
OP_OPTARGS,
OP_BRBOUND,
OP_KEYARGS,
+ OP_BOOL_CONST_F,
+ OP_BOOL_CONST_T,
+ OP_THE_EMPTY_LIST,
+ OP_EOF_OBJECT,
N_OPCODES
};