shithub: femtolisp

Download patch

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
 };