From 2007ba838cb50415682f88d131d84645b61016cb Mon Sep 17 00:00:00 2001 From: Jeremy Penner Date: Sat, 4 Nov 2023 23:39:30 -0400 Subject: [PATCH] refactor iterators to be pointers to a two-cell structure --- dialer.com | Bin 36798 -> 37054 bytes dialtest.com | Bin 23601 -> 24022 bytes iter.jrt | 156 ++++++++++++++++++++++++++++++++++----------------- swine.com | Bin 9532 -> 9657 bytes zipmin.com | Bin 15910 -> 15929 bytes zipoff.com | Bin 20533 -> 20954 bytes zipoff.jrt | 3 +- zipstub.seg | Bin 4615 -> 4732 bytes 8 files changed, 107 insertions(+), 52 deletions(-) diff --git a/dialer.com b/dialer.com index 65bac3709697d0351ae9d84794af0926799b29be..de3c123800dadfd20e117064aea9408911567635 100755 GIT binary patch delta 10141 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 delta 9818 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 L2;yzCZ9V)qzEwr2 diff --git a/dialtest.com b/dialtest.com index 81a83521a99f858357a5a70c3b79b480feaaf5f9..3721f9d5f2276cdd9ccd8a6b62e024c14a3fa474 100755 GIT binary patch delta 8777 zcmY*e34B!5)qn5JyxEe;I++9#K%yv$!xAIHBpI?VBqT%DNkU>LGjEbHvtL#BH?b2etmRxS`b+wQiq#D_`aNpZnef`{T#tp5>l%?z!il zd+vFU?B`#5f?x8{(tK;}SLc7#x1*zUAlz@R{A>H)hH_jFb*$(}4sPst&h_=s*F%pi zxmgrm8%{nYN`mvuy-Rf$XYxmqcjX277x(7o?-BBxXFg)pbDnU}?e#{vCH#Tw_x`D1 zEiXJfyf>pTS2UfK_xgf6%#GL#hqi}Ck$wj>Oe)G@Gdv`C`TyXx&L$?m!wCR!I z9m9|JR}UQ=mIuRw>o?YR_=ley+A{pjrh~(^3k=+ujWwNhHEnGWZ{cA@?|BP#viAZ5 zH!6iZ;XpXV?cpuL2*0f`#SgDGak02N8c!3Z?Q64Be63x>#qC=e<9%Sm@tS+gD-IaR8s$!5&wEC)e`)Sr~s= zp5ni^>v?-99C8OGU`nkwCv)wk`~}H!`>M5L6(a8r1j01$2I$PM(DHV7EC_J_`6>Q& zC^#2mT2F6g3R0&rvUHhYEsW;+qCPQGhz%HMAn`TCBAu1mmCYW;n-MOc`$SDYhH zRS4XwW!yx$EUaJ4b2f~w5+*Bwq~R}wD=T>J9E@%kQWt2s6~V9<99H`K8-JLxR-1q$O!Z(G+3XyB9Y3owpw}rbZ^jv2{cXy{r zWqC*VH2G=8LisYtt%8IT!oyHpiIGl|SH*Jl6+l;)7CsHX5rnncPj)trQa zGFti$&99SpR9fV{pp8@m@qlJO3`wx@?=%Ohv|P2%O{P4fd7(-Kj{+UhbV0{r;NRAK zLUU>Of#!SgFIG6d)My>xSD_y?L8x3tTp8N4;6RTQ2mmP3o)0e1azNzVVr_}Tz(pmm z7l)H0RaIFFp)2V2hrqQ$TbtZdRopP)m=>oUZ>@RA zk>cZa12-A<$0aGW8F6t)m~b2yuM{pbx{OE9BSvNX;CU(j6-bh%{BcOSK>K9U?3gDz zVO5zo8jb)rtj%^{6DW{;+O_L6SQL#nYdhJPT)tg9%*N#O8??WIYc9p;UhUyZ0~eR3 z;s`BT&BNMl>r4z0agR!V+U)<dl)C79zyJ>q&a3ip9@hPVhM&lWcUXNk^g4Q&#}=ZJrU#2}0d#od5y;#4&x zM#GaKPM#=VDei>rfzhaY3y9~5Ly)2ZtHnFP8Bo=&75`AJBSuAErT8KdRfX%sH!v@t zXsi`KtTu3gQz{$8$JXh%Er_7-B$PCZ4`b@&m_J@Y>u43@RT|DWO1^6scfs%xHXae5 z!_vuzG-<0?QKLX(fMjtz*-(9+?5Mu4WY-GIX^*VCuO!8vUSs4Cg#nxD`0Zj@wd%|; z#qRCmZpfhBo&t22_=F14${!K`Sff*DWXO}^UsP}lfiH{4YZOUS41QnSj6Dv?5EW34 z!B?WcCWmu&HaKnF4X*CG4rjm3)sL|LY0dJLmecmtkb!PTHdoit+1XIn&A6N$UEuf# zbXvf!6~tvZEyaI>g?OXxNgLS;^`g#Qt71H3?5vmRVzrr^%$UZaQbckSpHufUU>S1r z95SI>QDfjn!c(#MmH;{Y4qYa8ax4wrqdQouS3z3qUfoSt`sOtGMcq3fDf02Ggoyd);3t6Q<4bWy4YSKH1 zruuY9-$pbQlJsJ&z%8eXA*kP6hv8NkX01cKy@9ju7@f{WsMD7wE?DH~RkpHcG>N`n+`lm!RR3 z`hCE9Y52T;x^5YaphR;-|2`HBpTt=@`inlhp1Eiw9FK>CVE9}=kX%?-B#+hQsD815 zJLva%*^VqQEL0}UVR{Vzsxv4%2}Vd5HT2bFa4~6gG92|%E&)z9{H$K!Vw3^zGu%{< zq~nRg%Lzg}U}(Xv(?RfrBNX8OFvRO+Ba3hp9&wuggCSL~Bs+$o-OVzN)Mq1exV^U6 znBN!o1>B=_bQT&5Aa2s_kK4v25_gXA97iUHv5k=a&?s&EYNMsWKuAZ-!xE9xcy@!1 zAw2BZ4jAvQ*TGD8h#BcMeufQR5|Dgx%nlh{U|tgSkB$*IVe~a!x~i19H*NF*8>O>f?##*gc@TvRDY_8X7ZBeVHE<0R!Z z4lyG~*?kMtC&oWOQ8>cxjuXZsjRpq9q<{}plc@zx@dUy#TFd#SPaCmmk~AI<1FSK% zU=Mwsa3Vx5>ol2~3>+#7A4Lriy{36hBA14OrgNH*l|hE;8Wwh8)0!p-NSm_V6vr|f zIvO$eO4Ir#WRj7D&&Rg*YLi5=Mx{8pc*c}SPBbo*uZP4$Op2y!)7zS+#oe0QnvRR8 zmD98+-DrDwqK&P7xGBXSfMlAr83}X`->H8IxZAO?xH~q^&d`&lPhb~;BXokEF`ZDs zm>=NtCQ~!Y08nL5*hgM^(KN4F;rEc&kC?RBq7X8+jkth$#k8$a;HncC{>9XU9I}{( z@0m0>Bv_KogX0XuXQmGvW`-CG$5ib0=BzzeJ#+G`6WGXDB8Gh;*M4i-)0oA{*x5u- zVp?qODOTj>X58AGL0g_CfO~buInB7VXn9OeWya-ACZwMzl&BWgXB@3Fasl@#OmoH` zAxNDR^IuE>(3bH-GcpGR+591YoGj_c(A8vf1lj&WU{^+eQwEm^A!m=LmBcbyn==u+ z(q@KHjQK^z+U9)4TZs_1#rq@L-i*AKWTe?LINgHuL~7kpKMTdbXV@#Ve}uA;$FQ4g zHOZDwn#~+j8yNxsu;mA`;|ob}02nlPTZw)Q_z zd-yAwEy95o?fMjdMvIp7D;a(=bM<;71DHqPke_BsEqb;dg+tElS)ZAP(@d9VUW0sR zkKic5=>5rfi|w?!^&;nI7~IU6(t4B?2q6{mSmwpar&`XFUs>*a|(%Y*+vunk> zi`q)Y7msTOOPZIa7G1k4wdfYUs$}`fcNe7=?OH)J7ijM;dKoXZM@ffTEB`U`>Gd$w zmWJQT>~2+bstjLddRt9kATv}{foN_76H4`{iYYehTayLrtK~#1o-A}ePB*{VDsm2* z1;}oGwgvARB5X8&4ML?#7&Kqm%5#L5%s1j;bP+~D^YKxQ z$HpW&s-K$2H&As(2)d-dF?RuWF!z!7anvAJ2> z3dz80FgFyAkKxA0+(mL$FLKPPIbmmK6>Pv=0V*qOnzC-h&cyvei87>=brO+4XOy7J zv+THJmifX_vg($stsC$PV6UU+vKF^%X-u`%=UH#G=(q?Kh%{?n_6y((#i^V)EBixv z1MVsHCfbnwR->7_P)(N(ca&8wL)pKD$z{=WFh#RH?U~$#N~%mV-H?4%yFQJCjTqve)C6c}y+YTAMZ zOuLp>QENI<{A+8pGDq5&jFTr7rYowoyowwEQw!$MG8qpA2+jPq%?P)lB^7b|DSS$; zUklUd*HCO(1nM!R_?udhbGG=UfENsJt+5Dy&ORjkvg43o5guowQfq@ordXtz;~EOU zXR$nG{=Y0gWVtjJLEtXL$xG@jg2s7vL5iOiPdT6mK8}sKQPtTfA$*&?rCr07v24QS zoaWSVW$7ek$a$wt#I+K1)6JZd9Q+H))PPP-`mAjK7 zY-LVPhmL0pT8TST<8J$|OgCjXJPL;vI5VJYArx9fg@o-LyQ^S)HH2+UI_I6pz zN8GU(ga0?j)~@6645A}R3^}>qZP4Pj8mCLNB==lch*Rbr*%D{R!I>L$B6`)pj^;iL zdvQylO%SI(&&9bV8|M&I#$BIl+o<9E(Fu$n$SrI`ElFX#QVQ-lCNnl~u!kLCTJ6aA4edxaVDhd>L3mCC`Ae-wGc9i{kLp8qH)i(_u~ zifYck*dK|-6C=y1GC2s!M8YqTi?-&!p+Kzk-a&l z=h4miS9fY*7;AXkn=iJTlqw6AJ!`c5Ha`a|XOL~g&1#$9<=1wJ3JL<=&3_6@55{a# zG|G~q#p3A_fB>z?($j^sXteAj!0#pr+bqv^=@`HsYCA12t02m&iSoBB?~+2W#>1@X_nBo4_5o$^SU5}@ z#TArx$>;*Qqf!6dexFF3F7M#&deFobY9(b5jUT_|R%T)TBg1T-4=w)e! z%7UEk%u_OzR$q027qe7FkkVGLr5o>JPt+|3M*`A_pElT4(AAwyswVyMG21ETNWte_ zdd{102W(^H$Q=bo;N(a&JR(6U5O)_m2OAVbfF3)K7F>jV@+ATRZz2+q=q3Ja!LPcF z+!!8S$X)DcA1}D7TgR2t%Pc`+oz~2rOilrn698nlwYbNaMvl9Ri7oxHu%>fdBt z*^`BQ917v++vdbfTQ~KX(rBf#a+fvMgQP~!QyY7X{l;p+MlJXHM_F_93G0nLdTx1H z8h+k-Zx4DDc4&LsTHBLc*kzSJus+q3p|lp}ROJ_bwlPa7=M~%t>oR!@x0B86d@9fW zZH2FOQyUHyJ7n%E`~a@-`KRXkm$w%F4hlmQQpXC9Zba8M$P7DP_&qq$@rcVdRk` zL9~re6xH?WIM!t#%8{b)ddVQSSGDlrjyrPdjM6tcbyj$j-iG@?|Jbf)ZG4Iw5xF`Y=MM5-=uSp-5PGJsVqKOb- zjyu$5;vA<~_V7FT8~TomrPl5E-N~-+9epqsQ&=Me-*5V+#TKhYI4N^HiiAgq=M4Z+%GUFh$WLi%wym>q_B+zA4PO$0fL&!lbJNzcKKqFz*i6p}xPW za!RdKc+=W$VMhMMx)Yz66mz>_ZV<8r*BB)2V>0%+C@M;=G=n$^YIGSDXL%`k$v<}1 zv`9i`;Z6EP=Y@lrnfLciwaxF(Z=iJZ&u2-JmIj;Zz%)luwpg$2H|mF3k!6Pe&v9I@G5P&hv#odBa~Gfm_Mu{*cxzozcl{{ zZb@brdJ63MaBO}rv5cn!{5C=raY zK5uRDo5)9JtORdsadH5!MwDCZ6I*-ns{>dKB~HN5?Ax&e-yU_K8B$7n!`Y$N6Ct0ENOv&9)KnaB1 zvG13Bj$G{zMG|q(m<%Z=N**1^UlQo+TNoiIg%T_>C(1u6eW4dmuka}Q8dr73bAw1RG?{py zTTU%GiabR9VjJOsI<(~70VMxP=w1%_z?|FW9K`1Ze>5J&MWrGi?G?K+In=-ioj{uN zS35pR8$r$p_?Z{)-|^-k>L37YgUNF*?l5nnwl=;b;ObKy=eW9M6T+FyBMk8^yJq_) zbUPKxT-WaJ&E(kX!l87R^0I5An8cv;qPAaq@1`_gB<>Hh7VFMypV)+DNu&@c$o~0t zTsMlBFk?YGJ3yjC^V~Lvd-b~aH&IlDm0syr*M$c%aT2J< zHpj!y9Nr`{d#QfNp6MA04=82u;Thu)?z?a#5lQ>y*vu6xdCrAs8b(^p$91qJ z=^V_EFNBo{kuX(f+$=YY&LE)l^I9{THH>e3z<{iqJ#83q31Gw@CmYLVZNuolDG2rT zi`#Z~6)Z<}5QRC67p&E@j$vHMb8!9af+6Za_2FY0kl^T?-Gx;!FQ^#rY&rbm4*7$q l2AC|cy)oN8jAlaw{Yx_WhuLid0>=d0c|8@YQk2E${{uiIaQOfL delta 8312 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 ( c -- ) MOV BX @[ SS: r@ @] POP CX + SHL CX 1 # ADD BX CX MOV @[ SS: r @@ -75,6 +76,8 @@ nexttop :push >next : i 0 ipeek ; : j 1 ipeek ; :asm n- MOV DI @[ SS: nexttop @] @@ -95,6 +98,8 @@ nexttop :push >next NEXT :asm n->next ( args... n |n| -- |n| args... ) + MOV AX SS + MOV ES AX POP CX JCXZ 1 @> MOV DI @[ SS: nexttop @] @@ -109,26 +114,25 @@ nexttop :push >next 1 <: NEXT -( iterator words must have the following shape: ) -( -- xt-iter xt-cancel ) -( The xt-iter word must take care of updating the stacks directly. If +( iterators are pointers to an array containing two function pointers: + xt-iter xt-cancel + The xt-iter word must take care of updating the stacks directly. If there are no more values, it must remove the values from the i-stack, drop itself from the next-stack, and return 0. "finished" and "finish?" are useful words to help with this. The xt-cancel word should remove all of the iterator's state from the - iteration stacks and return nothing. "iterdrop" is a useful word to help - with this. If the iterator is itself making use of an iterator below it - on the stack, the xt-cancel word should call "cancel" to recursively clean - that up once it's done. + iteration stacks and return nothing. "n-nextdrop" and "iterdrop" are useful + words to help with this. If the iterator is itself making use of an + iterator below it on the stack, the xt-cancel word should call "cancel" to + recursively clean that up once it's done. Note that all "next" words _must_ be defined in the target Forth! This means that any iterator that dereferences near memory, such as "links", WILL NOT WORK on the host Forth! ) -: call-next ( -- xt-iter xt-cancel ) 0 nextpeek execute ; -: iterate call-next drop execute ; -: cancel call-next swap drop execute ; +: iterate 0 nextpeek @ execute ; +: cancel 0 nextpeek cell + @ execute ; : EACH_ r ; @@ -141,40 +145,67 @@ nexttop :push >next :timm each t, EACH_ patchpt >i ; : CONTINUE t, GOTO_ i cell - w>t ; :timm continue CONTINUE ; - :timm next CONTINUE i swap w>t w>t ; + :timm >iter next ; } -: >cancel :| ' finished :| nextdrop cancel |; |; >next ; -{ : break ' >cancel , ['] continue ; immediate +: finished ( -- 0 ) cancel 0 ; +: finish? ( f -- f ) if 1 else finished then ; + +( n ) ' finished ( c ) :noname nextdrop cancel ; iter, : >cancel >iter ; + +{ : break ' >cancel , ['] continue ; immediate :timm break t, >cancel CONTINUE ; } -: nothing :| ' 0 ' nextdrop |; >next ; -: 1cancel 1 1 iterdrop ; -: single >i :| nextdrop :| ' finished ' 1cancel |; >next 1 |; - ' 1cancel |; >next ; -: times ( n -- ) >i :| :| i finish? |; ' 1cancel |; >next ; -: links ( p -- ) dup - if >i :| :| i finish? |; ' 1cancel |; >next else nothing then ; -: +for? ( n -- f ) i 1 nextpeek = finish? ; -: for ( start lim -- ) - >next 1- >i :| :| 1 +for? |; :| 1 2 iterdrop |; |; >next ; -: for+ ( start lim inc -- ) - >next >next 1 nextpeek - >i - :| :| 2 nextpeek +for? |; :| 1 3 iterdrop |; |; >next ; -: pchars ( st -- ) 1- >i - :| :| i b@ finished? |; ' 1cancel |; >next ; +( n ) ' 0 ( c ) ' nextdrop iter, +: nothing >iter ; + +: 1cancel idrop nextdrop ; + +( n ) ' finished ( c ) ' 1cancel iter, +( n ) :noname nextdrop 1 >iter ; ( c ) ' 1cancel iter, +: single >i >iter ; + +( n ) :noname i finish? ; ( c ) ' 1cancel iter, +: times ( n -- ) >i >iter ; + +( n ) :noname i finish? ; ( c ) ' 1cancel iter, +: links ( p -- ) dup if >i >iter else nothing then ; + +: +for? ( n -- f ) i 1 nextpeek != finish? ; + +( n ) :noname 1 +for? ; ( c ) :noname 2 iterdrop ; iter, +: for ( start lim -- ) >next 1- >i >iter ; + +( n ) :noname 2 nextpeek +for? ; ( c ) :noname 3 iterdrop ; iter, +: for+ ( start lim inc -- ) >next >next 1 nextpeek - >i >iter ; + +( n ) :noname i b@ finish? ; ( c ) ' 1cancel iter, +: pchars ( st -- ) 1- >i >iter ; : nth ( i -- v ) 0 each 2dup = if drop i break then 1+ next swap drop ; : count 0 each 1+ next ; -:asm _suspend>args ( |n| |r| yieldpoint -- argcount |n| yieldpoint |r| ) - DEC BP DEC BP - MOV DI @[ BP] +:asm _suspend>args +( iter |r| yieldpoint -- argcount |r| yieldpoint iter ) + MOV DI @[ -2 @+ BP] + POP @[ BP] + INC BP INC BP XOR AH AH - MOV AL @[ SS: DI] + MOV AL @[ DS: DI] PUSH AX + NEXT + +:asm 2r>next MOV BX @[ SS: nexttop @] - DEC BX DEC BX - MOV @[ SS: BX] DI + ( bp grows up. top: BP-2, second: BP-4 + nexttop grows down. top: nexttop, second: nexttop+2 ) + SUB BX 4 # ( make room for 2 more items on next stack ) + MOV AX @[ -4 @+ BP] + MOV @[ SS: 2 @+ BX] AX + MOV AX @[ -2 @+ BP] + MOV @[ SS: BX] AX + SUB BP 4 # ( pop two off return stack ) MOV @[ SS: nexttop @] BX NEXT @@ -187,39 +218,62 @@ nexttop :push >next MOV AL @[ DS: DI] INC DI PUSH AX ( argcount ) - MOV DI @[ BP] + MOV @[ BP] DI INC BP INC BP NEXT : _resume _resume>args n-args swap >r n->next next ; +: _suspend + ( args... iter |r| yieldpoint ret -- 1 |r| ret |n| args... yieldpoint iter ) + rswap _suspend>args n->next 2r>next 1 ; : _cancel _resume>args n-nextdrop rdrop ; -: GENSTART_ next :| :| _resume |; ' _cancel |; >next ; +( n ) :noname _resume>args n-next >iter ; ( yielding from a generator has three moving parts: - ) + suspend: run immediately when the generator yields. takes care of updating + the i-stack appropriately, as well as potentially saving any + yield-specific state to the next-stack. After this runs, the + generator's extra parameters are pushed to the next-stack, along + with the generator's "resume" pointer and the yielder's iterator. + resume: run when the generator is resumed by iterating. Before this runs, + the yielder will take care of placing the "resume" pointer back + on the stack and restoring the generator's arguments, so the + stack environments should match what they were when the suspension + happened. This deals with cleaning up after the yielder so the + rest of the generator can run. + cancel: run when the generator is aborted. Before this runs, the next-stack + is cleared of the "resume" pointer and all of the generator's + arguments. This should remove any yield-specific data from the + iteration stacks, and potentially call "cancel" to clean up the + iterator underneath if the yielder is intended to map or filter + another iterator. ) + { var gen-arg-count :timm (( t:| t, GENSTART_ gen-arg-count @ >t ; - :timm )) t|; t, execute 0 gen-arg-count ! ; + :timm )) t, 0 t|; t, execute 0 gen-arg-count ! ; : +arg 1 gen-arg-count !+ ; :timm +arg +arg ; : -arg -1 gen-arg-count !+ ; :timm -arg -arg ; :timm >arg t, >next +arg ; - ( TODO: totally wrong now ) - : :yield } create immediate target , startcolon - does> @ w>t gen-arg-count @ >t ; } + : colonpair ( xt-first xt-second -- xt ) + target t swap w>t t, return ; + : :yield ( xt-suspend xt-resume xt-cancel -- ) + } t' _cancel swap colonpair swap t' _resume swap colonpair + target >r w>t w>t gencolon w>t r@ compilenum t, _suspend t, return + create immediate @ w>t gen-arg-count @ >t ; } -: i>next next >i ; : 2>i >i >i ; : 2idrop idrop idrop ; +: shadow-i next >i ; : 2>i >i >i ; : 2idrop idrop idrop ; : unmap idrop i ; : mapcancel unmap cancel ; -: unsuspend rdrop r ; ( don't yield at all, skip past the yielder ) +: unsuspend rdrop rdrop r ; ( don't yield at all, skip past the yielder ) : suspend? not if unsuspend then ; ( suspend resume cancel ) - ' noop ' noop ' noop :yield yield0 + ' noop ' noop ' noop :yield yield0 [ ' >i ' idrop ' idrop :yield yield ' >i ' ' 2>i ' 2idrop dup :yield yield2 - ' i>next ' unmap ' mapcancel :yield map + ' shadow-i ' unmap ' mapcancel :yield map ' noop ' noop ' cancel :yield pass ' suspend? ' noop ' cancel :yield filter diff --git a/swine.com b/swine.com index 4888b089514af092494868b45c5c6ab65e6cf10c..7e1d14033e8a2c36676ddec5924c0528a21fcb0f 100755 GIT binary patch delta 4620 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 delta 4422 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 ZwQY6#vu(>(w#44bzSnRudyj4v{0~jE1I+*c diff --git a/zipmin.com b/zipmin.com index 0dc80eeeff44aa5fdd07c844d5533c3cdb11ddd8..0c6041a2ecbc042878769da027518df642f9ba14 100755 GIT binary patch delta 1146 zcmXw&TTC2P7{||d&MeDrgM^D+wYc3~3nfrME?aibTqr1b3DE{MCNqft_yiYC?ve8WWj&H``0|Ns2I z?|)`8^J(!yao->9P2;h@qXjLYapg$3PFdGpefXI2qx^B~t-f2aE72GF*T3HPo(JOY zswYhkx0Ty#6o9$1?#+Qawm zdQK1JBL_k+8ri&4NOtG-;}JB3w$tfuToDPK$Qh2VThEID(rp^nPQoNteI8<1StmzY z;dkGx&r6bpbXVE*MSXC?J=YH; z!@vVE3f1#f6w8o}im7WHfcN6i9Tb0Yj62)nQXF7E^2R^~Hn|tLWm^eTM<=p-$!*{f z7<31CZ+uqvKq8Z|#oW8t*(6KA6L}NmO0)t$W5EGr@jORm3P~X>6sO$}xa?ix;@}PU zH~v`D3irUHPmfN%jETtZ3-!%3=yJKEG%r)q+ezjIO7zJ%kS?Ux=m`Z)f$z{o8Au1x zhqN*%ksi~YLGcAWqX6ka`i|CcAgxH3>6;28iDVx68oek>WNPBbDA|PR;4gGc_K>mR z@yRW{M$gJ#GBG+eHR0cm+@^QkyK=B}3iqnG;UD@H7Ar_KtWgD`AvLheqQMe3Xkq8^ zj&=^QlPM}CVKH@(wIeD5HP(ly2^?c3Ul7pZ6E{It?Sm_KZh08E$Z0F{$=5zNxR*K8{6C2 z-YJ-2(d|KbP{PghVNpl~9vq7y4Th=FMU#dgi4PK^BH_)LQG~(}UL*G8%@A>}z z+?#V&W-rY){kFSyAaXyP;)8sbKIVU*-Qx4Xe*H`BLgY-x50UHP6QNsInigefaaZLu zy}qxsyFv#jmdwgL6cr`b+pEMTl+IwZOL?}&t0;$u#+8u~^!^h^l;H99VDSIrgTi@a z48|u$YrHkyV`kn|3W2@KYu0qZnMv)>T6O>pp%M2_=CT3h)x71Hru~X2IH_1$$+sSv zSoXA&C(UrgTQWU{2flDWdLj$gO519esaSY*`||*gm%Kh-L-?lgw_)%t2R_#y@}%*n zdMtXD&+9&3G|utUM%dVL;Na6$q@^!5d?+?BfKBTFJB)`KD}0GAFDW?5yfc~0TPj zcNXajQ6T$}-lkJJngSQ-j0R*6(m7i0mPlJRH-%z}zM}(aL;8$Xs6d*LzNRO1Mv|!l z@=dy=Nn~_*EKVLkqVYBjX)@`H4UBB)JM@fJNrvO2qr=|K$X)vLS-r8C!?p%C_=|pk zb9JN&_7FXew2gft2H0YO2DXSR=JJTG>^XxHzo_bB+YxnvoIQic1@^HU*r5e!kiBRC znMFFv#*q?8Y4(z+5u@^~I3tS0u-Dn|IG{s(`DwO*Zio2V1$MOyNDtC^b{@@?z>nEQ z+-qi?KV?gXM0(OmvDr85sv%=$Lw(13aHJpoJM1S>D{zgiVcx%yxW^{`5Cxm^A9fU1 zXce()sSf|=q?yT}cv1>*d0mKKy;Jh=Dv~#+%(P{jX!xbOS~bC!leRME`lV`y9j;^W z$EtBuHfh-yYLnXBRbyv7!QYT={!3($mtm^AiadI2cu8*11pifji@xcZ@cbAO!419~ UD#I#vGLKshcIuWcy9$5mUyI`~r2qf` diff --git a/zipoff.com b/zipoff.com index 114dc73db660ad21094b54d0dc4d1ae3b7c402b3..1f3ff3d9e9db5ce3d04241856bd17b48f7184d93 100755 GIT binary patch delta 5777 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 LPbB*n&}8!eg{QT$ delta 5337 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 diff --git a/zipoff.jrt b/zipoff.jrt index ce53048..cb108b4 100755 --- a/zipoff.jrt +++ b/zipoff.jrt @@ -102,7 +102,8 @@ s" coredefs.jrt" loadfile : t" t, INLINEDATA_ patchpt t", patch!t ; :timm s" state if t" else target t", then ; -: startcolon t& $DOCOLON w>t ] ; +: gencolon t& $DOCOLON w>t ; +: startcolon gencolon ] ; : t:| t, INLINEDATA_ patchpt startcolon ; : t|; t, return patch!t ; :timm :| t:| ; diff --git a/zipstub.seg b/zipstub.seg index 71e0d4c4dd0a5d916381fed21caae0bc85206008..654385a91b6f773a719e8579e5110aebc8cf09fd 100755 GIT binary patch delta 1648 zcmZvcUrbw79LMkP+;*_;p8MyJkts=8giXjIVa8U|kcGkqCZnc}4=`#YH1eWmse+Cy zg!_OQt6gRcVcjwxy2J#68c4V4BtGa^Lx{$X86J#Vbff7s6C}^~L(RC*+-{*(ju76wY7v%6i3)V08lot1oxCCgHFG$CmHHm)^Krfsf(~ zrN@6)ya~4(+S}3OwoDaNn6^OM8U-g^Qev==POR_RZMM)JK^;9Re&~%?2zOEFg-Z(O z_}5is!~VJ?&IoETI6=?cJp1{v)oO3zkQ@FUzdzga!M$Q}cD(3~qe1w&Xfw=WY+_qC zE%zz8nQVpH;}|4ccR%@*rr|#2wha74Q?f^J8QKe+PXnkC$bhV_QGVZ0GI*|0ry7MM zP}PUGUbOOCjkrZ&Nffh28?} z=jv-h&0<1Hm3uIe$-o7*R^@4h=pf-_1Uu=KIUj`xTtp4)PXdu@&@`)lg5iCX2TZ~j zb`Y*!RXEB?S&%F0T|xSU!?@rdl#?<=s2LH)sqvC5kGnPA4c_k++NpgDnQ(J@q zYN#1Fpqbd>16lzVMQb@07PgQUgBP{L=)-q9q$5X~bBEq`2F2qJX<~H79yk&m_~xA? z(eV%mXl%`~J%r~i#+xw7*n(vj9y){ZQS@fo({@gKgZ7E1?IRKG0)1VJh%C-&PTDQ( zoQT0~?Uoh=Kk;FUa&|!>>Z5g{v^x7-vL|;*3ELK3=YtW2ZqiNs#3a@jtrIg1KK(JB zOSiO?2stm#!+MJz#qCQ%mwp2qz;$aK=EeDv{sQX!rC$Ay9>P#>=_9s&rmRb> z=rW@4qlQo0Venz~^%=kFxIe81AAv?=5=WrXSi~8LfwhrSa9sRETA?o+19V2dsY@9M z8{5PqTF{8Wh;i_{vkT$n)#cUwr4wX->1pw@6BD)ibLJJ}T|}bbApvs5IB5jP9XUYw zQs0q(aRtbA!;f~(G(e-&04)+YDy6@IO^F=}Yi)|--+dL*P{rKd{NA3;Y|my>sYz$g zusLtOy(iy#`iFe0Jx4BA=`5Oik$Bkfv>Y`-#<0ar0}1=S*!64 z%k|e6Z55Z?Lx4;(zRbg{00A;c3b>Y8SjQ#2$GXWPZr!p-pa9csm|5S~c22Vh46`k= zx@wCWP*-SMRTlq?R8|$Rs3%de_SWU{px+wN;WWI7OtKavh-2&hu00MO{FKX2JXrC` JDjqln{{ROt>E!?b delta 1530 zcmZ8hUr1YL6u;-YHqq>Uxqn0$6jNcY3Nop{q zJLi1ooLlc+=w5$CZfiF#Lmn=}OV>lP=Jnj{?1h`1*WdCjff<0|;gA&wz}MEc({rRm zLz#dA^6#lzsPzAVG=7Glt9=Rt3V!P=qYsSC&{Aj#v>gd`IB3ya=m!PJj(-e4fVy8fH1f zxA}`LX=a1X^Ky`-pcf=52?aRf6r;os91Y)+WvWr8jt(loQ-6Tc(U zndE7#J%M*p!}^!~JD89SE5er2^>C6ez_+NBfO&rwnA9xA!#$ilEn#sVEr`9Lkd-MP zo4Ep9rHoAsc1ioG|T)K2}?XV@f`fGjIn#OUduPxL= z7Mh8uE#9`f1g=y;@%rF45>FNE27oaQL0Z z7*vLJN8nvY@VWYOR9T-i)86kpI3kPX~|D#>x*W__c zvf+1>bNPq_Cn% z+QI|*PhW&x(8Gw6O)vCFz3_$vEv?eO6a5*_m-EW&#Mr#|>XsqJ|Nd)2 z0Mo{UneKXnO@bL@zy=N4E!n6-gr)K8)%;?8XiTvkT#I)_0#z6^WWzmgwhbBykd3D0 wiqW(>>)+tJ25tQ!>e=ueGVWsed_i2$lj44h0PR>lNQ>_o9jzzYDNYLh1G;P5ZU6uP