ref: e877c7e9901fde9cc61276d66936fc3a58db1d4d
parent: 7965ff00950c33760a8153e29173ac1b82b6009f
author: Sigrid Solveig Haflínudóttir <[email protected]>
date: Mon Nov 25 20:08:38 EST 2024
import "inline lambdas in head position (i.e. `let`)" from Julia's femtolisp This is 5e949d7915210b6f2e9326f16f1e336a3460dac9 from Julia. Original change by Jeff Bezanson.
--- a/compiler.lsp
+++ b/compiler.lsp
@@ -2,11 +2,13 @@
;; code generation state, constant tables, bytecode encoding
-(define (make-code-emitter) (vector () (table) 0 ()))
+(define (make-code-emitter) (vector () (table) 0 () 0))
(define (bcode:code b) (aref b 0))
(define (bcode:ctable b) (aref b 1))
(define (bcode:nconst b) (aref b 2))
(define (bcode:cenv b) (aref b 3))
+(define (bcode:sp b) (aref b 4))
+(define (bcode:stack b n) (aset! b 4 (+ (aref b 4) n)))
;; get an index for a referenced value in a bytecode object
(define (bcode:indexfor b v)
@@ -230,7 +232,9 @@
(capture-var! g s))))
(if h?
(begin (emit g (if arg? 'loada 'loadc) idx)
+ (bcode:stack g 1)
(compile-in g env #f rhs)
+ (bcode:stack g -1)
(emit g 'set-car!))
(begin (compile-in g env #f rhs)
@@ -237,6 +241,13 @@
(if (not arg?) (error (string "internal error: misallocated var " s)))
(emit g 'seta idx))))))))
+(define (box-vars g env)
+ (let loop ((e env))
+ (if (pair? e)
+ (begin (if (cadr (car e))
+ (emit g 'box (caddr (car e))))
+ (loop (cdr e))))))
+
;; control flow
(define (compile-if g env tail? x)
@@ -274,17 +285,21 @@
(define (compile-prog1 g env x)
(compile-in g env #f (cadr x))
(if (pair? (cddr x))
- (begin (compile-begin g env #f (cddr x))
- (emit g 'pop))))
+ (begin (bcode:stack g 1)
+ (compile-begin g env #f (cddr x))
+ (emit g 'pop)
+ (bcode:stack g -1))))
(define (compile-while g env cond body)
(let ((top (make-label g))
(end (make-label g)))
(compile-in g env #f (void))
+ (bcode:stack g 1)
(mark-label g top)
(compile-in g env #f cond)
(emit g 'brf end)
(emit g 'pop)
+ (bcode:stack g -1)
(compile-in g env #f body)
(emit g 'jmp top)
(mark-label g end)))
@@ -303,9 +318,12 @@
(define (compile-for g env lo hi func)
(if (1arg-lambda? func)
(begin (compile-in g env #f lo)
+ (bcode:stack g 1)
(compile-in g env #f hi)
+ (bcode:stack g 1)
(compile-in g env #f func)
- (emit g 'for))
+ (emit g 'for)
+ (bcode:stack g -2))
(error "for: third form must be a 1-argument lambda")))
(define (compile-short-circuit g env tail? forms default branch)
@@ -314,8 +332,10 @@
(else
(let ((end (make-label g)))
(compile-in g env #f (car forms))
+ (bcode:stack g 1)
(emit g 'dup)
(emit g branch end)
+ (bcode:stack g -1)
(emit g 'pop)
(compile-short-circuit g env tail? (cdr forms) default branch)
(mark-label g end)))))
@@ -329,7 +349,8 @@
(define (compile-arglist g env lst)
(for-each (λ (a)
- (compile-in g env #f a))
+ (compile-in g env #f a)
+ (bcode:stack g 1))
lst)
(length lst))
@@ -383,6 +404,33 @@
(emit g (if tail? 'tapply 'apply) nargs)))
(else (emit g b)))))
+(define (inlineable? form)
+ (let ((lam (car form)))
+ (and (pair? lam)
+ (is-lambda? (car lam))
+ (list? (cadr lam))
+ (every symbol? (cadr lam))
+ (not (length> (cadr lam) 255))
+ (length= (cadr lam) (length (cdr form))))))
+
+;; compile call to lambda in head position, inlined
+(define (compile-let g env tail? form)
+ (let ((lam (car form))
+ (args (cdr form))
+ (sp (bcode:sp g)))
+ (let ((vars (cadr lam))
+ (n (compile-arglist g env args)))
+ (let ((newvars
+ (vars-to-env vars (complex-bindings (caddr lam) vars) sp)))
+ (box-vars g newvars)
+ (let ((newenv
+ (cons (nconc newvars (car env))
+ (cdr env))))
+ (compile-in g newenv tail? (caddr lam))
+ (bcode:stack g (- n))
+ (if (and (> n 0) (not tail?))
+ (emit g 'shift n)))))))
+
(define (compile-app g env tail? x)
(let ((head (car x)))
(let ((head
@@ -394,9 +442,11 @@
(top-level-value head)
head)))
(if (length> (cdr x) 255)
- ; more than 255 arguments, need long versions of instructions
+ ;; more than 255 arguments, need long versions of instructions
(begin (compile-in g env #f head)
+ (bcode:stack g 1)
(let ((nargs (compile-arglist g env (cdr x))))
+ (bcode:stack g (- nargs))
(emit g (if tail? 'tcall.l 'call.l) nargs)))
(let ((b (and (builtin? head)
(builtin->instruction head))))
@@ -406,13 +456,19 @@
(length= x 2))
(begin (compile-in g env #f (cadr x))
(emit g 'cadr))
- (begin
- (if (not b)
- (compile-in g env #f head))
- (let ((nargs (compile-arglist g env (cdr x))))
- (if b
- (compile-builtin-call g env tail? x head b nargs)
- (emit g (if tail? 'tcall 'call) nargs))))))))))
+ (if (and (pair? head) (is-lambda? (car head))
+ (inlineable? x))
+ (compile-let g env tail? x)
+ (begin
+ (if (not b)
+ (begin (compile-in g env #f head)
+ (bcode:stack g 1)))
+ (let ((nargs (compile-arglist g env (cdr x))))
+ (bcode:stack g (- nargs))
+ (if (not b) (bcode:stack g -1))
+ (if b
+ (compile-builtin-call g env tail? x head b nargs)
+ (emit g (if tail? 'tcall 'call) nargs)))))))))))
;; lambda, main compilation loop
@@ -598,10 +654,10 @@
(complex-bindings- (lambda:body e)
(diff vars (lambda:vars e))
#f
- #t #;(or (not head) nested)
+ (or (not head) nested)
capt setd))
(else
- (cons (complex-bindings- (car e) vars #t nested capt setd)
+ (cons (complex-bindings- (car e) vars (inlineable? e) nested capt setd)
(map (lambda (x)
(complex-bindings- x vars #f nested capt setd))
(cdr e))))))
@@ -613,10 +669,13 @@
(filter (λ (x) (has? capt x))
(table-keys setd))))
+(define (vars-to-env vars cb offs)
+ (map (λ (var i) (vinfo var (not (not (memq var cb))) (+ i offs)))
+ vars (iota (length vars))))
+
(define (extend-env env vars cb)
- (cons (map (λ (var i) (vinfo var (not (not (memq var cb))) i))
- vars (iota (length vars)))
- env))
+ (cons (vars-to-env vars cb 0)
+ env))
;; main entry points
@@ -639,8 +698,7 @@
(vars (lambda:vars f))
(opta (filter pair? (cadr f)))
(last (lastcdr f)))
- (let* ((cb (complex-bindings (lambda:body f) vars))
- (name (if (null? last) 'lambda last))
+ (let* ((name (if (null? last) 'λ last))
(nargs (if (atom? args) 0 (length args)))
(nreq (- nargs (length opta)))
(kwa (filter keyword-arg? opta)))
@@ -666,14 +724,10 @@
((not (null? atail)) (emit g 'vargc nargs))
((null? opta) (emit g 'argc nargs)))
- (let ((newenv (extend-env env vars cb)))
- (let loop ((e (car newenv))
- (i 0))
- (if (pair? e)
- (begin (if (cadr (car e))
- (emit g 'box i))
- (loop (cdr e) (+ i 1)))))
-
+ (let ((newenv (extend-env env vars (complex-bindings (lambda:body f) vars))))
+ (box-vars g (car newenv))
+ ;; set initial stack pointer
+ (aset! g 4 (+ (length vars) 4))
;; compile body and return
(compile-in g newenv #t (lambda:body f))
(emit g 'ret)
@@ -737,7 +791,7 @@
(set! i (+ i 1)))
((loada seta loadc call tcall list + - * / vector
- argc vargc loadi8 apply tapply closure box)
+ argc vargc loadi8 apply tapply closure box shift)
(print-inst inst i 1)
(princ (number->string (aref code i)))
(set! i (+ i 1)))
--- a/flisp.boot
+++ b/flisp.boot
@@ -17,41 +17,36 @@
#fn("8000|0200\x7f2:" #(#.div0))
#fn("6000n201l:" #()) #fn("6000n201m:" #()) 0 #fn("8000|0200\x7f2:" #(#.vector))
#fn("7000n30182p:" #()) 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 0 0 0)
*interactive* #f *syntax-environment*
#table(with-input-from #fn("<000|12021e1220e2e1e12315163:" #(#fn(nconc)
with-bindings *input-stream* #fn(copy-list))) unless #fn("<000|1200O211Pe4:" #(if
- begin)) time #fn("6000n1200>1215061:" #(#fn("=000n120021e1e2e122A23242521e10e326e4e3e3:" #(let
- time-now prog1 princ "Elapsed time: " - " seconds\n"))
- #fn(gensym))) cond #fn("8000|0200>1D61:" #(#fn("7000n1\x8c00200>1_40<A61:" #(#fn("7000n10H340O:20A0>20<61:" #(#fn("9000n10<20Q;I7040<DQ3@00=J500<:210=P:0=J?0220<A<F=51e3:0T23C_07475051513E0260AF>377750515161:280AF>3295061:2:0<210=PA<F=51e4:" #(else
- begin or => 1arg-lambda? caddr #fn("<000n1200A<e2e1210227374A5151PF<92=51e4e3:" #(let
- if begin cddr caddr)) caadr #fn(";000n1200A<e2e121072A510e2F<92=51e4e3:" #(let
- if caddr)) #fn(gensym) if))) cond-clauses->if))))) do #fn("@000|220182>221501<22230522224052222505265:" #(#fn("A000n520021822212324e125A=51522324e125F51230e18452e153e4e3e2e1230e18352e3:" #(letrec
- λ if #fn(nconc) begin #fn(copy-list))) #fn(gensym)
- #fn(map) #.car #.cadr #fn("6000n170051B38071061:0<:" #(cddr caddr)))) with-bindings #fn("=000|1201>121220522123052212405263:" #(#fn("A000n32021e1222382053e1242225015351262027e124A51522027e1242228082535152e3e164:" #(#fn(nconc)
- let #fn(map) #.list #fn(copy-list) #fn("7000n22001e3:" #(set!))
- unwind-protect begin #fn("7000n22001e3:" #(set!))))
- #fn(map) #.car #.cadr #fn("5000n12060:" #(#fn(gensym))))) let #fn(":000|1\x8c0\x8c12001>2O61:" #(#fn(";000n1\x8c0A<R3E00A<_4AF<<_4FF<=_@30D4200>12122e12324A<52e125F<51532326A<5262:" #(#fn("7000n2A<3B020A<0e2e1A<e3@3001P:" #(letrec))
- #fn(nconc) λ #fn(map) #fn("5000n10B3500<:0:" #())
- #fn(copy-list) #fn("5000n10B3500T:7060:" #(void)))))) define-macro #fn(">000|120210<e22223e10=e12415153e3:" #(set-syntax!
+ begin)) time #fn(">000n12050218522e1e2e123024252622e185e327e4e3e3:" #(#fn(gensym)
+ let time-now prog1 princ "Elapsed time: " - " seconds\n")) cond #fn(":000|0D\x8c5852085>1_485<061:" #(#fn(">000n10H340O:0<85<20Q;I80485<DQ3C085=J6085<:2185=P:85=J@02285<A<0=51e3:85T23C\x98074758551513c07675855151278685<e2e12886217975855151PA<0=51e4e3:2:50278685<e2e1288675855186e2A<0=51e4e3:2885<2185=PA<0=51e4:" #(else
+ begin or => 1arg-lambda? caddr caadr let if cddr #fn(gensym)) cond-clauses->if))) do #fn("J000|220501<2122052212305221240522587268927882829e12:1=51522829e12:82512887e18;52e153e4e3e2e12887e18:52e3:" #(#fn(gensym)
+ #fn(map) #.car #.cadr #fn("6000n170051B38071061:0<:" #(cddr caddr)) letrec λ
+ if #fn(nconc) begin #fn(copy-list))) with-bindings #fn("G000|12021052202205220230522425e12026888653e12720288687535129242:e12715152242:e127202;8688535152e3e164:" #(#fn(map)
+ #.car #.cadr #fn("5000n12060:" #(#fn(gensym)))
+ #fn(nconc) let #.list #fn(copy-list) #fn("7000n22001e3:" #(set!))
+ unwind-protect begin #fn("7000n22001e3:" #(set!)))) let #fn(">000|1O0R3B00?641<?041=?1@30D42021e12223052e124151532225052863C0268687e2e186e3@408788P:" #(#fn(nconc)
+ λ #fn(map) #fn("5000n10B3500<:0:" #()) #fn(copy-list)
+ #fn("5000n10B3500T:7060:" #(void)) letrec)) define-macro #fn(">000|120210<e22223e10=e12415153e3:" #(set-syntax!
quote #fn(nconc) λ #fn(copy-list))) quasiquote #fn("7000n1700E62:" #(bq-process)) when #fn(";000|1200211POe4:" #(if
begin)) with-output-to #fn("<000|12021e1220e2e1e12315163:" #(#fn(nconc)
with-bindings
*output-stream*
- #fn(copy-list))) catch #fn("7000n22010>2215061:" #(#fn("?000n120A210e12223240e225260e22728e2e325290e2Fe3e42:0e22;0e2e4e3e3:" #(trycatch
- λ if and pair? eq? car quote thrown-value cadr caddr raise))
- #fn(gensym))) let* #fn("@000|10H3E02021e1qe12215153e1:2021e173051e1e1220=B3H02024e10=e12215153e1@301515375051e2:" #(#fn(nconc)
+ #fn(copy-list))) catch #fn("@000n220502112286e123242586e2262786e22829e2e3262:86e20e3e42;86e22<86e2e4e3e3:" #(#fn(gensym)
+ trycatch λ if and pair? eq? car quote thrown-value cadr caddr raise)) let* #fn("@000|10H3E02021e1qe12215153e1:2021e173051e1e1220=B3H02024e10=e12215153e1@301515375051e2:" #(#fn(nconc)
λ #fn(copy-list) caar let* cadar)) letrec #fn(">000|1202021e12223052e122240522515154e1222605262:" #(#fn(nconc)
λ #fn(map) #.car #fn("8000n12021e12205162:" #(#fn(nconc) set! #fn(copy-list)))
#fn(copy-list) #fn("5000n17060:" #(void)))) assert #fn(";000n1200D2122230e2e2e2e4:" #(if
- raise quote assert-failed)) case #fn(":000|12001>2D61:" #(#fn("8000n1\x8c0020_421A0F>3225061:" #(#fn("8000n2120C5020:1J40O:1R3=021072151e3:1H3=023072151e3:1=J>0230721<51e3:74251523=0260271e2e3:280271e2e3:" #(else
+ raise quote assert-failed)) case #fn("A000|1D\x8c68620_4215022870e2e12324e125268687>215252e3:" #(#fn("8000n2120C5020: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("<000n1200Ae2e12122e12324F0>2925252e3:" #(let #fn(nconc) cond #fn(map)
- #fn("7000n1A<F0<520=P:" #())))
- #fn(gensym))))) receive #fn("?000|22021q1e32221e10e123825153e3:" #(call-with-values
- λ #fn(nconc) #fn(copy-list))) dotimes #fn(":000|1201>10<0T62:" #(#fn("<000n220E211Ke32223e10e1e124A5153e4:" #(for
- - #fn(nconc) λ #fn(copy-list))))) unwind-protect #fn("7000n22010>22150215062:" #(#fn("?000n220121qAe3e2e12223F210e1241e1250e2e3e3e31e1e3e3:" #(let
- λ prog1 trycatch begin raise)) #fn(gensym))) throw #fn("9000n220212223e201e4e2:" #(raise
+ #fn(gensym) let #fn(nconc) cond #fn(map)
+ #fn("7000n1A<F0<520=P:" #()))) receive #fn("?000|22021q1e32221e10e123825153e3:" #(call-with-values
+ λ #fn(nconc) #fn(copy-list))) dotimes #fn("A000|10<0T20E2187Ke32223e186e1e12415153e4:" #(for
+ - #fn(nconc) λ #fn(copy-list))) unwind-protect #fn("A000n220502050218722q1e3e2e1232402286e12587e12686e2e3e3e387e1e3e3:" #(#fn(gensym)
+ let λ prog1 trycatch begin raise)) throw #fn("9000n220212223e201e4e2:" #(raise
list quote thrown-value)))
1+ #fn("6000n10KM:" #() 1+) 1-
#fn("6000n10K\x80:" #() 1-) 1arg-lambda? #fn("7000n10B;3U04700<51;3J040=B;3B040TB;3:04710TK62:" #(is-lambda?
@@ -58,7 +53,7 @@
length=) 1arg-lambda?)
<= #fn("6000n210L;IB0470051;380470151S:" #(nan?) <=) >
#fn("6000n210L:" #() >) >= #fn("6000n201L;IB0470051;380470151S:" #(nan?) >=)
- Instructions #table(call.l 83 trycatch 77 largc 81 loadg.l 68 box 92 cadr 36 argc 62 setg 71 load0 21 vector? 45 fixnum? 41 loadc0 17 loada0 0 div0 59 keyargs 91 call 5 loada.l 69 brt.l 50 pair? 18 sub2 80 add2 29 loadc.l 70 loadc 9 builtin? 43 set-car! 47 brt 25 ret 10 loadi8 66 tapply 79 loada1 1 boolean? 39 atom? 24 cdr 13 brne.l 85 / 58 loadf 31 equal? 52 apply 54 dup 11 loadt 20 jmp.l 48 null? 38 not 35 = 60 set-cdr! 30 eq? 33 * 57 load1 27 dummy_t 95 bound? 42 brf 3 function? 44 box.l 93 setc.l 75 < 28 brnn.l 86 jmp 16 loadv 2 for 78 lvargc 82 dummy_eof 97 + 55 dummy_f 94 setc 74 brne 19 compare 61 neg 37 loadv.l 67 number? 40 vargc 76 brn 87 brbound 90 vector 63 loadc1 22 setg.l 72 aref 23 brf.l 49 symbol? 34 aset! 64 car 12 cons 32 tcall.l 84 - 56 brn.l 88 optargs 89 nop 46 closure 14 pop 4 eqv? 51 list 53 seta 15 seta.l 73 brnn 26 loadnil 65 loadg 7 loada 8 dummy_nil 96 tcall 6)
+ Instructions #table(call.l 83 trycatch 77 largc 81 loadg.l 68 box 92 cadr 36 argc 62 setg 71 load0 21 vector? 45 fixnum? 41 loadc0 17 loada0 0 div0 59 keyargs 91 call 5 loada.l 69 brt.l 50 pair? 18 sub2 80 add2 29 loadc.l 70 loadc 9 builtin? 43 set-car! 47 brt 25 ret 10 loadi8 66 tapply 79 loada1 1 shift 94 boolean? 39 atom? 24 cdr 13 brne.l 85 / 58 loadf 31 equal? 52 apply 54 dup 11 loadt 20 jmp.l 48 null? 38 not 35 = 60 set-cdr! 30 eq? 33 * 57 load1 27 dummy_t 96 bound? 42 brf 3 function? 44 box.l 93 setc.l 75 < 28 brnn.l 86 jmp 16 loadv 2 for 78 lvargc 82 dummy_eof 98 + 55 dummy_f 95 setc 74 brne 19 compare 61 neg 37 loadv.l 67 number? 40 vargc 76 brn 87 brbound 90 vector 63 loadc1 22 setg.l 72 aref 23 brf.l 49 symbol? 34 aset! 64 car 12 cons 32 tcall.l 84 - 56 brn.l 88 optargs 89 nop 46 closure 14 pop 4 eqv? 51 list 53 seta 15 seta.l 73 brnn 26 loadnil 65 loadg 7 loada 8 dummy_nil 97 tcall 6)
__init_globals #fn("5000n020w1422w3474w5476w7478w9:" #("/"
*directory-separator*
"\n"
@@ -69,13 +64,9 @@
*input-stream*
*stderr*
*error-stream*) __init_globals)
- __rcscript #fn("7000n02021725161:" #(#fn("6000n12005138071061:D:" #(#fn(path-exists?)
- load)) #fn("7000n1020c35021:022c3?0232425512662:232427512862:" #(unknown ""
- plan9 #fn(string)
- #fn(os-getenv)
- "home" "/lib/flisprc"
- "HOME" "/.flisprc"))
- *os-name*) __rcscript)
+ __rcscript #fn(":000n0708421c37022@U08423c3A0242526512752@>0242528512952\x8e12:84513907;8461:D:" #(*os-name*
+ unknown "" plan9 #fn(string) #fn(os-getenv) "home" "/lib/flisprc" "HOME" "/.flisprc"
+ #fn(path-exists?) load) __rcscript)
__script #fn("6000n1200>121}:" #(#fn("6000n070A61:" #(load))
#fn("6000n170051421K61:" #(top-level-exception-handler
#fn(exit)))) __script)
@@ -86,27 +77,28 @@
argc-error #fn(";000n2702102211Kl37023@402465:" #(error "compile error: "
" expects " " argument."
" arguments.") argc-error)
- array? #fn("7000n10];I<04202105161:" #(#fn("6000n10B;38040<20Q:" #(array))
- #fn(typeof)) array?)
+ array? #fn("7000n10];IF042005185B;390485<21Q:" #(#fn(typeof) array) array?)
assoc #fn("7000n21H340O:701510d3501<:7101=62:" #(caar assoc) assoc)
assv #fn("7000n21H340O:701510c3501<:7101=62:" #(caar assv) assv)
bcode:cenv #fn("6000n10r3G:" #() bcode:cenv) bcode:code
#fn("6000n10EG:" #() bcode:code) bcode:ctable #fn("6000n10KG:" #() bcode:ctable)
- bcode:indexfor #fn("8000n22010>2710517205162:" #(#fn("9000n2200A52390210A62:220A15341Fr21KMp4:" #(#fn(has?)
- #fn(get) #fn(put!))) bcode:ctable bcode:nconst) bcode:indexfor)
- bcode:nconst #fn("6000n10r2G:" #() bcode:nconst) bq-bracket
- #fn(";000n20H3=020710152e2:0<22CR01El380200=P:202324710=1K\x8052e3e2:0<25CS01El390260Te2:202027710T1K\x8052e3e2:0<28CO01El3500T:202029710T1K\x8052e3e2:20710152e2:" #(#.list
+ bcode:indexfor #fn(";000n2700517105122861523:02386162:2486187534870r287KMp4:" #(bcode:ctable
+ bcode:nconst #fn(has?) #fn(get) #fn(put!)) bcode:indexfor)
+ bcode:nconst #fn("6000n10r2G:" #() bcode:nconst) bcode:sp
+ #fn("6000n10r4G:" #() bcode:sp) bcode:stack #fn("8000n20r40r4G1Mp:" #() bcode:stack)
+ box-vars #fn("9000n2D\x8c68620086>2_486<\x8e1161:" #(#fn("9000n10B3Q00<T3B070A21720<5153@30D4F<0=61:D:" #(emit
+ box caddr))) box-vars)
+ 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(":000n20B;38040<20Q3K01El3500T:2122730=1K\x8052e3:730162:" #(unquote
#.cons 'unquote bq-process) bq-bracket1)
- bq-process #fn(":000n20R380200e2:0]3A021727305115261:0H3400:0<24CB02526720T1KM52e3:0<27CW01El;3:04780r2523500T:292:720=1K\x8052e3:7;7<052II02=1>17>0512?2@1>105262:2A1>1D510q62:" #(quote
- #fn("7000n10<20C80210=P:22210e3:" #(#.list #.vector #.apply)) bq-process
- vector->list quasiquote #.list 'quasiquote unquote length= #.cons 'unquote
- any splice-form? #fn("9000n20J70201P:1=J?0211<720A52e3:23241P720A52e162:" #(#.list
- #.cons bq-process #fn(nconc) #fn(list*))) lastcdr #fn(map)
- #fn("7000n1700A62:" #(bq-bracket1)) #fn("8000n1\x8c0020A0>2_40<:" #(#fn("=000n20J;02071151P:0B3n00<22CW020731AEl3700=@C02425e2760=AK\x8052e252P:F<0=770<A521P62:2071760A521P51P:" #(nconc
- reverse! unquote nreconc #.list 'unquote bq-process bq-bracket))))) bq-process)
+ bq-process #fn("<000n20R380200e2:0]3T0717205115286<23C902486=P:252486e3:0H3400:0<26CB02327710T1KM52e3:0<28CW01El;3:04790r2523500T:2:2;710=1K\x8052e3:7<7=052It07>0512?2@1>105286J802387P:87=JA02:87<7186152e3:2A2B87P7186152e162:D\x8c6862C186>2_486<\x8e10q62:" #(quote
+ bq-process vector->list #.list #.vector #.apply quasiquote 'quasiquote
+ unquote length= #.cons 'unquote any splice-form? lastcdr #fn(map)
+ #fn("7000n1700A62:" #(bq-bracket1)) #fn(nconc)
+ #fn(list*) #fn("=000n20J;02071151P:0B3n00<22CW020731AEl3700=@C02425e2760=AK\x8052e252P:F<0=770<A521P62:2071760A521P51P:" #(nconc
+ reverse! unquote nreconc #.list 'unquote bq-process bq-bracket))) bq-process)
builtin->instruction #fn("8000n120A0O63:" #(#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("5000n10<<<<:" #() caaaar) caaadr
#fn("5000n10T<<:" #() caaadr) caaar #fn("5000n10<<<:" #() caaar)
@@ -117,9 +109,9 @@
cadar #fn("5000n10<T:" #() cadar) caddar
#fn("5000n10<=T:" #() caddar) cadddr #fn("5000n10==T:" #() cadddr)
caddr #2=#fn("5000n10=T:" #() caddr) call-with-values
- #fn("7000n220A1>205061:" #(#fn("6000n10B;3704A0<Q380F0=\x7f2:F061:" #())) #(#1=(*values*)))
- capture-var! #fn("7000n22001>27105161:" #(#fn("9000n1200AF>371F0E5361:" #(#fn(":000n10;IF0420A51Fr321A92e152p4:" #(#fn(length)
- #fn(nconc))) index-of)) bcode:cenv) capture-var!)
+ #fn("7000n205086B;3804A86<Q390186=\x7f2:18661:" #() #(#1=(*values*)))
+ capture-var! #fn("<000n27005171186E5387;IG042286510r323861e152p4:" #(bcode:cenv
+ index-of #fn(length) #fn(nconc)) capture-var!)
cdaaar #fn("5000n10<<<=:" #() cdaaar) cdaadr
#fn("5000n10T<=:" #() cdaadr) cdaar #fn("5000n10<<=:" #() cdaar)
cdadar #fn("5000n10<T=:" #() cdadar) cdaddr
@@ -134,155 +126,136 @@
closure? #fn("6000n10\\;36040[S:" #() closure?) compile
#fn("8000n170q7105162:" #(compile-f lower-define) compile)
compile-and #fn(";000n470018283D2166:" #(compile-short-circuit brf) compile-and)
- compile-app #fn("9000n420830182>483<61:" #(#fn("9000n120AF9293>40R;3W047109252S;3J040Z;3C0422051;390423051[3:023051@30061:" #(#fn(":000n170A=21523O072F92O054423F93>274F92A=5361:25092AF93>50[;38047605161:" #(length>
- 255 compile-in #fn("9000n170AF37021@4022063:" #(emit tcall.l call.l))
- compile-arglist #fn("<000n1A20Q;3U0471AF52S;3I0422205123d;3;047492r2523G07593FO92T54476932062:0I>07593FOA54@30D427093F9492A>67893F92=5361:" #(cadr
- in-env? #fn(top-level-value) #.cadr length= compile-in emit #fn("<000n1A3B070F92939495A067:71F9337022@4023063:" #(compile-builtin-call
- emit tcall call)) compile-arglist)) builtin->instruction)) in-env? #fn(constant?)
- #fn(top-level-value)))) compile-app)
- compile-arglist #fn("8000n3702101>282524228261:" #(for-each #fn("9000n170AFO064:" #(compile-in))
- #fn(length)) compile-arglist)
+ compile-app #fn("E000n483<88R;3Z047088152S;3M0488Z;3E04218851;3:04228851[3;0228851@40887383=24523i07501O89544760K524770183=537608:U5247808237029@402:8:63:89[;39047;8951892<Q;3V047089152S;3I04222<512=d;3;047>83r2523E07501O83T5447802<62:89B;3E047?89<51;39047@83513=07A01828364:8:IE07501O89544760K52@30D4770183=537608;U5248:I<0760r/52@30D48:3C07B018283898:8;67:780823702C@402D8;63:" #(in-env?
+ #fn(constant?) #fn(top-level-value) length> 255 compile-in bcode:stack
+ compile-arglist emit tcall.l call.l builtin->instruction cadr #.cadr length=
+ is-lambda? inlineable? compile-let compile-builtin-call tcall call) compile-app)
+ compile-arglist #fn("8000n3702101>282524228261:" #(for-each #fn("9000n170AFO054471AK62:" #(compile-in
+ bcode:stack)) #fn(length)) compile-arglist)
compile-begin #fn("9000n483H3?0700182715064:83=H3>070018283<64:7001O83<5447202352474018283=64:" #(compile-in
void emit pop compile-begin) compile-begin)
- compile-builtin-call #fn(":000n720838586082>5217284O5361:" #(#fn(":000n10;3;0470A=052S3;071F052@30D4229293F94>4F61:" #(length=
- argc-error #fn("9000n1020CI0AEl3:071F2262:71F92A63:023CX0AEl3:071F2462:Ar2l3:071F2562:71F92A63:026Cf0AEl3:07792K62:AKl3:071F2862:Ar2l3:071F2962:71F92A63:02:CI0AEl3:071F2;62:71F92A63:02<CI0AEl3:07792K62:71F92A63:02=CK0AEl3<071F2>2?63:71F92A63:02@CU0Ar2L3;07792r262:71F933702A@402@A63:71F9262:" #(list
- emit loadnil + load0 add2 - argc-error neg sub2 * load1 / vector loadv #()
- apply tapply)))) #fn(get) arg-counts) compile-builtin-call)
+ compile-builtin-call #fn("<000n7207184O538;;3=047283=8;52S3=073858;52@30D4858<24CK086El3:07502662:750858663:8<27C[086El3:07502862:86r2l3:07502962:750858663:8<2:Cj086El3:07385K62:86Kl3:07502;62:86r2l3:07502<62:750858663:8<2=CK086El3:07502>62:750858663:8<2?CK086El3:07385K62:750858663:8<2@CM086El3<07502A2B63:750858663:8<2CCW086r2L3;07385r262:750823702D@402C8663:7508562:" #(#fn(get)
+ arg-counts length= argc-error list emit loadnil + load0 add2 - neg sub2 *
+ load1 / vector loadv #() apply tapply) compile-builtin-call)
compile-f #fn("8000n2702101>22262:" #(call-with-values #fn("7000n070AF62:" #(compile-f-))
#fn("5000n20:" #())) compile-f)
- compile-f- #fn("<000n22001>271501T721T517315174251T527215166:" #(#fn("=000n62084082A83F185>87172F51835261:" #(#fn("=000n120AF92939495096>897J7021@409761:" #(#fn("=000n120AF92939495096>897H360E@8021975161:" #(#fn(">000n120AF9209394959697>9021A51\x8061:" #(#fn("?000n120AF092939495969798>:7172A5261:" #(#fn("A000n1A\x87\x9a00JK070F219293J7094@5094U54@m072F7324252426052772805151535152470F29922805193J7094@5094U5547:F95A969255@30D47;942<523H070F93J702=@402>9453@T093\x87>070F2?9453@C0AJ>070F2@9453@30O42AF9798>37B9596995361:" #(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 #fn(":000n120A>1D510<E52471A0D72F5154473A2452475267778A515179A5192537:A5162:" #(#fn("8000n1\x8c0020A0>2_40<:" #(#fn("9000n20B3O00<T3=070A21153@30D4F<0=1KM62:D:" #(emit
- box)))) compile-in lambda:body emit ret values #fn(function) encode-byte-code
- bcode:code const-to-idx-vec bcode:cenv)) extend-env)) filter keyword-arg?))
- #fn(length))) #fn(length))) λ)) complex-bindings lambda:body))
- make-code-emitter lastcdr lambda:vars filter #.pair?) compile-f-)
- compile-for #fn("9000n57084513X07101O825447101O835447101O845447202362:742561:" #(1arg-lambda?
- compile-in emit for error "for: third form must be a 1-argument lambda") compile-for)
- compile-if #fn(";000n4200182>3710517105183T728351738351B3;0748351@60755065:" #(#fn(":000n582DC=070AF928364:82OC=070AF928464:70AFO8254471A22053470AF9283544923<071A2352@:071A24153475A052470AF928454475A162:" #(compile-in
- emit brf ret jmp mark-label)) make-label caddr cdddr cadddr void) compile-if)
- compile-in #fn(":000n483R3<0700183D64:83H3\xaf083EC:07102262:83KC:07102362:83DC:07102462:83OC:07102562:83qC:07102662:7783513<0710288363:2983513C07:01822;2<51e164:7102=8363:83<RS;ID0483<Z;I;047>83<1523=07?01828364:2@830182>483<61:" #(compile-sym
+ compile-f- #fn("O000n270501T711T517215173241T52711518;J7025@408;87H360E@802687518=268:51\x8073778:528:\x87\xa208?JL07886298>88J708=@508=U54@r07:867;2<2=2<2>8?527?268?5151535152478862@8>268?5188J708=@508=U5547A8608:898>55@30D47B8=2C523I0788688J702D@402E8=53@W088\x87?078862F8=53@E08:J?078862G8=53@30O47H0897I7J1518952537K868@<52486r4268951r4Mp47L868@D7J15154478862M5247N2O7P7Q8651517R86518<537S865162:" #(make-code-emitter
+ lastcdr lambda:vars filter #.pair? λ #fn(length) keyword-arg? emit optargs
+ bcode:indexfor make-perfect-hash-table #fn(map) #.cons #.car iota keyargs
+ emit-optional-arg-inits > 255 largc lvargc vargc argc extend-env
+ complex-bindings lambda:body box-vars compile-in ret values #fn(function)
+ encode-byte-code bcode:code const-to-idx-vec bcode:cenv) compile-f-)
+ compile-for #fn("9000n57084513n07101O82544720K5247101O83544720K5247101O8454473024524720r.62:752661:" #(1arg-lambda?
+ compile-in bcode:stack emit for error "for: third form must be a 1-argument lambda") compile-for)
+ compile-if #fn("@000n4700517005183T718351728351B3;0738351@6074508:DC=07501828;64:8:OC=07501828<64:7501O8:54476027885347501828;544823<07602852@;076029895347:0885247501828<5447:08962:" #(make-label
+ caddr cdddr cadddr void compile-in emit brf ret jmp mark-label) compile-if)
+ compile-in #fn("=000n483R3<0700183D64:83H3\xaf083EC:07102262:83KC:07102362:83DC:07102462:83OC:07102562:83qC:07102662:7783513<0710288363:2983513C07:01822;2<51e164:7102=8363:83<RS;ID0483<Z;I;047>83<1523=07?01828364:83<882@CS07A83T513>07:018283T64:7102=83T63:882BC=07C01828364:882DC>07E018283=64:882FC;07G018363:882HCD07I2J183>22K01>262:882LC>07M018283=64:882NC>07O018283=64:882PCE07Q0183T2D7R8351P64:882SCH07T0183T7U83517V835165:882WCE07:01D83T5447102X62:882YCT083TR360O@807Z2[5147\\0183T7U835164:882]Cp07:01O2Hq83Te35447^7U835151360O@807Z2_5147:01O7U83515447102]62:7?01828364:" #(compile-sym
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("<000n1020CQ071AT513>072F9293AT64:73F24AT63:025C=076F9293A64:027C>078F9293A=64:029C;07:F92A63:02;CE07<2=92A>22>F92>262:02?C>07@F9293A=64:02AC>07BF9293A=64:02CCD07DF92AT277EA51P64:02FCF07GF92AT7HA517IA5165:02JCE072F92DAT54473F2K62:02LCR0ATR360O@807M2N5147OF92AT7HA5164:02PCo072F92O2;qATe35447Q7HA5151360O@807M2R51472F92O7HA5154473F2P62:7SF9293A64:" #(quote
- self-evaluating? compile-in emit loadv if compile-if begin compile-begin
- prog1 compile-prog1 λ call-with-values #fn("7000n070AF62:" #(compile-f-))
+ compile-in #fn(top-level-value) eof-object loadv in-env? compile-app quote
+ self-evaluating? if compile-if begin compile-begin prog1 compile-prog1 λ
+ call-with-values #fn("7000n070AF62:" #(compile-f-))
#fn("9000n270A2105341\x87K07223AF>2152470A242515163:D:" #(emit loadv for-each
#fn("9000n170AF0O64:" #(compile-sym))
closure #fn(length)))
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-set! trycatch 1arg-lambda? "trycatch: second form must be a 1-argument lambda"
- compile-app))) compile-in)
+ compile-set! trycatch 1arg-lambda? "trycatch: second form must be a 1-argument lambda") compile-in)
+ compile-let #fn("A000n483<83=7005188T71018953728;737488518;528:537508=524268=1<521=P7708>827488515447808<U524798<E52;360482S3<07:02;8<63:D:" #(bcode:sp
+ compile-arglist vars-to-env complex-bindings caddr box-vars #fn(nconc)
+ compile-in bcode:stack > emit shift) compile-let)
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-set! #fn("9000n420018382>471821E5361:" #(#fn(":000n1020CF071AFO9254472A239363:24AF92930>50<El61:" #(global
- compile-in emit setg #fn(":000n120A0F9293>57194=5103<07294=51@9073A935262:" #(#fn(":000n203W070AF37021@4022153473A92O9354470A2462:73A92O93544FIA0752627945251@30D470A28163:" #(emit
- loada loadc compile-in set-car! error #fn(string)
- "internal error: misallocated var " seta)) vinfo:heap? vinfo:index
- capture-var!)))) lookup-sym) compile-set!)
- compile-short-circuit #fn(";000n683H3=07001828464:83=H3>070018283<64:210183858284>67205161:" #(compile-in
- #fn(";000n170AFO92<54471A2252471A93053471A2352474AF9492=959356475A062:" #(compile-in
- emit dup pop compile-short-circuit mark-label)) make-label) compile-short-circuit)
- compile-sym #fn("9000n42082083>371821E5361:" #(#fn(":000n1020C^021A51;3<047223A51513?074F2523A5163:74F26A63:0<El3Z074F27780=5153492;3904790=513:074F2:62:D:74F2;7<FA5253492;3904790=513:074F2:62:D:" #(global
- #fn(constant?) printable? #fn(top-level-value) emit loadv loadg loada
- vinfo:index vinfo:heap? car loadc capture-var!)) lookup-sym) compile-sym)
+ compile-prog1 #fn(":000n37001O82T544718251B3W0720K5247301O71825154474025524720r/62:D:" #(compile-in
+ cddr bcode:stack compile-begin emit pop) compile-prog1)
+ compile-set! #fn("?000n470821E538821CF07201O83544730248263:88<El7588=51893<07688=51@9077082528:3g07308937028@40298;5347:0K5247201O835447:0r/5247302;62:7201O8354489IA07<2=2>825251@30D47302?8;63:" #(lookup-sym
+ global compile-in emit setg vinfo:heap? vinfo:index capture-var! loada loadc
+ bcode:stack set-car! error #fn(string) "internal error: misallocated var "
+ seta) compile-set!)
+ compile-short-circuit #fn("<000n683H3=07001828464:83=H3>070018283<64:710517001O83<544720K52473024524730858:534720r/5247302552476018283=84855647708:62:" #(compile-in
+ make-label bcode:stack emit dup pop compile-short-circuit mark-label) compile-short-circuit)
+ compile-sym #fn(";000n470821E538821Cb0228251;3=0473248251513@07502624825163:750278263:88<El3\\0750287988=5153483;3:047:88=513:07502;62:D:7502<7=0825253483;3:047:88=513:07502;62:D:" #(lookup-sym
+ global #fn(constant?) printable? #fn(top-level-value) emit loadv loadg loada
+ vinfo:index vinfo:heap? car loadc capture-var!) compile-sym)
compile-thunk #fn(":000n170q21q72051e362:" #(compile-f λ
lower-define) compile-thunk)
- compile-while #fn("9000n420018283>4710517105162:" #(#fn("9000n270AFO715054472A052470AFO9254473A24153473A2552470AFO9354473A26053472A162:" #(compile-in
- void mark-label emit brf pop jmp)) make-label) compile-while)
- complex-bindings #fn("7000n22001>22150215062:" #(#fn(";000n270AFOO0156471220>17315162:" #(complex-bindings-
- filter #fn("7000n120A062:" #(#fn(has?))) table-keys))
- #fn(table)) complex-bindings)
- complex-bindings- #fn("=000n61J40O:0R3M083;39042001523;021840D63:D:0H;I80472051340O:0<23Co0200T1523Q021850TD534833>021840TD53@30D@30D474750511O83848566:760<513L074770517817905152OD848566:740<1D838485562:2;1838485>40=52P:" #(#fn(memq)
+ compile-while #fn(";000n470051700517101O7250544730K524740885247101O82544750268953475027524730r/5247101O8354475028885347408962:" #(make-label
+ compile-in void bcode:stack mark-label emit brf pop jmp) compile-while)
+ complex-bindings #fn("=000n2205020507101OO8687564722386>174875162:" #(#fn(table)
+ complex-bindings- filter #fn("7000n120A062:" #(#fn(has?))) table-keys) complex-bindings)
+ complex-bindings- #fn("=000n61J40O:0R3M083;39042001523;021840D63:D:0H;I80472051340O:0<23Co0200T1523Q021850TD534833>021840TD53@30D@30D474750511O83848566:760<513U074770517817905152O82S;I50483848566:740<17:051838485562;2<1838485>40=52P:" #(#fn(memq)
#fn(put!) quoted? set! complex-bindings- caddr is-lambda? lambda:body diff
- lambda:vars #fn(map) #fn(";000n1700AOF929366:" #(complex-bindings-))) complex-bindings-)
- const-to-idx-vec #fn("8000n1200>121720515161:" #(#fn("8000n170210>172A515240:" #(table-foreach
- #fn("7000n2A10p:" #()) bcode:ctable)) #fn(vector-alloc) bcode:nconst) const-to-idx-vec)
+ lambda:vars inlineable? #fn(map) #fn(";000n1700AOF929366:" #(complex-bindings-))) complex-bindings-)
+ const-to-idx-vec #fn("9000n1207105151722385>17405152485:" #(#fn(vector-alloc)
+ bcode:nconst table-foreach #fn("7000n2A10p:" #()) bcode:ctable) const-to-idx-vec)
copy-tree #fn("7000n10H3400:700<51700=51P:" #(copy-tree) copy-tree)
- count #fn("7000n22001>2D61:" #(#fn("8000n1\x8c00200>1_40<AFE63:" #(#fn("9000n31J5082:A<01=01<5139082KM@408263:" #() count-)))) count)
- delete-duplicates #fn("7000n1700rD523>0210>1225061:0H3400:230<0=62:" #(length>
- #fn("7000n1200>1D51Aq62:" #(#fn("8000n1\x8c0020A0>2_40<:" #(#fn("8000n20H38070161:21A0<523:0F<0=162:22A0<D534F<0=0<1P62:" #(reverse!
- #fn(has?) #fn(put!))))))) #fn(table) #fn("7000n270015238071161:071151P:" #(member
- delete-duplicates))) delete-duplicates)
+ count #fn("9000n2D\x8c6862086>1_486<01E63:" #(#fn("9000n31J5082:A<01=01<5139082KM@408263:" #() count-)) count)
+ delete-duplicates #fn(":000n1700rD523O02150D\x8c686228586>2_486<\x8e10q62:0H3400:0<0=73858652390748661:85748651P:" #(length>
+ #fn(table) #fn("8000n20H38070161:21A0<523:0F<0=162:22A0<D534F<0=0<1P62:" #(reverse!
+ #fn(has?) #fn(put!))) member delete-duplicates) delete-duplicates)
diff #fn("8000n20J40q:200<1523:0710=162:0<710=152P:" #(#fn(memq)
diff) diff)
- disassemble #fn(">000\x891000.///\x8a1000I60O?14|282JD07001E53471504D:@30D4221>182<230512405163:" #(disassemble
- newline #fn("9000n3200A821>4DD62:" #(#fn(":000n2\x8c0\x8c1020A>1_4121FA>2_422A109293>5r423935162:" #(#fn("9000n10\\;36040[S3C07021514720OAKM63:73061:" #(princ
- "\n" disassemble print) print-val) #fn(";000n370A;3P04FEl;3H0471A7215152;3904A182ML37023@4024751r5\x80512602765:" #(princ
+ disassemble #fn("T000\x891000.///\x8a1000I60O?14|282JD07001E53471504D:@30D482<2205123051DD2487>1?:425187>2?;4r4268851\x8c<D8<<8=L3\x85242728888<>2O79537:8<<r4523907150@30D4E87K\x802;~48<8<<KM_48>2<8?2=523[08;8>8<<r45348:897>888<<52G5148<8<<r4M_@\x1112<8?2?523V08;8>8<<K5348:89888<<GG5148<8<<KM_@\xe212<8?2@523W08;8>8<<K5347A2B888<<G515148<8<<KM_@\xb212<8?2C523\\08;8>8<<r45347A2B7>888<<52515148<8<<r4M_@}12<8?2D523\xb808;8>8<<r88>2EC70r4@30EM5347A2B7>888<<52512F5248<8<<r4M_47A2B7>888<<52515148<8<<r4M_48>2ECY07A2F5147A2B7>888<<52512F5248<8<<r4M_@30D@\xec08?2Gc3^08;8>8<<r45347A2B7>888<<52512F5248<8<<r4M_@\xb802<8?2H523e08;8>8<<r25347A2I7J8<<r,7K888<<52g3515248<8<<r2M_@z02<8?2L523e08;8>8<<r45347A2I7J8<<r,7>888<<52g3515248<8<<r4M_@<08;8>8<<E53\x8e1\x8e1@\xd6-:" #(disassemble
+ newline #fn(function:code) #fn(function:vals)
+ #fn("9000n10\\;36040[S3C07021514720OAKM63:73061:" #(princ "\n" disassemble
+ print) print-val)
+ #fn(";000n370A;3P04FEl;3H0471A7215152;3904A182ML37023@4024751r5\x80512602765:" #(princ
>= 1- " >" " " hex5 ": " " ") print-inst)
- #fn(";000n2\x8c0D0<1L3S04200AF929394>62122940>2O735351@\x0a/:" #(#fn("<000n170A<r4523907150@30D4EFK\x8022~4AA<KM_423920A939495>6061:" #(>
- newline #fn("6000n1702161:" #(princ "\t"))
- #fn("=000n120021523Y0A<F92<r453493<94729592<52G5149292<r4M_:20023523T0A<F92<K53493<949592<GG5149292<KM_:20024523T0A<F92<K53475269592<G515149292<KM_:20027523Y0A<F92<r45347526729592<52515149292<r4M_:20028523\xb10A<F92<r8F29C70r4@30EM5347526729592<52512:5249292<r4M_47526729592<52515149292<r4M_4F29CW0752:5147526729592<52512:5249292<r4M_:D:02;c3[0A<F92<r45347526729592<52512:5249292<r4M_:2002<523b0A<F92<r2534752=7>92<r,7?9592<52g3515249292<r2M_:2002@523b0A<F92<r4534752=7>92<r,729592<52g3515249292<r4M_:A<F92<E63:" #(#fn(memq)
- (loadv.l loadg.l setg.l) ref-int32-LE (loadv loadg setg)
+ #fn(length) #fn(table-foldl) #fn("7000n382;I?041AF<GQ;34040:" #())
+ Instructions > #fn("6000n1702161:" #(princ "\t"))
+ #fn(memq) (loadv.l loadg.l setg.l) ref-int32-LE (loadv loadg setg)
(loada seta loadc call tcall list + - * / vector argc vargc loadi8 apply
- tapply closure box) princ #fn(number->string)
+ tapply closure box shift) princ #fn(number->string)
(loada.l seta.l loadc.l largc lvargc call.l tcall.l box.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("7000n382;I?041AF<GQ;34040:" #())
- Instructions))
- #fn(length))))) #fn(function:code) #fn(function:vals)) disassemble)
+ brf.l brt.l brne.l brnn.l brn.l)) disassemble)
div #fn("7000n201k0EL;3C041EL;3404K;I504r/;I404EM:" #() div) emit
- #fn("F000|2\x8c1\x8c282<Jd01<20Q;3C040EGB;3:040EG<21Q3;00EG22_@;00E1<0EGPp@\xfe0231<24523C08275082<<52e1_@30D426821>2271<285251429821>2271<2:525141<2;C`082<2<d3>012=_482q_@H082<2>d3>012?_482q_@30O@30D41<2@C`082<2<d3>012A_482q_@H082<2>d3>012B_482q_@30O@30D42C1082>30EGB3900EG<@30q0EG5240:" #(car
- cdr cadr #fn(memq) (loadv loadg setg) bcode:indexfor #fn("7000n10;3<0470A<<2152370F0T_:D:" #(>
- 255)) #fn(assq) ((loadv loadv.l) (loadg loadg.l) (setg setg.l) (loada loada.l)
- (seta seta.l) (box box.l))
- #fn("7000n10;3<0470A<<2152370F0T_:D:" #(> 255))
- ((loadc loadc.l)) loada (0) loada0 (1) loada1 loadc loadc0 loadc1 #fn("=000n2A<20Q;3\x9a04021Q;38041T22Q3E0FE92<<2374151PPp@u0021CB0FE92<<251=PPp@_0026CB0FE92<<271=PPp@I0022CB0FE92<<281=PPp@30O;I`04A<25Q;3704022Q3@0FE92<<231=PPp:FE79A<92<P152p:" #(brf
- not null? brn cddr brt eq? brne brnn nreconc))) emit)
- emit-optional-arg-inits #fn(":000n582B3F02008418382>57105161:D:" #(#fn(";000n170A21F53470A22053473A74927593F52q53O76945154470A27F53470A2852479A05247:A9294=93FKM65:" #(emit
- brbound brt compile-in extend-env list-head cadar seta pop mark-label
- emit-optional-arg-inits)) make-label) emit-optional-arg-inits)
- encode-byte-code #fn("7000n1207105161:" #(#fn("7000n1207105161:" #(#fn(":000n1200>17122051r322051r2ki2M235261:" #(#fn("<000n120A0>221A51E225022502350OO67:" #(#fn("@000n7\x8c1\x8c5\x8c6208421524D1<0L3\x180485A1<G_485<22CO02382A1<KMG24845153411<r2M_@\xe702084752677F3@02885>185<51@5085<525152411<KM_4861<0L390A1<G@30O_42985<2:523`0238324845186<5342084F3707;@407<E5152411<KM_@m085<2=CI020847;86<5152411<KM_@N086<X3F02>84861A85>585<51@30O@E/47?2@84F82>3835242A8461:" #(#fn(io-write)
- #int32(0) label #fn(put!) #fn(sizeof) byte #fn(get) Instructions #fn("6000n1020C5021:022C5023:024C5025:026C5027:028C5029:02:C502;:A<:" #(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("9000n120021523G022A73F<515249292<KM_:20024523\x83022A73F<515249292<KM_422A739392<G515249292<KM_494<25CK022A739392<G515249292<KM_:D:22A76F<515249292<KM_:" #(#fn(memq)
- (loadv.l loadg.l setg.l loada.l seta.l largc lvargc call.l tcall.l loadc.l
- box.l) #fn(io-write) int32 (optargs keyargs) keyargs uint8)) table-foreach
- #fn(";000n220A052421AF37072@407324921520\x805162:" #(#fn(io-seek)
- #fn(io-write) int32
- int16 #fn(get)))
- #fn(iostream->string))) #fn(length) #fn(table)
- #fn(buffer))) >= #fn(length) 65536)) list->vector)) reverse!) encode-byte-code)
+ #fn("P000|282Jb0120Q;3C040EGB;3:040EG<21Q3;00EG22_@:00E10EGPp@\xb9123124523A075082<52e1?2@30D4261275287;3<047882<29523:087T?1@30D\x8e142612:5287;3<047882<29523:087T?1@30D\x8e1412;C\\0822<d3=02=?14q?2@F0822>d3=02??14q?2@30O@30D412@C\\0822<d3=02A?14q?2@F0822>d3=02B?14q?2@30O@30D40EGB3900EG<@30q0EG12CQ;3\x9f04872DQ;390488T2EQ3E00E82<2F7G8851PPp@x0872DCB00E82<2H88=PPp@a0872ICB00E82<2J88=PPp@J0872ECB00E82<2K88=PPp@30O;Ia0412HQ;3804872EQ3B00E82<2F88=PPp@?00E7L182P8852p\x8e240:" #(car
+ cdr cadr #fn(memq) (loadv loadg setg) bcode:indexfor #fn(assq)
+ ((loadv loadv.l) (loadg loadg.l) (setg setg.l) (loada loada.l) (seta seta.l)
+ (box box.l)) > 255 ((loadc loadc.l)) loada (0) loada0 (1)
+ loada1 loadc loadc0 loadc1 brf not null? brn cddr brt eq? brne brnn nreconc) emit)
+ emit-optional-arg-inits #fn("<000n582B3\x900700517102284534710238953474075176838452q53O7782515447102884534710295247:0895247;0182=8384KM65:D:" #(make-label
+ emit brbound brt compile-in extend-env list-head cadar seta pop mark-label
+ emit-optional-arg-inits) emit-optional-arg-inits)
+ encode-byte-code #fn("S000n17005171855172238651r3238651r2ki2M2452238651E255025502650OO278<28524D8988L3\xd9148689G?=48=29CP02:8:8689KMG2;8<5153489r2M?9@\xa81278<7<2=7>873\x8308=8D2?C702@@p08D2AC702B@d08D2CC702D@X08D2EC702F@L08D2GC702H@@08D2IC702J@408=\x8e1@408=525152489KM?948988L3:08689G@30O?>42K8=2L523`02:8;2;8<518>534278<873707M@407NE5152489KM?9@\xeb08=2OCH0278<7M8>5152489KM?9@\xce08>X3\xc708=2K8?2P523H0278<7M8>5152489KM?9@\x9f02K8?2Q523\x810278<7M8>5152489KM?94278<7M8689G5152489KM?948=2RCK0278<7M8689G5152489KM?9@30D@E0278<7S8>5152489KM?9\x8e1@30O@\x83.47T2U8<878:>38;5242V8<61:" #(reverse!
+ list->vector >= #fn(length) 65536 #fn(table)
+ #fn(buffer) #fn(io-write) #int32(0) label #fn(put!)
+ #fn(sizeof) byte #fn(get) Instructions 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 (loadv.l loadg.l setg.l loada.l seta.l largc lvargc call.l
+ tcall.l loadc.l box.l) (optargs keyargs) keyargs uint8
+ table-foreach #fn(";000n220A052421AF37072@407324921520\x805162:" #(#fn(io-seek)
+ #fn(io-write) int32 int16 #fn(get))) #fn(iostream->string)) encode-byte-code)
error #fn("9000|020210P61:" #(#fn(raise) error) error) eval
#fn("7000n170710515160:" #(compile-thunk expand) eval) even? #fn("7000n1200K52El:" #(#fn(logand)) even?)
every #fn("7000n21H;ID0401<51;3:047001=62:" #(every) every) expand
- #fn("@000n1200>1DDDDDDDDDDD6;:" #(#fn(";000n;\x8c0\x8c1\x8c2\x8c3\x8c4\x8c5\x8c6\x8c7\x8c8\x8c9\x8c:020_41211>1_48222e1_483238:8201>4_484248:84>2_4852585>1_48626848385>3_487278:848385>4_48828838:>2_48929_48:2:8:89868788>5_48:<Aq62:" #(#fn("7000n20Z;I904200152S:" #(#fn(assq)) top?)
+ #fn("F000n1DDDDDDDDDDD\x8c5\x8c6\x8c7\x8c8\x8c9\x8c:\x8c;\x8c<\x8c=\x8c>\x8c?8520_4862186>1_48722e1_4882385868?87>4_489248?89>2_48:258:>1_48;268:8988>3_48<278?8:8988>4_48=28888?>2_48>29_48?2:8?8>8;8<8=>5_48?<0q62:" #(#fn("7000n20Z;I904200152S:" #(#fn(assq)) top?)
#fn("8000n10H3400:020d3400:0<B;3;047105122Q3F023A<7405151A<0=5162:0<A<0=51P:" #(((begin))
- caar begin #fn(append) cdar) splice-begin) *expanded* #fn("9000n20H3400:20AF192>492<211523;093<051@30061:" #(#fn("9000n120A0F92>493<21925261:" #(#fn(":000n1200AF9293>503:071F51@30q61:" #(#fn("9000n120AF9293>4212223052945261:" #(#fn("9000n1\x8c0AI?02021F0>29262:2293F0>323093F>3D51925161:" #(#fn(map)
- #fn("7000n1A<0F<62:" #()) #fn("9000n120AF920>4061:" #(#fn("8000n1D0B3[04A<70051QI@00F<0<92<52_@90071051_40=?0@\x04/493:" #(caar
- cdar)))) #fn(":000n1\x8c00200AF92>4_40<:" #(#fn("9000n10H3400:0<B;3;042071051Q3<00<A<0=51P:22F92A0>493<0<F<5261:" #(define
- caar #fn(":000n1A2021227305152A<52_4F<0P92<93=51P:" #(#fn(nconc)
- #fn(map) #.list
- get-defined-vars))))))))
- #fn(nconc) #fn(map) #.list)) get-defined-vars)) define)) begin) expand-body)
+ caar begin #fn(append) cdar) splice-begin) *expanded* #fn("A000n20H3400:A<201523:0F<051@300A<21152873;0728651@30q2324258852152\x8c987IA024269289>28662:D\x8c:8:278:928993>4_48:<\x8e186518:D8;B3c0493<788;51QIC08;92<8;<89<52_@;08;798;51_48;=?;@\xfb/48::" #(begin
+ define get-defined-vars #fn(nconc) #fn(map) #.list #fn("7000n1A<0F<62:" #())
+ #fn(";000n10H3400:0<B;3;042071051Q3<00<A<0=51P:F<0<92<52922223247585515292<52_493<85PA<0=51P:" #(define
+ caar #fn(nconc) #fn(map) #.list get-defined-vars)) caar cdar) expand-body)
#fn("9000n20H3400:0<B;37040<=B3F070051A<71051152e2@400<F<0=152P:" #(caar
cadar) expand-lambda-list) #fn("7000n10H3600e1:0<B3?070051A<0=51P:0<A<0=51P:" #(caar) l-vars)
- #fn(":000n220AF1>30T710517205192<0T5164:" #(#fn(":000n420A0F821>52122238352925261:" #(#fn(":000n12021e1A<F052e192<930529464:" #(#fn(nconc)
- λ)) #fn(nconc) #fn(map) #.list)) lastcdr cddr) expand-lambda)
- #fn(";000n20=V;I6040TH3M070051J400:210TA<72051152e3:23F921>374051750517005193<740515164:" #(cddr
- define caddr #fn(":000n4201A0F82>52122238352925261:" #(#fn(":000n12021e1AF<92052Pe193<9405263:" #(#fn(nconc)
- define)) #fn(nconc) #fn(map) #.list)) cdadr caadr) expand-define)
- #fn("9000n220A0F1>40T61:" #(#fn("<000n120A<71F512223249293>2052935252P:" #(begin
- cddr #fn(nconc) #fn(map) #fn("9000n10<70A<0TF525150Fe3:" #(compile-thunk))))) expand-let-syntax)
+ #fn("?000n20T7005171051A<0T5122232489521522225e1F<868:52e192<888:528764:" #(lastcdr
+ cddr #fn(nconc) #fn(map) #.list λ) expand-lambda)
+ #fn("?000n20=V;I6040TH3M070051J400:210TA<72051152e3:730517405170051F<730515125262789521522521e18792<868:52Pe193<888:5263:" #(cddr
+ define caddr cdadr caadr #fn(nconc) #fn(map) #.list) expand-define)
+ #fn("=000n20T20A<71051222324F1>2865215252P:" #(begin cddr #fn(nconc)
+ #fn(map)
+ #fn("9000n10<70A<0TF525150Fe3:" #(compile-thunk))) expand-let-syntax)
#fn("5000n20:" #() local-expansion-env)
- #fn("<000n20H3400:20A0F1929394>70<61:" #(#fn("=000n120AF92930949596>8210935261:" #(#fn(">000n1200AF929394959697>921A93F>361:" #(#fn("=000n1A;3604A=B3J0F<AT92=f293<70A51945262:A;I?0495RS;I60495Z360060:21F9294959697980>872925161:" #(caddr
- #fn("7000n103>0A<0F=f29262:9320C40F:9321C;094<F9262:9321C;094<F9262:9322C;095<F9262:9323C;096<F9262:9760:" #(quote
- λ define let-syntax)) macrocall?)) #fn("7000n020AF>2D519261:" #(#fn("9000n1\x8c0020AF0>3_40<:" #(#fn("8000n10H3400:0<H3700<@90A<0<F5292<0=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) λ #fn(copy-list))) cddr void error "compile error: invalid syntax "
- print-to-string) expand-define)
- extend-env #fn(":000n3202182>11722315151530P:" #(#fn(map)
- #fn("9000n2700210A52SS163:" #(vinfo
- #fn(memq))) iota #fn(length)) extend-env)
- filter #fn("7000n22001>2D61:" #(#fn("8000n120A>1?040AFqe163:" #(#fn("8000n382D1B3Q04A1<513?0821<qPN=?2@30D41=?1@\x0e/4=:" #() filter-)))) filter)
+ #fn("<000n20H3400:0<208615221A10>387;370487=B3I0A<87T0=f2F<72875115262:87;I?0486RS;I60486Z3708860:73051893>0A<890=f2162:8624C400:8625C:092<0162:8625C:092<0162:8626C:093<0162:8627C:094<0162:8860:" #(#fn(assq)
+ #fn(":000n0D\x8c48420AF84>3_484<\x8e19261:" #(#fn("8000n10H3400:0<H3700<@90A<0<F5292<0=51P:" #())))
+ caddr macrocall? quote λ define let-syntax) expand-in)) expand)
+ expand-define #fn("?000n10T70051B3:070051@L00TR3;07150e1@=07223740515285R3<0258586<e3:2585<2627e185=e128865185<54e3:" #(cddr
+ void error "compile error: invalid syntax " print-to-string set! #fn(nconc)
+ λ #fn(copy-list)) expand-define)
+ extend-env #fn("8000n370182E530P:" #(vars-to-env) extend-env)
+ filter #fn("9000n2D200>1?648601qe163:" #(#fn("8000n382D1B3Q04A1<513?0821<qPN=?2@30D41=?1@\x0e/4=:" #() filter-)) filter)
fits-i8 #fn("7000n10Y;3F04700r\xb052;3:04710r\xaf62:" #(>= <=) fits-i8)
foldl #fn("9000n382J401:700082<15282=63:" #(foldl) foldl) foldr
- #fn(":000n382J401:082<700182=5362:" #(foldr) foldr) for-each #fn("<000|2\x8c1208210>3D61:" #(#fn("9000n1\x8c00200>1_4AJM0DF<B3C0492F<<514FF<=_@\x1b/@<00<92F<AP524D:" #(#fn("9000n21<B3J002021152f24A<0202215262:D:" #(#fn(map)
- #.car #.cdr) for-each-n)))) for-each)
+ #fn(":000n382J401:082<700182=5362:" #(foldr) foldr) for-each #fn(">000|2D\x8c7872087>1_482JI0D1B3@0401<5141=?1@\x1f/@<087<0182P524D:" #(#fn("9000n21<B3J002021152f24A<0202215262:D:" #(#fn(map)
+ #.car #.cdr) for-each-n)) for-each)
get-defined-vars #fn("7000n170A<05161:" #(delete-duplicates) #(#0=(#fn("8000n10H340q:0<20Q;36040=B3d00TR;37040Te1;IS040TB;3E0471051R;3:0471051e1;I404q:0<22C?02324A<0=52\x7f2:q:" #(define
caadr begin #fn(nconc) #fn(map)) #(#0#)))))
hex5 #fn("8000n170210r@52r52263:" #(string-lpad #fn(number->string)
@@ -290,23 +263,23 @@
identity #fn("5000n10:" #() identity) in-env?
#fn("7000n21B;3F042001<52;I:047101=62:" #(#fn(assq) in-env?) in-env?)
index-of #fn("9000n31J40O:01<C5082:7001=82KM63:" #(index-of) index-of)
- io-readall #fn("6000n1200>1215061:" #(#fn("7000n1200A52421A>12205161:" #(#fn(io-copy)
- #fn("6000n1020d;380421A513702260:0:" #("" #fn(io-eof?)
- #fn(eof-object)))
- #fn(iostream->string))) #fn(buffer)) io-readall)
+ inlineable? #fn("9000n10<85B;3u047085<51;3i047185T51;3]04722385T52;3O047485T2552S;3@047685T270=5162:" #(is-lambda?
+ list? every #.symbol? length> 255 length= #fn(length)) inlineable?)
+ io-readall #fn("8000n12050218505242285518623d;3804240513702560:86:" #(#fn(buffer)
+ #fn(io-copy) #fn(iostream->string) "" #fn(io-eof?)
+ #fn(eof-object)) io-readall)
io-readline #fn("7000n12002162:" #(#fn(io-readuntil) #\newline) io-readline)
io-readlines #fn("7000n17071062:" #(read-all-of io-readline) io-readlines)
iota #fn("7000n17071062:" #(map-int identity) iota) is-lambda?
- #fn("6000n1020Q;I704020Q:" #(λ) is-lambda?) keyword->symbol #fn("8000n1200513@02122230515161:0:" #(#fn(keyword?)
- #fn(symbol) #fn(":000n1200E71220515163:" #(#fn(string-sub) 1- #fn(string-length)))
- #fn(string)) keyword->symbol)
+ #fn("6000n1020Q;I704020Q:" #(λ) is-lambda?) keyword->symbol #fn("<000n1200513O021220512386E742586515153\x8e161:0:" #(#fn(keyword?)
+ #fn(symbol) #fn(string) #fn(string-sub) 1- #fn(string-length)) keyword->symbol)
keyword-arg? #fn("6000n10B;3904200<61:" #(#fn(keyword?)) keyword-arg?)
- lambda-vars #fn("6000n1200>1D61:" #(#fn("9000n1\x8c00200>1_40<AAOO544212273A5162:" #(#fn(":000n40V;I5040R340D:0B;36040<R3T082;I504833<0702112263:A<0=1828364:0B;36040<B3\x890730<r252;390474051R360O@=070250<2615442774051513=0A<0=182D64:833<0702112863:A<0=1D8364:0B3>070290<26164:01C:07021162:7029026164:" #(error
+ lambda-vars #fn(":000n1D\x8c5852085>1_485<00OO54421227305162:" #(#fn(":000n40V;I5040R340D:0B;36040<R3T082;I504833<0702112263:A<0=1828364:0B;36040<B3\x890730<r252;390474051R360O@=070250<2615442774051513=0A<0=182D64:833<0702112863:A<0=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)
- #fn(map) #fn("6000n10B390700<61:0:" #(keyword->symbol)) to-proper))) lambda-vars)
+ #fn(map) #fn("6000n10B390700<61:0:" #(keyword->symbol)) to-proper) lambda-vars)
lambda:body #fn("6000n170061:" #(caddr) lambda:body) lambda:vars
#fn("6000n1700T61:" #(lambda-vars) lambda:vars) last-pair #fn("6000n10=H3400:700=61:" #(last-pair) last-pair)
lastcdr #fn("6000n10H3400:70051=:" #(last-pair) lastcdr) length=
@@ -317,45 +290,41 @@
list-ref #fn("7000n2700152<:" #(list-tail) list-ref) list-tail
#fn("8000n2701E523400:710=1K\x8062:" #(<= list-tail) list-tail)
list? #fn("6000n10V;I@040B;3904700=61:" #(list?) list?) load
- #fn("8000n1200>1210225261:" #(#fn("8000n1200>1210A>2}:" #(#fn("8000n020A>1D51DDD63:" #(#fn("8000n1\x8c0020A0>2_40<:" #(#fn("9000n320A51IB0F<21A5107215163:23A51472161:" #(#fn(io-eof?)
- #fn(read) load-process #fn(io-close)))))))
- #fn("8000n120A5142122F0e361:" #(#fn(io-close)
- #fn(raise) load-error))))
- #fn(file) :read) load)
+ #fn("9000n120021522285>123850>2}:" #(#fn(file) :read #fn("9000n0D\x8c48420A84>2_484<\x8e1DDD63:" #(#fn("9000n320A51IB0F<21A5107215163:23A51472161:" #(#fn(io-eof?)
+ #fn(read) load-process #fn(io-close)))))
+ #fn("8000n120A5142122F0e361:" #(#fn(io-close)
+ #fn(raise) load-error))) load)
load-process #fn("6000n170061:" #(eval) load-process) lookup-sym
- #fn("8000n31J5020:218201>31<61:" #(global #fn("8000n120AF92>321F05261:" #(#fn("9000n10360A0P:70F92=AKM63:" #(lookup-sym))
- #fn(assq)))) lookup-sym)
- lower-define #fn("6000n1200>1D61:" #(#fn(":000n120?04AH;I80471A51340A:A<22C<07374A5161:75A<513J02627e1ATe10A51e178A5164:2973A62:" #(#fn("8000n12071051B3N072051B3=02371051P@7074051@60755061:" #(#fn("8000n120710517205162:" #(#fn("8000n20J401:2001e32122052P:" #(λ
- #fn(map) #fn("5000n17060:" #(void)))) get-defined-vars lower-define)) cddr
- cdddr begin caddr void) λ-body) quoted? define lower-define expand-define
- is-lambda? #fn(nconc) λ lastcdr #fn(map)))) lower-define)
+ #fn(";000n31J5020:1<2108752883808288P:7201=82KM63:" #(global #fn(assq)
+ lookup-sym) lookup-sym)
+ lower-define #fn(";000n1D20?540H;I804710513400:0<22C<0737405161:750<513K02627e10Te185051e17805164:2973062:" #(#fn("=000n170051B3N071051B3=02270051P@7073051@60745075855176855186J5087:278687e328298652P:" #(cddr
+ cdddr begin caddr void get-defined-vars lower-define λ #fn(map)
+ #fn("5000n17060:" #(void))) λ-body) quoted? define lower-define expand-define
+ is-lambda? #fn(nconc) λ lastcdr #fn(map)) lower-define)
macrocall? #fn("6000n10<R;3904700<61:" #(symbol-syntax) macrocall?)
- macroexpand-1 #fn("7000n10H3400:200>17105161:" #(#fn("6000n103800A=\x7f2:A:" #())
- macrocall?) macroexpand-1)
- make-code-emitter #fn("8000n0q2050Eqo4:" #(#fn(table)) make-code-emitter)
+ macroexpand-1 #fn("7000n10H3400:7005185390850=\x7f2:0:" #(macrocall?) macroexpand-1)
+ make-code-emitter #fn("9000n0q2050EqEo5:" #(#fn(table)) make-code-emitter)
make-label #fn("5000n12060:" #(#fn(gensym)) make-label)
- make-perfect-hash-table #fn("6000n1200>1D61:" #(#fn("7000n1\x8c0020_4210A>2D5122A5161:" #(#fn("8000n270712205151162:" #(mod0
- abs #fn(hash)) $hash-keyword) #fn("9000n1\x8c00200AF>3_40<:" #(#fn("9000n120A0F92>421r20i2O5261:" #(#fn("9000n1200AF92>4D519361:" #(#fn(";000n1\x8c0020AF92093>5_40<:" #(#fn(";000n10B3G020AF9209394>67105161:A:" #(#fn(";000n120AF9209394>6r295<09252i261:" #(#fn("8000n1A0G3;0F<92KM61:A093p4A0KM709451p495<94=61:" #(cdar))))
- caar)))))) #fn(vector-alloc))))) #fn(length)))) make-perfect-hash-table)
- make-system-image #fn(":000n120210222324542562:" #(#fn("7000n22001>2717262:" #(#fn("8000n2Dw04Dw1422AF>22301>261:" #(*print-pretty*
- *print-readably* #fn("7000n120AF>2210>1}0504:" #(#fn("9000n020A>17122F>1732450515251425A61:" #(#fn("<000n1202122230222405253f2A52425A7662:" #(#fn(write)
- #fn(nconc) #fn(map) #.list #fn(top-level-value)
- #fn(io-write) *linefeed*)) filter #fn("8000n10Z;3u0420051S;3j0421051[S;IC0422051222105151dS;3I04230A52S;3=04242105151S:" #(#fn(constant?)
+ make-perfect-hash-table #fn(";000n1D\x8c58520_4D\x8c6862185860>3_486<\x8e12205161:" #(#fn("8000n270712205151162:" #(mod0
+ abs #fn(hash)) $hash-keyword) #fn("=000n120r20i2O52D\x8c68621A085F86>5_486<\x8e19261:" #(#fn(vector-alloc)
+ #fn(":000n10B3p070051r2A<85F52i29286G3;093<FKM61:928685p49286KM71051p494<0=61:92:" #(caar
+ cdar)))) #fn(length)) make-perfect-hash-table)
+ make-system-image #fn("<000n120021222354247576Dw54Dw64278788>2288685>22989>1}89504:" #(#fn(file)
+ :write :create :truncate (*linefeed* *directory-separator* *argv* that
+ *print-pretty* *print-width*
+ *print-readably* *print-level*
+ *print-length* *os-name*) *print-pretty*
+ *print-readably* #fn("5000n0Aw04Fw1:" #(*print-pretty* *print-readably*))
+ #fn("=000n07021A>1722350515224252627842628845253f2F52429F7:52\x8e142;F61:" #(filter
+ #fn("8000n10Z;3u0420051S;3j0421051[S;IC0422051222105151dS;3I04230A52S;3=04242105151S:" #(#fn(constant?)
#fn(top-level-value) #fn(string) #fn(memq)
#fn(iostream?))) simple-sort #fn(environment)
- #fn(io-close))) #fn("6000n1A50420061:" #(#fn(raise)))))
- #fn("5000n0Aw04Fw1:" #(*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)
+ #fn(write) #fn(nconc) #fn(map) #.list #fn(top-level-value)
+ #fn(io-write) *linefeed* #fn(io-close)))
+ #fn("6000n1A50420061:" #(#fn(raise)))) make-system-image)
map! #fn("8000n21D1B3B04101<51_41=?1@\x1d/4:" #() map!) map-int
- #fn("7000n2701E52340q:2110>20E51qPq62:" #(<= #fn("9000n2\x8c110_4KAK\x80201F>2~40:" #(#fn("7000n1A<F051qPN4AA<=_:" #())))) map-int)
+ #fn(";000n2701E52340q:0E51qPq\x8c78786_4K1K\x8021870>2~486:" #(<=
+ #fn("7000n1A<F051qPN4AA<=_:" #())) map-int)
mark-label #fn("8000n270021163:" #(emit label) mark-label) max
#fn(";000|11J400:70210163:" #(foldl #fn("6000n201L3401:0:" #())) max)
member #fn("7000n21H340O:1<0d3401:7001=62:" #(member) member) memv
@@ -370,31 +339,31 @@
#fn(io-write) *linefeed*) newline)
nreconc #fn("7000n2701062:" #(reverse!-) nreconc) odd?
#fn("6000n170051S:" #(even?) odd?) positive? #fn("7000n1700E62:" #(>) positive?)
- princ #fn("8000|0200>17161:" #(#fn("7000n1Ow0421A>1220>161:" #(*print-readably*
- #fn("7000n120A>1210>1}0504:" #(#fn("7000n07021A62:" #(for-each #fn(write)))
- #fn("6000n1A50420061:" #(#fn(raise)))))
- #fn("5000n0Aw0:" #(*print-readably*)))) *print-readably*) princ)
+ princ #fn(";000|070Ow042185>1220>12386>1}86504:" #(*print-readably*
+ #fn("5000n0Aw0:" #(*print-readably*))
+ #fn("7000n07021A62:" #(for-each
+ #fn(write))) #fn("6000n1A50420061:" #(#fn(raise)))) princ)
print #fn("9000|07021062:" #(for-each #fn(write)) print)
- print-exception #fn("<000n10B;3D040<20Q;3:04710r3523I072230T24534757605151@\x0600B;3D040<27Q;3:04710r3523I072287605129534750T51@\xd400B;3D040<2:Q;3:04710r2523?0722;0T2<53@\xac00B;38040<2=Q3B0722>514720=f2@\x8d00B;38040<2?Q3G07@76051514722A0T52@i07B051;3:04710r2523I0750<514722C5142D0T51@>0722E514750514727F61:" #(type-error
+ print-exception #fn("=000n10B;3D040<20Q;3:04710r3523I072230T24534757605151@ 00B;3D040<27Q;3:04710r3523I072287605129534750T51@\xee00B;3D040<2:Q;3:04710r2523?0722;0T2<53@\xc600B;38040<2=Q3B0722>514720=f2@\xa700B;38040<2?Q3G07@76051514722A0T52@\x8307B051;3:04710r2523c0750<514722C5140T2D8551;I60485R37072@40758551\x8e1@>0722E514750514727F61:" #(type-error
length= princ "type error: expected " ", got " print caddr bounds-error "index "
" out of bounds for " unbound-error "eval: variable " " has no value" error
- "error: " load-error print-exception "in file " list? ": " #fn("7000n120051;I5040R37071@4072061:" #(#fn(string?)
- princ print)) "*** Unhandled exception: " *linefeed*) print-exception)
- print-stack-trace #fn("7000n1200>1DD62:" #(#fn("=000n2\x8c0\x8c10200>1_41210>1_4221>17374Ar3523F075A76370r5@40r452@30A517778292:2;505252E63:" #(#fn("8000n32001A>32105182P61:" #(#fn("8000n120A5120F51C>02122230e361:2492F0>325A5161:" #(#fn(function:code)
- #fn(raise) thrown-value ffound #fn(";000n1E702105151220AF92>4~:" #(1- #fn(length)
- #fn("8000n170A0G513>0F<A0G929363:D:" #(closure?))))
- #fn(function:vals))) #fn(function:name)) find-in-f)
- #fn("9000n22021A01>322}61:" #(#fn(":000n103H0207122237405152255261:26:" #(#fn(symbol)
- string-join #fn(map) #fn(string) reverse! "/" λ))
- #fn("8000n07021AF>292524O:" #(for-each #fn("8000n1A<0Fq63:" #())))
- #fn("6000n10B;3B040<20Q;38040T21Q38072061:23061:" #(thrown-value
- ffound caddr #fn(raise)))) fn-name) #fn("9000n3\x8c27021A182>3062:" #(for-each
- #fn("8000n170A<0KGF5271051==P5147250492<El3?0730KG0EG52@30O49292<KM_:" #(print
- vector->list newline disassemble)))) reverse! length> list-tail *interactive*
- filter closure? #fn(map) #fn("6000n10Z;380420061:" #(#fn(top-level-value)))
- #fn(environment)))) print-stack-trace)
- print-to-string #fn("6000n1200>1215061:" #(#fn("7000n120A052421061:" #(#fn(write)
- #fn(iostream->string))) #fn(buffer)) print-to-string)
+ "error: " load-error print-exception "in file " list? ": " #fn(string?)
+ "*** Unhandled exception: " *linefeed*) print-exception)
+ print-stack-trace #fn("@000n1DD\x8c5\x8c6852085>1_4862185>1_472730r3523F074075370r5@40r452@30051767728292:505252E\x8c97;2<868889>38762:" #(#fn("=000n32005182P2105121151C?022232487e361:25051E76278851512888A187>4~:" #(#fn(function:name)
+ #fn(function:code) #fn(raise) thrown-value ffound #fn(function:vals) 1- #fn(length)
+ #fn("8000n170A0G513>0F<A0G929363:D:" #(closure?))) find-in-f)
+ #fn(";000n220A01>321}863I02273242576865152275261:28:" #(#fn("8000n07021AF>292524O:" #(for-each
+ #fn("8000n1A<0Fq63:" #()))) #fn("6000n10B;3B040<20Q;38040T21Q38072061:23061:" #(thrown-value
+ ffound caddr #fn(raise))) #fn(symbol) string-join #fn(map)
+ #fn(string) reverse!
+ "/" λ) fn-name)
+ reverse! length> list-tail *interactive* filter closure? #fn(map)
+ #fn("6000n10Z;380420061:" #(#fn(top-level-value)))
+ #fn(environment) for-each #fn("8000n170A<0KGF5271051==P5147250492<El3?0730KG0EG52@30O49292<KM_:" #(print
+ vector->list newline disassemble))) print-stack-trace)
+ print-to-string #fn("8000n1205021085524228561:" #(#fn(buffer)
+ #fn(write)
+ #fn(iostream->string)) print-to-string)
printable? #fn("6000n120051;I80421051S:" #(#fn(iostream?)
#fn(eof-object?)) printable?)
quote-value #fn("6000n1700513400:210e2:" #(self-evaluating? quote) quote-value)
@@ -402,19 +371,18 @@
#fn("7000n1200513<0712250062:23500i2:" #(#fn(integer?) mod #fn(rand)
#fn(rand-double)) random)
read-all #fn("7000n17021062:" #(read-all-of #fn(read)) read-all)
- read-all-of #fn("8000n22010>2D51q015162:" #(#fn("9000n1\x8c0020A0F>3_40<:" #(#fn("8000n220A5138071061:F<10P92A5162:" #(#fn(io-eof?)
- reverse!))))) read-all-of)
+ read-all-of #fn(":000n2D\x8c686201860>3_486<\x8e1q015162:" #(#fn("8000n220A5138071061:F<10P92A5162:" #(#fn(io-eof?)
+ reverse!))) read-all-of)
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("7000n020DD62:" #(#fn("8000n2\x8c0\x8c1020_412101>2_41<5047260:" #(#fn("7000n070215142273514242526}61:" #(princ
- "> " #fn(io-flush) *output-stream* #fn("7000n1207151S;3<04227305161:" #(#fn(io-eof?)
- *input-stream* #fn("6000n17005140w14D:" #(print that)) load-process))
- #fn("5000n02060:" #(#fn(read))) #fn("6000n1207151422061:" #(#fn(io-discardbuffer)
- *input-stream* #fn(raise)))) prompt)
+ repl #fn(":000n0DD\x8c4\x8c58420_485218485>2_485<5047260:" #(#fn("8000n0702151422735142425}267751S;3F04788451798551485w:4D:" #(princ
+ "> " #fn(io-flush) *output-stream* #fn("5000n02060:" #(#fn(read)))
+ #fn("6000n1207151422061:" #(#fn(io-discardbuffer) *input-stream* #fn(raise)))
+ #fn(io-eof?) *input-stream* load-process print that) prompt)
#fn("6000n020A>121}3<072504F<60:O:" #(#fn("6000n0A<50;37047060:" #(newline))
#fn("6000n1700514D:" #(top-level-exception-handler))
- newline) reploop) newline))) repl)
+ newline) reploop) newline) repl)
revappend #fn("7000n2701062:" #(reverse-) revappend) reverse
#fn("7000n170q062:" #(reverse-) reverse) reverse! #fn("7000n170q062:" #(reverse!-) reverse!)
reverse!- #fn("8000n2D1B3B041=101?04N4?1@\x1d/40:" #() reverse!-)
@@ -421,41 +389,40 @@
reverse- #fn("7000n21J400:701<0P1=62:" #(reverse-) reverse-)
self-evaluating? #fn("7000n10H;36040RS;IK0420051;3A040R;3:04021051Q:" #(#fn(constant?)
#fn(top-level-value)) self-evaluating?)
- separate #fn("7000n22001>2D61:" #(#fn("9000n120?040AFqe1qe164:" #(#fn(":000n4208283PD1B3Z0401<513?0821<qPN=?2@<0831<qPN=?341=?1@\x05/461:" #(#fn("7000n1700<=0==62:" #(values))) separate-)))) separate)
+ separate #fn(":000n2D20?648601qe1qe164:" #(#fn("9000n48283PD1B3Z0401<513?0821<qPN=?2@<0831<qPN=?341=?1@\x05/47088<=88==62:" #(values) separate-)) separate)
set-syntax! #fn("8000n220710163:" #(#fn(put!)
*syntax-environment*) set-syntax!)
- simple-sort #fn("6000n10V;I6040=V3400:200>10<61:" #(#fn("8000n170210A>2220>162:" #(call-with-values
+ simple-sort #fn("9000n10V;I6040=V3400:0<7021850>22285>162:" #(call-with-values
#fn("7000n07021A>1F=62:" #(separate #fn("6000n10AL:" #())))
- #fn("9000n22071051Ae17115163:" #(#fn(nconc) simple-sort))))) simple-sort)
+ #fn("9000n22071051Ae17115163:" #(#fn(nconc) simple-sort))) simple-sort)
splice-form? #fn("7000n10B;3X040<20Q;IN040<21Q;ID040<22Q;3:04730r252;I704022Q:" #(unquote-splicing
unquote-nsplicing unquote length>) splice-form?)
- string-join #fn("7000n20J5020:2101>2225061:" #("" #fn("8000n1200A<52471220F>2A=52423061:" #(#fn(io-write)
- for-each #fn("7000n120AF52420A062:" #(#fn(io-write)))
- #fn(iostream->string))) #fn(buffer)) string-join)
+ string-join #fn("9000n20J5020:215022860<5247324861>20=524258661:" #(""
+ #fn(buffer) #fn(io-write) for-each #fn("7000n120AF52420A062:" #(#fn(io-write)))
+ #fn(iostream->string)) string-join)
string-lpad #fn(":000n3207182122051\x8052062:" #(#fn(string)
string-rep #fn(string-length)) string-lpad)
- string-map #fn("8000n22001>221502215162:" #(#fn("9000n22010AF>4E51421061:" #(#fn(":000n1D0AL3N0420F9221930525152472051?0@\x10/:" #(#fn(io-putc)
- #fn(string-char) 1+)) #fn(iostream->string)))
- #fn(buffer)
- #fn(string-length)) string-map)
+ string-map #fn("=000n2205021151ED8887L3O0422860231885251524748851?8@\x0d/\x8e14258661:" #(#fn(buffer)
+ #fn(string-length) #fn(io-putc) #fn(string-char) 1+ #fn(iostream->string)) string-map)
string-rep #fn(":000n21r4L3`0701E5235021:1Kl38022061:1r2l390220062:2200063:731513@02207401K\x805262:742200521r2j262:" #(<=
"" #fn(string) odd? string-rep) string-rep)
string-rpad #fn(";000n32007182122051\x805262:" #(#fn(string)
string-rep #fn(string-length)) string-rpad)
string-tail #fn("7000n2200162:" #(#fn(string-sub)) string-tail)
- string-trim #fn("8000n3200182>3DD62:" #(#fn(":000n2\x8c0\x8c10200>1_41211>1_422A0F192>523A5161:" #(#fn("9000n48283L;3?042012108252523A0A<017282518364:82:" #(#fn(string-find)
+ string-trim #fn(">000n3DD\x8c7\x8c8872087>1_4882188>1_42205123087<01E895488<082895363:" #(#fn("9000n48283L;3?042012108252523A0A<017282518364:82:" #(#fn(string-find)
#fn(string-char) 1+) trim-start) #fn(":000n37082E52;3C0421122073825152523?0A<0173825163:82:" #(>
#fn(string-find) #fn(string-char) 1-) trim-end)
- #fn(";000n120AF<A92E05493<A9405363:" #(#fn(string-sub)))
- #fn(string-length)))) string-trim)
+ #fn(string-length) #fn(string-sub)) string-trim)
symbol-syntax #fn("8000n120710O63:" #(#fn(get)
*syntax-environment*) symbol-syntax)
- table-clone #fn("6000n1200>1215061:" #(#fn("8000n120210>1qA5340:" #(#fn(table-foldl)
- #fn("8000n320A0163:" #(#fn(put!))))) #fn(table)) table-clone)
+ table-clone #fn("9000n12050212285>1q053485:" #(#fn(table)
+ #fn(table-foldl)
+ #fn("8000n320A0163:" #(#fn(put!)))) table-clone)
table-foreach #fn("8000n220210>1q163:" #(#fn(table-foldl)
#fn("7000n3A01524D:" #())) table-foreach)
- table-invert #fn("6000n1200>1215061:" #(#fn("8000n120210>1qA5340:" #(#fn(table-foldl)
- #fn("8000n320A1063:" #(#fn(put!))))) #fn(table)) table-invert)
+ table-invert #fn("9000n12050212285>1q053485:" #(#fn(table)
+ #fn(table-foldl)
+ #fn("8000n320A1063:" #(#fn(put!)))) table-invert)
table-keys #fn("8000n12021q063:" #(#fn(table-foldl)
#fn("6000n3082P:" #())) table-keys)
table-pairs #fn("8000n12021q063:" #(#fn(table-foldl)
@@ -463,23 +430,26 @@
table-values #fn("8000n12021q063:" #(#fn(table-foldl)
#fn("6000n3182P:" #())) table-values)
to-proper #fn("7000n10J400:0H3600e1:0<700=51P:" #(to-proper) to-proper)
- top-level-exception-handler #fn("6000n1200>17161:" #(#fn("7000n170w1422A>1230>161:" #(*stderr*
- *output-stream* #fn("7000n120A>1210>1}0504:" #(#fn("6000n070A51471225061:" #(print-exception
- print-stack-trace #fn(stacktrace))) #fn("6000n1A50420061:" #(#fn(raise)))))
- #fn("5000n0Aw0:" #(*output-stream*)))) *output-stream*) top-level-exception-handler)
- trace #fn("7000n1200>12105151422:" #(#fn("7000n1200A>2215061:" #(#fn("?000n170A51Ia021F7223024252627Fe20e3e228e12927Ae20e3e4e35162:D:" #(traced?
- #fn(set-top-level-value!) eval λ begin write cons quote newline apply))
- #fn(gensym))) #fn(top-level-value) ok) trace)
+ top-level-exception-handler #fn("9000n17071w042285>1230>12486>1}86504:" #(*output-stream*
+ *stderr* #fn("5000n0Aw0:" #(*output-stream*))
+ #fn("6000n070A51471225061:" #(print-exception print-stack-trace #fn(stacktrace)))
+ #fn("6000n1A50420061:" #(#fn(raise)))) top-level-exception-handler)
+ trace #fn("A000n1200512150728551Ig0230742586262728290e286e3e22:e12;2985e286e3e4e35152@30D\x8e1\x8e142<:" #(#fn(top-level-value)
+ #fn(gensym) traced? #fn(set-top-level-value!) eval λ begin write cons quote
+ newline apply ok) trace)
traced? #fn("7000n170051;3?042105121A<51d:" #(closure? #fn(function:code)) #((#fn("9000|020210P51472504230\x7f2:" #(#fn(write)
x newline #.apply)))))
- untrace #fn("7000n1200>12105161:" #(#fn("8000n1700513@021A22051r2G62:D:" #(traced?
- #fn(set-top-level-value!) #fn(function:vals)))
- #fn(top-level-value)) untrace)
- values #fn("8000|00B;36040=V3500<:A0P:" #() #(#1#)) vector->list
- #fn("7000n1200>121051q62:" #(#fn(":000n2\x8c1K0201A0>3~41<:" #(#fn("8000n1AF920\x80GA<P_:" #())))
- #fn(length)) vector->list)
- vector-map #fn("7000n22001>22115161:" #(#fn("8000n1200AF>32105161:" #(#fn(":000n1EAK\x80200F92>3~40:" #(#fn("9000n1A0F920G51p:" #())))
- #fn(vector-alloc))) #fn(length)) vector-map)
+ untrace #fn("9000n1200517185513A0220238551r2G62:D:" #(#fn(top-level-value)
+ traced? #fn(set-top-level-value!)
+ #fn(function:vals)) untrace)
+ values #fn("8000|00B;36040=V3500<:A0P:" #() #(#1#)) vars-to-env
+ #fn(":000n32021182>2072230515163:" #(#fn(map)
+ #fn("9000n2700210A52SS1FM63:" #(vinfo
+ #fn(memq))) iota #fn(length)) vars-to-env)
+ vector->list #fn("<000n120051q\x8c6K852186085>3~486<:" #(#fn(length)
+ #fn("8000n1AF920\x80GA<P_:" #())) vector->list)
+ vector-map #fn("<000n220151218651E86K\x80228701>3~487:" #(#fn(length)
+ #fn(vector-alloc) #fn("9000n1A0F920G51p:" #())) vector-map)
vinfo #fn("7000n30182e3:" #() vinfo) vinfo:heap? #.cadr vinfo:index
#2# vinfo:sym #.car void
#fn("5000n0D:" #() void) zero? #fn("6000n10El:" #() zero?))
--- a/flisp.c
+++ b/flisp.c
@@ -987,6 +987,7 @@
GOTO_OP_OFFSET(OP_KEYARGS),
GOTO_OP_OFFSET(OP_BOX),
GOTO_OP_OFFSET(OP_BOXL),
+ GOTO_OP_OFFSET(OP_SHIFT),
};
NEXT_OP;
#else
@@ -1136,6 +1137,12 @@
car_(v) = FL(stack)[bp+i];
cdr_(v) = FL(Nil);
FL(stack)[bp+i] = v;
+ NEXT_OP;
+
+ OP(OP_SHIFT)
+ i = *ip++;
+ FL(stack)[FL(sp)-1-i] = FL(stack)[FL(sp)-1];
+ FL(sp) -= i;
NEXT_OP;
OP(OP_RET)
--- a/gen.lsp
+++ b/gen.lsp
@@ -94,6 +94,7 @@
OP_KEYARGS keyargs #f 0
OP_BOX box #f 0
OP_BOXL box.l #f 0
+ OP_SHIFT shift #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
--- a/maxstack.inc
+++ b/maxstack.inc
@@ -38,7 +38,7 @@
ip++;
break;
- case OP_TCALL: case OP_CALL: case OP_CLOSURE:
+ case OP_TCALL: case OP_CALL: case OP_CLOSURE: case OP_SHIFT:
n = *ip++; // nargs
sp -= n;
break;
--- a/opcodes.h
+++ b/opcodes.h
@@ -93,6 +93,7 @@
OP_KEYARGS,
OP_BOX,
OP_BOXL,
+ OP_SHIFT,
OP_BOOL_CONST_F,
OP_BOOL_CONST_T,
OP_THE_EMPTY_LIST,