From 2cc21790afb358b7f15e23154ccd45656e44fccd Mon Sep 17 00:00:00 2001 From: Igor Kulaychuk Date: Mon, 1 Oct 2018 17:05:34 +0300 Subject: [PATCH] Make set variables evaluation Roslyn-based - input values changed to vsdbg-like - change SetValue test according to the new input --- ....codeanalysis.csharp.scripting.2.8.0.nupkg | Bin 0 -> 29619 bytes ....codeanalysis.scripting.common.2.8.0.nupkg | Bin 0 -> 104117 bytes packaging/netcoredbg.spec | 20 ++ src/debug/netcoredbg/CMakeLists.txt | 17 +- src/debug/netcoredbg/SymbolReader.cs | 114 ++++++ src/debug/netcoredbg/SymbolReader.csproj | 6 +- src/debug/netcoredbg/debugger.h | 4 +- src/debug/netcoredbg/manageddebugger.h | 16 +- src/debug/netcoredbg/miprotocol.cpp | 15 +- src/debug/netcoredbg/symbolreader.cpp | 46 ++- src/debug/netcoredbg/symbolreader.h | 3 + src/debug/netcoredbg/valuewrite.cpp | 339 +++--------------- src/debug/netcoredbg/valuewrite.h | 7 +- src/debug/netcoredbg/variables.cpp | 43 ++- src/debug/netcoredbg/vscodeprotocol.cpp | 25 +- tests/SetValuesTest/SetValuesTest.cs | 6 +- 16 files changed, 336 insertions(+), 325 deletions(-) create mode 100644 packaging/microsoft.codeanalysis.csharp.scripting.2.8.0.nupkg create mode 100644 packaging/microsoft.codeanalysis.scripting.common.2.8.0.nupkg diff --git a/packaging/microsoft.codeanalysis.csharp.scripting.2.8.0.nupkg b/packaging/microsoft.codeanalysis.csharp.scripting.2.8.0.nupkg new file mode 100644 index 0000000000000000000000000000000000000000..f35747519e099406246d338b4eacb478f40285b5 GIT binary patch literal 29619 zcmbq)V{9%=)NO6s=BaJlc2A9`wr$(CZQHipp4xVM-}~$4`*)KsnVC!`lSyXH%HFfH z_fnJr1w#V@0)hg94ak)}$png_00sg=2LS?t{cly@(bU?Bf&TxF$q7@ILySmbuOUA{ z^ZcnsJS~5(f)mv+cgWrY8dw{}iXanFGW+TuQ7 zqcjgn*^~w3CTcf3H~D&>xw!`?+Z|T>kYP7E8^S zBcL`WK2l=X;r2#Yj4@z2aARzkx;FPm4cC>S{GjpaF zu`@9hvNg2!aI$cs7f}HiI@;5#7&}_nJ6qVA)7!c@*_#?yC(l@JGa`-M26PYYt9XUC zlLtOqMnb|e#+Saho!OVyHbbj_`b5LVPFUTeQ}2B5+8V4Yl+E$p#;JRg}m z_NJnHOBjc!M*;BSNCZb%F)drdaWwF9#81x;gp^fYWHq4p|89t>a%=bz4L72Yw=|$l z1FB##S?Hv)E}>1BaTF#1@~XyGCij~U<3m6w5wVUJXR{Bj`{y=u?TdH}Xf^EW>u-N( zDk_emv6Xn{WW(p+)e3H%QSwHMf}PF67e`Yz*ZDY!b7)M?Fhl$(z!bu9zgD4wWCj$q zx((p0B+!SJGayhO%s7)ZZ1xvaE#|FC^rh6gRfYMI9!q|A??${G*|X$Onakm-H_z(E zb;lZY((O%?ZW(oXLSo(RTa=)&$-*3CThZsImh>?XyDlNy7aK9qaoX$3X_^!6=s%i4 z#cm7K2!$K8h0=rG?()e&w=IMEzkktEz%TNx;`o;|H|Lj>%9}nr!<5$%AQ_g0cf%)z z44c6;NHlk_LPZXBFe!FPLr6IVvPk9SW8d9FkF@musZ5t8StQIUL_(L0jg@hoN}@6+ zlTw-BQdewz5xSr(9(+hu#%p&kA=q^0WCv`>!Kzh_VwRQ160it>=HMU3)>>~8zz@N1 zv|(*}bOuuz;%fg@roq})G4^3JR(;c}m0a$u!*(xwKt@u%G&2$2M3R!e?1y_QFx(byA%`>2QwPDX-7$-LjXXM zQADf?rMfj%{j#!YWL2r=zgD%XWL~9ilVelUWT|7`qJH_d>%=TraP--$pSSn>%Nujj zbIX0}G3T}0bkjrT)$cqk1m$q>d4(;Um2kO){ry~q(wj)3LkkG z-nOJ}u$(gStl6+`m~yV3zF?e+Hq+9s^VZ53>7V@m8lKraDDajM_GWC zRb0C(_~spj6=U9yY~NtOBy%V#_R(s9+^mC1hzKDzz<<<{Tvvusu_i@RXE5f#@EeW; zcqTRm*&tSec36}QA2o6+cr3Vs9{!Fz5p@YkzsqU#u(|oepL9Fjej3JzWIhfF_l}NH zbGm^Q#4Jm2ZDkS5A0LQ3HUelljD;PAKF~l0wfzl-mU-J1)}%0f{a7>eKv@Z>_^XU~ z9_>%OLgoEYv~6sMF7+G=ykwMMtt2PPxQG_;7wP|%QY(9Q>))HhfRFwznXBm?X6Do!n@T?bQx|20B-!E+z(sbrhr!xh(_&Nl=Sx9JqeFgOa*H_?nV^NUV|ps6+3$);e7thMd&J53J^)WUh)vp zO4tb=d09rYl0;dYDW@=s7){)%G5pz$STO* zLZZ;9K;0!-qBKmHgh`Oz^r5(km&u?WM`(?~$3IWQFxc7i^NJe8da`xg+1cFL+uYgR z+}U5;*@4{IyDpqQjAh`EXT5sWd6<`ROb(1UDZsU?*mR>xmNH{-!$QZ=#3t>}IM7MY z=4;2TmyU?~fmk>`SGj~-hTlsLy7|hi<+%*Gt%e`M@p>lT{UUIUzytMS^Po`T*m{|g z*7u%Zq=Z7P1?#}8dy;kwXraAep(yKt{a_$GsOvHPyde4{_D}(&(Akpv&LEgZSa8OC z;RpGn>waenvEaPu988i*vc$QQ0AH(gLSwzbgY(3_9@r3b?tj`*p_Jp;9g#}Ztm#7{ z6x}ENFi30|snqShf%o2BD**Zi!x$mPrJBG)rJlzG#>p0S376}f2;+Gm04ghQWzknN&gZ|AK3sqE|CpYZ3QFTop80zx&EAL<({O?m<1de8t+sP3~o z8l)okr)WxXho3n?fsi1sYcVcw=nHx*(A?pC6xzAp?vA zG(XQbNrGB74U`08MUL+Qz+EuU-=0;n9aWkQu|HEtxEgzU>wFEav4{yj_9cLVP&=6h z5U}d#i`gRnIpD;fIm2~9BVjJu=92aQu1V-#aY;Iq6F@O!u(>>7++uPaQzwA8{6KAFUW28eqox=Wa}| zXKW7rZlR6UHo-qg$3Z9XS{9VYMhT&gr@1ySU%?+sE_r`-!skn@0N?`ja^W-~->1l` z7ktk|qU)M*hRuMNf{J(=+3AK z{aGL670^8z1F=43jp&HcT=JibDA#5dPY-8@Wzt1q6vv9Z^6e9@m?5)uFsLDAmSXga z?dy|_jvQ{khK)GJ23~hWf2Nt$F`>i`9g9hV5ljFsb9V?97JNp^J3I!7ZDIma^3@zA zJ|Y2f@HY7xiSIHLWs#&kVgRosF7y}fW&Ux^&qSJ02f_X&GVyj2_JKK$6}oL9S+>td z0A0Z#FT7r+!~=hL-J5_GEduiby5NEgc!a_SPXEI>YZ1ArSO)Y`*b9y&``7-6%U!d8 zYkc%QK%_vL;n{ykstFex-!?(#g08j5A2NCh7N^BcI04F%Pbq=ErMs))Cx?s&8iAnZfoD~&loTWGKJ#6Liq z-?*b%ed}t=i-UD+xuAByPaibeL7fXA)Ced=v5d86b4jlfWht^GDHny^&fNPLo0o1L zl%qpub_V(2tfZi~bRIu$sn42o$nSMkv3nz1uzae?>LlTZZ=Bj?ze~UYXLD>0SRUwpNNXoFJ`tNFw%D(_O3Z8;spL%og9Vf^AE1S zsxJx^*S{b*?0}ktuDHRuh*0l5?c?B?H}=hYk8tP(nC%X~yDhAfk)9kQHqxrvP_pQL zI5vDVSC*`Vz5w(6@~a^Xbtl*0mlDF@7ZLWi%>IYpcM@_4E*A3eEqq>kT@8XHdk!A> zaK*UB4oDfPoR~4BUlzm(8coT{M?{fGOd7cycpd6*S^aW&=Y3{D&^TGRka;{OQNaF2 zxxmFZbs*a(%Q}Pd6Y&$Xw(JG^LRG~%0QSRQ01|vr0UQ=+w+KUIgW($ySQeQ;WNktH zg3MCduB;bWzWI*V-d4%GzXrGs*fw=L%+tKT+6kftg-;CT1Ljas{3)XkZJ%V1)4!ni z&!3Rqo4Nw#^OoKmpxzsf6z-tF{wkJo?0#4(3C=8SV7;2s57fQT0)i*`3!)w+cYkhi z4M@C_OkrFFkm{41BKrBRGs1E-lz_`8mfyT`+5THaHvn&uK(WqH1}$n$@H=mk=Zt_q zhQou8$T^QmD53aHQPu($1QOmwVW|U%B6x$k&;fQ=;2_I$R`4T5hXJ)nck8@q2AXa$ukeCHf!j>?<1{|&7tiEIZ=OFA#KkLB<9FKG4dpFPC}Ts<;3 zI3r9BBv#bm8&)Pb7C)L10M*!i0CI>#0B%l-aT(IUoktPj6yGWyuSKK|R937D=tXcW zC>lVeNf7s-Bzx!1iX;ZS44N(a76t7aAQ(CL-;Joja!(C3Cr0Ws`*XltF$~^_FXZ(L zxZG1iGZGNZHG%*6Be|xLjDs+7ZBe{&8mQ+G5rE%C1MvC_vY~-)VatG~#jz0nqa_Rc zzN;lhf11w;@b=Lof}mes2~gX;z?~zE2i9+VKMaTfq@+j;UV4wW0imqO4>ZtWb}>;e zNq>-#a1qj7bZAhKK)?Nbq2U}JSUr~{U|lB^*c#YFMx>M-WF4b1P5fFYDiqHKrk?Z( zIfgrcKFYh?URt~*zdgl$*LeqYlu{D<6m8C>7EZi&&Nv)Rm`(d_=!kbnLaC7Q^JPI(*fR7WtH4bRov$V;u_U5yfzEe6 zLXuP!OM@6pa)zyIa)UZYN?jYy)b+b-4ZaGv_Ld?8>SbyQ*OeyAh~&QN11HO`P$jof&1dCSz2x6`!Q-)^G4uEOv z-(M{jE4B+I0v+3i&86r~l%^3gNbwK*dU)TG^*_@@uIYazHCAs@1@C!RPZ&4&Kp4S3 z-Vy$0ESP~>lmfTRv2I;yH|1V)I^XTnYkw;ib&w5>X9^}7vTkTu{q+?RzXjaam??=tI8hZ zH44Q@mzrB$Bj2?hQ)o72g+I9Cdx{ZxZn{M`)GHEj9UX^Y)gIo010^;|?IdsK-Zo#>xl@~ii zZ4G{y(&|yNBH=VUX>bi&xgzh%q~)%eI4QI`xS=5Jl3+r2oHaB}sKG!`vVU&Rl5c6; z$CBp2y2h}=tTGLThfIcJO|zm}QC3GFZt~PgHEPp|;SS5GnZU>vV7p>fKc%7$7}c5X zv8it1C&sSU+l6gegMw*R2S|pZgK!QS;cIu9c~uUXwI#3AD_gTebyR@7+7YfsLaP5Y zEbT~t!h&ik<<`zH!y+N7e`eZ@-j@t05kG+m@?yEece**{^IZMVV+69iK6g;mMq+cZGhy3eI?n&y8|}_!{Tsy#K=2l zuV4^=jU)#!uX9|zN=Wcn8gl0sI=-PYgcjX#;b_+js-TFv<_aPZZ&k8uS*IOw<&px2 zvJaU7B$b_{S=JmouF?Kbdiqt|6%u=J;MMgR&R3n;I?7esI3||uN}d3&OU4UvLC&i< zQZ3{}=cix>T#nq2Cj$?Rz&F{b-KlPe)gYD-Wdq%RSPJy^1v4DbCJJd?IqiRJkKia! z9htn&L;F?Fa<*8eCgsN2*TWg+<*Hk!|F(H0-j=qcl%`A5GFHk=A?5BXB9O5XAnjTZ z>sX0bxMOg1DEIU;C$o|I;3L>J@-Qi;uIe7nr@BMn&n9|~7J3!F(tF-ylwpuAg&La} zS}ab0bZM<%rXAuszKM*g?NpHM-4{d>;|;2DP~i8c2_$a%N^5G5B#u_#$zlMXOCEng#VvH)x0AGGU@j7|{<*X~IVhH$@ErNRlb7 zYrz^lm?X&=O<{n{a5qzkv`p$~ROtX-g0KonxF8x-YG{tS-MB=Gholk6&q6R!ogJ zc)_=6I|y3ofF??Aa2^h&FD8b(SGl*LL`r7YJ?O278LYtk+#KFWK^?2slC3}?gu9V8 za`*1H;)h00xM^McKL(kV45%riR4~`?MEEnC$=Shlm~lyp2pJ;Ti>rh#UmIsj#bW2| z*ynbi>o(PuN}JNHpXnCBQ?)@9;+G^gwOI7HtzFEYHU}|V<65Ftve_DnTF4mT1Imu+ zja%MKSOnEU6)+Q__dV2Wz{hFI{X{*7TL&OoHDRa1!-P^H5Dy%eL_8Al*n#bNpY4f1 z{}xft0BAT4=yId%9Q5_EEZtWERyKQroalU8JDYT3#sRBYco2@>(+yZmVbl4;kXc?J zhGDpL2w7em&T40wi@G)<6pcXs=C#P;+Q)hwEHjKY067A^nr(6RwGdVFAQkFtsu{*V zT5G^9FRgEJ4^iWm5NyN~UVdhfx!#XNY7&K~g{P5GUdV#AELNcyh(9pF@se@0(H|Lvs-G7q(mvPWjsEq6q(5kB$WOWPCB|S%ck$2~J+~ znL*Aws=8w8+?^d4KBp{(QR`nqQjBnpMQg^SD3V34SyCV<4hu>KjM6KkL?nWh zaA!#rcUuV*Hi#_*(iqFR$tr^(56-Q#fD%C_dJ$bj79bA}uS!=3l5-(gCN4Ql959Q( zdIkV!U&sRM7)V~org5_f(dkeX70;dtn%iQbNQOxjYb!%^5y021_6uNRT3+IxT@jwq zIJEgx1bQLP|hPJy+9{?&kX-n6C6VTy*s#+OA_Fd34ybf*F&JMl5oshiQrpFS$Pvfvn3a9Lh=@(*b$XdLAl27tuTrreSHR_|fl>87 zdrYysohd9Ocd%o7Q@Z~N+xo5qzh5XDvu?qA@>~3kshg{0Ft;czErY53Yxyc2wU0nZ z&@EuzeOv>I*mXpXhV=~blepV!Pp)y2o)F@ZH*0ry!HU+%(UO091of#dej!&kK-IUES~8WyCi=Z zOE?`rxO;k(KrdgXNqlOrZ=DGXsigqIOFQN}Vk^kW`I%LognyD2#i4VOh}YK^h(H^F)%DN@ACpy16h~&xqIDZ8|-kO=}N)i7~U2R zK@bkXKb{qJXakQpn#{nmU3fbhYY`4E4%s~rHHb`j@*9pEh0+)pe{-#p?l!{Be(}lS_6qtftd?;OQmL&h9IAI>H@avpA@~B#{EbVCMk<~GU`Mvy79!8>e+s*X1Jtc zTJ=i!2`PwjU>;>%YelO>Es;Q>D&;0!ptHGi<%2mtM$KBnK zp6E%_9|&7bt2MhoUjeS_9?iBRDpV$|KAlWUB`L_Ebq3qUhyk zNzGEw(lx?GGF0-a<*ZUt6SPx+C{)#nk$J||{6+G{OrsbIt(58&iX(gBF+t)pfxnI< zMQda@tkPV%umS^rExrXotEJ{hm z%IK6BRY{3a&l4A9F$AqE@~EP{?ehPAV_pPMubGgpkzERR#sE$LxxdZqML&Bczm!A2 z%)x$d`us8P93Q{3Ph%oaV_!Qw;lHkf0!z>;`KT0MJM#7d_HS)0KLxYp!LwM;X^+UU z-gZ2`f9$^IYaP!S~REV)YptP!62F6Z_pb(OB}T#C&)hh2!fHzjITF`IR|5n6OWm_3AX@g2Vn;`ruF8be4WhH z3;B`;=+K=;_@cTcs^}u+kty0XMn;XZ1_muq4)3KkKIYUA@N`ws`Zq z0j?rL?1k-v8Spy^+w2@co(~`IYoCK7wAj&^G2QlDmu|+}Gx$(i#}x>)r3p%Ev(CR% z5-X6UPn&}1y!jYIA9|6iZHu9Oa%{elKoOl&xT2INoVdVuU8V3U2%pxZ9a6Br1Jx73 z%^1;})Rw@qsh%!&Nq;U;6pZpi81VW?J}x;mnJ}`~AHVzbW`2MZPc>~wZX-eOAgpM9 zMx8RbFR8B3eF-Cc?E%lg|3wM{ZBtS|@!Y15TF4x)k|>t`5*OFe@-9;!KC#y*`z?`E zKUrALglBdwUXYK({aq*2{V$i8wn0~`ZW%QINfki~`AFDs9+Sco?`X8V*~*6i82gCv z%*zpe)Kw@k8Bv$nfPLYuBOI?U@dPz^Ubj%|QqGtFG_BRV{}w23?Ny*d=xx0mYkOJr zJevV4m{F%fvx6u{jtH@7(TX&vQB^cqMpTcY{tcm>yr73{nKEr}?R#5x zSX)iy4A1NJM9!MBlh}HB>k-lEP}f%wC}|iGXZi1S0#iKDiD?|h)^re&TO9NaxuQ7| z$Gr81)$C3MWZ<@C7-Mf!+H0wY^UTHBqG1S^u@KC8J0B z)ne;>^w0D!zry1^KI;3m$zq(0?chKZ3vbT8_G8_{i{ldkga8DJ7KjJzD;+lM#K$1ThgaVcfLD!JAMIhS6;FBq2E`-xl;q1Qkw#0fX?n|Lx@S$ZltPch~FGX%~bN^Yy z+kv)JTf#=-#+5}S60WoH0SPW?us_%p;eDh97%(f=g}QYR%kE!!z6t$6AMUiOAo4=Z zn)^n$>t{t_}GGA-z#mD}D}laujrKrn=b4BghvJnQtw@ zt^Q4tF|2o{6Br!O(zphY*@7RUj}Twa8DKhC!Aua5!`D*rxmQbC^mwi5gVeq#{dV|X&fW!0A4-V0Yz zyX3t0C7{nPDoa@c*kVelLIjS+Fwy0%#2fJFm3Sr@ZGJWG9liFt8i^i5!o1_`;NC`SH{0$+CzGNKBwhT; z4k3W%W;DN&(M$f6{10*(LECNut(_;Q-!@*^^@EH`Tb1;0O4 zRr;ApA=tHzvgP|+gs;#-Ca>WhtKT^bG{*?XjrOOhpp~84WYYP zH+kwA?^@GKc>ibZePldEVR0A{bXn+Z7ky3Achl7ha6hlI>Ga`iT9}e*+Q`<3nTl&| z>>kz2Zp*s&sRG!%Jy08o^xg7L{{20u*Z+Kp+(2?YHd)wQk3eT?_`YTPaE?FO4IPTx zvM9yHjis5mSg^h1`SuEXlJXNdy~FZfUX$!9PE58x$$t*_ zXIuC8$gPTUuDj2!*IvDep{sk%!(*d>J%sY6_$u%Gjn~(@x&t6{zLO%``EgK#jfpoy z=|b@I!n`nD>;%t`Y(piJw`cl_fy-hI10NyXqalVaEc(GBN0f@Zuni$w&XL7)N8O8L zPoU6$z=*6VGzfnT@p{`+W~rTZy*KTl<3#ea?xm3Y^x+^2f&uAxl)g@0lb#AAFbe4w ztANDOr6He7k_VU&ov(lGg7aaqz?B^%6|Hul%h(Lhlfo5(l4j+brs+A=}O z*TL$aQbcvY;Pr?J3tuHmRhPUhL(A6G*67$}4TVR>Yk5&y@<pUD^Ls3^GGO75o2DsI?%9iUW<|m%0 z(p)>Mb#@+M6<)T-nAxs%$Bo(E$|H_^3{E8?XR*h8S3rw?7Y_|PKG*L%9tFqm{Px!3 z7evF_;3++_O>wN4DJ{YKKDJl!Y5zD$hs~AtLivq`LJYQ098W8U{o+|)-KHwq9f@aFD&9?az+ltNLhh{F9IKJjLx97UfE)v(FHO-mpZ5Q&OlH@(^6i*$>e*?=-l)b-4sf%wqLrX*i>@*gCkB{1My?O|D?0LOj-2G$T ziZU#8#**hzGD=?H_m0)jb`KRfB%`m^j!uBdQ0G^^Pi_y1XZOeBO5&QCerI-k8(m%3 zzW)9toUg~lr=~B(IwF-kn?|?Q`9+3sSe1ak;pdtrJLaQq6_Rk>#lR8P;nyKBFHg!= zReD8h(KPP_zPs=0>YbW@M?5=w{#mp?)n`q8H=CI(mZKc77rF|HDb7Za?MuzextRDQ zCZcv6FST(CPrVwK?GgCy=!!aL?FLQqz=zt8*+JQX6bY*pZYgK?JSzg<10HBmYgddF z%l}4qshTWI(Fx^8&(4x?{~GH9DDUm8^QClf~P%TSGr zkNF55qlb>4jZ$FuI}GbV*$aDVLnqq|g(RghT)XUSz`k&pVd#j(3S9C1-!y=-j5Rg; z{s=h9C-~rqc7WE!ezftD8;7^Y|f_!EKt?p4xDP zV|Hdwyig&oiq5Jwx+7cEww{A*~0a@>2ncwlmZaTOg zG;?-JUW(sx^I~#wWVB+&jG%F@r?cJaV&_YZ=NtQ|y=<(=)D+`dV-Hq7yP=SMG-8P7 zpKp`w(zQWitL)uh-yw$7yycr+2Zt}npVKhllEi(US=GA6vUg zOdgU(gy3E6Hv8=(Gd^a@ED?G-Tn_L3hObBtN?LA*uPg-iXNGG5TFtyQm+{#Yp{BS# zWOrA+37N@?K1w;xmm1^2L5)}VGakd&*xRpCxxYxSOQBi%tzVW$GNTeQ!X3*GC*-XR zOWUd@RMYNToozU2h6C z7s&+MyXFS*XJDPq#YFzZhWWU-u2pk@6%~b*`1BJ#46S|k#$^hOHE1ZIHwIO}Y(RK< zLM*=Y@&4xvTYFb63O3(~b6vM1Xb-8pt@3#LlW-;_hz%`eMAF|f19in%YOg-N<>ZIF z!z$$N=tl}7(r)x_K8|z}l|pczQ87|;x*Z3?&Xud$>qr8W)FCybFL&{@@$@$K`!g>6n_dmmQfkNQ&aGjH8}%x~^hh z$;Oz+HsjnvXiLx$U5{S@ zyc7x!mRj_7xh)GvQw(!|4ZZ8Wmn{19|K9Sn1UxRywzc-uxn)yld3YI3bd=kmetbC& zpWd9asOjSpWd8z)8M^)y&<=83FVzMv%`6StKJ_h}J1D;2@JtLUUw*sP;cm6~IbTnn zQwj)-cdggWO^Ka$#$2=$9e<9f31!HtDRy$S;~|uk!zhC)+;0c`SCLRpViBqG+OH+n za{B4c%>p!=t)@yl+)55rNR+ixs(;RKqWGN6S+vI5+xOeE%7K}e*5l{r{;_*k=c26i zdCNYt!GMpu%9{^8LugNLcbEGPA4tTIlmUibq)M$CEnTZj4avwDq>{qwQn%UR5#dC7 zr288OhpR7s#Z7Ck>{;?hn|Xo$&tkSEErV%IWAm4@mZ$GrD~ze9a(1MYY`BbS|2cDJ zgkwzWD4W?mga7dHR*UH|^Q(SVlU*e^i-~a?8P6 z4n6wo1+%-|xmti5;@)xtr|bT8{8y^3SW>e1K@(|gc;K$P*3^^!Sn>NFwdZw8pz5B= zMpjY?q077NNo5jysa;g%>*9Cpk9%L$<6Z2D*rcx*w%eymPPsSvVlADAQ+<=cP8v&- z+0|xK^<6sqI9?OO*TL|l&7KvZ`IRO1Lbs?TydAfP9O6(h-cIKrC26K}`_5W}<>x>8 zjU1=AcZPp%wAgNa?v&>8o9j9fUc5~D8NctHueY(5bn4suTS>nsV|CCgYvSyBUOu}A zFB(Tnt@M4bHHM!kmT9uAPX7+Z@~(K()!&rQgd^9gv|7!(-a$qG9p>3`D4cB}WLBsD z$XuMIvEW>*r68m$u72)apFD2OST^nq&wS}OAEABSY1i(J_?(`)IwBl7Yd-BBmZrw} zYP+8G9xgF>U~2ICEVoq?KQ7$#j6jBY`~6;ACv3g;{klGtgyn5xY0qn5W$C0)eEZ1! zEQ`EG7AJ)fUTkxj4zvXg=E8fvDW`kdKJxQjwRM8wX*L;e_d2*Gjl!KRzuk04-q@WK zuuc3Jz8=wJUuB@24 z7WjUf#I3aH9C++I-+KSZA$^Q2Q}AII<+$nU+40%6c2IhB8oC*JiW29b`?Nmrx^4Ai zwVlo;UXq}v;qf&*7z!VoC^O&LYE$JkKTN!~3-cSlX7+s?odlmrG{r5d!}9gDw;R*+ z`33wcIm+!F+#={q|;JE$aK!uZF@c4JruQ#M)&y?>@Y68hP-sl1aCH3 zIg!w9-RcVN>8nAdPFsKaUvocf+TFT+?hkNXYF;Z&g`>|hq(-S*w0?KrMlGq~R)>+^ z*yIX|ssHQ(lrKSMJ_5`U-=1?hF4S~*4iKG=e7(QBrRi;4{LHfLweS8mxRv-6ZY0Y{!%`{%#^aMVBx+m^qUO4_P`5lGrmA3fNn6Foi zjJ>|}n((frBjQKs73gmvJ>bt~#T+t~_jZ*UCRK=p% z@@2ivXatqzH1(xYhk&2L{TB?XIT2#kWNtqtDUD(76ON88M^(-Fxk-<~%99isCZb7Q zh`I!R($}Va>36*S9&@+2&-J{>?A23agq6U37zEodMH*MowE6tjd>^R0H zcnt(Wn7`0{Q$24MVJsIQTzne)(3{WLe6I{|EOZNF-hEmYo z_OctcJoguW&Wc1SID7u4xpco0(qdZ6aXtR9ij5ZHcCJ5)V5l~4cs~0M#py(Q9lH-N zVy$cvx{j$$fA6=*{K!R0%n9u5lP5jOJ0|coUOyZQki%g=ExL{^uJo8cnZ~sNbnuDf z4{EKrdj5TNWT}|-xuO4k(P@uMr4{HPstUT;r`ZzlcDtp-)a%;(&e31f$Eo*T##O=O zaJP^gP0-iyVf6d{j9ZKT>+5m7GSuxR!_I%PB^&s;|JiVt#Gm zX_rAiOt$c*No4Jsm&>JpVFoqV*{AsDya9c^i)dIK1LyK}}(CnDv#izZT>MiAO znO`3O8i2|!B;fkmJf0t~lM=|oWjFG7_vg$&_E6Vmu!6RdP`iTX&%ViRB1Z4ZNs3$S z_5|aOpK}}of1|<88G72vV8%$V*V69X^v09_n(c6Xiq!~DXhvQvLZ`LpmyT6t3um9( z)x|I|>{QjD(b*#p|9ka$;_UK#uTR{buNNR&e>C9uvy0!y^d)ei2Sfa?7W)127|Nc* zlh9b}GREqtX{n-vuF?C!n zig*5D*FbN`S{dyZV6_`EhC_|VjcHaPjkAqucIG!l{DpR$GDekxqVfnuSqcX~DkP=%IV1mX~Z z2OSwP5bsBr@|yjp9O;fFWYh-Sor4aVZ?Vh6YApl~X2-c(!gxgLR~@fe#Tj#(OFhrZtyO8y$E^2Tor0#^lYPi-cOn@7+mlZ@_p|-U{SQk~y0l7QjMtS4cu2;XgN>w)oQ9^_J5%SIj)wu6VXgf~B0MEdy_t(a@_$+*J&Cd|&dd zw~vfNyD;xx53M)kkz~Tw8(U|S86vMVjGaL*2EI?7vXdQtRn>)8!?PV?5xWyVx23zV zt<25WhDs`ORJ~8})IFzHmW%BwZr_*IL%omDg|?x+!cn=Kr{amkv9P%o-T3!|c)p9? z$HGK|!3tCV7d6f}mRSbuQ{vH%SX|w`Gt+D*Z1dy9hF{bm@TlwFQlTjJula_r(u1*D zCwBPT)z9&uI6Y10yP4(%2aeF*hozOkeN^1O+urh(^8oT5%88H)mUf@k*6iipm7RC& zozK__l^F*3%}4i(FVr}Xu(8~1o~uu~K3-J?FRzo4Iy>u4qn^D!3CW{51hF3ss|(E* z4=u;B`RB|kfl;edwkcy5H+Gwk`-jPUH*H^0LilJtzI8Oot|4+s^ap;Nwfs&E(!LzJsr`B7q#oZr7XAN2R#Q z{LqxJjwR{S3ixwy>b&cZi|0>rxvDPNZgS0KKR{L<(uctR(;_Cc=gR71gRsK?r$Zd3 z_+LxA+-&VRy`6b{RWOQ-mR+sZErbc!AG2X|qGwbxv<31f4ba)fW4 ze?Mcc$%=tfX*DAB&q1Z4zfDgbqs>RrFQ8$pu_oi{f&E2I2&s%p(uM@75?s z>rMWszc<+>kr@UV%eOH9X!lCf? z@y8PY!f~Z?>Ror>^$>cuU9s;Wn?w%1phmuJ2gOvNevUpY4Z0G|Nk-%d!JV|Y6Xy$Z zL@cKobhR^b^%{7EXzBDtW>c7u6z%if+2zy9oJzisv9fM)3S6&~Z0{C`D4m((efR#y zG!F5*I=YWQYKpaSIL$hJZbvf#dub<>4Dukr-(;=LncZNitxPnD%sj5JIA`EJFhD7z z6iyek9IM(2rv5vZ@SY9}{cJqpi*bA_6D|*yjeL+30~zF(8(NsO{5&t39VM{ZVFNpw z*;oxku{r4O*Bxr|(5uS+R0wy*x|F>AxAt-IHih&;@hX(LuE)uL-9y)wQiN{~h2r`) z11U_5GI=>+7GBa?{C@Ia?f_DPauyv+YPXK&3EucQgT~_g2?BsxVFq!!Kxe*7qJ8SY zehR(x5dO(3(o3kOwH!1(u9}a6GtXJO{oTZAiCeP?c;*(7#ns<@dwBX+4G;6$xk{EK z(v;||;xZkf(7LAFap-$sl#l5zIT_sFDL>)lGGel%3Li4UdwrculQW=ratv*6QGEnn zi#f?SE@PiBI*8V!B8|QI4p&+gSq%6TOK2j??8-J0Sy`0l2O<@b`?pK<5u?Qc=(-#f zIw?MEP;iu;q>AIpVnYsGtpWPmxd^t}Vw1l-SqjZzOLN@CJStJ+SDcs(sf5^~-kJH1 z&I)#C)pi~cCPTt3Yp8Ei4!>1r=yJTeUo#QB*KMEKz>d;;OSYlfNwHwZh&JOXqu?~As=V8Jihgo#E@w zw)M>Q&v#u$eR{!OfgRcO;X*z+lGXOCo}WlZ+jakHMIh`G{kC&7ENu6vy$KV$@-(b@ znvS38$T^HCtpyr9`#)b-DqsZENV6cKiAM@gn&3oBjPgT|Bw4C_)OkOM+Y9UNFn4Zq`5o zH(Eez_7z+(%Y(Gy2a#>)cO(8Mqqy5aV#vfvaqyZZIA*Zp58DIVcP}dT7jy@o2pd#* z5Av^4mOwBi&F!4u*U~}YEUA^BgYTzX+t^n2I zD7%X6L`9ZR_C2XkAw)!?5LwGo_ASN#8Ku(uec$){yWZ>nd#~TPTr=l6>vPVzKlgoq z&Uwz`RbeQZ4b>-bBv`|__mKg^`jC7#PV_ttehZG*V^jzmAlNr+-U2hhiH5kW5jm1q zP%N=LKJvJH9e>J}>@MUb@kcyT$ViBnA|XKZhA16x0Z$&!pU#uPlavFpIDDev2!cq> z7Jmv7jbj(0_4pPp@q{Dd8S@nLwE%9JX1iOe-3#tzrd~`}p4-KtB$ZkNLX=iVFDG4- zj!RXcZ6oJ$@~@@ zMsmlmXB))#s0C;<58u2!p&4R9+k-b%D6Jl3HlrF6MBBDwt~g+RZ;bd(?ztxY*5x2c z+P2A<)6BzGB{wMIMS7P~85@aHg}vmmPq&KU6e|_qD?in`yd}XO=b|R#8Seb`!sFN? z|0-C8I@|{>65l2W?^Od>rSw zY3S4hdc-g!=~c;xfY(E0ctp8Lp^Ou2fM0or7alaF~x0yhgzPn+)fn|ba$ zmW(k$F8XOxXb+t0CDD#jq;b+?IpgJ9_zew+7VZ>5z#mrcP0 zs0-O>6*OAo4VJ4<2Zi2{)aR7tTd*6pocz2Lp-Hz=<6E9GrTB{MRct?|6O*ocU*AR;U5qe zb{?W>4d=(}&Rs^5$GqS;avMR;)1w$fk#@=gXQwA@`noe}SUHraS0rLl@{82~o8>|W z^RB#`ntv|pOZ)mZj8l%j(ZANIF=p3xv1x2*ISOWVY`akHzT0vtS>%b^Fp`*jqL{uC zVZkW049}EH07U(^JY(Pen~0_M?q_D=r<6AeCg+2$hRP4O=bk2M&bH)j2+P}yvPE%3 zv)NFVGhfI8=I9?uzcF9v`h2_9S?WFE4lW-JnX>L1Ib2O<66c_yZvrlzY)rQTa(W*1 zW?WeQrmmN_L2L4P_U+zM*K$_sx7AZ09$wNzWWNzv>woRs!ll`xc57Fk6{pF= z;FDgG^Am~>w3k@9&tu@Tv66R&{JBkpNWHpzhvcwjWeCqynwj&A3#E>|`7p`0NW@^w z?&W7|*Jb7j6oMX%&*T(eN81(8b-xRqe>!-_M1H%w-$jJtk+=Par7|W>KvM<^4G1f5dXdxl-G@D9^n=P|ZLFDxF zPdMV#W5q4-WTpfXek^^w!;!>8PB%Ng%M;f7G;tRvT`|eDg8aK=R#ak@pfLhSw$^0HqW$3s>n@ zwo~5RxO@)?8Z|8&Wl3M!OT$C^3}`ph?G5dG-9`6yxC!X3o+T)YU9KAl+}10zX!J_@ zAh%wHM?sm`udL!t8`Hzt7*bwho1-iIp$Z)cW%aeX2Z?-D>ZhR*!nG zIEG3obWjdsy9mq*F|Pnr1yL` z6xV#mzAoyqUKTe={`9`6eUP??`$=X)C)8moZ=CH|#DvIq zy40$>sjaf+HSM{{mm68lU6WK5j&vwn#4WT=vKWw9`oNo7fI#!KBaJ@~S$|WU!k)%nZ`fJ!r+j}=J_1xNW=do3! zLuDHrWm5k5o41KQNN5wUW^)WYKtvBb{e~L+KCA5Ejz5BG z}6#7y$WO5caYrZr-2Tw97A6#l3bc$gJuNE9(PTsRGY80#$ zPa}yGf?g%F!1hjC4J?-54&Ku{{vzW2?!A{c zrWNjGfp>fOU=?hCr9a_ZA4uiBsVvr&z z4{tjmPj3%TJ8z5=7-3_B6axTp8GBnmOkCPl3Mp+XgA%i`u@jZHmyxg+6ZS;A*`hpM zje6sT0LmcHAxEa(F_CpW8FJh7{ppv5Mdvg0mF_gkZr}@2$*suZ?KbKPxAZ| zr)QACP>}G<@ z*^n{Lgwl+bv(GX&cKGf3=q$`VUe-;qXXL)THTkiV&}&KBWSMdjc_W{wpab5~*Nc** zw2{A+r031Z-?lZ1wR+b z()kqf;kHlo4BL@rp`CU9p*LgnOJ#*r+b0vQRnWzq^x}*}jDL&1v$R8%AtgA5V2&Q5 zC>bgYWh)o@&=$bMB^Rp6td zD~s@F$mnn?bCvpl!!k^;c*K<40bgKIWfy0j|3&TBD<4XaXJ6;`y1|{?Yj)RGzQuOU z=lR}taYgHk3adf?UHZcl7YC>G=B-oHLiiV=xo~i>|K#Ar6-GNbxFaz>-gd&CQfMHI zD+-^8KT0ENlMF%t%?{)8123VW5Ez02Aj2oJj?#eG!Em7vJRHFGS3*d(DXy`Joj2Oa z!(A3ZOe`vlkQ9~{2ZRyA2mm}}NLXALydbs4XBEKT+s42|SNu3JadsFvKM)411HzzL*)S*s3Z*3d@P3;9joNPf zwDnh}B|rw-t{*Li;DPP3Ly!PO_%LH!d}^q%5rP(=#s-L~NmZO2oRmQ+gloE^5Jv%e z>}3*aN$ZWPl_B zfdIaL&d`&IfuWzl|E*?(K{$Tz0B~SnVGs%&APhnb4TC^%O37)vr<6l1Dle_pS#Nt$ z<(G{dOSxRM*1Zmw;We`+-3l2hq)in?%GXx%Mnp%CWD%2w)1Qw|D2e_MU}S-a;NPG~ z7nStw8hs~!H+Ru_hkeBmIhF+eqBeK~+AD{q zOzB%LGLu)-Bo&xcH&ms4D!Q{&*LqhWmG0$U&b4_$D+WJ3C=7xFxs3vl0693QEEEvP z9xg68k)i+!Y#4mzW)Bw+fPr5C3-$szE*&n7>U?hbT2f~iLdYQI&K>s5RkwBufDIeX ziOT@ch5U7b!}Aav1_(|r`J=IkPfL^D=<~KIO`G2KZ$zg~`q-3RnqPVScGRRgtE-!a zx1KD`+Jfqo+0?7!;hL&uX%bG1ch%=io&^+By>SSQ7z-wnPno%YOc361yqfpQrqv$D zL|O#ftli?J_hU~SG^;J=tBCmLkA3oQyr3YkT6avs&FTu|p61ys2;R-&vko8R!EMy; zPHSv-;CDPS7V?2q%)W`5jK+O6m<>hA`X!c$+s!pTzYYnh?7Mv|hteyvbfS5?`MN=! z00CjQ@Qi-doiD_yBDqT|Ko}kXgyAy$5M5j%1}3Z55AA)7lxsaw^$CBUxg`IqqKgni z0HUG@QLONSqAM!>TM+R6PZ0zGh=7v?L=fJe2x6q6BntlxMz9A4!i_-e1!pXmr zZK%)#VG${qX&UXdU)kM_LWQN3O%JFK!EJbgEFSai^9&NmZJxGw%nlJevH?JNCK zM+ff}EoDUIzu_(+58#!(INR&+>e&t-Pur_N&XlP{&T9#NVcR(ooc2_w#q=?iyvH7L zIX!)9xI*I)eMPljDChR0{EcpLLoT+Am3QnXW_;r1&Hwp1@J-DKmdaQ0SCV!5L`FF z1>iae1CS^NM-0YORz$=Dh4wt85dh_%si09(KT@HPScQQ;lu+bgxPJ_^rV3VDC@Tr0 zyfHv%D7HatxaR?XKsH-CTQW-gpeS!w@xNP+>p$id`}=wIuuXvDY5;10G(Is_n@4?f z#ew1i`~dI4JwhRL%-DvZ!LImIH;O3h8)5tNM^4ypn0cn9K9HaIcK)0f?6LK>(1x84 zx!L~+GeH2@$IKH8WM{alS2=oV+XaKT`F!uPSTYOAGPW!N$ia&w*58_sQ?!)Fd|Tun zgBwd#jBoTN`A`_txaY^6nK%bN2TPgvS-~p~MNX|C zzMds}w*i57Uq_&h6EZSXhu+kCmQ0ENl_2y>%+Pk2=BAB%j?ovY6oyFQq{KN#R~6AJ z`j7>&N zP5bjqO1QFzx2K0U5(65R2l23f68~=@^i_~4q>K37>0_FHfjhysx!J7wV2@Il_y{L> z8tdxL@Aah@*cdnAq>8?SmSwEHjL?TuX=Ms7cPeM}6CUk(d5)oz{Dx4SA{CmwP(Es!751jOMoRz|7h$Z@=9TJGtRuQzdA z6xnugY!-N_elHT?{?tFr;3#63E?YULn`d_;$}s2Qg?ia`Th^+~l34o9Snrr7rJL24 z25LAhpHO>H~huD6b3X5wYna!A9G8fK0; zvd_mKJn8T&i7d9qCrQR?`803G1bAvaR82>+VBT_|EAi| zJ;((>qfQ>&_`gycSR>)5>cCnEKMaH)8iW*kQ~O#E3gG;K1N+eFXM9qAkCXL1`@1OSrb#`5qJ#xE8QuT_|94 zVoo|_1m6vF&U0{O=|sKSk}6A+YSY}S8_4+!+v22YF&j0n8Q*oSWGmt3JR~gI`b=dF z;X09FJC#M^I?_&p$6!3;QJKMn8fen>m6N&iR*uxx%0TJ!x|wSFi75**=3C>DVsDoW z1Yg_Bd^(ZK_wM=75T-rbjLmeOJtmuD{@6v%qtr^tT^L!+XXxk)`QAR3?FR#EOOC}- zj%oR349}?ZPhqaYe6*8=%p9jJiGY<3+Jw<0H;&}zr7KrnZ1Nz&Xxo4=+GfyS4WaqV zS$o)r%?^Vg0fwLMBM}Ti@-sjH0paMtu_VGnQ0!x#xELTRCMqK;c?Mv`C;8!a5>Y}a z_xQMMEZ8t`jh ze(nZBqXFMM%zwj>g;M@2g$25&xM2_+Vou%2ibov;@k@md9uY4ru_PoVAnSzdI+XYk&NgrqLI_Fw^iL9w+ zzf;2MSaOlNTR_XtYRqzN*&``hBryIp;isM4?2Ir-H&3j0g#}SNZ@3U#T`W6{LIbp|>Oo2==ZAfz$k<}bUQNvoBY!wW z#n{U72d)C44Tl>|572&ZG&x9kIbq8d#1cxvh+oY;h=3n%t}JMCgZ2#xHG&t#2M1kG zY4}0P??r%3RP*qLBYiNA9^OvpLB7ccZ3p*ocMSkLT@srYMlEuX1#ax_}LB>b&FFIN+>|=b$cu@{ySnDM=_p3oxbZ`TeUQa#Kxk={9u7J;GZ^)lkt0q4d z{BVO_AP`6DypovzxY)!hC1daLl?| zBkX|JOOhTdsUKUjMKJ3=$uk-HS%6;Il_ATEYFdeuXHO9O`JoxW4~K{p;bU= z`9D%#hdD8P!0o_dfso=N0jnI#?6ZJ5U;ZOw4IseB6Cj5{8F6Xi zr(ZEfmBhxmH1~u!_iHc+1|Ag#xal~5*gLKs4j#hbJas~Yl7gjIMSRiw*RUo1GBNM@ zeR0xI&oZKV{dA5%)R&+)jo|1XlDKc-Xl-p(z-9y;0;f{^P+jh)wl9#AjkMQG)O+fo zzHohU4Zo_MDTi9UvF$6Gnpo-gsN_atPwTlb}b)oUPnzn=J?BeU8VQapy&iryeRb)zXhryp=|p@}V@^@iahBSC>AArQ3t2s9 zh4{zzuBf8fw|R7Hp}nazu5>>i0^*ockluoO)&fey!;Mh^M9&Pc!6WzQI_prDwMxL*F7}PG&k1Eyy|Vq z7@9k8yjlS%mG>$UjmL9|y1|1Zn&zz2VN0XU_weakzIx#WRP}g|0*Oh&mJQRz`2vE8 z(cp7#iqidw_#c#l0+>5HOPQM9q$aK|eRka{y(S|Z{DkMezf5aH{-;mnm*To(+uY{* z(rabeSYp@LfGSexCzf zEaVLme*2E=U(k<)Ajt;aU;YT)^8-AM2E zcOEIN^5seghxphW^4|Y0cKXa!2)!0RY9Xq+OFrJOSK$A|V{q=>h~8>Wd+6oOJMpwL zihQLrmTS3hO>85)0RDHZNP2s?34Z#~SWB;!t+Yo(--}p7{tD*+=4DuiL^m9e+l?@v(ep;U)uHQT?PW zPE&VuN+)FaR-5!g3d7>w$rPA1u}=0bj~k8XSA{gi@uurnhNom`8iuA`HO~p0sZKRB z#=X#XV}TPE8_D0dS5}A&1+h~b#7?mT?ChT|f6zsskOSewVG9=YKodzivi@LjA8-9m~n1i?&9ZoB~hNd#MvO#L9Oya6`)*82p0In(1$P6s-?4AKNHPsJ+6auhY*Az|txxF=uB$i=(G>a&E<&L`F+|rjcgn<{~we*e^|w*1S4a6{u)r77%BM zz}HEEskU^>!xrjrR%AI^YdoeGE23{6z#qs)K$?NWyv_d>&?#cEh7DH+koto}!=Qyg zW=+^{ALaJlu6+!}GHDW$LKrj{jogPYI&2Bt*cH;>7f}cg!#PO(`5izg2&pcB6Tp8E z1|gO82U>!a?ysx-Q7a(#GcEKdIS8gjIwAjE1MR&3Hk?ZS2B-Pdkix9UE+%(6Rx3F~ zQGg^)Aj=^*{Y$+4ZEg2pokHza`O^JdtK91vJ$HGu*6KU}oK zH;Z{>8l6N&_=fUz#X|)HceV7v@>DD(Wl+^cy}FoycA}{h~DO!Q?9XU?b>yX z_Pb0P^7-Is3FLQm-uzgovspuLo}|=Vrw}!>@i4Febp z4rA?Zoo{lUtX;)yWM*4~=GJu6C{BZ4Wjc*F4cA!P5kWQ_g=TG%(3A;VV6%pOH0H;|{3`mJ=R z2m&-H0dPABF1!WP?Td2(Dx*u5KQ$Ue^DJb0A`BwGyJ56wS;sbp+`^JO2b)+RSc*)H zSGCgycF!86a||$K+P0GECitk9+I`h6>Dd(^4ZB8iZ^Wmn#SgR)hr#y-cE>m#H;oeotoaUkwl~Ob&gd_& z$C%q0>I`aHw_X35=rEJg*`AU5s-Wr9JPN0&JZF-AG4^_{U%DyHIZ9l-@oz>G($@Og z5GW1KKYx=UxOM5b&u{NF{4?X9@9g`POAmZ8;?I?)zx4*c-^>21*Q@<18wdA4ec9UY zb^X=ze!uD(midqB0=I7dS=XPBy!@(5Md3fH3w!|P_qzUSXX&rHG&TNmpXr|k{J9nL sR{`dl{~tDH{;K}3H`M*Ap6b+}+w1hT@$j+ngy7$6aQA4tCpPr|070|WxBvhE literal 0 HcmV?d00001 diff --git a/packaging/microsoft.codeanalysis.scripting.common.2.8.0.nupkg b/packaging/microsoft.codeanalysis.scripting.common.2.8.0.nupkg new file mode 100644 index 0000000000000000000000000000000000000000..db12302d73d10e5d5954e38c287f0654b53e9445 GIT binary patch literal 104117 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 }#b|hPdOOFGYE=w*02kPL1|zIc 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 z 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 3.8 BuildRequires: libstdc++-devel BuildRequires: coreclr-devel BuildRequires: dotnet-build-tools +BuildRequires: unzip +BuildRequires: corefx-managed Requires: coreclr # .NET Core Runtime @@ -54,6 +56,8 @@ This is a CoreCLR debugger for Tizen. gzip -dc %{SOURCE0} | tar -xvf - cd netcoredbg cp %{SOURCE1001} .. +cp -v packaging/*.nupkg /nuget +ls -la /nuget %build @@ -90,6 +94,22 @@ mkdir -p %{buildroot}%{sdk_install_prefix} mv %{buildroot}%{install_prefix}/netcoredbg %{buildroot}%{sdk_install_prefix} install -p -m 644 ../netcoredbg/src/debug/netcoredbg/bin/*/*/SymbolReader.dll %{buildroot}%{sdk_install_prefix} +unzip /nuget/microsoft.codeanalysis.common.2.8.0.nupkg lib/netstandard1.3/Microsoft.CodeAnalysis.dll +unzip /nuget/microsoft.codeanalysis.csharp.2.8.0.nupkg lib/netstandard1.3/Microsoft.CodeAnalysis.CSharp.dll +unzip /nuget/microsoft.codeanalysis.scripting.common.2.8.0.nupkg lib/netstandard1.3/Microsoft.CodeAnalysis.Scripting.dll +unzip /nuget/microsoft.codeanalysis.csharp.scripting.2.8.0.nupkg lib/netstandard1.3/Microsoft.CodeAnalysis.CSharp.Scripting.dll +unzip /nuget/system.text.encoding.codepages.4.5.0.nupkg lib/netstandard1.3/System.Text.Encoding.CodePages.dll + +find lib/netstandard1.3/ -name '*.dll' -exec %{_datarootdir}/%{netcoreappalias}/crossgen -ReadyToRun /Platform_Assemblies_Paths %{_datarootdir}/%{netcoreappalias}:$PWD/lib/netstandard1.3 {} \; + +install -p -m 644 lib/netstandard1.3/*.dll %{buildroot}%{sdk_install_prefix} + +# install -p -m 644 lib/netstandard1.3/Microsoft.CodeAnalysis.dll %{buildroot}%{sdk_install_prefix} +# install -p -m 644 lib/netstandard1.3/Microsoft.CodeAnalysis.CSharp.dll %{buildroot}%{sdk_install_prefix} +# install -p -m 644 lib/netstandard1.3/Microsoft.CodeAnalysis.Scripting.dll %{buildroot}%{sdk_install_prefix} +# install -p -m 644 lib/netstandard1.3/Microsoft.CodeAnalysis.CSharp.Scripting.dll %{buildroot}%{sdk_install_prefix} +# install -p -m 644 lib/netstandard1.3/System.Text.Encoding.CodePages.dll %{buildroot}%{sdk_install_prefix} + %files %manifest netcoredbg.manifest %{sdk_install_prefix}/* diff --git a/src/debug/netcoredbg/CMakeLists.txt b/src/debug/netcoredbg/CMakeLists.txt index aaee00f..5a39cc7 100644 --- a/src/debug/netcoredbg/CMakeLists.txt +++ b/src/debug/netcoredbg/CMakeLists.txt @@ -73,7 +73,7 @@ if (BUILD_MANAGED) find_program(DOTNETCLI dotnet PATHS ENV PATH "${CLR_DIR}/Tools/dotnetcli") add_custom_command(OUTPUT ${DOTNET_BUILD_RESULT} - COMMAND ${DOTNETCLI} build ${SYMBOLREADER_PROJECT} -o ${CMAKE_CURRENT_BINARY_DIR} /p:BaseIntermediateOutputPath=${CMAKE_CURRENT_BINARY_DIR}/obj/ + COMMAND ${DOTNETCLI} publish ${SYMBOLREADER_PROJECT} -o ${CMAKE_CURRENT_BINARY_DIR} /p:BaseIntermediateOutputPath=${CMAKE_CURRENT_BINARY_DIR}/obj/ WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/SymbolReader.cs" "${SYMBOLREADER_PROJECT}" COMMENT "Compiling ${SYMBOLREADER_DLL_NAME}" @@ -81,5 +81,18 @@ if (BUILD_MANAGED) ) add_custom_target(symbolreader_dll ALL DEPENDS ${DOTNET_BUILD_RESULT}) - install(FILES ${DOTNET_BUILD_RESULT} DESTINATION ${CMAKE_INSTALL_PREFIX}) + + # Copy dlls + set(ROSLYN_DLLS + Microsoft.CodeAnalysis.dll + Microsoft.CodeAnalysis.CSharp.dll + Microsoft.CodeAnalysis.Scripting.dll + Microsoft.CodeAnalysis.CSharp.Scripting.dll) + + set(DLLS_TO_DEPLOY ${DOTNET_BUILD_RESULT}) + foreach(ITEM ${ROSLYN_DLLS}) + list(APPEND DLLS_TO_DEPLOY "${CMAKE_CURRENT_BINARY_DIR}/${ITEM}") + endforeach() + + install(FILES ${DLLS_TO_DEPLOY} DESTINATION ${CMAKE_INSTALL_PREFIX}) endif() diff --git a/src/debug/netcoredbg/SymbolReader.cs b/src/debug/netcoredbg/SymbolReader.cs index 86bb1bb..2527c0d 100644 --- a/src/debug/netcoredbg/SymbolReader.cs +++ b/src/debug/netcoredbg/SymbolReader.cs @@ -10,6 +10,10 @@ using System.Reflection.Metadata; using System.Reflection.Metadata.Ecma335; using System.Reflection.PortableExecutable; using System.Runtime.InteropServices; +using Microsoft.CodeAnalysis.CSharp.Scripting; +using Microsoft.CodeAnalysis.Scripting; +using Microsoft.CodeAnalysis; +using System.Reflection; namespace SOS { @@ -987,5 +991,115 @@ namespace SOS return null; } } + + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] + public struct BlittableChar + { + public char Value; + + public static explicit operator BlittableChar(char value) + { + return new BlittableChar { Value = value }; + } + + public static implicit operator char (BlittableChar value) + { + return value.Value; + } + } + + public struct BlittableBoolean + { + private byte byteValue; + + public bool Value + { + get { return Convert.ToBoolean(byteValue); } + set { byteValue = Convert.ToByte(value); } + } + + public static explicit operator BlittableBoolean(bool value) + { + return new BlittableBoolean { Value = value }; + } + + public static implicit operator bool (BlittableBoolean value) + { + return value.Value; + } + } + + internal static bool ParseExpression(string expr, string resultTypeName, out IntPtr data, out int size, out IntPtr errorText) + { + object value = null; + data = IntPtr.Zero; + size = 0; + errorText = IntPtr.Zero; + Type resultType = Type.GetType(resultTypeName); + if (resultType == null) + { + errorText = Marshal.StringToBSTR("Unknown type: " + resultTypeName); + return false; + } + try + { + MethodInfo genericMethod = null; + + foreach (System.Reflection.MethodInfo m in typeof(CSharpScript).GetTypeInfo().GetMethods()) + { + if (m.Name == "EvaluateAsync" && m.ContainsGenericParameters) + { + genericMethod = m.MakeGenericMethod(resultType); + break; + } + } + + dynamic v = genericMethod.Invoke(null, new object[]{expr, null, null, null, default(System.Threading.CancellationToken)}); + value = v.Result; + + } + catch (TargetInvocationException e) + { + if (e.InnerException is CompilationErrorException) + { + errorText = Marshal.StringToBSTR(string.Join(Environment.NewLine, (e.InnerException as CompilationErrorException).Diagnostics)); + } + else + { + errorText = Marshal.StringToBSTR(e.InnerException.ToString()); + } + return false; + } + if (value == null) + { + errorText = Marshal.StringToBSTR("Value can not be null"); + return false; + } + if (value is string) + { + data = Marshal.StringToBSTR(value as string); + } + else if (value is char) + { + BlittableChar c = (BlittableChar)((char)value); + size = Marshal.SizeOf(c); + data = Marshal.AllocCoTaskMem(size); + Marshal.StructureToPtr(c, data, false); + } + else if (value is bool) + { + BlittableBoolean b = (BlittableBoolean)((bool)value); + size = Marshal.SizeOf(b); + data = Marshal.AllocCoTaskMem(size); + Marshal.StructureToPtr(b, data, false); + } + else + { + size = Marshal.SizeOf(value); + data = Marshal.AllocCoTaskMem(size); + Marshal.StructureToPtr(value, data, false); + } + return true; + } } } diff --git a/src/debug/netcoredbg/SymbolReader.csproj b/src/debug/netcoredbg/SymbolReader.csproj index 8741864..e301d68 100644 --- a/src/debug/netcoredbg/SymbolReader.csproj +++ b/src/debug/netcoredbg/SymbolReader.csproj @@ -2,7 +2,7 @@ False - netstandard1.6 + netstandard2.0 @@ -31,8 +31,10 @@ 4.3.0 - 1.4.1 + 1.4.2 + + diff --git a/src/debug/netcoredbg/debugger.h b/src/debug/netcoredbg/debugger.h index 24aa400..a72e985 100644 --- a/src/debug/netcoredbg/debugger.h +++ b/src/debug/netcoredbg/debugger.h @@ -57,8 +57,8 @@ public: virtual HRESULT GetVariables(uint32_t variablesReference, VariablesFilter filter, int start, int count, std::vector &variables) = 0; virtual int GetNamedVariables(uint32_t variablesReference) = 0; virtual HRESULT Evaluate(uint64_t frameId, const std::string &expression, Variable &variable) = 0; - virtual HRESULT SetVariable(const std::string &name, const std::string &value, uint32_t ref) = 0; - virtual HRESULT SetVariableByExpression(uint64_t frameId, const std::string &name, const std::string &value) = 0; + virtual HRESULT SetVariable(const std::string &name, const std::string &value, uint32_t ref, std::string &output) = 0; + virtual HRESULT SetVariableByExpression(uint64_t frameId, const std::string &name, const std::string &value, std::string &output) = 0; }; class Protocol diff --git a/src/debug/netcoredbg/manageddebugger.h b/src/debug/netcoredbg/manageddebugger.h index f664c08..007d561 100644 --- a/src/debug/netcoredbg/manageddebugger.h +++ b/src/debug/netcoredbg/manageddebugger.h @@ -322,14 +322,16 @@ class Variables ICorDebugThread *pThread, ICorDebugFrame *pFrame, const std::string &name, - const std::string &value); + const std::string &value, + std::string &output); HRESULT SetChild( VariableReference &ref, ICorDebugThread *pThread, ICorDebugFrame *pFrame, const std::string &name, - const std::string &value); + const std::string &value, + std::string &output); public: @@ -349,13 +351,15 @@ public: ICorDebugProcess *pProcess, const std::string &name, const std::string &value, - uint32_t ref); + uint32_t ref, + std::string &output); HRESULT SetVariable( ICorDebugProcess *pProcess, ICorDebugValue *pVariable, const std::string &value, - uint64_t frameId); + uint64_t frameId, + std::string &output); HRESULT GetScopes(ICorDebugProcess *pProcess, uint64_t frameId, std::vector &scopes); @@ -472,6 +476,6 @@ public: HRESULT GetVariables(uint32_t variablesReference, VariablesFilter filter, int start, int count, std::vector &variables) override; int GetNamedVariables(uint32_t variablesReference) override; HRESULT Evaluate(uint64_t frameId, const std::string &expression, Variable &variable) override; - HRESULT SetVariable(const std::string &name, const std::string &value, uint32_t ref) override; - HRESULT SetVariableByExpression(uint64_t frameId, const std::string &expression, const std::string &value) override; + HRESULT SetVariable(const std::string &name, const std::string &value, uint32_t ref, std::string &output) override; + HRESULT SetVariableByExpression(uint64_t frameId, const std::string &expression, const std::string &value, std::string &output) override; }; diff --git a/src/debug/netcoredbg/miprotocol.cpp b/src/debug/netcoredbg/miprotocol.cpp index 52ca6c2..da2ecae 100644 --- a/src/debug/netcoredbg/miprotocol.cpp +++ b/src/debug/netcoredbg/miprotocol.cpp @@ -867,9 +867,10 @@ HRESULT MIProtocol::HandleCommand(std::string command, Variable variable; IfFailRet(FindVar(varName, variable)); - m_debugger->SetVariableByExpression(frameId, variable.evaluateName, varExpr); - output = "value=\"" + MIProtocol::EscapeMIValue(varExpr) + "\""; + IfFailRet(m_debugger->SetVariableByExpression(frameId, variable.evaluateName, varExpr, output)); + + output = "value=\"" + MIProtocol::EscapeMIValue(output) + "\""; return S_OK; }}, @@ -1037,8 +1038,14 @@ void MIProtocol::CommandLoop() } else { - const char *sep = output.empty() ? "" : " "; - Printf("%s^error,msg=\"Error: 0x%08x%s%s\"\n", token.c_str(), hr, sep, output.c_str()); + if (output.empty()) + { + Printf("%s^error,msg=\"Error: 0x%08x\"\n", token.c_str(), hr); + } + else + { + Printf("%s^error,msg=\"%s\"\n", token.c_str(), MIProtocol::EscapeMIValue(output).c_str()); + } } } diff --git a/src/debug/netcoredbg/symbolreader.cpp b/src/debug/netcoredbg/symbolreader.cpp index da9d20d..db3ae71 100644 --- a/src/debug/netcoredbg/symbolreader.cpp +++ b/src/debug/netcoredbg/symbolreader.cpp @@ -7,6 +7,7 @@ #include "symbolreader.h" #include +#include #include "modules.h" #include "platform.h" @@ -37,6 +38,7 @@ GetLocalVariableNameAndScope SymbolReader::getLocalVariableNameAndScopeDelegate; GetLineByILOffsetDelegate SymbolReader::getLineByILOffsetDelegate; GetStepRangesFromIPDelegate SymbolReader::getStepRangesFromIPDelegate; GetSequencePointsDelegate SymbolReader::getSequencePointsDelegate; +ParseExpressionDelegate SymbolReader::parseExpressionDelegate = nullptr; SysAllocStringLen_t SymbolReader::sysAllocStringLen; SysFreeString_t SymbolReader::sysFreeString; @@ -257,8 +259,12 @@ HRESULT SymbolReader::PrepareSymbolReader() IfFailRet(createDelegate(hostHandle, domainId, SymbolReaderDllName, SymbolReaderClassName, "GetLineByILOffset", (void **)&getLineByILOffsetDelegate)); IfFailRet(createDelegate(hostHandle, domainId, SymbolReaderDllName, SymbolReaderClassName, "GetStepRangesFromIP", (void **)&getStepRangesFromIPDelegate)); IfFailRet(createDelegate(hostHandle, domainId, SymbolReaderDllName, SymbolReaderClassName, "GetSequencePoints", (void **)&getSequencePointsDelegate)); + IfFailRet(createDelegate(hostHandle, domainId, SymbolReaderDllName, SymbolReaderClassName, "ParseExpression", (void **)&parseExpressionDelegate)); - return Status; + // Warm up Roslyn + std::thread([](){ std::string data; std::string err; SymbolReader::ParseExpression("1", "System.Int32", data, err); }).detach(); + + return S_OK; } HRESULT SymbolReader::ResolveSequencePoint(const char *filename, ULONG32 lineNumber, TADDR mod, mdMethodDef* pToken, ULONG32* pIlOffset) @@ -395,3 +401,41 @@ HRESULT SymbolReader::GetSequencePoints(mdMethodDef methodToken, std::vector &points); + static HRESULT ParseExpression(const std::string &expr, const std::string &typeName, std::string &data, std::string &errorText); }; diff --git a/src/debug/netcoredbg/valuewrite.cpp b/src/debug/netcoredbg/valuewrite.cpp index 5a11e55..75d20b8 100644 --- a/src/debug/netcoredbg/valuewrite.cpp +++ b/src/debug/netcoredbg/valuewrite.cpp @@ -15,225 +15,61 @@ #include #include #include +#include +#include #include #include "torelease.h" #include "cputil.h" #include "typeprinter.h" +#include "symbolreader.h" -PACK_BEGIN struct Decimal { - unsigned int unused : 16; - unsigned int exponent : 8; - unsigned int unused2 : 7; - unsigned int sign : 1; - - uint32_t hi; - uint32_t lo; - uint32_t mid; - - Decimal() : unused(0), exponent(0), unused2(0), sign(0), hi(0), lo(0), mid(0) {} - Decimal(uint32_t lo, uint32_t mid, uint32_t hi, uint8_t exp, unsigned int sign) : unused(0), - exponent(exp), unused2(0), sign(sign), hi(hi), lo(lo), mid(mid) {} - void Mul10(); - void AddInt32(uint32_t val); - bool Parse(const std::string &value); - -private: - void ShiftLeft(); - void Add(Decimal &d); - static bool AddCarry(uint32_t &to, uint32_t val); -} PACK_END; - -bool Decimal::AddCarry(uint32_t &to, uint32_t val) -{ - uint32_t v = to; - to += val; - return (to < v) || (to < val); -} - -void Decimal::ShiftLeft() -{ - uint32_t c0 = (lo & 0x80000000) != 0 ? 1u : 0u; - uint32_t c1 = (mid & 0x80000000) != 0 ? 1u : 0u; - - lo = lo << 1; - mid = (mid << 1) | c0; - hi = (hi << 1) | c1; -} - -void Decimal::Add(Decimal &d) -{ - if (AddCarry(lo, d.lo)) - if (AddCarry(mid, 1)) - AddCarry(hi, 1); - - if (AddCarry(mid, d.mid)) - AddCarry(hi, 1); - - AddCarry(hi, d.hi); -} - -void Decimal::Mul10() -{ - Decimal d(lo, mid, hi, exponent, sign); - - ShiftLeft(); - ShiftLeft(); - Add(d); - ShiftLeft(); -} - -void Decimal::AddInt32(uint32_t val) -{ - if (AddCarry(lo, val)) - if (AddCarry(mid, 1)) - AddCarry(hi, 1); -} - - - - -const int DECIMAL_PRECISION = 29; - -bool Decimal::Parse(const std::string &value) -{ - std::string valueToStore(value); - bool is_negative = valueToStore.length() > 0 && valueToStore[0] == '-'; - - if (is_negative) { - sign = 1; - valueToStore.erase(0, 1); - } - else - { - sign = 0; - } - - // Cut all meaningless first zeroes - const auto ix = valueToStore.find_first_not_of('0'); - valueToStore.erase(0, ix); - - const auto dotPos = valueToStore.find("."); - if (dotPos != std::string::npos) - valueToStore.erase(dotPos, 1); - - if (dotPos > std::numeric_limits::max()) - return false; - - int scale = static_cast(dotPos); - - const unsigned char* p = reinterpret_cast(valueToStore.c_str()); - - if (*p == 0) - { - // To avoid risking an app-compat issue with pre 4.5 (where some app was illegally using Reflection to examine the internal scale bits), we'll only force - // the scale to 0 if the scale was previously positive (previously, such cases were unparsable to a bug.) - if (scale > 0) - scale = 0; - } - else - { - if (scale > DECIMAL_PRECISION) - return false; - - while (((scale > 0) || ((*p != 0) && (scale > -(DECIMAL_PRECISION - 1)))) && - ((hi < 0x19999999) || ((hi == 0x19999999) && - ((mid < 0x99999999) || ((mid == 0x99999999) && - ((lo < 0x99999999) || ((lo == 0x99999999) && - (*p <= '5')))))))) - { - Mul10(); - - if (*p != 0) - AddInt32((uint32_t)(*p++ - '0')); - scale--; - } - - if (*p++ >= '5') - { - bool round = true; - - if ((*(p - 1) == '5') && ((*(p - 2) % 2) == 0)) - { - // Check if previous digit is even, only if the when we are unsure whether hows to do - // Banker's rounding. For digits > 5 we will be rounding up anyway. - int count = 20; // Look at the next 20 digits to check to round - while ((*p == '0') && (count != 0)) - { - p++; - count--; - } - if ((*p == '\0') || (count == 0)) - round = false;// Do nothing - } - - if (round) - { - AddInt32(1); - if ((hi | mid | lo) == 0) - { - // If we got here, the magnitude portion overflowed and wrapped back to 0 as the magnitude was already at the MaxValue point: - // - // 79,228,162,514,264,337,593,543,950,335e+X - // - // Manually force it to the correct result: - // - // 7,922,816,251,426,433,759,354,395,034e+(X+1) - // - // This code path can be reached by trying to parse the following as a Decimal: - // - // 0.792281625142643375935439503355e28 - // - - hi = 0x19999999; - mid = 0x99999999; - lo = 0x9999999A; - scale++; - } - } - } - } - - if (scale > 0) - return false; // Rounding may have caused its own overflow. For example, parsing "0.792281625142643375935439503355e29" will get here. - - if (scale <= -DECIMAL_PRECISION) - { - // Parsing a large scale zero can give you more precision than fits in the decimal. - // This should only happen for actual zeros or very small numbers that round to zero. - hi = 0; - lo = 0; - mid = 0; - exponent = DECIMAL_PRECISION - 1; - } - else - { - exponent = -scale; - } - - return true; -} - -HRESULT WriteValue(ICorDebugValue *pValue, const std::string &value, ICorDebugThread *pThread, Evaluator &evaluator) +HRESULT WriteValue( + ICorDebugValue *pValue, + const std::string &value, + ICorDebugThread *pThread, + Evaluator &evaluator, + std::string &errorText) { HRESULT Status; ULONG32 size; IfFailRet(pValue->GetSize(&size)); - ArrayHolder valBuf = new (std::nothrow) BYTE[size]; - if (valBuf == nullptr) - return E_OUTOFMEMORY; + std::string data; CorElementType corType; IfFailRet(pValue->GetType(&corType)); - if (corType == ELEMENT_TYPE_STRING) + static const std::unordered_map cor2name = { + {ELEMENT_TYPE_BOOLEAN, "System.Boolean"}, + {ELEMENT_TYPE_U1, "System.Byte"}, + {ELEMENT_TYPE_I1, "System.SByte"}, + {ELEMENT_TYPE_CHAR, "System.Char"}, + {ELEMENT_TYPE_R8, "System.Double"}, + {ELEMENT_TYPE_R4, "System.Single"}, + {ELEMENT_TYPE_I4, "System.Int32"}, + {ELEMENT_TYPE_U4, "System.UInt32"}, + {ELEMENT_TYPE_I8, "System.Int64"}, + {ELEMENT_TYPE_U8, "System.UInt64"}, + {ELEMENT_TYPE_I2, "System.Int16"}, + {ELEMENT_TYPE_U2, "System.UInt16"}, + {ELEMENT_TYPE_I, "System.IntPtr"}, + {ELEMENT_TYPE_U, "System.UIntPtr"} + }; + auto renamed = cor2name.find(corType); + if (renamed != cor2name.end()) + { + IfFailRet(SymbolReader::ParseExpression(value, renamed->second, data, errorText)); + } + else if (corType == ELEMENT_TYPE_STRING) { + IfFailRet(SymbolReader::ParseExpression(value, "System.String", data, errorText)); + ToRelease pNewString; - IfFailRet(evaluator.CreateString(pThread, value, &pNewString)); + IfFailRet(evaluator.CreateString(pThread, data, &pNewString)); // Switch object addresses ToRelease pRefNew; @@ -247,97 +83,32 @@ HRESULT WriteValue(ICorDebugValue *pValue, const std::string &value, ICorDebugTh return S_OK; } - - ToRelease pGenValue; - IfFailRet(pValue->QueryInterface(IID_ICorDebugGenericValue, (LPVOID *) &pGenValue)); - - std::stringstream ss(value); - - switch (corType) + else if (corType == ELEMENT_TYPE_VALUETYPE || corType == ELEMENT_TYPE_CLASS) { - case ELEMENT_TYPE_BOOLEAN: - if (value == "false") - valBuf[0] = 0; - else if (value == "true") - valBuf[0] = 1; - else - return E_INVALIDARG; - - break; - case ELEMENT_TYPE_CHAR: + std::string typeName; + TypePrinter::GetTypeOfValue(pValue, typeName); + if (typeName != "decimal") { - auto wval = to_utf16(value); - - if (wval.length() > 1) - return E_INVALIDARG; - - std::memcpy(&valBuf[0], &wval[0], sizeof(wval[0])); - - break; - } - case ELEMENT_TYPE_I1: - { - int num; - - ss >> num; - valBuf[0] = (char)num; - break; + errorText = "Unable to set value of type '" + typeName + "'"; + return E_FAIL; } - case ELEMENT_TYPE_U1: - { - int num; + IfFailRet(SymbolReader::ParseExpression(value, "System.Decimal", data, errorText)); + } + else + { + errorText = "Unable to set value"; + return E_FAIL; + } - ss >> num; - valBuf[0] = (unsigned char)num; - break; - } - case ELEMENT_TYPE_I2: - ss >> *(short *)&valBuf[0]; - break; - case ELEMENT_TYPE_U2: - ss >> *(unsigned short *)&valBuf[0]; - break; - case ELEMENT_TYPE_I4: - case ELEMENT_TYPE_I: - ss >> *(int *)&valBuf[0]; - break; - case ELEMENT_TYPE_U4: - case ELEMENT_TYPE_U: - ss >> *(unsigned int *)&valBuf[0]; - break; - case ELEMENT_TYPE_I8: - ss >> *(__int64 *)&valBuf[0]; - break; - case ELEMENT_TYPE_U8: - ss >> *(unsigned __int64 *)&valBuf[0]; - break; - case ELEMENT_TYPE_R4: - ss >> std::setprecision(8) >> *(float *)&valBuf[0]; - break; - case ELEMENT_TYPE_R8: - ss >> std::setprecision(16) >> *(double *)&valBuf[0]; - break; - case ELEMENT_TYPE_VALUETYPE: - case ELEMENT_TYPE_CLASS: - { - std::string typeName; - TypePrinter::GetTypeOfValue(pValue, typeName); - if (typeName == "decimal") - { - Decimal d; - if (!d.Parse(value)) - return E_INVALIDARG; - if (sizeof(Decimal) > size) - return E_FAIL; - std::memcpy(&valBuf[0], &d, size); - } - break; - } - default: - return S_OK; + if (size != data.size()) + { + errorText = "Marshalling size mismatch: " + std::to_string(size) + " != " + std::to_string(data.size()); + return E_FAIL; } - IfFailRet(pGenValue->SetValue((LPVOID) &valBuf[0])); + ToRelease pGenValue; + IfFailRet(pValue->QueryInterface(IID_ICorDebugGenericValue, (LPVOID *) &pGenValue)); + IfFailRet(pGenValue->SetValue((LPVOID) &data[0])); return S_OK; } diff --git a/src/debug/netcoredbg/valuewrite.h b/src/debug/netcoredbg/valuewrite.h index 4ea2235..ffd9223 100644 --- a/src/debug/netcoredbg/valuewrite.h +++ b/src/debug/netcoredbg/valuewrite.h @@ -10,4 +10,9 @@ #include #include "manageddebugger.h" -HRESULT WriteValue(ICorDebugValue *pValue, const std::string &value, ICorDebugThread *pThread, Evaluator &evaluator); +HRESULT WriteValue( + ICorDebugValue *pValue, + const std::string &value, + ICorDebugThread *pThread, + Evaluator &evaluator, + std::string &errorText); diff --git a/src/debug/netcoredbg/variables.cpp b/src/debug/netcoredbg/variables.cpp index 0ce8567..7420d82 100644 --- a/src/debug/netcoredbg/variables.cpp +++ b/src/debug/netcoredbg/variables.cpp @@ -432,16 +432,17 @@ HRESULT Variables::Evaluate( return S_OK; } -HRESULT ManagedDebugger::SetVariable(const std::string &name, const std::string &value, uint32_t ref) +HRESULT ManagedDebugger::SetVariable(const std::string &name, const std::string &value, uint32_t ref, std::string &output) { - return m_variables.SetVariable(m_pProcess, name, value, ref); + return m_variables.SetVariable(m_pProcess, name, value, ref, output); } HRESULT Variables::SetVariable( ICorDebugProcess *pProcess, const std::string &name, const std::string &value, - uint32_t ref) + uint32_t ref, + std::string &output) { if (pProcess == nullptr) return E_FAIL; @@ -461,11 +462,11 @@ HRESULT Variables::SetVariable( if (varRef.IsScope()) { - IfFailRet(SetStackVariable(varRef.frameId, pThread, pFrame, name, value)); + IfFailRet(SetStackVariable(varRef.frameId, pThread, pFrame, name, value, output)); } else { - IfFailRet(SetChild(varRef, pThread, pFrame, name, value)); + IfFailRet(SetChild(varRef, pThread, pFrame, name, value, output)); } return S_OK; @@ -476,7 +477,8 @@ HRESULT Variables::SetStackVariable( ICorDebugThread *pThread, ICorDebugFrame *pFrame, const std::string &name, - const std::string &value) + const std::string &value, + std::string &output) { HRESULT Status; @@ -488,7 +490,11 @@ HRESULT Variables::SetStackVariable( const std::string &varName) -> HRESULT { if (varName == name) - IfFailRet(WriteValue(pValue, value, pThread, m_evaluator)); + { + IfFailRet(WriteValue(pValue, value, pThread, m_evaluator, output)); + bool escape = true; + PrintValue(pValue, output, escape); + } return S_OK; })); @@ -501,7 +507,8 @@ HRESULT Variables::SetChild( ICorDebugThread *pThread, ICorDebugFrame *pFrame, const std::string &name, - const std::string &value) + const std::string &value, + std::string &output) { if (ref.IsScope()) return E_INVALIDARG; @@ -524,8 +531,11 @@ HRESULT Variables::SetChild( const std::string &varName) -> HRESULT { if (varName == name) - IfFailRet(WriteValue(pValue, value, pThread, m_evaluator)); - + { + IfFailRet(WriteValue(pValue, value, pThread, m_evaluator, output)); + bool escape = true; + PrintValue(pValue, output, escape); + } return S_OK; })); @@ -535,13 +545,14 @@ HRESULT Variables::SetChild( HRESULT ManagedDebugger::SetVariableByExpression( uint64_t frameId, const std::string &expression, - const std::string &value) + const std::string &value, + std::string &output) { HRESULT Status; ToRelease pResultValue; IfFailRet(m_variables.GetValueByExpression(m_pProcess, frameId, expression, &pResultValue)); - return m_variables.SetVariable(m_pProcess, pResultValue, value, frameId); + return m_variables.SetVariable(m_pProcess, pResultValue, value, frameId, output); } HRESULT Variables::GetValueByExpression(ICorDebugProcess *pProcess, uint64_t frameId, const std::string &expression, @@ -565,7 +576,8 @@ HRESULT Variables::SetVariable( ICorDebugProcess *pProcess, ICorDebugValue *pVariable, const std::string &value, - uint64_t frameId) + uint64_t frameId, + std::string &output) { HRESULT Status; @@ -576,5 +588,8 @@ HRESULT Variables::SetVariable( ToRelease pThread; IfFailRet(pProcess->GetThread(stackFrame.GetThreadId(), &pThread)); - return WriteValue(pVariable, value, pThread, m_evaluator); + IfFailRet(WriteValue(pVariable, value, pThread, m_evaluator, output)); + bool escape = true; + PrintValue(pVariable, output, escape); + return S_OK; } diff --git a/src/debug/netcoredbg/vscodeprotocol.cpp b/src/debug/netcoredbg/vscodeprotocol.cpp index b437059..1d10b54 100644 --- a/src/debug/netcoredbg/vscodeprotocol.cpp +++ b/src/debug/netcoredbg/vscodeprotocol.cpp @@ -417,8 +417,15 @@ HRESULT VSCodeProtocol::HandleCommand(const std::string &command, const json &ar std::string value = arguments.at("value"); int ref = arguments.at("variablesReference"); - IfFailRet(m_debugger->SetVariable(name, value, ref)); - body["value"] = value; + std::string output; + Status = m_debugger->SetVariable(name, value, ref, output); + if (FAILED(Status)) + { + body["message"] = output; + return Status; + } + + body["value"] = output; return S_OK; } } @@ -511,11 +518,17 @@ void VSCodeProtocol::CommandLoop() } else { - std::ostringstream ss; - ss << "Failed command '" << command << "' : " - << "0x" << std::setw(8) << std::setfill('0') << std::hex << Status; + if (body.find("message") == body.end()) + { + std::ostringstream ss; + ss << "Failed command '" << command << "' : " + << "0x" << std::setw(8) << std::setfill('0') << std::hex << Status; + response["message"] = ss.str(); + } + else + response["message"] = body["message"]; + response["success"] = false; - response["message"] = ss.str(); } std::string output = response.dump(); std::cout << CONTENT_LENGTH << output.size() << TWO_CRLF << output; diff --git a/tests/SetValuesTest/SetValuesTest.cs b/tests/SetValuesTest/SetValuesTest.cs index 022c629..652c994 100644 --- a/tests/SetValuesTest/SetValuesTest.cs +++ b/tests/SetValuesTest/SetValuesTest.cs @@ -86,7 +86,7 @@ r = Expect("11^done"); Send(String.Format("12-var-create - * \"{0}\"", "testChar")); r = Expect("12^done"); string testChar = r.FindString("name"); -Send(String.Format("13-var-assign {0} \"a\"", testChar)); +Send(String.Format("13-var-assign {0} \"'a'\"", testChar)); r = Expect("13^done"); Send(String.Format("14-var-create - * \"{0}\"", "testByte")); @@ -140,13 +140,13 @@ r = Expect("29^done"); Send(String.Format("30-var-create - * \"{0}\"", "b")); r = Expect("30^done"); string b = r.FindString("name"); -Send(String.Format("31-var-assign {0} \"-1.000000000000000000000017\"", b)); +Send(String.Format("31-var-assign {0} \"-1.000000000000000000000017M\"", b)); r = Expect("31^done"); Send(String.Format("32-var-create - * \"{0}\"", "testString")); r = Expect("32^done"); string testString = r.FindString("name"); -Send(String.Format("33-var-assign {0} \"edited string\"", testString)); +Send(String.Format("33-var-assign {0} \"\"edited string\"\"", testString)); r = Expect("33^done"); Send("34-exec-continue"); */ -- 2.34.1