From 5f753e022204cf020f427f967bd6fcde8b6b6111 Mon Sep 17 00:00:00 2001 From: John Kessenich Date: Sun, 8 Sep 2013 21:04:46 +0000 Subject: [PATCH] Full thread safety working: - don't use [] for map lookups, it can modify the map - copy up built-in symbols out of shared symbol table levels before modifying them - enforce shallow vs. deep TType copies - combine maxArraySize with the array dimensions vector, encapsulate - remove chaining of array types git-svn-id: https://cvs.khronos.org/svn/repos/ogl/trunk/ecosystem/public/sdk/tools/glslang@22953 e7fa87d3-cd2b-0410-9028-fcbf551c1848 --- Install/Windows/glslangValidator.exe | Bin 328192 -> 327680 bytes Test/120.frag | 9 ++ Test/baseResults/120.frag.out | 17 ++- Test/baseResults/300.vert.out | 2 +- Test/baseResults/array100.frag.out | 6 +- glslang/Include/Types.h | 120 ++++++++-------- glslang/Include/intermediate.h | 6 +- glslang/MachineIndependent/Constant.cpp | 30 ++-- glslang/MachineIndependent/Initialize.cpp | 4 +- glslang/MachineIndependent/Intermediate.cpp | 6 +- glslang/MachineIndependent/ParseHelper.cpp | 145 +++++++------------- glslang/MachineIndependent/ParseHelper.h | 11 +- glslang/MachineIndependent/Scan.cpp | 5 +- glslang/MachineIndependent/ShaderLang.cpp | 3 - glslang/MachineIndependent/SymbolTable.cpp | 85 ++++++------ glslang/MachineIndependent/SymbolTable.h | 41 +++--- glslang/MachineIndependent/glslang.y | 36 ++--- 17 files changed, 259 insertions(+), 267 deletions(-) diff --git a/Install/Windows/glslangValidator.exe b/Install/Windows/glslangValidator.exe index b31e3fce94a59b9ecf51bb66e7d8705b0e0d89f5..259801786302d4bdef9461fec90acdb5e2fb8a18 100644 GIT binary patch delta 120355 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�m;A=APvX_a)2VB6xaJQ>Ymb0mJ}_Kr%1|NCPr}Y#w_YJiKtHK2Jm@>eHFX3!`g4zK_zKpKz@6au?}D&RbD1u!i}#jN-j1tbHhKsHba zlmk^j9Z(Nk2bw>F5e`HE!+{ha9aswF0C_+OPyy5e7XcNx0R$~UVL%j+1SA6%U`9Ir zEd_FbJfI9X0GtNufg6BnDGCP6Kn#!wOaZ0>X+Q>$0~7&ezyY8Zs0Xf9+6_jQWu?y{ zcfi#X$I3)W0j&Zxf>wk2fYyNeg4Tlifu066fzp@3{XywN#G#;dkT(aV@0qs%tpN?D zG~|Jlk8~^03eXVH3y`-qNZqAS2--kE-^30ArEdavq%;)Tf(9?EJo&V7uAfgLOO!gZ zq05Z-bt(co7c=k!6A~xH%r<;Ieb+a4zc_k_IwLlvdl=iX%s9DggB>GA{NP2Bo_4^%Nsr=C#{P zc6uGM%ZJ_hCU%#QzUH;N1-lM<9g4@i7Q+ijTFatyjGg@h!JqcjVprEN z?mRNl>yliBtW0N5RXKok4Iqj2pQ#zqV#HHx)E8Yo0wii`Vu}0fuaWL^GLr6 z`a#coTaH>I4CyF9w8qF42vM&?c9&q6rnBR{fb>!!qkJvIXuTSlN*`hl(wS0!S0P;s zTyo1lWFvEo?fgm441LYjz0wQbNU6j?q&+6&TKwW*5~0(jB8DTKq|=Ynis+};BlA?) zW;e0TN4l8XvX^p=ohRz^$%cohvmsgDhuD|sWJbtTq;CMh>(Kc?A>h_k_y+1vCc8gO zlw_Xl93?bJi~1%JX|FY#mS^nTBU7hCHO)a<@BKR5X$|;bxlWZD(1El&2qZnfppUTK z>U1giOGsY_yv1w5ldcy0XuS#fia}O*v8G08aub7eGSJiw>1u99=uOCMDzcX9+)zUl zB3%OLD@uA=yN%GRlZ$+0oo?ddBGOlyxF9{vMYLX>TvQ+{biKDS)YK73#{lj&toVqJ z+xzu;WP2W6pzkIwgTJLZf4o*mmjL=&o%e(^La$CPt|RMo6BieezS6`6>1nkZt5@eP z5Se~dkSz2(4o@~Tu4x?7$$-12q33x`qxE`Z8wcB^O>7I1-l(&U(`@_b^~g3IwzWE2 z8le}EuHV3ZTy5+;K%YnYh0qVguF?G?eKXSGLRQFrS#50JN3TMv>c=>2XkwO*bS7iZ zstW0)ch8>U#LbTDrK7XZ_6MY;!g3HSvVFhY@L069Q8PzSUe zsYo%v0-y+R0GEO8qZH|3pa?hx`~y52hkQTC^xb{r&+Z6{4g4r`$)wS712Z;n{bWMp@UAAXRRzXA z&B|ZY;=A&q7T-ps-9LAH`H)fJInmzug4i*;u}h0MohXirI$4HjAwLXC0nGw+hn%5V zl?oAMmusR5oul(y)V5wYQiV1(qr|p8XYA6W0owHY2b7%nLWQzh2~{KbD6ZNfF2);l zHi>w9$m1VkEt#=f`?8Wm9vxX908id(N)p+qB4fMeI#ax_3k3%h#d^JkZ%KTx4)@AaG18fbjUYZ?Te zMHU%@Sg6hDA2duG6k9>5g{clx*^DCei+O}Mo+3?@I@Bw|d%j33QW#P+Di^gcf)@QY z3T^Tk^s=X-y{biiEhw3N1WGzz34Ln$B(Hveq-&T$ue?{F@DnWjbQga5>HIh}ecq6@ z^R)iD@v^rynwM$~8CsgizFv#|(p4vgoqNI9kyR8LeVXeUI7bsl?lPJTbsBFeGMa|c z@LqyYiLMg#IYBoFS|{iQP8kM=`q6BiJ|V(7vfU(G(JCWA9v=*0XtAy>%%D z&nniTXXDlx14qj<;?R)V^gzu^O??q66d%dySB>H6PP;cSX`9w0SJ?CG@Ube#dSi2C z_%=`X1w@YY4uW*AynQO<^h+1{RA#Z3A7?k3{Ag+JidTR3{5Y*_v!LOE4ia>vp!W!R zzo1hEoh@hs#wq=-gHjz8QN98`YP&b?>QUafGc`FM7GD%=!=hxnw<&jnCtp?D6WPxj zjGg4ZFdsDK%`QmX#y2@^x8hJgbF8h^QJHHBqT@J& zHkN*VL2H199o`0zUeOvL@D;5A5{^6{2S<%ZQxcTiqlfY=@b6B$M^lDyGzE^%t~Z9@ zi%gQ#E#BJ((D&IIo~2R!P~FtB+~X) zbCuCj92F*ha~1Z}Mq?lU19+&FTJSpSy2;pmSeZzYh(-(*QVbc@qaI<>PX#6UZz62c zGnacuR;rMb&QzT|Fv%NPzE|GGjEL#i7nE$GMGeUB0k2;BRM=A->B0}i*x=1?8+ecA zCm7T{q{7&M&1lZLyEW4bpzf?GT9$N|mSqBUXBARbM;2LZH2UCU88~zxFOO6RRfnL} zg4POJ2THT`1(B{7G)I)4FX%c!H;ZVr`PyDwb`X&k9T&d22Xl*d&Kmb@Rz1!+Ur#c22V=idlOlgVq;ss z)8u)tCqirLSgmX33c6U(JVDnA`l6sa1g#MCu%IUeJtyczL4OeRS3z$IY8uDOwYu79 zjH|Pty#5;>Jqfsy;=?03ThU#ub|O_jutdo(8+>6D(I7fX5VYo z9OeqabAoOXbgQ7d1+5hHsG#o)`mvz(f?gK%4?zw0Y2`E*w7sC+tb(~y&=^4z1ie?# z2L(+NG(*rug02wMF6c%gMuCt^t7O#3i_>}R|UN;sB*s+cuPS; z1P$X9Y}s3pz{CrvzOpXn~;X1uYfyH9-#wdQ8yMf__Srw!d$M;Hse4 z1yvppkqa6kXqce=1&tMSjGz`l9~N|$pic?9RM6F+RKDv4A=n~lxuE+6JtF9Pf}R)j zYe9b$^mjp}30mNH2-;5296|Fz#X*x%x^%#^GiqTG8MMa=X5Z|jQ)BEeNS8#3B;p6A z$}i83W&zCDwSDHB-kn_zc+x9+Q`;jNS~J5=WB2y8I-LtbM|JCju=`(uj`^V1Pb7Hq z6L&C?1=x&j1FCg#Wgq16(y>F!N#5AXG%+0vw1b#_2Sqj=Qq*bL{2b1Vba`Lahc!+fyFcfrVDVmt~ z^$55r)6x{ZH5KMm%oBn>E$DJV3k79@?htf8D4kOr6KOa74(Vo)|03jW+UCIosRiVn zL8-4Jw6v8o6u`X@5PeY4G(qPH`i!6}1uYVEv!JgCx=+w5LEjbhLqWe3ROQs_a{VR* zw*>WnNDCxL&@O`Z5p=Miae|H$bdsPm1kDh1k)SICwF|nDD9U$j7lOT@1JE>YiS)aI zek|yBg8m}t4MCedoFLKXPJ=<=&gG`DBAp~?5vY6SDm1)qwQ`M15YS0PJ=ELhCU$n_ps@q#|9H@NFVWaaV`rid3HpqnFIH;)k5n3aS{wOGS)4gD zZg$3kj2UxhbD!Gwz{{E>ZXo_|`4jlj5!;CrEL?6d)5=3giRyqj%>M@bY|Z^ArE+ULo46S^mKXy1*;oGr=zfrR}l^ z{4`M7%awx17hfb=(WwBB8 zHxuyg#T^0L!?7m^ghus_&Fud*X{=>VE7&qdn5$}u$8yPcl%*eST7ms{%95fvE~h0upb&5n8| zsvwF*ZHYP%^+nWgQGZ1R4GtUJXYiQ8QwL`bUOTvIu+=9zGCCuAesrst_Aygpo{U)@ zvnOVM%(pQ=#rzf%Jhb1?!l7G+o*(-8P<80lp>nJ_HY)b+*h#TdQOE7E2V>8~ejBUC zP8c?0*y3T!h7}I$JAA|NA4g0XIe+Auk;R#ORsP#nC&W_eFme{bTeW(E&ruLn4Mu z9P-4Fr9<+E93OIiNd1tGF%dB_G4o?`W7fu$#gxbFj;V+_5R));;?P+`Zw}3h&513H z-5C240$ea`GDI*>pkuxH1ME;1v5k({ZpSr$1zQ^+a|Gjz3Ff4NzIZTGh z)OFqG!*yTx)<(l*&I@Un8Ya_*sp+0mltaTZX)>n}G9l+oTT)i$5R>^B7Qv?)zCCgf26V6G zb!ezUt&9GO{+7O6-=tUSpBQV5LiPi@&Tg|hR(-2Ee}+@8@`3g%_89vQ&j-gtf8)nR z8jz`EK50uk(iUQ<_^y0aejs;1+m2CF)P?Fj)fb#QGJUN++E{LE zGU}VAIe?93DQr5+VQbh%wvFv%``BUjEj!LmvUBVryUK2`JM2Dt%zUhRR-^14x82>G z6l=Cshd1S!yr(_HzGgr0d{Z(e4?hRU5i*31pyl)?ttT`RItpEdpM?v;ZQ-8qt9VQF zk?KiV(!V5I?kNwGN6C}r+45?6y}VmKDxZ@p@JCwP1Fw0X^}W+{9YK5IX}##`D0?a}sR`&;{h{k!J_ zGXN3z=|}_;K~|ETsI@Pxq7UddQkYC-Rkq|vxtH8e9xM;XhrJ;uVQ5n2G&x<)kmtzr z<%Mzq3P)5&SNq{R-ozcht2KUcq2PpQ>vjasX^G`HrbrD(IXCFs)(cMYV@IMxCs#RyU}7)z(@tuxX$+TFcayW1howQSYI@t!L;!uvkiEj@vIT4{D`VH#QR}R=fG_d%Zm#!oT(LA=nk6lfPD|IM-2jVJWwG*; z;;SlZv=*bq;>P2&5$OEv6<6HPJ16wBK#6ya0^_7{#=L;r@5n@U+PY%>ZjHgc4NVbd2}^`?!oP$x@v68>+AAHDj!8vQF=njbk$v-2$$zj`BW8R$Kcl5>^y$|hy25~q$(#g)qUC|Hf z7xbopzKKST(ZHNz#*a!I+N+*AHk>ZyThd$p%J zT3wXAt<>E$+kM6T=Gb-mm--R?FTJkOz-VT)GeQl)U`9_P));0a7;hSB#w-BuawFHc zgYK$hHZoh99n5Z~Y}#f|v#&YG9Bz&_$C=6IG_b{7@WnE7rMbr3WNtUVG7p)*m=8?f z?7p|%L!Ao%a6bPuxg*8c7GxQFJlg zL<^~ppa}hiX^v1P{2_D|2Li39iobxV21=u$1NKSb@*n_|=XOg0uD9eGxvtVwX|IGS zy3$h_sKhH1mA937ps+Q{7s>(U7;g27a!09E>Z>i(j({*r?X3<)!%bG-RTro$FtJ~% zht(qWym}1)?a~@)tu?2MCTS6n7sItgZ3=MXLoG+!tbL^wXvNw^?WXonbL&s*?euQC zhS46NzosYYQ!(Hl=vn%wV2v-)uSfM_y%Zzqi&8yjq@q0OV8%Jdd=x3u$O1#=pj7Jt z{9BDYW0$elIB4V>g~l%MB@4%Qoyd5`D zkSTmA-_DEp4gQp^*u&BME9_PFdV7ogrM=HS>M25%mknGkNijJ?N=PaB6G-bv8`EaA zH4UaAG!!@>fh5M#>2wi2PcPFO^mm8WP?z8*1PDRG7$HTNBj$+9Uks1 z3-sGSQQxwi5Lg$itC;>yfEpjyLKM9v*+UMIK>92tUNk)*91$X&0GXRcO>dtigOA|C$$YZb#bDc8WdAUgAMLh+Pjk*CWr+LLpcDOx!IV5bue; zQVWR!=?-C-?@AA)T4@V9>OSUlhB8~(ujD(*1?93*7j4r<<=c#aeT% z1=elruJzE0;r;m#ew3f!jqT=kygk+)Z=VH4mf84k$$ebA@Z~PzCVs@91dvEFfQ%yD zsX$e_RLn*}z7>BEPXMY^$jt~TSK1(bE?tt!0Znb?XXP$(ygXJOFMlepL*b?=hcFM< zl`6#zeCeW^>OdT8sk%m8tYvAX+AVDfB+n=M4ZTKxVAMK>XlkZqo;H`V6<#4S!CDKs z<_{6wn@{5__!|C@*K!{_#E!5NG5!1P`?ibtxC-&jZqkl)Cl(n<-X)vKUUHqp(6^~W z=lr9qJ!*QgFje?kED(>0pLjq0f%I5%0ZRwTZ^^z&huO+fWwla(Z!QNewgjz@()vR$ zokUlJ7@{#OyZ^WDF4_4%y8WGj=2)QGIkU>VZ}wvS*jrW#bl?oWk#FPQ^Pl)>o`8#W zh5NX+;^Q2$j~vGwMA6>#2U<*b3j2f^p!#`Yva}R}Jx97K-<5rUB`IE=S*`@Ct<)i) zs*k9!Pc?e>^rvG`pa_jUKr*X{4*YCKWo2W-?Lq@KCWtftS@Oyx{?`W zHeF7OXd|JO&`B64Bn#W{(OpGBoGpGJI$7chahJGH`dTXVULu2biiUO?BEKppfRo;m zr^}i0e))U(gnS)*)J6$bLX=S8CQ&3sgSYwx>{G5hr8ZOp)Zw7yvFaT4efX@6>Q;4! z`mOqddP04oy0!Y+LhTdntoEyR*0^AlfsC7&%^cGJ$wZlB%(u*$=5Hv%Gpr|zfgM@J zN?0iiv|6F-hg!R=Z@qHA!m9Kt*7h)C4j*6-wMT$CzP1Z(SGF z5+UGLOY1Qk{&H*iGUP|J@|v!J05C!3|s z^PYJP;QxenAJSdaU)1~SEA_@kpb=yYH{u;*1|aH;;i-C8bC~&>nP3*0yV#%17cza2 zH4M(@1FO*b!D`H#@s7MJ_Xy)9m>yrWQkS}~7PLifbo+fo(*U~h_h&B`!&7K1Wp5kS^zX$y? zd|YYxSue)O1Lei?M{*Gq2?0-j1ZEteC1_jVHy>#Y_0~Gkr@?P-h2;r=rbq=Pl^8)L zGtqn)0RSKApyLy11I@QXasXM3{AWd>Z@850A>!+nt zU7jNEl)sT(N)x58GD2Ai&bSVDDyflB{F$orlX?-h^f}P=G;KEwoG<9PpFUF0(YJW< zOfh;GvyG)jv2n?0YlfNQ;h6WBM{%k^4C6Gmh3#j*pgN62ZI)%NriI)QGWd+6`9j$jG>pgcc; z!fwnYRg~X|gDNwkz-N z6H@Tb4DuoQo?IZ!X%~pKWV#-MSw(#XCcG@n7glP*8R41`3^Ym--xc?Ql-zJlu@G%J z(ic*N^oJzDUuHnK70DOmCJ@5ImGR1_%C_tUr`)#l7F6g?vpEZ6Dg^y3c7XlJp0a{q z&Bj znojn9=^gqPr9vbyVzKa@a9(JNJm6JvlDJ9S4<%67LCh2@y$@}F23D&*%;$KR%-!;L z=(ny)A7z-b2t;J4FRGW+>uMkJRiEX>2gI8Rv{hv$q-JF>%E{ z-v4;;O`48=Uq`po1MuJ#v=Y}=4P{mPUx=1{rNZ5!Za9L9=;`pZ-5E!9VBl70MV_bd2& zsym%^cW|x=EySKs@t=uj#rl#VO+ZVWmm0{XJP8f)zML&@kau9TPs18^M6Pp5c?^&H z3Jl>?RR#*pFpd~MfL2?ZqS?b73NoE-is;y7z@6<7PQUQqcwI=R2=wk`d#XLdo?|b7 zq5s&tR{u-Z% zW4+I_`3Am|AAusg$Zr97>fvx5ZED*%;Bb4KJq=20nY{)`d&oYHL4{HX@O3e`T_4hf zv?bk$PF_NEHi1kBDt$!OksahPIggRJPwLR8fl%G4Nqfn)1`URN76b-|HIOcfb|>D+;!2r9po2~^f-NR z$0@+T59L+z78vL6x^iEsqdpD0 z+#Q0p7p&b_Jf;Ri)hM6YFAAKoexC5FiD#M1pQds2%;#^PHLC5+uCDC z3r5=CPHHMcwyY+HSi zoQ|`m0kW52inm*btmD>sK;nHUsHb^*-W@iu7az*Uf~sZ$AXo7%Fhbw)pSj14J>iY) zXY8)F3i=vor`hj8XRWpK?IOFxF1M@x=IUTy$5n^{@gvPhFnONz00fMJQJ;Z<`50iZ z8+p-5a*5m~k4b&nl6FD^#nO>936egO=D@n|qWKV~C4jgpVC{3T@h^fIh6!&8^MuvH zP6RH;kuO~r0>uvE3!;Ut83i(&F3uH~h^x>y&TjaClj0@uw)hw@(NgO4zglOpv;y*N z3zC;3K%k3KJv2^xxf@cKNQm6w2nSPSM_vFhStoCo51@NagGq1650TR~LH~3Cu-HKI zp~@I^&^rhSmI2YXAb2T2ws}Fh?jU!0qBK-nA|rSKjr0<{(Q633r@uG_|huyqQHC~$vjks7_sePt>seP^e0Cnt1@c)3J?Vxwpby&v!pz3k@ z6n&AUp3`e;_jjzQxUBWb>ijG0-5{5W@o`+6C6 zGr;pSsUdE<1z2$uSP&?haGwz<&o9!iK=nTI895NXVjB_{m+H=5cG+!p4$?fyUWlec zPLIIGpf^tW$Z)|awe?2zzFys%?eB>(i?uUIXiK%L5T)_>vKAPYPy`wk_9G8V#rwKy z@#7{_NIK3~Lu!eOx)Emh(*PQSrW{1$5M;#D1SGggv`VNET%gkcP-!q|l!!8j$50}a zUOo( zx?MA$n0~AgYs%U&3pvJO_7!tVncHe>g<26-v=xteXJG3Cyt{4Md2k56u2h`99guxH z`4?#hET2v{V^6gQE~yZj`Zu~q7$hE$u1MFVO6ib%Uj7$Qv?1cK0OS}lLa*gW#cQ<` zFjX)TsrRrzsxo5C^=2^qXf=y*tYcO%n6;WG+biwWo-5Dr^=?x9$Q<$oIY@%AjhTh1 zucT2B?m=RfSScn-S0U5i!r+aCXFse|Dy=|}2N1vC*LxVBBi?!u$>WcR656v6))m{0 zEi4qh6#+}Q!ur(ez&ms1X@yM3*Oh?ZZ8%d8xwq^nbD;I>stvG(YJ<>uy0%O^uHDuA zkrPcoQuLQmpS6LfjzJpiU`KNW`ASo(yEO~jrFJ}t&*r)O3h#m$`N}?GpRv8`rCeXn zPRzB6Y#}xTpd0_5Tsaj*4$yve49on;ylwV?alOy_S{poXd-8l;LHJSOl5?>dtAQ*Z zrM|AZ@*ykm&u_r61VZZWkmf<)Hc*%v0jwxge^Iw%-SC4p+!}A)!HquRy6wrPK81(a zgmJy^SsoQ*WU=>so`?uY2a|43FkIF2Pe|)}LKFDgaO@m&gpI;M;izx}E=hq;dPSTs zE*AG^o0abN^nb4$!=)%GT8e?39VEp`BcymK0q!>m*=eejCZ$Um(wse!W$q=u&TYLV zvg5u`C-aP_!CIbx;()mh4sRQK$Z9eB!MqcH4hhOuzJpU_izedTrFOPgEdGrL^AY4O zh4DFxH01>(h&nw*&(Tu4Ti6f8Kcs%6euu=s4_mqbt(o?37zoAskYu;I;(prsU3&mK zy;nb^f8&j{n;7NB4G?KFvz6HnadkXmofYOPbFJxVo99`7ww}%9AAseS;0kf~Rlcrh z{0t%yNRbzN38)eh=5^s+Ayxbo%ZsKk{6u~YyR2>yT<2H^tFzV3I)@zVvZXtm14{S7 zvU-;99$=XS**l&7L{H<7>L>_8gfJ9Wy$ls@D?KZ9k%r?&$4Yy!A2|Z6a7(I^Ecr#4 zw{ys&FT=XEQ#vXi!`Q4-P9ssdtXxyVREmv_=O&848=bMa>8}mZCTPhBmYsAgeBaZ` zwHu&|KwZ}7Ks%1axRe+dF_{8P9D|;J-JF0M*oYMAo>_ync1!ep2jnY#SS%aQzJPAn z%YJ1yu^1eSfcSk_rtL^$f3_;D$H*HxaEZUfhe2ItKs0{_ZBWE7@w*VsK@Ot(%^qM0 zsN>4P>06WW@Ok%0A^o0qfIZ&;`F~!xDZC(F$D+_rY9h_WLVF2RoS)oCZieGz~TC4Eurp>#DG?J_ich!BV6 za6GbvL?l5Q!Eyg?{8jQXxr-77K+1+KIiX$G;*iQ;(;w)yNN)X%Ru0TtR|MHTkar9* z#zCXM5C6OmpYxZ|*lY&R;YkY8ux|Rm%rQU1o@AeS*gR(b1SBglFGA1VG;5I|G+-@I zkmmqICX4u|FoW4}sJm%w2@?DQ>~D+N&zP$}0q^y#7FH*Klx#V@tbRy`Mp&b*L~Dxm z4m93+#QVFf{Z;{h_?q=HKg3(x!FFdm49^ubz(*8zEwR}0jsWv}49~0 zZd#r~RNR!bf{^P1DJNs=5=r_%&T$qEU+Dcf&hVTO>Qn$fk zjra`aM3HQu&^yv>ggDC(0qm5j5dyg6r(}QhO_1Eq`w+q*@&I`=0!a~!oCu^ZQzF1n z#cESc&|cLRK~7yol+#C_t?$+!>(3bj5aR5F*uIMpr?2@oGPZ|i7hH5c3qWv_VlBnZ zT>)_Q=5zU4{saG$zi3Z{Q@ZHEitsv~MZK#LJm5L<2hnJTLl4u3cyqDK^fw*ijlPEy8A?4g}_C?3(V#FJPt{sT0w~b+u@$g9@PTY$&<{@V~F|tTEKUpB!7q zD`XunRKWRvvj+iI0ySQumvS*t!4RSQ2bPq2HE7waC=v?&Ez(yLYOSc49m+H#O@=I z6(?cGo{s(cLOBa2e?7LCyW|iEk}#xxsa6_5r4ma)7x&}AoB&#)cr=f}YA}hX17I?F z78V0Jd_6x1m?`FE4lm~wyb|>1Z?{1whoFDRI$UhlO3}S<%e_oO-#QJy_g0CX6SS%CE@gS%YZn6bW=3;qSq?ciBS*3A1DDLBP8NbWA3?#nUB4&~jzA zE7$FPK<7uoAfCdJGbcc#W}++3csrt!R1>Ebf+_$DNQQPugl_dX)nf?aJoOJo^~3SB zD@jPh(|}ymycl)<|1E=tdPk$ysdzKA2^B6ughweT zJQEcyCn6|IcQ8boP^~j^E%KuC#Y{EWCc$g~F666-u?z3!Ir_^eRAw z3;Y&<<%AQAcLD@KRFsj3)pI7+&bi1ec41jj3b9pbRHL45_!EL-oVceuswASwFww59M}+R#{nM_QSUT60~nEs zm3A)lULG(a-#&)71tq9{1>mj*A+_6;=EVs=EJ%aEdZC1PyCE8{`QnHZ59~_@?q%R% zRwh|Na>*u=hlON5fTI}DQAR3A6^x_{CNh8q0YF00EgB8~4+AEG0n@;M^U*ykXfALh z4@lzaqGG7TGW1f_f33i9z=;1;f(0!ogdxk~V`q2m8+u~?*#@kk(( z@jxvD8b1^JkX*D}9)JaZu?(Qa(|Q$NU~xf?1xP_amr!pbhC}wpLh{E$?k59ZGSHNn zu;sa))^xDv&Iia817^z5qgB{;w*kaN1M|~iemod|25%|cia%O377LaHyiS>q2Rgfe z8l`AZe?0$^;EbctqJyw6OF*Nh;z{5f1ix8oj=COO!d>b?xSk?B5%e@~CEQ;v)W1KJ zzwtzp7waWnK>F{l z{&!P{W99WXJS8GxO~d<&|7r0&yr{^Bt^{O7!iiVF=++=~@I$W$nZahLx8uXjXrNde ij7H)=ST^6xgw`uIE3r!sU;FH?y*Bj# diff --git a/Test/120.frag b/Test/120.frag index c00eccbc..e6ed62a6 100644 --- a/Test/120.frag +++ b/Test/120.frag @@ -114,3 +114,12 @@ void v2() { return v1(); // ERROR, no expression allowed, even though void } + +void atest() +{ + vec4 v = gl_TexCoord[1]; + v += gl_TexCoord[3]; +} + +varying vec4 gl_TexCoord[6]; // okay, assigning a size +varying vec4 gl_TexCoord[5]; // ERROR, changing size diff --git a/Test/baseResults/120.frag.out b/Test/baseResults/120.frag.out index 7d28dcd6..49efdfc2 100644 --- a/Test/baseResults/120.frag.out +++ b/Test/baseResults/120.frag.out @@ -27,7 +27,8 @@ ERROR: 0:94: 'a' : variables with qualifier 'const' must be initialized ERROR: 0:97: 'out' : overloaded functions must have the same parameter qualifiers ERROR: 0:99: 'return' : function return is not matching type: ERROR: 0:115: 'return' : void function cannot return a value -ERROR: 29 compilation errors. No code generated. +ERROR: 0:125: 'gl_TexCoord' : redeclaration of array with size +ERROR: 30 compilation errors. No code generated. ERROR: node is still EOpNull! 0:21 Function Definition: main( (void) @@ -265,6 +266,20 @@ ERROR: node is still EOpNull! 0:115 Sequence 0:115 Branch: Return with expression 0:115 Function Call: v1( (void) +0:118 Function Definition: atest( (void) +0:118 Function Parameters: +0:120 Sequence +0:120 Sequence +0:120 move second child to first child (4-component vector of float) +0:120 'v' (4-component vector of float) +0:120 direct index (smooth in 4-component vector of float) +0:120 'gl_TexCoord' (smooth in unsized array of 4-component vector of float) +0:120 1 (const int) +0:121 add second child into first child (4-component vector of float) +0:121 'v' (4-component vector of float) +0:121 direct index (smooth in 4-component vector of float) +0:121 'gl_TexCoord' (smooth in unsized array of 4-component vector of float) +0:121 3 (const int) 0:? Linker Objects 0:? 'i' (smooth in 4-component vector of float) 0:? 'o' (out 4-component vector of float) diff --git a/Test/baseResults/300.vert.out b/Test/baseResults/300.vert.out index 7f75c657..550b7483 100644 --- a/Test/baseResults/300.vert.out +++ b/Test/baseResults/300.vert.out @@ -134,7 +134,7 @@ ERROR: node is still EOpNull! 0:? 'rep2' (centroid smooth sample out highp 4-component vector of float) 0:? 'rep3' (in highp 4-component vector of float) 0:? 's' (smooth out structure) -0:? 'ubInst' (layout(shared ) uniform 1-element array of block) +0:? 'ubInst' (layout(shared ) uniform unsized array of block) 0:? 'gl_VertexID' (gl_VertexId highp int) 0:? 'gl_InstanceID' (gl_InstanceId highp int) diff --git a/Test/baseResults/array100.frag.out b/Test/baseResults/array100.frag.out index 83577c95..4dd0235f 100644 --- a/Test/baseResults/array100.frag.out +++ b/Test/baseResults/array100.frag.out @@ -5,7 +5,7 @@ ERROR: 0:9: 'arrayed type' : not supported for this version or the enabled exten ERROR: 0:11: 'arrayed constructor' : not supported for this version or the enabled extensions ERROR: 0:21: '[' : array index out of range '2' ERROR: 0:25: 'assign' : cannot convert from '4-element array of mediump float' to '5-element array of mediump float' -ERROR: 0:26: 'assign' : cannot convert from '4-element array of mediump float' to '1-element array of mediump float' +ERROR: 0:26: 'assign' : cannot convert from '4-element array of mediump float' to 'unsized array of mediump float' ERROR: 0:28: 'foo' : no matching overloaded function found ERROR: 0:31: 'arrayed constructor' : not supported for this version or the enabled extensions ERROR: 0:35: '[' : array index out of range '5' @@ -49,7 +49,7 @@ ERROR: node is still EOpNull! 0:24 Function Call: foo(f1[5]; (4-element array of mediump float) 0:24 'g5' (5-element array of mediump float) 0:25 'g5' (5-element array of mediump float) -0:26 'gu' (1-element array of mediump float) +0:26 'gu' (unsized array of mediump float) 0:28 0.000000 0:29 Function Call: bar(f1[5]; (void) 0:29 'g5' (5-element array of mediump float) @@ -64,7 +64,7 @@ ERROR: node is still EOpNull! 0:31 true case 0:32 move second child to first child (mediump float) 0:32 direct index (mediump float) -0:32 'gu' (1-element array of mediump float) +0:32 'gu' (unsized array of mediump float) 0:32 0 (const int) 0:32 2.000000 0:35 move second child to first child (mediump float) diff --git a/glslang/Include/Types.h b/glslang/Include/Types.h index e4f60555..feee5b94 100644 --- a/glslang/Include/Types.h +++ b/glslang/Include/Types.h @@ -174,12 +174,21 @@ inline TIdentifierList* NewPoolTIdentifierList() // for the vast majority of non-array types. Note that means if it // is used, it will be containing at least one size. -typedef TVector* TArraySizes; +struct TArraySizes { + TArraySizes() : maxArraySize(0) { } + int getSize() { return sizes.front(); } // TArraySizes only exists if there is at least one dimension + void setSize(int s) { sizes.push_back(s); } + bool isArrayOfArrays() { return sizes.size() > 1; } +protected: + TVector sizes; + friend class TType; + int maxArraySize; // for tracking maximum referenced index, before an explicit size is given +}; -inline TArraySizes NewPoolTArraySizes() +inline TArraySizes* NewPoolTArraySizes() { - void* memory = GetThreadPoolAllocator().allocate(sizeof(TVector)); - return new(memory) TVector; + void* memory = GetThreadPoolAllocator().allocate(sizeof(TArraySizes)); + return new(memory) TArraySizes; } // @@ -347,7 +356,7 @@ public: int vectorSize : 4; int matrixCols : 4; int matrixRows : 4; - TArraySizes arraySizes; + TArraySizes* arraySizes; const TType* userDef; TSourceLoc loc; @@ -398,16 +407,16 @@ public: typedef std::map TStructureMap; typedef std::map::const_iterator TStructureMapIterator; + // // Base class for things that have a type. // class TType { public: POOL_ALLOCATOR_NEW_DELETE(GetThreadPoolAllocator()) - explicit TType(TBasicType t, TStorageQualifier q = EvqTemporary, int vs = 1, int mc = 0, int mr = 0) : + explicit TType(TBasicType t = EbtVoid, TStorageQualifier q = EvqTemporary, int vs = 1, int mc = 0, int mr = 0) : basicType(t), vectorSize(vs), matrixCols(mc), matrixRows(mr), arraySizes(0), - structure(0), structureSize(0), maxArraySize(0), arrayInformationType(0), - fieldName(0), typeName(0) + structure(0), structureSize(0), fieldName(0), typeName(0) { sampler.clear(); qualifier.clear(); @@ -415,8 +424,7 @@ public: } TType(TBasicType t, TStorageQualifier q, TPrecisionQualifier p, int vs = 1, int mc = 0, int mr = 0) : basicType(t), vectorSize(vs), matrixCols(mc), matrixRows(mr), arraySizes(0), - structure(0), structureSize(0), maxArraySize(0), arrayInformationType(0), - fieldName(0), typeName(0) + structure(0), structureSize(0), fieldName(0), typeName(0) { sampler.clear(); qualifier.clear(); @@ -426,7 +434,7 @@ public: } explicit TType(const TPublicType &p) : basicType(p.basicType), vectorSize(p.vectorSize), matrixCols(p.matrixCols), matrixRows(p.matrixRows), arraySizes(p.arraySizes), - structure(0), structureSize(0), maxArraySize(0), arrayInformationType(0), fieldName(0), typeName(0) + structure(0), structureSize(0), fieldName(0), typeName(0) { if (basicType == EbtSampler) sampler = p.sampler; @@ -440,7 +448,7 @@ public: } TType(TTypeList* userDef, const TString& n, TStorageQualifier blockQualifier = EvqGlobal) : basicType(EbtStruct), vectorSize(1), matrixCols(0), matrixRows(0), arraySizes(0), - structure(userDef), maxArraySize(0), arrayInformationType(0), fieldName(0) + structure(userDef), fieldName(0) { sampler.clear(); qualifier.clear(); @@ -451,32 +459,37 @@ public: } typeName = NewPoolTString(n.c_str()); } - TType() {} virtual ~TType() {} - - // "dumb" copy, using built-in operator=(), not for use across pool pops. - // It will also cause multiple copies of TType to point to the same information. - // This only works if that information (like a structure's list of types) does not - // change. - explicit TType(const TType& type) { *this = type; } - - void copyType(const TType& copyOf, const TStructureMap& remapper) - { + + // Not for use across pool pops; it will cause multiple instances of TType to point to the same information. + // This only works if that information (like a structure's list of types) does not change and + // the instances are sharing the same pool. + void shallowCopy(const TType& copyOf) + { basicType = copyOf.basicType; sampler = copyOf.sampler; qualifier = copyOf.qualifier; vectorSize = copyOf.vectorSize; matrixCols = copyOf.matrixCols; matrixRows = copyOf.matrixRows; + arraySizes = copyOf.arraySizes; + structure = copyOf.structure; + structureSize = copyOf.structureSize; + fieldName = copyOf.fieldName; + typeName = copyOf.typeName; + } - if (copyOf.arraySizes) { + void deepCopy(const TType& copyOf, const TStructureMap& remapper) + { + shallowCopy(copyOf); + + if (arraySizes) { arraySizes = NewPoolTArraySizes(); *arraySizes = *copyOf.arraySizes; - } else - arraySizes = 0; + } - TStructureMapIterator iter; - if (copyOf.structure) { + if (structure) { + TStructureMapIterator iter; if ((iter = remapper.find(structure)) == remapper.end()) { // create the new structure here structure = NewPoolTTypeList(); @@ -489,20 +502,12 @@ public: } else { structure = iter->second; } - } else - structure = 0; + } - fieldName = 0; - if (copyOf.fieldName) + if (fieldName) fieldName = NewPoolTString(copyOf.fieldName->c_str()); - typeName = 0; - if (copyOf.typeName) + if (typeName) typeName = NewPoolTString(copyOf.typeName->c_str()); - - structureSize = copyOf.structureSize; - maxArraySize = copyOf.maxArraySize; - assert(copyOf.arrayInformationType == 0); - arrayInformationType = 0; // arrayInformationType should not be set for builtIn symbol table level } // Merge type from parent, where a parentType is at the beginning of a declaration, @@ -523,17 +528,16 @@ public: TType* clone(const TStructureMap& remapper) { TType *newType = new TType(); - newType->copyType(*this, remapper); + newType->deepCopy(*this, remapper); return newType; } virtual void dereference() { - if (arraySizes) { + if (arraySizes) arraySizes = 0; - maxArraySize = 0; - } else if (matrixCols > 0) { + else if (matrixCols > 0) { vectorSize = matrixRows; matrixCols = 0; matrixRows = 0; @@ -576,8 +580,8 @@ public: virtual bool isMatrix() const { return matrixCols ? true : false; } virtual bool isArray() const { return arraySizes != 0; } - int getArraySize() const { return arraySizes->front(); } - void setArraySizes(TArraySizes s) + int getArraySize() const { return arraySizes->sizes.front(); } + void setArraySizes(TArraySizes* s) { // copy; we don't want distinct types sharing the same descriptor if (! arraySizes) @@ -585,11 +589,9 @@ public: *arraySizes = *s; } - void changeArraySize(int s) { arraySizes->front() = s; } - void setMaxArraySize (int s) { maxArraySize = s; } - int getMaxArraySize () const { return maxArraySize; } - void setArrayInformationType(TType* t) { arrayInformationType = t; } - TType* getArrayInformationType() { return arrayInformationType; } + void changeArraySize(int s) { arraySizes->sizes.front() = s; } + void setMaxArraySize (int s) { arraySizes->maxArraySize = s; } + int getMaxArraySize () const { return arraySizes->maxArraySize; } virtual bool isVector() const { return vectorSize > 1; } virtual bool isScalar() const { return vectorSize == 1; } const char* getBasicString() const @@ -660,10 +662,10 @@ public: if (qualifier.storage != EvqTemporary && qualifier.storage != EvqGlobal) p += snprintf(p, end - p, "%s ", getStorageQualifierString()); if (arraySizes) { - if (arraySizes->front() == 0) + if (arraySizes->sizes.front() == 0) p += snprintf(p, end - p, "unsized array of "); else - p += snprintf(p, end - p, "%d-element array of ", arraySizes->front()); + p += snprintf(p, end - p, "%d-element array of ", arraySizes->sizes.front()); } if (qualifier.precision != EpqNone) p += snprintf(p, end - p, "%s ", getPrecisionQualifierString()); @@ -706,6 +708,8 @@ public: if (isArray()) totalSize *= Max(getArraySize(), getMaxArraySize()); + // TODO: desktop arrays: it should be ill-defined to get object size if the array is not sized, so the max() above maybe should be an assert + return totalSize; } @@ -730,7 +734,7 @@ public: { return sameElementType(right) && (arraySizes == 0 && right.arraySizes == 0 || - (arraySizes && right.arraySizes && *arraySizes == *right.arraySizes)); + (arraySizes && right.arraySizes && arraySizes->sizes == right.arraySizes->sizes)); // don't check the qualifier, it's not ever what's being sought after } @@ -740,6 +744,10 @@ public: } protected: + // Require consumer to pick between deep copy and shallow copy. + TType(const TType& type); + TType& operator=(const TType& type); + void buildMangledName(TString&); int getStructSize() const; @@ -750,12 +758,10 @@ protected: TSampler sampler; TQualifier qualifier; - TArraySizes arraySizes; + TArraySizes* arraySizes; - TTypeList* structure; // 0 unless this is a struct - mutable int structureSize; // a cache, updated on first access - int maxArraySize; - TType* arrayInformationType; + TTypeList* structure; // 0 unless this is a struct + mutable int structureSize; // a cache, updated on first access TString *fieldName; // for structure field names TString *typeName; // for structure field type name }; diff --git a/glslang/Include/intermediate.h b/glslang/Include/intermediate.h index f87428a4..d735bda1 100644 --- a/glslang/Include/intermediate.h +++ b/glslang/Include/intermediate.h @@ -372,11 +372,11 @@ struct TIntermNodePair { // class TIntermTyped : public TIntermNode { public: - TIntermTyped(const TType& t) : type(t) { } + TIntermTyped(const TType& t) { type.shallowCopy(t); } virtual TIntermTyped* getAsTyped() { return this; } - virtual void setType(const TType& t) { type = t; } + virtual void setType(const TType& t) { type.shallowCopy(t); } virtual const TType& getType() const { return type; } - virtual TType* getTypePointer() { return &type; } + virtual TType& getWritableType() { return type; } virtual TBasicType getBasicType() const { return type.getBasicType(); } virtual TQualifier& getQualifier() { return type.getQualifier(); } diff --git a/glslang/MachineIndependent/Constant.cpp b/glslang/MachineIndependent/Constant.cpp index 77cfcb1a..8aa4ed8e 100644 --- a/glslang/MachineIndependent/Constant.cpp +++ b/glslang/MachineIndependent/Constant.cpp @@ -71,7 +71,8 @@ bool CompareStruct(const TType& leftNodeType, TConstUnion* rightUnionArray, TCon bool CompareStructure(const TType& leftNodeType, TConstUnion* rightUnionArray, TConstUnion* leftUnionArray) { if (leftNodeType.isArray()) { - TType typeWithoutArrayness(leftNodeType); + TType typeWithoutArrayness; + typeWithoutArrayness.shallowCopy(leftNodeType); // TODO: arrays of arrays: the shallow copy won't work if arrays are shared and dereferenced typeWithoutArrayness.dereference(); int arraySize = leftNodeType.getArraySize(); @@ -137,7 +138,8 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, TIntermTyped* constantNod // For most cases, the return type matches the argument type, so set that // up and just code to exceptions below. - TType returnType(getType()); + TType returnType; + returnType.shallowCopy(getType()); // // A pair of nodes is to be folded together @@ -157,7 +159,7 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, TIntermTyped* constantNod unionArray = new TConstUnion[constantNode->getType().getObjectSize()]; for (int i = 0; i < constantNode->getType().getObjectSize(); ++i) unionArray[i] = *getUnionArrayPointer(); - returnType = node->getType(); + returnType.shallowCopy(node->getType()); objectSize = constantNode->getType().getObjectSize(); } @@ -192,7 +194,7 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, TIntermTyped* constantNod newConstArray[column * getMatrixRows() + row].setDConst(sum); } } - returnType = TType(getType().getBasicType(), EvqConst, 0, getMatrixRows(), node->getMatrixCols()); + returnType.shallowCopy(TType(getType().getBasicType(), EvqConst, 0, getMatrixRows(), node->getMatrixCols())); break; case EOpDiv: newConstArray = new TConstUnion[objectSize]; @@ -232,7 +234,7 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, TIntermTyped* constantNod newConstArray[i].setDConst(sum); } - returnType = TType(getBasicType(), EvqConst, getMatrixRows()); + returnType.shallowCopy(TType(getBasicType(), EvqConst, getMatrixRows())); break; case EOpVectorTimesMatrix: @@ -244,7 +246,7 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, TIntermTyped* constantNod newConstArray[i].setDConst(sum); } - returnType = TType(getBasicType(), EvqConst, node->getMatrixCols()); + returnType.shallowCopy(TType(getBasicType(), EvqConst, node->getMatrixCols())); break; case EOpMod: @@ -307,13 +309,13 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, TIntermTyped* constantNod assert(objectSize == 1); newConstArray = new TConstUnion[1]; newConstArray->setBConst(*unionArray < *rightUnionArray); - returnType = TType(EbtBool, EvqConst); + returnType.shallowCopy(TType(EbtBool, EvqConst)); break; case EOpGreaterThan: assert(objectSize == 1); newConstArray = new TConstUnion[1]; newConstArray->setBConst(*unionArray > *rightUnionArray); - returnType = TType(EbtBool, EvqConst); + returnType.shallowCopy(TType(EbtBool, EvqConst)); break; case EOpLessThanEqual: { @@ -322,7 +324,7 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, TIntermTyped* constantNod constant.setBConst(*unionArray > *rightUnionArray); newConstArray = new TConstUnion[1]; newConstArray->setBConst(!constant.getBConst()); - returnType = TType(EbtBool, EvqConst); + returnType.shallowCopy(TType(EbtBool, EvqConst)); break; } case EOpGreaterThanEqual: @@ -332,7 +334,7 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, TIntermTyped* constantNod constant.setBConst(*unionArray < *rightUnionArray); newConstArray = new TConstUnion[1]; newConstArray->setBConst(!constant.getBConst()); - returnType = TType(EbtBool, EvqConst); + returnType.shallowCopy(TType(EbtBool, EvqConst)); break; } @@ -351,7 +353,7 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, TIntermTyped* constantNod newConstArray = new TConstUnion[1]; newConstArray->setBConst(! boolNodeFlag); - returnType = TType(EbtBool, EvqConst); + returnType.shallowCopy(TType(EbtBool, EvqConst)); break; case EOpNotEqual: @@ -369,7 +371,7 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, TIntermTyped* constantNod newConstArray = new TConstUnion[1]; newConstArray->setBConst(! boolNodeFlag); - returnType = TType(EbtBool, EvqConst); + returnType.shallowCopy(TType(EbtBool, EvqConst)); break; default: @@ -607,7 +609,7 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType) } TIntermConstantUnion *newNode = new TIntermConstantUnion(newConstArray, returnType); - newNode->getTypePointer()->getQualifier().storage = EvqConst; + newNode->getWritableType().getQualifier().storage = EvqConst; newNode->setLoc(getLoc()); return newNode; @@ -775,7 +777,7 @@ TIntermTyped* TIntermediate::fold(TIntermAggregate* aggrNode) } TIntermConstantUnion *newNode = new TIntermConstantUnion(newConstArray, aggrNode->getType()); - newNode->getTypePointer()->getQualifier().storage = EvqConst; + newNode->getWritableType().getQualifier().storage = EvqConst; newNode->setLoc(aggrNode->getLoc()); return newNode; diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp index 7739d74a..0080c771 100644 --- a/glslang/MachineIndependent/Initialize.cpp +++ b/glslang/MachineIndependent/Initialize.cpp @@ -1654,8 +1654,8 @@ void IdentifyBuiltIns(int version, EProfile profile, EShLanguage language, TSymb if (version < FirstProfileVersion || profile == ECompatibilityProfile || (! ForwardCompatibility && profile != EEsProfile && version < 420)) { TPrecisionQualifier pq = profile == EEsProfile ? EpqMedium : EpqNone; TType fragData(EbtFloat, EvqFragColor, 4); - TArraySizes arraySizes = NewPoolTArraySizes(); - arraySizes->push_back(resources.maxDrawBuffers); + TArraySizes* arraySizes = NewPoolTArraySizes(); + arraySizes->setSize(resources.maxDrawBuffers); fragData.setArraySizes(arraySizes); symbolTable.insert(*new TVariable(NewPoolTString("gl_FragData"), fragData)); } diff --git a/glslang/MachineIndependent/Intermediate.cpp b/glslang/MachineIndependent/Intermediate.cpp index 9baa2934..a4847422 100644 --- a/glslang/MachineIndependent/Intermediate.cpp +++ b/glslang/MachineIndependent/Intermediate.cpp @@ -716,8 +716,8 @@ TIntermTyped* TIntermediate::addComma(TIntermTyped* left, TIntermTyped* right, T TIntermTyped *commaAggregate = growAggregate(left, right, loc); commaAggregate->getAsAggregate()->setOperator(EOpComma); commaAggregate->setType(right->getType()); - commaAggregate->getTypePointer()->getQualifier().storage = EvqTemporary; - commaAggregate->getTypePointer()->getQualifier().precision = right->getTypePointer()->getQualifier().precision; + commaAggregate->getWritableType().getQualifier().storage = EvqTemporary; + commaAggregate->getWritableType().getQualifier().precision = right->getType().getQualifier().precision; return commaAggregate; } @@ -1028,7 +1028,7 @@ bool TIntermUnary::promote() } setType(operand->getType()); - getTypePointer()->getQualifier().storage = EvqTemporary; + getWritableType().getQualifier().storage = EvqTemporary; return true; } diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index b03063e2..2ad40e7d 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -482,8 +482,7 @@ TIntermTyped* TParseContext::handleVariable(TSourceLoc loc, TSymbol* symbol, TSt if (variable->getType().getQualifier().storage == EvqConst ) { TConstUnion* constArray = variable->getConstUnionPointer(); - TType t(variable->getType()); - node = intermediate.addConstantUnion(constArray, t, loc); + node = intermediate.addConstantUnion(constArray, variable->getType(), loc); } else node = intermediate.addSymbol(variable->getUniqueId(), variable->getName(), variable->getType(), loc); } @@ -527,9 +526,7 @@ TIntermTyped* TParseContext::handleBracketDereference(TSourceLoc loc, TIntermTyp if (base->isArray()) { if (base->getType().getArraySize() == 0) { if (base->getType().getMaxArraySize() <= index->getAsConstantUnion()->getUnionArrayPointer()->getIConst()) - arraySetMaxSize(base->getAsSymbolNode(), base->getTypePointer(), index->getAsConstantUnion()->getUnionArrayPointer()->getIConst(), true, loc); - else - arraySetMaxSize(base->getAsSymbolNode(), base->getTypePointer(), 0, false, loc); + arraySetMaxSize(loc, base->getAsSymbolNode(), index->getAsConstantUnion()->getUnionArrayPointer()->getIConst() + 1); } else if ( index->getAsConstantUnion()->getUnionArrayPointer()->getIConst() >= base->getType().getArraySize() || index->getAsConstantUnion()->getUnionArrayPointer()->getIConst() < 0) error(loc, "", "[", "array index out of range '%d'", index->getAsConstantUnion()->getUnionArrayPointer()->getIConst()); @@ -554,7 +551,8 @@ TIntermTyped* TParseContext::handleBracketDereference(TSourceLoc loc, TIntermTyp unionArray->setDConst(0.0); result = intermediate.addConstantUnion(unionArray, TType(EbtFloat, EvqConst), loc); } else { - TType newType(base->getType()); + TType newType; + newType.shallowCopy(base->getType()); if (base->getType().getQualifier().storage == EvqConst && index->getQualifier().storage == EvqConst) newType.getQualifier().storage = EvqConst; newType.dereference(); @@ -634,7 +632,7 @@ TIntermTyped* TParseContext::handleDotDereference(TSourceLoc loc, TIntermTyped* result->setType(*(*fields)[i].type); // change the qualifier of the return type, not of the structure field // as the structure definition is shared between various structures. - result->getTypePointer()->getQualifier().storage = EvqConst; + result->getWritableType().getQualifier().storage = EvqConst; } } else { TConstUnion *unionArray = new TConstUnion[1]; @@ -1213,7 +1211,7 @@ bool TParseContext::reservedErrorCheck(TSourceLoc loc, const TString& identifier // bool TParseContext::constructorError(TSourceLoc loc, TIntermNode* node, TFunction& function, TOperator op, TType& type) { - type = function.getReturnType(); + type.shallowCopy(function.getReturnType()); bool constructingMatrix = false; switch(op) { @@ -1617,33 +1615,6 @@ bool TParseContext::containsSampler(const TType& type) return false; } -bool TParseContext::insertBuiltInArrayAtGlobalLevel() -{ - TString *name = NewPoolTString("gl_TexCoord"); - TSymbol* symbol = symbolTable.find(*name); - if (! symbol) { - // assume it was not added due to version/profile - - return false; - } - const TVariable* variable = symbol->getAsVariable(); - - if (! variable) { - infoSink.info.message(EPrefixInternalError, "variable expected"); - return true; - } - - TVariable* newVariable = new TVariable(name, variable->getType()); - - if (! symbolTable.insert(*newVariable)) { - delete newVariable; - infoSink.info.message(EPrefixInternalError, "inserting new symbol"); - return true; - } - - return false; -} - // // Do size checking for an array type's size. // @@ -1688,7 +1659,7 @@ bool TParseContext::arrayQualifierError(TSourceLoc loc, const TPublicType& type) // // Require array to have size // -void TParseContext::arraySizeRequiredCheck(TSourceLoc loc, int& size) +void TParseContext::arraySizeRequiredCheck(TSourceLoc loc, int size) { if (size == 0) { error(loc, "array size required", "", ""); @@ -1703,18 +1674,18 @@ void TParseContext::arrayDimError(TSourceLoc loc) profileRequires(loc, ECompatibilityProfile, 430, 0, "arrays of arrays"); } -void TParseContext::arrayDimCheck(TSourceLoc loc, TArraySizes sizes1, TArraySizes sizes2) +void TParseContext::arrayDimCheck(TSourceLoc loc, TArraySizes* sizes1, TArraySizes* sizes2) { if (sizes1 && sizes2 || - sizes1 && sizes1->size() > 1 || - sizes2 && sizes2->size() > 1) + sizes1 && sizes1->isArrayOfArrays() || + sizes2 && sizes2->isArrayOfArrays()) arrayDimError(loc); } -void TParseContext::arrayDimCheck(TSourceLoc loc, const TType* type, TArraySizes sizes2) +void TParseContext::arrayDimCheck(TSourceLoc loc, const TType* type, TArraySizes* sizes2) { if (type && type->isArray() && sizes2 || - sizes2 && sizes2->size() > 1) + sizes2 && sizes2->isArrayOfArrays()) arrayDimError(loc); } @@ -1733,6 +1704,8 @@ void TParseContext::arrayCheck(TSourceLoc loc, TString& identifier, const TPubli // However, reserved arrays cannot be modified in a shared symbol table, so add a new // one at a non-shared level in the table. // + // Redeclarations have to take place at the same scope; otherwise they are hiding declarations + // bool currentScope; TSymbol* symbol = symbolTable.find(identifier, 0, ¤tScope); @@ -1764,23 +1737,19 @@ void TParseContext::arrayCheck(TSourceLoc loc, TString& identifier, const TPubli return; } - TType* t = variable->getArrayInformationType(); - while (t != 0) { - if (t->getMaxArraySize() > type.arraySizes->front()) { - error(loc, "higher index value already used for the array", identifier.c_str(), ""); - return; - } - t->setArraySizes(type.arraySizes); - t = t->getArrayInformationType(); - } + // For read-only built-ins, add a new variable for holding the declared array size of an implicitly-sized shared array. + if (variable->isReadOnly()) + variable = symbolTable.copyUp(variable); + // TODO: desktop unsized arrays: include modified built-in arrays (gl_TexCoord) in the linker objects subtree + variable->getWritableType().setArraySizes(type.arraySizes); } voidErrorCheck(loc, identifier, type); } -bool TParseContext::arraySetMaxSize(TIntermSymbol *node, TType* type, int size, bool updateFlag, TSourceLoc loc) +bool TParseContext::arraySetMaxSize(TSourceLoc loc, TIntermSymbol *node, int size) { TSymbol* symbol = symbolTable.find(node->getName()); if (symbol == 0) { @@ -1794,41 +1763,26 @@ bool TParseContext::arraySetMaxSize(TIntermSymbol *node, TType* type, int size, return true; } - // There are multiple copies of the array type tagging results of operations. - // Chain these together, so they can all reflect the final size. - type->setArrayInformationType(variable->getArrayInformationType()); - variable->updateArrayInformationType(type); + // TODO: desktop linker: make this a link-time check (note if it's here, an explicit declaration skips it) + //if (node->getName() == "gl_TexCoord") { + // TSymbol* texCoord = symbolTable.find("gl_MaxTextureCoords"); + // if (! texCoord || ! texCoord->getAsVariable()) { + // infoSink.info.message(EPrefixInternalError, "gl_MaxTextureCoords not defined", loc); + // return true; + // } - // special casing to test index value of gl_TexCoord. If the accessed index is >= gl_MaxTextureCoords - // its an error - if (node->getName() == "gl_TexCoord") { - TSymbol* texCoord = symbolTable.find("gl_MaxTextureCoords"); - if (! texCoord || ! texCoord->getAsVariable()) { - infoSink.info.message(EPrefixInternalError, "gl_MaxTextureCoords not defined", loc); - return true; - } + // int texCoordValue = texCoord->getAsVariable()->getConstUnionPointer()[0].getIConst(); + // if (texCoordValue <= size) { + // error(loc, "", "[", "gl_TexCoord can only have a max array size of up to gl_MaxTextureCoords", ""); + // return true; + // } + //} - int texCoordValue = texCoord->getAsVariable()->getConstUnionPointer()[0].getIConst(); - if (texCoordValue <= size) { - error(loc, "", "[", "gl_TexCoord can only have a max array size of up to gl_MaxTextureCoords", ""); - return true; - } - } + // For read-only built-ins, add a new variable for holding the maximum array size of an implicitly-sized shared array. + if (variable->isReadOnly()) + variable = symbolTable.copyUp(variable); - // We don't want to update the maxArraySize when this flag is not set, we just want to include this - // node type in the chain of node types so that it's updated when a higher maxArraySize comes in. - if (! updateFlag) - return false; - - size++; variable->getWritableType().setMaxArraySize(size); - type->setMaxArraySize(size); - TType* tt = type; - - while(tt->getArrayInformationType() != 0) { - tt = tt->getArrayInformationType(); - tt->setMaxArraySize(size); - } return false; } @@ -2104,9 +2058,10 @@ TIntermTyped* TParseContext::addConstructor(TIntermNode* node, const TType& type if (op == EOpConstructStruct) memberTypes = type.getStruct()->begin(); - TType elementType(type); + TType elementType; + elementType.shallowCopy(type); if (type.isArray()) - elementType.dereference(); + elementType.dereference(); // TODO: arrays of arrays: shallow copy won't work if sharing same array structure and then doing a dereference bool singleArg; if (aggrNode) { @@ -2280,7 +2235,7 @@ TIntermTyped* TParseContext::constructStruct(TIntermNode* node, const TType& typ // // Do everything needed to add an interface block. // -void TParseContext::addBlock(TSourceLoc loc, TTypeList& typeList, const TString* instanceName, TArraySizes arraySizes) +void TParseContext::addBlock(TSourceLoc loc, TTypeList& typeList, const TString* instanceName, TArraySizes* arraySizes) { // First, error checks @@ -2291,7 +2246,7 @@ void TParseContext::addBlock(TSourceLoc loc, TTypeList& typeList, const TString* return; if (profile == EEsProfile && arraySizes) - arraySizeRequiredCheck(loc, arraySizes->front()); + arraySizeRequiredCheck(loc, arraySizes->getSize()); if (currentBlockDefaults.storage == EvqUniform) { requireProfile(loc, (EProfileMask)(~ENoProfileMask), "uniform block"); @@ -2370,8 +2325,7 @@ void TParseContext::addBlock(TSourceLoc loc, TTypeList& typeList, const TString* // For an identifier that is already declared, add more qualification to it. void TParseContext::addQualifierToExisting(TSourceLoc loc, TQualifier qualifier, const TString& identifier) { - bool sharedLevel; - TSymbol* existing = symbolTable.find(identifier, 0, 0, &sharedLevel); + TSymbol* existing = symbolTable.find(identifier); TVariable* variable = existing ? existing->getAsVariable() : 0; if (! variable) { error(loc, "identifier not previously declared", identifier.c_str(), ""); @@ -2389,13 +2343,9 @@ void TParseContext::addQualifierToExisting(TSourceLoc loc, TQualifier qualifier, return; } - // - // Don't change a shared variable; rather add a new one at the current scope. - // - if (sharedLevel) { - variable = new TVariable(&variable->getName(), variable->getType()); - symbolTable.insert(*variable); - } + // For read-only built-ins, add a new variable for holding the modified qualifier. + if (variable->isReadOnly()) + variable = symbolTable.copyUp(variable); if (qualifier.invariant) variable->getWritableType().getQualifier().invariant = true; @@ -2646,8 +2596,9 @@ TIntermTyped* TParseContext::addConstArrayNode(int index, TIntermTyped* node, TS TIntermTyped* typedNode; TIntermConstantUnion* tempConstantNode = node->getAsConstantUnion(); int arraySize = node->getType().getArraySize(); - TType arrayElementType(node->getType()); - arrayElementType.dereference(); + TType arrayElementType; + arrayElementType.shallowCopy(node->getType()); + arrayElementType.dereference(); // TODO: arrays of arrays: shallow copy won't work if sharing same array structure and then doing a dereference if (index >= node->getType().getArraySize() || index < 0) { error(loc, "", "[", "array index '%d' out of range", index); diff --git a/glslang/MachineIndependent/ParseHelper.h b/glslang/MachineIndependent/ParseHelper.h index f077ce6e..22ded39d 100644 --- a/glslang/MachineIndependent/ParseHelper.h +++ b/glslang/MachineIndependent/ParseHelper.h @@ -101,12 +101,11 @@ public: bool constructorError(TSourceLoc, TIntermNode*, TFunction&, TOperator, TType&); void arraySizeCheck(TSourceLoc, TIntermTyped* expr, int& size); bool arrayQualifierError(TSourceLoc, const TPublicType&); - void arraySizeRequiredCheck(TSourceLoc, int& size); + void arraySizeRequiredCheck(TSourceLoc, int size); void arrayDimError(TSourceLoc); - void arrayDimCheck(TSourceLoc, TArraySizes sizes1, TArraySizes sizes2); - void arrayDimCheck(TSourceLoc, const TType*, TArraySizes); + void arrayDimCheck(TSourceLoc, TArraySizes* sizes1, TArraySizes* sizes2); + void arrayDimCheck(TSourceLoc, const TType*, TArraySizes*); void arrayCheck(TSourceLoc, TString& identifier, const TPublicType&, TVariable*& variable); - bool insertBuiltInArrayAtGlobalLevel(); bool voidErrorCheck(TSourceLoc, const TString&, const TPublicType&); void boolCheck(TSourceLoc, const TIntermTyped*); void boolCheck(TSourceLoc, const TPublicType&); @@ -136,7 +135,7 @@ public: TIntermTyped* addConstructor(TIntermNode*, const TType&, TOperator, TFunction*, TSourceLoc); TIntermTyped* constructStruct(TIntermNode*, const TType&, int, TSourceLoc); TIntermTyped* constructBuiltIn(const TType&, TOperator, TIntermNode*, TSourceLoc, bool subset); - void addBlock(TSourceLoc, TTypeList& typeList, const TString* instanceName = 0, TArraySizes arraySizes = 0); + void addBlock(TSourceLoc, TTypeList& typeList, const TString* instanceName = 0, TArraySizes* arraySizes = 0); void addQualifierToExisting(TSourceLoc, TQualifier, const TString& identifier); void addQualifierToExisting(TSourceLoc, TQualifier, TIdentifierList&); void updateQualifierDefaults(TQualifier); @@ -149,7 +148,7 @@ public: TIntermTyped* addConstArrayNode(int index, TIntermTyped* node, TSourceLoc); TIntermTyped* addConstStruct(TString& , TIntermTyped*, TSourceLoc); - bool arraySetMaxSize(TIntermSymbol*, TType*, int, bool, TSourceLoc); + bool arraySetMaxSize(TSourceLoc, TIntermSymbol*, int); void requireProfile(TSourceLoc, EProfileMask profileMask, const char *featureDesc); void requireStage(TSourceLoc, EShLanguageMask languageMask, const char *featureDesc); diff --git a/glslang/MachineIndependent/Scan.cpp b/glslang/MachineIndependent/Scan.cpp index e6232fbe..446a0149 100644 --- a/glslang/MachineIndependent/Scan.cpp +++ b/glslang/MachineIndependent/Scan.cpp @@ -550,11 +550,12 @@ int TScanContext::tokenizeIdentifier() if (ReservedSet->find(tokenText) != ReservedSet->end()) return reservedWord(); - keyword = (*KeywordMap)[tokenText]; - if (keyword == 0) { + std::map::const_iterator it = KeywordMap->find(tokenText); + if (it == KeywordMap->end()) { // Should have an identifier of some sort return identifierOrType(); } + keyword = it->second; field = false; switch (keyword) { diff --git a/glslang/MachineIndependent/ShaderLang.cpp b/glslang/MachineIndependent/ShaderLang.cpp index 1b1b98d2..7d7b75ed 100644 --- a/glslang/MachineIndependent/ShaderLang.cpp +++ b/glslang/MachineIndependent/ShaderLang.cpp @@ -449,9 +449,6 @@ bool CompileDeferred( if (! symbolTable.atGlobalLevel()) parseContext.infoSink.info.message(EPrefixInternalError, "Wrong symbol table level"); - if (parseContext.insertBuiltInArrayAtGlobalLevel()) - success = false; - bool ret = parseContext.parseShaderStrings(ppContext, const_cast(shaderStrings), lengths, numStrings); if (! ret) success = false; diff --git a/glslang/MachineIndependent/SymbolTable.cpp b/glslang/MachineIndependent/SymbolTable.cpp index 8fd892b1..8e1c79d4 100644 --- a/glslang/MachineIndependent/SymbolTable.cpp +++ b/glslang/MachineIndependent/SymbolTable.cpp @@ -90,7 +90,7 @@ void TType::buildMangledName(TString& mangledName) case EbtStruct: mangledName += "struct-"; if (typeName) - mangledName += *typeName; + mangledName += *typeName; for (unsigned int i = 0; i < structure->size(); ++i) { mangledName += '-'; (*structure)[i].type->buildMangledName(mangledName); @@ -107,9 +107,9 @@ void TType::buildMangledName(TString& mangledName) } if (arraySizes) { - const int maxSize = 11; + const int maxSize = 11; char buf[maxSize]; - snprintf(buf, maxSize, "%d", arraySizes->front()); + snprintf(buf, maxSize, "%d", arraySizes->sizes.front()); mangledName += '['; mangledName += buf; mangledName += ']'; @@ -173,8 +173,8 @@ void TSymbolTable::dump(TInfoSink &infoSink) const // TFunction::~TFunction() { - for (TParamList::iterator i = parameters.begin(); i != parameters.end(); ++i) - delete (*i).type; + for (TParamList::iterator i = parameters.begin(); i != parameters.end(); ++i) + delete (*i).type; } // @@ -182,8 +182,8 @@ TFunction::~TFunction() // TSymbolTableLevel::~TSymbolTableLevel() { - for (tLevel::iterator it = level.begin(); it != level.end(); ++it) - delete (*it).second; + for (tLevel::iterator it = level.begin(); it != level.end(); ++it) + delete (*it).second; delete [] defaultPrecision; } @@ -213,58 +213,59 @@ void TSymbolTableLevel::relateToOperator(const char* name, TOperator op) void TSymbolTableLevel::readOnly() { for (tLevel::iterator it = level.begin(); it != level.end(); ++it) - (*it).second->readOnly(); + (*it).second->makeReadOnly(); } +// +// Copy a symbol, but the copy is writable; call readOnly() afterward if that's not desired. +// TSymbol::TSymbol(const TSymbol& copyOf) { - name = NewPoolTString(copyOf.name->c_str()); - uniqueId = copyOf.uniqueId; + name = NewPoolTString(copyOf.name->c_str()); + uniqueId = copyOf.uniqueId; + writable = true; } TVariable::TVariable(const TVariable& copyOf, TStructureMap& remapper) : TSymbol(copyOf) { - type.copyType(copyOf.type, remapper); - userType = copyOf.userType; - // for builtIn symbol table level, unionArray and arrayInformation pointers should be NULL - assert(copyOf.arrayInformationType == 0); - arrayInformationType = 0; + type.deepCopy(copyOf.type, remapper); + userType = copyOf.userType; - if (copyOf.unionArray) { - assert(!copyOf.type.getStruct()); - assert(copyOf.type.getObjectSize() == 1); - unionArray = new TConstUnion[1]; + if (copyOf.unionArray) { + assert(!copyOf.type.getStruct()); + assert(copyOf.type.getObjectSize() == 1); + unionArray = new TConstUnion[1]; unionArray[0] = copyOf.unionArray[0]; - } else - unionArray = 0; + } else + unionArray = 0; } TVariable* TVariable::clone(TStructureMap& remapper) { - TVariable *variable = new TVariable(*this, remapper); + TVariable *variable = new TVariable(*this, remapper); - return variable; + return variable; } TFunction::TFunction(const TFunction& copyOf, const TStructureMap& remapper) : TSymbol(copyOf) { - for (unsigned int i = 0; i < copyOf.parameters.size(); ++i) { - TParameter param; - parameters.push_back(param); - parameters.back().copyParam(copyOf.parameters[i], remapper); - } + for (unsigned int i = 0; i < copyOf.parameters.size(); ++i) { + TParameter param; + parameters.push_back(param); + parameters.back().copyParam(copyOf.parameters[i], remapper); + } - returnType.copyType(copyOf.returnType, remapper); - mangledName = copyOf.mangledName; - op = copyOf.op; - defined = copyOf.defined; + returnType.deepCopy(copyOf.returnType, remapper); + mangledName = copyOf.mangledName; + op = copyOf.op; + defined = copyOf.defined; } TFunction* TFunction::clone(TStructureMap& remapper) { - TFunction *function = new TFunction(*this, remapper); + TFunction *function = new TFunction(*this, remapper); - return function; + return function; } TAnonMember* TAnonMember::clone(TStructureMap& remapper) @@ -277,24 +278,24 @@ TAnonMember* TAnonMember::clone(TStructureMap& remapper) TSymbolTableLevel* TSymbolTableLevel::clone(TStructureMap& remapper) { - TSymbolTableLevel *symTableLevel = new TSymbolTableLevel(); + TSymbolTableLevel *symTableLevel = new TSymbolTableLevel(); symTableLevel->anonId = anonId; - tLevel::iterator iter; - for (iter = level.begin(); iter != level.end(); ++iter) - symTableLevel->insert(*iter->second->clone(remapper)); + tLevel::iterator iter; + for (iter = level.begin(); iter != level.end(); ++iter) + symTableLevel->insert(*iter->second->clone(remapper)); - return symTableLevel; + return symTableLevel; } void TSymbolTable::copyTable(const TSymbolTable& copyOf) { assert(adoptedLevels == copyOf.adoptedLevels); - TStructureMap remapper; - uniqueId = copyOf.uniqueId; + TStructureMap remapper; + uniqueId = copyOf.uniqueId; noBuiltInRedeclarations = copyOf.noBuiltInRedeclarations; for (unsigned int i = copyOf.adoptedLevels; i < copyOf.table.size(); ++i) - table.push_back(copyOf.table[i]->clone(remapper)); + table.push_back(copyOf.table[i]->clone(remapper)); } } // end namespace glslang diff --git a/glslang/MachineIndependent/SymbolTable.h b/glslang/MachineIndependent/SymbolTable.h index 2a0352c8..0b307234 100644 --- a/glslang/MachineIndependent/SymbolTable.h +++ b/glslang/MachineIndependent/SymbolTable.h @@ -96,7 +96,8 @@ public: int getUniqueId() const { return uniqueId; } virtual void dump(TInfoSink &infoSink) const = 0; - void readOnly() { writable = false; } + bool isReadOnly() { return ! writable; } + void makeReadOnly() { writable = false; } protected: explicit TSymbol(const TSymbol&); @@ -124,7 +125,7 @@ protected: // class TVariable : public TSymbol { public: - TVariable(const TString *name, const TType& t, bool uT = false ) : TSymbol(name), type(t), userType(uT), unionArray(0), arrayInformationType(0) { } + TVariable(const TString *name, const TType& t, bool uT = false ) : TSymbol(name), userType(uT), unionArray(0) { type.shallowCopy(t); } virtual TVariable* clone(TStructureMap& remapper); virtual ~TVariable() { } @@ -133,12 +134,11 @@ public: TType& getWritableType() { assert(writable); return type; } const TType& getType() const { return type; } bool isUserType() const { return userType; } - void updateArrayInformationType(TType *t) { assert(writable); arrayInformationType = t; } - TType* getArrayInformationType() { assert(writable); return arrayInformationType; } virtual void dump(TInfoSink &infoSink) const; - TConstUnion* getConstUnionPointer() { + TConstUnion* getConstUnionPointer() + { if (!unionArray) unionArray = new TConstUnion[type.getObjectSize()]; @@ -154,16 +154,15 @@ public: } protected: - explicit TVariable(TVariable&); - TVariable(const TVariable&, TStructureMap& remapper); - TVariable& operator=(TVariable&); + explicit TVariable(const TVariable&); + TVariable(const TVariable&, TStructureMap& remapper); + TVariable& operator=(const TVariable&); TType type; bool userType; // we are assuming that Pool Allocator will free the memory allocated to unionArray // when this object is destroyed TConstUnion *unionArray; - TType *arrayInformationType; // this is used for updating maxArraySize in all the references to a given symbol }; // @@ -190,15 +189,13 @@ class TFunction : public TSymbol { public: explicit TFunction(TOperator o) : TSymbol(0), - returnType(TType(EbtVoid)), op(o), defined(false) { } TFunction(const TString *name, const TType& retType, TOperator tOp = EOpNull) : TSymbol(name), - returnType(retType), mangledName(*name + '('), op(tOp), - defined(false) { } + defined(false) { returnType.shallowCopy(retType); } virtual TFunction* clone(TStructureMap& remapper); virtual ~TFunction(); @@ -455,7 +452,20 @@ public: return table[currentLevel()]->insert(symbol); } - TSymbol* find(const TString& name, bool* builtIn = 0, bool *currentScope = 0, bool *sharedLevel = 0) + // + // To copy a variable from a shared level up to the current level, so it can be + // modified without impacting other users of the shared table. + // + TVariable* copyUp(TVariable* shared) + { + TVariable* variable = shared->clone(remapper); + variable->setUniqueId(shared->getUniqueId()); + table[currentLevel()]->insert(*variable); + + return variable; + } + + TSymbol* find(const TString& name, bool* builtIn = 0, bool *currentScope = 0) { int level = currentLevel(); TSymbol* symbol; @@ -467,9 +477,7 @@ public: if (builtIn) *builtIn = isBuiltInLevel(level); if (currentScope) - *currentScope = level == currentLevel(); - if (sharedLevel) - *sharedLevel = isSharedLevel(level); + *currentScope = isGlobalLevel(currentLevel()) || level == currentLevel(); // consider shared levels as "current scope" WRT user globals return symbol; } @@ -502,6 +510,7 @@ protected: int uniqueId; // for unique identification in code generation bool noBuiltInRedeclarations; unsigned int adoptedLevels; + TStructureMap remapper; // for now, dummy for copyUp(), which is not yet used for structures }; } // end namespace glslang diff --git a/glslang/MachineIndependent/glslang.y b/glslang/MachineIndependent/glslang.y index 3de7e724..73688db1 100644 --- a/glslang/MachineIndependent/glslang.y +++ b/glslang/MachineIndependent/glslang.y @@ -90,7 +90,7 @@ using namespace glslang; glslang::TParameter param; glslang::TTypeLoc typeLine; glslang::TTypeList* typeList; - glslang::TArraySizes arraySizes; + glslang::TArraySizes* arraySizes; glslang::TIdentifierList* identifierList; }; } interm; @@ -334,13 +334,15 @@ function_call_header_no_parameters function_call_header_with_parameters : function_call_header assignment_expression { - TParameter param = { 0, new TType($2->getType()) }; + TParameter param = { 0, new TType }; + param.type->shallowCopy($2->getType()); $1.function->addParameter(param); $$.function = $1.function; $$.intermNode = $2; } | function_call_header_with_parameters COMMA assignment_expression { - TParameter param = { 0, new TType($3->getType()) }; + TParameter param = { 0, new TType }; + param.type->shallowCopy($3->getType()); $1.function->addParameter(param); $$.function = $1.function; $$.intermNode = parseContext.intermediate.growAggregate($1.intermNode, $3, $2.loc); @@ -890,7 +892,7 @@ parameter_declarator if ($1.arraySizes) { parseContext.profileRequires($1.loc, ENoProfile, 120, "GL_3DL_array_objects", "arrayed type"); parseContext.profileRequires($1.loc, EEsProfile, 300, 0, "arrayed type"); - parseContext.arraySizeRequiredCheck($1.loc, $1.arraySizes->front()); + parseContext.arraySizeRequiredCheck($1.loc, $1.arraySizes->getSize()); } if ($1.basicType == EbtVoid) { parseContext.error($2.loc, "illegal use of type 'void'", $2.string->c_str(), ""); @@ -905,11 +907,11 @@ parameter_declarator if ($1.arraySizes) { parseContext.profileRequires($1.loc, ENoProfile, 120, "GL_3DL_array_objects", "arrayed type"); parseContext.profileRequires($1.loc, EEsProfile, 300, 0, "arrayed type"); - parseContext.arraySizeRequiredCheck($1.loc, $1.arraySizes->front()); + parseContext.arraySizeRequiredCheck($1.loc, $1.arraySizes->getSize()); } parseContext.arrayDimCheck($2.loc, $1.arraySizes, $3.arraySizes); - parseContext.arraySizeRequiredCheck($3.loc, $3.arraySizes->front()); + parseContext.arraySizeRequiredCheck($3.loc, $3.arraySizes->getSize()); parseContext.reservedErrorCheck($2.loc, *$2.string); $1.arraySizes = $3.arraySizes; @@ -976,7 +978,7 @@ init_declarator_list | init_declarator_list COMMA IDENTIFIER array_specifier { parseContext.nonInitConstCheck($3.loc, *$3.string, $1.type); if (parseContext.profile == EEsProfile) - parseContext.arraySizeRequiredCheck($4.loc, $4.arraySizes->front()); + parseContext.arraySizeRequiredCheck($4.loc, $4.arraySizes->getSize()); parseContext.arrayDimCheck($3.loc, $1.type.arraySizes, $4.arraySizes); $$ = $1; @@ -1047,7 +1049,7 @@ single_declaration $$.intermAggregate = 0; parseContext.nonInitConstCheck($2.loc, *$2.string, $1); if (parseContext.profile == EEsProfile) - parseContext.arraySizeRequiredCheck($3.loc, $3.arraySizes->front()); + parseContext.arraySizeRequiredCheck($3.loc, $3.arraySizes->getSize()); parseContext.arrayDimCheck($2.loc, $1.arraySizes, $3.arraySizes); $$.type = $1; @@ -1111,7 +1113,7 @@ fully_specified_type parseContext.profileRequires($1.loc, ENoProfile, 120, "GL_3DL_array_objects", "arrayed type"); parseContext.profileRequires($1.loc, EEsProfile, 300, 0, "arrayed type"); if (parseContext.profile == EEsProfile) - parseContext.arraySizeRequiredCheck($1.loc, $1.arraySizes->front()); + parseContext.arraySizeRequiredCheck($1.loc, $1.arraySizes->getSize()); } parseContext.precisionQualifierCheck($$.loc, $$); @@ -1123,7 +1125,7 @@ fully_specified_type parseContext.profileRequires($2.loc, ENoProfile, 120, "GL_3DL_array_objects", "arrayed type"); parseContext.profileRequires($2.loc, EEsProfile, 300, 0, "arrayed type"); if (parseContext.profile == EEsProfile) - parseContext.arraySizeRequiredCheck($2.loc, $2.arraySizes->front()); + parseContext.arraySizeRequiredCheck($2.loc, $2.arraySizes->getSize()); } if ($2.arraySizes && parseContext.arrayQualifierError($2.loc, $1)) @@ -1391,7 +1393,7 @@ array_specifier : LEFT_BRACKET RIGHT_BRACKET { $$.loc = $1.loc; $$.arraySizes = NewPoolTArraySizes(); - $$.arraySizes->push_back(0); + $$.arraySizes->setSize(0); } | LEFT_BRACKET constant_expression RIGHT_BRACKET { $$.loc = $1.loc; @@ -1399,18 +1401,18 @@ array_specifier int size; parseContext.arraySizeCheck($2->getLoc(), $2, size); - $$.arraySizes->push_back(size); + $$.arraySizes->setSize(size); } | array_specifier LEFT_BRACKET RIGHT_BRACKET { $$ = $1; - $$.arraySizes->push_back(0); + $$.arraySizes->setSize(0); } | array_specifier LEFT_BRACKET constant_expression RIGHT_BRACKET { $$ = $1; int size; parseContext.arraySizeCheck($3->getLoc(), $3, size); - $$.arraySizes->push_back(size); + $$.arraySizes->setSize(size); } ; @@ -2114,7 +2116,7 @@ struct_declaration parseContext.profileRequires($1.loc, ENoProfile, 120, "GL_3DL_array_objects", "arrayed type"); parseContext.profileRequires($1.loc, EEsProfile, 300, 0, "arrayed type"); if (parseContext.profile == EEsProfile) - parseContext.arraySizeRequiredCheck($1.loc, $1.arraySizes->front()); + parseContext.arraySizeRequiredCheck($1.loc, $1.arraySizes->getSize()); } $$ = $2; @@ -2132,7 +2134,7 @@ struct_declaration parseContext.profileRequires($2.loc, ENoProfile, 120, "GL_3DL_array_objects", "arrayed type"); parseContext.profileRequires($2.loc, EEsProfile, 300, 0, "arrayed type"); if (parseContext.profile == EEsProfile) - parseContext.arraySizeRequiredCheck($2.loc, $2.arraySizes->front()); + parseContext.arraySizeRequiredCheck($2.loc, $2.arraySizes->getSize()); } $$ = $3; @@ -2166,7 +2168,7 @@ struct_declarator } | IDENTIFIER array_specifier { if (parseContext.profile == EEsProfile) - parseContext.arraySizeRequiredCheck($2.loc, $2.arraySizes->front()); + parseContext.arraySizeRequiredCheck($2.loc, $2.arraySizes->getSize()); parseContext.arrayDimCheck($1.loc, $2.arraySizes, 0); $$.type = new TType(EbtVoid);