From 7b7b5ee475ba81a574fedf4772a213a798ba4c27 Mon Sep 17 00:00:00 2001 From: Nitload Date: Tue, 8 Apr 2025 23:20:53 +0800 Subject: [PATCH] Daily update on 20250408-232053 by Nitload Youmu. Additional Message : REPEAT expression mainly complete, should add support to ELEMENT related operation to common expression like instance creating and type converting Signed-off-by: Nitload --- StgSharp.C/StgSharpC.c | 2 +- StgSharp.C/x64/Debug/StgSharp.C.ilk | Bin 2020544 -> 2028768 bytes .../Debug/StgSharp.C.tlog/CL.command.1.tlog | Bin 10872 -> 10872 bytes .../x64/Debug/StgSharp.C.tlog/CL.read.1.tlog | Bin 222372 -> 222762 bytes ...{CL.16312.write.1.tlog => CL.write.1.tlog} | Bin 11792 -> 12552 bytes .../Debug/StgSharp.C.tlog/bscmake.read.1.tlog | Bin 4162 -> 4326 bytes .../Debug/StgSharp.C.tlog/link.read.1.tlog | Bin 8864 -> 8410 bytes StgSharp.C/x64/Debug/StgSharpC.log | 145 ------------------ StgSharp.C/x64/Debug/StgSharpC.obj | Bin 137205 -> 137205 bytes StgSharp.C/x64/Debug/vc143.idb | Bin 347136 -> 347136 bytes StgSharp.C/x64/Debug/vc143.pdb | Bin 241664 -> 241664 bytes .../net8.0/StgSharp.Model.AssemblyInfo.cs | 2 +- .../net8.0/StgSharp.Model.sourcelink.json | 2 +- .../ExpAstNode/ExpInstanceReferenceNode.cs | 14 +- .../Express/ExpAstNode/ExpRepeatNode.cs | 74 ++++----- .../Express/ExpAstNode/_ExpNode.cs | 3 +- StgSharp.Script/Express/ExpExceptions.cs | 19 ++- StgSharp.Script/Express/ExpSourceReader.cs | 2 +- .../Express/ExpSyntaxAnalyzer.RepeatLoop.cs | 42 +++-- .../Express/ExpSyntaxAnalyzer.TokenSpliter.cs | 4 +- StgSharp.Script/Express/ExpSyntaxAnalyzer.cs | 3 + .../net8.0/StgSharp.Script.AssemblyInfo.cs | 2 +- .../net8.0/StgSharp.Script.sourcelink.json | 2 +- StgSharpDebug/ExpLinearExpressionTest.cs | 4 + StgSharpDebug/Program.cs | 9 +- .../net8.0/StgSharpDebug.AssemblyInfo.cs | 2 +- .../net8.0/StgSharpDebug.sourcelink.json | 2 +- 27 files changed, 116 insertions(+), 217 deletions(-) rename StgSharp.C/x64/Debug/StgSharp.C.tlog/{CL.16312.write.1.tlog => CL.write.1.tlog} (80%) diff --git a/StgSharp.C/StgSharpC.c b/StgSharp.C/StgSharpC.c index 43fa0bbd..310a71e3 100644 --- a/StgSharp.C/StgSharpC.c +++ b/StgSharp.C/StgSharpC.c @@ -68,7 +68,7 @@ SSCAPI void SSCDECL unloadImageData(Image *out) free(out->pixelPtr); } -char *SSCDECL readLog() +SSCAPI char *SSCDECL readLog() { infolog[511] = '\0'; return infolog; diff --git a/StgSharp.C/x64/Debug/StgSharp.C.ilk b/StgSharp.C/x64/Debug/StgSharp.C.ilk index d5332a331671219165302262d04e70a3b943ce44..83e1a0df12337be13b22bde5e09f288d211fcd23 100644 GIT binary patch delta 36592 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 delta 34619 zcmZ`?34Baf`#!VWk&wg;NlawI&=6YkC5nooqeVl}QA?vmM~jaZ4Mn4tj9MBkI*OcV zi_xOg(x_!Z(XlTLqP4`@p_Wifw3eu)|L5HIW@hsL=APg0?L2eN^StLh>%I5PmHMuZ z^R5`@YEk2GyRxvpU!T^n^e~3x95Ag4yR^}__SOASy0Asv*2P!ts4;0ok&+5N>RQy5 z-(IGxJ}1Xmpfl&RUH6jdpjPW}Pp%g2sTQr-R>x4fv13tJjpukX&9yq*eyLKpZtBy2 zcnV+F+%ak<@a=;&uk)twX^q@DL{ruC+z`!G4Y%Km2ut{&yrQ&L(4)d8^l59b_9)fK zGt*7sy#ITe>^a7TDcm?zQ^2k7X~Gf)OBA2e*6BAPwfX4NTlZ5%nmbIBQ!bjw7q*J7 z$?d~6*4!be*rFq~Ex)x~vC~bT-qSw@)Zu*XaHU?y`=~c_IO-jtRr;mZ%cN}fqWo!# zbST}#?U}(958qU?CU=j}Sb1r2m9T_A6*(*EEbCY)eLCN(*ksK}rRw~VsMk@~Y+DTJb@kw2t@RX5(m0Sn|yBaY|6e=^1LYGwD5Qgc4cNy6%XG-yEa)G|=}Ga_RxHj^T45iHFdSLvfJJ_(5=K?}^nSCxLIXN}6p&8g5a>x1b zu;lyYeSe4g-22Vyqw=&H@J@wh*tQSGcYb-C(hT=_O+L>bhX~e{d-xMwE~2?ZpH45j zQeGr9VP{WJBCt(F@b(GlLwUJD;Z4PQ64K{8$e*@+8ijJt?7ncxle3k|;bEF*xKmT8 zshs%7{cOgJ(-Z&T?LO9Q;~(wURQ5zn)~t%qS$nqUKYgwl$i3SV!gvFhrc{^Nv%M#N zwnoxup64TmXyQCAzt9}lXsU42T+I)f2)=!;=5O(ePsEp+UH{R%={d4r(@`HxNIaz3CEw*Z4D~ocT==aDKH_`58L~pXIQGX zS%sKaJ*$;t9@x(4W+@MXH% zl2^{&UZ|<=u`SburRuEp+VfXV==$oM_1b$@p3p4_lbFmI(NSCd6NgXdarpGshMKmX zN#WAVRWyV7?50u;?u(Y{@J*96Rk<-n8X4U988MO^TjyBGp{ewI!!U+M^WT;x^yNmg zWY&Al?HQjmUsD6iDT;@8l4|ozv(%?f=6tPSG9$XjHMgz&$-ougopGWuH_XzaI_@w3 zmnK{anysdwt&RgN<*Wat$zDKX@q#w2CTRAr|Cc6v0n01X8pnfXUGTp&*$Ze+iyWJv z`9jcSFQC~H?M zk|ztO-b6WYDl({0(+`3ZR z2;mI5zJLcuUBp=$!h>8fxVEQ6ZPeDfXscX1^4)Siwe>0Z&=36IZk1~Xm&t9FeK?hM9162pn==s z6@1PaVZs=#OGwd)#nydYLSGrI1MrmAlk%(RutxZ|snS3lRspZl1OW4#e;@#+C_gO# zrZj))Sy7bGp05-D(~?(jDmaPl`M9Q1GvU^=uBp^hqwH9b&84UGV%>^09nI65OKzp) z21@=Hwti0fJDA@>`Z0L-(5FfA*10838l{PpcQ&*!qoe4LweM@IbNlm>Eka&Q$WK8h zR@_TGzUQSBO{6?RAmoY8q0vrhjggW^2>E4lzC2Pc=TT1)psrRSFLds@=;{ z`IRYM>Z}u;;d%2FX+t=lI$vYt)}B%x-MV?U_LQUwJ9Xjf<vlVH&8vsxOnpn?eA38afK~D|a)fQX5R!ZM#c;*n*Dr;yX%~{yH>aGVpB_G_ zQb^7OS2-tfcKE`mkep+S$~oiR;k8~2$yt4&oYUiv@N>_HK?QO8pZdIbBYbbMBm~ zGOJZc&b%5CG_c$a4ciavpzB&RH@lQg6UhURZK-WPs(HR6_5?~H67YMSXhU1lkiC7(wg3N>4Go~c}+oXLya zSUE()be^T(DwIb{B8P|SADw5yW`%O}r^tKykY3Ju6-v_`kvGFaQkwmuP-YZHUJkWg zAlzRS%9-CH+k~2@I#1(M3T4Xa$bO-{-1RAx&KDxbR0$c&u^S4d(XGf`vGR2|-Vl{A zC*{R3kJ%9QYv?g~92P}m(xY&wxlt;^J#3Le+2xLE6WUA6N`*3XRn$FO z$Yzedp->8MMlB0HP*d+Jlr#6D##lmn8Cbn4_2-u8s+S`}Qa02j$|n(tRXq`j#$N41 z(nb$4lBdFVjh9=8r0iaS_Lfuj8_$KFTakwq%77x{w$N*?S+PQyanjf! zbl+V1U7@r(Z;a4$AID~LvHYrErkv1>r_IFaQ?B0S{PN!UokH0q1$wRrX`n`m&epmjVuW$IN5@RxVkBkgU9#PJnsQ7qHcOy=QyOHvf z5pbNX#lZq^b2ZqP_Zd?GFS=%YAPs$1lpgxiI9KWV^iSz7L%6VdMqf8>t%U84H|kZb zk;iez*s+o#S@Tdu(({pVW+nNKgzxGaThC+Co6;pk)Gyo=x*n;rsa({wSG7cs*JOI2 zS47)lRYU`8_(ex=*Qn>IQ`=-Muc=ul$9B%Y2j!UQTs6!L>ngtH1#K|Xbw)Upz-866T0K2y zoBC?#zIMwOrpG#kzb#jVKal(Rg?Xl)T7_T#D;561ul)R`3rtfq;u52sF3r&_Oy;Ev zO=h}<;E{_=@0Fijj`Y-Yn`&#M!Sa%6v)D8v#FDA&IlI_2L0&RncaLf8nZCm0kQB+y zH7b&sKbX46k~7ah67CTThHB}xMMZLViz1O1X67!@r6kGSuOex7K#{DcK!K_WD&t za`)GOq>(4{RG^mJ-&G{de2Rp&k}K8x8`hKSDv|{^f@?9~4b;-+9~H^je}W|$+UovA zKCx2u(2G1Fta{KQ&#PM9zi@J+RV2+~f+hKuKrP4Xs7OZFRU|Z18&>yEyPL@>l9~Sr zt|jcbKrP9wR3rym1xwP~1th~esz@R`1xs?eRrl|4$9t(rM!#O6E&Zzd_qf;rDv}KY z6bY@mp#e#+5h{|qBZ33V92;m$?nD(yv+Q6={4U%lU9T<_W_f!-&?gc44gP#N{nWc*k zy@VU)SR|w5yU{Vv_$9%2 zqjfzojiM9eQ=g`dqlf7f_OcWecKcL?J)lYSK&>>M9ke+q$?pO^_GFccWWnm-TFe^)wY1r+B00M`Sdy_LAep#VMUt>DSdw=*8rL{w zT#l+pnjH&n%i1$R<8od_vfx5+E#_;1z}nnWk(|91kYF#pAC1eRGRGdNNbWugNHE9r zF@ZT29usPRNboeP920bj&o>1m$759_qiZMcZXqFUCxq9W}=i~X-a zTe{v?k=(c+EE)W7Kr%=l8+!RlQY`wRO#^|=N>hWg?@C{LdXWsZ& zx*=LWA-26vVLx%Iuop~H*jql1#SKxGd_z=!YV4E{2WS@0)~T^{LnPlsjF=hgz-gf@ zIsS!;WY`?EfXjR}>Yk4}^Db zlZt5O=5mqe;`TrnB=1$>@7`O^rwfJcaG;VwM^!|Rk5&|Aoe4B&&v_M5-wPE*#a9D0 zJ-MkOns=+B$ap^>YW_$?bnsC{QM$gSf4L41uNiV*@JN+wmTwGni)O0npKym_RYU`8 z_(k%#`f3GgG9;>q79>^_nHvQ}ZBkW4$5Jbb>}dhfm^Lb+$QLS#ayr!XZ+6FDQ4tO6 z>=)5a+`XoMjYsuX5iRZQ7tv1KKM-DrK`NrNgDQ$Lh6h9wKTr|HjH)PdjSIBtoKr;*}NYw9&is1d-BA(syjxLJ^e7PCJxzS5Z6V$>QyX8tEzs?4<#>O1$yHTEyQ}&|a(K2H@&1k& zWKj`4wp0{lCC2-Ed{09aQQxO4ii%SMH9cvrBAWMHMUnA^fT(#p71631D}3ROOPVn5 zI~!jyJD6kU`7c|(^jtU>pI$TM8`!NM#M67+bN`9IoEnP4XEw65l718KAbSoqvP5ev z^fsq>OIf^1T>eioBAQ1Z1La9$OHGLne%501WISv6Q5V9c)syg?rTiVxDJ?99O2Iug z_XSI`-1EC^mQj(}u7C7w#X~*ITo=w#?&w*SyLvVS*!e)uUPoCTu<>s_y9HYX%lrSSI=zCQvk(n)NDUSh`e@UM|rM|@8d__m&{{7WCt z`UuhuJsVr9XExycYkJlI-y5ytoj$Pi%61(^AjkBqWDx>6qG!c0y&L$Tp8W>10%xAk zGh?xyH5K{4>RH5ZdX^6Cf=)u&0Fhs$XD47zfe*tE>}!D!!4Iqe*bZH1)K>^>JFRDx z&ghd^iTH9-&%#cj;>EzINQduMfsv;HvFT!7Gs9Ao7iCz?*}naHmVH3a+#tAr(X%#% zdbS1Fj{HrqV&Hs~zlXBxz@=U|*p3RmK{PuMIm`l_vRlt?z*2y%JN4`wtTV84pPto% zpTWTSd-Uwpy%;iJ2XuFK=(Cv{UyQr->@I9QuoWa1tO(c%a$7jKDDuzhSx*@I7JLNJ z9u^I3JELc#VGV#YQGOQI3fO`2gD^X=3+0bt1AyJX>)COio@D{2oX zfPH6lY}Z*Gdn7ogbZp#d9WyRPzr3VpLtu#lzo=(dU@d^{FJQE72n9H$t)5+mWdavn z(XzM_Et>(Hxkt;^p47g=-1y?%rDau-u?5)rgPyI;$LIsw7GWx_#OMR(e}#p!5Tm~g zojMu)0J8wwM(NpyPK^FC-mjOXX0~;Pj?IUSLYXyN$0knKu^eDFUdNmhb!>^yw9&Ka zFfXtx6$`s58V&4htYWq zHyB&aNA|GP=SzB65?@RCS>murLmhJi+c7lnUC^=hB7dfi-Tz$2_5piu z>ezq((y=qZ`TuBH?n5mr1unwpo<~}yU%@|p9m9S}$8xXeSo#Wd%pYhZz7G(%7hJ)d zz_!@sXFu>Efx3%{#l`M|z6b!naJD?%K$EVpk;Ls`%qxxV=XJf9};l_+mJUK zHW%1g86zB{W6K5pQ_EW3#OwjKU)8cOd@llKV|1+LhdOo<*my$645xIg4A|9Om(5o9 zK&w}xHOF-9&~XecFaur*YYObzjt<_99uoP7b*$SF9qR*}xktxdIH+Tpf^$pDuEM4O zduQudvxPdA2kcm^V?P&QaDd%?;RC&~515_Pv8S=F&a6yCfd;!&6y_QVO5uF)uLx)r zoZ>V4C<0o=TVg)HX3WsB1-&smC}Xc;2g|?)0&IO*$JV6l*bLwzbo+@srpeJDafQ?w(OJHYK@gI9x>Q{DSpXl%jt{t2AhDma_4 zf5FUa(DtA7ti~494a|C?b9!P#Z1`gQ84DlQ12}UlcI9md2-pU4D!z{gE`pOZIB)?w zO}HRNqhY`f1RQfm%L)W1Nza~n8jD(R8lj`HuuDWf@{;iV5wQJL9lHrL{(vC*Vy75~ zp-RM;Qp}~n7}gfR`3$?L7%5<@6(iJ2#~dObyKiAF%t2t|T`jwLPs?(EGw*9zH_YF! zfn8Ye_g=%I5uBHF?Bx#F0Dx^VdKR0Ah64LAQuDg%*qv;ANx`1^02Y=HjD4~?CbI?D z?b5MHm|rQtc64nGbay+!!Em+0s>=X&T-LIQ*k6YNyUuCZfs0z^1kT4LU_7?Yxxj3V zo}Gs+2QD41XSPgSa78}0!0Zq3pCWv5V_$p*8~8l8h^4J!k-nRV;{EMhHM*-XzS zw8Etw*f?6p4#HXi+dt5;LD)0xz%DHR+izpu0DXj179B9dN*}SEPwZ|nv^RdPWushL zX2neuo26xkU`>IYGqvnIEFIWA58Ei$vOd7Bxmwl_-!p-Yz$0K&_=;C8N!^Oz=B+tc z6DVSnwCtUaF=z`h1+%rx>(sIgU@P!a*ihhDWZ0Ovmv zD}{{*b|LQyY{~{6+sD!=mVx&c%)Aj*HkNQq_k3 zM2XD>W=$ma8tiM}(yLEN{)CAKya<-Xn>j4+hi7I<>^iJ7U+l2NbDzV~qmKI( zi8bjgu|napx5RG0DY2u#?p_l61$L3o?q`Xwo8L`hbzhU%BNSP?OKc`g??KHO5_<@X z@bIpEEpvwSmDpsMu>jo)b@kWL5MV1lyTh!&E|l+tH2}7u#t&dAz+RO94Ql~hgmPU! ziP?aiC|?Il2ln+uW8l|bz}xi0&G3MJ7IU(ztHfHrDlr!bcEmXkmIus0UI}vxCw(M# z3AVg|Z+pwqiC^z)Nv~{wL1N=zyEgHS{czjx^;?$27;g`WU4_{;Lxs;3uymf#*Aid3 zsJX=2KPR!FoB4r0mL|zgeBT7~fojF)P*@4DucgG^eI7#$?80Z)R(Qhti5nc2COqYB zi#g5tDI$S2+KS!hGmI&$DX`OprovhQvzZcm6V?vcJwsv_U_E%>w=M6)x~HR8AvbSB zPkoMTNE&S88~dYS#5PpH(5~lu-mtXEW)TuQ0b7r!G@}*yur0tvMu}-m7!Y84O~ef= z1a={R6YMCkGZGzLRbppEKDe7;7lEy2OflGX;8J`(6(_Mfz$`{$&%z!7JCHxeEQw8M z*qfFHG5AYF-C>DXhBi<>fHm5{zj*^)u>L(ukMR6A4eX4=z{0pR)bawKG1Ow_cKjzf z^L+z*2=g9Bpd$@zJZv9u=?DXR9=HhDh0oKl;=_E+P|LH?qYTVB#=tB^=#TLRHgST1 zwcuxmTH<3f#~IjgWc5Lj5%^75W)W{Qz*0Y^$Z25z!m?17iO-*4P98T5;bac8Bxd_Q zH?Z$q2G-~Z%D*tMgRpkM_SpuO0-OQtngxI04Fz`2Ft8GsQ{b5fb`F*UY(?GxmQZJLD7aHO;yRUSWlpMaC5p zy9~PsY+H^`7~76cUna48-(gk*J0Kmr8Z(N=4X`9}{Q!(u(|0Y2;no%gwh~srd%kN) zs$2xvG7a5U$hGfUnzSr>(ZG^lGO$&J@PYi5ur0tgn}M}Q*)Cuo^8RjPU_RjdeG)tO z3ugUx{uhR+Wqu)66RgJ$#JOE!m3K(253p;e#2W6xZVYTkURQi~35>j3uq8YA_s}O> zcVl+LqIaS_+c5LJSdGBOgV<6IVZ#H?Jcga&ING<9#}2ei9+h-3YJS)Np@(#m_ckz~kE%oa8%D|qhip>HzKN3p}-;06m$mMQh9!OgK>+88@4!wB!xNYj*p4`UfaUPr zL$GB$8f>W-4oM2K9KY~G?^@b~+cE8TzASc?@b_?6&;uJEPk9d)09yw9!TKD+Emm&> zTLc>b?DiPgCD;r;Hq#Pc$Fa=77JdiXZwMoz5{rj9flHA$ZMmpA@&ikJxBR7OEvSVk z%KzTLPQi`>+wjR@XGA{emsc3rMc_=hDS(9?g)5XNtu!zru+?i|-C=Y2kP&zq_iZ(> z_qL&O+N~|@kNZ`!|_BN~-*oE?+VLsrLEe7@xtOU3Sc~yT#=L!z;=D}APu>B_k z+XxFgj=2IKXJJNQCq93GnSqN?&bAn$m=#})5Z8w_;J48ueOZBl#lUPRvTnl00!s(B z;qw5@F7i=+8I}R;TWnwxzA>;w(FOSQev6F>*o*w5u%;s4ZD5muTk$UMTjG-)_?ipr zA!r*x!FUW6P1;~!v+#Wsux%bLOt3RY_)TUR=vyK49-2 z1G^0?0Zu{QNLVSCMp}|$8DJ93cme_MH?WS7n@{jTBP~s`jmHhF8EieuT&VG*FENI= zF1U6W*m;;kxZ7!9$6=Yk44+Z3EP;0!SPhsH*oART1V2ack@pKM57@dMGY)3P_!q6g zO#A^Y2F_n)V5Zdue)@e&0`Ht@F~^jyLk^f*1QWBT6z1cb&}HFlt%1FP;xewu#FfQ} zIG=?TB2MpITx4NKf!S^YdlBYFy$*bS1Iq`t9WgM&F$^l-G*a9PqWLL>pq=3F4!3;7 z(}!CUlN}4Oau*qx9;0Fe?gWbfPQgfZg;~WwqWlTW{2RXpN1kuH$FJ6V^1H{o)&Fac zs`jxiJZ~EPvBavp?LLdyi02BC9E&Lze**UuE_P{iELAm8yzNdf@FXHLmJlP7_upcv z!E@$VjQF#evJX7Nh-CeS7?pV)FMOO7KC19;M=WtwiBNi+2zued%p1-HLB};)Q3)QF zL@GT=j4-MsYc490WVUe}F*1vZVc?T?!N-2#qY}S;96lx}KJF0XAKoq9RD+x6!N&uB zekmAu(i183Z(@`Qh8cee6+Sf7SUlW`WPeBuEj4A6U_6%nnZ)CuNSXJD@`&G_XGzjL z&i~zUX=fa;VlaD zfuP*vb>^U&&xv8T663zyJl>Im@i#H>94u0bg&2Ryu6Z6uXWZtgE8zoA%_8L|5aSLp zN(AGs5=frnq&89R5v4^QDDC-dH=N)cTO>zy`jeU+_=r4o#>-TQKlmw6>`jr zJVd!nc9lCHo>mDBX2X1BucjL8BL4%qNBLNh|DK$05~sByxx13bkEwh23(9(;h|@2T zY%Zc4A&=%S;c*>N#9^68jt_{EPn5xe(w(qN;Me3<@J(OB`%#jLgB_8)vq}0J(Zjw1 zy&KIj90AFUS;ROjT9KrgMMS3{&Lq5C;9WE+ZYmM=BM~P?nPB`Nu-RCuxXmWUHe#fI z4aPniaU6n)B?F)xCb z1B7h?&n7%r-~xfoMjV66%1)%5DChD`i{Lz)8u+@x7)*@Ca@;)J4aQXR@dhy*uMy)D zswKmXTBgxRD-3IQV&sTXO43Y{TVlldyGZUSRJfBucpxhHk`^saNJX;Ri7|yLNMDQ! zewVRH9Q%pnewHW$h>|BLKG~rW2Z3@*CC1ytC=rZ5C`z0Jisb#080U!5;u|pf(|F>L zQBDfuEcM0oZxHI|R0|IOMRG1CA6LjnvG8%3YQfo|oSq>@UvByqebGlIn#4~>A~_mR z>6@g_`WE_2L=gv*BKg`9WeiRE{of*pBI++3+=}FUix_$2#JmJf<`cFFd|hVqAxogV zA@a>e97>90?L*4B#4Zr*T)7_O9;J4LF;CX<@TKsvfEsv2@iCBmEF>QpOW|V<)pCp& z?l*|>1uHfS&+FvMPnIki6qE$iJcr&Jn{AOY%+> zLf$fjFj~eY@k^GRIud1qEaX>(lkr41eh2zHgj)!Fk*dcbu}JP0N%2!*a5?IHm)Q2@U}w^ZjurVMM84VhfRw&Aq#P+CNz#m>A^C?2 z9WAMFD7iAPfUEN)$Kkg~R%IXBEjNS@S%C_^rYVCT8$@zXBp+MJM}hEBNc#YOJ`l+^ zi5Nf2yDJa>9zM3yPK#eT>XQ&4r z2ueSy9={KWWXmPSNfCCE=2g;*pMK?}Tz?MHRdoJJ=OxM$ z@5&-Mmk{MoqO@2A%73Y+agHyN<2hmsCPt26T%*Z>lYfzH-w>mO0y((~fefPU4!;Y? z>04r4B_9n|!^c1hMEs^Jl26%kzY*DHK6W*nTu?StrJ6zHWDz;pC!Dy+iSu2ec;^!3 z1lO!VhxMl6#!oOJxs#~y4XRdke-2xgO)E#PAI##`ol7gmR=u%JIbzqa#hW2ZFIiuH7VlIFyre zQ}Qc0>6j17WC}1d9|11mlk(B-wiFwFtrW>;BERiu1zr`RbZR$VN)XAaFkX^%JZ&u) z$7qQ0)0RlSr^rVyT1?XgqbK=Tq=cq){c*X~{G?#?pyjYB%BnQRg)`78^<}rTL6v;h~7@K&v zb?BpJ)c0O0bm*zD1yxqC4wXGkvrl1IZ_pibU1Ef-2jeLUe!CLFJz_jV{oH#!LP#OD zQ?MHoUM_Gd)xL|Aw)>=PM8o<(D4WP^lXzc7B=19_{D%gh;|5TkC5m{BMkL!mL`kN4 z@;0EJ21F6B`-tQ$B}#pMWCQx3A;o`y3fW&&n54{tji@4#x)5&-iR8FNjCxc<&PLP_ zOD)0MPa?T55yL`#a8me)CkEbelG7i=s7Z{59x!5vaYSMGh+!tiSiwk8+VLAvoTrHr zO@Zw5Adoo1r2^NWWf)fgsg{7 z8hcVObn<{l{7sC(Bf;QnhZ^H~gDq&jq=b2wikFWf2YQi>>%|s0(8`oZ@xGu)%SV7R zr<*pO?-LFxQU5)p!UkhVZ=f5hxUJBKQ~zk_J;&uA5+jT@ogsp;Q$Dp2e{@lNF19dHBIYriwgqI7vnr}aVA;Rxq zA{oCY|Lgd9Au5p1DvXgz;c6=M@JT~ ziVjH9{KStGBO;~HzKRMr%3gWH?a;5652VD;dm@z>I>_@np7-AlxrJhOZ%51tg!c(t zn+|j8lBhvAiE44p4v1=!$Ht0BMupYs9A?N4)EP~#Tsz<@hA$SPSfv@sib_YS8pI6S z38tBFiohljKoWKx(T~Oy5-op1%`?)W(u$p^s+!zY##Dt-ncQ0Wc_C-~$V15SbC*at zb}D>Ak#^h#xrVR32nK!x6DhqLG5!@pmV^TodA2BpWyvqgT{nutEZK!HM-w*g1|Gxf z?1m_dvK%7oLke{IZcA0}J7|eBHm7>Zo*`G6e7lg0kR_&+G%777pBMUpRFQQ*DjGyMUEt<)R{08vTEvp5JD;>4q8{?LVC@SA+nA&B}=gL2*?RY3x&`VzB5F#8cU9tM7k*EtN8gR&eVYaI3N^uvg6 zJb6nWqJijPstOCH!OlEks39eH0j+s%G*Ibsv=9U>l1bhoW$1_ z!B+!n>?lRlgG3F9Xg&hs(}ZmTKO;{2lW;F9PmeJq3dx+q#;e4r z%Wn&L9a@)Tsc@en{}0uZ@hj>{A?y@5mCybaq9&A8B(k0*TqbZ+KKlelYl6~%zEo2) zp86X^k7+q%Q(@6OD*RRspU?jdfi5P7lNd&Y@eMyB!yB&uJN9tl}f2Ksdk_xkhD>L6DRMItv2`F)3Rlky20W0>PFD`vi{UrkhZPpMf%hl;Twwq^w4ytU^)s77PPLh4*SiDo7?q z6u*57K2``uHQAqWwc?`*F{*RZRWKe1MpdfiM5)Q63{@ z6J@{!qn_M}#={DukQnvJpVEBg;)Ajo?{)`M<%pszCS`M~eUo6|k@L?0 z!+44qEy!QkdH72soFZ^b!WjZTPuMANE5geKZcV*?RH^eEd2GXPBNG1LJnDRwZd>u5 zkx15dugFt;xSY#7UI62Lit0Eq++B$=UcQ;-^9ADty0JZ}FzOJ)Msbu}Kpbz#6U&H~ zghcYSAjVsK#9xRb?GN}EL;Z?Zh-5}5VthzGa{hpiEW-H$k0o3z@Vn&u94W0`NcoXq zBxzm|A7-OZajO*KsOm8)9(xfL4xOMg2ql+E|JxZAGr?qn=Zlq+Y}vMdlJd_6ghiI%%~*X3Cqt6csENf{0|j&r{U>+ z8S)6o zf7%Ai6w&h}!cQaDAZkZZKA=KJ11jt&w}@}LhB`aQ<6wNG$m`PU(zAg?H+R*~C@F;UFNB>XTcca8A|LUz)|ly(E6JUM)$ zL2)~PMDzKG8xVa-qI@Cxl$Om&AQ*N4=f^R+^aJ2k9MBi>mP$@&%*ej$AFxLZ(9p;qFBHj&(K5CK1O z--3E31?;+ofM*dd5co41m>8u>#p@i=4@tNQle;FR6vTOiGX%~h>=c-bi?=w&kmqV6 zrScN0Jb{R1f>?{N^)_&Ao_ZUiXd2cOMRb8gG4d6G&%cc}#gfP?L}q?Oh~g;A_!qKj z(i}gyS(ej0~l)0Tr&Kc5b?Zs#ehoRTvGPA;uc9DwA+)CSNOilYDR@6)u&X^4@nL zUq+!g?;@1%`0Tq7EvISsrXorr(F!7#2_kL{Mf}!#zz6BMy5l`K+auppno`~-seL3# z_tL#)o}lj|>=k%F;Szxl5H{Wi{)KQ0feY#8@?G-i`j9*xB1Vp2944GEa1r5Rfse@8 zRC$;p{fMN$5~V>IC@1J{`F&y(jVH!2Vq^)%aeBfWp)j(EaZXj~r% z#x-gIUd$KC_AfF1q#Dy7qQ>ilGX=guI8Wf4guMb^mFwYGAHrh^MdegHYP-lw=oUql z_6UqpdW&unF|z6t<2Lo$bisH)53*B;QP!9k59!S0q+pcEwVT8%{35k@nke_^*{$JY zQ0~)H)=Y(=IQd5iu?q{vU77-T)nE3JL_YqaTlxKhafgO)wi1ZK_?wy=_XLbb)Z96W zk7?vX&nIohG8+5@oulJzqi{oy_bx>;e?g4Xv{E+-A2(>x`2;(Llwtn@#}ZBvxCY@2 zfvb?mugPQn3i231jOBt6Nw`ShD8gj|SC#QRYl0E~vs)43ymUYl!Aw9L@rv9$!0H6O zfY`n_Tg>yWCRD|yELu|;Z+VI|cy|{*ZZqCQZJ_}zURIdI>z*PN9i_l(^7D}J=^Dt3 zX?u1P!}ov~$LJy8q+lGSjScVpisZXTj9@LfJz4-w;aenN}!_OD2` zcSxj>dzzOCqL#2#0{)k$N)SDyD+k{E70KG0M0e!tCZ8`M&zK9UubUw+n;%7rGb3i|rzLcT?dmQg0IKJ@Oct#LM$?+CdaA zzb*7TX#`WkF&Mk$Zsfhgq1r|*{+UEhFNuEUv%?|UN&|BwJmEQPtKtG|60ebql%jc6 zp1`F%wKABu=$0Jsk&9&4QsHgtoB5Sd(ci?tTjU~T#t{QYDG^wLR|NwvBa6MsSOp=T zp%BxmApb1QUAzh}r)hS%;y?I^DyaCP+-FLe^Ajq&M2#&Lp3c*?r8hQGeoXe38OpXvjCvRC*xf8>#Kqs%SfYT*S|3ykk}5 gKce-gD80%I+b;X_%&(fT*Y%0ho8WPJYdM delta 34 qcmewn@*`x!Ch^H}T2h;B)NPn2XYo&%{6tD%a~F#e^X4Z~>$m{}VGXGO diff --git a/StgSharp.C/x64/Debug/StgSharp.C.tlog/CL.read.1.tlog b/StgSharp.C/x64/Debug/StgSharp.C.tlog/CL.read.1.tlog index ba075e944074851192410050f71de94d4291b4c1..7d944fadff38cd7e246e5d303b4918e82e966558 100644 GIT binary patch delta 233 zcmZ2-l6Tb^-i9rVX-C>$h%jw`A;P@Je{z-VgvsYhL{gm@cp11DoEfYbVi>|1JQ@5L zTp0X;tY9GDoxumlc4BY@(w+=aKsp3S`vcX)0OkD|g1~$~pgIKKg~64<4X82{s3(L$ z52)6MA$an^q}7vIN)*D47z`Lp8H|AHoq^(^K-2Vq_W1xIZdU{|L;`IK0h;T}U<}q9 T0(46dkRJ@wy?vtq^Id-cMkX&G delta 36 ucmV+<0Nekn%nhW;4S=)(X2h4^76TNs6dvABmyl@!kcVc(0k>wv0=!Qv84uL} diff --git a/StgSharp.C/x64/Debug/StgSharp.C.tlog/CL.16312.write.1.tlog b/StgSharp.C/x64/Debug/StgSharp.C.tlog/CL.write.1.tlog similarity index 80% rename from StgSharp.C/x64/Debug/StgSharp.C.tlog/CL.16312.write.1.tlog rename to StgSharp.C/x64/Debug/StgSharp.C.tlog/CL.write.1.tlog index 6e7e0b8ea854f788cc49237a01f99dfd5fe3fcf5..663701b6f346b95a09e7c09d73b55b5ab5354a52 100644 GIT binary patch delta 59 zcmV-B0L1^0T!> D:\NitloadIndustry\研究项目\1-Flagship\TH2020\ProjectFile\内核源代码\build\StgSharp.C.dll diff --git a/StgSharp.C/x64/Debug/StgSharpC.obj b/StgSharp.C/x64/Debug/StgSharpC.obj index ce86f11eba78c5e98a07cf09acd1ce3e60a4a275..b319ce9d508fb04e8c0bbb6a47fb9cdc3b94f4f5 100644 GIT binary patch delta 98 zcmV-o0GMCxvx7!m){H8lP zfO9TQ%Nyse%eN$&0p3Fc0ssJ)&(Q%|w_n}?juQ~Ge!ZsCtWQ|guFIZh+0A0N{qX_# EC9mi&I{*Lx delta 98 zcmV-o0G10p3Fc0RRA(&(Q%|w_n}?juQ~|0|GFrL`Jd=^L=U`ia^S@{qX_# EC9>iyqyPW_ diff --git a/StgSharp.C/x64/Debug/vc143.idb b/StgSharp.C/x64/Debug/vc143.idb index b9967017fc8b827e7a38fdc4059e7e1407d5242b..8ad7b582d7a81644d2486cb8cb8a850381b8b454 100644 GIT binary patch delta 1327 zcmZ|NT}TvB6bJCVGgq3872Dix-BcJci%6p_qayp*NU#qJvq*C#45OB^G88P3gplZ= zNN+XK7X=pf5VcLV`QU?rqLfjTP?V{pXyjH_YR0DB^S2%n8kpby_ndR@%rH}N!C7&^ zd1jWKSuB=p$=V1Re0UPp!EP8COV`@{k!*m@0b1pSMFUiCLLP+iA?lv`MV2C8hixI6 zO!`FiELi@DD(%SZGu2aIF06zB*a59yXl5}i_(E&zk$a(ikh&|NA6}u?CK?B$-RXf| zuebIM>(uCrm^fPGk4=Oy>HbQS>981Hfvs=|CVZnS9{EO-1$esWsLcINZ|(JWsz(fw z9+(eL!aCRuBZp~b*)Z)^h1>u?K<5Z`y(83Z9HZQX9RGuI2$fRg>#z-u!lY4}$%5tZ z7Ho&?Cv{U`2R`viff?@K7%Kl$z?D1iG;*dGgW^QTYWjXE}6ZYVpQ4H*G4>x|n$iD=>qf}|7Dv08 z{X1e{%7py5_zKMIs7NYd%9Ha0w siV9}@!;7@KDjbE*Q#^#T>@8QgO z8k(H0zI!vp{L@fmu^DYFXh!ARbv{C+g*0s~jH!bwkOp6X3-W3YWYxVStg=YI7N+RI zsf@DoJmgiJYo1s|h6)30@^S*JSZdyfD1kFgPvWMU4KW>+rQ5jV*D(MU+(Dc9hnV9s zx6AhZBMgtx#~`CxCouwq7e{4o4+mrPHxbaQzW9opkbA@YIDI(lP`%%zO-s=11xHRC zph<5Qgu(NWQA{yHe$9OrKP-Qn39 zGr& Empty; public override ExpNode Right => Empty; - public override IExpElementSource EqualityTypeConvert => _instance.EqualityTypeConvert; + public override IExpElementSource EqualityTypeConvert => OriginObject.EqualityTypeConvert; [MethodImpl( MethodImplOptions.AggressiveInlining )] public static ExpInstanceReferenceNode MakeReferenceFrom( diff --git a/StgSharp.Script/Express/ExpAstNode/ExpRepeatNode.cs b/StgSharp.Script/Express/ExpAstNode/ExpRepeatNode.cs index 8ddfab33..1fc52867 100644 --- a/StgSharp.Script/Express/ExpAstNode/ExpRepeatNode.cs +++ b/StgSharp.Script/Express/ExpAstNode/ExpRepeatNode.cs @@ -59,7 +59,7 @@ namespace StgSharp.Script.Express increment.NodeFlag ) ) { throw new InvalidCastException(); } - if( ExpNode.IsNullOrEmpty( increment ) ) + if( IsNullOrEmpty( increment ) ) { switch( ( ExpNodeFlag )variable.NodeFlag | ExpNodeFlag.BuiltinType_Any ) { @@ -84,7 +84,7 @@ namespace StgSharp.Script.Express _variable = variable; _begin = begin; _end = end; - _increment = increment; + _increment = increment!; _operationBegin = operationBegin; _untilRule = untilRule; _whileRule = whileRule; @@ -106,52 +106,54 @@ namespace StgSharp.Script.Express /// WHILE and UNTIL regulation. /// /// - /// Position of the loop + /// Position of the loop. /// /// - /// + /// The variable recording increment by step. /// /// - /// + /// Beginning value of the loop. /// /// - /// + /// When reach the value, the loop ends. /// /// - /// + /// Expressions to operate multiple times. /// /// - /// + /// A representing the repeat expression. /// public static ExpRepeatNode Create( Token t, - ExpElementInstance repeatVariable, + ExpInstanceReferenceNode repeatVariable, ExpNode begin, ExpNode end, ExpNode increment, + ExpNode whileRule, + ExpNode untilRule, ExpNode body ) { - ExpNode untilRule = ExpBoolNode.False( null ); - ExpNode whileRule = ExpBoolNode.True( null ); + untilRule = ExpBoolNode.False( null ); + whileRule = ExpBoolNode.True( null ); ExpRepeatNode ret = new ExpRepeatNode( - t, repeatVariable, begin, end, increment, body, whileRule, untilRule ) + t, repeatVariable.OriginObject, begin, end, increment, body, whileRule, untilRule ) { /* - * 0 increment variable type - * 1: variable name - * 2: beginning value - * 3: ending value - * 4: increment - * 5: body - * 6: while - * 7: until + * 0: variable name + * 1: beginning value + * 2: ending value + * 3: increment + * 4: body + * 5: while + * 6: until */ + CodeConvertTemplate = $$""" - for({{0}} {{1}} = {{2}}; {{1}} <= {{3}}; {{1}} += {{4}}) + for( {0} = {1}; {0} <= {2}; {0} += {3}) { - if(!( {{6}} )) break; - {{5}} - if( {{7}} ) break; + if(!( {5} )) break; + {4} + if( {6} ) break; } """ }; @@ -174,21 +176,21 @@ namespace StgSharp.Script.Express t, repeatVariable, begin, end, increment, body, whileRule, untilRule ) { /* - * 0 increment variable type - * 1: variable name - * 2: beginning value - * 3: ending value - * 4: increment - * 5: body - * 6: while - * 7: until + * 0: variable name + * 1: beginning value + * 2: ending value + * 3: increment + * 4: body + * 5: while + * 6: until */ + CodeConvertTemplate = $$""" - for({{0}} {{1}} = {{2}}; {{1}} <= {{3}}; {{1}} += {{4}}) + for({{repeatVariable.TypeName}} {0} = {1}; {0} <= {2}; {0} += {3}) { - if(!( {{6}} )) break; - {{5}} - if( {{7}} ) break; + if(!( {5} )) break; + {4} + if( {6} ) break; } """ }; diff --git a/StgSharp.Script/Express/ExpAstNode/_ExpNode.cs b/StgSharp.Script/Express/ExpAstNode/_ExpNode.cs index 7d466d2d..a40e8090 100644 --- a/StgSharp.Script/Express/ExpAstNode/_ExpNode.cs +++ b/StgSharp.Script/Express/ExpAstNode/_ExpNode.cs @@ -32,6 +32,7 @@ using CommunityToolkit.HighPerformance.Buffers; using System; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Runtime.CompilerServices; using System.Text; @@ -97,7 +98,7 @@ namespace StgSharp.Script.Express return new ExpNodeNextEnumerator( this ); } - public static bool IsNullOrEmpty( ExpNode node ) + public static bool IsNullOrEmpty( [AllowNull]ExpNode node ) { return node == ExpEmptyNode._only || node == null; } diff --git a/StgSharp.Script/Express/ExpExceptions.cs b/StgSharp.Script/Express/ExpExceptions.cs index e342bcb5..477edfab 100644 --- a/StgSharp.Script/Express/ExpExceptions.cs +++ b/StgSharp.Script/Express/ExpExceptions.cs @@ -39,7 +39,14 @@ using System.Text; namespace StgSharp.Script.Express { - public class ExpInvalidCharException : Exception + public class ExpException : Exception + { + + public ExpException( string message ) : base( message ) { } + + } + + public class ExpInvalidCharException : ExpException { public ExpInvalidCharException( char c ) : base( $"An unknown char {c} occurred." ) { } @@ -49,7 +56,7 @@ namespace StgSharp.Script.Express } - public class ExpStringNotCloseException : Exception + public class ExpStringNotCloseException : ExpException { public ExpStringNotCloseException( int linenum ) @@ -57,7 +64,7 @@ namespace StgSharp.Script.Express } - public class ExpInvalidSyntaxException : Exception + public class ExpInvalidSyntaxException : ExpException { public ExpInvalidSyntaxException( string message ) : base( message ) { } @@ -76,7 +83,7 @@ namespace StgSharp.Script.Express } - public class ExpInvalidElementDeclareEndingExceptions : Exception + public class ExpInvalidElementDeclareEndingExceptions : ExpException { public ExpInvalidElementDeclareEndingExceptions( string declaredName, string endedName ) @@ -85,7 +92,7 @@ namespace StgSharp.Script.Express } - public class ExpInvalidElementNameException : Exception + public class ExpInvalidElementNameException : ExpException { public ExpInvalidElementNameException( string elementName, ExpSchema schema ) @@ -148,7 +155,7 @@ namespace StgSharp.Script.Express } - public class ExpCompileException : Exception + public class ExpCompileException : ExpException { public ExpCompileException( Token pos, string message ) diff --git a/StgSharp.Script/Express/ExpSourceReader.cs b/StgSharp.Script/Express/ExpSourceReader.cs index a359ec7f..37fd9256 100644 --- a/StgSharp.Script/Express/ExpSourceReader.cs +++ b/StgSharp.Script/Express/ExpSourceReader.cs @@ -356,7 +356,7 @@ namespace StgSharp.Script.Express private static partial Regex GetNextWordTokenPattern(); [GeneratedRegex( - @"(?-?\s*?[0-9]+(?:\.[0-9]*)?E?(?:[+-]?[0-9]+))(?\s*?)(?\S|$)", + @"(?-?\s*?[0-9]+(?:\.[0-9]*)?E?(?:[+-]?[0-9]+)?)(?\s*?)(?\S|$)", RegexOptions.Singleline )] private static partial Regex GetNumberLiteralPattern(); diff --git a/StgSharp.Script/Express/ExpSyntaxAnalyzer.RepeatLoop.cs b/StgSharp.Script/Express/ExpSyntaxAnalyzer.RepeatLoop.cs index 6047f84a..92d454b4 100644 --- a/StgSharp.Script/Express/ExpSyntaxAnalyzer.RepeatLoop.cs +++ b/StgSharp.Script/Express/ExpSyntaxAnalyzer.RepeatLoop.cs @@ -56,6 +56,7 @@ namespace StgSharp.Script.Express { state = new RepeatLoopState( t ); _cache.CurrentDepthMark.StateCache = state; + state.CurrentState = t.Value; return true; } switch( state.CurrentState ) @@ -86,9 +87,19 @@ namespace StgSharp.Script.Express ExpNode root = _cache.PackAllStatements(); state.Body = root; _cache.DecreaseDepth(); - root = ExpRepeatNode.Create( - state.Position, state.IncrementVariable, state.Begin, state.End, - state.IncrementVariable, state.Body, state.UntilExpression, state.WhileExpression ); + if( ExpTypeSource.IsNullOrVoid( state.IncrementVariableType ) ) + { + root = ExpRepeatNode.Create( + state.Position, state.IncrementVariable, state.Begin, state.End, + state.IncrementVariable, state.Body, state.UntilExpression, + state.WhileExpression ); + } else + { + root = ExpRepeatNode.Create( + state.Position, state.IncrementVariable.OriginObject, state.Begin, state.End, + state.IncrementVariable, state.Body, state.UntilExpression, + state.WhileExpression ); + } _cache.StatementsInDepth.Push( root ); _tempVariableInLoops.Remove( state.IncrementVariable.CodeConvertTemplate ); return true; @@ -194,18 +205,29 @@ namespace StgSharp.Script.Express return true; case ExpKeyword.Assignment: state.CurrentState = ExpKeyword.Assignment; - _tempVariableInLoops.Add( - state.IncrementVariable.CodeConvertTemplate, state.IncrementVariable ); - return true; default: if( ExpTypeSource.IsNullOrVoid( state.IncrementVariableType ) ) { - throw new ExpInvalidTypeException( "Numerical", t.Value ); + if( ( _local.TryGetMember( t.Value, + out ExpNode? node ) && node is ExpElementInstance instance ) || _tempVariableInLoops.TryGetValue( + t.Value, out instance ) ) + { + state.IncrementVariable = ExpInstanceReferenceNode.MakeReferenceFrom( + t, instance ); + return true; + } else + { + throw new ExpInvalidSyntaxException( + $"Variable {t.Value} is not declared or initialized." ); + } } else { - state.IncrementVariable = state.IncrementVariableType - .CreateInstanceNode( t ); + ExpElementInstance variable = state.IncrementVariableType + .CreateInstanceNode( t ); + _tempVariableInLoops.Add( t.Value, variable ); + state.IncrementVariable = ExpInstanceReferenceNode.MakeReferenceFrom( + t, variable ); return true; } } @@ -240,7 +262,7 @@ namespace StgSharp.Script.Express WhileExpression = ExpNode.Empty; } - public ExpElementInstance IncrementVariable { get; set; } + public ExpInstanceReferenceNode IncrementVariable { get; set; } public ExpNode StepIncrement { get; set; } diff --git a/StgSharp.Script/Express/ExpSyntaxAnalyzer.TokenSpliter.cs b/StgSharp.Script/Express/ExpSyntaxAnalyzer.TokenSpliter.cs index 1bf28d40..6f67fdb4 100644 --- a/StgSharp.Script/Express/ExpSyntaxAnalyzer.TokenSpliter.cs +++ b/StgSharp.Script/Express/ExpSyntaxAnalyzer.TokenSpliter.cs @@ -235,8 +235,10 @@ namespace StgSharp.Script.Express { _cache.PushOperand( ExpInstanceReferenceNode.MakeReferenceFrom( t, instance ) ); return true; - } else if( _tempVariableInLoops.TryGetValue( t.Value, out instance ) ) { + } else if( _tempVariableInLoops.TryGetValue( t.Value, out instance! ) ) + { _cache.PushOperand( ExpInstanceReferenceNode.MakeReferenceFrom( t, instance ) ); + return true; } return false; } diff --git a/StgSharp.Script/Express/ExpSyntaxAnalyzer.cs b/StgSharp.Script/Express/ExpSyntaxAnalyzer.cs index c2e14002..954e9813 100644 --- a/StgSharp.Script/Express/ExpSyntaxAnalyzer.cs +++ b/StgSharp.Script/Express/ExpSyntaxAnalyzer.cs @@ -87,6 +87,9 @@ namespace StgSharp.Script.Express case ExpCompileStateCode.CaseBranch: AppendToken_CaseOf( expToken ); break; + case ExpCompileStateCode.RepeatLoop: + AppendToken_RepeatLoop( expToken ); + break; default: AppendToken_common( expToken ); break; diff --git a/StgSharp.Script/obj/x64/Debug/net8.0/StgSharp.Script.AssemblyInfo.cs b/StgSharp.Script/obj/x64/Debug/net8.0/StgSharp.Script.AssemblyInfo.cs index 3f57f3e0..f1226f44 100644 --- a/StgSharp.Script/obj/x64/Debug/net8.0/StgSharp.Script.AssemblyInfo.cs +++ b/StgSharp.Script/obj/x64/Debug/net8.0/StgSharp.Script.AssemblyInfo.cs @@ -14,7 +14,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("StgSharp.Script")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+1a1db3554b10ed4a707671695d5100eee621af75")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+d270b6b1f8220e14d01610bd55f11c0b4908af39")] [assembly: System.Reflection.AssemblyProductAttribute("StgSharp.Script")] [assembly: System.Reflection.AssemblyTitleAttribute("StgSharp.Script")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/StgSharp.Script/obj/x64/Debug/net8.0/StgSharp.Script.sourcelink.json b/StgSharp.Script/obj/x64/Debug/net8.0/StgSharp.Script.sourcelink.json index 37e8070f..fb815ce1 100644 --- a/StgSharp.Script/obj/x64/Debug/net8.0/StgSharp.Script.sourcelink.json +++ b/StgSharp.Script/obj/x64/Debug/net8.0/StgSharp.Script.sourcelink.json @@ -1 +1 @@ -{"documents":{"D:\\NitloadIndustry\\研究项目\\1-Flagship\\TH2020\\ProjectFile\\内核源代码\\*":"https://raw.githubusercontent.com/Nitload-NSI/CCD_Github/1a1db3554b10ed4a707671695d5100eee621af75/*"}} \ No newline at end of file +{"documents":{"D:\\NitloadIndustry\\研究项目\\1-Flagship\\TH2020\\ProjectFile\\内核源代码\\*":"https://raw.githubusercontent.com/Nitload-NSI/CCD_Github/d270b6b1f8220e14d01610bd55f11c0b4908af39/*"}} \ No newline at end of file diff --git a/StgSharpDebug/ExpLinearExpressionTest.cs b/StgSharpDebug/ExpLinearExpressionTest.cs index a6cbf33d..812b1fce 100644 --- a/StgSharpDebug/ExpLinearExpressionTest.cs +++ b/StgSharpDebug/ExpLinearExpressionTest.cs @@ -135,6 +135,10 @@ namespace StgSharp 1 : a := 1 + e ; OTHERWISE : a:=a; END_CASE + REPEAT a := 1 TO 10; + b := 10; + END_REPEAT + """; public static void ExpLinearExpressionTest() diff --git a/StgSharpDebug/Program.cs b/StgSharpDebug/Program.cs index fa6f062e..5bb33ee9 100644 --- a/StgSharpDebug/Program.cs +++ b/StgSharpDebug/Program.cs @@ -56,12 +56,14 @@ namespace StgSharp internal static unsafe void Main( string[] args ) { - try { + try + { StgSharp.Init(); ExpLinearExpressionTest(); return; } - catch( Exception ex ) { + catch( Exception ex ) + { Console.WriteLine( ex ); /* StgSharp.WriteLog($"{ex}", LogType.Error); @@ -71,7 +73,8 @@ namespace StgSharp StgSharp.Terminate( -1 ); /**/ } - finally { + finally + { StgSharp.Terminate( 0 ); } } diff --git a/StgSharpDebug/obj/x64/Debug/net8.0/StgSharpDebug.AssemblyInfo.cs b/StgSharpDebug/obj/x64/Debug/net8.0/StgSharpDebug.AssemblyInfo.cs index 524bb584..5eded2dc 100644 --- a/StgSharpDebug/obj/x64/Debug/net8.0/StgSharpDebug.AssemblyInfo.cs +++ b/StgSharpDebug/obj/x64/Debug/net8.0/StgSharpDebug.AssemblyInfo.cs @@ -14,7 +14,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("StgSharpDebug")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+17a226c20653a1c92f6a3b420d6388c31f6a8c1e")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+d270b6b1f8220e14d01610bd55f11c0b4908af39")] [assembly: System.Reflection.AssemblyProductAttribute("StgSharpDebug")] [assembly: System.Reflection.AssemblyTitleAttribute("StgSharpDebug")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/StgSharpDebug/obj/x64/Debug/net8.0/StgSharpDebug.sourcelink.json b/StgSharpDebug/obj/x64/Debug/net8.0/StgSharpDebug.sourcelink.json index 15b457c1..fb815ce1 100644 --- a/StgSharpDebug/obj/x64/Debug/net8.0/StgSharpDebug.sourcelink.json +++ b/StgSharpDebug/obj/x64/Debug/net8.0/StgSharpDebug.sourcelink.json @@ -1 +1 @@ -{"documents":{"D:\\NitloadIndustry\\研究项目\\1-Flagship\\TH2020\\ProjectFile\\内核源代码\\*":"https://raw.githubusercontent.com/Nitload-NSI/CCD_Github/17a226c20653a1c92f6a3b420d6388c31f6a8c1e/*"}} \ No newline at end of file +{"documents":{"D:\\NitloadIndustry\\研究项目\\1-Flagship\\TH2020\\ProjectFile\\内核源代码\\*":"https://raw.githubusercontent.com/Nitload-NSI/CCD_Github/d270b6b1f8220e14d01610bd55f11c0b4908af39/*"}} \ No newline at end of file