From 463b73f11fc3b421ae5a4f3c1480ee04e558907b Mon Sep 17 00:00:00 2001 From: Yuichi Nishiwaki Date: Tue, 4 Apr 2017 14:54:58 +0900 Subject: [PATCH] reimplement macro expander in scheme --- Makefile | 5 +- bin/picrin-bootstrap | Bin 778044 -> 774076 bytes contrib/20.r7rs/scheme/base.scm | 52 -- contrib/20.r7rs/scheme/load.scm | 2 - contrib/60.repl/repl.scm | 4 +- contrib/70.main/main.scm | 3 +- lib/bool.c | 12 - lib/dict.c | 2 +- lib/ext/boot.c | 918 +++++++++++++++++++------------- lib/ext/compile.c | 451 ---------------- lib/ext/write.c | 20 +- lib/gc.c | 37 +- lib/include/picrin/extra.h | 1 - lib/include/picrin/value.h | 9 - lib/object.h | 38 +- lib/record.c | 16 +- lib/state.c | 12 +- lib/state.h | 4 +- lib/symbol.c | 112 +--- piclib/boot.scm | 31 +- piclib/compile.scm | 254 +++++++++ piclib/library.scm | 7 +- tools/mkboot.scm | 5 + 23 files changed, 907 insertions(+), 1088 deletions(-) delete mode 100644 lib/ext/compile.c create mode 100644 piclib/compile.scm diff --git a/Makefile b/Makefile index a84c71a7..29895f54 100644 --- a/Makefile +++ b/Makefile @@ -20,7 +20,6 @@ LIBPICRIN_SRCS = \ lib/vector.c\ lib/weak.c\ lib/ext/boot.c\ - lib/ext/compile.c\ lib/ext/lib.c\ lib/ext/load.c\ lib/ext/read.c\ @@ -77,8 +76,8 @@ src/init_contrib.c: # libpicrin.so: $(LIBPICRIN_OBJS) # $(CC) -shared $(CFLAGS) -o $@ $(LIBPICRIN_OBJS) $(LDFLAGS) -lib/ext/boot.c: piclib/boot.scm piclib/library.scm - cat piclib/boot.scm piclib/library.scm | bin/picrin-bootstrap tools/mkboot.scm > lib/ext/boot.c +lib/ext/boot.c: piclib/boot.scm piclib/compile.scm piclib/library.scm + cat piclib/boot.scm piclib/compile.scm piclib/library.scm | bin/picrin-bootstrap tools/mkboot.scm > lib/ext/boot.c $(LIBPICRIN_OBJS) $(PICRIN_OBJS) $(CONTRIB_OBJS): lib/include/picrin.h lib/include/picrin/*.h lib/khash.h lib/object.h lib/state.h lib/vm.h diff --git a/bin/picrin-bootstrap b/bin/picrin-bootstrap index dc6de7e286b9f9f57db9df74f1ae1f1c9942055b..d1151ce195b170b191de04653cd2b470a71e07bb 100755 GIT binary patch delta 149443 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
2ub%A^l?ZxFN zp*6MxRALxb6%2*aQOwX_w#Qsa%I#dDz~R|$UtPP;OPzh6ml`AgxjUA=_mcB>d)AD# zb>`(LFvyjT_MA~k(v-{+E0?Lh$SF6oM5$&kw>2h2PV@pYP84QA58gvpE)#O!RgOSz zlyIs^!jAHOWA~bWVjraIupYTKmnx%Nw ztr2rnt-1OIH0DQ z+)?1q1U^fJ|G^suQ;xYBcQhaaN#3A+6C~ZAwkUG!WeC*Hp+H=@VP(zEjf2i1=xInd zb&jb>?+Nq{<4LNQpg*uNcaA8eKg)Z1urbw?xNwblV@s$S*&-(#_HBERQx-gl`u1>5Cl^&)mZZ;5;UEuS`aAO%wtnnF2};b($9(#nyHGXdn!Mp~oc*R0uID)U z;bDK>Kh=3p(TTL8oL#|?MS=bIBmT8oew4%wiW1%#cj4_AC=?Sav%IlOh_`aJ zESHxYX`^dHp^ng5RccbM!4)!qXouvFN3;RI#lrd`twKptb>;;JFB;BFjwXd|#B*4| zz;v}npK}^3(#O9d0q@NyS@O1{LG-eXeEDbyd7Vd(-M04r^Bs56FGEn?WDr+wykuv` zkqoUMry*HwF(mhV$=Z)6Xad)1j$c~ z*D__1fPDnKM}@Nm94g?BaPN$dgMk806!1nB?uan-$sR}3)5Bf-?5|V`yRF#D}8GaU95Y0(3@O^hSjP`FXhn%bD*R2*146#d~ z3kd;v&F-Dy=n5-&(z!r7-b()ETo*b!VSZ7d*J8ZIqCcU``WqTMH*-dk{!d_Q6~xd?-;?=PfU?x6yfE zsfJij2-GeV3~|Nxp~U7aqUqkxIGsVD_Mu}CS5_zzb73@9E9f!`#2X$aKF5NjgMK@!@>KLzX~aullYAvyf2PmSGWP>$JJ(_^SFVXcQg zkoa_N`;9#EYD2G7%am)566h>t2-W)J}bVo|GF?nsoS?Z&K8Yq(K)3 z=g$e-Aj}DX}mCc5C-%oDA_70Af_lu?-Em#Yh#6l6%f76>*uoZ zuR-*Sf90}b@VSe>c6e(Gwoq>~;U77#xH+x+4-iH>)ED5s7xK5)gXsJh^78AxRi6EA z5_}fyuRuj^{4Jlp9^nv$Obt%^{+4Ioh>_!NBs;8o&XGt&MnoQZ22XoIo=HL|xGjX% zSL2DPCc_5*r|cw$^GW(-n8=*^ez29pZt4QNLz)vdUqe=&$zbzGDJm%$0R5>cM~Gh2 z?3q0D=G?$ZL%5rjSf=~}(^Yzs%W&}eoxH1?-74SevVTcvU|e~^)CvhtRWm0%TMZLN zDX{5|j;shPCzhcjU8=l+YgB6S!z$z&RZTuq5xcAD67;GH~i}&1K`j zlXi#r#FOY2b{(9Tc+1aPmwJ9;d5P({c^NIQ`^*{Pi6iT>%oIYK0K&Vg9l;Z5P&I& z!$9m)H4xDPKpTrF?o+iEQQW6$3sE;nj2l($1-uHP9p#xXva_2D$**#8G;n$=)N|UE zSMZ^LhpX@|0lyOPIu%|aU|THQpea$|=>ql=u!E|+kpd1u774s&F#_ zw-N9$6|ODdGy(fqn*?_kaJqn7s_+LFUZ1f7hO5e=n)kB>K3(8fRQ#NPmk2mY-6-25 z;B^9?sluxTY!omYWsAaR3izymyQ}bM0T*+)f##BmcNh3$k-R-zsplOvQNV8nJY9vu zUF3p)Yx`II3sr70=l8@bT&6icPOkJ)N7H@e;Fop$e<{X3Q@$Vd0~4}4)AZmt)zv-2jLnCm$+Eb70R1l`;cSu$=A_ZThxGA@Gl`53SRw$ z>|R#We*rhA76mz*3({gi5%SEkY9WE2CtLxSLa=7J$=vMe&!JnUIU!#v3yQP7YRMIn zqP_#MD(HGn$y8t^s1;Tgl#Xk?NTr)ruJb0Y-l8iOnQz0*4$Qpf`2RQaV|mS+`s9^d z{KlK4%dg)A!2Xl&Z5V7_w0;{M-3@z-*u}(MHnp8k;gu$+11vw4+%bIrEeR`fQGqj( zx8eSw+zeZE$l)Rj^q*ollzsQs-+z=RAB{$6Qn7&H{vlt_7J<<{A~$>&>A(DYz?BNQ|Ne(b}%weL%PL!$tm0T;E(n&0(Tb4TMFY`rVJBs6#<_UMypIo6|j&@Qz#A^%9JJ_ z*)|*E=Sz9=g;#KYz+foifsOBJkU!Vv$WivhhE$^+n9;?SxDhgw1=ta|PO_J!+L17F znN77L2@ZvhTzrQjcE*nQIk;Zus@Qvsy|g2>=o`&@&FC{Y zK!lpsJI2P@lQdsH?msMCjQ5=lPDMv;L8&=&`R!+$BL(bi3$c3M&R7g;$ z)JkBTok^{LDbShWMI_URR6Y@|?d~VbWpX;mRyz}o-7nzz>l2r=ADxINnZ+(SgE;dr zwLWo=NgN0>=PFNFWfxMFoMYiGq)^QsshizbkRD_I`z+A@(%{>L9e=4&&(K2DX)eA1TP=kZkfJ*Fs#$ z+Q7moNi&h{kZc--9g*z3!FX0f8qw^BhoE?M0DfD-$3-z>H~{;L=Refvuf+2y^|^(3 zKB7Lyi06IkbD((sReg3B&l}Ze>k`=RfXb~=fq!rE=Vj{iUE>BX@)#`9Ih@ICUKastztfT-mxxSRz5Lhh)_fA-VA?SZ=?fZHyG6fE$a$!7^o+fYU_k3~}67rmPTfX92Iu7AJLO z%5;n5Z&Y}sfKx^CXmNm7rgRnX*8-lP!p#KSOTfoexHiBC!P=R+S?BV7K>cM_T#eX! zw8RX0u%Ee|;U~7~0&lUm)krl>bwN{r2ETmVR8*d_$m+yTLj|b>NbnPH`|V}@tCQ-Q z60lBC;uRplFFy`*{lJz1$)iA!ihu+^zUip6En$CDC)GSw3L1=Z9L@QBchS9sIR=0r zlLV~*Xzy&XzUEXd@m$z!cN7972o&7T}9m3S<8)IY_iC)9df`g zAF0ZBY;6F@7c5BYfds#Ndn7fx$%;XS){cU<3TW`lw?bMaU=;PL0xLWjK~`(<9R@?} zlU-aDiy;sE@{y`sW-S9jOTP=!Tp+HVM)UAi*zRLDHZbY*!#?DOb=Y z0S$inB}j|D!JYt(3}ntVh?cx$!8J&A(wMcyr#);y4dSQM@q9T0Q5CrhMUY>JxwF_x zNM7~%P82mq?A$ICfp|Ty>2-F!1{8mSeS!k1^>yYQM5{$>@HhY*uO(^sSR=XzgBNtiQnxtyg@0etD0y-j~0qar##$uC(-CHaB*VfkNQXIh z4QvDD+U#A)Ue+RkwE1YJ3xSzq1B(kG;SJU$5 z=oLNO0TiVJhXP!tI%9&SY*h&HZ|Dyo=;a@ft^7?}AyoB!kP%W^?Sa*ymHs&N8dRFH z?<5!Y=xX*ZgfyYwtYGoANl5kiGWZrQel5zkW>cUa&w?2QTBHc7QFk?)QJVyk?QBbJ zqN83iI|Yx~i-122`a*E@3qf`~y;N?@uPFOLWcoXYRN3=QPoi>s?-^ZledZoz4UnKd zW1v{9Pv#y`nRR=xk%5f_3kbfY4e@@-C2UwIY46l=Yq^-ORNMbc5^Da#0 zr(F!<=1r^?lJP>(<#=rr-3B^Yk@B@zK*JW}n7hjL-+_V)!ab~37|}Iz1kJ$nm8gOl zhoPERtY#$t?qXFyO!fREi=Akl5hT+?k&izkZf|VzD06-Aot2k^%CUE zv&^nVH6-6KeyB&_fbR7wEL~%9K=&g{X+U(<7lFa3poZIhVeUXDQS4xVi5qA%G$3|1 z-a$EB!kQ4M62?JX3D4%f&s0ub2Z1W!MTjd~vxM&>$n}t{`aVc*3}o0ZH9krpF0@MX zL%eTa;cCUszJ^t5PU6T<#um-N;%V2QtcKY25bSe+y;Eq-4G>p`vtcbrc=q~5NY=bX z{i~i+qeIXta3mv0O)wLBltBVE2zZ9N@NyCGGy#uN7hYutc_EVpyitX333#G_o5KxQ zQTQo=j~DnCs<)OW;BN%1QI~Ja1w2H+?Nui(N5JUKPZVzzllSh{e9a3U(-ww9|U>0y-DNYzDm-dof??G)QBCEy-|c{z8c@n;>av`xR`| z1j&mPwj`0xjZAi&Cw~L!m=v0V4 z%yE2k%n&=6Ik$#I&}A0Xnj}&`nGI_VQe0rUtwD;Jsu4peS}bGxT9bO(X#lGGB1N## z0>8`xp#Q@h+mODr`g}IL4LB&L*}OL7J89TFiA9ZNl!0iPa(gC>bW+ff4ITo@v9l+F0WZ@~m+{jv{ zkaU{xFWZ^|=4k`Fm_ll58f9^2S1K@S-;TL<1Q+fO3+YID)98QMtd69iM~|7R)Z8W} z7lFjpWOltHiF5V`TKUv=jRkxOTMTjk8dJX{?ctPi7_x}hq8`fI@U_5_imnej&jXUB29ei;v4-Y=S!c%eKgol#mP?5ZDT(T zB6Y|Oc6kt)K#sFcgGp_V#(#m-@HPOrDbNi>%86YyC9!<~JRdXIqj3;3D}uNLqY0S5%C=65FI z{FKYZFQMWg{NdpezlBInF?l%YB6U=szh=@1c)m5vM1RCa!?XLaUMRJN-OFM(N04?J zr_U+AVJu-JY3s#?@Ju+cN-FgCea4?glFHP3*kB~bCJlmqW{Wj3I1Kc#LNxm-w$$|*yrm)p3D2H+OC1+*kbvPqz}p1uBVgDE67XUHI|IMP=2Q=n=5T+Jrt>676VgMZ`GNg43DRur zF4C;-C(?|W3~3y@i!^=NyUCDdW;c;$a$latxbO!OVdMQO9xEIB8UnS~**5}Re5@<> zpCLYxvuf-4B{!#dZFw=F4;*(C9of7kp$}J#BRbD#dJ&qR(}rZM_n7R6?4D>*NR~0=a6Xf#%Mj4ye8R%4;sza7Q4Z7lv^`Ug|`X#zJOP&@M45Tk5&CCf6%hXUEW)5(7(9BvgeafuW_ya zr$Uypqw`6_IsTxi(Ac;tB%$BJO{gJ}`j+lp5y9qGXuJOIfl^dV<@q zStkB8vLiby6JO8XZ9zPJj>5|^1x}k{nX~}*w0~b0zJL~iJIl4u%SoAqBvmeR&; z7A+zT>8Lua(IOIJJug_YGIkq4wKOkKTS9cHA-o@@L7?`dfe=@E27>*;8xewjxt6&j zStI>MfayjA5I{p2NH_JQ9S~QB1HD7a{)vjYjN!5D@$lzG8kNkKxTd7 zcA#Nq2=hlm4WJC47c6QMoTV&hy*7c*caeR!i8P=NOWCeXq*`b=<})+B0vY-}N3R1n zm-z0EiCU!OGP;?h*@OE571gX~eKr$!@ZQI6CRtjqXeh=IYaaoct0Fpu8$ilgqth1h zp4in1u!4J>5}R~e3bEyJDwqBeVp|wWUp0H6Rr>2I}F8=cI!1lVjRk$?uAW*wr62z6p zUr20(8{C?!%;`o5)V_BY;>y8F68qbYrkd!jkZ$UH^N`-Y5+4Y*a9?>!nU7rhFogKB z32|_M*2Py|bf}KqA3jK_Eb7DKTC9&Pk9y0KHk+bV<;df;sO%#@?xQ6>vQ6JuQkCU4 zBehtIMp6KK@HNa?l^vMWjf4bdgZ+axfL1j*y~8a5f2Btg?(~v2#tpm4T1tAc_IpVi zSfDJ~OJZn;c=U8@SO>?$s%COa$<0`4A1S1?b$yQ0>h;RNg)ETOBrFQXx6kmug zFdZPp_Z?;Dz9E_~;3kyn8CuCBJ9)FWM~SyCUSv}|A)B4Z7K_=ozNKtL3leNhJ4QAV zO{mt)81`-X=y+iCI1cNj>=%$1dSn~St!^4*;#Lm4ie8nt%@rI3Qc~v>XM#PvApU_@9Pcl-&Z}rNYGm-X`FWD*T&(*9rK6 z>aA@R@LB;+QoS_>aC4~VN`co>-L**~`BDM@s%}&a67WI+w^cVPzHG>r7ZN|$mJXmu z^LlhX`@N7vY8u(1ddp`_v`g(TGS`#fZ=c`;jc-AeRLBS}{7KTucb$j1&0yyf4{p$1 z`{FQ^;H_hKPm&BN+Qa1bzh(VS!7|{8#`Fw};Zr0|8UxR_`cf}i_W}$4oivxKs0m<~ z;dheczSsRT>A+J2N|lkSM9O1)?bZ<6p4C51eBx}+^UeUfV{4VKL$S{!7C`;r!g4Zf z!8X+wKu;-!(WWSy;aq1uyeq}G$TQgF(?s_*SbO|R;Vid`wipkc;0U?qcwQP9Uogb* z){&{80_9_E!4gU>QaXn4RO=spQ$EE2I$<&+w~0Hue2!F!GsJdtaY`|{@sd1RG)Z2$-uI4gWS;hBI|RSxH*+okUE?-Izv3Gtp%gZ>nW;MsMLX64>y?v zP%hnO4<8WUD!t29)(}57Vu)SNmYgB6#F?Et1FqUq*5NET*G(8)pN^s*?y}WqNq^Xy zussJR@R=)%I!DsU0JiuX>1zKMzLaZ-jc0GpK>=G?L=hQ5+OU;H#FzeE$_^EgNV0{M z7Qu!}Zx(hQX5mxptMlL|wK3+MCw**msc@G93P^)MHR1yyuJn9Bg*PMUm!AOL z{lBSQ^v>2RUZ#Jix z)bhNz9qD*6iCb|9JC`aqx3F`?!~?E4+%G0IJmRo8?x{d$oCVYV0EvP z9%KnyaGj*l52ftsb+VmgvlTZ;PrrmZ6+2?)DrFlSOo);)6=got-6WmJSvKM(S*U&g ziK}G&J5Y(q*1iM?91x!pSiVlO!af%phh%$UioXL$`FNepE+Ga@FlN`oETqSyGx)*Q zNj{6bMViv5AKBrn!kN-)!27ITL*hLfJrcSr#F zld(G_&|}7Xo*4XSu_1;DeSF#ZJFthJY^-vZydz{SbG}c;WEZ@_r0UT!RCAyYZ?r3j zo0isS?Vnez2sc+JfolRjAyR`ogTty!IV#{I0)~AI0dE%Y4govEB+!;8UnubP0#8#X zhb#gABH$tw&ai;%tJXe+CBwMWT*2G4rg|&idUL54ut^U{F1gOWP)HNDc*o(4=W3srYKX{{+DDh31&gBU=6X7 zZF>cV=92O3E8<0c@Be`xseR=j!ov=h%!mQtrz9f=myn!L7Wi#K91KN5I zcs(0Ku1YIYz!SuKfs`Xkdu)KasxL*|&JE0TAqi4|9U1 zoTfos>9i}3)+dz*!F`8{@131yKM-1jzB^#tK&a7%Of>efqvLG7FA{j2DAd${`1)Z= zfj!E;iM?>5ZNT0&a;84yS7SG4`o`KDt|MWactW7+JQ(7N?QO4(MZiY|yitXl3iww6-^o_-5P|XfZGZfUg{Ns8v)LSde#+qebpyhC6b@x?Wn1) z`eb?mJBrkgRrnhLzcg|^UR2MNx(WEHfE!gZ@oa&x*aJz2f8lIkZR&>hqBhN@PuH*y zwP{acVBJG$FA~8HgwhV=Ci@}`f^n>S7(GYUvCwb`F0=O-*s;?Q5Y%JKBO%COL!%&I zEIyh>kgIHHw0Nom?QLXLV*u2#b}{q<8O;1*X)5t#V`J%vR%zEjC_baYtcpwLY%l_F zjC33(T7%Q>B~UZ)QWRHMQA1bRwFRE}!d87(9WLf=C%E5NmxjRAz_hxw1&sdXb!i~% z@*l2C{dLWc!`oX}#%=uO3m)j!<~AVq4P)=?(yH}axO0P2s%%md{ELPN-Y8?7yP`CM zE>Z6Kc>@t&J;^!6;59f;n286~qdv6#DK?`X^(SYI8|u-%l=i92oEp$0PJ45xmCM1* z`*?SD3oC9wSAudUHl($wG?o3`kXB{CHKf5LpFL|x=aJfMQaq48{eYwpb~&EC+)lP03D(E3+q3=9dT7ThKj`Zn7nPknU?7){NGcpy8J!(jnS| z;sX%t7eX>eu2`o%0HGVvlC~w^vq3FsKUmA2X$jrxq%o`&eJe?^SvIV}9MV@R%CuoC z=a5MH@Ehadw)A`J>_QpE(k#WnsTzgkJl-C8f^<_Iw{-=)TEMW>6l2Rzz_SJ1RE6yY zJVC&NRrvX@yzIdO&MRNPT@!eBfxlOi9~E$W0Vk?PVY7ha1w34Z7YaB;z)Xd+1nec? z0u{~x7>$Chz#po3ib(!)KG#gNYFg?GSP}4k6|OGeKLz}+3Re>FaRE0{4bi_lc=dM+ z_)l9HelS?dlZ7Vth5o-E*R1pJR`%?2Z! zZHVn9@a2vsQ96m_9R++zHD~bxZX)2>>V3u<0uB>!EA@t=vw(dBJQ8lo@M^x^4iQ6a zB>~rWv8pFB`ALMi33c(Sc%JoP0(<%;?J2F+Q+}?+`gQ^zA(<`j zM4P~DSBwGpXJ64?(x@4xB=f(bt)T_UOjV zjwb}FSqg@@;@ep`IA3!zgFv-P#~`k(_)0i9f?N~Hs)K{%@UJM}mEJg*KBL-s<9Q+O z@J80Y%EBh)0;F6s?ifb%thIMXbNYP<_T_S0?{p91inB5E8(PoK`gRL=W!Gl{ZNy%F zM+cC2*6n+`7p@R#CeQ`+X*1USdm739nn2%En-q3+BK5`a%|yD(LBa1)!`(!d)cwJ+cS^KNfJ5YLUGJd`rOPju#Q|B>}_YR*a_X zM?av%u_px{ui}3Q_@IE{PLfD|K)}BWc&iHkEa0C6JWe&5vjx0Bz$vO394Fw}2*Yc2 zgH)T;Ti}yK@^Z(kwSd1Da9h)-jr`clwTFujz-%M`x84h zl{WUv=)=ikZ|KKfaMd#tKC6*qx|NvDs^!qZ+GV}|Q$|r1FXJd%n*(JO2o|D@{GM1w zvAK*xj7+1saI9jOMu$0v_N>5f0JEP?J4#Q!qU`2$NyA1>r*)-Y;b})(qG5-o(>nft zS4_X9JC?oKT=wgptjY|!L_53te+1k9rO!ICurE6JXl06Vs1O>BbQC^4l=wSy`?G!n%@|F0y069&;yoE zxIc+CgC8`sQ$N;c7yU@iv);SuRPC!eT#JQ)pe7eFF_r?P%w`{U(`j@|H0!gQdaz|i zddz!iG*25H32CE5S{We4&6f3k3rAgS51mdMyE6a1bPhe^#&+zb9j(82v$0~%zfpe{ zc7kdg5(BXMHVxcZi+wbmUZ}!0@1x^smntl1KZG|bvsD=Ougts;(1rAjE8B5^G8*H` z+T_#abdd{F@@W?JaA5-v(j|0)Gm{R{0}lBKSgg}-Csud}zAjP13l;#j%?gfx}A1*V6~3XJi5xB-8e?y(4Xzt)!*nq+R%3U&w} zrGWi@2D~BVqqUKprOw3q@&{|K8$b5A2t22fb5yb3`Mv_yU5b5g&Dxx&Yo*!mtl9JP z^r%$$)|weF(8H27L?-+}57UG0Kh=XR|5J}Zo7tN_AREgoCm%Gt63Yc? z4%QDVabLg&0mE*JfX@l|2LW?`6I1U&*z(E=UXXhJ4Ece}CNA2ruyo0uRe1(x8+LV{ z!7LxiHb0{sXvrnxhiC9Uxc1Ont_Sc)@JS;}nKFLA?jbmrcK1jy^wSBA&E>(`Jfa`z2A z;s5;`Lg4@V8zNZeQc_)Bml~!^KgUJMfIw}M@eo&rpCodVXX)O8{NSv)Mck46tdPiu zo~3#N4hk5DWK)A2hPaXi+=ERl0h@o;NK{@W()dx++By} zEmD`nrjK=khYoL7Zo~}O`twGL2uByFXzfnmx&xV`St>fB~{_a9;<;K7tFL&K`WE0pP+_`UHV5 zi-4fRTU<=>qg{TyyFN+ZstauKL-T^H`ovYrRgs_&K=@^@f&?i@R9sCWh}7HHgDp|M zV5>jD&E^F5;S-%6?{!RgEIKqZhS)QYVAR0qN2S4Xk6(GXcZX{W9`QJF`&>?i(?r9< z0x488{eR?`#R!qc)d)OlQTEk`mSy8hG0$(aABp5mYOp;-YE{JtcR1>=NH6v5lK1ur8V_+%Q{}m_#bdK+V!b0{BV~DksNa&fP zY?O^uH}E(3s~xy`Yf|Jt_so?AzR7!l$r1LujntUP%+Xe=PF;_(a9b$~_AGnbO0Tp1 zLHl)2flTJR5I-!$0gE?qc5|ick^Pu5{*91Q=tKTJj+*y}Tp@qtUC95RN#+dxl{Q1H zFOslJ^uWp(Vm0b>vUv9XLIoNLfT+)5Y`dMLt2_;kv?|DUVS%yOPV%zWdB9>F%JYOk zHP*opSKx04im!zkIh{eE&Y#C1uB_NW_}9X`1-&NHP3C$O(!+tykIdURNx2k`0seH6 zlEJeLbd`FO@hrzx`UWlql(|X`=&9RmnyVDW22_@sP~~s-OJ%7qu{SzYkvbBxi@~*q z{ty(nNl}f{Hj@AG!M5IT5^y-G0KUwSwBJ-qJ)HFE`JM$FJ)hMdX{SF7?rVg*qY{fDDWrh&PASpM+vxwx^b~wz!?JmsGb4k2)KuU)70J3;R1%c6#tQMT=o@023i#K`rh3*ArPLGfUsX(S6#>Kj4J`Z^_#Rv<@5F^0KLKCIQI2Kb z6>wz%zw)SW!p{g?61a<(3EnN>SMXUuC_ES^bu48iz;e`8Z_SxskpO;`d6?dq#ENuM z+u$_*78rbu#`13S_miMmVDS&HVZs-AE-H?!c~z;2udx97iOJI9MJ2ShC8mo?TTif6 zRizdAIU#_i*ruLoV+#>TLl|Qe+!->Oitp+CvC?d1O<=~jd zN&PxMQMRvQ3w)${8uX9;BlX!VR^lVI_1ewdCGIFz{2a?**4$T0kXqymmUPE&>_=az z550e8ksnATGjBhsB^<}~@sm91#bd_r{UjSg2C+&0l0Shd#$TEt9oPp$Jeg>$E5Ss- zf|Fq%Wn?wU&iewrB7`FsS8bYGk(LgDT9vH`71WJp1dh9lrqcX-s#W$?>?Pd$Ypy4XB(_vD}>VLuuko*;BC>-AIy#jCd zUYwD<60Ci)zHnyZO8AySOt>@yCh7ce=;-5jF`sEtm}4#cGbe`Fzc&*WnL;$MPZ$s( z&4*iQyCb9^TI$0(`b!?{;&9^Wm9eQ}`<8E}!WVNQrNhLZ-HVh`z3`7=nma*xqOVz} zDCsaQH8788sk4{ehX0u=giVQtR0XqG%Q{kL?d5gZjV`CuMx?lch zvQruCZj4kwdK-U^l|B;Em94EOt@3Wodui;K5bXPkyNXVoAg-LvVLjudB$8@e7biWn z){UKprN)kfK=lS@KwQb1MC6DX>E43;ItR$6#dIK&KV}noTa8pL;E;Pdl1;wAd59~s zvyCenOP#3HF_SRsZt(4!LwVc+qCW&p4{zmdwFLZ?A6Y_EX*``d(YUXvw2;tU6OA34 zOA{#^i=R!DI+1FudP^zB+G87-rt^DA0R4NbF&l0wOV-ymnIP*tjD0*nysYgoHm?t9 zX4JKj>QlOXv@x}v^ovC1vJV}=4Q#`jr%3a(1#@@>#?OQbn0$b}0D&QRngZkVOV+TX zq}Of%GE{Sh9#YxjTyJpt86c%Sy!I%idCywL$zDi?_hOKo1CVlK2y6eP^ow@$EKct- z1L&q3bw2~7_%f$X($?&0_y@KO8o2Oa_AiEQl5BVRwU_ z8&0Zfu78JBvzUCJwPFQd!8De^dzNZO%SR9lv(C~U4QxXHH{-#UthBRK+x-~)IidfQ znZ+VfrBE6*jrpfbn%D*{;cL=~#b}tJyD7>{5Uzr!-=0A`fa*|SNWibBuQRZ9sZyXO z_&+qXK*Lx`s?^YZ*tq}2H%)5i^?C}Y{MV20W^$U;o1S!HFVmz{_eS_35=&jQXT7>e zz8-zy8sUEh+MmnhE+A0H|3RC~PIr+yxDOliS%IL4u2A6o1)mrAcqZ%DRSNW&{6ABEXCSZCrF!?{xfuki zHMj+FWknCj4Y$m$_6F}84iIem!34GQHVf$|wT2U|Z{d-QVT=1oA+X7Pw4W458_wh{ z347>n{iUXKPYH{3v#!R*^#{x4!wUMtg7I()yWSt>h4D-?K&ttF%)NJflttV3y}Rcb z&J87`H`>w(gs^EOp$0`MQi7tWC?q7Ilf)2^PC!9GN|bU4DlAAxVX2`AEQ*RCur{Q# zc!@>@3@Sxbcz!c;Y!b?S-S7MS_2l!(%+7aaj+r^8&)F>Q3)C)KYa9JOIvG0CJ!g*} zyek`a^myr&t7;x^yrwnTTHT0z8AGn8JiHzgcTXQ}Nf#jy1Ad)>*gL#TEeB$y^Eyo( zsI?62eIBEkeASn1VuwnC=!5gwc#)Bn~Zoy#$N-=tKVz*U9vH)c+v>1uf?+U z4LXyH^^2MQ$<@g6UiadKd0KUIMAk$ZaqSR9tfB@eJlrVm#o7B32A~s4G2?`f_tu)d zMN(%UD=#dRRrg-4@K%LydGS1j*D8F#JEDwHc$vbLy+cQa!t)h=uk6;Eu8Pl49N!XB zX~ru&N#TXw^R=1^k5u@Mci-cq@KA+c_U?PG&XeUySJ)#??8Jcj9kAHo^j18=yYX?U z;N2De-FsWeI)xuq_>4Hq5K`V$I7Q)Cz1yMj3dbtk9Ve_Zbe6#C0J!XayWpVbMHSsM zQZA+H1sGkz21%d$N0(MKvOr6&cOqB%p1f}l^Gjnn1d3~dls-`lu7;cF@JAiwAx_i=;gwlECt)-2Xl=0^zkJVT;0A8jFDvUu*))5S z*2c0hj}9XOUc7Z_l6DPJzMG6~!11FPn&u?7BcDQSv_5-xjBX!Nuc!BMTLFN08;dNGZU(xIsL7#j@ORfLuu>WNp|5rF|e?@!E zvaS#9i$OEE)t{bu70n>Gk6OZ8*7v8Cui|JanS7=}-OCSA^J!YcdW+Cq{_6%Ig$kx= z^CG@~y1eRlqHW@T;tY)Yu~c)qmKeFVg0~ai_@7t^@Bh3=!=`JW)oV2Po@CtEhkP-k z`x@^)WKGF))cZB;LwxDnYpCL9>H2G0qIUc#)rKP~zi`j~^NVKaAJ~8XkxPANXx&2I z?Cs5*TB3+$$Q#8U&d_G~)c7<}G|I%!V0mW|T;9OSzJ*!7K}dOb65c$C6bSDg@Wva2 zB9-@d3Gn6>dtKpuK1R*ai|1)pi?%#kF58>d&%AHderLcvz*cf)0Cnh~y{w&XW-i{a z!@R>=vuLj4r9Ai2Ip{E`dzO5&GX zxYt~);TgkCnZ+00)dI~Sv)h;J#KX%r3}MT(evxmdNtKkeMu=)+PMT9~AyCQ2+QpNW zXY^6#DnB>+{x*HFTuU%_D>kpd zTE+55H@Qk_KNMF8a8TrJ{3Vrs$C;GB-r6y_B~hyt!Tzgts5OvG$6Hl(7kxw_Y#ecgfP=;<@Y4p>1z06VDEb zYbBVlIzAzkl=$yuFyT&k!c@E=+?-=Jo@yX2qiOSP&o!+ie_F^k6VKh&7g!fh*{Yvb zb)~RAz3q=@aHX&R{Pd^rRIYpm*IJ(zEwIGlfM;ERWd*Emfw+mhE^P?J<;A*mA`rJM z)K!n+;@Ty$k_5|J?9TXI(yp3WJ%%eDO2bJjEN{7g!0(cMRn6)#T;<@&|-;y%-}E%yyeleVhQ^xdf)vgln}G1u#fU$W1PPQfqPXWrkV9nvw>j&f=9 zS{Gs82-W?LR_xu}&IBs)`xlS(;rN)px~ax&yxLQ&TjaW=dL7Dr)Ew!X34+<`9slA1 z2QaHz9<5G}4thk5s!gTfN18)0Z+LxxO8VV4QHz7-Ms)pS?H5dZo`YHpZYHY!iMGU& zSxv@`{UB7vjcbOu-n}$XNsn6(&D7$m#n(U4j+zlm5iqWhcW$ctwfH)S}XHt zI&)Zi0T<+wk7zIWe$@c_xq&lJ9I)aX(|JVefOk#)4lkUe^!!2_Y&lk+c6|Yr45Fq- zwc(Si)`wnYbHx?H&lBXjM6x*{uX}e&QxhewB!c22oL)Rk;k)%D#)d))D(S88ErnZp zHv?@I{!L-rXDCBQlr&O29rXy|<=0Fo=9pG1_)Xb{?^zdP*L+OtX1Q2Rj=nj+V8K&y zx8Dl;h6&c6Uq6dRy%1G9%Zbkb|K-H!1AVyOo~S{N1;jMqTNhAMnZPsj#YwHc?c7KRz0`%d8cZ1pGoTp4JlTwpN}M@-0g}qh!EUsqH$n<+Ro!WV{$DR=`k4PN`9gn zr?Js9aw+VL*1)`h+MLmvrCb-|Sov)Uu97TVVFB%Wipf)vS))7=r7NsT4PEh7qY&o@q4kLSGLZv$50blNTPs;$ zJkM>Ck>tG&`|0XAT=fZ}%ICGA*zS!wkCJ{&OU`ROBmXm4W^OII6K*rXtR`Q%fmvb} zX&1D{%?1pV{tl#ofBA0fRH3(~;&vgaOIf3?65m1e^aV^O=cwoc%Jj(B^!^20q3c7R zUcfyM-_orMID?-;-8@=d+zOoI(dt$HM_mwm-rr0;t$GM;^5C!u@169Z0qMDP+Jkes z8bfGGbv>BEE^5sK57}g9JjkS~g*EidMXi2d(AUU}WKabjfsOaj>lZbf-^8HgGw)$y44xY4Oimy9n`? zy?eC&XSS3OBPE!p6iEW26)nK$pR>hNFKbU((LPT6sYO-)Kogi1 zVX~0lb*+it=!)=j>Udp?@@rp_y-DM*YxYp{&)7eRro$CG@hyz6-HH!f*IqK?)HMF4 zHr4XkmsEUH%fJFP;+7UuZPX9{B0YH_7Pl1lzNO{Y|MBj>cYnrdR2g4&380aj6IH+; z=;vEn=foqUL|!GrM-Dq9#>{EDXhu`<^~!P&*|L_&u!-Sr8u*u%7`hzmy8E|R)hg5G zzqID&9>o{_LK_QQ@GqoP?44Vw^55FCcqBCQZ>>e!R=s4i!RRWqB`&F=|Kn{-@{J0g zm9)mq?@|{<@W8+HDEXwOtc!3u{tx?UJL87jwi2(=2SJvJ%5&y-fXv#lYFdlkbgn$4Gp1iJXIR=;^?M1?rJ6sIh8_n;`5r)1`Bp;K-cXDRj$ zu5?eQPIoYH+@-m9v~IW~|I8gNqQNcPH7E)`&0l3qS$pjwV-q4|@lR9uT_pS_wZ5y> z?w;AD!rkt-)Cx?bSz7Y5xcATd7D@FoNwqu{-tLmFJw*M>EFGFTt$|1&iB{j$`k7}e z^wFD`-&+`?$D03Ln65{JWcHNGI*C9W#a(iD;at6$IdkD|y_WgX!jpP!^T35Sb#dEV z4Kt$8q>g6&5lbbU-kJ5r_!5ZItT(DL-A@WCl7hA?Yws<5RSuuMxQ1vJtuxiI==Cgh zI#PR!9_`oRMg_$!ps^Nx2p;zRk45kKc=g{*rro!sn!IgDzA^>3_a8^gn^EFhO(f=B z0pKecW4cM;EGt9UBX{VUKZdzEnr_9F<3*a@!F-8MYWid5O;lUgJKLuBC~IZhFZb>g zy7CK#tT~BK&~#m|hyJ)u*PG**^E+LS3;$1dZoP%jH2(Ll6){ExQC%NB6qiMkee~{; zXg+s;CahvVo%S*cVM3-n2wqZhm6rMFt?;P8X&*fsj{>Gv(rZM-2Fm1eFQHMtzE>(v z&LcSas)Y3MnUhL-7kuXAVkK0^KDsL`2h}q41~{F2#6aFgP@bVD*W4yoBhzrfUbK5< zseTjLnGPDLs#v;gpdQbWzg4eg>yH+Qa_%iry{Yp~?oAiOh%zT}6?M1jjcWdEAk@rh zkS(MtYj0;!>Yklwo>dRS267DoqO~8h>fJ4Ptw1ebRF{cNrEFh)3^ae< zS09ASGmlqBKK`Jg!rD)BE9>*I7^qi8e;IH|6}`FNrORcl!(Eb0-&WDzitmYicZC)I zF=))YXhp-93(Phr{}r9g+aH^gqbh1z$0bHyG`dg`_*aX@*;Qobej#f$G>c`_qnaLO zZLHup8c|J8wsm@}EGin8Sg5Hr&_8bs#GK z)u%5~RH*l;FG5)=CD9Dnct~uUpB{%dr~KrnC*%7Gw(5GLR-tC3a{o{kj;bh`fYEy& z#smz6j}>C6fPcK%QGM?-L-8dV<{5<;230?DpjexsVY4MMCoQbtXaHu2bvwAha(%SgzF#rG5|x)IVug% zA3@`Y4}?Ch(eOY$!qTTLy%wk^;X%y(fqE{i7C{ixfhGi@Q(%oHtcA2Q2(4;0oek1s z1AG1>v*<=H@Q?db_fef-J<41_U4r!`cn|f!}a0f zs|Vq@o8ndSjX?MocrvXld_8I%p|=cZy+O5B^+jdzGLfkf7#~t;Z-gFe$$6GaBaqcc zDKb(|vQ#-sPetl2#XG$tk;ptc28tD5r5bvM*0AXv%E++PpgPCRzLtJTR8&I`wf-my zKPPbqZLERz7?f1j9#M(17vzbi^tK8$nf^kks6#EwLU~t9gGHz`6{_h8HCm*sBy%m@ zMk8wKHcS7OG_NMo`{{3)o}E6ZiS&ZYC3zdcvqI84D%2^uRa5U`+kkBX_e}@)k~9%2 zUWIytGHM~zBjus6u#g*y&LY%daR>IC!~{BwP*JC_kziRx2!(&u<1$pJufI}x@479Z2G&FxL!1&u3pQcrP14U^;W?<+{n|M!~?K) zHx{dfIn@r*&vo^NSmal)r;o8@e@)T#^@g;uo<0F@%57F(Ut;`(Iq>zT4^nyqJ+iVD zJ9~NM5ijwouMe?2)r0yrz|0-dou)O=r)tw|+{kLw)P2Ph=nXOEJ^qK(TPXEth*AFq zda0rQl%m}!81@T_*bLxir=KP3G{mtWMU_UMCpZ=K3@ni zQRIrk822@uj>4$2jsA+#XIO?EQ9?gzs&^ODVKaTZrSW0KDn;wh;#R-@(a2X@DvH)4 zaUi}ST5n{lflb7HXAjAu5x)1UOnoF>i$?0ZD7d+vB4(53dYErx=@*i>oN}7$4MN&{ za&H@Ppp9VuY_1Qm{O2=OYI_VupyuR?(fiuI#9e}%qPH0~5h*^04F&4DEwyfeTxQVl z7Ff`=prtMJ7c9SjqU6-Iqfnurs6vIs>NOhe#?609ntT-~rgPCBp+h;NwE0QO45epd zQHm#Ne5^j*^6SS+Sd%!kv_YxV3AWK0bI?FOLrA7#CP11*2j_*|=IwoVjNTZ3#`Y6lo4;70@L7n!c{1mA6 z2w7U`{qUi-3|N+Gfpnl1JhxJ0Ykj7r%Wf6naBI|vYnO67)dr3vcARaaXNtv5TQs8v zxG`2V^WWO)6LD@kq8+A^>pK*y-Cmzyd6FFm+C#$U+m%n(R6Wzuemiw&tJ~>9DynSr zHsv#*gWe~&)n?g`&pFXj@NzrRj}z%=2R#R~Q=3Qhg_asyRp?ufpn`I?C{^rxRDUk? z6W=>`rApQA41*A~>Y(Nw^_HPStf*e~Hd&{)+l=y~p4Bk+{rk17`lCc0u|N;9(w>fb zvgNO8)c=GQ>N`dHh8&(r!H?+;EGuVHtH<=l7Q9$B^D#XhM`HAto@$;(Cm+)@LpN_K zt74lvubtyFX9o3p9Lf#cq#8txPGV5GOOJKZQ!IXWsIU`OUqqjFf@U%Db=EIpCau~< z-;1vq9PWY{a2@^GMJK$5cy?Dkz*>L*3b{7K;OV_P@m_$t6N_C>>a{dB&Dd3}zqT^)*VPAtT$ z%Wy*3Pw!Ce$V8F4`oJ09_1{n5VZKG%`|IrjXHF{LkIUKV5c#C*ecKLyr7Q;eoY?o3 zq`XxTSp}ND2uQu8xAW`VK@%?yrgzizB1`okYLS7Z!Phi2L(hop`UcvCym%qc!giL( zS5nRKSv-X26$;De4qTmQwp}Bw#5_E?(RpUb=h9Ve ziL`vaR@PZqpFMWjj%6!u-bkrF4;N2`VqTbtIQW7)}Ss&@A^nXm~E2_Jx~^UTCZ=?a-IUDYnj=sw*M;bAGxd6ljW)StkB)pii3 zsT0M02I;|O^C}uXSdR1_qu| zS(Uu`o+%!A`>e#h@}78(lJ-B)vSE6oW}m%=7+3XQIQsf4G;{$GdK>3oL1a1Pj{Hjd35O|OaPr}RKA`W z*|rc>Ua=32yp9sg@tHkF^r3iaI8qO>(UGEQ)<|qa zcF=bt^;X)EGk2(gMQcQ@3iM8XHWAai9qmD17U-e0ssJmIUyBbG=*P{t61ZTr-opGB z9UQG^TCaa4(<`PHFY8(6v9#c2`1PQJFYB4U*T0m0)h6J^E9_Nn((o~Q%b?wKPpvph zqQ0Z;WArYT+Fw%PP;BygQ_ZmmSNZ;MV^2`_Sez{6(5A6^$7XZKp%U@rQ^iV@)tSiU-Dvd$EO=_uN#VLlJ`-Ubr?`pw zENl7~QhF*KoTwl0>vNpX17_f$dI`;+gl4yw+>`W_pr^2K^{$I|saB~8ci&J4<)uD6f8wdWr(7GNESe|gbKbT(W&SVsG%>#tkC{zyjJ zS={S2{YkSW;zL?B17rJiykiBkG*MhaqS>?c z!NCg#pi1T>PR&BiRuLD7=Tw_hY@MUOYgoQZpfw9{gw&3XFVI)iX?7mvnuY_8yFcTm zJkvg0sTa-Mfr73r@jG8!v``;yHZLkRNdLtg*!S$;NK71_a0q-LW--=E)lbvB#rkyI z+Zeh;A07T>Um*mIVp^VRR!ZD1TDb&EIv1T=f9_UOmMP8Y-?#NnmbKCJ_&fTBfDP!!_(t!~$E0AN3DL!tclEYrOWS7D zVX6L{<@=_^?<~dg!!j|7%nrRXHr-tvdbFid6peA{k3PTZX`zjK-!E`Q++8&%u}FFC zR~oogazf$h3O5mI6qDP2g(oQdh8M4;kmY*gI%(q8tvQJwiU+{OeWmwa=>3ZNF4r^a zxRr=D4-fPtoe_c3RG<%KIuDbyLP*Mx$+dZSpeKvZtk4IV>-{Y@yK?rCGmyLU%*XxF z`btH4zz>z2rp%T41~D0}(py@Lzp2wI%-ewuny?Dp6W{Jzg@cMc^t+%hAECypG2G0i zmsUgJakuD;)lhKOZMwZ$PqhU8MQzq#gm3y6ZCj(ah={l;)5d5kr!q%L6ZuqT$Q=4- zja~->LCv-LGv?DYa;@IJo~OH1vgi)tx_I9|#mZ!iXq-6@u`>f}yGCWeLYbbSdg=#_)XyiKVK5EmFbr@@}(TR0>$J$@vv{zocKueZKfnp6* z@7x^1i;<5|BoDALxw( z#c!!_EU><{5M5j3vg$?*Jg-xmjp(t%C~u=Y9D8RYDq{(0oAhni4ei{d*R@pcL}xak zGyF-nHtDtK<|e&*w_6xK@&5Clu{0D#KKl4QIyo(U9Y2p$zB}*r{ZRV8^E29mh`W;V zoH$9FM{|WWmfm+_n>?RxJN0Pmz(KOK?@-KUsPZiJ+>A_aq4Asb$7`KAAbJ_piIFK& zJkrtKU435y&O30k%6>Y(83!DRbYnAiJe3zv?=4u*o~L9wtT>*S`(P!sAl01OiHY!zpmcT2Wp$v7L@qa0X( zyp1PjRd6DwA>mAy)E)&9I-*zCqE=(Hm8D`)o#;0qY9rOzfr}j2*zUmTzMqN{%yDk|-W%s_TDk*qaA+^$ z;0UBxToF*iLie_+;GOS_^BZ+9MjY&|i!tTJyiKlRy{65HOLM5E+4vTPQ2AoK2(n`4 zI?_KP(sGL4iG#2MG<7FVESl2Roq7-JhF!8PrIPP1{SmF#&O7AZi)HtKU0AlfNRxJ< zWyRC_T^LL9=->@^-i(f=hm;wNzNzD>mIM%oxSd1%H7WE?yKB!UiTBq9Ys&? z(d%^Z^J3iTiEiX$^}5wu>SOY{|CUX_XEF947)NjY{Ht<@&~}Ky=Lf%q)oXog_Eq;u z`mFN0Uss{u^}5F^_nTh#Fy)@@b@x^78T8nPdY!}(UffLKL0)$a=}znixA#~E1FF2L zl2E+(LoCf}ZJ2@CR^F(=>wNLX2EH2zAKclizhr)!QupC9##c0QpPn@NHl8B6+wdQ0 z-jSxMiXb>VfT>Hfk~FQ-tSrr{()5$2zcd4-87$3EX@*NPQkpfTSzDSmY1WfwgUQlr zB+Vw$Y%0xYX~sy?F3mV;CP=fTG?S&-N}6q?*-o0N(tJdk9i{oWG&@VPt2Dbwvqu$d zQtviQla42)*;|^=Nb^}~J}=D|q}flJ>Czk^%`9mSl;&V*4wdF`Y34{XPn!ACERg1C zX^yF)O-AzLq+^0KCrPtVnp36usx+rdbA~i$NprR|=Ss6knr}*TfixFM^DSvEk>)$n zTq;e6G*`fkzuR!7bgY)Y?{}%N=Wf5*Yxp~cHGjVUZg9% zef)|)?&s6C>3q8pJ$9M+Hhj0k!q+o)T)JTz5*#b^*QB4b!~bCq6Hl&wi-Zq7($Qm@fQPymw{ zkrkO7lPmfs~a)X5{`b^+)AoWe*&Zlbr=`A>QgO9xWeh1W|gCQHk0X8r3OnfuYl@ z*@mrhxjtlJ>4V8eKoFM@IeKYSZb7yU^-0y{8jM-1BSieHW{jc$=(o>_2fd5Iu{&P{1d&(3f3Km5A7{j0Z7bB|| zUNMZ=q=biRURHb}8bq%A)zTJ|k(nv9okZ8(F@h$Sw~j<;)9Ytz@;}vLGHUTYKh%bl zodU0z;kmhaLcGY0sLOlgH)&QOBe4jcQ6n!eJ15H)QzoN44^cEJ+lWSD8D(;WV37fD z<9ui}RG|qojG*c&P+7%O#%v>46IEPRT~$=OMWY|6YOMj+T2@BEs1g5bwfSgJDw&U< z7t9-O_|nd?hOKvYe!l7n4`i{P5^fV6$Tnig$PpO@nS<;74~40Kb4LEx4k(+)yd1-a z3UiPX7y+Vr81&09qZ+vf89r4+|5uueqP%RQ6^$5c7^zwJX|+O<71jDMJUV0eC_IZc z%?PKFGmM)5A5>kHRXsAhpzi;buIrXJ;0J5JEI+|y8wySQKUEXKa@;E$#8iKb5`Xvf zmI@su&Ss|rvoWUR<)T@goo!UpTP8(CQS2-uyt4Qu>Leqddcs{vx})$^9K!dXWmqjO zljw~FMqP47jiO2h*AHc(PaxklPMeVM`uXEaa7mWC&)LZ%z1Y|@)%D>NO2w+ zpO`Jl@nm0NgfCi#jAl(iyUki`1X@z!Xv|`xizHSs=2L(vlusV#HZelE}8rs8c&WMGYj#IOe06Aq65#viAq| z-)w{?#HWZMO-^U!VKC3Cz$v!+17%eV&d6`u92R0;U5EQHmvh;1EezO#e#AT^A$sUuDSpe~6#cR{nhFatZ zm)|z(h*YY*W3(1_-6N=Q{}qNcW@zpZ8Rmg$0ZF0}CfFe)D|`5m5#o0&y-{o=G_=Rv zui*S_88%+#Uj9rF^G3wv1bYICROam+_!EQ(RjB3}Jhqnws*oPi5naNYmjtOuF(OqU z6}yO(TOmpq@-MVhF^U}#$h^@A58>vDCREmR(X5WXYeY6lfj-14CC00Jp?DOpLX>(j z^&rT01S=(>NwP0RvrJB)j!TV}qS0QaHQHK|TZ)z(swLPH$-K;{ zS0gzQoqI$^&YVa7f7wA(BWmqi||dRrVe~BTKpL2{c+e~^pT{&a-&`|q|K#)EK#3W$f+eGBHbtS zrR7GNO!DAzqe<1|3i-q*9t|6Xqg0mUWG-E-ow}?r8vW0uLjZ3B45;GGe0*|>jBibd z6=O|i7WG(R)cr3)VwDj4dq#vM#V+H9C&b2~ZHyI-H5R$d7(OIJ=p~ji<`_ZsMh(FP zmk=xZ&3&C;E|n8v@nz%pjGCdb3APw-Sg%gt=XuYlAxe4eh!G+xI(VfK6`qWat{Mf> z7QL4fSM|4kh2hsrG@V$X;fkXlhr=?xERzpeGjYC_5O|sqjCB#8D19G#*3Yr78*{qU z4aV+-I5gX`Ko}`1mCX4~aRW3-bv(2a*AOFDQl@QO9m-z8eiQU&5^@8F>dsPeSGKsaf8TI1hADHSe{dr61 zo$Bt(<9F+g$1MqVRv0>Cxxx};mE6--642@IoM$y%5+1JX@$VatSrQVxs%c5>UNFLZLGD zrmTS?fLua*Ck zwBKaJSRhC2(%P3PMWiVz`rgQ@#vTa7RUVf@A8#^J#1MFAlhG_S5oaNy_a}-X-ZyBY zOJs?WCJ_w~M<)Y^j1dl0@}TU3;X?)pMlM4j+yq4?&aU;6a<5MrBK4 zORBpM-5+m7LHCcq{kx^xu@L`poAIO?KwCc8DO$#HLux5IMJW02Fyat1z1Rp16zZwi zlo;@-z8*9;o#N>+Y85Q27Vrej;d4rL2i&0DF zdZ`gc{`+uza(Rm=Pm(MTp4`JE8?Gg^#6nvXD5lu3Ti`(2&1qgS<_IT>`*ce&CS{Bq z`I1d7`4d`VM8Z5KhgGpn5p^inYbxQESoDG2qs{w@&@zFpZa3=3JvcUr<1X0&@#DeK z4w)Od&1exVPQvoD#nd4d3rS-6@sJZL=~r>Izvrk*C6nYGnUd6KKRM~aK>=qT9GC}% z7$sR2Qz}MvT&DMB4Z0}PRuY!7|6MZ{sAkD_qee=S+APS!I?=sE!&OX<^6Y$w@<|N) zwUWfj(>vyI?$N@fYB8m+H-be?Kf1$cF*!-hV*iu+)O;jzaZmq2?N;bn+~QF2qMngi zsR`9gWy278hqIz4WV;b%9D>`o&-B3aF`Vh12vf>_`yo5Yf_2G+O_9~2P(`CUdmw6aBGjF2ir zMu?4w5Rf3pyL$k}yk>NDmr==2EcD9Cnnae}I2%qDEh7eFXuddI@Cu4gLC;hJt6byA z+8>@PlaNhGwvIATu|*`S7Lh#$=NM`XMylMhl0|2@XF#E4`-~d2Z@1wah^6K|Gizcj zo!V`*e>_>X8zd-wRS>D96s6~Tm-l6}gD8R8#X~PCvD9ym*n!*W?L9_K3*7S-8Ij2e zVhdWR>l?fs)$5YKE&c3cI<~nZ83xO`p{_REB2{k21}8?2QD$Zxk1I$0j1l(hnH zR@LsQLRG8tmI{pl;J&6Vit5d?7%Gq<%=gW+GcpI?ql0_uT2DxckD`*@I4l1h?V)p` zIQ)=jTrqKp_WvIzVE09&)cr;~v5ha>Z#?OL|E6EinsjHskz!z=OSD5tHkVNctH4Bi zyclw9weHV)bFBYg#uXnGWQfc7D$u4bcJQScaVdye9Wd%XBZF|;Qr9mAXP42yzMWv`Y>UY@i)e`LqVn15ThMdcdi8o`I<|*3ORC!V03Yqfg?tCqoE(cvMIT2ektSOU!Xm!dJ3WLUl>tQV&nOc-YBnv zRp_8eHoW-62exjwr8`wh;0YkxI0Led>h+4SZ&U7H*&eoCxve{teU$Aj_yW2}CmtV~7k11ZX-_u& zq<)yrf2cef?^Sk(Bg+1f-CupA+?5Y1d;2HKe)UsjulY>bJq{`RI@`NGSMG_2l^yVf zvd>8y-D}-Z1x6iHc8BB24*F8rP2I}A^p&#zVSemu<^JHbs?u0fjc5gPDbd&Q0w4-Geks~S9= zODXmjqeir6g>V(E#0^fCAvp!{rh`U)w&}ECvc#E=8L_5s3?#5t#(1B`{9@FJbiFTQ zd>~AZG+p>SF68c|&5)SsJT6?08$zPp^pQ2z-qLgk>AK(11>Y#l!ize5aqpDrduwiP zf$3Onlcm4Bc5f=Rnr})rj^hT_auVg;~0uMqV{qS==AermIGBe5p&&qLVU&G>cA&-;UGLJSR-gPr`Km zCQNr}C5rsbh)F5>9S_A>vI|VR0)~vsHti2Uoa-{&4H-w7H^uM5zl7=dTbQNGY07U# z@MPx-yvy2>kzdfiAb+fBW?;VQqZ-KZYC*FkTNYT5op0J4jQHyfk@9-OoSSd@A<$$I zce0rF1?G%4-Ki~#BqH_4)x?4!IioTL49_;53^bh&M3y(nh})#OLzso)JM0$R2b7&- zni7;bJa=TaX-*JAek*-X2(uI>N@iLbl#yk+9FFpTM~{>mEkYb8g~#yWxtXT#gR)Ge zbrAL>O)oV%#ClGNm_=u#d0qs|7@ckUDA?pgtvUgae`z`|h~FL$-73Xg;Q3WXxF$^J z605ntX;&mPwahAntrTYAI{AB}{Jlk(p6yn1&Y*(9rnOfk9%4(*NYnWc zd552A5i;nyA-sxi!Ar|G-44mfH@QNy@=c$HLXzb#D=oWbG^^{nEyesT#rz{ow=^C9 zir=OGTIttoM#Bu(9T}|9SEM-ww>ev|;Wib8$s6iS??fQztHRGcU50o~n1wTh>5-;; zrig>Ps!RvMhL1JfLNzFNGn0koIxig;w`tA>-R(H=i8Tz~o_lpQ8vhsVR$jU9z@~#S>qEcyI6K3J>!Yq}h>re69 zab5b}s6rk7G{TM9Rl(e|Dg93)Ve%Z|@Vp^R=bOSTTqJ*!Fx_tn)3rpHMN9FBfu$hd zBUl*olwlIr|gjxC~%*iI_0^x8j z#10FCi)mJ^>`c?DT8OZf$ubb!5o-Dpuym&kd=y@q(8K;(LJyzR8jiu?2>cyx;qUoU zhWbkWmS*7_ej*WR7QQKd7tNPu&>~^E9l~_16{c$)t-5a1nY=-Id>~BEMrm%s>-H_# z8N*D6YUd9r$Tq!WL!mdzIG+f!=!E<&&7$wbZ^ub#o)MZgFJi>Ip5dgFBO<}sF>6tHndlm_^Xu15o zR+xqB1I+z1v4k+)!5HJgx6vSVhYYnSQ2bsaO!s^fj2(kz83 z|2&aY_oiVhj=X6+qicm0XYt6tjX9R^BHgXI%=SWaUY^^Wp6Afh>~?!}@{yMl|f5>n)~lV0Ub#n{2RCvvgA$?6U)P zQ#$Nt3zR#0g>K4&y9r)4WwyrDt5^KJcm_r-ps{)qTX$Hd4fyOEUP22uHMLmV1)&W} z{uOh$X;?eom_X*|n7hD#onws&U|zz!v>L6iXKfLHMj^ysXKeGM+g+_K0vVgJAQh>m z`I)H38@??9ROo7q3xR*FR5`{gC6c+*k6LwxaD2%@2yevLRGm&|mE%~(cHlNhlS8*< zoL=2TPu#S|czF-zMc{iLLrFROi_G2NN1FP^1o*2|bG+jHY1Txf%6JmvLVp@sAE`2) z%h=`5`eMG6d8xnB7i(Y>V_N{7ZVlm#cQSSaP%D3A-5+Wd8W7(B7JBp#q+c2!QN~9Z z7X@RK6PvcoM>ZO+^ttg4T3GUN1MReb@>J2Ni|rro}1z%J%l%;Bcj zYgdj53{~QXdc%jBX#5d0VCDtPJ)v|v9-0qR!Cz(UA4a#Umg9wtQ^Tlo73p`Y zuNI<|k{3qfjPmGVj2&S#^bx3#L)T;M4l~h)J;)n2hEgTWP2sAcGj7G$4lEiv^ zH`S2(3S|5zV|xu`eK2}DbMc{Y(Tkkm!+wC;v7HuTtY{j7+iI%L$XK)_fgLqfH@J;rkwJ8Dy_AZxoow@rz0GI!f(R**F&D6O;N2bjZ6 ztye*l%#V2GbXF>3e8wvV!Dan*QDQDLH+7*|!Pc0`MOW1+LVfg;M%ZiGN|pO@b{E$4 zk)_LFw|%s7FZBA4SMI&u_!E@-M|S&9RBk`?6e)j-a<^6P$tKUM3S@JD!dc2ahuzNE z%Dt1_sdJUv!)_0|gV6kC0!7NdHM{-aQ0`22I~~eBU%GM9fGgIvRI*IMO1>GgkKxqZ>QCW{0dn-pjPAWOJK zxqGwQv`x8RX15#X0U`khyVDLSH@c^c?>eH~*VvtkGXoJ`bVMQFeO|e{)G`?or2a&$ z!mRD;)xU2gW#>k_5fR0(VDF+jG~=C&)4OnoX8tkrB5>KEnIB{B0+$_{`5ES=UDO=i zRdto07~8t4IhyewjMKWxIXZx`3H@5+v9K#G$-t<(w%SX<0r zW$pr(+G4(tc`3wH!r~&YyGnH_^StgfZVXaoypFM_JKe61RC}nn-GVO-b~!o}j4xq-chs8eT8 zwKz^w!h;x_(p23suFcpEEb5MN4CC}Pe0dlHy^Hx%%w1`6Z4l5)34f8Xe=oTz3S>Nj zacVD~U6@Z|p4SWSHMI77pbI%T+#L?*=%uC!##YQaqJ(aUmD9wNTtw!kCsh#{*Jf-7 z7Beg3W{lIHJjQ*=84dGD=+&u8r48}sVpzAgL}Ug?$Hn}*gY550}C3!z`1hFSP& z75pG`)6+^{jK5)Q2Nq3&@g>ITPg7(jgfqU%*z+{9vIJf0872HL=4sDhyEMI=YjwHu zz-8t2QQ@mIH}z4OVI0ZW4lF8`YYSh-nRO|!mbG2w9QJlRt164VCoy(EOHG@g)7V~6($;&Wy+GrdKodnT zD!!L_(TlVjJjmToakp1aKh)P>h|pj0@0q9e$Ii)&^(yl}m^;DcdNo~z_o=5;ZA(|{ zRmNeA9qDvC3Ol6I0V;SZbGT`IJ*?!j6z{`4EsJI~MQ#eS6(7R9Fk4O@0gT5nc4yPj z#?}_W16Al*jBUbABjT;m0qnDceOv?8eq)e|u%5C1AXFJ{I0v}h%$s<_4^=}K<7CEe1edLUm=e>4xoH@6jd{q3XyMacUkd5y2h#ipMZ_J9_y@WZS^z zxj^yW%$)@$Y8HUH7^QfYmyc3)FqT+aGsofezox51;224`uI0yB|YXsvEG<~w- z=jja*bZwl~7VrP3TJcqF$SXix`9TXXMYFpQ*MNk(ExVmJE79L^*0v8!XL&6AJp>eO zC~q=7ACJoOFI0&hWA0x_>jk&ZR{SP&`)oB3Grq$(eKxg9K;_xrP{Dm0De?9b*`xqT6}YAKrDJBsHqcf3R6z=IsOly;|ri}iQ<-<4=jOKaQu z_pi5IEZ{B+fLjgm%zYaxwUoZ2hWK|?dclls@2bTX<2sDf-c^e&#?g!m--U22wgQQHRieEZ`!D4&jrohr)4}CgB=f<{i@@b{#=L;JOUMzYuFR(~ zFI`HNCn4EoD%k~$?aMGo;f%}6S9!&Qi?c5;-_G0v{_BSj?@)3+VQzCMoiYBFahgMI zE*SsFxX?krbVO#BD4^|xHr-wGwhpRsL)$_wKf zjMG-A`eWRbap4NCKjw+do#3+mn0H`~OWyMI?>&`hcgFsB>zp|KWBe@R)c4de72_<% zMelL#G0$c00++SNd@}RW_h?Bwj034FRjQl3;#Vs1jCXm(uVnGeKlh3Um*Sb9_KIIg z>)TuVJie^5UdERQZ(q;TQV;6$UqBCE_ymYl}LxF2lqAM8N)|lw; zQmc0vy_Ip=8a3^3=#Ll|A#`6~jA+ci_6lDkHvj=^mGJ*CPF+j4bu@p*e=sgw%lcxj zHC0-7f=hid4`%Lx7;HrY)+y<=7^kljR{+Xz6UOd!VxQY0V7&?*$2e`hsyoK*7#FVR zyfE*=+zBr8!u(n0p7pBkHYn+tjQuyLx?`NnICTTp9rN+b^ERj*5aa2L9UG|Y1Z17@ zn~Y00sP6y1O7mUDw)a){XZ!)tEw8=-*9Six>m!Mih0-=tQsUfzef6I`mD z!w+Ka*`(C&RAR<3_IFaNt`F(YsT}SIhl5+4&@=y*d7e|&gD+zbK6~_twOy58+1rh1 za;dsmC3}mxX|vj>G1jA%&g{TqqsG{uar$N?F0QgMuf@CwTwZoz9>v_VS(Y_$i%K+s zvHupd)c=%SAWUVP3M?)@c!T$1o(FzrM>$Vt?gana2EJ8^f5|I;E5u{35x{&3^YpFi z2#fI>j2&Cm;-2wx#%@TF8r!C%Z((lQM&rcgO2&H_7jC25P0I17j7t$(9#w5uQryh* zwySQ#_$*_`c9j>#KQVT1=e+DtQf@Fe?NGJH*xa0J4_MS5<7$l4cW~`7k6>N|F4iRh z%o{Lw?NG-<#VS!dWB+0`Krn92IJKA?Ci5ql=M__{Cq*Y_KAyRwm}WhRC1Uz+C4Lrj zxaE#8kof}UPH@?un6G5+*{%B19wlZwWB)xg>#2wJCk|INM(HYb4`-WsDD%8Ms)88T zW$f6aDu{73V>hJ8#`2-cMGAA%hpK`YKgQS&EGmd`FUIK~as@H($Giw!b}!~bnR`A| zMc=Cu9mUvxuc{!%Qy8c2RV58%{wDK0aM`_>FK6xqm)&ch62HYOejj%)<{vRn->144 zm!xuON{+LQnkl;0^`(=xScYe%{=cTn$;KG%k;4l<6>_5m?GnlNygtWc72S>zJqo7 zK^6RxSIj|*d;!5fQP^Zx`n7!m%|v2oU>?N0=o32q0_FkRXDWPSZ}`vTQCk4xSjKsu zsp??dfwAK=SsmWcPcn9YMyFqV$nlBkkV_^@9>%*Fryt_#Vg3p8 zB5=7YWBwI$7r0z~GC$9}^pIM@e6BL{3uD{oatRa2_$K4D&-p}&xfZJw>-b!?M8iOVO)4jU20=oIZoB8`xsZ>aV0#2x#_rSsf-&kwgYF2+q0NI%^YsEH(@@6dFgSr zH*qWJ6Bwtu<=!NK@dCz$Zk0#IOBuV}oX0Pfl#R?yU#dJZ-p|$2ulLx?eu8czN?CrdtiU3JE^vGjHfUz zJPG0Apo;k%=1y>|g}htc#f&`=F3zb=sWewJ_CEzF;_RLI7Ut>Tay8F z#%bqN^)a5zxbPfTAM;tvo#1jQ%X|@Y52TB`)Xu9!S1|TJFINO!`~l==v|D9 z&U5WCKgiq#E^CkZH_S`VQ`3A5LTMLNs+C)+>VR8a3t?V^x#NP`*)wj)xb%Wjm`6!T zWNh;&g)x5IE8IilMm}V9UdZ9jb2zwF2Vh>p+zBo<$ovoH9wa9;cv0oz4rBj|YE8ws zN|GvK>P2(_akm@uFy?s|)pCV#ea4Q9YPrJL&e#o%OJo7xt2Em%wtcTk&bSlfwC`0@ zVf+;1!tc4D%(Iv~!E1=Cgv>`WF9kod2mC)O)mOdZ|D$Tnm-&Ju8ZZJEJ6E#5=RZn8 zKd5Ni82kUA6vX%w#;HHxh(uhwWPXgfOYr63mz0=O%v z{!Ix#z}yKgE`kS_vIdyjgj-#AW}hqU<0_@~xI;Vmnu<`RmC}Jtxar-#*62X?v9XWy z8p`zoI{)t~MoZ?Yzbhp(?#8(2cT_lbLVU7#IG@qYd*X zm^;B`KV{yBxd+n4uzH=#&e;FDnwS{pF;2a%G{|@Ym{yj$3rP22%M;dDmxb`%Bdo;}(q5{!)oE zZpFCpFRm-*U6?z;WnD4v&D;a&qONYMMAI4j(D{3+&X;8k#6vX^HvF9er&=CPat=FUoV8cXm1#?u&k@Br#;YYTkxvg_=JY#(ff z%B6oh9-j;|{oNI*GLK}Q1}<~Mydm>KaG4wCcIHk)=Ef_gEn|-m9}n?Xm8|$~jo7vL zTfwWA^QW1og3BX#4nKf-9{8|2So$;1VeYchFLThU7>{LKir^dSLA`6}i`zVy7WZws%O9bWMW-g*ecS61RbWu96Y;`MTVf_WjhR2ql>k-4+7 zQW|6NX&|8-j}TKGV(^6*I8CPZil?(|oc#JGU5M~D|4Er6B9+&_RTiTNDnso+mkE)Tz$c@elMzAuMgnM&W! z!F4<*`H_d1w==|1cq6&xa$8? z_1yj4z4qseKQHvU?|S;F?yBzU>M(t3F1_owO|9DT_|&HK8~$p1R^A_6_?z%~c|Snn zOZdvBHb9~uLe~}Uy0Ni?RXZ0Sc8L4jp^Ndt=H|b_i{sz)c4;HNML+iT&Eti4Xzjz$ z;ydHRFm7|F9`wv*zv<`2aO+p61lYrRW4(g4^j2!c~7h_;J6P0>+`zC6jZ zo$Wr2T`YV$KGh|jbF0G9&!Y2Pn#I>NX+81p;j8j)%An+ zAbdsMA0<0l`jhdg9o3Be6^|c-FUXJDR@LGsBzbm>r%Y6}J6W2W(7{gX)ic!U$=8DJ zOY-j&FVt#oy}<5KE|A{7O%R0eCvaBJcxL{^BqO4pe18sJ)#Hy9{8)TJ-XAOYiTLtP zcC4U_=$czycdT@^&A0=f>dLW#e-NLQ_s0tU@A$mDKM~kY8xsmMR%{LYqtQ+&9ynrHw2`0ep|dH2Ay zk@!9E<(;kB&r-Ixx1|n`dV~N;eK^`So#_GR1bO)e?LAe?|Tvd1U@hCdl5emUy>iyPpgT417CH1 z2lOqVR|RYW6|gi^SEnyx&!Kv$c2wAMVCR;+NnfdB3aTKf)K} zeV^jL!k2fmK1Kh6uDSH?$n0s=wmi_kgBd^ei`P7@@M6~Dd*X}Pxa%|W<$mS|C-ME_DR=5VOMla6qJ#eNY=yTg3@|?t zFOEmOqT3M%n!g91Jy5ITUZpt5{EPVNL5g?7<-z9Pz=sF33*wjIBYD3I;@98{@_rY@ z|AsFg9CzJVjfrkC&|0CYAEG{|fo{A1`8{kf&{kt#;>3P}mBt^0&p5xgMs56&_}oAn zZ_y{BiwgGx4t^BAGSK!^^hM~p!u^0V$kygcd^pG&r4e7mM}z!4GL60+T~fF^MJ3_0 z@YO*!nLNa@KZy|2Yd-PCC{{uce)JDrje9J-B z6}dyL$9ZPvq$)2 zK3zG|{4e;*k@1|DG!{fd%&&Kd^{hCaTW#px{&@2n<3q>(=|-B8%_ylH&-K;`w#4@M zlzw!$KyO!sBh2raWO8iJNhmom$uuHfc(*P^PPGM&L1#|oOo%@XUvfU>E>TXi1umu_ zb(+7@YmL4tK6inBa&>D{>#f_PrW09p9N%%Z9>JV$IUc8^aysYzGtAFTa-YHZ4!;PW zmG|d6{0I2Fyq}8Vzs8s3{c(=}312-Up7N{O;7qHw`JvV=*)uiqK21X|enWgo-d&e8 z;yd8$XU210`-`zMHPZ4PPMp|o)ZvFE^~w9q!JmfD%lpm2pNlWa`^~{$hOdsay?&Hc zI|Ut#vb{cyzXhLhUPE-^XX116{->D4KZY-lvdId14!WjrKUq1;s(lroI*YBvzlYB{ z?{3cGKf@Q~`>yvN|8tUGUUSr4(wVcZf>wuFH)YPYVHe#2oj;pa!|#AE$@}XO{GRx# zi+A@P&aw3SrG&qf#X@z_P$;fa14T~ij{h38tW^YN*3tqU9R zi}BfW<2moRJG|#v{Msb`JiF_I{x>>*p4z6H=69*{Eq>F%)`Q}B#U7dq;WPM>{M=r8 z%2OF*3+zXM=lJZFZFWvyU?qo9QoFzwX%}2%1t(A-_PN@H7hAzu6o{=Ldx;f{qd;sI zMfi#MqP#!F;cv!QF7c?B@Q>jO z^1jjVFXGGNt5#d-8)n6CYh3FI?Vw-%Y|REPg@~@7U%ul-xu~>aE$=?d+{~- z&V95-S6Zeg@!2aiV(jW3Crq${c@&84WQKnSpObH^vq!tkRkpy2WPz)+fcv@mB=cY3 zQ)3v_)lyY1DMr8_=*HMiZ1 zQ>@@%3W`%~z(ya5u1#TwxW>Xy!Kbcahro|X^2@s&q7gq4pT8y^`jLM~J>?^P{OEr# z_A1v}`nL(MTx-WV`h9f$T6UA`EPNF{yv}x$H2xcWB=1Ky{BQVzygw@Nt&XHIuk%Mm z1G?Rjary(jT@g~8y58>WU2nDTjLuze7b@u9=;HN^;`qPeE6U=YV55&h*A?FOGVSV9 zX=!|BYTQR>(nOC*vQPE>mFNlR+SGW>^GaT{BsZbMA`OJU7az$l8m^0S3;#R1Al>$4 zz29bf9y+)op7W+w43^trv012cXBz9jEwiTEY>>Meej*ce;-mFOUj*M0d{Qx4)bJK8!U zjOlCqw)jZi_cgvdz98@W8ow9599v(b4?x#kde_&t+UgyFPu)si<4?qA`x{!x7KHk)yvUrf>~+|M|s zTl#nK+38B}W*qpB@CA9_X83RM<>}UD=-?QR50}QxIA&P-27GP?GY))vd{y4hIBvK2 zE%DLqbRoVgz98>c2j2@{zTH*_-5*_3xbMO{Ed5}7>JE8#xZ;Q5v+{n%fj=Fem-jn1 z{ycoi#k&~?{xW=B-gn}iR`1pL@J`k1W*qq2@X?*|x_{~T&Xz3xS-jZR2mb~>FTbLP z<{S4|{BnHl9=3O;`OopGnOdLzT2K5>_=3E@Sj9IxmTr`H7pv_u_gbR16o~CY4c{4` z(^nwe+b`&y(M5&(VGiF5uRqc-<%hpG!fV8hCQfYqcb~1sCHT~R^dEi#J}dA04?h*3 zm-qdLza3wa_X89D0etm7yL`Rhs(lI_+^?-4p=QL-$7kfP8UG*u7QP_w_g3QH$CvN7 zy%oJ0T~oN=+tcb5MRJ& z<^9^=ufgZ#{o3HC<4f|s5ApZmtFx^SAF^s6M+Xnlhxixp8Ry+?B>e06oV>q{gkOR$ zKV*G~{s>)Dxa-5lhppOg@u`R7DgSmyIKK69)`w!7AmBH{7oFF4kgTY<_F+wPwMu7^Us(+0$+Yc>nY#*S@S2wH~j9tG1W<*qe7jNgg)z^ zM7Mv=A}>Lw9LM{dp>L*9GKrGPb9PU5jxBIAIx|PB?p~F`--9p7FWT7+Hgj!(a=>;oTLxDIR)K%;BqWNF(!HXO! z_;y3-E_r`X72g$KlJ^&M#fl}`j{>p1{V?DBP<$|78{JM7!#9xaq&$rhB zUa~X~p!Mr&|AG?wC3OBJtxgX$X?}sluSg0OsOgSZwJ)3h6(7E=^X)FWJ6WTk!!XVS zFWZ|}g;#BXUU+dlcd_=X*UTS@&%EXvbeDATbt^cRg5v9T35Xt-rfqD(NZ!vp@mt{w^8Q4C?}jhychGw2I!V(TU32N(AhO7+?T=3_ zvP(pCgw8FplP`K0y10mwFaC6VMOoY>BKl%u=M2?^u==C(wQGur~OO@R7V<8~hgdg1qlO{Eqmte(>zN54}6O=F+gHrSE_cAh&~Tpug1$aY|wAD7F)GfgUcYeeGhI98dlvqClK(v$65HcjpJ=^Uc5J_uc;A-TijvCvjK<|dIlN06zs^ zl3%fxHW@zyU;EG>F6}?EG|!?#$Npztjg-7WN%uZdy|I$_r;C^am$Dk+o6kJg)gtNLl^x` zQk}y6p}X3u`!%URcF*#^uq;c^nJ?7F`W0>? z{zH8E3+qDk8gxzJer3M2G(X}~U)su~@hykbh4Q`&@f+jw^1ci4o$)1kf4za<0bl*n zt~b_LwY#B%HB9vI`{E;c--Gyr@dbI`gZSg{ocDA}z&=H-hbGe5Plkj>xXKS4a%HLajkHmkkljs>5{(dySAHMdZ zHPBC{k46`N(se}-we!#BhvVx%>kh&i4U4~+&nNM}D82hFG`Zy&c_XX#&#AK$v6Lp*uAhOk}ur@19bm4B*l z`>IO(NBEMwd)200D&P;yQXr1!-l_%g?o;2}HPaV}<%g~Kk6(u`%In&sd%BtBX>kfY z+pKv!>N$6jLqS^##PQk<_1aITE=~LXmG!Y9JxcozW?vLh3i}R^dx-!=62@9-;2*U@9sF@AH(P5-A}C>@pJIS z_2ZHI>X<{nhOQ{w{f0I1@8aw7{@SILt(7Le^-wB`DFdo>WVc&M8jV(Td7suCp=MML@73@WU*a`~mt)L$T z;&{c?Zix<7Feq7~gPK~uBWegXvw|bz8+vH?Ib+v`ts6U;8b+-CnBnw{daJUz`BU(f z&CQp#G(QTjKN98Q+Z96d`ir!F@DaQBmbEh5SiuAe#P+im{B8K6y!+s88vh8sF7Ll& zvaRJ=fRDE2@WQ``FUh+{2<`D-CV3pkZ@r`2Yuj0-Unr?;7ccLr+pJwow>r(Xpx7nu zw7c~7rZ+|BwvUH8y@Tm4X#H|*-N1$(?RPZ2J34S2uUxKMXq5D)q`IRH$Bi`$+sT$V zD)BqTeYV%A)YbF|bh&GD|MC5FH}hi>-%Y!ld;feF^Eco#yJ)w)Q|({vZUv7f`MWa= z^f3P{KJ3B%kAEE>$@~2uzYJfH_h&l%8hp7&Jmq+;f5y@Wr(0`gGYWrN?{0;=TEWH? zc(zwjDd|LsepEBPcSHB)sebXo-hXjkNbPQ!#t<*|w*wmSmnBv29uL%G#5DS9bY9_p zK8n8yUy}FZGyZOTRo)-iy{y_t@Ify-u+#YG@EPab=?MQSJ}2*PfG7SR__B-FpGr*p zN_ zpO^OyhaZS9$@_-G55reoyn733Ps=|7AMM#Z?mXo`el)%!@6IHRds+M?_^f_!;`$Li z5uM+Q)xj6>C3(L(_`C2`dEbwHEd6YJ(1(7+KaI~g@A?t{52 z!`I|}KlZhHSL0KCHH&&k-z7Kw13KGRA8^-sp-gzgnbwVB`|Rr87T+G9+M8J*ehYkF z-oJ~0?}o3*`*#ucu{^uuv-@bEac?=}_s5syf4fkAUyDBsAMC5ucQ@YgL-3KjpZ?%a zPV&h6N4)s6@O2mOKH9LK<-ZW0-OmP&c45{EuAo3{^JM%DNd@w4-LuwwKU-i11!9}V z{>}XT_~>t}DgLP>k-XpH{uaLgAM{rRzi3VIi}5*m_x*?V_?7soV|&4UfMr@kNo9cg zK)-NGR}Zj)pOQrmh}Y@QX|yXGY<|6w9K#2z3imQJep7r+-j3mcwm=sOG6Ok=@jdZ* zdH+#g{Qmf|y#J{0Aj@+EJ~fEF3qK;sBkw1h_zUq>`QO~%Ejh&UOic0|qO-hv#EQQO zAIbZ-F7Pw)#Y5sb19Y}UKar%@-;e96q2N%Z^f66j;EZc zmOIAuEOh=D?GJ7&KGyuR`0}xK^feTRSix)Yt_N%C_{-C+!-o8E=KdM~>)?it@o`;S zZ`H0k)ZAyudJMIeZ#~R>JwA7!mTx_%_10-raF#W0G)#@_zOaLD#24h=iPvhAB)e)`wI~KM11jhy8uB?Lst~; zFF^2j;_LFd0O`?aYcm@io}eSf-Dx<%{4@AS-jAdB1^AM@KfU4K##iP2>Fq?zvm76s z$kyW5;xqF8G7`TIpO^PXHoooI)=O1+e<+<~`8(solXL{TANAt9;dAo7)$o1s#gnYn z(1)Na3ip?hIZJ;uKAY3(yUR#?4qukH%gEujz(@)*!|6r*h4`GjUmyJC_~LL|A9N92 zQMm6#{0w|u-d{$ZY}L-fhbPmG_$Tp^yx+O;^Y8_Ee;J8ih_A}~Zal^EFU1F^ST{D} zKgDNGiRT>crVIFgn!s(;A>}Tc)3MybewJe_W1H+ z+&#P9HFAwMH7iLmn)6PLf+v$4Dj4TZgXh`;^O6P5W!NsBX9Wu>5W9PG$>6XQ9i4Ae z<;L?ZyoRrwA5R~x+lpgMe-k%5P6P3>;~K*B1*U#WYP`S(@^pBi6*P>t9U;6hUZ@9b z?Q$2J?}!)MkMZ$4;Vbg)&$p#7vG^=LxEP7hu~}S{!d1ZwfJ+A__2&@_$%=x zc|YqKXYteV!8kRUd)W&A7(OfSE-c%Hm)ZjJDG zX#-S2W5Iljyfu*iV4H8C=nC^&;>B^_gSA3en(v;(U#S&xUwp(LhR@0S>puKwd|AHj zY{gHoJX7(d2@LS~yYN+cKQc_T_%c42Xd^=!KOdiQ-kr|y3-LL5-R}KA{||gY-XGFe zS^kwto~v|(x<7D({{ml^_aosXi~j*1PEx(PkKKq5&b9U|O^O#Drx9kdg>Q(?PPStx zU8A5A1+~fXLcQI-D<8MnReJk2`WuaKAGiV!fNKlluBZIPU4!sytM>}hi|xFNzZM_K z`vDst;|ubBHiEwgUzYcm@A${?HJ9JLyfDS;or_ORk=M%$jriB_*(r9Fi(Z1xE8Nd8 z@ilx!-k+cFYw>k?-z(QxwLjy-YuH?T>+`HvB6&9fPvbk_i}L=q9DYZ9UEW`=U2FOG z#AmNnes}i)e-OSP@0$%j1Yef-&4xb{Uvqifi_h0t{`2s;>r}7%$R2(?zAEo;GF)%* zlkm~?bR+&od_mr?5B^SkS>CS?{t55lb|N0c{sWzRUk&FzDzeOc!x-zu>@xMPJBaWd@dbH*`H$ZTUz2y!jK&p~XRjpB3fl?M z2cz>V=okD@d`aG4Qs777tMcxQ)A)gc-6Y%3zC(7My!%@T;mh&zbN_1S zW%>75KK#IT;xztad?fFOUi?@1g1kRw@jv6s^8T2`x4gibvF7r-p?9UNcM6|cDesP1 z{O0)VN^36kPUyVC{m_f=g|Eo_p%Ti@^6SweIoC=5x*Het2d?G zePVPMbY9_pG{R@_C3!#e;`hea<$X75C@7u)CK zR$HDzl4rHN`(il$27FQ8-#^CRkFUx58@8WXo@epdPqqGS)Lr*<=h3z%y z2hn+j`@IJLcYI0SkCpiO_^Q00oquW7zKsvQTSe_Yczr-IP2Tt7*A{;rKJ_)LgTED@ z{n}OsJqw*zxbH>$6Zn#Rw+`BeE&DulRoZvrH|7`OgKxCr0^fu$%KNWV z{%Y})@xiaUs(e%N_#5zf`9%+D6kKQVci^+@n3Lfjz?bChEvVmYfu|@){iX%nE%MCo zRxqCev2_l95xyYrI|si4UzYbr82&4KP2TT{e^~zC@u@#_gtz1~_*%V}2Y5~`e_)G9P zdA~yV3HYMCUm^UB_=>#mNc^4ny1ehm^{n36_;5Ws68|(llJ}=5{Cs>t-k(D7Z{e%* zz9ZMS{O{v~^{pd2;=jOW;9ujdr#0-EhStB7!$?c{`-=Du_?o<*rM9wKw#VmMDc)VY zwl=>9KGj-lrFll;2jC0x{+f#T!AX93_eeFJX|O~mQIKhf*W9QxUR%?n(Lq~noxU5H z_yWG{yvF*(Uzg;U_xD9NusqZ8(FQHzMOSG(@w4z%`D=ca-_YV8#b-BEe(he3___G< zhVks1b!OYx!e2tWukA~>MlXu*o~E1Hd)}fq!BQ5vgveSd9(jwlGi~~lByU>n?*6KB zJM%vziQ8#C-2K`1=39=p{tMc-h&%80AHNyCBJaPdyotqU@Zlzkcems5{qc4Aar#}dMzBz?ztq|=>EPehkH$FrqdZ)y6D`0iMn|7=Q|zm=({h)iu2 zcfCyswl@7by0mpX(&=qYf1FgeZ9LoQE~bA)2VLSd(&-&cH(o}Y?4Z8vs%_cP{C4=v zj`7Ip%CeK`-ss#;@ocBNnjVNQc8%9K-Ocm~=t{S^>kQSov*|p#zO(i>_kP7L=Evf* zyJ$bx4*(NC1)rDqQzqhP;7js;_{Kksugbf>Ce^;X<$ngBacpmrQ}QAuQFq1_{OkCF z{6lH2Q4h=XK0eh$dqywq=^681CO#9-zN6uQzCVip`+WL`*qu+i{Li;aODx~5$$CR< zTZHe0ugd#zY*(uF`Q`n6 z5&Xyaiu^Sb6~DXX`4>Leop!@FD_HwyoOkVpPvdj){+a;a8DEq4BWEwmzdb(c#mI@z z;H&b!ANR2Mz45^wtPlP`e8zdVKKNtsIeFiY_~H1XyzfW++4zdQ???P4_`1A5|Ms@^ znSc*_E8g8k#TW5;dEbxt8TgXC>&K4xhwxQ+Zv6OtI-l-owY*Mgu%}wdy|0B|fsf?f zdA1S%6~4A-Jof&E9^3V`G{2!kc*DzsU_!vZ`0M@kqAMkvsl@*bp|8!y8u8oVt9|2v zvow6|Z;AInXZMe%NT&yw9)PY4P^WyL)jPoaQTW^eahnGeexT_bx^$rS5&vU}gRJ0e z3Q`BDk==C*{tA3i-e0#IZ1LCQgM+p6yXzMG418YR@BH`&@fCUhrw<2Oo~QAdf!cZ8 zkFM|w@a2JVo7r0bK^DFQT^gigQE%I|Kg9f(_`tEfPfSU(E3BEThj8>BYD;X1PaWFA zE>G}%@sYfLe0i9~ADhG~T1uSI7EYqxPvO(XLUBxxc)&q$*e zp=*(v!G8$laEo6`LFRA{I{c^joV-8i@IT>;^8TR1x4P1rp(5{p_lVyZUz7J&Z%0_Y z9r39nv_H6~wfJrDIr%{kw;s@U7m5EqtMnBA)mf!Tf)hv}wiU#mj<2{1-Oo$#=i%$} zepEQpR&YE%JW?yJ+l^`b6nrG_X623eTkwS=<2CEI>5+urgDxxFPeTcR3}2JC4mrx| zol8OHC^`iHDn2LgI|Tm^d{N$a2!0j5BJa-zM_c~y@WIhqf4xQ7h;N}$#0?j@qvP41 zYCl7_Lzfjk?m!I}mStOXUD~(WG3I;X!((VQe1Ci-?`PNeL-AF4Kf6BG@(jUek5#;z zb>mOQSLA&!;?Kd?<^B2$u{@XH!y&8>elk9i_q~X}5nmW$y@lD_@0@J6R!&#t?k^mjVg4k1c!q`# zHzUQLh0n|T-xT04!Pn&NWOAk@x{89#nQCoKsT=V(;&W%lYvwofXc%eX_fCrcF;~0l z(-cRe*qKII`K$Pnd}sYMD1Das75Ktgig&NaoO#cQ0t#Pr?h!Xs@Wz9~S6e{Kojayx)28Tj5Lce&@w!@Kt%Y^EO^?`S-^Mm&aXSQ?=-W(c$F^ ze@=6&BP9NNBtB03S0iymf(axL+s==_9$&cJhA{MP=(587v5vnNUz7L8`W3d?kKD6L1bAO{C5biwi>(RgR6Cp*jWvU-v?j3I_^`|*l~@84@9S~ ziN`u!G(8j@72`S5?Qb%DIy!W0FH}=9hLXxn>}EIH5?3Zm+^j23J#ucuUym=`9M4&- z(cl&fza5>qMO)=wrozw0m*joB78zTf`S@IHw~N~2-@(@$`>)tF-fBy% zq@ddd>LPr_ZO@s%QF|B zEh*kzu;O3ASLA&+;uquV@_v2pwmcu;!@F4@{91e@@4FHI6TWb_btAg@^>m}ceK+Da z!q;4ScX4!&Rl6BJb&pol-HyR`!RO?CFXA)!qP)Lg#b@yqcwoH$O3im?S}n&>8q8E9 zxqG1aQ}B_z-#GmF_`*!vIP?T`*@d@l-KFVfiS5@5f*dbG-UZjD+KZ98tr3iH|KZ>N z9(d~lz7+&vw^?}yLGyLV(7@q_S%`>buz$DqqD zjeBg0KN(+>_dCx0R_*!t)cxG%#9x7rI?M9R#0RsK$34cxKZ(!E z`)0#0z~|+Cv*DNEOY;6tL_T2oSK`A5)NJmpKl~T?qWoItAGG-I@TmvsM*JW6th`?z zd_&Q?H!ttk2j3B2lK0(+-xgn$_uV+#>g|CKX48%MzW9vu?n(}S06wR$1H0RH=p)c& z7w)>*KzS4_mg``0(Ml z&*wUIK4SW5bm@_JtkX}Jeg$27BA(;))20`r%TLGaq|?usUWtyLv4OcGel5NV{}NyR zg|^^XTWW(FIQpK|T-g1(9^V09k{_jyO16K_;&;Z^9NQ;&=UB<^loaNu1@*PbM*RNx z`kZ*-ms;KDE&OP7@p&fUFPI;W4_?rDYP6aTKRQYCLOf-S(#*5)E0Z+yNb{okVv^=X zwT7mkY5W~Yyu9D7D;9qrK2_0S=APxwH~(}JKR;f$R@J^@`gL^n6>GLe{Ac*mEAhau z6#lA(x0q(FoO@N-^+#ONubJNppLtCK_B~old>?#XzOy^%U$^+d_~3Qzz3!b3{BV3( z-VYvcSp29Y{tXTq{5X8Zc{ew~UyIMl`?DJU4t!DG&rR_6<16z1;RgOud`;dDiVJOh zp2MdW+S#-{egQt`IKFP29@f2OOH`9gZ>c48r=;<1^B>@gZ~J!*((jo58eMru8`e_| zR5kxw5?zMLljZW*km-PN&1sy36+ig1hcF6+r`lhP>2JE}Gz^)XC z?KdQ)C04K>1!5cM@JHaQ^6veF^iqq@;WJBhUUJ`AD!pd~qmxAMY1=yM0DIs3IDGhi zyzslfn0QZC`G23puNVK-NjxIo^W+oTqyzsdzVN=C7}1N-Wrb@*O&)}NfUZgVU0|85 z?U(q}GI=)*!2gKP%KP&NzS&KjKji)S1HTcz+WUX zcg08YZi|O@?3UpcF{yc=A zhOf!{X8XX>&%~!bPiTqSDknFGCs0;x5kGb z(Tn(<@sYgi#g6#B@dfyhc=5W1-t96qOE;8av0dupN8(HJ{>x>VRkpx|$pWjGG~x?M zJ*%u)(M5Dw;l5e%cjIgF-NM$rnhlR{_;@w4!GdEadKXYeI?-)#8T@l_Y^J}C8t!LGxtl2{|uk~ zl5WI*htJFV^}+v+FUkA$!EX>-_g3Y7H?Fb#9q_>#b%47R!f%VuIPazd_#XJ2yq^x> z`{0Z6{+B%X1MoF@-;ryr-ox>!wbqdx@x$?1cvL*RWt-mZa$nhEV<{F}_4vv7qP(At z;A4D6-hT<;Ys+&lKKfeS;3fs%n137}exuFMX9(M+>Q?X)1!6nQ@Qd+T=iQEnui*>w z{>5Yb8hlmW_rt#||2ll|FZu!B_Ezh+jC|j5`tp{AZ;sCWD<0XZP4{-;ujaeq#qnHy zl_|Z>eBUI^I-M(8wb7)eSxf(B`~gWpvzFG+_~Via#xdtuZ{!U`l#tO<5i2d7Nt?~2X z;jPJYq75rD|U~;v^pDF!TS`5<6%?u%5NXCj4lUzF!?eMvPFAoj1!DiXqjavb6=W#Lb&l7x)hB|=+nC=6U*0C} zx`BMy&HO-o*exC@ze#-;^F#5T;|;sE?$$1wv7*x`61$gncS+}WwSo&M$nP3=bzjHL z_c1>q@qOZv^6kR?%umCM?G0yq31650ZID_cYw?fat65d-Zt3lB{&{?M|CV+Z!oPyg z%lBQ{(52a%@#2lzZ1w-#Azr4q|DLGU#D8@*ERlEP>72!s*AIXA&G1!uf7tc2_1g{~ z^wZAfhCh4{e8zb<{NeY;=j8qHhd&5kl=tHg{wRD!-rv&1569Q#{d=;1v-LR}pZy!{ zg})e|m-oXxegeKE@3$9!GrlVC-;?cc`R~Q2`s?s@@5$o-p5&MJuL|N{!B^z{o#p|S zXDL1yK)c~T#b=y%?S}sepOg3R$>RUS*W~?svIkiHHZ!arqXTqwxnCII+vBV9z8?>? z_z)i)$ok;B;WN&=^}+YS=j44q;s@Z1^1dJOhvO^qz8~=?;Op}K(&8XnpEK~`L5g>8 zCE&;4^YXqQ@lE)Wyz9q~_^J3Rd`CQgQ=JZjgRPo}DHhvJV*CsENZ$V-1^*_#ChvyD zbZ(F(T1G)`P`t2%#(`pF{!6?#Uh%uO<0$h#CGkhu>7o76=3Cru{T4X3u_-#%iZ-N3 zY*$tIPWXbnKU3mEd{y3e^$^RmeNx2`t&;mYN5OGc&?_l8j(q^%AD?mF?F0Cu@HzRl z{v0vP5}iUpI7|nRt_$1a&%;NK-Nx;lKEallNJ;4gE#W>qd7}B7@WF}n5B|<1lf1ve z#6OBJ$ot>>;a|j;<^41nU&Ytt{qL<$vU)$jXHRNrxA5>^;!E=W3K{=1zAo>7@|v?e z>)m19nainfM(LK{aPy7$lw<#Qz><<}D5>}o|7Xrmwq-Ju)K1ne-l!91afB7@LxDK{ zt-lJgr(3~66o~DYps6#h;7AI@{#O?1k>*cM{75yQ`MBUZMDD9 zd{=zkvH!qy`-`k(4@xSI?a$L+Y$f|sQoC4d>mGw$V*U_(>Jl}!dkls@8lRK*-;lx& z!DxN*$QnC9IOEU)J<#TJ8gn(!IAjX1bKI> z4Sym&EAQ_X;LpV8<^A~ze<8jk@8=!(EAUl$KWI<1dauU^6V-BVo`s)*&&c~Je z3-W#-#6N*AyFBiG0e&97ChxcRDy#P$eCjGq#@(Ye{D=5R-am4~f1Bi&_jk=FS)M=f z!6fBzci-_Fm#m$$^1j{hTjBHazTNN{d`aFva+_@V_riyh)o$+58oociDDR(5Ty61( z;Zs-BkNBbZth`?z{Hgf7yk8&u7<@_op;!NJgla-poz}~8=_yw2HTYl(-H4Cz8Ry+8 z7Jm;uC-27s{G<4?i+A0Ke-2-hciq_W8mspWd=vT&En5Y;%_4!e`yjg?@!kFtMGMsKj)lod2UJaOjqN% z+u8V8_(m*|jGBLl zy8w@7n)@-Sbf!k{j8^7e^Ud$ER?gkaAbp?tjqus~bPDyKgP3InohXQAaXDRjzzVuh zP6d>#I~2> zhv94TZZB?*7BSi7MYnoYR@X>8WrLo(@;w z``|kK1RQQ;%g=)&hoh6tHNAPQK z0e%-Q!ym#mcnzFsZ~1&7`$}?~l-XG4xgWwW;3|xhW z!$C*2zgvNG5Sflv!B{v4Uj-N88{rCk7o6J6mY)r0;ius|{2E-^OzrPh;Gc*Z0iP!c zI$8P8a1m~GpS4&O?f?g!Eq+Hh1Mdo#;l1IoX>(iP07MBs0=;F)l6h%Nsl z9Kj3VBK$5~fmb_r$6p=sH39iUE#WV44Q@WmcDmeQR=yEjgg1jL@Q!dD?g@v3ZTbDg zO>S(D5Q7LPz{kL4_+&VUEWz1u1|APr;7M@maEp)OEd0PM9sh0x@`&dMD8UQhD*QGa z9AOEU!5R27I0t_R7vVqP3f%Sq^}kzzI- zTRljN!D%=gVijx&=i!~;61-Ouf4q-x3JyUOPp||h!POIu&xNxm8D9aH;hW$vXXW?9 zC3r4eKiSIv0Y@VotN&Lc3a47Yk8l-UZ? zb(wLT#H%@73*HB3t~Gu*;Tw#fhKti!U_K(e(E{Fv-Ahd_;YzpyuZDx0to-L>`J0W` zf7n{6a=UQ~uEU+-(B0j06>N`);GS>+-VZLrgWwuG1Ww&)`9{Dwcr;vu$H7e%#I=Yz zJOj?$WeFcn62Q;HHTX?9ELr>qa0Gu17vP_a)&6(e0?i(=CdBJRFMs`M-kbMnE0z4Tm~y zx`YS85qvCMgwIHphcAY+I)}LBC&LB!)<-%2mk|#VP=lXH{sT@uVfosqBG6tID!lCFt`q%3g;^pe=b~tFNLe{HE=NB;%|X7O^ACCIrvey2tNl`;8)<(OO~(- zXW<$gEU@w)lI7v`bhNk@Ys$ZD0U;uM#keP2gbz&0U$gSV;XFJXF2U!)RrpFcc-@x2 z&bTSaAZ{ff2hW6ya2c+^&%<^2bvS&(Dp(3f@W*fo{>roZzl!*UfMB5|XwU%RnkWNz zg!AxDa24JQ4j0+-2g5n|IJgLpbnK453gUbMvTs^~%iuCR8P2?AR$`!i(W7JOR$bMYsgt z0axJ%;qVjXQ~kkHh{y?X1unpg;WAu<>+rvlO z&=;=22f&$6tvrIu@bPdBJ{?YdX7LxoS@?1|{~721>kuUZZiB1vy>RfkB`m`cJQps& zi{Q*!i~j&F!QaF6wQ7I2#jT#RCd+7Yd+3zf1JfaBS1gE~Y z@;l)i{AdynzX(_0DqM$`!{HB>?^ENZAVSm$D8RqNWw=3;Pd~80o4~0bE#WqB7VZug z;l1DrJixR1zm7PDfbb_vcq*KOFH91^SHY>DE&dibg71e5@H223t~hq*|I9CzU=aZ& zcqttIYULlp5&RWgfPaI_@cNo=`xb-KaB7|9+fwY$|5?ON1mxjfa0Sl7bvS}k|F(pu zz@+>1zsGIHP|85N{Els>aK(M~?J8%Sl1Q+0Xk`Qk80$U7k1c$9G zUq?8Cw|znV?^d9I=uSWx?wcfp4}?>#E#Z-H7S6$W_$;^rUj*0TE1M8ugC)EPj^LSa z5q>I30KW`p+t~6;-~zlFF2g^yM6RtRXqaa$Qia>W(FRt&6i>m^Isr@I zFl7lpf+KhhT!4Ru%W#Vq*$Lr|;Z&pL+Z@h1R{g<_h#~u|7>#W#D2oeECF5xhBEfOmk)@NULUK@G7V0jaK5 z!5}yb9}DN<5pW64!*zHZ9CovOli&!x)pL`^e#9&SD)6&Of}JhF>u?@^A1=dRz%}?+ zIJJu{-(0s|++kRRH+1ZezwQ>$fq(+MEnJ4X!!>vxIMu_JKM2mkN5OeG2bbVcVt@Xx zA}%5z%vi!J;0T@um*IQh)UFo)Fr0&*hl}uAa0UKw0q6fZ;tK-8-7Mkva0LGW7vQ$K zd9{(6v7bOeywSep4Xm8`0aCsl&7ZTprco`h* zXZ&MQ4mZ9^7iX<}7r5NdvHJf&M9|*?PJs&pj0Osb{;P7DMXW$5a9WKDj z;Id=YAAF3c60imi23o=&;0*jHoP*oE#umaI;0nAgT!(wW;ULccdm|zVb$xIUT!N2; ztMEy1aEQgbd%$j=$-qr;9xf)!!|oojiw_Uw{9i`o4z+|8xCk$XEAVnSdzi(43YXz; z;mlww{|(N;>+7DeTY=(WjlXV-H$hYg2;n-sGaN=1zb72Qe}fC~V7Lkog@eOw`H^s{ z=>!v(A}S+{uYohC8qa`B@FPir)2w_hoQL0mtMF%V<#da8cgMyE-;#vSGyW9L!+$R1{GU4C0yfi=5WmLoj&Nm+mG_2g7Z@J^2NxM14Tl#S zkASn67@q?d;ma0r{;wdW5>SUrNy4#~U^X1Ve}@aOdz9lgpbWnS*WhJvYMkZ!vvGw2#9Dl|XuiVqT$81)w}hL*Ie2Th2=4+{ z;CS`{~Sb(fXm>pXbW5qNAO*60e%1uZm{?#;XM2TT!-I)!)fef zOAygCORx$qz~8`ScpY4W*Vhxyja-Y}Xv;UkS$GS$2=542nh<*;@;6z6en|iv!L^&M zd>EX)#duV*JbWo!g0F+C@GWpt5L<#f5h45l9Klb*1$Z7@h8Mv#_&qpvtL0w>XJPkD zSS{8RnT!i~4%fm;(+3B|Y2+unH3WzZTl;MeR z4Za@E&9DTw!Bu!B9Nli^kHH0a4qS%caO{r18e$0nsXHt|4bH+}!Fl*+xCFP*Q*qy7 z@J4WWr{&uc&X$aOi2eD$c8`g@2}sQ}9t0QQW8fN`gERM9d>+ohm%~MP3S5DwE#~}R zL)=b4>OM<23(mq%z7d4{#Cw9j?Hwmf8l@;WQjBL8K{4h8Np9UA<^We%N&i_{;>I6)KGjCeLnMnfpNw@|t zfWx;e{#`hNSHlJPYdCmYZ_pJPRxT*5KiB}QjWyT-D!H34p z-m?}d!D+Y#_khEXEItdD;h}J0A2tGpIG_3a0Xrt=indV zBK!wjf!BZEZIF(?8ls&Sn!~NK3bug@@Xl}ytta0E|- z3-CS5IR6LV*a8m{kb(aW*Wh_@xo+`qCH%edO1Suw@t1J@XX9Vs>MzF4o0ikZznVzH z5xgy2fOm(>@IG*Aoh^ST9R6uM1TMiRCh)Qg$;0(MP&cWZpMfl%v1#Z2$>i1ueJ8G_S(;W_OmaX;Q6@F zQuz!Q@mgHPn{drIfBf;9Eas3=&;|#s)UYFt@NT$*_r)nb412A$zBl$e$!Ftgr-u6d z|7Zer3U0yC&RXyQj`4G@9>0NW|4{vBxVnqH3>SBm^EbQZkF15xWd;5s;O!=FxkLpi z-qCq?<@dqK9`a$%d&&cFp^JRETfet_Ee^{2C@_gYgdf5c{5($Z2RJNf{URK6l~>>z z-iZBum2a?AJ6H}0v?5T#9dL~Qfm2+--hOI$2rl4WxQP4W1Q%uV`+ou>DDd}J!>e$J zZ^9LPAI|VhTsT1M=in0l2*-G-wK@M%0xKzq4pf65aSd} z!QMey-#vGJ{uKxuML`kg?|9C?ORIPQ&hRkoAFPI#;RKJxr9+gj;z}?1eq;UoPavV7 zaGVNWbq(-`IKfM>f4u5{aP_!BrX5JJkNtnDe#eaKe?(w!3aa=}*8rc03n!?-V3)@i z;^0K($Knc}_=MgH7?VMPH&~{Am6PT6I6Xz)8OMF) zZe;?cQx!N8C#T7MaP@R~kgM+}Ux?HG@)#VPAy32+z86<;c_x8`!1Fl8uVQb28orAQ zcpfg|rMQaM;u_wF>vGv^^orq=hw1$;6t;j`U(YjgjP zA`qOV2IFuM-+`<6VO+yc;;^XoFX9BhfeV9_{{$Cvo7?vm5vWqI8rSg8xQ@N$9I?S_ z*a}Cu1FqnmafVZ!{t%Vm&jvrakM-M z*G6;we~dtMxe8v#8D8k}S17+8$GGvgIwIZ}<+s5h-V+B`Dt{>UuPQ6h-z~rwxPprE z6L2(Ep5pS?%Cm71e~AZ+55X0DjH@57^?h(1 zpNWI(l|LVsV*-~E2q&mu9M16VuE7n;--{zW9ar!(IKi*s41XY--~ZpJhF?$+;%{*Y z*KrO1f$O;0cbpXy)o*JY;m){<541MtU!B0Q6ofaa!Rfey&&3J89A|heF5ay5H{%rF zg`-=Pe=v7`{jU&sl7a-!!5MxR`?spWd>rBom+)E~8>H3jZ-`q zdyBRHJsjY9E4lth1eQ`z!K-nCf5jPYxJpONU!oiM8xHYyxP&|78tzsmP$$p>2TRqk zH;(X`xQa)*_1N_bzt;L&$ye|+oZxaoAS3W1E@o=*CQk9kI9jIsB3!{MaDsov8U73V z-`MqKujOhT!cYOP11{lCIL3S9I_{2x<=UWLxQ0)`)o+zQ4`JTai}+Kw9)E*tcn!{S=hy#V2>2`2u;CgVkqT~!6TB79aDe?)TE8a_@qxI6 zd*ayG{`?;iNGTYIz13=X9**!RT)`Eb;M;J9V;rnezo*^$HC+Ga5=bfd6#HwnU>Oea zkGO>Yz;)bot&U)Eo!0v}!`owjeOU#a354tA{c#B&j$?cRPH{i%eXsRr;{q<>3Lb-# zGJ%N%{GZg|-#ElGakf$US8(A^`E6XmpW_6tbnEeNxa|K&4O*?!A&c;ixQ4r6?=RIK zfD8BtT*N2fD(;VK_#C$jHg`=0B6vYi6YyM{Z+ zA7Xz;Im7Wz^6#$U&T^X{v;*EQ^6t)^gYWVQ)3~0!KK*6M0 z;zu2^6nDn{3Cj1x5iYv?iOOG&ODC2UxRXHGTYlOth~)V=!%K1DB;~)yMf?}8;{31Z z^PjA0cx#-M3G76`@1ur$;v(K3S8<4I_;_5$r{dsb^&5gCJQ9~H1jZ0Z@C2OUJ8JP>> ze2ld@|LO$#P!OE11%q&eN8kz`jT1Z$XZTj^_fx-na1lR}J3s%b1YV$^-d_u9I2j-> z#Qs2e6OPZ68~>ssRLAXcaF+7B;0W(;Y_IX82m3=+KM03-M43Q|z-S!faX7`dVl!FAzEpb;j_@P6f?vS3 zVXB{tOXtevj|tSzS0KaDaJi0S++?GUP-TSj+v5xuaP_H8-av^dvS&z#r{~`!1Fl7b8!iOjAOhA*YOG*T+8); z1A)i{%<1nn{GIz4x4|{s2?yg;-wl`W5jeqpaE6Cq|2nS!BM4NlQ^U)!H(tI5SMbd^ z!BcRCr(^$mt$zlG_*GoGzN~`x3B(jEz$spag9)l%ha@sO}KcE@{@46O5i>MH9P~?@v}I%R}J#d zgvqZJ5&jTY@Isv66*$8iWb^rd_o?A#3W~V-AG(1m-Uiq3ZrJ;`)_2E6+zThTAFku` ztj+lsOjCm^D2VX2IK{W%FjoB(T*D9HI(`ZV_pAO@9O3tJ=hy!Vfdv#Kcp1*{I_y87 zhQHw=ZnT*rhTCE9LDhG}5$py`W6ePGe&Tv2MKct3d;}DO;C4420@dTXWJ2rFu z_a0Wm`za{knYe;y;{?BnGrR!%kEq|bIKscU^|;BOT>ri4TCmlhI)owK1()#tIL3$J zV20KohpYG$>_4h}5r=qqnLvra6*$J%;S}G7y~ot>K3u>va1lR;6Z{&^aQPDg=`1x| zjKkUTO1I!e`3GEiN#2aBugJ~+qa*0ek^hdXugW_+zh-UT|4+cLso)SCz9sj^F}@5J z-&TGSF1#Z@iA(qm?7ge}0-RWz`~PcK@SX~Ozy<96r9CR*Hn@tn#WmasXSfUY-&g+w za4~n;TyA^11s|y(!qt!ELAdsbJksS;`D&beD&K?)pUG2P9zTrh^SJ&$OCX-F1#jaN z&&P!Y$}e~IU&ue;V4=JjN4TkZR*_#TD!2_!7IOXHoDzyd3+BwSFD0mI-Vm;4M)> zg9aQj+!`l%Yn?5$A0KXC!KXs9Dv#DBLgo1b_kC^yI}u2 zHSB>yd;+fEGu?XpFI-ru^;hE(z9n~l{f`MuqaejIaI{Jdp2amh2ZyVbe-D@Nd>rHD zIK|%^>-GONYOsld0&d!fLx$VnD(;9gyc_n{s^5Wb{W|$*w;uOxWFG(Q%VGouQxL7! zf{{3^%U9zHo`6$41$!G*|0pitmv9lk*T@|Id;@~twcty)V3Yi!{^|*rSg~JptXDxuCzw^xVWAC6;3+It8lQV{2Q)!ksCMB5eW-&J6!52cXB?++C2X!5FDn09=MKA zz-g#_e;ghz55XmTK92Dyw;q?VcSOG4oc}ixDA<7K-Gz(zL0rX8;TnDg*YUeJJW?At z50~)QIL>Wu->VZyDfkQfJ=MT(szX}B0XFmQ%^sNd4`Vau-a5o)zP^A==He=bX8#UuJWjuRZ=YC}s>_otfU$+ao zVmn1We~O09>~xzy*)=#*9_Z@v1=!3;xAj+JGaKFdR-Bay+(W<&L$?Jpuo;4G{Q@?_ z&#m9YX6U(fitVs-v%$--9dT~_12%)rZT)6kb_33vHRrq?rh>NEjWgfL`F!Q~#%5f( zZP>$kxZDSu@#Hpt4mM-StuK_#`~R6wew8a=E_oH30pxbU3>-3ud=9n~$ITwTi{04q z1=x%ix9eA9J67D(|6*;2_{dRuH}gv4Bi ze}(dgyFC79?)>`iW`mzWftdkr8xF^A6!;kICV=1I>aSJ(WNapU+x62h1Gl|Lv6-uF z^UoRE>%SSOZ3C}SU^D49>Rx7Mp?D)*G-Hlx_VdHUqM)o43#rHiNOP z+qdBQZzf{fz%CS+N!Zr=Vlx5T`Y6``_r+%7wapL3X419wCD=^3wjPhoWNYhNTe$20 z1O=v2U`AQnf`_mfVQrm%jBfsX!Hll9ei@sQ)zA{&c2lPJ!e*qj%^!fx{AcT9v6=g9UCuxEH{YX}z-U)+ zw+be@JiZf~!Oph9!>)d+`~o(EoNfLcYz8=6FUFn*IhVcf2)GH(KVmnyxp6CPpc~rU z2Ako`wqZwXhB904?&_z@`(iheIdtpoC}wm1AMX}0g84LTMlIWhgRq;pd_Fdlm2Lh) z>@#6`Z0;uJ*LvS8KLZDK`2$?pzKO2?KM^QgY69kQXxr9mP#Gg1frBgM;n=@Qp5*e^ z$gksUoV*5CZj{@a`#ayjbwdAC!;9 z*>w4GT>PSmuK!aB1S?eV7LHfSt8lnVZt3d=N>Vxl!O`*Zr8qlDo{B4% zlofcDK^hxk@kkMEYv_5W5ac-$4dCeOicF!?9BTbMih4doYOAFsv%Zr)z?A?}Qe zxSO>(|4Rfy3M#l4j&UDc!vk@K&&}P^Y~Y*PzzeXC$Kn7_&b?o2^Rn36S}-*a7<-H4 z8P4Cx4Nc0N2wq|MT~nWKu|v6dlRj2|U*hq-@?kg~E+6OCO_oo?$q)J)@uJIruKY;s z&6lsnA^Dr-vR5TwZr5&Dh97qezEFdgaLF9){B(U2`=814aQ=Bhd43tLKA{aXZoaa`OVMv1yi^qylr%v<1}f}ctQmY%{NP)56!Naf4o*Wb4SRT8`uq3IYQ=-a_xGb9XQgN9Wa0YShfWP z_TUT((gQd|&iu$`{*ueqSJ;E=arUe>@DAr^v_8hs>B>Kb!^4$-(Y$rsHmpXv3*L4M zsw$X=<0sX?{5gQFk7p|XBd(pSym=e4&8G(|-=>jVJYM~G!u~|%yPB7d?Sfi+eb<^D zw=T5SJETLL@fPosaQ!7U7>XlK!wcQ|aoQmB+j{jsO8suZ$y0LqZUXTF1s=x1L2B@n zv-x(*3y}<~ZmzJ%opDS-(mbA{+*?wj3Cj$NRJ z1$FG>jQVYG?HsM|jH6%VZaC)ejm+yKIwCXkyt)6)*=Ga!uH}0;2!{u&f%#cfTijgv zF)q)i=$RioY`#88N9Z5QhwQat&ZSZxO$QDDK7heD6oV;mc%cHbDX7j>!}oDGLHRFnG17g!7RPgx--Nv- za*O6VB0j%Y*alYu?cg4{^Ybq~T7m8qRJj%$hl5L%?}tPFu<=}%KSSRmmpSuCY7=ng zYlkM|gd;ZH*k1oj161%l1;z8^w{c~PyZ{$?9bkp4KU(<>IO0!1|HRq0+JPop=!g_} z-0-*H`d{p+g6%1YLwQ#m9wv9gk$EPOKW>EBWBrM4J^6ud{aS6{FdTd@kKTgoe;VjM zy}=dmz;ieDw$TmVk2CTKj%MpVf6bXULVScvJn}8U{;}GCAIk&+_PBxh;Us_T_Bf4v zT;THj4;-0iB6-<5N)@Ddz9sUvbDF3pms;q-L* zIb45Ge$RQSoZ)1p{5uZJ`;N>GnDgKKv}3PU1s%d&aAaN&$oKFN9CVQT;?nDCI06?w zk*~qk-&9}4*)Q@VxcEc9!{+`^2-H&*yo?J&bVT04rC9leIJ#4(-M6^9Uil3!zewJU z6FxPsT`TV5zGi)X{qIPi*iQ}j!X=(CbjQi{YIroR^2pg6rVm9b593Cn^gk$_PuFug8yyfcWX#?kDe@o?;;HZ_n1}80f>&8acptTAb zx7H!b*y47$u!ZtF<9JJL;9j`YOZkIv$kp&@T;y4CALoT!{|6E%@W^*Q4$f7>%W#Ir zVSl3TvfEw#?b@JexO9a4SZ?!uP<%^2h0k*N@{=lfmw?w&H~1wkjMpLk&iPY$1J3SJ z{a?6VIxKk9yH>tk%P}4I%L$vcTIeuWv5y1_iVYTL+c9$4Y_EfOU(Lc dK+8A#{h#Vtruxpd|6SO-!K~5mw|ukx{{l{nOjQ5? delta 151589 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 diff --git a/contrib/20.r7rs/scheme/base.scm b/contrib/20.r7rs/scheme/base.scm index 2b3d3834..c315a33e 100644 --- a/contrib/20.r7rs/scheme/base.scm +++ b/contrib/20.r7rs/scheme/base.scm @@ -412,58 +412,6 @@ ;; 5.5 Record-type definitions - (define (make-record-type name) - (vector name)) ; TODO - - (define-syntax (define-record-constructor type field-alist name . fields) - (let ((record #'record)) - #`(define (#,name . #,fields) - (let ((#,record (make-record #,type (make-vector #,(length field-alist))))) - #,@(map - (lambda (field) - #`(vector-set! (record-datum #,record) #,(cdr (assq field field-alist)) #,field)) - fields) - #,record)))) - - (define-syntax (define-record-predicate type name) - #`(define (#,name obj) - (and (record? obj) - (eq? (record-type obj) #,type)))) - - (define-syntax (define-record-accessor pred field-alist field accessor) - #`(define (#,accessor record) - (if (#,pred record) - (vector-ref (record-datum record) #,(cdr (assq field field-alist))) - (error (string-append (symbol->string '#,accessor) ": wrong record type") record)))) - - (define-syntax (define-record-modifier pred field-alist field modifier) - #`(define (#,modifier record val) - (if (#,pred record) - (vector-set! (record-datum record) #,(cdr (assq field field-alist)) val) - (error (string-append (symbol->string '#,modifier) ": wrong record type") record)))) - - (define-syntax (define-record-field pred field-alist field accessor . modifier-opt) - (if (null? modifier-opt) - #`(define-record-accessor #,pred #,field-alist #,field #,accessor) - #`(begin - (define-record-accessor #,pred #,field-alist #,field #,accessor) - (define-record-modifier #,pred #,field-alist #,field #,(car modifier-opt))))) - - (define-syntax (define-record-type name ctor pred . fields) - (let ((field-alist (let lp ((fds fields) (idx 0) (alst '())) - (if (null? fds) - alst - (lp (cdr fds) - (+ idx 1) - (cons - (cons (if (pair? (car fds)) (car (car fds)) (car fds)) idx) - alst)))))) - #`(begin - (define #,name (make-record-type '#,name)) - (define-record-constructor #,name #,field-alist #,@ctor) - (define-record-predicate #,name #,pred) - #,@(map (lambda (field) #`(define-record-field #,pred #,field-alist #,@field)) fields)))) - (export define-record-type) ;; 6.1. Equivalence predicates diff --git a/contrib/20.r7rs/scheme/load.scm b/contrib/20.r7rs/scheme/load.scm index 5813a75d..254c2016 100644 --- a/contrib/20.r7rs/scheme/load.scm +++ b/contrib/20.r7rs/scheme/load.scm @@ -1,4 +1,2 @@ (define-library (scheme load) - (import (picrin base)) - (export load)) diff --git a/contrib/60.repl/repl.scm b/contrib/60.repl/repl.scm index 2197c786..5bbbacd2 100644 --- a/contrib/60.repl/repl.scm +++ b/contrib/60.repl/repl.scm @@ -20,8 +20,10 @@ #f)))) (define (init-env) + (current-library '(picrin user)) (eval - '(import (scheme base) + '(import (picrin base) + (scheme base) (scheme load) (scheme process-context) (scheme read) diff --git a/contrib/70.main/main.scm b/contrib/70.main/main.scm index 27e800b3..92dba342 100644 --- a/contrib/70.main/main.scm +++ b/contrib/70.main/main.scm @@ -5,7 +5,6 @@ (scheme process-context) (scheme load) (scheme eval) - (picrin base) (picrin repl)) (define (print-help) @@ -41,7 +40,7 @@ (lambda (in) (let loop ((expr (read in))) (unless (eof-object? expr) - (eval expr (find-library "picrin.user")) + (eval expr '(picrin user)) (loop (read in))))))) (define (main) diff --git a/lib/bool.c b/lib/bool.c index 5d557348..9af1c7a3 100644 --- a/lib/bool.c +++ b/lib/bool.c @@ -79,18 +79,6 @@ internal_equal_p(pic_state *pic, pic_value x, pic_value y, int depth, khash_t(m) } switch (pic_type(pic, x)) { - case PIC_TYPE_ID: { - struct identifier *id1, *id2; - pic_value s1, s2; - - id1 = pic_id_ptr(pic, x); - id2 = pic_id_ptr(pic, y); - - s1 = pic_find_identifier(pic, obj_value(pic, id1->u.id), obj_value(pic, id1->env)); - s2 = pic_find_identifier(pic, obj_value(pic, id2->u.id), obj_value(pic, id2->env)); - - return pic_eq_p(pic, s1, s2); - } case PIC_TYPE_STRING: { int xlen, ylen; const char *xstr, *ystr; diff --git a/lib/dict.c b/lib/dict.c index 44c8c21a..4b453e9a 100644 --- a/lib/dict.c +++ b/lib/dict.c @@ -5,7 +5,7 @@ #include "picrin.h" #include "object.h" -KHASH_DEFINE(dict, symbol *, pic_value, kh_ptr_hash_func, kh_ptr_hash_equal) +KHASH_DEFINE(dict, struct symbol *, pic_value, kh_ptr_hash_func, kh_ptr_hash_equal) pic_value pic_make_dict(pic_state *pic) diff --git a/lib/ext/boot.c b/lib/ext/boot.c index 4d74ce83..cd0d1626 100644 --- a/lib/ext/boot.c +++ b/lib/ext/boot.c @@ -2,218 +2,422 @@ #include "picrin/extra.h" static const char boot_rom[][80] = { -"((core#lambda (.define-transformer.2228 .the.2229) ((core#lambda (.the-core-defi", -"ne.2230 .the-core-lambda.2231 .the-core-begin.2232 .the-core-quote.2233 .the-cor", -"e-set!.2234 .the-core-if.2235 .the-core-define-macro.2236 .the-define.2237 .the-", -"lambda.2238 .the-begin.2239 .the-quote.2240 .the-set!.2241 .the-if.2242 .the-def", -"ine-macro.2243) (core#begin (.define-transformer.2228 (core#quote quote) (core#l", -"ambda (.form.2248 .env.2249) (core#if (= (length .form.2248) 2) (cons .the-core-", -"quote.2233 (cons (cadr .form.2248) (core#quote ()))) (error \"malformed quote\" .f", -"orm.2248)))) (core#begin (.define-transformer.2228 (core#quote if) (core#lambda ", -"(.form.2250 .env.2251) ((core#lambda (.len.2252) (core#if (= .len.2252 3) (appen", -"d .form.2250 (cons (core#quote #undefined) (core#quote ()))) (core#if (= .len.22", -"52 4) (cons .the-core-if.2235 (cdr .form.2250)) (error \"malformed if\" .form.2250", -")))) (length .form.2250)))) (core#begin (.define-transformer.2228 (core#quote be", -"gin) (core#lambda (.form.2253 .env.2254) ((core#lambda (.len.2255) (core#if (= .", -"len.2255 1) #undefined (core#if (= .len.2255 2) (cadr .form.2253) (core#if (= .l", -"en.2255 3) (cons .the-core-begin.2232 (cdr .form.2253)) (cons .the-core-begin.22", -"32 (cons (cadr .form.2253) (cons (cons .the-begin.2239 (cddr .form.2253)) (core#", -"quote ())))))))) (length .form.2253)))) (core#begin (.define-transformer.2228 (c", -"ore#quote set!) (core#lambda (.form.2256 .env.2257) (core#if (core#if (= (length", -" .form.2256) 3) (identifier? (cadr .form.2256)) #f) (cons .the-core-set!.2234 (c", -"dr .form.2256)) (error \"malformed set!\" .form.2256)))) (core#begin (core#define ", -".check-formal.2244 (core#lambda (.formal.2258) ((core#lambda (.it.2259) (core#if", -" .it.2259 .it.2259 ((core#lambda (.it.2260) (core#if .it.2260 .it.2260 ((core#la", -"mbda (.it.2261) (core#if .it.2261 .it.2261 #f)) (core#if (pair? .formal.2258) (c", -"ore#if (identifier? (car .formal.2258)) (.check-formal.2244 (cdr .formal.2258)) ", -"#f) #f)))) (identifier? .formal.2258)))) (null? .formal.2258)))) (core#begin (.d", -"efine-transformer.2228 (core#quote lambda) (core#lambda (.form.2262 .env.2263) (", -"core#if (= (length .form.2262) 1) (error \"malformed lambda\" .form.2262) (core#if", -" (.check-formal.2244 (cadr .form.2262)) (cons .the-core-lambda.2231 (cons (cadr ", -".form.2262) (cons (cons .the-begin.2239 (cddr .form.2262)) (core#quote ())))) (e", -"rror \"malformed lambda\" .form.2262))))) (core#begin (.define-transformer.2228 (c", -"ore#quote define) (core#lambda (.form.2264 .env.2265) ((core#lambda (.len.2266) ", -"(core#if (= .len.2266 1) (error \"malformed define\" .form.2264) ((core#lambda (.f", -"ormal.2267) (core#if (identifier? .formal.2267) (core#if (= .len.2266 3) (cons .", -"the-core-define.2230 (cdr .form.2264)) (error \"malformed define\" .form.2264)) (c", -"ore#if (pair? .formal.2267) (cons .the-define.2237 (cons (car .formal.2267) (con", -"s (cons .the-lambda.2238 (cons (cdr .formal.2267) (cddr .form.2264))) (core#quot", -"e ())))) (error \"define: binding to non-varaible object\" .form.2264)))) (cadr .f", -"orm.2264)))) (length .form.2264)))) (core#begin (.define-transformer.2228 (core#", -"quote define-macro) (core#lambda (.form.2268 .env.2269) (core#if (= (length .for", -"m.2268) 3) (core#if (identifier? (cadr .form.2268)) (cons .the-core-define-macro", -".2236 (cdr .form.2268)) (error \"define-macro: binding to non-variable object\" .f", -"orm.2268)) (error \"malformed define-macro\" .form.2268)))) (core#begin #undefined", -" (core#begin (.define-transformer.2228 (core#quote else) (core#lambda ._.2270 (e", +"((core#lambda (.define-transformer.2149 .the.2150) ((core#lambda (.the-core-defi", +"ne.2151 .the-core-lambda.2152 .the-core-begin.2153 .the-core-quote.2154 .the-cor", +"e-set!.2155 .the-core-if.2156 .the-core-define-macro.2157 .the-define.2158 .the-", +"lambda.2159 .the-begin.2160 .the-quote.2161 .the-set!.2162 .the-if.2163 .the-def", +"ine-macro.2164) (core#begin (.define-transformer.2149 (core#quote quote) (core#l", +"ambda (.form.2169 .env.2170) (core#if (= (length .form.2169) 2) (cons .the-core-", +"quote.2154 (cons (cadr .form.2169) (core#quote ()))) (error \"malformed quote\" .f", +"orm.2169)))) (core#begin (.define-transformer.2149 (core#quote if) (core#lambda ", +"(.form.2171 .env.2172) ((core#lambda (.len.2173) (core#if (= .len.2173 3) (appen", +"d .form.2171 (cons (core#quote #undefined) (core#quote ()))) (core#if (= .len.21", +"73 4) (cons .the-core-if.2156 (cdr .form.2171)) (error \"malformed if\" .form.2171", +")))) (length .form.2171)))) (core#begin (.define-transformer.2149 (core#quote be", +"gin) (core#lambda (.form.2174 .env.2175) ((core#lambda (.len.2176) (core#if (= .", +"len.2176 1) #undefined (core#if (= .len.2176 2) (cadr .form.2174) (core#if (= .l", +"en.2176 3) (cons .the-core-begin.2153 (cdr .form.2174)) (cons .the-core-begin.21", +"53 (cons (cadr .form.2174) (cons (cons .the-begin.2160 (cddr .form.2174)) (core#", +"quote ())))))))) (length .form.2174)))) (core#begin (.define-transformer.2149 (c", +"ore#quote set!) (core#lambda (.form.2177 .env.2178) (core#if (core#if (= (length", +" .form.2177) 3) (identifier? (cadr .form.2177)) #f) (cons .the-core-set!.2155 (c", +"dr .form.2177)) (error \"malformed set!\" .form.2177)))) (core#begin (core#define ", +".check-formal.2165 (core#lambda (.formal.2179) ((core#lambda (.it.2180) (core#if", +" .it.2180 .it.2180 ((core#lambda (.it.2181) (core#if .it.2181 .it.2181 ((core#la", +"mbda (.it.2182) (core#if .it.2182 .it.2182 #f)) (core#if (pair? .formal.2179) (c", +"ore#if (identifier? (car .formal.2179)) (.check-formal.2165 (cdr .formal.2179)) ", +"#f) #f)))) (identifier? .formal.2179)))) (null? .formal.2179)))) (core#begin (.d", +"efine-transformer.2149 (core#quote lambda) (core#lambda (.form.2183 .env.2184) (", +"core#if (= (length .form.2183) 1) (error \"malformed lambda\" .form.2183) (core#if", +" (.check-formal.2165 (cadr .form.2183)) (cons .the-core-lambda.2152 (cons (cadr ", +".form.2183) (cons (cons .the-begin.2160 (cddr .form.2183)) (core#quote ())))) (e", +"rror \"malformed lambda\" .form.2183))))) (core#begin (.define-transformer.2149 (c", +"ore#quote define) (core#lambda (.form.2185 .env.2186) ((core#lambda (.len.2187) ", +"(core#if (= .len.2187 1) (error \"malformed define\" .form.2185) ((core#lambda (.f", +"ormal.2188) (core#if (identifier? .formal.2188) (core#if (= .len.2187 3) (cons .", +"the-core-define.2151 (cdr .form.2185)) (error \"malformed define\" .form.2185)) (c", +"ore#if (pair? .formal.2188) (cons .the-define.2158 (cons (car .formal.2188) (con", +"s (cons .the-lambda.2159 (cons (cdr .formal.2188) (cddr .form.2185))) (core#quot", +"e ())))) (error \"define: binding to non-varaible object\" .form.2185)))) (cadr .f", +"orm.2185)))) (length .form.2185)))) (core#begin (.define-transformer.2149 (core#", +"quote define-macro) (core#lambda (.form.2189 .env.2190) (core#if (= (length .for", +"m.2189) 3) (core#if (identifier? (cadr .form.2189)) (cons .the-core-define-macro", +".2157 (cdr .form.2189)) (error \"define-macro: binding to non-variable object\" .f", +"orm.2189)) (error \"malformed define-macro\" .form.2189)))) (core#begin #undefined", +" (core#begin (.define-transformer.2149 (core#quote else) (core#lambda ._.2191 (e", "rror \"invalid use of auxiliary syntax\" (core#quote else)))) (core#begin (.define", -"-transformer.2228 (core#quote =>) (core#lambda ._.2271 (error \"invalid use of au", -"xiliary syntax\" (core#quote =>)))) (core#begin (.define-transformer.2228 (core#q", -"uote unquote) (core#lambda ._.2272 (error \"invalid use of auxiliary syntax\" (cor", -"e#quote unquote)))) (core#begin (.define-transformer.2228 (core#quote unquote-sp", -"licing) (core#lambda ._.2273 (error \"invalid use of auxiliary syntax\" (core#quot", -"e unquote-splicing)))) (core#begin (.define-transformer.2228 (core#quote let) (c", -"ore#lambda (.form.2274 .env.2275) (core#if (identifier? (cadr .form.2274)) ((cor", -"e#lambda (.name.2276 .formal.2277 .body.2278) (cons (cons .the-lambda.2238 (cons", -" (core#quote ()) (cons (cons .the-define.2237 (cons (cons .name.2276 (map car .f", -"ormal.2277)) .body.2278)) (cons (cons .name.2276 (map cadr .formal.2277)) (core#", -"quote ()))))) (core#quote ()))) (car (cdr .form.2274)) (car (cdr (cdr .form.2274", -"))) (cdr (cdr (cdr .form.2274)))) ((core#lambda (.formal.2279 .body.2280) (cons ", -"(cons .the-lambda.2238 (cons (map car .formal.2279) .body.2280)) (map cadr .form", -"al.2279))) (car (cdr .form.2274)) (cdr (cdr .form.2274)))))) (core#begin (.defin", -"e-transformer.2228 (core#quote and) (core#lambda (.form.2281 .env.2282) (core#if", -" (null? (cdr .form.2281)) #t (core#if (null? (cddr .form.2281)) (cadr .form.2281", -") (cons .the-if.2242 (cons (cadr .form.2281) (cons (cons (.the.2229 (core#quote ", -"and)) (cddr .form.2281)) (cons (core#quote #f) (core#quote ()))))))))) (core#beg", -"in (.define-transformer.2228 (core#quote or) (core#lambda (.form.2283 .env.2284)", -" (core#if (null? (cdr .form.2283)) #f ((core#lambda (.tmp.2285) (cons (.the.2229", -" (core#quote let)) (cons (cons (cons .tmp.2285 (cons (cadr .form.2283) (core#quo", -"te ()))) (core#quote ())) (cons (cons .the-if.2242 (cons .tmp.2285 (cons .tmp.22", -"85 (cons (cons (.the.2229 (core#quote or)) (cddr .form.2283)) (core#quote ()))))", -") (core#quote ()))))) (make-identifier (core#quote it) .env.2284))))) (core#begi", -"n (.define-transformer.2228 (core#quote cond) (core#lambda (.form.2286 .env.2287", -") ((core#lambda (.clauses.2288) (core#if (null? .clauses.2288) #undefined ((core", -"#lambda (.clause.2289) (core#if (core#if (identifier? (car .clause.2289)) (ident", -"ifier=? (.the.2229 (core#quote else)) (make-identifier (car .clause.2289) .env.2", -"287)) #f) (cons .the-begin.2239 (cdr .clause.2289)) (core#if (null? (cdr .clause", -".2289)) (cons (.the.2229 (core#quote or)) (cons (car .clause.2289) (cons (cons (", -".the.2229 (core#quote cond)) (cdr .clauses.2288)) (core#quote ())))) (core#if (c", -"ore#if (identifier? (cadr .clause.2289)) (identifier=? (.the.2229 (core#quote =>", -")) (make-identifier (cadr .clause.2289) .env.2287)) #f) ((core#lambda (.tmp.2290", -") (cons (.the.2229 (core#quote let)) (cons (cons (cons .tmp.2290 (cons (car .cla", -"use.2289) (core#quote ()))) (core#quote ())) (cons (cons .the-if.2242 (cons .tmp", -".2290 (cons (cons (cadr (cdr .clause.2289)) (cons .tmp.2290 (core#quote ()))) (c", -"ons (cons (.the.2229 (core#quote cond)) (cddr .form.2286)) (core#quote ()))))) (", -"core#quote ()))))) (make-identifier (core#quote tmp) .env.2287)) (cons .the-if.2", -"242 (cons (car .clause.2289) (cons (cons .the-begin.2239 (cdr .clause.2289)) (co", -"ns (cons (.the.2229 (core#quote cond)) (cdr .clauses.2288)) (core#quote ()))))))", -"))) (car .clauses.2288)))) (cdr .form.2286)))) (core#begin (.define-transformer.", -"2228 (core#quote quasiquote) (core#lambda (.form.2291 .env.2292) (core#begin (co", -"re#define .quasiquote?.2293 (core#lambda (.form.2297) (core#if (pair? .form.2297", -") (core#if (identifier? (car .form.2297)) (identifier=? (.the.2229 (core#quote q", -"uasiquote)) (make-identifier (car .form.2297) .env.2292)) #f) #f))) (core#begin ", -"(core#define .unquote?.2294 (core#lambda (.form.2298) (core#if (pair? .form.2298", -") (core#if (identifier? (car .form.2298)) (identifier=? (.the.2229 (core#quote u", -"nquote)) (make-identifier (car .form.2298) .env.2292)) #f) #f))) (core#begin (co", -"re#define .unquote-splicing?.2295 (core#lambda (.form.2299) (core#if (pair? .for", -"m.2299) (core#if (pair? (car .form.2299)) (core#if (identifier? (caar .form.2299", -")) (identifier=? (.the.2229 (core#quote unquote-splicing)) (make-identifier (caa", -"r .form.2299) .env.2292)) #f) #f) #f))) (core#begin (core#define .qq.2296 (core#", -"lambda (.depth.2300 .expr.2301) (core#if (.unquote?.2294 .expr.2301) (core#if (=", -" .depth.2300 1) (cadr .expr.2301) (list (.the.2229 (core#quote list)) (list (.th", -"e.2229 (core#quote quote)) (.the.2229 (core#quote unquote))) (.qq.2296 (- .depth", -".2300 1) (car (cdr .expr.2301))))) (core#if (.unquote-splicing?.2295 .expr.2301)", -" (core#if (= .depth.2300 1) (list (.the.2229 (core#quote append)) (car (cdr (car", -" .expr.2301))) (.qq.2296 .depth.2300 (cdr .expr.2301))) (list (.the.2229 (core#q", -"uote cons)) (list (.the.2229 (core#quote list)) (list (.the.2229 (core#quote quo", -"te)) (.the.2229 (core#quote unquote-splicing))) (.qq.2296 (- .depth.2300 1) (car", -" (cdr (car .expr.2301))))) (.qq.2296 .depth.2300 (cdr .expr.2301)))) (core#if (.", -"quasiquote?.2293 .expr.2301) (list (.the.2229 (core#quote list)) (list (.the.222", -"9 (core#quote quote)) (.the.2229 (core#quote quasiquote))) (.qq.2296 (+ .depth.2", -"300 1) (car (cdr .expr.2301)))) (core#if (pair? .expr.2301) (list (.the.2229 (co", -"re#quote cons)) (.qq.2296 .depth.2300 (car .expr.2301)) (.qq.2296 .depth.2300 (c", -"dr .expr.2301))) (core#if (vector? .expr.2301) (list (.the.2229 (core#quote list", -"->vector)) (.qq.2296 .depth.2300 (vector->list .expr.2301))) (list (.the.2229 (c", -"ore#quote quote)) .expr.2301)))))))) ((core#lambda (.x.2302) (.qq.2296 1 .x.2302", -")) (cadr .form.2291)))))))) (core#begin (.define-transformer.2228 (core#quote le", -"t*) (core#lambda (.form.2303 .env.2304) ((core#lambda (.bindings.2305 .body.2306", -") (core#if (null? .bindings.2305) (cons (.the.2229 (core#quote let)) (cons (core", -"#quote ()) .body.2306)) (cons (.the.2229 (core#quote let)) (cons (cons (cons (ca", -"r (car .bindings.2305)) (cdr (car .bindings.2305))) (core#quote ())) (cons (cons", -" (.the.2229 (core#quote let*)) (cons (cdr .bindings.2305) .body.2306)) (core#quo", -"te ())))))) (car (cdr .form.2303)) (cdr (cdr .form.2303))))) (core#begin (.defin", -"e-transformer.2228 (core#quote letrec) (core#lambda (.form.2307 .env.2308) (cons", -" (.the.2229 (core#quote letrec*)) (cdr .form.2307)))) (core#begin (.define-trans", -"former.2228 (core#quote letrec*) (core#lambda (.form.2309 .env.2310) ((core#lamb", -"da (.bindings.2311 .body.2312) ((core#lambda (.variables.2313 .initials.2314) (c", -"ons (.the.2229 (core#quote let)) (cons .variables.2313 (append .initials.2314 (a", -"ppend .body.2312 (core#quote ())))))) (map (core#lambda (.v.2315) (cons .v.2315 ", -"(cons (core#quote #undefined) (core#quote ())))) (map car .bindings.2311)) (map ", -"(core#lambda (.v.2316) (cons (.the.2229 (core#quote set!)) (append .v.2316 (core", -"#quote ())))) .bindings.2311))) (car (cdr .form.2309)) (cdr (cdr .form.2309)))))", -" (core#begin (.define-transformer.2228 (core#quote let-values) (core#lambda (.fo", -"rm.2317 .env.2318) (cons (.the.2229 (core#quote let*-values)) (append (cdr .form", -".2317) (core#quote ()))))) (core#begin (.define-transformer.2228 (core#quote let", -"*-values) (core#lambda (.form.2319 .env.2320) ((core#lambda (.formals.2321 .body", -".2322) (core#if (null? .formals.2321) (cons (.the.2229 (core#quote let)) (cons (", -"core#quote ()) (append .body.2322 (core#quote ())))) ((core#lambda (.formal.2323", -") (cons (.the.2229 (core#quote call-with-values)) (cons (cons .the-lambda.2238 (", -"cons (core#quote ()) (cdr .formal.2323))) (cons (cons (.the.2229 (core#quote lam", -"bda)) (cons (car .formal.2323) (cons (cons (.the.2229 (core#quote let*-values)) ", -"(cons (cdr .formals.2321) .body.2322)) (core#quote ())))) (core#quote ()))))) (c", -"ar .formals.2321)))) (cadr .form.2319) (cddr .form.2319)))) (core#begin (.define", -"-transformer.2228 (core#quote define-values) (core#lambda (.form.2324 .env.2325)", -" ((core#lambda (.formal.2326 .body.2327) ((core#lambda (.tmps.2328) (cons .the-b", -"egin.2239 (append ((core#lambda () (core#begin (core#define .loop.2329 (core#lam", -"bda (.formal.2330) (core#if (identifier? .formal.2330) (cons (cons .the-define.2", -"237 (cons .formal.2330 (cons (core#quote #undefined) (core#quote ())))) (core#qu", -"ote ())) (core#if (pair? .formal.2330) (cons (cons .the-define.2237 (cons (car .", -"formal.2330) (cons (core#quote #undefined) (core#quote ())))) (.loop.2329 (cdr .", -"formal.2330))) (core#quote ()))))) (.loop.2329 .formal.2326)))) (cons (cons (.th", -"e.2229 (core#quote call-with-values)) (cons (cons .the-lambda.2238 (cons (core#q", -"uote ()) .body.2327)) (cons (cons .the-lambda.2238 (cons .tmps.2328 ((core#lambd", -"a () (core#begin (core#define .loop.2331 (core#lambda (.formal.2332 .tmps.2333) ", -"(core#if (identifier? .formal.2332) (cons (cons .the-set!.2241 (cons .formal.233", -"2 (cons .tmps.2333 (core#quote ())))) (core#quote ())) (core#if (pair? .formal.2", -"332) (cons (cons .the-set!.2241 (cons (car .formal.2332) (cons (car .tmps.2333) ", -"(core#quote ())))) (.loop.2331 (cdr .formal.2332) (cdr .tmps.2333))) (core#quote", -" ()))))) (.loop.2331 .formal.2326 .tmps.2328)))))) (core#quote ())))) (core#quot", -"e ()))))) ((core#lambda () (core#begin (core#define .loop.2334 (core#lambda (.fo", -"rmal.2335) (core#if (identifier? .formal.2335) (make-identifier .formal.2335 .en", -"v.2325) (core#if (pair? .formal.2335) (cons (make-identifier (car .formal.2335) ", -".env.2325) (.loop.2334 (cdr .formal.2335))) (core#quote ()))))) (.loop.2334 .for", -"mal.2326)))))) (cadr .form.2324) (cddr .form.2324)))) (core#begin (.define-trans", -"former.2228 (core#quote do) (core#lambda (.form.2336 .env.2337) ((core#lambda (.", -"bindings.2338 .test.2339 .cleanup.2340 .body.2341) ((core#lambda (.loop.2342) (c", -"ons (.the.2229 (core#quote let)) (cons .loop.2342 (cons (map (core#lambda (.x.23", -"43) (cons (car .x.2343) (cons (cadr .x.2343) (core#quote ())))) .bindings.2338) ", -"(cons (cons .the-if.2242 (cons .test.2339 (cons (cons .the-begin.2239 .cleanup.2", -"340) (cons (cons .the-begin.2239 (append .body.2341 (cons (cons .loop.2342 (map ", -"(core#lambda (.x.2344) (core#if (null? (cdr (cdr .x.2344))) (car .x.2344) (car (", -"cdr (cdr .x.2344))))) .bindings.2338)) (core#quote ())))) (core#quote ()))))) (c", -"ore#quote ())))))) (make-identifier (core#quote loop) .env.2337))) (car (cdr .fo", -"rm.2336)) (car (car (cdr (cdr .form.2336)))) (cdr (car (cdr (cdr .form.2336)))) ", -"(cdr (cdr (cdr .form.2336)))))) (core#begin (.define-transformer.2228 (core#quot", -"e when) (core#lambda (.form.2345 .env.2346) ((core#lambda (.test.2347 .body.2348", -") (cons .the-if.2242 (cons .test.2347 (cons (cons .the-begin.2239 (append .body.", -"2348 (core#quote ()))) (cons (core#quote #undefined) (core#quote ())))))) (car (", -"cdr .form.2345)) (cdr (cdr .form.2345))))) (core#begin (.define-transformer.2228", -" (core#quote unless) (core#lambda (.form.2349 .env.2350) ((core#lambda (.test.23", -"51 .body.2352) (cons .the-if.2242 (cons .test.2351 (cons (core#quote #undefined)", -" (cons (cons .the-begin.2239 (append .body.2352 (core#quote ()))) (core#quote ()", -")))))) (car (cdr .form.2349)) (cdr (cdr .form.2349))))) (core#begin (.define-tra", -"nsformer.2228 (core#quote case) (core#lambda (.form.2353 .env.2354) ((core#lambd", -"a (.key.2355 .clauses.2356) ((core#lambda (.the-key.2357) (cons (.the.2229 (core", -"#quote let)) (cons (cons (cons .the-key.2357 (cons .key.2355 (core#quote ()))) (", -"core#quote ())) (cons ((core#lambda () (core#begin (core#define .loop.2358 (core", -"#lambda (.clauses.2359) (core#if (null? .clauses.2359) #undefined ((core#lambda ", -"(.clause.2360) (cons .the-if.2242 (cons (core#if (core#if (identifier? (car .cla", -"use.2360)) (identifier=? (.the.2229 (core#quote else)) (make-identifier (car .cl", -"ause.2360) .env.2354)) #f) #t (cons (.the.2229 (core#quote or)) (append (map (co", -"re#lambda (.x.2361) (cons (.the.2229 (core#quote eqv?)) (cons .the-key.2357 (con", -"s (cons .the-quote.2240 (cons .x.2361 (core#quote ()))) (core#quote ()))))) (car", -" .clause.2360)) (core#quote ())))) (cons (core#if (core#if (identifier? (cadr .c", -"lause.2360)) (identifier=? (.the.2229 (core#quote =>)) (make-identifier (cadr .c", -"lause.2360) .env.2354)) #f) (cons (car (cdr (cdr .clause.2360))) (cons .the-key.", -"2357 (core#quote ()))) (cons .the-begin.2239 (append (cdr .clause.2360) (core#qu", -"ote ())))) (cons (.loop.2358 (cdr .clauses.2359)) (core#quote ())))))) (car .cla", -"uses.2359))))) (.loop.2358 .clauses.2356)))) (core#quote ()))))) (make-identifie", -"r (core#quote key) .env.2354))) (car (cdr .form.2353)) (cdr (cdr .form.2353)))))", -" (.define-transformer.2228 (core#quote parameterize) (core#lambda (.form.2362 .e", -"nv.2363) ((core#lambda (.formal.2364 .body.2365) (cons (.the.2229 (core#quote wi", -"th-dynamic-environment)) (cons (cons (.the.2229 (core#quote list)) (append (map ", -"(core#lambda (.x.2366) (cons (.the.2229 (core#quote cons)) (cons (car .x.2366) (", -"cons (cadr .x.2366) (core#quote ()))))) .formal.2364) (core#quote ()))) (cons (c", -"ons .the-lambda.2238 (cons (core#quote ()) (append .body.2365 (core#quote ()))))", -" (core#quote ()))))) (car (cdr .form.2362)) (cdr (cdr .form.2362))))))))))))))))", -")))))))))))))))))) (.the.2229 (core#quote core#define)) (.the.2229 (core#quote c", -"ore#lambda)) (.the.2229 (core#quote core#begin)) (.the.2229 (core#quote core#quo", -"te)) (.the.2229 (core#quote core#set!)) (.the.2229 (core#quote core#if)) (.the.2", -"229 (core#quote core#define-macro)) (.the.2229 (core#quote define)) (.the.2229 (", -"core#quote lambda)) (.the.2229 (core#quote begin)) (.the.2229 (core#quote quote)", -") (.the.2229 (core#quote set!)) (.the.2229 (core#quote if)) (.the.2229 (core#quo", -"te define-macro)))) (core#lambda (.name.2367 .transformer.2368) (dictionary-set!", -" (macro-objects) .name.2367 .transformer.2368)) (core#lambda (.var.2369) (make-i", -"dentifier .var.2369 default-environment)))", +"-transformer.2149 (core#quote =>) (core#lambda ._.2192 (error \"invalid use of au", +"xiliary syntax\" (core#quote =>)))) (core#begin (.define-transformer.2149 (core#q", +"uote unquote) (core#lambda ._.2193 (error \"invalid use of auxiliary syntax\" (cor", +"e#quote unquote)))) (core#begin (.define-transformer.2149 (core#quote unquote-sp", +"licing) (core#lambda ._.2194 (error \"invalid use of auxiliary syntax\" (core#quot", +"e unquote-splicing)))) (core#begin (.define-transformer.2149 (core#quote let) (c", +"ore#lambda (.form.2195 .env.2196) (core#if (identifier? (cadr .form.2195)) ((cor", +"e#lambda (.name.2197 .formal.2198 .body.2199) (cons (cons .the-lambda.2159 (cons", +" (core#quote ()) (cons (cons .the-define.2158 (cons (cons .name.2197 (map car .f", +"ormal.2198)) .body.2199)) (cons (cons .name.2197 (map cadr .formal.2198)) (core#", +"quote ()))))) (core#quote ()))) (car (cdr .form.2195)) (car (cdr (cdr .form.2195", +"))) (cdr (cdr (cdr .form.2195)))) ((core#lambda (.formal.2200 .body.2201) (cons ", +"(cons .the-lambda.2159 (cons (map car .formal.2200) .body.2201)) (map cadr .form", +"al.2200))) (car (cdr .form.2195)) (cdr (cdr .form.2195)))))) (core#begin (.defin", +"e-transformer.2149 (core#quote and) (core#lambda (.form.2202 .env.2203) (core#if", +" (null? (cdr .form.2202)) #t (core#if (null? (cddr .form.2202)) (cadr .form.2202", +") (cons .the-if.2163 (cons (cadr .form.2202) (cons (cons (.the.2150 (core#quote ", +"and)) (cddr .form.2202)) (cons (core#quote #f) (core#quote ()))))))))) (core#beg", +"in (.define-transformer.2149 (core#quote or) (core#lambda (.form.2204 .env.2205)", +" (core#if (null? (cdr .form.2204)) #f ((core#lambda (.tmp.2206) (cons (.the.2150", +" (core#quote let)) (cons (cons (cons .tmp.2206 (cons (cadr .form.2204) (core#quo", +"te ()))) (core#quote ())) (cons (cons .the-if.2163 (cons .tmp.2206 (cons .tmp.22", +"06 (cons (cons (.the.2150 (core#quote or)) (cddr .form.2204)) (core#quote ()))))", +") (core#quote ()))))) (make-identifier (core#quote it) .env.2205))))) (core#begi", +"n (.define-transformer.2149 (core#quote cond) (core#lambda (.form.2207 .env.2208", +") ((core#lambda (.clauses.2209) (core#if (null? .clauses.2209) #undefined ((core", +"#lambda (.clause.2210) (core#if (core#if (identifier? (car .clause.2210)) (ident", +"ifier=? (.the.2150 (core#quote else)) (make-identifier (car .clause.2210) .env.2", +"208)) #f) (cons .the-begin.2160 (cdr .clause.2210)) (core#if (null? (cdr .clause", +".2210)) (cons (.the.2150 (core#quote or)) (cons (car .clause.2210) (cons (cons (", +".the.2150 (core#quote cond)) (cdr .clauses.2209)) (core#quote ())))) (core#if (c", +"ore#if (identifier? (cadr .clause.2210)) (identifier=? (.the.2150 (core#quote =>", +")) (make-identifier (cadr .clause.2210) .env.2208)) #f) ((core#lambda (.tmp.2211", +") (cons (.the.2150 (core#quote let)) (cons (cons (cons .tmp.2211 (cons (car .cla", +"use.2210) (core#quote ()))) (core#quote ())) (cons (cons .the-if.2163 (cons .tmp", +".2211 (cons (cons (cadr (cdr .clause.2210)) (cons .tmp.2211 (core#quote ()))) (c", +"ons (cons (.the.2150 (core#quote cond)) (cddr .form.2207)) (core#quote ()))))) (", +"core#quote ()))))) (make-identifier (core#quote tmp) .env.2208)) (cons .the-if.2", +"163 (cons (car .clause.2210) (cons (cons .the-begin.2160 (cdr .clause.2210)) (co", +"ns (cons (.the.2150 (core#quote cond)) (cdr .clauses.2209)) (core#quote ()))))))", +"))) (car .clauses.2209)))) (cdr .form.2207)))) (core#begin (.define-transformer.", +"2149 (core#quote quasiquote) (core#lambda (.form.2212 .env.2213) (core#begin (co", +"re#define .quasiquote?.2214 (core#lambda (.form.2218) (core#if (pair? .form.2218", +") (core#if (identifier? (car .form.2218)) (identifier=? (.the.2150 (core#quote q", +"uasiquote)) (make-identifier (car .form.2218) .env.2213)) #f) #f))) (core#begin ", +"(core#define .unquote?.2215 (core#lambda (.form.2219) (core#if (pair? .form.2219", +") (core#if (identifier? (car .form.2219)) (identifier=? (.the.2150 (core#quote u", +"nquote)) (make-identifier (car .form.2219) .env.2213)) #f) #f))) (core#begin (co", +"re#define .unquote-splicing?.2216 (core#lambda (.form.2220) (core#if (pair? .for", +"m.2220) (core#if (pair? (car .form.2220)) (core#if (identifier? (caar .form.2220", +")) (identifier=? (.the.2150 (core#quote unquote-splicing)) (make-identifier (caa", +"r .form.2220) .env.2213)) #f) #f) #f))) (core#begin (core#define .qq.2217 (core#", +"lambda (.depth.2221 .expr.2222) (core#if (.unquote?.2215 .expr.2222) (core#if (=", +" .depth.2221 1) (cadr .expr.2222) (list (.the.2150 (core#quote list)) (list (.th", +"e.2150 (core#quote quote)) (.the.2150 (core#quote unquote))) (.qq.2217 (- .depth", +".2221 1) (car (cdr .expr.2222))))) (core#if (.unquote-splicing?.2216 .expr.2222)", +" (core#if (= .depth.2221 1) (list (.the.2150 (core#quote append)) (car (cdr (car", +" .expr.2222))) (.qq.2217 .depth.2221 (cdr .expr.2222))) (list (.the.2150 (core#q", +"uote cons)) (list (.the.2150 (core#quote list)) (list (.the.2150 (core#quote quo", +"te)) (.the.2150 (core#quote unquote-splicing))) (.qq.2217 (- .depth.2221 1) (car", +" (cdr (car .expr.2222))))) (.qq.2217 .depth.2221 (cdr .expr.2222)))) (core#if (.", +"quasiquote?.2214 .expr.2222) (list (.the.2150 (core#quote list)) (list (.the.215", +"0 (core#quote quote)) (.the.2150 (core#quote quasiquote))) (.qq.2217 (+ .depth.2", +"221 1) (car (cdr .expr.2222)))) (core#if (pair? .expr.2222) (list (.the.2150 (co", +"re#quote cons)) (.qq.2217 .depth.2221 (car .expr.2222)) (.qq.2217 .depth.2221 (c", +"dr .expr.2222))) (core#if (vector? .expr.2222) (list (.the.2150 (core#quote list", +"->vector)) (.qq.2217 .depth.2221 (vector->list .expr.2222))) (list (.the.2150 (c", +"ore#quote quote)) .expr.2222)))))))) ((core#lambda (.x.2223) (.qq.2217 1 .x.2223", +")) (cadr .form.2212)))))))) (core#begin (.define-transformer.2149 (core#quote le", +"t*) (core#lambda (.form.2224 .env.2225) ((core#lambda (.bindings.2226 .body.2227", +") (core#if (null? .bindings.2226) (cons (.the.2150 (core#quote let)) (cons (core", +"#quote ()) .body.2227)) (cons (.the.2150 (core#quote let)) (cons (cons (cons (ca", +"r (car .bindings.2226)) (cdr (car .bindings.2226))) (core#quote ())) (cons (cons", +" (.the.2150 (core#quote let*)) (cons (cdr .bindings.2226) .body.2227)) (core#quo", +"te ())))))) (car (cdr .form.2224)) (cdr (cdr .form.2224))))) (core#begin (.defin", +"e-transformer.2149 (core#quote letrec) (core#lambda (.form.2228 .env.2229) (cons", +" (.the.2150 (core#quote letrec*)) (cdr .form.2228)))) (core#begin (.define-trans", +"former.2149 (core#quote letrec*) (core#lambda (.form.2230 .env.2231) ((core#lamb", +"da (.bindings.2232 .body.2233) ((core#lambda (.variables.2234 .initials.2235) (c", +"ons (.the.2150 (core#quote let)) (cons .variables.2234 (append .initials.2235 (a", +"ppend .body.2233 (core#quote ())))))) (map (core#lambda (.v.2236) (cons .v.2236 ", +"(cons (core#quote #undefined) (core#quote ())))) (map car .bindings.2232)) (map ", +"(core#lambda (.v.2237) (cons (.the.2150 (core#quote set!)) (append .v.2237 (core", +"#quote ())))) .bindings.2232))) (car (cdr .form.2230)) (cdr (cdr .form.2230)))))", +" (core#begin (.define-transformer.2149 (core#quote let-values) (core#lambda (.fo", +"rm.2238 .env.2239) (cons (.the.2150 (core#quote let*-values)) (append (cdr .form", +".2238) (core#quote ()))))) (core#begin (.define-transformer.2149 (core#quote let", +"*-values) (core#lambda (.form.2240 .env.2241) ((core#lambda (.formals.2242 .body", +".2243) (core#if (null? .formals.2242) (cons (.the.2150 (core#quote let)) (cons (", +"core#quote ()) (append .body.2243 (core#quote ())))) ((core#lambda (.formal.2244", +") (cons (.the.2150 (core#quote call-with-values)) (cons (cons .the-lambda.2159 (", +"cons (core#quote ()) (cdr .formal.2244))) (cons (cons (.the.2150 (core#quote lam", +"bda)) (cons (car .formal.2244) (cons (cons (.the.2150 (core#quote let*-values)) ", +"(cons (cdr .formals.2242) .body.2243)) (core#quote ())))) (core#quote ()))))) (c", +"ar .formals.2242)))) (cadr .form.2240) (cddr .form.2240)))) (core#begin (.define", +"-transformer.2149 (core#quote define-values) (core#lambda (.form.2245 .env.2246)", +" ((core#lambda (.formal.2247 .body.2248) ((core#lambda (.tmps.2249) (cons .the-b", +"egin.2160 (append ((core#lambda () (core#begin (core#define .loop.2250 (core#lam", +"bda (.formal.2251) (core#if (identifier? .formal.2251) (cons (cons .the-define.2", +"158 (cons .formal.2251 (cons (core#quote #undefined) (core#quote ())))) (core#qu", +"ote ())) (core#if (pair? .formal.2251) (cons (cons .the-define.2158 (cons (car .", +"formal.2251) (cons (core#quote #undefined) (core#quote ())))) (.loop.2250 (cdr .", +"formal.2251))) (core#quote ()))))) (.loop.2250 .formal.2247)))) (cons (cons (.th", +"e.2150 (core#quote call-with-values)) (cons (cons .the-lambda.2159 (cons (core#q", +"uote ()) .body.2248)) (cons (cons .the-lambda.2159 (cons .tmps.2249 ((core#lambd", +"a () (core#begin (core#define .loop.2252 (core#lambda (.formal.2253 .tmps.2254) ", +"(core#if (identifier? .formal.2253) (cons (cons .the-set!.2162 (cons .formal.225", +"3 (cons .tmps.2254 (core#quote ())))) (core#quote ())) (core#if (pair? .formal.2", +"253) (cons (cons .the-set!.2162 (cons (car .formal.2253) (cons (car .tmps.2254) ", +"(core#quote ())))) (.loop.2252 (cdr .formal.2253) (cdr .tmps.2254))) (core#quote", +" ()))))) (.loop.2252 .formal.2247 .tmps.2249)))))) (core#quote ())))) (core#quot", +"e ()))))) ((core#lambda () (core#begin (core#define .loop.2255 (core#lambda (.fo", +"rmal.2256) (core#if (identifier? .formal.2256) (make-identifier .formal.2256 .en", +"v.2246) (core#if (pair? .formal.2256) (cons (make-identifier (car .formal.2256) ", +".env.2246) (.loop.2255 (cdr .formal.2256))) (core#quote ()))))) (.loop.2255 .for", +"mal.2247)))))) (cadr .form.2245) (cddr .form.2245)))) (core#begin (.define-trans", +"former.2149 (core#quote do) (core#lambda (.form.2257 .env.2258) ((core#lambda (.", +"bindings.2259 .test.2260 .cleanup.2261 .body.2262) ((core#lambda (.loop.2263) (c", +"ons (.the.2150 (core#quote let)) (cons .loop.2263 (cons (map (core#lambda (.x.22", +"64) (cons (car .x.2264) (cons (cadr .x.2264) (core#quote ())))) .bindings.2259) ", +"(cons (cons .the-if.2163 (cons .test.2260 (cons (cons .the-begin.2160 .cleanup.2", +"261) (cons (cons .the-begin.2160 (append .body.2262 (cons (cons .loop.2263 (map ", +"(core#lambda (.x.2265) (core#if (null? (cdr (cdr .x.2265))) (car .x.2265) (car (", +"cdr (cdr .x.2265))))) .bindings.2259)) (core#quote ())))) (core#quote ()))))) (c", +"ore#quote ())))))) (make-identifier (core#quote loop) .env.2258))) (car (cdr .fo", +"rm.2257)) (car (car (cdr (cdr .form.2257)))) (cdr (car (cdr (cdr .form.2257)))) ", +"(cdr (cdr (cdr .form.2257)))))) (core#begin (.define-transformer.2149 (core#quot", +"e when) (core#lambda (.form.2266 .env.2267) ((core#lambda (.test.2268 .body.2269", +") (cons .the-if.2163 (cons .test.2268 (cons (cons .the-begin.2160 (append .body.", +"2269 (core#quote ()))) (cons (core#quote #undefined) (core#quote ())))))) (car (", +"cdr .form.2266)) (cdr (cdr .form.2266))))) (core#begin (.define-transformer.2149", +" (core#quote unless) (core#lambda (.form.2270 .env.2271) ((core#lambda (.test.22", +"72 .body.2273) (cons .the-if.2163 (cons .test.2272 (cons (core#quote #undefined)", +" (cons (cons .the-begin.2160 (append .body.2273 (core#quote ()))) (core#quote ()", +")))))) (car (cdr .form.2270)) (cdr (cdr .form.2270))))) (core#begin (.define-tra", +"nsformer.2149 (core#quote case) (core#lambda (.form.2274 .env.2275) ((core#lambd", +"a (.key.2276 .clauses.2277) ((core#lambda (.the-key.2278) (cons (.the.2150 (core", +"#quote let)) (cons (cons (cons .the-key.2278 (cons .key.2276 (core#quote ()))) (", +"core#quote ())) (cons ((core#lambda () (core#begin (core#define .loop.2279 (core", +"#lambda (.clauses.2280) (core#if (null? .clauses.2280) #undefined ((core#lambda ", +"(.clause.2281) (cons .the-if.2163 (cons (core#if (core#if (identifier? (car .cla", +"use.2281)) (identifier=? (.the.2150 (core#quote else)) (make-identifier (car .cl", +"ause.2281) .env.2275)) #f) #t (cons (.the.2150 (core#quote or)) (append (map (co", +"re#lambda (.x.2282) (cons (.the.2150 (core#quote eqv?)) (cons .the-key.2278 (con", +"s (cons .the-quote.2161 (cons .x.2282 (core#quote ()))) (core#quote ()))))) (car", +" .clause.2281)) (core#quote ())))) (cons (core#if (core#if (identifier? (cadr .c", +"lause.2281)) (identifier=? (.the.2150 (core#quote =>)) (make-identifier (cadr .c", +"lause.2281) .env.2275)) #f) (cons (car (cdr (cdr .clause.2281))) (cons .the-key.", +"2278 (core#quote ()))) (cons .the-begin.2160 (append (cdr .clause.2281) (core#qu", +"ote ())))) (cons (.loop.2279 (cdr .clauses.2280)) (core#quote ())))))) (car .cla", +"uses.2280))))) (.loop.2279 .clauses.2277)))) (core#quote ()))))) (make-identifie", +"r (core#quote key) .env.2275))) (car (cdr .form.2274)) (cdr (cdr .form.2274)))))", +" (core#begin (.define-transformer.2149 (core#quote parameterize) (core#lambda (.", +"form.2283 .env.2284) ((core#lambda (.formal.2285 .body.2286) (cons (.the.2150 (c", +"ore#quote with-dynamic-environment)) (cons (cons (.the.2150 (core#quote list)) (", +"append (map (core#lambda (.x.2287) (cons (.the.2150 (core#quote cons)) (cons (ca", +"r .x.2287) (cons (cadr .x.2287) (core#quote ()))))) .formal.2285) (core#quote ()", +"))) (cons (cons .the-lambda.2159 (cons (core#quote ()) (append .body.2286 (core#", +"quote ())))) (core#quote ()))))) (car (cdr .form.2283)) (cdr (cdr .form.2283))))", +") (.define-transformer.2149 (core#quote define-record-type) (core#lambda (.form.", +"2288 .env.2289) ((core#lambda (.type.2290 .ctor.2291 .pred.2292 .fields.2293) (c", +"ons .the-begin.2160 (cons (cons .the-define.2158 (cons .ctor.2291 (cons (cons (.", +"the.2150 (core#quote make-record)) (cons (cons (core#quote quote) (cons .type.22", +"90 (core#quote ()))) (cons (cons (.the.2150 (core#quote vector)) (map (core#lamb", +"da (.field.2294) (core#if (memq (car .field.2294) (cdr .ctor.2291)) (car .field.", +"2294) #undefined)) .fields.2293)) (core#quote ())))) (core#quote ())))) (cons (c", +"ons .the-define.2158 (cons .pred.2292 (cons (cons (.the.2150 (core#quote lambda)", +") (cons (cons (core#quote obj) (core#quote ())) (cons (cons (.the.2150 (core#quo", +"te and)) (cons (cons (.the.2150 (core#quote record?)) (cons (core#quote obj) (co", +"re#quote ()))) (cons (cons (.the.2150 (core#quote eq?)) (cons (cons (.the.2150 (", +"core#quote record-type)) (cons (core#quote obj) (core#quote ()))) (cons (cons (c", +"ore#quote quote) (cons .type.2290 (core#quote ()))) (core#quote ())))) (core#quo", +"te ())))) (core#quote ())))) (core#quote ())))) ((core#lambda () (core#begin (co", +"re#define .loop.2295 (core#lambda (.fields.2296 .pos.2297 .acc.2298) (core#if (n", +"ull? .fields.2296) .acc.2298 ((core#lambda (.field.2299) ((core#lambda (.defs.23", +"00) (.loop.2295 (cdr .fields.2296) (+ .pos.2297 1) (append .defs.2300 .acc.2298)", +")) (cons (cons .the-define.2158 (cons (cons (cadr .field.2299) (cons (core#quote", +" obj) (core#quote ()))) (cons (cons .the-if.2163 (cons (cons .pred.2292 (cons (c", +"ore#quote obj) (core#quote ()))) (cons (cons (.the.2150 (core#quote vector-ref))", +" (cons (cons (.the.2150 (core#quote record-datum)) (cons (core#quote obj) (core#", +"quote ()))) (cons .pos.2297 (core#quote ())))) (cons (cons (.the.2150 (core#quot", +"e error)) (cons (core#quote \"record type mismatch\") (cons (core#quote obj) (cons", +" (cons (core#quote quote) (cons .type.2290 (core#quote ()))) (core#quote ())))))", +" (core#quote ()))))) (core#quote ())))) (core#if (null? (cddr .field.2299)) (cor", +"e#quote ()) (cons (cons .the-define.2158 (cons (cons (car (cddr .field.2299)) (c", +"ons (core#quote obj) (cons (core#quote value) (core#quote ())))) (cons (cons .th", +"e-if.2163 (cons (cons .pred.2292 (cons (core#quote obj) (core#quote ()))) (cons ", +"(cons (.the.2150 (core#quote vector-set!)) (cons (cons (.the.2150 (core#quote re", +"cord-datum)) (cons (core#quote obj) (core#quote ()))) (cons .pos.2297 (cons (cor", +"e#quote value) (core#quote ()))))) (cons (cons (.the.2150 (core#quote error)) (c", +"ons (core#quote \"record type mismatch\") (cons (core#quote obj) (cons (cons (core", +"#quote quote) (cons .type.2290 (core#quote ()))) (core#quote ()))))) (core#quote", +" ()))))) (core#quote ())))) (core#quote ())))))) (car .fields.2296))))) (.loop.2", +"295 .fields.2293 0 (core#quote ()))))))))) (car (cdr .form.2288)) (car (cdr (cdr", +" .form.2288))) (car (cdr (cdr (cdr .form.2288)))) (cdr (cdr (cdr (cdr .form.2288", +"))))))))))))))))))))))))))))))))))))) (.the.2150 (core#quote core#define)) (.the", +".2150 (core#quote core#lambda)) (.the.2150 (core#quote core#begin)) (.the.2150 (", +"core#quote core#quote)) (.the.2150 (core#quote core#set!)) (.the.2150 (core#quot", +"e core#if)) (.the.2150 (core#quote core#define-macro)) (.the.2150 (core#quote de", +"fine)) (.the.2150 (core#quote lambda)) (.the.2150 (core#quote begin)) (.the.2150", +" (core#quote quote)) (.the.2150 (core#quote set!)) (.the.2150 (core#quote if)) (", +".the.2150 (core#quote define-macro)))) (core#lambda (.name.2301 .transformer.230", +"2) (dictionary-set! (macro-objects) .name.2301 .transformer.2302)) (core#lambda ", +"(.var.2303) (make-identifier .var.2303 default-environment)))", +}; + +static const char boot_compile_rom[][80] = { +"(core#begin (core#define make-identifier #undefined) (core#begin (core#define id", +"entifier? #undefined) (core#begin (core#define identifier=? #undefined) (core#be", +"gin (core#define identifier-name #undefined) (core#begin (core#define identifier", +"-environment #undefined) (core#begin (core#define make-environment #undefined) (", +"core#begin (core#define default-environment #undefined) (core#begin (core#define", +" environment? #undefined) (core#begin (core#define find-identifier #undefined) (", +"core#begin (core#define add-identifier! #undefined) (core#begin (core#define set", +"-identifier! #undefined) (core#begin (core#define macro-objects #undefined) (cor", +"e#begin (core#define compile #undefined) (core#begin (core#define eval #undefine", +"d) (call-with-values (core#lambda () ((core#lambda () (core#begin (core#begin (c", +"ore#define .make-identifier.2304 (core#lambda (.name.2330 .env.2331) (make-recor", +"d (core#quote identifier) (vector .name.2330 .env.2331)))) (core#begin (core#def", +"ine .%identifier?.2305 (core#lambda (.obj.2332) (core#if (record? .obj.2332) (eq", +"? (record-type .obj.2332) (core#quote identifier)) #f))) (core#begin (core#defin", +"e .identifier-environment.2306 (core#lambda (.obj.2333) (core#if (.%identifier?.", +"2305 .obj.2333) (vector-ref (record-datum .obj.2333) 1) (error \"record type mism", +"atch\" .obj.2333 (core#quote identifier))))) (core#define .identifier-name.2307 (", +"core#lambda (.obj.2334) (core#if (.%identifier?.2305 .obj.2334) (vector-ref (rec", +"ord-datum .obj.2334) 0) (error \"record type mismatch\" .obj.2334 (core#quote iden", +"tifier)))))))) (core#begin (core#define .identifier?.2308 (core#lambda (.obj.233", +"5) ((core#lambda (.it.2336) (core#if .it.2336 .it.2336 ((core#lambda (.it.2337) ", +"(core#if .it.2337 .it.2337 #f)) (.%identifier?.2305 .obj.2335)))) (symbol? .obj.", +"2335)))) (core#begin (core#define .identifier=?.2309 (core#lambda (.id1.2338 .id", +"2.2339) (core#if (core#if (symbol? .id1.2338) (symbol? .id2.2339) #f) (eq? .id1.", +"2338 .id2.2339) (core#if (core#if (.%identifier?.2305 .id1.2338) (.%identifier?.", +"2305 .id2.2339) #f) (eq? (.find-identifier.2316 (.identifier-name.2307 .id1.2338", +") (.identifier-environment.2306 .id1.2338)) (.find-identifier.2316 (.identifier-", +"name.2307 .id2.2339) (.identifier-environment.2306 .id2.2339))) #f)))) (core#beg", +"in (core#set! equal? ((core#lambda (.e?.2340) (core#lambda (.x.2341 .y.2342) (co", +"re#if (.%identifier?.2305 .x.2341) (.identifier=?.2309 .x.2341 .y.2342) (.e?.234", +"0 .x.2341 .y.2342)))) equal?)) (core#begin (core#begin (core#define .%make-envir", +"onment.2310 (core#lambda (.parent.2343 .prefix.2344 .binding.2345) (make-record ", +"(core#quote environment) (vector .parent.2343 .prefix.2344 .binding.2345)))) (co", +"re#begin (core#define .environment?.2311 (core#lambda (.obj.2346) (core#if (reco", +"rd? .obj.2346) (eq? (record-type .obj.2346) (core#quote environment)) #f))) (cor", +"e#begin (core#define .environment-binding.2312 (core#lambda (.obj.2347) (core#if", +" (.environment?.2311 .obj.2347) (vector-ref (record-datum .obj.2347) 2) (error \"", +"record type mismatch\" .obj.2347 (core#quote environment))))) (core#begin (core#d", +"efine .environment-prefix.2313 (core#lambda (.obj.2348) (core#if (.environment?.", +"2311 .obj.2348) (vector-ref (record-datum .obj.2348) 1) (error \"record type mism", +"atch\" .obj.2348 (core#quote environment))))) (core#define .environment-parent.23", +"14 (core#lambda (.obj.2349) (core#if (.environment?.2311 .obj.2349) (vector-ref ", +"(record-datum .obj.2349) 0) (error \"record type mismatch\" .obj.2349 (core#quote ", +"environment))))))))) (core#begin (core#define .search-scope.2315 (core#lambda (.", +"id.2350 .env.2351) ((.environment-binding.2312 .env.2351) .id.2350))) (core#begi", +"n (core#define .find-identifier.2316 (core#lambda (.id.2352 .env.2353) ((core#la", +"mbda (.it.2354) (core#if .it.2354 .it.2354 ((core#lambda (.it.2355) (core#if .it", +".2355 .it.2355 #f)) ((core#lambda (.parent.2356) (core#if .parent.2356 (.find-id", +"entifier.2316 .id.2352 .parent.2356) (core#if (symbol? .id.2352) (.add-identifie", +"r!.2317 .id.2352 .env.2353) (.find-identifier.2316 (.identifier-name.2307 .id.23", +"52) (.identifier-environment.2306 .id.2352))))) (.environment-parent.2314 .env.2", +"353))))) (.search-scope.2315 .id.2352 .env.2353)))) (core#begin (core#define .ad", +"d-identifier!.2317 ((core#lambda (.uniq.2357) (core#lambda (.id.2358 .env.2359) ", +"((core#lambda (.it.2360) (core#if .it.2360 .it.2360 ((core#lambda (.it.2361) (co", +"re#if .it.2361 .it.2361 #f)) (core#if (core#if (not (.environment-parent.2314 .e", +"nv.2359)) (symbol? .id.2358) #f) (string->symbol (string-append (.environment-pr", +"efix.2313 .env.2359) (symbol->string .id.2358))) ((core#lambda (.uid.2362) (core", +"#begin (.set-identifier!.2318 .id.2358 .uid.2362 .env.2359) .uid.2362)) (.uniq.2", +"357 .id.2358)))))) (.search-scope.2315 .id.2358 .env.2359)))) ((core#lambda (.n.", +"2363) (core#lambda (.id.2364) ((core#lambda (.m.2365) (core#begin (core#set! .n.", +"2363 (+ .n.2363 1)) (string->symbol (string-append \".\" (symbol->string ((core#la", +"mbda () (core#begin (core#define .loop.2366 (core#lambda (.id.2367) (core#if (sy", +"mbol? .id.2367) .id.2367 (.loop.2366 (.identifier-name.2307 .id.2367))))) (.loop", +".2366 .id.2364))))) \".\" (number->string .m.2365))))) .n.2363))) 0))) (core#begin", +" (core#define .set-identifier!.2318 (core#lambda (.id.2368 .uid.2369 .env.2370) ", +"((.environment-binding.2312 .env.2370) .id.2368 .uid.2369))) (core#begin (core#d", +"efine .make-environment.2319 (core#lambda (.prefix.2371) (.%make-environment.231", +"0 #f (symbol->string .prefix.2371) (make-ephemeron-table)))) (core#begin (core#d", +"efine .default-environment.2320 ((core#lambda (.env.2372) (core#begin (for-each ", +"(core#lambda (.x.2373) (.set-identifier!.2318 .x.2373 .x.2373 .env.2372)) (core#", +"quote (core#define core#set! core#quote core#lambda core#if core#begin core#defi", +"ne-macro))) .env.2372)) (.make-environment.2319 (string->symbol \"\")))) (core#beg", +"in (core#define .extend-environment.2321 (core#lambda (.parent.2374) (.%make-env", +"ironment.2310 .parent.2374 #f (make-ephemeron-table)))) (core#begin (core#define", +" .global-macro-table.2322 (make-dictionary)) (core#begin (core#define .find-macr", +"o.2323 (core#lambda (.uid.2375) (core#if (dictionary-has? .global-macro-table.23", +"22 .uid.2375) (dictionary-ref .global-macro-table.2322 .uid.2375) #f))) (core#be", +"gin (core#define .add-macro!.2324 (core#lambda (.uid.2376 .expander.2377) (dicti", +"onary-set! .global-macro-table.2322 .uid.2376 .expander.2377))) (core#begin (cor", +"e#define .shadow-macro!.2325 (core#lambda (.uid.2378) (core#if (dictionary-has? ", +".global-macro-table.2322 .uid.2378) (dictionary-delete! .global-macro-table.2322", +" .uid.2378) #undefined))) (core#begin (core#define .macro-objects.2326 (core#lam", +"bda () .global-macro-table.2322)) (core#begin (core#define .expand.2327 ((core#l", +"ambda (.task-queue.2379) (core#begin (core#define .queue.2380 (core#lambda (.tas", +"k.2393) ((core#lambda (.tmp.2394) (core#begin (.task-queue.2379 (cons (cons .tmp", +".2394 .task.2393) (.task-queue.2379))) .tmp.2394)) (cons #f #f)))) (core#begin (", +"core#define .run-all.2381 (core#lambda () (for-each (core#lambda (.x.2395) ((cor", +"e#lambda (.task.2396 .skelton.2397) ((core#lambda (.x.2398) (core#begin (set-car", +"! .skelton.2397 (car .x.2398)) (set-cdr! .skelton.2397 (cdr .x.2398)))) (.task.2", +"396))) (cdr .x.2395) (car .x.2395))) (reverse (.task-queue.2379))))) (core#begin", +" (core#define .caddr.2382 (core#lambda (.x.2399) (car (cddr .x.2399)))) (core#be", +"gin (core#define .map*.2383 (core#lambda (.proc.2400 .list*.2401) (core#if (null", +"? .list*.2401) .list*.2401 (core#if (pair? .list*.2401) (cons (.proc.2400 (car .", +"list*.2401)) (.map*.2383 .proc.2400 (cdr .list*.2401))) (.proc.2400 .list*.2401)", +")))) (core#begin (core#define .literal?.2384 (core#lambda (.x.2402) (not ((core#", +"lambda (.it.2403) (core#if .it.2403 .it.2403 ((core#lambda (.it.2404) (core#if .", +"it.2404 .it.2404 #f)) (pair? .x.2402)))) (.identifier?.2308 .x.2402))))) (core#b", +"egin (core#define .call?.2385 (core#lambda (.x.2405) (core#if (list? .x.2405) (c", +"ore#if (not (null? .x.2405)) (.identifier?.2308 (car .x.2405)) #f) #f))) (core#b", +"egin (core#define .expand-variable.2386 (core#lambda (.var.2406 .env.2407) ((cor", +"e#lambda (.x.2408) ((core#lambda (.m.2409) (core#if .m.2409 (.expand-node.2391 (", +".m.2409 .var.2406 .env.2407) .env.2407) .x.2408)) (.find-macro.2323 .x.2408))) (", +".find-identifier.2316 .var.2406 .env.2407)))) (core#begin (core#define .expand-q", +"uote.2387 (core#lambda (.obj.2410) (cons (core#quote core#quote) (cons .obj.2410", +" (core#quote ()))))) (core#begin (core#define .expand-define.2388 (core#lambda (", +".var.2411 .form.2412 .env.2413) ((core#lambda (.uid.2414) (core#begin (.shadow-m", +"acro!.2325 .uid.2414) (cons (core#quote core#define) (cons .uid.2414 (cons (.exp", +"and-node.2391 .form.2412 .env.2413) (core#quote ())))))) (.add-identifier!.2317 ", +".var.2411 .env.2413)))) (core#begin (core#define .expand-lambda.2389 (core#lambd", +"a (.args.2415 .body.2416 .env.2417) ((core#lambda (.env.2418) ((core#lambda (.ar", +"gs.2419) (with-dynamic-environment (list (cons .task-queue.2379 (core#quote ()))", +") (core#lambda () ((core#lambda (.body.2420) (core#begin (.run-all.2381) (cons (", +"core#quote core#lambda) (cons .args.2419 (cons .body.2420 (core#quote ())))))) (", +".expand-node.2391 .body.2416 .env.2418))))) (.map*.2383 (core#lambda (.var.2421)", +" (.add-identifier!.2317 .var.2421 .env.2418)) .args.2415))) (.extend-environment", +".2321 .env.2417)))) (core#begin (core#define .expand-define-macro.2390 (core#lam", +"bda (.var.2422 .transformer.2423 .env.2424) ((core#lambda (.uid.2425) ((core#lam", +"bda (.expander.2426) (core#begin (.add-macro!.2324 .uid.2425 .expander.2426) #un", +"defined)) (load (.expand.2392 .transformer.2423 .env.2424)))) (.add-identifier!.", +"2317 .var.2422 .env.2424)))) (core#begin (core#define .expand-node.2391 (core#la", +"mbda (.expr.2427 .env.2428) (core#if (.literal?.2384 .expr.2427) .expr.2427 (cor", +"e#if (.identifier?.2308 .expr.2427) (.expand-variable.2386 .expr.2427 .env.2428)", +" (core#if (.call?.2385 .expr.2427) ((core#lambda (.functor.2429) ((core#lambda (", +".key.2430) (core#if ((core#lambda (.it.2431) (core#if .it.2431 .it.2431 #f)) (eq", +"v? .key.2430 (core#quote core#quote))) (.expand-quote.2387 (cadr .expr.2427)) (c", +"ore#if ((core#lambda (.it.2432) (core#if .it.2432 .it.2432 #f)) (eqv? .key.2430 ", +"(core#quote core#define))) (.expand-define.2388 (cadr .expr.2427) (.caddr.2382 .", +"expr.2427) .env.2428) (core#if ((core#lambda (.it.2433) (core#if .it.2433 .it.24", +"33 #f)) (eqv? .key.2430 (core#quote core#lambda))) (.queue.2380 (core#lambda () ", +"(.expand-lambda.2389 (cadr .expr.2427) (.caddr.2382 .expr.2427) .env.2428))) (co", +"re#if ((core#lambda (.it.2434) (core#if .it.2434 .it.2434 #f)) (eqv? .key.2430 (", +"core#quote core#define-macro))) (.expand-define-macro.2390 (cadr .expr.2427) (.c", +"addr.2382 .expr.2427) .env.2428) (core#if #t ((core#lambda (.m.2435) (core#if .m", +".2435 (.expand-node.2391 (.m.2435 .expr.2427 .env.2428) .env.2428) (map (core#la", +"mbda (.x.2436) (.expand-node.2391 .x.2436 .env.2428)) .expr.2427))) (.find-macro", +".2323 .functor.2429)) #undefined)))))) .functor.2429)) (.find-identifier.2316 (c", +"ar .expr.2427) .env.2428)) (core#if (list? .expr.2427) (map (core#lambda (.x.243", +"7) (.expand-node.2391 .x.2437 .env.2428)) .expr.2427) (error \"invalid expression", +"\" .expr.2427))))))) (core#begin (core#define .expand.2392 (core#lambda (.expr.24", +"38 .env.2439) ((core#lambda (.x.2440) (core#begin (.run-all.2381) .x.2440)) (.ex", +"pand-node.2391 .expr.2438 .env.2439)))) .expand.2392)))))))))))))) (make-paramet", +"er (core#quote ())))) (core#begin (core#define .compile.2328 (core#lambda (.expr", +".2441 . .env.2442) (.expand.2327 .expr.2441 (core#if (null? .env.2442) .default-", +"environment.2320 (car .env.2442))))) (core#begin (core#define .eval.2329 (core#l", +"ambda (.expr.2443 . .env.2444) (load (.compile.2328 .expr.2443 (core#if (null? .", +"env.2444) .default-environment.2320 (car .env.2444)))))) (values .make-identifie", +"r.2304 .identifier?.2308 .identifier=?.2309 .identifier-name.2307 .identifier-en", +"vironment.2306 .make-environment.2319 .default-environment.2320 .environment?.23", +"11 .find-identifier.2316 .add-identifier!.2317 .set-identifier!.2318 .macro-obje", +"cts.2326 .compile.2328 .eval.2329)))))))))))))))))))))))) (core#lambda (.make-id", +"entifier.2445 .identifier?.2446 .identifier=?.2447 .identifier-name.2448 .identi", +"fier-environment.2449 .make-environment.2450 .default-environment.2451 .environm", +"ent?.2452 .find-identifier.2453 .add-identifier!.2454 .set-identifier!.2455 .mac", +"ro-objects.2456 .compile.2457 .eval.2458) (core#begin (core#set! make-identifier", +" .make-identifier.2445) (core#begin (core#set! identifier? .identifier?.2446) (c", +"ore#begin (core#set! identifier=? .identifier=?.2447) (core#begin (core#set! ide", +"ntifier-name .identifier-name.2448) (core#begin (core#set! identifier-environmen", +"t .identifier-environment.2449) (core#begin (core#set! make-environment .make-en", +"vironment.2450) (core#begin (core#set! default-environment .default-environment.", +"2451) (core#begin (core#set! environment? .environment?.2452) (core#begin (core#", +"set! find-identifier .find-identifier.2453) (core#begin (core#set! add-identifie", +"r! .add-identifier!.2454) (core#begin (core#set! set-identifier! .set-identifier", +"!.2455) (core#begin (core#set! macro-objects .macro-objects.2456) (core#begin (c", +"ore#set! compile .compile.2457) (core#set! eval .eval.2458))))))))))))))))))))))", +"))))))))", }; #if PIC_USE_LIBRARY @@ -223,159 +427,161 @@ static const char boot_library_rom[][80] = { "egin (core#define library-environment #undefined) (core#begin (core#define libra", "ry-exports #undefined) (core#begin (core#define library-import #undefined) (core", "#begin (core#define library-export #undefined) (call-with-values (core#lambda ()", -" ((core#lambda () (core#begin (core#define .mangle.2370 (core#lambda (.name.2379", -") (core#begin (core#if (null? .name.2379) (error \"library name should be a list ", -"of at least one symbols\" .name.2379) #undefined) (core#begin (core#define .->str", -"ing.2380 (core#lambda (.n.2382) (core#if (symbol? .n.2382) ((core#lambda (.str.2", -"383) (core#begin (string-for-each (core#lambda (.c.2384) (core#if ((core#lambda ", -"(.it.2385) (core#if .it.2385 .it.2385 ((core#lambda (.it.2386) (core#if .it.2386", -" .it.2386 #f)) (char=? .c.2384 #\\:)))) (char=? .c.2384 #\\.)) (error \"elements of", -" library name may not contain '.' or ':'\" .n.2382) #undefined)) .str.2383) .str.", -"2383)) (symbol->string .n.2382)) (core#if (core#if (number? .n.2382) (core#if (e", -"xact? .n.2382) (<= 0 .n.2382) #f) #f) (number->string .n.2382) (error \"symbol or", -" non-negative integer is required\" .n.2382))))) (core#begin (core#define .join.2", -"381 (core#lambda (.strs.2387 .delim.2388) ((core#lambda () (core#begin (core#def", -"ine .loop.2389 (core#lambda (.res.2390 .strs.2391) (core#if (null? .strs.2391) .", -"res.2390 (.loop.2389 (string-append .res.2390 .delim.2388 (car .strs.2391)) (cdr", -" .strs.2391))))) (.loop.2389 (car .strs.2387) (cdr .strs.2387))))))) (core#if (s", -"ymbol? .name.2379) .name.2379 (string->symbol (.join.2381 (map .->string.2380 .n", -"ame.2379) \".\")))))))) (core#begin (core#define .current-library.2371 (make-param", -"eter (core#quote (picrin user)) .mangle.2370)) (core#begin (core#define .*librar", -"ies*.2372 (make-dictionary)) (core#begin (core#define .find-library.2373 (core#l", -"ambda (.name.2392) (dictionary-has? .*libraries*.2372 (.mangle.2370 .name.2392))", -")) (core#begin (core#define .make-library.2374 (core#lambda (.name.2393) ((core#", -"lambda (.name.2394) ((core#lambda (.env.2395 .exports.2396) (core#begin (set-ide", -"ntifier! (core#quote define-library) (core#quote define-library) .env.2395) (cor", -"e#begin (set-identifier! (core#quote import) (core#quote import) .env.2395) (cor", -"e#begin (set-identifier! (core#quote export) (core#quote export) .env.2395) (cor", +" ((core#lambda () (core#begin (core#define .mangle.2459 (core#lambda (.name.2468", +") (core#begin (core#if (null? .name.2468) (error \"library name should be a list ", +"of at least one symbols\" .name.2468) #undefined) (core#begin (core#define .->str", +"ing.2469 (core#lambda (.n.2471) (core#if (symbol? .n.2471) ((core#lambda (.str.2", +"472) (core#begin (string-for-each (core#lambda (.c.2473) (core#if ((core#lambda ", +"(.it.2474) (core#if .it.2474 .it.2474 ((core#lambda (.it.2475) (core#if .it.2475", +" .it.2475 #f)) (char=? .c.2473 #\\:)))) (char=? .c.2473 #\\.)) (error \"elements of", +" library name may not contain '.' or ':'\" .n.2471) #undefined)) .str.2472) .str.", +"2472)) (symbol->string .n.2471)) (core#if (core#if (number? .n.2471) (core#if (e", +"xact? .n.2471) (<= 0 .n.2471) #f) #f) (number->string .n.2471) (error \"symbol or", +" non-negative integer is required\" .n.2471))))) (core#begin (core#define .join.2", +"470 (core#lambda (.strs.2476 .delim.2477) ((core#lambda () (core#begin (core#def", +"ine .loop.2478 (core#lambda (.res.2479 .strs.2480) (core#if (null? .strs.2480) .", +"res.2479 (.loop.2478 (string-append .res.2479 .delim.2477 (car .strs.2480)) (cdr", +" .strs.2480))))) (.loop.2478 (car .strs.2476) (cdr .strs.2476))))))) (core#if (s", +"ymbol? .name.2468) .name.2468 (string->symbol (.join.2470 (map .->string.2469 .n", +"ame.2468) \".\")))))))) (core#begin (core#define .current-library.2460 (make-param", +"eter (core#quote (picrin user)) .mangle.2459)) (core#begin (core#define .*librar", +"ies*.2461 (make-dictionary)) (core#begin (core#define .find-library.2462 (core#l", +"ambda (.name.2481) (dictionary-has? .*libraries*.2461 (.mangle.2459 .name.2481))", +")) (core#begin (core#define .make-library.2463 (core#lambda (.name.2482) ((core#", +"lambda (.name.2483) ((core#lambda (.env.2484 .exports.2485) (core#begin (set-ide", +"ntifier! (core#quote define-library) (core#quote define-library) .env.2484) (cor", +"e#begin (set-identifier! (core#quote import) (core#quote import) .env.2484) (cor", +"e#begin (set-identifier! (core#quote export) (core#quote export) .env.2484) (cor", "e#begin (set-identifier! (core#quote cond-expand) (core#quote cond-expand) .env.", -"2395) (dictionary-set! .*libraries*.2372 .name.2394 (cons .env.2395 .exports.239", -"6))))))) (make-environment (string->symbol (string-append (symbol->string .name.", -"2394) \":\"))) (make-dictionary))) (.mangle.2370 .name.2393)))) (core#begin (core#", -"define .library-environment.2375 (core#lambda (.name.2397) (car (dictionary-ref ", -".*libraries*.2372 (.mangle.2370 .name.2397))))) (core#begin (core#define .librar", -"y-exports.2376 (core#lambda (.name.2398) (cdr (dictionary-ref .*libraries*.2372 ", -"(.mangle.2370 .name.2398))))) (core#begin (core#define .library-import.2377 (cor", -"e#lambda (.name.2399 .sym.2400 .alias.2401) ((core#lambda (.uid.2402) ((core#lam", -"bda (.env.2403) (set-identifier! .alias.2401 .uid.2402 .env.2403)) (.library-env", -"ironment.2375 (.current-library.2371)))) (dictionary-ref (.library-exports.2376 ", -".name.2399) .sym.2400)))) (core#begin (core#define .library-export.2378 (core#la", -"mbda (.sym.2404 .alias.2405) ((core#lambda (.env.2406 .exports.2407) (dictionary", -"-set! .exports.2407 .alias.2405 (find-identifier .sym.2404 .env.2406))) (.librar", -"y-environment.2375 (.current-library.2371)) (.library-exports.2376 (.current-lib", -"rary.2371))))) (core#begin ((core#lambda (.define-transformer.2408) (core#begin ", -"(.define-transformer.2408 (core#quote define-library) (core#lambda (.form.2409 .", -"_.2410) ((core#lambda (.name.2411 .body.2412) (core#begin ((core#lambda (.it.241", -"3) (core#if .it.2413 .it.2413 ((core#lambda (.it.2414) (core#if .it.2414 .it.241", -"4 #f)) (.make-library.2374 .name.2411)))) (.find-library.2373 .name.2411)) (with", -"-dynamic-environment (list (cons .current-library.2371 .name.2411)) (core#lambda", -" () (for-each (core#lambda (.expr.2415) (eval .expr.2415 .name.2411)) .body.2412", -"))))) (cadr .form.2409) (cddr .form.2409)))) (core#begin (.define-transformer.24", -"08 (core#quote cond-expand) (core#lambda (.form.2416 ._.2417) ((core#lambda (.te", -"st.2418) (core#begin (core#set! .test.2418 (core#lambda (.form.2419) ((core#lamb", -"da (.it.2420) (core#if .it.2420 .it.2420 ((core#lambda (.it.2421) (core#if .it.2", -"421 .it.2421 ((core#lambda (.it.2422) (core#if .it.2422 .it.2422 #f)) (core#if (", -"pair? .form.2419) ((core#lambda (.key.2423) (core#if ((core#lambda (.it.2424) (c", -"ore#if .it.2424 .it.2424 #f)) (eqv? .key.2423 (core#quote library))) (.find-libr", -"ary.2373 (cadr .form.2419)) (core#if ((core#lambda (.it.2425) (core#if .it.2425 ", -".it.2425 #f)) (eqv? .key.2423 (core#quote not))) (not (.test.2418 (cadr .form.24", -"19))) (core#if ((core#lambda (.it.2426) (core#if .it.2426 .it.2426 #f)) (eqv? .k", -"ey.2423 (core#quote and))) ((core#lambda () (core#begin (core#define .loop.2427 ", -"(core#lambda (.form.2428) ((core#lambda (.it.2429) (core#if .it.2429 .it.2429 ((", -"core#lambda (.it.2430) (core#if .it.2430 .it.2430 #f)) (core#if (.test.2418 (car", -" .form.2428)) (.loop.2427 (cdr .form.2428)) #f)))) (null? .form.2428)))) (.loop.", -"2427 (cdr .form.2419))))) (core#if ((core#lambda (.it.2431) (core#if .it.2431 .i", -"t.2431 #f)) (eqv? .key.2423 (core#quote or))) ((core#lambda () (core#begin (core", -"#define .loop.2432 (core#lambda (.form.2433) (core#if (pair? .form.2433) ((core#", -"lambda (.it.2434) (core#if .it.2434 .it.2434 ((core#lambda (.it.2435) (core#if .", -"it.2435 .it.2435 #f)) (.loop.2432 (cdr .form.2433))))) (.test.2418 (car .form.24", -"33))) #f))) (.loop.2432 (cdr .form.2419))))) (core#if #t #f #undefined)))))) (ca", -"r .form.2419)) #f)))) (core#if (symbol? .form.2419) (memq .form.2419 (features))", -" #f)))) (eq? .form.2419 (core#quote else))))) ((core#lambda () (core#begin (core", -"#define .loop.2436 (core#lambda (.clauses.2437) (core#if (null? .clauses.2437) #", -"undefined (core#if (.test.2418 (caar .clauses.2437)) (cons (make-identifier (cor", -"e#quote begin) default-environment) (append (cdar .clauses.2437) (core#quote ())", -")) (.loop.2436 (cdr .clauses.2437)))))) (.loop.2436 (cdr .form.2416))))))) #unde", -"fined))) (core#begin (.define-transformer.2408 (core#quote import) (core#lambda ", -"(.form.2438 ._.2439) ((core#lambda (.caddr.2440 .prefix.2441 .getlib.2442) ((cor", -"e#lambda (.extract.2443 .collect.2444) (core#begin (core#set! .extract.2443 (cor", -"e#lambda (.spec.2445) ((core#lambda (.key.2446) (core#if ((core#lambda (.it.2447", -") (core#if .it.2447 .it.2447 ((core#lambda (.it.2448) (core#if .it.2448 .it.2448", -" ((core#lambda (.it.2449) (core#if .it.2449 .it.2449 ((core#lambda (.it.2450) (c", -"ore#if .it.2450 .it.2450 #f)) (eqv? .key.2446 (core#quote except))))) (eqv? .key", -".2446 (core#quote prefix))))) (eqv? .key.2446 (core#quote rename))))) (eqv? .key", -".2446 (core#quote only))) (.extract.2443 (cadr .spec.2445)) (core#if #t (.getlib", -".2442 .spec.2445) #undefined))) (car .spec.2445)))) (core#begin (core#set! .coll", -"ect.2444 (core#lambda (.spec.2451) ((core#lambda (.key.2452) (core#if ((core#lam", -"bda (.it.2453) (core#if .it.2453 .it.2453 #f)) (eqv? .key.2452 (core#quote only)", -")) ((core#lambda (.alist.2454) (map (core#lambda (.var.2455) (assq .var.2455 .al", -"ist.2454)) (cddr .spec.2451))) (.collect.2444 (cadr .spec.2451))) (core#if ((cor", -"e#lambda (.it.2456) (core#if .it.2456 .it.2456 #f)) (eqv? .key.2452 (core#quote ", -"rename))) ((core#lambda (.alist.2457 .renames.2458) (map (core#lambda (.s.2459) ", -"((core#lambda (.it.2460) (core#if .it.2460 .it.2460 ((core#lambda (.it.2461) (co", -"re#if .it.2461 .it.2461 #f)) .s.2459))) (assq (car .s.2459) .renames.2458))) .al", -"ist.2457)) (.collect.2444 (cadr .spec.2451)) (map (core#lambda (.x.2462) (cons (", -"car .x.2462) (cadr .x.2462))) (cddr .spec.2451))) (core#if ((core#lambda (.it.24", -"63) (core#if .it.2463 .it.2463 #f)) (eqv? .key.2452 (core#quote prefix))) ((core", -"#lambda (.alist.2464) (map (core#lambda (.s.2465) (cons (.prefix.2441 (.caddr.24", -"40 .spec.2451) (car .s.2465)) (cdr .s.2465))) .alist.2464)) (.collect.2444 (cadr", -" .spec.2451))) (core#if ((core#lambda (.it.2466) (core#if .it.2466 .it.2466 #f))", -" (eqv? .key.2452 (core#quote except))) ((core#lambda (.alist.2467) ((core#lambda", -" () (core#begin (core#define .loop.2468 (core#lambda (.alist.2469) (core#if (nul", -"l? .alist.2469) (core#quote ()) (core#if (memq (caar .alist.2469) (cddr .spec.24", -"51)) (.loop.2468 (cdr .alist.2469)) (cons (car .alist.2469) (.loop.2468 (cdr .al", -"ist.2469))))))) (.loop.2468 .alist.2467))))) (.collect.2444 (cadr .spec.2451))) ", -"(core#if #t (dictionary-map (core#lambda (.x.2470) (cons .x.2470 .x.2470)) (.lib", -"rary-exports.2376 (.getlib.2442 .spec.2451))) #undefined)))))) (car .spec.2451))", -")) ((core#lambda (.import.2471) (core#begin (core#set! .import.2471 (core#lambda", -" (.spec.2472) ((core#lambda (.lib.2473 .alist.2474) (for-each (core#lambda (.slo", -"t.2475) (.library-import.2377 .lib.2473 (cdr .slot.2475) (car .slot.2475))) .ali", -"st.2474)) (.extract.2443 .spec.2472) (.collect.2444 .spec.2472)))) (for-each .im", -"port.2471 (cdr .form.2438)))) #undefined)))) #undefined #undefined)) (core#lambd", -"a (.x.2476) (car (cdr (cdr .x.2476)))) (core#lambda (.prefix.2477 .symbol.2478) ", -"(string->symbol (string-append (symbol->string .prefix.2477) (symbol->string .sy", -"mbol.2478)))) (core#lambda (.name.2479) (core#if (.find-library.2373 .name.2479)", -" .name.2479 (error \"library not found\" .name.2479)))))) (.define-transformer.240", -"8 (core#quote export) (core#lambda (.form.2480 ._.2481) ((core#lambda (.collect.", -"2482 .export.2483) (core#begin (core#set! .collect.2482 (core#lambda (.spec.2484", -") (core#if (symbol? .spec.2484) (cons .spec.2484 .spec.2484) (core#if (core#if (", -"list? .spec.2484) (core#if (= (length .spec.2484) 3) (eq? (car .spec.2484) (core", -"#quote rename)) #f) #f) (cons (list-ref .spec.2484 1) (list-ref .spec.2484 2)) (", -"error \"malformed export\"))))) (core#begin (core#set! .export.2483 (core#lambda (", -".spec.2485) ((core#lambda (.slot.2486) (.library-export.2378 (car .slot.2486) (c", -"dr .slot.2486))) (.collect.2482 .spec.2485)))) (for-each .export.2483 (cdr .form", -".2480))))) #undefined #undefined))))))) (core#lambda (.name.2487 .macro.2488) (d", -"ictionary-set! (macro-objects) .name.2487 .macro.2488))) (core#begin ((core#lamb", -"da () (core#begin (.make-library.2374 (core#quote (picrin base))) (core#begin (s", -"et-car! (dictionary-ref .*libraries*.2372 (.mangle.2370 (core#quote (picrin base", -")))) default-environment) (core#begin ((core#lambda (.exports.2489) ((core#lambd", -"a (.export-keyword.2490) ((core#lambda () (core#begin (for-each .export-keyword.", -"2490 (core#quote (define lambda quote set! if begin define-macro let let* letrec", +"2484) (dictionary-set! .*libraries*.2461 .name.2483 (cons .env.2484 .exports.248", +"5))))))) (make-environment (string->symbol (string-append (symbol->string .name.", +"2483) \":\"))) (make-dictionary))) (.mangle.2459 .name.2482)))) (core#begin (core#", +"define .library-environment.2464 (core#lambda (.name.2486) (car (dictionary-ref ", +".*libraries*.2461 (.mangle.2459 .name.2486))))) (core#begin (core#define .librar", +"y-exports.2465 (core#lambda (.name.2487) (cdr (dictionary-ref .*libraries*.2461 ", +"(.mangle.2459 .name.2487))))) (core#begin (core#define .library-import.2466 (cor", +"e#lambda (.name.2488 .sym.2489 .alias.2490) ((core#lambda (.uid.2491) ((core#lam", +"bda (.env.2492) (set-identifier! .alias.2490 .uid.2491 .env.2492)) (.library-env", +"ironment.2464 (.current-library.2460)))) (dictionary-ref (.library-exports.2465 ", +".name.2488) .sym.2489)))) (core#begin (core#define .library-export.2467 (core#la", +"mbda (.sym.2493 .alias.2494) ((core#lambda (.env.2495 .exports.2496) (dictionary", +"-set! .exports.2496 .alias.2494 (find-identifier .sym.2493 .env.2495))) (.librar", +"y-environment.2464 (.current-library.2460)) (.library-exports.2465 (.current-lib", +"rary.2460))))) (core#begin ((core#lambda (.define-transformer.2497) (core#begin ", +"(.define-transformer.2497 (core#quote define-library) (core#lambda (.form.2498 .", +"_.2499) ((core#lambda (.name.2500 .body.2501) (core#begin ((core#lambda (.it.250", +"2) (core#if .it.2502 .it.2502 ((core#lambda (.it.2503) (core#if .it.2503 .it.250", +"3 #f)) (.make-library.2463 .name.2500)))) (.find-library.2462 .name.2500)) (with", +"-dynamic-environment (list (cons .current-library.2460 .name.2500)) (core#lambda", +" () (for-each (core#lambda (.expr.2504) (eval .expr.2504 .name.2500)) .body.2501", +"))))) (cadr .form.2498) (cddr .form.2498)))) (core#begin (.define-transformer.24", +"97 (core#quote cond-expand) (core#lambda (.form.2505 ._.2506) ((core#lambda (.te", +"st.2507) (core#begin (core#set! .test.2507 (core#lambda (.form.2508) ((core#lamb", +"da (.it.2509) (core#if .it.2509 .it.2509 ((core#lambda (.it.2510) (core#if .it.2", +"510 .it.2510 ((core#lambda (.it.2511) (core#if .it.2511 .it.2511 #f)) (core#if (", +"pair? .form.2508) ((core#lambda (.key.2512) (core#if ((core#lambda (.it.2513) (c", +"ore#if .it.2513 .it.2513 #f)) (eqv? .key.2512 (core#quote library))) (.find-libr", +"ary.2462 (cadr .form.2508)) (core#if ((core#lambda (.it.2514) (core#if .it.2514 ", +".it.2514 #f)) (eqv? .key.2512 (core#quote not))) (not (.test.2507 (cadr .form.25", +"08))) (core#if ((core#lambda (.it.2515) (core#if .it.2515 .it.2515 #f)) (eqv? .k", +"ey.2512 (core#quote and))) ((core#lambda () (core#begin (core#define .loop.2516 ", +"(core#lambda (.form.2517) ((core#lambda (.it.2518) (core#if .it.2518 .it.2518 ((", +"core#lambda (.it.2519) (core#if .it.2519 .it.2519 #f)) (core#if (.test.2507 (car", +" .form.2517)) (.loop.2516 (cdr .form.2517)) #f)))) (null? .form.2517)))) (.loop.", +"2516 (cdr .form.2508))))) (core#if ((core#lambda (.it.2520) (core#if .it.2520 .i", +"t.2520 #f)) (eqv? .key.2512 (core#quote or))) ((core#lambda () (core#begin (core", +"#define .loop.2521 (core#lambda (.form.2522) (core#if (pair? .form.2522) ((core#", +"lambda (.it.2523) (core#if .it.2523 .it.2523 ((core#lambda (.it.2524) (core#if .", +"it.2524 .it.2524 #f)) (.loop.2521 (cdr .form.2522))))) (.test.2507 (car .form.25", +"22))) #f))) (.loop.2521 (cdr .form.2508))))) (core#if #t #f #undefined)))))) (ca", +"r .form.2508)) #f)))) (core#if (symbol? .form.2508) (memq .form.2508 (features))", +" #f)))) (eq? .form.2508 (core#quote else))))) ((core#lambda () (core#begin (core", +"#define .loop.2525 (core#lambda (.clauses.2526) (core#if (null? .clauses.2526) #", +"undefined (core#if (.test.2507 (caar .clauses.2526)) (cons (make-identifier (cor", +"e#quote begin) default-environment) (append (cdar .clauses.2526) (core#quote ())", +")) (.loop.2525 (cdr .clauses.2526)))))) (.loop.2525 (cdr .form.2505))))))) #unde", +"fined))) (core#begin (.define-transformer.2497 (core#quote import) (core#lambda ", +"(.form.2527 ._.2528) ((core#lambda (.caddr.2529 .prefix.2530 .getlib.2531) ((cor", +"e#lambda (.extract.2532 .collect.2533) (core#begin (core#set! .extract.2532 (cor", +"e#lambda (.spec.2534) ((core#lambda (.key.2535) (core#if ((core#lambda (.it.2536", +") (core#if .it.2536 .it.2536 ((core#lambda (.it.2537) (core#if .it.2537 .it.2537", +" ((core#lambda (.it.2538) (core#if .it.2538 .it.2538 ((core#lambda (.it.2539) (c", +"ore#if .it.2539 .it.2539 #f)) (eqv? .key.2535 (core#quote except))))) (eqv? .key", +".2535 (core#quote prefix))))) (eqv? .key.2535 (core#quote rename))))) (eqv? .key", +".2535 (core#quote only))) (.extract.2532 (cadr .spec.2534)) (core#if #t (.getlib", +".2531 .spec.2534) #undefined))) (car .spec.2534)))) (core#begin (core#set! .coll", +"ect.2533 (core#lambda (.spec.2540) ((core#lambda (.key.2541) (core#if ((core#lam", +"bda (.it.2542) (core#if .it.2542 .it.2542 #f)) (eqv? .key.2541 (core#quote only)", +")) ((core#lambda (.alist.2543) (map (core#lambda (.var.2544) (assq .var.2544 .al", +"ist.2543)) (cddr .spec.2540))) (.collect.2533 (cadr .spec.2540))) (core#if ((cor", +"e#lambda (.it.2545) (core#if .it.2545 .it.2545 #f)) (eqv? .key.2541 (core#quote ", +"rename))) ((core#lambda (.alist.2546 .renames.2547) (map (core#lambda (.s.2548) ", +"((core#lambda (.it.2549) (core#if .it.2549 .it.2549 ((core#lambda (.it.2550) (co", +"re#if .it.2550 .it.2550 #f)) .s.2548))) (assq (car .s.2548) .renames.2547))) .al", +"ist.2546)) (.collect.2533 (cadr .spec.2540)) (map (core#lambda (.x.2551) (cons (", +"car .x.2551) (cadr .x.2551))) (cddr .spec.2540))) (core#if ((core#lambda (.it.25", +"52) (core#if .it.2552 .it.2552 #f)) (eqv? .key.2541 (core#quote prefix))) ((core", +"#lambda (.alist.2553) (map (core#lambda (.s.2554) (cons (.prefix.2530 (.caddr.25", +"29 .spec.2540) (car .s.2554)) (cdr .s.2554))) .alist.2553)) (.collect.2533 (cadr", +" .spec.2540))) (core#if ((core#lambda (.it.2555) (core#if .it.2555 .it.2555 #f))", +" (eqv? .key.2541 (core#quote except))) ((core#lambda (.alist.2556) ((core#lambda", +" () (core#begin (core#define .loop.2557 (core#lambda (.alist.2558) (core#if (nul", +"l? .alist.2558) (core#quote ()) (core#if (memq (caar .alist.2558) (cddr .spec.25", +"40)) (.loop.2557 (cdr .alist.2558)) (cons (car .alist.2558) (.loop.2557 (cdr .al", +"ist.2558))))))) (.loop.2557 .alist.2556))))) (.collect.2533 (cadr .spec.2540))) ", +"(core#if #t (dictionary-map (core#lambda (.x.2559) (cons .x.2559 .x.2559)) (.lib", +"rary-exports.2465 (.getlib.2531 .spec.2540))) #undefined)))))) (car .spec.2540))", +")) ((core#lambda (.import.2560) (core#begin (core#set! .import.2560 (core#lambda", +" (.spec.2561) ((core#lambda (.lib.2562 .alist.2563) (for-each (core#lambda (.slo", +"t.2564) (.library-import.2466 .lib.2562 (cdr .slot.2564) (car .slot.2564))) .ali", +"st.2563)) (.extract.2532 .spec.2561) (.collect.2533 .spec.2561)))) (for-each .im", +"port.2560 (cdr .form.2527)))) #undefined)))) #undefined #undefined)) (core#lambd", +"a (.x.2565) (car (cdr (cdr .x.2565)))) (core#lambda (.prefix.2566 .symbol.2567) ", +"(string->symbol (string-append (symbol->string .prefix.2566) (symbol->string .sy", +"mbol.2567)))) (core#lambda (.name.2568) (core#if (.find-library.2462 .name.2568)", +" .name.2568 (error \"library not found\" .name.2568)))))) (.define-transformer.249", +"7 (core#quote export) (core#lambda (.form.2569 ._.2570) ((core#lambda (.collect.", +"2571 .export.2572) (core#begin (core#set! .collect.2571 (core#lambda (.spec.2573", +") (core#if (symbol? .spec.2573) (cons .spec.2573 .spec.2573) (core#if (core#if (", +"list? .spec.2573) (core#if (= (length .spec.2573) 3) (eq? (car .spec.2573) (core", +"#quote rename)) #f) #f) (cons (list-ref .spec.2573 1) (list-ref .spec.2573 2)) (", +"error \"malformed export\"))))) (core#begin (core#set! .export.2572 (core#lambda (", +".spec.2574) ((core#lambda (.slot.2575) (.library-export.2467 (car .slot.2575) (c", +"dr .slot.2575))) (.collect.2571 .spec.2574)))) (for-each .export.2572 (cdr .form", +".2569))))) #undefined #undefined))))))) (core#lambda (.name.2576 .macro.2577) (d", +"ictionary-set! (macro-objects) .name.2576 .macro.2577))) (core#begin ((core#lamb", +"da () (core#begin (.make-library.2463 (core#quote (picrin base))) (core#begin (s", +"et-car! (dictionary-ref .*libraries*.2461 (.mangle.2459 (core#quote (picrin base", +")))) default-environment) (core#begin ((core#lambda (.exports.2578) ((core#lambd", +"a (.export-keyword.2579) ((core#lambda () (core#begin (for-each .export-keyword.", +"2579 (core#quote (define lambda quote set! if begin define-macro let let* letrec", " letrec* let-values let*-values define-values quasiquote unquote unquote-splicin", -"g and or cond case else => do when unless parameterize))) (core#begin (.export-k", -"eyword.2490 (core#quote boolean?)) (dictionary-for-each .export-keyword.2490 (gl", -"obal-objects))))))) (core#lambda (.keyword.2491) (dictionary-set! .exports.2489 ", -".keyword.2491 .keyword.2491)))) (.library-exports.2376 (core#quote (picrin base)", -"))) (core#begin (core#set! eval ((core#lambda (.e.2492) (core#lambda (.expr.2493", -" . .lib.2494) ((core#lambda (.lib.2495) (.e.2492 .expr.2493 (.library-environmen", -"t.2375 .lib.2495))) (core#if (null? .lib.2494) (.current-library.2371) (car .lib", -".2494))))) eval)) (.make-library.2374 (core#quote (picrin user))))))))) (values ", -".current-library.2371 .find-library.2373 .make-library.2374 .library-environment", -".2375 .library-exports.2376 .library-import.2377 .library-export.2378)))))))))))", -")))) (core#lambda (.current-library.2496 .find-library.2497 .make-library.2498 .", -"library-environment.2499 .library-exports.2500 .library-import.2501 .library-exp", -"ort.2502) (core#begin (core#set! current-library .current-library.2496) (core#be", -"gin (core#set! find-library .find-library.2497) (core#begin (core#set! make-libr", -"ary .make-library.2498) (core#begin (core#set! library-environment .library-envi", -"ronment.2499) (core#begin (core#set! library-exports .library-exports.2500) (cor", -"e#begin (core#set! library-import .library-import.2501) (core#set! library-expor", -"t .library-export.2502))))))))))))))))", +"g and or cond case else => do when unless parameterize define-record-type))) (co", +"re#begin (.export-keyword.2579 (core#quote boolean?)) (dictionary-for-each .expo", +"rt-keyword.2579 (global-objects))))))) (core#lambda (.keyword.2580) (dictionary-", +"set! .exports.2578 .keyword.2580 .keyword.2580)))) (.library-exports.2465 (core#", +"quote (picrin base)))) (core#begin (core#set! eval ((core#lambda (.e.2581) (core", +"#lambda (.expr.2582 . .lib.2583) ((core#lambda (.lib.2584) (with-dynamic-environ", +"ment (list (cons .current-library.2460 .lib.2584)) (core#lambda () (.e.2581 .exp", +"r.2582 (.library-environment.2464 .lib.2584))))) (core#if (null? .lib.2583) (.cu", +"rrent-library.2460) (car .lib.2583))))) eval)) (.make-library.2463 (core#quote (", +"picrin user))))))))) (values .current-library.2460 .find-library.2462 .make-libr", +"ary.2463 .library-environment.2464 .library-exports.2465 .library-import.2466 .l", +"ibrary-export.2467))))))))))))))) (core#lambda (.current-library.2585 .find-libr", +"ary.2586 .make-library.2587 .library-environment.2588 .library-exports.2589 .lib", +"rary-import.2590 .library-export.2591) (core#begin (core#set! current-library .c", +"urrent-library.2585) (core#begin (core#set! find-library .find-library.2586) (co", +"re#begin (core#set! make-library .make-library.2587) (core#begin (core#set! libr", +"ary-environment .library-environment.2588) (core#begin (core#set! library-export", +"s .library-exports.2589) (core#begin (core#set! library-import .library-import.2", +"590) (core#set! library-export .library-export.2591))))))))))))))))", }; #endif void pic_boot(pic_state *pic) { + pic_load_native(pic, &boot_compile_rom[0][0]); pic_load_native(pic, &boot_rom[0][0]); #if PIC_USE_LIBRARY pic_load_native(pic, &boot_library_rom[0][0]); diff --git a/lib/ext/compile.c b/lib/ext/compile.c deleted file mode 100644 index 002cc9be..00000000 --- a/lib/ext/compile.c +++ /dev/null @@ -1,451 +0,0 @@ -/** - * See Copyright Notice in picrin.h - */ - -#include "picrin.h" -#include "picrin/extra.h" -#include "../object.h" -#include "../state.h" - -KHASH_DEFINE(env, struct identifier *, symbol *, kh_ptr_hash_func, kh_ptr_hash_equal) - -pic_value -pic_make_env(pic_state *pic, pic_value prefix) -{ - struct env *env; - - env = (struct env *)pic_obj_alloc(pic, sizeof(struct env), PIC_TYPE_ENV); - env->up = NULL; - env->prefix = pic_str_ptr(pic, prefix); - kh_init(env, &env->map); - - return obj_value(pic, env); -} - -static pic_value -default_env(pic_state *pic) -{ - return pic_ref(pic, "default-environment"); -} - -static pic_value -extend_env(pic_state *pic, pic_value up) -{ - struct env *env; - - env = (struct env *)pic_obj_alloc(pic, sizeof(struct env), PIC_TYPE_ENV); - env->up = pic_env_ptr(pic, up); - env->prefix = NULL; - kh_init(env, &env->map); - - return obj_value(pic, env); -} - -static bool -search_scope(pic_state *pic, pic_value id, pic_value env, pic_value *uid) -{ - int it; - - it = kh_get(env, &pic_env_ptr(pic, env)->map, pic_id_ptr(pic, id)); - if (it == kh_end(&pic_env_ptr(pic, env)->map)) { - return false; - } - *uid = obj_value(pic, kh_val(&pic_env_ptr(pic, env)->map, it)); - return true; -} - -static bool -search(pic_state *pic, pic_value id, pic_value env, pic_value *uid) -{ - struct env *e; - - while (1) { - if (search_scope(pic, id, env, uid)) - return true; - e = pic_env_ptr(pic, env)->up; - if (e == NULL) - break; - env = obj_value(pic, e); - } - return false; -} - -pic_value -pic_find_identifier(pic_state *pic, pic_value id, pic_value env) -{ - struct env *e; - pic_value uid; - - while (! search(pic, id, env, &uid)) { - if (pic_sym_p(pic, id)) { - while (1) { - e = pic_env_ptr(pic, env); - if (e->up == NULL) - break; - env = obj_value(pic, e->up); - } - return pic_add_identifier(pic, id, env); - } - env = obj_value(pic, pic_id_ptr(pic, id)->env); /* do not overwrite id first */ - id = obj_value(pic, pic_id_ptr(pic, id)->u.id); - } - return uid; -} - -pic_value -pic_add_identifier(pic_state *pic, pic_value id, pic_value env) -{ - const char *name, *prefix; - pic_value uid, str; - - if (search_scope(pic, id, env, &uid)) { - return uid; - } - - name = pic_str(pic, pic_id_name(pic, id), NULL); - - if (pic_env_ptr(pic, env)->up == NULL && pic_sym_p(pic, id)) { - prefix = pic_str(pic, obj_value(pic, pic_env_ptr(pic, env)->prefix), NULL); - str = pic_strf_value(pic, "%s%s", prefix, name); - } else { - str = pic_strf_value(pic, ".%s.%d", name, pic->ucnt++); - } - uid = pic_intern(pic, str); - - pic_set_identifier(pic, id, uid, env); - - return uid; -} - -void -pic_set_identifier(pic_state *pic, pic_value id, pic_value uid, pic_value env) -{ - int it, ret; - it = kh_put(env, &pic_env_ptr(pic, env)->map, pic_id_ptr(pic, id), &ret); - kh_val(&pic_env_ptr(pic, env)->map, it) = pic_sym_ptr(pic, uid); -} - -#define EQ(sym, lit) (strcmp(pic_sym(pic, sym), lit) == 0) -#define S(lit) (pic_intern_lit(pic, lit)) - -#define pic_sym(pic,sym) pic_str(pic, pic_sym_name(pic, (sym)), NULL) - -static void -define_macro(pic_state *pic, pic_value uid, pic_value mac) -{ - if (pic_dict_has(pic, pic->macros, uid)) { - pic_warnf(pic, "redefining syntax variable: %s", pic_sym(pic, uid)); - } - pic_dict_set(pic, pic->macros, uid, mac); -} - -static bool -find_macro(pic_state *pic, pic_value uid, pic_value *mac) -{ - if (! pic_dict_has(pic, pic->macros, uid)) { - return false; - } - *mac = pic_dict_ref(pic, pic->macros, uid); - return true; -} - -static void -shadow_macro(pic_state *pic, pic_value uid) -{ - if (pic_dict_has(pic, pic->macros, uid)) { - pic_dict_del(pic, pic->macros, uid); - } -} - -static pic_value expand(pic_state *, pic_value expr, pic_value env, pic_value deferred); -static pic_value expand_lambda(pic_state *, pic_value expr, pic_value env); - -static pic_value -expand_var(pic_state *pic, pic_value id, pic_value env, pic_value deferred) -{ - pic_value mac, functor; - - functor = pic_find_identifier(pic, id, env); - - if (find_macro(pic, functor, &mac)) { - return expand(pic, pic_call(pic, mac, 2, id, env), env, deferred); - } - return functor; -} - -static pic_value -expand_quote(pic_state *pic, pic_value expr) -{ - return pic_cons(pic, S("core#quote"), pic_cdr(pic, expr)); -} - -static pic_value -expand_list(pic_state *pic, pic_value obj, pic_value env, pic_value deferred) -{ - size_t ai = pic_enter(pic); - pic_value x, head, tail; - - if (pic_pair_p(pic, obj)) { - head = expand(pic, pic_car(pic, obj), env, deferred); - tail = expand_list(pic, pic_cdr(pic, obj), env, deferred); - x = pic_cons(pic, head, tail); - } else { - x = expand(pic, obj, env, deferred); - } - - pic_leave(pic, ai); - pic_protect(pic, x); - return x; -} - -static pic_value -expand_defer(pic_state *pic, pic_value expr, pic_value deferred) -{ - pic_value skel = pic_cons(pic, pic_invalid_value(pic), pic_invalid_value(pic)); - - pic_set_car(pic, deferred, pic_cons(pic, pic_cons(pic, expr, skel), pic_car(pic, deferred))); - - return skel; -} - -static void -expand_deferred(pic_state *pic, pic_value deferred, pic_value env) -{ - pic_value defer, val, src, dst, it; - - deferred = pic_car(pic, deferred); - - pic_for_each (defer, pic_reverse(pic, deferred), it) { - src = pic_car(pic, defer); - dst = pic_cdr(pic, defer); - - val = expand_lambda(pic, src, env); - - /* copy */ - pic_set_car(pic, dst, pic_car(pic, val)); - pic_set_cdr(pic, dst, pic_cdr(pic, val)); - } -} - -static pic_value -expand_lambda(pic_state *pic, pic_value expr, pic_value env) -{ - pic_value formal, body; - pic_value in; - pic_value a, deferred; - - in = extend_env(pic, env); - - for (a = pic_cadr(pic, expr); pic_pair_p(pic, a); a = pic_cdr(pic, a)) { - pic_add_identifier(pic, pic_car(pic, a), in); - } - if (pic_id_p(pic, a)) { - pic_add_identifier(pic, a, in); - } - - deferred = pic_list(pic, 1, pic_nil_value(pic)); - - formal = expand_list(pic, pic_list_ref(pic, expr, 1), in, deferred); - body = expand(pic, pic_list_ref(pic, expr, 2), in, deferred); - - expand_deferred(pic, deferred, in); - - return pic_list(pic, 3, S("core#lambda"), formal, body); -} - -static pic_value -expand_define(pic_state *pic, pic_value expr, pic_value env, pic_value deferred) -{ - pic_value uid, val; - - uid = pic_add_identifier(pic, pic_list_ref(pic, expr, 1), env); - - shadow_macro(pic, uid); - - val = expand(pic, pic_list_ref(pic, expr, 2), env, deferred); - - return pic_list(pic, 3, S("core#define"), uid, val); -} - -static pic_value -expand_defmacro(pic_state *pic, pic_value expr, pic_value env) -{ - pic_value uid, val; - - uid = pic_add_identifier(pic, pic_list_ref(pic, expr, 1), env); - - val = pic_load(pic, pic_compile(pic, pic_list_ref(pic, expr, 2), env)); - if (! pic_proc_p(pic, val)) { - pic_error(pic, "macro definition evaluates to non-procedure object", 1, pic_list_ref(pic, expr, 1)); - } - - define_macro(pic, uid, val); - - return pic_undef_value(pic); -} - -static pic_value -expand_node(pic_state *pic, pic_value expr, pic_value env, pic_value deferred) -{ - switch (pic_type(pic, expr)) { - case PIC_TYPE_ID: - case PIC_TYPE_SYMBOL: { - return expand_var(pic, expr, env, deferred); - } - case PIC_TYPE_PAIR: { - pic_value mac; - - if (! pic_list_p(pic, expr)) { - pic_error(pic, "cannot expand improper list", 1, expr); - } - - if (pic_id_p(pic, pic_car(pic, expr))) { - pic_value functor; - - functor = pic_find_identifier(pic, pic_car(pic, expr), env); - - if (EQ(functor, "core#define-macro")) { - return expand_defmacro(pic, expr, env); - } - else if (EQ(functor, "core#lambda")) { - return expand_defer(pic, expr, deferred); - } - else if (EQ(functor, "core#define")) { - return expand_define(pic, expr, env, deferred); - } - else if (EQ(functor, "core#quote")) { - return expand_quote(pic, expr); - } - - if (find_macro(pic, functor, &mac)) { - return expand(pic, pic_call(pic, mac, 2, expr, env), env, deferred); - } - } - return expand_list(pic, expr, env, deferred); - } - default: - return expr; - } -} - -static pic_value -expand(pic_state *pic, pic_value expr, pic_value env, pic_value deferred) -{ - size_t ai = pic_enter(pic); - pic_value v; - - v = expand_node(pic, expr, env, deferred); - - pic_leave(pic, ai); - pic_protect(pic, v); - return v; -} - -pic_value -pic_compile(pic_state *pic, pic_value expr, pic_value env) -{ - pic_value v, deferred; - - deferred = pic_list(pic, 1, pic_nil_value(pic)); - - v = expand(pic, expr, env, deferred); - - expand_deferred(pic, deferred, env); - - return v; -} - -static pic_value -pic_compile_make_environment(pic_state *pic) -{ - pic_value name; - - pic_get_args(pic, "m", &name); - - return pic_make_env(pic, pic_sym_name(pic, name)); -} - -static pic_value -pic_compile_set_identifier(pic_state *pic) -{ - pic_value id, uid, env; - - pic_get_args(pic, "omo", &id, &uid, &env); - - TYPE_CHECK(pic, id, id); - TYPE_CHECK(pic, env, env); - - pic_set_identifier(pic, id, uid, env); - return pic_undef_value(pic); -} - -static pic_value -pic_compile_find_identifier(pic_state *pic) -{ - pic_value id, env; - - pic_get_args(pic, "oo", &id, &env); - - TYPE_CHECK(pic, id, id); - TYPE_CHECK(pic, env, env); - - return pic_find_identifier(pic, id, env); -} - -static pic_value -pic_compile_macro_objects(pic_state *pic) -{ - pic_get_args(pic, ""); - - return pic->macros; -} - -static pic_value -pic_compile_compile(pic_state *pic) -{ - pic_value program, env = default_env(pic); - - pic_get_args(pic, "o|o", &program, &env); - - TYPE_CHECK(pic, env, env); - - return pic_compile(pic, program, env); -} - -static pic_value -pic_compile_eval(pic_state *pic) -{ - pic_value program, env = default_env(pic); - - pic_get_args(pic, "o|o", &program, &env); - - TYPE_CHECK(pic, env, env); - - return pic_load(pic, pic_compile(pic, program, env)); -} - -#define add_keyword(name) do { \ - pic_value var; \ - var = pic_intern_lit(pic, name); \ - pic_set_identifier(pic, var, var, env); \ - } while (0) - -void -pic_init_compile(pic_state *pic) -{ - pic_value env = pic_make_env(pic, pic_lit_value(pic, "")); - add_keyword("core#define"); - add_keyword("core#set!"); - add_keyword("core#quote"); - add_keyword("core#lambda"); - add_keyword("core#if"); - add_keyword("core#begin"); - add_keyword("core#define-macro"); - pic_define(pic, "default-environment", env); - pic_defun(pic, "make-environment", pic_compile_make_environment); - pic_defun(pic, "find-identifier", pic_compile_find_identifier); - pic_defun(pic, "set-identifier!", pic_compile_set_identifier); - pic_defun(pic, "macro-objects", pic_compile_macro_objects); - pic_defun(pic, "compile", pic_compile_compile); - pic_defun(pic, "eval", pic_compile_eval); -} diff --git a/lib/ext/write.c b/lib/ext/write.c index 076344c4..8ddbc4db 100644 --- a/lib/ext/write.c +++ b/lib/ext/write.c @@ -409,6 +409,16 @@ write_dict(pic_state *pic, pic_value dict, pic_value port, struct writer_control pic_fprintf(pic, port, ")"); } +static void +write_record(pic_state *pic, pic_value obj, pic_value port, struct writer_control *p) +{ + pic_fprintf(pic, port, "#<"); + write_core(pic, pic_record_type(pic, obj), port, p); + pic_fprintf(pic, port, " "); + write_core(pic, pic_record_datum(pic, obj), port, p); + pic_fprintf(pic, port, ">"); +} + static const char * typename(pic_state *pic, pic_value obj) { @@ -444,8 +454,6 @@ typename(pic_state *pic, pic_value obj) return "port"; case PIC_TYPE_ERROR: return "error"; - case PIC_TYPE_ID: - return "identifier"; case PIC_TYPE_CXT: return "context"; case PIC_TYPE_IREP: @@ -453,8 +461,6 @@ typename(pic_state *pic, pic_value obj) case PIC_TYPE_PROC_FUNC: case PIC_TYPE_PROC_IREP: return "procedure"; - case PIC_TYPE_ENV: - return "environment"; case PIC_TYPE_DATA: return "data"; case PIC_TYPE_DICT: @@ -498,9 +504,6 @@ write_core(pic_state *pic, pic_value obj, pic_value port, struct writer_control case PIC_TYPE_FALSE: pic_fprintf(pic, port, "#f"); break; - case PIC_TYPE_ID: - pic_fprintf(pic, port, "#", pic_str(pic, pic_id_name(pic, obj), NULL)); - break; case PIC_TYPE_EOF: pic_fprintf(pic, port, "#.(eof-object)"); break; @@ -531,6 +534,9 @@ write_core(pic_state *pic, pic_value obj, pic_value port, struct writer_control case PIC_TYPE_DICT: write_dict(pic, obj, port, p); break; + case PIC_TYPE_RECORD: + write_record(pic, obj, port, p); + break; default: pic_fprintf(pic, port, "#<%s %p>", typename(pic, obj), obj_ptr(pic, obj)); break; diff --git a/lib/gc.c b/lib/gc.c index 6940e15c..b3a3933b 100644 --- a/lib/gc.c +++ b/lib/gc.c @@ -18,7 +18,7 @@ union header { struct object { union { struct basic basic; - struct identifier id; + struct symbol sym; struct string str; struct blob blob; struct pair pair; @@ -27,7 +27,6 @@ struct object { struct weak weak; struct data data; struct record rec; - struct env env; struct proc proc; struct context cxt; struct port port; @@ -389,28 +388,6 @@ gc_mark_object(pic_state *pic, struct object *obj) case PIC_TYPE_BLOB: { break; } - case PIC_TYPE_ID: { - gc_mark_object(pic, (struct object *)obj->u.id.u.id); - LOOP(obj->u.id.env); - break; - } - case PIC_TYPE_ENV: { - khash_t(env) *h = &obj->u.env.map; - int it; - - for (it = kh_begin(h); it != kh_end(h); ++it) { - if (kh_exist(h, it)) { - gc_mark_object(pic, (struct object *)kh_key(h, it)); - gc_mark_object(pic, (struct object *)kh_val(h, it)); - } - } - if (obj->u.env.up) { - LOOP(obj->u.env.up); - } else { - LOOP(obj->u.env.prefix); - } - break; - } case PIC_TYPE_DATA: { break; } @@ -432,7 +409,7 @@ gc_mark_object(pic_state *pic, struct object *obj) break; } case PIC_TYPE_SYMBOL: { - LOOP(obj->u.id.u.str); + LOOP(obj->u.sym.str); break; } case PIC_TYPE_WEAK: { @@ -476,9 +453,6 @@ gc_mark_phase(pic_state *pic) /* global variables */ gc_mark(pic, pic->globals); - /* macro objects */ - gc_mark(pic, pic->macros); - /* error object */ gc_mark(pic, pic->err); @@ -536,10 +510,6 @@ gc_finalize_object(pic_state *pic, struct object *obj) pic_rope_decref(pic, obj->u.str.rope); break; } - case PIC_TYPE_ENV: { - kh_destroy(env, &obj->u.env.map); - break; - } case PIC_TYPE_DATA: { if (obj->u.data.type->dtor) { obj->u.data.type->dtor(pic, obj->u.data.data); @@ -575,7 +545,6 @@ gc_finalize_object(pic_state *pic, struct object *obj) case PIC_TYPE_PAIR: case PIC_TYPE_CXT: case PIC_TYPE_ERROR: - case PIC_TYPE_ID: case PIC_TYPE_RECORD: case PIC_TYPE_PROC_FUNC: case PIC_TYPE_PROC_IREP: @@ -793,7 +762,7 @@ gc_sweep_phase(pic_state *pic) int it; khash_t(weak) *h; khash_t(oblist) *s = &pic->oblist; - symbol *sym; + struct symbol *sym; struct object *obj; size_t total = 0, inuse = 0; diff --git a/lib/include/picrin/extra.h b/lib/include/picrin/extra.h index d842e789..f4a6ca99 100644 --- a/lib/include/picrin/extra.h +++ b/lib/include/picrin/extra.h @@ -21,7 +21,6 @@ pic_value pic_read_cstr(pic_state *, const char *); pic_value pic_fopen(pic_state *, FILE *, const char *mode); #endif -pic_value pic_compile(pic_state *, pic_value form, pic_value env); pic_value pic_load(pic_state *, pic_value irep); void pic_load_native(pic_state *pic, const char *); diff --git a/lib/include/picrin/value.h b/lib/include/picrin/value.h index 306ff0ff..1dc3eac5 100644 --- a/lib/include/picrin/value.h +++ b/lib/include/picrin/value.h @@ -26,8 +26,6 @@ enum { PIC_TYPE_BLOB = 18, PIC_TYPE_PORT = 20, PIC_TYPE_ERROR = 21, - PIC_TYPE_ID = 22, - PIC_TYPE_ENV = 23, PIC_TYPE_DATA = 24, PIC_TYPE_DICT = 25, PIC_TYPE_WEAK = 26, @@ -227,7 +225,6 @@ DEFPRED(pic_blob_p, PIC_TYPE_BLOB) DEFPRED(pic_error_p, PIC_TYPE_ERROR) DEFPRED(pic_dict_p, PIC_TYPE_DICT) DEFPRED(pic_weak_p, PIC_TYPE_WEAK) -DEFPRED(pic_env_p, PIC_TYPE_ENV) DEFPRED(pic_rec_p, PIC_TYPE_RECORD) DEFPRED(pic_sym_p, PIC_TYPE_SYMBOL) DEFPRED(pic_pair_p, PIC_TYPE_PAIR) @@ -247,12 +244,6 @@ pic_proc_p(pic_state *pic, pic_value o) return pic_proc_func_p(pic, o) || pic_proc_irep_p(pic, o); } -PIC_STATIC_INLINE bool -pic_id_p(pic_state *pic, pic_value o) -{ - return pic_type(pic, o) == PIC_TYPE_ID || pic_sym_p(pic, o); -} - #if PIC_NAN_BOXING PIC_STATIC_INLINE bool diff --git a/lib/object.h b/lib/object.h index 6168f441..19321862 100644 --- a/lib/object.h +++ b/lib/object.h @@ -26,24 +26,9 @@ struct basic { OBJECT_HEADER }; -struct identifier { +struct symbol { OBJECT_HEADER - union { - struct string *str; - struct identifier *id; - } u; - struct env *env; -}; - -typedef struct identifier symbol; - -KHASH_DECLARE(env, struct identifier *, symbol *) - -struct env { - OBJECT_HEADER - khash_t(env) map; - struct env *up; - struct string *prefix; + struct string *str; }; struct pair { @@ -63,7 +48,7 @@ struct string { struct rope *rope; }; -KHASH_DECLARE(dict, symbol *, pic_value) +KHASH_DECLARE(dict, struct symbol *, pic_value) struct dict { OBJECT_HEADER @@ -163,7 +148,7 @@ struct port { struct error { OBJECT_HEADER - symbol *type; + struct symbol *type; struct string *msg; pic_value irrs; struct string *stack; @@ -176,8 +161,6 @@ struct error { #define TYPENAME_error "error" #define TYPENAME_proc "procedure" #define TYPENAME_str "string" -#define TYPENAME_id "identifier" -#define TYPENAME_env "environment" #define TYPENAME_vec "vector" #define TYPE_CHECK(pic, v, type) do { \ @@ -259,8 +242,7 @@ obj_value(pic_state *PIC_UNUSED(pic), void *ptr) #define pic_data_p(pic,o) (pic_data_p(pic,o,NULL)) #define pic_port_p(pic,o) (pic_port_p(pic,o,NULL)) -DEFPTR(id, struct identifier) -DEFPTR(sym, symbol) +DEFPTR(sym, struct symbol) DEFPTR(str, struct string) DEFPTR(blob, struct blob) DEFPTR(pair, struct pair) @@ -269,7 +251,6 @@ DEFPTR(dict, struct dict) DEFPTR(weak, struct weak) DEFPTR(data, struct data) DEFPTR(proc, struct proc) -DEFPTR(env, struct env) DEFPTR(port, struct port) DEFPTR(error, struct error) DEFPTR(rec, struct record) @@ -279,16 +260,11 @@ DEFPTR(irep, struct irep) struct object *pic_obj_alloc(pic_state *, size_t, int type); -pic_value pic_make_identifier(pic_state *, pic_value id, pic_value env); pic_value pic_make_proc(pic_state *, pic_func_t, int, pic_value *); pic_value pic_make_proc_irep(pic_state *, struct irep *, struct context *); -pic_value pic_make_env(pic_state *, pic_value prefix); pic_value pic_make_record(pic_state *, pic_value type, pic_value datum); - -pic_value pic_add_identifier(pic_state *, pic_value id, pic_value env); -pic_value pic_find_identifier(pic_state *, pic_value id, pic_value env); -void pic_set_identifier(pic_state *, pic_value id, pic_value uid, pic_value env); -pic_value pic_id_name(pic_state *, pic_value id); +pic_value pic_record_type(pic_state *pic, pic_value record); +pic_value pic_record_datum(pic_state *pic, pic_value record); struct rope *pic_rope_incref(struct rope *); void pic_rope_decref(pic_state *, struct rope *); diff --git a/lib/record.c b/lib/record.c index 505cd982..36e85216 100644 --- a/lib/record.c +++ b/lib/record.c @@ -17,6 +17,18 @@ pic_make_record(pic_state *pic, pic_value type, pic_value datum) return obj_value(pic, rec); } +pic_value +pic_record_type(pic_state *pic, pic_value rec) +{ + return pic_rec_ptr(pic, rec)->type; +} + +pic_value +pic_record_datum(pic_state *pic, pic_value rec) +{ + return pic_rec_ptr(pic, rec)->datum; +} + static pic_value pic_rec_make_record(pic_state *pic) { @@ -44,7 +56,7 @@ pic_rec_record_type(pic_state *pic) pic_get_args(pic, "r", &rec); - return pic_rec_ptr(pic, rec)->type; + return pic_record_type(pic, rec); } static pic_value @@ -54,7 +66,7 @@ pic_rec_record_datum(pic_state *pic) pic_get_args(pic, "r", &rec); - return pic_rec_ptr(pic, rec)->datum; + return pic_record_datum(pic, rec); } void diff --git a/lib/state.c b/lib/state.c index b6da30fc..67c65956 100644 --- a/lib/state.c +++ b/lib/state.c @@ -106,8 +106,8 @@ void pic_init_write(pic_state *); void pic_init_read(pic_state *); void pic_init_dict(pic_state *); void pic_init_record(pic_state *); -void pic_init_compile(pic_state *); void pic_init_weak(pic_state *); +void pic_init_load(pic_state *); void pic_boot(pic_state *); @@ -137,8 +137,8 @@ pic_init_core(pic_state *pic) pic_init_read(pic); DONE; pic_init_dict(pic); DONE; pic_init_record(pic); DONE; - pic_init_compile(pic); DONE; pic_init_weak(pic); DONE; + pic_init_load(pic); DONE; #if PIC_USE_WRITE pic_init_write(pic); DONE; @@ -201,15 +201,9 @@ pic_open(pic_allocf allocf, void *userdata) /* symbol table */ kh_init(oblist, &pic->oblist); - /* unique symbol count */ - pic->ucnt = 0; - /* global variables */ pic->globals = pic_invalid_value(pic); - /* macros */ - pic->macros = pic_invalid_value(pic); - /* features */ pic->features = pic_nil_value(pic); @@ -222,7 +216,6 @@ pic_open(pic_allocf allocf, void *userdata) /* root tables */ pic->globals = pic_make_dict(pic); - pic->macros = pic_make_dict(pic); pic->dyn_env = pic_list(pic, 1, pic_make_weak(pic)); /* turn on GC */ @@ -255,7 +248,6 @@ pic_close(pic_state *pic) pic->arena_idx = 0; pic->err = pic_invalid_value(pic); pic->globals = pic_invalid_value(pic); - pic->macros = pic_invalid_value(pic); pic->features = pic_invalid_value(pic); pic->dyn_env = pic_invalid_value(pic); diff --git a/lib/state.h b/lib/state.h index 6fdd69d5..22901517 100644 --- a/lib/state.h +++ b/lib/state.h @@ -23,7 +23,7 @@ struct callinfo { struct context *up; }; -KHASH_DECLARE(oblist, struct string *, struct identifier *) +KHASH_DECLARE(oblist, struct string *, struct symbol *) struct pic_state { pic_allocf allocf; @@ -44,9 +44,7 @@ struct pic_state { pic_value features; khash_t(oblist) oblist; /* string to symbol */ - int ucnt; pic_value globals; /* dict */ - pic_value macros; /* dict */ bool gc_enable; struct heap *heap; diff --git a/lib/symbol.c b/lib/symbol.c index b33be540..6b45a4fb 100644 --- a/lib/symbol.c +++ b/lib/symbol.c @@ -10,13 +10,13 @@ #define kh_pic_str_hash(a) (kh_str_hash_func(to_cstr(a))) #define kh_pic_str_cmp(a, b) (kh_str_cmp_func(to_cstr(a), to_cstr(b))) -KHASH_DEFINE(oblist, struct string *, symbol *, kh_pic_str_hash, kh_pic_str_cmp) +KHASH_DEFINE(oblist, struct string *, struct symbol *, kh_pic_str_hash, kh_pic_str_cmp) pic_value pic_intern(pic_state *pic, pic_value str) { khash_t(oblist) *h = &pic->oblist; - symbol *sym; + struct symbol *sym; int it; int ret; @@ -29,39 +29,17 @@ pic_intern(pic_state *pic, pic_value str) kh_val(h, it) = NULL; /* dummy */ - sym = (symbol *)pic_obj_alloc(pic, offsetof(symbol, env), PIC_TYPE_SYMBOL); - sym->u.str = pic_str_ptr(pic, str); + sym = (struct symbol *)pic_obj_alloc(pic, sizeof(struct symbol), PIC_TYPE_SYMBOL); + sym->str = pic_str_ptr(pic, str); kh_val(h, it) = sym; return obj_value(pic, sym); } -pic_value -pic_make_identifier(pic_state *pic, pic_value base, pic_value env) -{ - struct identifier *id; - - id = (struct identifier *)pic_obj_alloc(pic, sizeof(struct identifier), PIC_TYPE_ID); - id->u.id = pic_id_ptr(pic, base); - id->env = pic_env_ptr(pic, env); - - return obj_value(pic, id); -} - pic_value pic_sym_name(pic_state *PIC_UNUSED(pic), pic_value sym) { - return obj_value(pic, pic_sym_ptr(pic, sym)->u.str); -} - -pic_value -pic_id_name(pic_state *pic, pic_value id) -{ - while (! pic_sym_p(pic, id)) { - id = obj_value(pic, pic_id_ptr(pic, id)->u.id); - } - - return pic_sym_name(pic, id); + return obj_value(pic, pic_sym_ptr(pic, sym)->str); } static pic_value @@ -113,80 +91,6 @@ pic_symbol_string_to_symbol(pic_state *pic) return pic_intern(pic, str); } -static pic_value -pic_symbol_identifier_p(pic_state *pic) -{ - pic_value obj; - - pic_get_args(pic, "o", &obj); - - return pic_bool_value(pic, pic_id_p(pic, obj)); -} - -static pic_value -pic_symbol_make_identifier(pic_state *pic) -{ - pic_value id, env; - - pic_get_args(pic, "oo", &id, &env); - - TYPE_CHECK(pic, id, id); - TYPE_CHECK(pic, env, env); - - return pic_make_identifier(pic, id, env); -} - -static pic_value -pic_symbol_identifier_base(pic_state *pic) -{ - pic_value id; - - pic_get_args(pic, "o", &id); - - TYPE_CHECK(pic, id, id); - - if (pic_sym_p(pic, id)) { - pic_error(pic, "non-symbol identifier required", 1, id); - } - - return obj_value(pic, pic_id_ptr(pic, id)->u.id); -} - -static pic_value -pic_symbol_identifier_environment(pic_state *pic) -{ - pic_value id; - - pic_get_args(pic, "o", &id); - - TYPE_CHECK(pic, id, id); - - if (pic_sym_p(pic, id)) { - pic_error(pic, "non-symbol identifier required", 1, id); - } - - return obj_value(pic, pic_id_ptr(pic, id)->env); -} - -static pic_value -pic_symbol_identifier_eq_p(pic_state *pic) -{ - int argc, i; - pic_value *argv; - - pic_get_args(pic, "*", &argc, &argv); - - for (i = 0; i < argc; ++i) { - if (! pic_id_p(pic, argv[i])) { - return pic_false_value(pic); - } - if (! pic_equal_p(pic, argv[i], argv[0])) { - return pic_false_value(pic); - } - } - return pic_true_value(pic); -} - void pic_init_symbol(pic_state *pic) { @@ -194,10 +98,4 @@ pic_init_symbol(pic_state *pic) pic_defun(pic, "symbol=?", pic_symbol_symbol_eq_p); pic_defun(pic, "symbol->string", pic_symbol_symbol_to_string); pic_defun(pic, "string->symbol", pic_symbol_string_to_symbol); - - pic_defun(pic, "make-identifier", pic_symbol_make_identifier); - pic_defun(pic, "identifier?", pic_symbol_identifier_p); - pic_defun(pic, "identifier=?", pic_symbol_identifier_eq_p); - pic_defun(pic, "identifier-base", pic_symbol_identifier_base); - pic_defun(pic, "identifier-environment", pic_symbol_identifier_environment); } diff --git a/piclib/boot.scm b/piclib/boot.scm index 2cd1d140..d97d03d1 100644 --- a/piclib/boot.scm +++ b/piclib/boot.scm @@ -330,4 +330,33 @@ (body (cdr (cdr form)))) `(,(the 'with-dynamic-environment) (,(the 'list) ,@(map (lambda (x) `(,(the 'cons) ,(car x) ,(cadr x))) formal)) - (,the-lambda () ,@body))))))) + (,the-lambda () ,@body))))) + + (define-transformer 'define-record-type + (lambda (form env) + (let ((type (car (cdr form))) + (ctor (car (cdr (cdr form)))) + (pred (car (cdr (cdr (cdr form))))) + (fields (cdr (cdr (cdr (cdr form)))))) + `(,the-begin + (,the-define ,ctor + (,(the 'make-record) ',type + (,(the 'vector) . ,(map (lambda (field) (if (memq (car field) (cdr ctor)) (car field) #undefined)) fields)))) + (,the-define ,pred + (,(the 'lambda) (obj) + (,(the 'and) (,(the 'record?) obj) (,(the 'eq?) (,(the 'record-type) obj) ',type)))) + . ,(let loop ((fields fields) (pos 0) (acc '())) + (if (null? fields) + acc + (let ((field (car fields))) + (let ((defs `((,the-define (,(cadr field) obj) + (,the-if (,pred obj) + (,(the 'vector-ref) (,(the 'record-datum) obj) ,pos) + (,(the 'error) "record type mismatch" obj ',type))) + . ,(if (null? (cddr field)) + '() + `((,the-define (,(car (cddr field)) obj value) + (,the-if (,pred obj) + (,(the 'vector-set!) (,(the 'record-datum) obj) ,pos value) + (,(the 'error) "record type mismatch" obj ',type)))))))) + (loop (cdr fields) (+ pos 1) `(,@defs . ,acc)))))))))))) diff --git a/piclib/compile.scm b/piclib/compile.scm new file mode 100644 index 00000000..94a21afd --- /dev/null +++ b/piclib/compile.scm @@ -0,0 +1,254 @@ +(define-values (make-identifier + identifier? + identifier=? + identifier-name + identifier-environment + make-environment + default-environment + environment? + find-identifier + add-identifier! + set-identifier! + macro-objects + compile + eval) + (let () + + ;; identifier + + (define-record-type identifier + (make-identifier name env) + %identifier? + (name identifier-name) + (env identifier-environment)) + + (define (identifier? obj) + (or (symbol? obj) (%identifier? obj))) + + (define (identifier=? id1 id2) + (cond + ((and (symbol? id1) (symbol? id2)) + (eq? id1 id2)) + ((and (%identifier? id1) (%identifier? id2)) + (eq? (find-identifier (identifier-name id1) (identifier-environment id1)) + (find-identifier (identifier-name id2) (identifier-environment id2)))) + (else + #f))) + + (set! equal? + (let ((e? equal?)) + (lambda (x y) + (if (%identifier? x) + (identifier=? x y) + (e? x y))))) + + + ;; environment + + (define-record-type environment + (%make-environment parent prefix binding) + environment? + (parent environment-parent) + (prefix environment-prefix) + (binding environment-binding)) + + (define (search-scope id env) + ((environment-binding env) id)) + + (define (find-identifier id env) + (or (search-scope id env) + (let ((parent (environment-parent env))) + (if parent + (find-identifier id parent) + (if (symbol? id) + (add-identifier! id env) + (find-identifier (identifier-name id) + (identifier-environment id))))))) + + (define add-identifier! + (let ((uniq + (let ((n 0)) + (lambda (id) + (let ((m n)) + (set! n (+ n 1)) + (string->symbol + (string-append + "." + (symbol->string + (let loop ((id id)) + (if (symbol? id) + id + (loop (identifier-name id))))) + "." + (number->string m)))))))) + (lambda (id env) + (or (search-scope id env) + (if (and (not (environment-parent env)) (symbol? id)) + (string->symbol + (string-append + (environment-prefix env) + (symbol->string id))) + (let ((uid (uniq id))) + (set-identifier! id uid env) + uid)))))) + + (define (set-identifier! id uid env) + ((environment-binding env) id uid)) + + (define (make-environment prefix) + (%make-environment #f (symbol->string prefix) (make-ephemeron-table))) + + (define default-environment + (let ((env (make-environment (string->symbol "")))) + (for-each + (lambda (x) (set-identifier! x x env)) + '(core#define + core#set! + core#quote + core#lambda + core#if + core#begin + core#define-macro)) + env)) + + (define (extend-environment parent) + (%make-environment parent #f (make-ephemeron-table))) + + + ;; macro + + (define global-macro-table + (make-dictionary)) + + (define (find-macro uid) + (and (dictionary-has? global-macro-table uid) + (dictionary-ref global-macro-table uid))) + + (define (add-macro! uid expander) ; TODO warn on redefinition + (dictionary-set! global-macro-table uid expander)) + + (define (shadow-macro! uid) + (when (dictionary-has? global-macro-table uid) + (dictionary-delete! global-macro-table uid))) + + (define (macro-objects) + global-macro-table) + + + ;; expander + + (define expand + (let ((task-queue (make-parameter '()))) + + (define (queue task) + (let ((tmp (cons #f #f))) + (task-queue `((,tmp . ,task) . ,(task-queue))) + tmp)) + + (define (run-all) + (for-each + (lambda (x) + (let ((task (cdr x)) (skelton (car x))) + (let ((x (task))) + (set-car! skelton (car x)) + (set-cdr! skelton (cdr x))))) + (reverse (task-queue)))) + + (define (caddr x) (car (cddr x))) + + (define (map* proc list*) + (cond + ((null? list*) list*) + ((pair? list*) (cons (proc (car list*)) (map* proc (cdr list*)))) + (else (proc list*)))) + + (define (literal? x) + (not (or (identifier? x) (pair? x)))) + + (define (call? x) + (and (list? x) + (not (null? x)) + (identifier? (car x)))) + + (define (expand-variable var env) + (let ((x (find-identifier var env))) + (let ((m (find-macro x))) + (if m + (expand-node (m var env) env) + x)))) + + (define (expand-quote obj) + `(core#quote ,obj)) + + (define (expand-define var form env) + (let ((uid (add-identifier! var env))) + (shadow-macro! uid) + `(core#define ,uid ,(expand-node form env)))) + + (define (expand-lambda args body env) + (let ((env (extend-environment env))) + (let ((args (map* (lambda (var) (add-identifier! var env)) args))) + (parameterize ((task-queue '())) + (let ((body (expand-node body env))) + (run-all) + `(core#lambda ,args ,body)))))) + + (define (expand-define-macro var transformer env) + (let ((uid (add-identifier! var env))) + (let ((expander (load (expand transformer env)))) + (add-macro! uid expander) + #undefined))) + + (define (expand-node expr env) + (cond + ((literal? expr) expr) + ((identifier? expr) (expand-variable expr env)) + ((call? expr) + (let ((functor (find-identifier (car expr) env))) + (case functor + ((core#quote) (expand-quote (cadr expr))) + ((core#define) (expand-define (cadr expr) (caddr expr) env)) + ((core#lambda) (queue (lambda () (expand-lambda (cadr expr) (caddr expr) env)))) + ((core#define-macro) (expand-define-macro (cadr expr) (caddr expr) env)) + (else + (let ((m (find-macro functor))) + (if m + (expand-node (m expr env) env) + (map (lambda (x) (expand-node x env)) expr))))))) + ((list? expr) + (map (lambda (x) (expand-node x env)) expr)) + (else + (error "invalid expression" expr)))) + + (define (expand expr env) + (let ((x (expand-node expr env))) + (run-all) + x)) + + expand)) + + ;; compile + + (define (compile expr . env) + (expand expr (if (null? env) default-environment (car env)))) + + ;; eval + + (define (eval expr . env) + (load (compile expr (if (null? env) default-environment (car env))))) + + (values make-identifier + identifier? + identifier=? + identifier-name + identifier-environment + make-environment + default-environment + environment? + find-identifier + add-identifier! + set-identifier! + macro-objects + compile + eval))) + diff --git a/piclib/library.scm b/piclib/library.scm index 87750aa5..79b29aa6 100644 --- a/piclib/library.scm +++ b/piclib/library.scm @@ -91,7 +91,7 @@ (parameterize ((current-library name)) (for-each (lambda (expr) - (eval expr name)) ; TODO parse library declarations + (eval expr name)) ; TODO parse library declarations body))))) (define-transformer 'cond-expand @@ -215,14 +215,15 @@ and or cond case else => do when unless - parameterize)) + parameterize define-record-type)) (export-keyword 'boolean?) (dictionary-for-each export-keyword (global-objects))) (set! eval (let ((e eval)) (lambda (expr . lib) (let ((lib (if (null? lib) (current-library) (car lib)))) - (e expr (library-environment lib)))))) + (parameterize ((current-library lib)) + (e expr (library-environment lib))))))) (make-library '(picrin user))) (values current-library diff --git a/tools/mkboot.scm b/tools/mkboot.scm index f7d079bc..d7470d56 100644 --- a/tools/mkboot.scm +++ b/tools/mkboot.scm @@ -55,6 +55,10 @@ ,(generate-rom) "};\n" "\n" + "static const char boot_compile_rom[][80] = {\n" + ,(generate-rom) + "};\n" + "\n" "#if PIC_USE_LIBRARY\n" "static const char boot_library_rom[][80] = {\n" ,(generate-rom) @@ -64,6 +68,7 @@ "void\n" "pic_boot(pic_state *pic)\n" "{\n" + " pic_load_native(pic, &boot_compile_rom[0][0]);\n" " pic_load_native(pic, &boot_rom[0][0]);\n" "#if PIC_USE_LIBRARY\n" " pic_load_native(pic, &boot_library_rom[0][0]);\n"