From 52302d4dee589a5df43a464420c9fe68ba83937d Mon Sep 17 00:00:00 2001 From: lgao4 Date: Sun, 28 Feb 2010 23:39:39 +0000 Subject: [PATCH] Sync EDKII BaseTools to BaseTools project r1903. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10123 6f19259b-4bc3-4df7-8a09-765794883524 --- BaseTools/Bin/Win32/BootSectImage.exe | Bin 393216 -> 393216 bytes BaseTools/Bin/Win32/EfiLdrImage.exe | Bin 421888 -> 421888 bytes BaseTools/Bin/Win32/EfiRom.exe | Bin 446464 -> 446464 bytes BaseTools/Bin/Win32/Fpd2Dsc.exe | Bin 1428686 -> 1429802 bytes BaseTools/Bin/Win32/GenBootSector.exe | Bin 425984 -> 425984 bytes BaseTools/Bin/Win32/GenCrc32.exe | Bin 425984 -> 425984 bytes BaseTools/Bin/Win32/GenDepex.exe | Bin 610560 -> 612999 bytes BaseTools/Bin/Win32/GenFds.exe | Bin 1452307 -> 1465182 bytes BaseTools/Bin/Win32/GenFfs.exe | Bin 430080 -> 430080 bytes BaseTools/Bin/Win32/GenFv.exe | Bin 479232 -> 475136 bytes BaseTools/Bin/Win32/GenFw.exe | Bin 466944 -> 479232 bytes BaseTools/Bin/Win32/GenPage.exe | Bin 421888 -> 421888 bytes BaseTools/Bin/Win32/GenPatchPcdTable.exe | Bin 0 -> 607128 bytes BaseTools/Bin/Win32/GenSec.exe | Bin 446464 -> 446464 bytes BaseTools/Bin/Win32/GenVtf.exe | Bin 446464 -> 446464 bytes BaseTools/Bin/Win32/LzmaCompress.exe | Bin 397312 -> 397312 bytes BaseTools/Bin/Win32/MigrationMsa2Inf.exe | Bin 1374303 -> 1375239 bytes BaseTools/Bin/Win32/PatchPcdValue.exe | Bin 0 -> 558196 bytes BaseTools/Bin/Win32/Spd2Dec.exe | Bin 1382890 -> 1385329 bytes BaseTools/Bin/Win32/Split.exe | Bin 425984 -> 425984 bytes BaseTools/Bin/Win32/TargetTool.exe | Bin 579152 -> 580101 bytes BaseTools/Bin/Win32/TianoCompress.exe | Bin 434176 -> 434176 bytes BaseTools/Bin/Win32/Trim.exe | Bin 672353 -> 675164 bytes BaseTools/Bin/Win32/VfrCompile.exe | Bin 1155072 -> 1183744 bytes BaseTools/Bin/Win32/VolInfo.exe | Bin 471040 -> 471040 bytes BaseTools/Bin/Win32/build.exe | Bin 1723538 -> 2733693 bytes BaseTools/Conf/build_rule.template | 18 +- BaseTools/Conf/tools_def.template | 500 +- .../Source/C/BootSectImage/bootsectimage.c | 4 +- BaseTools/Source/C/Common/EfiUtilityMsgs.c | 35 +- BaseTools/Source/C/Common/EfiUtilityMsgs.h | 11 + BaseTools/Source/C/Common/ParseInf.c | 70 +- BaseTools/Source/C/EfiLdrImage/EfiLdrImage.c | 4 +- BaseTools/Source/C/EfiRom/EfiRom.c | 4 +- .../Source/C/GenBootSector/GenBootSector.c | 4 +- BaseTools/Source/C/GenCrc32/GenCrc32.c | 4 +- BaseTools/Source/C/GenFfs/GenFfs.c | 24 +- BaseTools/Source/C/GenFv/GenFv.c | 93 +- BaseTools/Source/C/GenFv/GenFvInternalLib.c | 506 +- BaseTools/Source/C/GenFv/GenFvInternalLib.h | 17 +- BaseTools/Source/C/GenFw/GenFw.c | 834 +- BaseTools/Source/C/GenFw/elf32.h | 14 + BaseTools/Source/C/GenFw/elf64.h | 13 + BaseTools/Source/C/GenFw/elf_common.h | 14 + BaseTools/Source/C/GenPage/GenPage.c | 4 +- BaseTools/Source/C/GenSec/GenSec.c | 232 +- BaseTools/Source/C/GenVtf/GenVtf.c | 5 +- .../C/GnuGenBootSector/GnuGenBootSector.c | 4 +- .../Source/C/Include/Common/PiFirmwareFile.h | 6 +- .../Common/UefiInternalFormRepresentation.h | 111 +- BaseTools/Source/C/Makefiles/NmakeSubdirs.bat | 12 + BaseTools/Source/C/Makefiles/app.makefile | 12 + BaseTools/Source/C/Makefiles/footer.makefile | 11 + BaseTools/Source/C/Makefiles/header.makefile | 11 + BaseTools/Source/C/Makefiles/lib.makefile | 11 + BaseTools/Source/C/Makefiles/ms.app | 11 + BaseTools/Source/C/Makefiles/ms.common | 11 + BaseTools/Source/C/Makefiles/ms.lib | 11 + BaseTools/Source/C/Makefiles/ms.rule | 11 + .../Source/C/PyEfiCompressor/EfiCompressor.c | 13 + BaseTools/Source/C/PyEfiCompressor/Makefile | 11 + BaseTools/Source/C/PyUtility/Makefile | 11 + BaseTools/Source/C/PyUtility/PyUtility.c | 13 + BaseTools/Source/C/Split/Split.c | 4 +- .../Source/C/TianoCompress/TianoCompress.c | 4 +- BaseTools/Source/C/VfrCompile/EfiVfr.h | 3 +- BaseTools/Source/C/VfrCompile/VfrCompiler.cpp | 76 +- BaseTools/Source/C/VfrCompile/VfrCompiler.h | 2 +- BaseTools/Source/C/VfrCompile/VfrError.cpp | 13 +- BaseTools/Source/C/VfrCompile/VfrError.h | 6 +- BaseTools/Source/C/VfrCompile/VfrFormPkg.cpp | 47 +- BaseTools/Source/C/VfrCompile/VfrFormPkg.h | 150 +- BaseTools/Source/C/VfrCompile/VfrSyntax.g | 435 +- .../Source/C/VfrCompile/VfrUtilityLib.cpp | 155 +- BaseTools/Source/C/VfrCompile/VfrUtilityLib.h | 9 +- BaseTools/Source/C/VolInfo/VolInfo.c | 4 +- BaseTools/Source/Python/AutoGen/AutoGen.py | 4378 ++-- BaseTools/Source/Python/AutoGen/GenC.py | 271 +- BaseTools/Source/Python/AutoGen/GenDepex.py | 4 +- .../Source/Python/AutoGen/UniClassObject.py | 25 +- BaseTools/Source/Python/AutoGen/__init__.py | 9 +- .../Source/Python/Common/BuildToolError.py | 2 +- BaseTools/Source/Python/Common/DataType.py | 16 + .../Python/Common/EdkIIWorkspaceBuild.py | 5 +- .../Source/Python/Common/FdfParserLite.py | 43 +- .../Source/Python/Common/InfClassObject.py | 7 +- .../Python/Common/InfClassObjectLight.py | 7 +- BaseTools/Source/Python/Common/Misc.py | 85 + BaseTools/Source/Python/Common/Parsing.py | 124 +- BaseTools/Source/Python/Common/__init__.py | 15 + .../Source/Python/CommonDataClass/FdfClass.py | 10 +- .../Python/CommonDataClass/ModuleClass.py | 5 +- .../Source/Python/CommonDataClass/__init__.py | 15 + BaseTools/Source/Python/Ecc/C.g | 57 +- BaseTools/Source/Python/Ecc/CLexer.py | 1722 +- BaseTools/Source/Python/Ecc/CParser.py | 8051 +++---- BaseTools/Source/Python/Ecc/Check.py | 67 +- BaseTools/Source/Python/Ecc/Ecc.py | 12 +- BaseTools/Source/Python/Ecc/EccToolError.py | 32 +- BaseTools/Source/Python/Ecc/ParserWarning.py | 13 + BaseTools/Source/Python/Ecc/__init__.py | 15 + BaseTools/Source/Python/Ecc/c.py | 594 +- BaseTools/Source/Python/Ecc/exception.xml | 10 + BaseTools/Source/Python/Eot/CLexer.py | 4947 ++++ BaseTools/Source/Python/Eot/CParser.py | 18844 ++++++++++++++++ BaseTools/Source/Python/Eot/CodeFragment.py | 185 + .../Python/Eot/CodeFragmentCollector.py | 467 + BaseTools/Source/Python/Eot/Database.py | 255 + BaseTools/Source/Python/Eot/EfiCompressor.pyd | Bin 0 -> 8192 bytes BaseTools/Source/Python/Eot/Eot.py | 647 + BaseTools/Source/Python/Eot/EotGlobalData.py | 138 + BaseTools/Source/Python/Eot/EotToolError.py | 21 + BaseTools/Source/Python/Eot/FileProfile.py | 58 + BaseTools/Source/Python/Eot/FvImage.py | 1453 ++ BaseTools/Source/Python/Eot/InfParserLite.py | 171 + .../Source/Python/Eot/LzmaCompressor.pyd | Bin 0 -> 53248 bytes BaseTools/Source/Python/Eot/Parser.py | 848 + BaseTools/Source/Python/Eot/ParserWarning.py | 26 + BaseTools/Source/Python/Eot/Report.py | 472 + BaseTools/Source/Python/Eot/__init__.py | 15 + BaseTools/Source/Python/Eot/c.py | 394 + BaseTools/Source/Python/Fdb/__init__.py | 15 + BaseTools/Source/Python/FixFlash/__init__.py | 15 + .../Source/Python/GenFds/CompressSection.py | 4 +- .../Source/Python/GenFds/DepexSection.py | 29 +- BaseTools/Source/Python/GenFds/EfiSection.py | 30 +- BaseTools/Source/Python/GenFds/FdfParser.py | 109 +- .../Source/Python/GenFds/FfsFileStatement.py | 26 +- .../Source/Python/GenFds/FfsInfStatement.py | 77 +- BaseTools/Source/Python/GenFds/Fv.py | 57 +- .../Source/Python/GenFds/FvImageSection.py | 8 +- BaseTools/Source/Python/GenFds/GenFds.py | 62 +- .../Python/GenFds/GenFdsGlobalVariable.py | 37 +- BaseTools/Source/Python/GenFds/GuidSection.py | 140 +- BaseTools/Source/Python/GenFds/Section.py | 5 +- BaseTools/Source/Python/GenFds/__init__.py | 15 + .../GenPatchPcdTable/GenPatchPcdTable.py | 189 + .../Python/GenPatchPcdTable/__init__.py | 15 + BaseTools/Source/Python/Makefile | 8 +- .../MigrationMsa2Inf/MigrationMsa2Inf.py | 4 +- .../Python/MigrationMsa2Inf/__init__.py | 15 + BaseTools/Source/Python/MkBOM/__init__.py | 15 + .../Source/Python/PackagingTool/InstallPkg.py | 2 +- .../Source/Python/PackagingTool/MkPkg.py | 2 +- .../Source/Python/PackagingTool/RmPkg.py | 2 +- .../Python/PatchPcdValue/PatchPcdValue.py | 287 + .../Source/Python/PatchPcdValue/__init__.py | 15 + .../Source/Python/Table/TableEotReport.py | 4 +- BaseTools/Source/Python/Table/TableQuery.py | 20 +- BaseTools/Source/Python/Table/TableReport.py | 5 +- BaseTools/Source/Python/Table/__init__.py | 15 + .../Source/Python/TargetTool/TargetTool.py | 4 +- .../Source/Python/TargetTool/__init__.py | 15 + BaseTools/Source/Python/Trim/Trim.py | 21 +- .../Python/Workspace/WorkspaceDatabase.py | 4728 ++-- BaseTools/Source/Python/Workspace/__init__.py | 15 + BaseTools/Source/Python/build/BuildReport.py | 1423 ++ BaseTools/Source/Python/build/__init__.py | 15 + BaseTools/Source/Python/build/build.py | 3320 +-- BaseTools/Source/Python/fpd2dsc/__init__.py | 15 + BaseTools/Source/Python/fpd2dsc/fpd2dsc.py | 4 +- .../Source/Python/msa2inf/ConvertModule.py | 4 +- BaseTools/Source/Python/msa2inf/StoreInf.py | 4 +- BaseTools/Source/Python/msa2inf/__init__.py | 15 + BaseTools/Source/Python/sitecustomize.py | 10 + BaseTools/Source/Python/spd2dec/__init__.py | 15 + .../UserManuals/Build_Utility_Man_Page.rtf | 329 +- .../UserManuals/GenVtf_Utility_Man_Page.rtf | 201 +- BaseTools/gcc/mingw-gcc-build.py | 72 +- 169 files changed, 46579 insertions(+), 12981 deletions(-) create mode 100644 BaseTools/Bin/Win32/GenPatchPcdTable.exe create mode 100644 BaseTools/Bin/Win32/PatchPcdValue.exe create mode 100644 BaseTools/Source/Python/Eot/CLexer.py create mode 100644 BaseTools/Source/Python/Eot/CParser.py create mode 100644 BaseTools/Source/Python/Eot/CodeFragment.py create mode 100644 BaseTools/Source/Python/Eot/CodeFragmentCollector.py create mode 100644 BaseTools/Source/Python/Eot/Database.py create mode 100644 BaseTools/Source/Python/Eot/EfiCompressor.pyd create mode 100644 BaseTools/Source/Python/Eot/Eot.py create mode 100644 BaseTools/Source/Python/Eot/EotGlobalData.py create mode 100644 BaseTools/Source/Python/Eot/EotToolError.py create mode 100644 BaseTools/Source/Python/Eot/FileProfile.py create mode 100644 BaseTools/Source/Python/Eot/FvImage.py create mode 100644 BaseTools/Source/Python/Eot/InfParserLite.py create mode 100644 BaseTools/Source/Python/Eot/LzmaCompressor.pyd create mode 100644 BaseTools/Source/Python/Eot/Parser.py create mode 100644 BaseTools/Source/Python/Eot/ParserWarning.py create mode 100644 BaseTools/Source/Python/Eot/Report.py create mode 100644 BaseTools/Source/Python/Eot/__init__.py create mode 100644 BaseTools/Source/Python/Eot/c.py create mode 100644 BaseTools/Source/Python/GenPatchPcdTable/GenPatchPcdTable.py create mode 100644 BaseTools/Source/Python/GenPatchPcdTable/__init__.py create mode 100644 BaseTools/Source/Python/PatchPcdValue/PatchPcdValue.py create mode 100644 BaseTools/Source/Python/PatchPcdValue/__init__.py create mode 100644 BaseTools/Source/Python/build/BuildReport.py diff --git a/BaseTools/Bin/Win32/BootSectImage.exe b/BaseTools/Bin/Win32/BootSectImage.exe index 454aa34cff56af0ee2c4fa407d9a94f0963d01e7..06cdd4e0f35b441ed356426ab460f4b199a90f01 100755 GIT binary patch delta 8223 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 Nw3xqs>CoKv{9ml5{_Fq% delta 8242 zcmb6;dt6l2)@SW=Mn+@=mEoZX2$+-#!y`Ze1#`Oi00)#J#WJ<-NLW~dS>mfv0}uG< zs2d+4qurZ*<#V)SYKDf1g{kE&O(QMMF}!L|sgIm*tuuh!>W}*kzu(z=t-aRTYp=cb zT5E3>E(}_@FlgmPF~^*|>zf_EuuM_>av?>z;x`jMRL1wngmPs~k5|B?MEA@Dr&82& zG+33rJ#Fx#a$m0$*so0MwSk59eZ_w)oKmv=O|VIs@1FoqDZBl@ftQuF#wQ_M`Q7*c zTu?Ft)>9h`^>ZR1{uGVgXAYYmMeq&>!GB9RHRJC3Z znoI5JE+iLhM%j1~JE=wjXM4F`q|t|!l-Q)$?*Edxm(=+# z`2v?xwdU;qy4`uM>zYnd)e-_Nu6LDNarxeXu}E7NZgIsZ3&M|jIIZ2~qc=i_@P1^$PCY`K70`XPpK>y>tjj`F%DP9%z2EHBK;4!m<<!Q+@>;nKLv5ziWoZBI@YSXgXLo(tN48Gt4bgGh!S; zIp!5e?reH+I5nYJHg9B8@`fVtao$Y?oQEdQ0LW0HAG1P+bJb%%60qd)_wZ|;x&$oB zM^nf6XMANAo{d;EPhWe4R?{^h`y_0vf1hMA9$sGpx+gmRyMW@{Iy zQ^IF|2=z+y>?feknfv@`1|iDE7fcYXoOmG_qMW)HKk1U1a>Fdx`pD*1IZH3+mP8sS z{M#&)db?(h00Fn90_6Nwd4!azE4Yq?A&8Q5_40_4NZkZy&qXb?=x&QAGD8EZTIxe` zq@#__XO|u(vn7_tLZULgdaD}798&V-{C=2m;UMOnJxYqau=jd6w!^mw^%f%El^PUuWIL3y&~ z6PTb3*<{8zzF<>?o+hvGugY@1u}LD)+Z`*zRuay9)}Fo^J8qkgoP9RcK>bo^w5Mk& zlQ)M$mNI|y3`{nz%?G@R-hKosj4PFGTWF2Az(!^Kt_Y}BX73t`{aw4B!tB;}_iSA7>fL*=Kgt=8-!kXp zw3W`!K{F3-21c+7!)oQo-hs4Ddp{4S`P=c-Ctvbpp2mFnx+6=u^7b4fZCaeUCE=*0 z%6x137F0xVlslhQmxBLBRIeicOtaT9^O<6u*`uM)JL6Ed!gr>_dgtMHLg23jC_n6f zxi>AZ`MDy=_1!7j2&pYK%7$`9IWQd8^XY+!sA|l?IZ*C={op^zdO3&A!Ad3iy`OP$ zp>yxuzkrR->&Lr^Xz`ZDCRFV66Jv3=qCP$f z*nD>~9}t&uIt|C?oh~p`(u&$FRjGV^dQ$r_%KPLaJU^Zz75~`*)Wmt?^UWfj|5fJ? zwhv6b&_V-~n&L4&cxX4fnn|DK&F@jj$oVCKpqE-+B+lRecV|1ZrPZ~BYJ?XAMHiXw;2a)VGinIs&Tt*y=0B__UQ^kB3FCBDeX|n z`9IzMq{5h}Dm`H&pwP3uAOeO^OtH9)t1pfemeiFFSd>l(lZzr!5t9uB<+@I+bGtE_ zAJZZb4a&v>o?rwFs_N557{pNAhCqvwF&}M$-aUv}tD-OskvA9fQWJzjvAWg-UJyvL+SBRlwgt(ChF{vI z+7kz>y@(g};N!4Z1S>C(hsj+%TJ>{S`Hgr8?5BZlv{RdmK-3et^4!KVxR7JIVt!8o zB;)=*ngI8}KE5OY{*KVU37NwCC&CmxiLl6qVqTR9!*H6$L_kO8^Y4dxWOyJ6{)Uj8 z1e3kBl+kz5yvtMg4@od>s7IGv`#il+davU@4H$gaZXSKeu%CAU<@NS-E zcSl6Ax<47RFdJ}jC`^DkykIEAK^b2*6ow$Oekj~)EJHcDu3!^6g=C@ZB>k&QWvO5X zq+FT?j~V75Nqa6TQ-4TU7Q*oWs% zghIq^p9q`0AcW^kg*1rf@>CcOQR+ui;gOK8bSR(eCL1gH;0176uYulF1`fy?KndvKlKuvY6p##>Kk@C3?}u)Vwgsni0`!!Xt0GrU|@SShrRrGTFIjFP6 zq6V&jC-I8H=PR(o*Mc})gIO%fXE4mP1Q}o@4PXXH{{%qR3qWax@(jn zsfHLb5L^tS}oN$ou6C_v;7*hjCQNpfVI5rU$vU& zb2#hQs9~?SW2?%mR})dbOE$YI%q_U3Vs>~%b_*UcC{4tTuP{#FE!7Yb zL^{aXeia5X+_i(GJ&jJ$MqxTPu7e?yr{h?Kk-jg4JE+kKh4<*TP)|0HmF(BBN}x{j zz(whVrtz{cS>svs9YG#`helloTd39MEmYrJ2ak*1)u=F~-quDn;8pksVBkAggPUH$ z(>7saRS#|g1z5{fp6h@_YF~Ch-}qvb(hzr$9 z+)?&8)$rRL%5rk{#R?Q1w+G{%iBH=Dc^C-Z z-UIkE@qK$CAExl`Z^OfA*C*eGu~5jJZ-Wh{tI;YPVlb9peFtJ7n+NQt!>y+7hn^BN zs5ys_1@!!%@4=H$pc?7`%a;P)bOidV=MIC^25iDf=D)8Q#PL3+rxbqVeK?L&R@UR@ zP2k~2;oXscQGzW>r<^baZw|K1A|Kbx4>VJ^6;M{fTZzEse}@M2TT*zx4^VkeRl;BT z0I*``Z+?Iwf6Cj(;6;Eb>f8pHN^5R94sKjX(}#ffn*yHF2ooddiemp7O5?F~ma~d; zJ;E2?)`S-Y$;K4Erx8{zpgH9%slt%eiXEc{j?ixzOOQc>R&B)-Q(;U)LWhPZKSKyZ z-OUb$m*`M!X(2=#PlLuIAf}DyEsduY5$&$5C3*d#>w9p-VNyRj0XMN=QxBX5thFpW z>0j^#ZbOgH;5ebrp9ALA*Mdqk_oWc!vxNE>=du2l%{~><8VmpJBD@)0NF=!)66zy~ zeV$KisejSWZsR`8tjK`Wh5W=N2=>#c4IMHH`7f8?Q8a1(*YF99RinRw`xsc%@mIhp z`q7N`i(ngu(a)Y%RmcOb!JrrtfyZDviN>hvU!{?K&1?pIL^+8s7;ab`@=aGoc=gU@iDv}Op<=J_|&i2XGIm%w-NB#g_bn>}p}P2%=lJem;N>T&Y#ArpPO z;CtAEjo}B#>`7F3h%{9^HsVu$fIeu=vL9eA&f4ooxZa*zG1s1WlST0Reu8tIaF~B1 zc+AhRy(4Y&&>$AF_80i-k5t~b;lmCp^}=oF0v#a#uBCGx=RGpT5dPJ#Se=>FpxqInz)iM_EFIWMm@K%ZS^-7_d z$GVS)>ljufs$Iv1(%CrFh22ESS9a%5weLBqeb0Ea z5nk;Yq0z#6vd24tXfJ<0Zj|V!ZtKYwbTUAqKl`Me4j1BUWDy;;k4H=te>8x7*-qoB zeLS+bHIUui02McY9!vP6!K@V*GpRSDhYY^A52GqAIfNy9K^=c4lHpqh9~#B*F+;75 zV)UB9o9|)xoWVl|u%xb0809Ulk$N}(c(OQHEg!)0x}n(f@u*sfdMBRc00zzML^cJn z^cbNYNo2)zjfzcS$6%p)JB1BkU{k|VStylX!_wJTv^$~0*-2_|WH5S4Rb$L7jNqIH zS+$5Fua08ZaE8;PnW---!>nu!jau0WDr7^RVn0HP>Q~GRBsBDC7E5hT35%swYl^%w zi*+Mp&2x+%lX%VZ?1e}Qv-E25lRbSgy1rnWWl#6NWfty~>RgZfgg4Z5e?D{$3mZvD zJQ%_y?GlAI79wY*fo@|V9!-18oKl}-I!y!yqvkG88r<&Y8O`|8OE@Zykb}QEhus%M zlJKfiBvj?M;ueTu zPr+qtQIu{;De9W7ELQB~MR=+wcLM1^tNCv+TZi{yUH-{7)=_1n*RU>|mpC zmWOsQoemwVa1V>4H7wt&DW%>~8NJ}CIs4fVYReC@dYv!j1X}=_Le46Q#1e4Q5jN{j z$n!^7=AV!Q-~S8b-1pfgka(YZ_C}(F>B3i)EWT>CPvqg|Y_JHMa<==p6>E8EQ*C8%!p==NS7Em6RIT%5Erd&8KX@pEUUBQ}$YSJ>@O4e$hV4 zYkGCw88*FJPy-?>n4EoCHa1c>SHfyXHk{(WeuYM9PzPRQ4?`GH*|0#N1i~z?Nhf~y z6ew6+OR2_2?zqH4;gni;iCINx;P+l(e@EU`SMY?w8Gid)96ieeuCmYt7f4bMlthKO zf1YdWF^?#!@`F+h7u$!a9uKm(D%ytI%J|Fe!$cmE>nds+ChG81ovVGA$iwqoV>$_s zN;O=+X;z(A*{lftDcs9}K1&+aLEd7mKI{)$i^eY1yXNk^kN6SsMxu>|o4{ba* zQhbk&eQLCLlN@H?ec~W$3kHge+DU`NspL?H;zWIi7oyvpj2E}vjr@xfM5O~#!xF`* z?5-QD%aX)ksT2IxP_eYL*LTEWo-<5r?2yAT3`g+?hl{SesH6cj`d<_?{46z{B;@2Wx9RV`#6ZpUG$4<0SP*je?BW5ppI6BsJhCX0B1&d-7I zBBsnb{_Z1U12#)1(p6aPI!T;Bf&0E}g+q&|BW8+YD5flbRvg>4XL~5U z)mD)@g822hxQjtNxJ+#A9fZQPXEvYPrz5qZD>C1w+lLi~AT@TLILLs(qi~r>L4E5o z@d4WF>np@e@{O2UaX2mZ>CK{BYyTlqgj1Vd7k$Y$Zfq6DbwQnm?GWkud&tua+ewgm zXs4KhMEv$HaXlL0mE9s9920MGida0U1$)Gv$f`cIUtCFcY^@WIWAnjbaS_@v>xjpW zuhxrkXvdTFnjO0w70=+qo_hYInA{7~WUp^TCL&Y7x8gcv!WWL+^r|uKhDfg(wKv2J zoc9t!bZZawlCEK+*Gt8?;8MNxF)nmuSLt!g#_B)4rRYw(&Oi5&I)!01-5`C*ppy6T zlb-72D=Yk@DQ!iA0bfXN_mE7KKBA4%-T<6R+o>N0N~0*>rwzu|q%IvSg*fR& zhV8?N(o)T$Ns`B+$B9i*v>g1#S-1tgVLb>^gm+t^GnkAW8(@i4xG9=LRcMR7O21Q;0U3-t$*>- z2%)U4AKo+q|38Q{>aQ`n^G}D9i!F4R1^joWkT-th_`|w)!@mFh<(z$6D___f_}RPs zr&o0rh~nlNT_iTEHt7QS!Wx~V8;Q;*@E#6bFTSxx7mW{ZM{9IpI_q6@YmLs&NMyA& zNZRSQnD^U+(iVH96>ie`K`oz2s9Hh|z@2}`(_ErP;9YA`vOxb_^-P#ii!4Drw-#A~ z_~BaAsgh78{wkqNgc<-@{2D=79)c(b5=`g!I}kNpL#ZVW-JEW?sB3TO`oKt4w@p{l zi5i_ORMt>yQuA-<=7Klj@!zyU{Y~C2|!KR|9|IONJXJdds;~;iU=*r9O)cwKFF(P9eg3cZC88#?pS4oBPfTQz#O1PYMs~>W(%DDAds=N}-}F2QXL1n8XTBokg&m=$aG-M#r1P372SxW|0odLPTNI(dNn& zqK>JK&CRbu=s3aIpXN1lb!h9VP$Uf$Gr(9+9@?UL5?Mo2n|E$GA<`HnG084YvsEc#dn(j1=IUl~f-;hxYVHPpk@Qh> z-+rjDxV1`x9 z!@KGY$In$%*VV-e7pbvLD~I2k>d|yYniR_vMQ(JNQus(CY#gl0!+E@Uim}QnuBQ|+ zf=;t>Ba`S_n<-5lqZA7D$_5|NQnA8m+SJz3^Y0$@K`K{FltOs^2*;X;oYe78`i)ZPh7q|d8(4{Y z6wsHpUe*=CqMRHZ`B{n@WK$nIm)P;%JjPNT^E6hND7lO}pPL{~)fJ@^ezM{5CLN07 z)K`?b)&+Lq3Smr3(L+W`E^@9Dcae~0qKnwHq#NumfO9W8x}`lpFS?+m1Nnn)Xz55w z>7kaMZ0-uAsnF3q!dCbjfOdw-HfAK1H+g|yDzg^Z*w4ld9=nua?#fLk;j z;SfnOXn})|gB41n^Uc{ooUs)aIP}d+^oc`XMDcg@vkOEIMa!Y{Ic8;8D$;D!F_y7{ zLw7pUaWPTRw~on+s8eg`6HBw5Ry&lo&;$2v&%qrf@P$R~oWlrNMW?#- zB=6{97jJNBKp(nfS}a7hQJ}2zN|Yg@8J+B!lX)S!PLY*iqDX7Vxu=_Q4_j36H$qt) zj;_PPX>rPmWPNZ=H(e23XH1qy*Hu2VI2>c1eKEa@#o_omEXo$A%q_Ft2UukLi>c(W z{+1-`{hTyw9g!H2WRYzmQ)QinGJ5; z7N=rfXT5h#Z%|RhqfW)YjuVzA$ks#2t-0i#5gi@OQs;#|(NA)s-{i#C@Dy1e0v5Pg zoQi&(Rns}s&f*k(=w?mg=v%keEqtW-hy^ZEe9uf98raGvv%Y1bdr|3}GOOpHN!CJW+iE>wlq0pu} zq5C6_EHr)KX5+lnkbj5bkys2c6TihGul|F%Sb|+^UeWTLOt)1H;uS>y_?`+?GTwyH zZk(BUR)#r`9K6=u9d-_-p6<(=>1t&;VJD=J~{%z8i;u#jZ-BDShSR?lNyUr$KvSarIY6 zTPjtm1gubVt1(HeFq{Uqwr>1IvsY<`c(#LNB%U%=|`*Q!Ph&vFY3-G0HAZZ;{n)G@1c2OiLPw4?Hh2 ztQ2X^>Ub-xZB3M_JUuxFiAa`}cD%V&ZQ?N!L!q|#|rczl>PK0%6C?c<@XwV~l+s7Y3aqarOx9q)=# zI-J2dV2Y zcNNJ<%vDgJ*M5!9oEv{$htE9M(Hj-Zsh_WdDRy?mV*N%%hx$4bD>~OVu3<6Cp?X8F z`$ji3!A^}TggUl8!<&S*&c2q3lE|`&PH>TTkCG)mCz(}lo2a*+Uy~hv^`aas8spc7 zkp6U~|ELz_$HNuLTTu{&GV8oBC?Roc8m;vYw*G1{x$)*X@lS<_5fXFkrZwbpoHvmRso*Wg2m{9RaO0fld+O+?O6+~{4q0Pu ztm_0GYnc;WF1+P#k9n<*zZWOW`9h0^wL+Z$b|`A4mGFy9gZvsv{OI)4F4Q5w(Kvq< zRtUp#{IGhN7|_-%5np-tj~8s$06QtPg?D`@8b7Pb1of^7a76Q32e!j|bYK8zR?*pk zLqWZU-UwU`AM$8&`vf?bPym2M68CrxNsaHyg8 zR7>9D+_9fk788ZeiGHfKzAQmAn$dAIT)RjgcC?2lH|f6}k7xe#SR|8r`za=Z*Au<> zSfSB+-Z*_!M}JfbX8(v$*tv=oGT%tg@gL)aqM6b&r%9BC zg`Hi93*Fp#K&SG#|3&CO3r(r8K{KW(RK-|FsPf{X6{_?6R){xY<8ixJA^-yd~LaW{qZLJoGhEGVjE!P8!uod!48Mj z>iBAWda4w@ZbGekUAC!`%&ONk1_((i`cE$xukGWs5DT$?sg4$Kfcg{xP}CD|c@$dr z$-gwT_grE}5A~kYX-kTMpucism|;t(6BMho{|GvCEKTmi40A@Ve4F+Sw#h+7^?VI; z##eYdo(}2j*rFHj)L^YvT2~n^PJUeIL6`UShlWwyfVcVvTAx#Wp4eY#N1gjQ!Q#=h zTR%Hsf78T%9`MM5X7oEm>}iMo%V1kmdZK?S38JlI)*6Z>JIvLXVC#!w^RM$$6w6-- zrgj6IVA%-TX+VFQK86ICX}-dtG4!hejx8GTUVO0TzF9Qnd3dGlCE1Swh{rTMotVZeZ1YN9$ZB<` z?FM+kA3@}uJEqd~S#NrS@`bso8c zdIIFH5{k@KWGaL%$o`rv-;m*Ku~k@lxTnfRgy}!^;zR_`BOELmoaNmb&B^ zmptpe@eK2^__GPGLcDh4br7!;c%8@VCXGnwV-~Bn+aeB!8QZh6G|=uq~19PI7d46DK-MhvJGgXffeX3xXY^r&$?K z73mhjghcv0$+>Hfrj2V4J=@V8<2n&1T0X85{LzNCOiqLa{&YritCj+?LAzuXn`PB>oi!yl*Yz(x zroY~a?nxdD|9VoR@gZ=gHSLB!%UaXf<2%|8Y%MCG6l`!nio+Onym_2(tRp=?zBR1w zNMDVwg6S^w{ud$e+?(1?=m%eW)8q+X!dPcoH6a9Uc~LJ_KTvzonW`jM>_o4qLg1Yz zZ8UKtJa?oMCWgQWPr7yDMEKi-nx}MvqaHLGe-?Srg()4Ow+B6(;_tU1P?YDES7?Emqznejz06@h7`n94(sU5K~d6C)~Zo5&>$sJ*< z8yzv(73!MM%*nRU^Dx~o*#ne*^wi|`q$~YvawNR(MuVrcfs_4;#!NX(Y_;=T$kiO@ z)r5HL5MXsq$2_zy>M^Y&fwD7n{`5gXwGmucT`f|^8^e_D+5(Jz(O#uU!3v~mBHpa< zNjTA&!i)gxuMHDk=8a@S+G~arBz2}=%*f^pUe0Js!m0htK+EvE5jbGOfiv?2^cqs`Ttpkp8Rgcyp3+IR2&)?{ahOOvcM;8=69LaMY3ZDa&hr=P!J23( z(?4?9A2aE|xk1o6lV;By?)-D69wkn@N>=!Z&xHwfIO&d*a~IO!d86Fy>M5O6jr2@r zArkjlNDs}6fWsNIW?rgWZ|wVF$3wDjq8@SB2aY^9gJ#c1X&2Da`KfMmGW3XT^@yjw z=fpb~(D(%rV6%X3STNCf*8&}}eTu7A;O}ZU<-_^ZB?E0czbHPV=Vu+7VyOz=yU?-` z381I5-SGY>+X?cV*M8}W_o7x`-X$>gH(IwW0J{A~1D6MY`X(K>Jiu(oP0rFzbe;#x zTwvf`k;v&T{cHI#!$$J5#N|}ZOMo?Z=$@7S{OA74wvEQ!;UJc@V3{wB5rd$^ouWy( zIRrv(7yYv;kAPQ6(egYm0()=LeQWGH{4MYl*o!-Qk2|j&mWV;B%agG%?B=(s)M!O6 z?=khQkm=Ukqo39|nQha)PrOGx*Y<|fPw3ROZqW5UUAxu`(w@*`YyBbW34MWqXYSD^ zG#)0WVwl9tfEPN6S|!l=5%hn#dFC!-3vW35<)EvBFp%3e_abz$(Z zf=*qx1L9xOmignL;3Zv{KMgj&EUL~wMo3!GF80pIrR~meY`fl|!zyxPiUqSfm{Aso z^M6FIjT649Dmt?aw+w-!&*`Bp zUy?ILT?lR*~--Igy@k+z%$Iao20~mG^ukCnk!s`-VH#UW{)#*moEy|H- z9TM%w-!1t2!{%^yI?*UFG;CYAq6!1r7KAIz3&R!bw}dMaFbweb#kb*#-dn>JF&N$e zuSlf%h+%g4{Pz2Bb}bn?7Zv>A3XK+&i}^?&YOLwK-Okty|GRq|So}b@>=^;!4{7Zl zC)m2J$Z79LBSWWqDmon_yN#`iw(aj^)bRDjy1K1t^x?raW?4(cK7vx1ca&Nknh0S> zY389mxZZj3P$VoqLYo{ONn+{3LymO$VSn;F)f|ols-gcL9tq<#beJZZRMD-Pz{W46 zGEnKt+#HNs`rdlTWwpZ<8e9rKzCp6DIPrIxuUa2TYK2|2A`C|{T#n2kZ|R03b6~-t zqUPAT!PVz9;CLVmE286$_rXr}0#I-tsP?(fjl}X6wJu+!f zRDN!DuC9V zb^+Hy>RRlKwFwO`_BF_)Di1M}=)&U5STg#Zu_8wI-;tuRXUzx<%%xM$IsQ-b&F5Ak zx$k*%VwJ6yl|sQ5S4CkpiMH+c(?>{OLHk^Ag+VLmqzhZn5N0Ls;mC5@u(ZnPLk*#C zOI-#oIupser{X`JJ+24C_21D#s{dH%jVLg7oCBk4I{c)>esuD;yc7#&Q|Y*i-o}4V zsjH*0(Jn=ME`IKix1?Io`N~)$D7#9RlqJD|3G`ms7erCiDpUyZaebD`csV~0l|EUSRS&93GW*YR>xGu3N^IB?e1ndueeKFDuwWTI^cE? znC8=^x4V$5^z>~TU{&9dm0j4Ra*bfoYPY`8@eDqLaKEjp*77x>+x zXDZ^IewWI%G|Iu&G^^MnC;C@)%&)OR%_#^hMFr8fVh< zhY|H*4+LuY!3WYt&@LY$40&t)@WUrV-sfd)H-8-QS%f@%Zdw}x7yh8VYeQN-RYWLM z!`ER`j??>m9bNoSh(AZas&$8ebM#cLD>OYv%WGXds?Lh_t&~lbuB!9&^JJIKQjfZ8 z@cs;aTNe-8&gAzeu`uvV{uUAe=4bLB6JK~(%q$3rZjwQ6Z zjLAepMlxKjF**5}wIus$t~Mm81P&b4bTuKT|7Z5Ire>rYY(30k%t$HRJj86xNo$YY zhqxq;TCaYp?u~1tAsh6pyy6f`HYfd|>mhc)oXmsbgUr7P84Ae<*@`9@ZgY^`YC>=o zjF~hgE5WXkt#3-4q4x`RxG7l;vq!OB7NkAQJiz8#ke1*R!PZ+~GSdU>sRbzqpZ)BD zC20l5``HUi;tG%VY0R6E9YAUrPF(y8UH7m9R-_-i+O4UxBHIZxj9@!#NB|^v)7-Hk zVFYgMWDa&D6xQ$5B-xQ0pV>#U9P4gRI+2^2S@y(e6<&w%>Z@7f zP2S_Q22-~o1L43OcCQT@HvJB3=}X2#(>rXDFPUz3cavQIuZ?6MeMu%n++-PT34fIDfFq$|xu4jZ31Ry0Q{K5@hP?AEBsh#NRay{K+S1 zz9LR6C^+9^uExDt!q>N%RUqyPT>Kk*8Aw(ca*}!~V((6~tv%*9(1+}92NdkXL*_P? zII_GTVoK698-uX0*dDqesv%Bl&5e=yq$RU4gN+?n=Z@qs&R(&z}n69)OQ%2C7v{QOw6 z(WK4)&v5K$&hW;5ws8zu3NZ&b!`85N59>dcbaWoNN6ayGbqWXrr039TtVyv0Ds^U|(l_Up#J0U``125Z&5sK%k2t`Bu-GaaK@j8ds9~kG4 zzwvmP;^oc$N+l_VTFSNgl*z;!niNcpP$bs{^A6+IG`4LjiLr1lC5ofiZB?jymne__YxkrZH)HQw{d8)7#7gdCyzi+N>`TV^9q$pP8b zn#K!>Ef}r5S<60yOzci8C>N-w->sWSmh8qqt8B&6R8t z1+eiNE65`*tm!J_#w>I>xeDK2Wo3IvM@>Wy`I3-7Sm_EkEik3iT(()4K9*!xByM8|Ek~%?}z3Yh; zfxd<8JR=hzP$SNh;18cCG174FmgY%_7z8&Cv&s#`)zI7S$;JCCa)MXwcQ;}iS<8Oh zM8eJPvs&CtS&bvpbD9sE$Y|^~vtgUD12N+obKF8gAmkcL*g`sj;u>4Eg~U7Vyvj{w zmz!IPY}o%%YBn!YKuZt88Wg2_cWz?gG*owqIe- z3rNQ%Q?H0Xe9S1^U~RUNHn8I;OV~=P%=#XdlSW)-G22jxMwi*LZ6u1EVVAd&g=Udr zmj#C(oquNW-y(D!TlFo8hNG9*Z{L!EW~zg7`caoyyFyIwd5KLdBm+!;E0QBFvonP# z%i4?VVu+I${ajP*~ITrv`V(^d(z3Rs6;YbzLeBTN-EDbH^eu(Ymzgw+m80T%Gzxw z9%h~Q%SZtwY~*%C`iC+6fs+^5b^e=mftl?vEjT=LB!5418lhtt8&gdFfG^gw-e<`4hGmlxc{6KvmLne{L1Z#( zau&PeX_|g#$v|V1b+>pupP#1Lc7bex#^$%h?$Fa)tnWqg4f#nUT*Ur9e073ZUnU7a z`e`O#Cd&Zk{LcQlN|K@Z?`-%r(#HDPZ#c!5ZHbc_E%L4KzMlv;e$#BcMjDua`F`f| zhS+M3-b9o5JerMV3g^)B3QHms!51PF33&Cx=PvjgkH72i`mrQ}y@Cc#%=I=2^1N4y zZOIkvhh2|QY`z?!xQV|{@ZIKOgyK7V_s8ETHup9;1Wo5@0`8FZ1nhri$#+Qt>UsPw zSz_Gy;9F6#b#FC2%ZZDTN!x!!y^Y!ACup^;Gc`?~Vy_zpZDYfpp`ynFSkW^gK(lG= zo99^L?Vrj%JtyZ#6+0u4g)n)FCIV|boHsnix>aKSTsq1MD@hx-&Dbs(Wh+EG7)y3g zV^EG5l#_2<%ci{~RvM!!Vs8Sg*J;o&_lalmP{}5J9z`f_J&aI%!0T0cgyKGb#@`SO zAI#kTA%naWPf*_%81!d^;;|5+aK+y?_}&@AEATxIe~0)$YgmzVN3I^NtuV;t)qjk^)6c%(CrjIOE-tn?Pw zN%*UYdJU(w&_vd(N_Zah>m~u|^wTM+-aSA!`_ha+f`35k!cQOyh6-2989-6@4EY*?52>cOe zCTikx`Nm4ZwCNQ*4Alv38-|$s;VTBfjx~-G_Pk>In_;GA zy<&Hp!A85$pPNaZ0%EJ0gZ+rX*xfg<^7T5KJ zcfX*A;pW(wa&>HK4lX@PkE$G{F`Bxy6>HD}e4(oqYu^H*>=yk;5P1Z?ss;2JvO)4b zC!>1r8;j=FtL$*ANq}&5ho1N8h*e85wTeRsPK9D3%%DQdAmQrIEWir9ymi(W^GNkX zUptGXAxMf6?{CgBtRMhRH)lUuL4>{e1Wv|3bi+>s7Nqs$l`^OEXwFQnVSxRpOUtBUbM7_;HiC>q*$YMpmh5A`5qi2W&qZGI0UH1 zE%!-mi#ymruOy~%hhiy@MPT7P%kluv%))q{8t1<78<^%P4W*@GE2Ypil!xQ@JNT_i z^AvF-pSTy)Lkh>1@1s^Pl?b>&%$jO(=pk;yxwBdpG(uv5>p1F|dpNoq)2ZH>nYSk> zTZ>s3Rf4MC;;QmW?PL8OFK=8H6y0#|U{>G>?cwWg>{m|+lC;@y36m9HWL92Sq-+PX zPF~O&PF!STy`Yzm2rN=mmvYbHUtOBV;`f)lO}?;)_b_nimNAH3_X2O3xLvd3u#&Bc3OmUgg1WRfDi{?7dPa=0&gWrqLPIG`U45pufjXOqDTTkC*n+kY)qS^<9)?W6K^w*~ zWcsC2n1mton&!l6+ro?pSR&(|=&>m;jg_llP0*;fmL?#BSpRRIR?rJLw~fSf}DBEBU?g`L!X?66Hj2uPyxI~t*+EB(f{n*f8xNhBBVs%cB zRnrwLyd&yA8_lP~))7e9JehD|v5Z}1h<&Or%j<|WoathAz9VFMj_S#D>rGxANgB5jqU9Ud70so5I^b(@vr1+QhzDyc-5YqsV9VvUJ`<%2u1T`A?_Ip zu?xEd>TDiZ5$=WNJL!t%Ypc#K;O0Bo4cnYf^VrR9Fbuw)%YwSYz!=#wKkEr~Sn^S= zP}Q|q!}Cq}S$VOUJQoy~m1Ap%CvW>dm(;4N$Mj~=UxOm;mSi{vxRFP+#r0zI*V zai&bn&@w|?`h_#M2>8J|KvLs_9`=-ltULm-Z(=s+uyq6yHcuva&62S%8)7?$v4BX_ zBPE?BM?w&Ic(AV{p$x{RvD6;*`h+yB_t(q?>{<`xDa_I1sUy(Sr&F5Dv(%7hyKc-S z3Vs+b>(f;adz$3a+H5&5XUlE0j7~iry`FkLGi6ri4OzK%W&Y8qUg`|Z*l1`%V8nDb zy(bLNmcwOwyywjoF|@po$h@DV>+#mn>#5m(y3D)SkawFdya@2Xiqnptm&5M8upG(; zQ0oaX35}{(861>__!Uj5Gk}g>&j9YzWFbx%3gOV13&8^`_BmiV^s|wwF|i!R^aeZ2 z2~&AWY}rmAFQLy{mfjnBYWprLB$w3MWVbBNYc#h`oDEv>C2d&+ zgjw~0E84<-N}Cj`!6eB;wXAl?tj^5PW2K|lGr#2&=HC}fq)8{%voCxTQ*cEr>=*T* z6EF+)j9Mr|pT>;SX`!Q+pgD@rbTSL*htLf>vflmROPf><4eDIp6fQn90_)RQq04sm zv>$BO7JR!#^#x_`Ojghz3yLk~jgF6wKu?7)Cdrw%+t6AggIINcu(b}7RI=B@Za;LN2u_XJ89tF|6KoPU_SawU5l1HRT%#khPP7q>MD zqm)Abm8{hO2#29|EO`Kw!wwaj7Yl9Jw1Ln@tI~Qswp*sL9|xjJCX@A4(h=yXl&F$b z+F_{Dz(7_v5X=6K%VI8lt%sc_`Ha>9rpdYV9*v{3o{nB(#ZiRb;&ci6TA?AU@Br2{ z7R&zbFIZ$OnkelHuG?U3(LbQadeRgF2T{qae@)S2t)th|()|lr%K}5z4()iU&i*Ehj`=|S5`Ua!sXBpG@!W~UBXM=wE(O>o&*HYFaROMTgw@tD6> zW7)BI@M-*F3>VedLc`7s0&mtlq27i05m(}%6ziE!6IpBmy6_j6cRD^g0zDNDiFoK& zd4_h~(}rzLz~)%)Rha5w|EXf56A?QRvqXojBhb^~`_Xcqtu(~m+?wr6M4euYVowus zY`1?Db4r4EZO*vs@hXwrUTeN6*?a-XdaQNydTM2kVyBbPe6xMn&7}IA@z#SrBDu8| zI$VZ!8>a`Yqu0}F+DLYF2tup8*|Q<2#laEGeke|P<&IzxLm^?j+&Sv1$7-A8yjoTv zGApyOdaQKxdRhz}AscX!p#kH(*vFw*zsQ*ruE&a^W%SBdkj&~MW`!=Vbo6>!^&2j; zT42bkhbJ=|j#{oB#b@SSuwdyXr~#a5$Sf4yEipL{CZ`fg~kQCa}S>l&OYN zu6AOl$ANeJ7f!tXQDNjrb#4+iIymvR1W$C~v&iZ?;uWdz^Nv(3#H+baq~ckdNX1*c z4*NwaeA-1SZe#chyh`!X;8lxP6Q4-wdy01ckqQM8y+-0@`0L&-Qv9BxOF*|s#dr)T z?-;3=9~r6e4~kUu#jtD)i^BK7E|H3#@pn32bx1Q7f0yAE8ON?BLl>XF<0BO|36Y8} zc#Xts30~jh^#QL-cxji9Xu%It;mU7p>v;GT5);_$FJO9TsWeMA0u5L1XBqe3H?FP*9a=Wiwav|mxc!6y;F zZ~*&yB6REqQ`!CSE$vlVhi0r*EjdNLNDKuqr#W;+Q|pz=&t3NRm;s-_kzp z*c3=H>iy;u>vM*9vjJ0~UnB9`73X)NC*jvA?B!JGY^Me13~nPX{ZuaXPpL@0VivOf}BnBYA-~fT!o=tM$`!4hzNfiGyXWYGVw{f}f!J z2`RXsr>h+z^t2MEl}|*ADN3Tt`9vsg5muy!h-WL_@MjxmKpV$K0i1vz8HKC;c*qkL zj>;yY+9Q0}qZ!Zvs{ren(5{jAq0)_yEOeMr8{*7n&4jk8VpYMv??l6mIETx6e5HVY znk0X`B&Lb~|Kmjm3D%3pW%XPC@egT-0c)CuZVW}NZ5l2okEvj}X}Fe^w~}2=17D+= z2Wr>1G0oMC^ErgxDtn72-3F)k#81GZQyL0o``O5J2r>G7e=T35w`Kd%p(kdyy+j{`#V+0Xt+hgL@8B?vcq*Wb)8E4ef|gKciZ9a1MBREfFVSO;ln< zcMxg$qW$?;;nGW9`QQpIQ3}rU*3Sixj`cFCkWL+cK29BdUMVcDr&KplqUrI}&`|C% zxG?)xQOkzTh0Z;0@8RkipUcW9#mUBvSpHCRKVH$)qxx{}MjV$fY2D*n4$g{)CEya+ zTm<@kF0?bgxfOdWjpsqU=|X%$$VtUr*^l$EOTT&^v@{Ol(Yxotz}EG+0hcRq;~gR?4$ zLn~53#gxcncQ*qbSa}2pcKSRdN{I(gETjapUzb2zxZIgR7KBGRN{C@v#1CB!5b+F; z0O5amk3RaMAI#S;tT0@>X!p=;D=3CT~3HoS;{w>-WiUEQbxYJPOp8SR zgA^c44$_lJqEz+AbSj=$INgqAE(iZ8R|zRfi?kZowDs(S9lHSGU!3vLIg>;wA@RgQ zOgr}1atMhMB<-TLNG%MJu*>8pWa=YHloAq8EL`_zlXLi-{(ZJA2N&g9`f7g4!A&Tk zuD8WJT#p**$tG~wAW%=XPAX2RGT}GT(FeC>FVx_WIpOB#jxOyC(m8q;F(vwmlOYeW zFy&y&sMBAflz51ae%Du&>IhDWDk^Z3H7=6lLC`rdZ?ZDpC^D>tegU7J^CyzUMXHBRvm_9wH+t8hI&%%81Z1y^CJ9~-qA zdMcHYNeaY9TUYkct=kCZejFIbV!QxlZV*sKfqZ z%dYJ0YRHb-$59n2eN~$z__OT{ERJ2k0Kvblo;4&&)lv@66AO#H*{M9RHD#|p)$vW3 zTdLW^JP6Dj{)^N{J&4vSQQ%UTLfDCq+)%eTonti)>7s8{yhH=?+9+*yhhIYDE%~8Q zc!)!~vnp8s;22K~HGC zl4Ub&UA|e#&M=(K+^J>_HsHI{N=?KDXiA#b+!4!0nyQ>Xfbi0bjrj^}T;tvK%7YZE zI)NlAoOIXE5a2T#C5sU8^xJ>*I*K`%CS{Giu_?1M)nPXiBeSpL zn^I^iMRKoRfCrD87%dQorB*nJn_?kcUBO0gfyqT~~o500%&3(?&PE}sc ze!_RFvU2Q8=59jBSUhnm770tsSOc4o-6986sm0G zuInHX4L6>dKzf3>&CI+cd&3w+t9lr%s5HeFe4cZZdyfhar_zTGM+$W=kB?O;ICy^9 zX>QLvE%>{;q7g70muxg0uHsIZe0 zOw&P&gx2|zPR=;6Ww}7K(J!4%)`SUqH%Q)fpJ5okDJF$IRz@cY7X~BIio-R-F zIb@vhmzAtrl9Ycmz5qIAo>%ia!zw5H2+EG>;tkUs zxhHv%I-keK34h!cWy?CrUlnQGZ+JbV=Qq{7$W7xn(f(q|Q3~JG@|FRIJZU0;T~@c` zS$q_#d0qf`LP6Mhmbnc^8Waa%8`f9RH(BFvA!)FgxX;7*9BzxiqKBI!lXIGI+YcEv zau|;1ad!0m5ovZ*d)fvLr8oSKvOatfX4rkC#j<|rTig^o^ECVSTik;?_%yRG1PADJ znsq7!Cs(`ETvOaZX;^-n;-om1-(yQyS|J3Qi+N-D9JMWe#`YJ2b&K_Xa7}UOl<}MB z#Hwk}*zH1aY0>`~_xg32VoA2+CAljz`wlu%8*bg zEXaH>=hq++?z3{9hf2)BguIyZ=d$r)F}E~?E`7=s=JC2>{v-DxS1tCt8={3!sOE+# zRZrQp@6lWTc_T}4@&;S;y|$Q(dfOqm%8K9QVvf+U!cJ|1X*%eZhR~%?Fv+4sZMuA3 zb>s2V+H@gOI)h@47U8ZYY_irCa|{tyTeGn3*lpkUgbmpa?WF>3m?i$!a)B0mfv$qH zHQTox92!bagWukPz1QM*vWiI}kyLoS4P{Px!kX;>o5W}>t)oO+l6^v!4Nd50n5Ou# zRB%)9n@X{o&=$v6n7?@P-&_aLzm$UF7q)N*IQrImvI3K;%BO2hlv|ETVue=baxIf{ zo!uz_C(Yv>u#Xs})Yh^^+n^=e`vbJoD-LsTMEV1`o0W?dDDFs}aE;mS!Z{YrC)R5h z6t=DBSBwQC#Z;0{$`3w`CMX}s1*y|jX1g0&o2^8T7K_BaSFGE&-~pfJvFW>Ulu-F2 zqq`v_EDFmZc2VZF5b3nD*0=-^C_J;M?{J9cxT!d?DuCa_>Ca%ZT4uTje6=8!h9EfA z7$_{z2gyd4&;t=q%KO>0mZj~%J;175)^IQM0jFFRyBFFRU&mA2=(T135N5}I+zai^ zHj3Z;NQaxrS9P=r|>R1e^2yado zZ}9AH^A#u4ZdBfYw6Owc!^DlsJSPXCHh6$ zFma=@M4zgUk;}tkg`^G4<^aslZgxG{gsnLM)*)V|dg|5hOcvD>r;yVd$m+Qwj8?sA zSJ{ID&^|#nT`<-RdZx=mN^ZK%jrFkWw<(L*qSw7Nma!f6u!Sq^iy~N#Ta;fFNn4bC z4ubbsd4KRYy?vW6Fl+SKu9VphGSOqJqgRP+#r?tC#CcF$oww6ti>DUsKM3ub4c0{J zA03x_nf-MTCTTUTKy&G_TrRVWLm$vi7O3jC42vwqEyG(u*3?Rm<))w6fkTjMx)NF9 ze&IAtB-`KDs0+(F4Aw?L_+k0R!;oNf7biD|_cL;0%`_0z_@G2vpwW!fKzq{I^$1U! z{ZzxgI)V$z5q0d!5iEI!Ynk0qd|y(_`X9w=Cvp#4a1;t)-zVmL3?5jPedKKq?%Ya6 zd4vN?nE7$&sa5i|lr3@%a#AHLIh^PzS-*2jR8rizwMzs=yISfg`Tb99$8k7qC2xR= zDbwzLD(qN`n{13i+2Iq=6pox{7fwK%4hygsh=SFX;Ym99&4nlSR}^X9Ss7T3x$%OP zdLDitvCtaz)$a4>r?o7(l_r} z>?!=nOZlEHJOz%%?caZ@qhr3aX&qCY^(Z{eA(x-nZjON{##cGnO4KDMe=y!F?Q^5C zCjYBObN>{aHiF{rZ1Y(dIF_%wV+*8PjmJ8;|0kYYJ418QN3>uM;Si$g+(bt&c_v2@ zjPVdoOjnX^u4lozlWgEQu#bCklGiCF7=wT6>InAv;47)mr>;A=BT}(1@jLwPh*9m`H@0M4@PyHCFn1lg8 z?1@z5?2lAfKDErph_oU(sPA#_+jD(N#w?PQ|F>UFdbtw^Z5kzJgV zU4>)abjxA#-}q`J6DF$qOC;)=?7B3SDqMcMm3=pDXl`ybCW_^M5kzIlR$hcQQ1hG} zxrj4A8`iRC7qJD!ck@dyr%lZoi81dyW21t7=Odr@ozKf({_!t0>9+j=T}zP{=JX&b z$F!|2&Jy_xr~j(Y=9Ez?PN^#3Hx>3Ogk~>4(WVD{Vq}0hsrnoa7}z zA+DM&xD0Cdb)q^cmV&uBUxpuGOOvJe`LeinC=|Y8ZLZ*Y@!cVOT@c4+S72_#ajV3U zM7ygH6Dz7&^8(e(<2NA(Z^kHJZmuBy!MX5fTsRy9ZQsS^!1IE6IR4cx{$Y~<*h-1b zWB9BQ;@Mq)F?QuD*qYbFR#&jyykw)VffdZDV6(2l*N|GlnwLQ^Bv-ILW%watQUyC&29q)s z6{v&W7`9sM3Z6a7xkceA!{THwAC-K?2Z8mH>P96KDv>LWX)Sj0B(6dte-~xIReC;C z%!eeK4HMUoay_Kk0nRl}@OvVgZ`}@#WhWg=aSzXvxeo5lXN(l9O+5R0!xW4@`Sed( zecUQAbw#~nYn>Z}3!LPkt7MxN5H};2 zMz|m37qB-1e7J%Sga2qK^7}RwSM<=wl2oHB(NtaeZB9C0q7-62pS0v)=-*wi!kc)qm=$=wo*RYm_-T-%_Dflqv26!1E3%240cpDwZhw~Z4$4SRx zWg%yQt7HCYGK=`{+4~#N*{BQB2LB44M$PeI#IN9H^k;)ww)j_=5R{CzudkEQ_&BXy z_FS)|+NqZBMEO^8HX+BbptX9!9Djpx@G_Sz{tc3imgRn8Tl0uB!?SD}2X%X4fLG1& zc0SX?bJ4>~+ktrhK4Lw7heUWB!#4enqx&@#?BwrI0)m=-c@x5dmI(%kIPvZ$ynf0N zTVX4RX6~+sxO6)rMwheqH(@3y)NINv*kJwgawO78=gaf&|L{A(3A35QZTucDD1ptp zjb{zKiI;v4#Z_T*xAhX0-$%qs7I zm;1_Vk$iPOhv11cxbATVZza)uHVA+26=Ng<1l>hTCF9{08}Gt+Sg?q}J?xK+8N_1l z!CW}pkCpQGN&Q%h`_QJ@Y3vuNmv2CXoB_tdeyC*w?t_id27H)sAN)Ng@c49-(0!aF zy_t~6-v=1yh)G6{I4AT(%A@zun1y}Wo%>j)PuaHq0eIOYe2e`A!4*?wo%fJWlW6`e z>-qqjfr3h=dH_dY_hi=UA@1(|but_J5K_Ub1uK1sOHisT*03A~z^zo4P!6Mc!u5PW*Kb6Gni<1>pu;d ze3aUQXW)&0h?F&Yj!V^@!}(IRJySl1_C5RJ%#E~0RcR%j==Rkhv9RM|7ElS5rz;&q z$I6mI1qU5DE-zV$=MI<&4S!>$&%wv$@`q1#Db9lRzhXI6@tFj{WH@UmK!IJ&e?*hc zZ=+57dJb79nkgkhwTM4}FhpF;)Ap$NMixKeC!DR&cBf=YRWg#Rcw)i!npm3fvw9!2 zHBM=i&uT8Ly}`OxptoG_#zs`YSlH8z;UCDJAAZd+`s$ z+1FVw$0`)ZhgY-^`?L_-uQBhJFv#>kjKr<)HMaC6_;&85BW)p)A_Lsm&HwPgIEfO` z9ksZYI^t(nnecyS3cMiM*s%70LA!F3!T)BGEHtH8)d z#AmAboW6lmL`@@!|AtM7#*x(hH$B2@(x0*WWfxo;6X$eD_*XaKU zuvyn{{02?ppbq4B69<)>cA&(YdgH1uos#@cl{ND5Q}o~cRe=Q=Z5NAWRL8^ou-P=&SZr6M@ll%mhu${XY4C(gm@J+O zAbHzJ48cW+(vvoxEMjLb#CA#u(eo(%VdJS`MGVDLfgR&7SAqtH;_1ha3ZJ;GA9C0G zWE9rBk4+?yo7M6^J3;onICF(@Bhc)7mrj6rXm(AH{fXZ2VSDsy z;|*Fp`%&6McvqcW*T)xAP7PKVIQ5Y_X?{rbuF0BIeF5{r6G#hnu-8tSTazVsT`lFM zi|2P&kP*HsIt#yY>TfX#w6^vdOC7E=q2~YAsJq=k&NAOKaHBBE@$| zsIy?bs+D<2Oo1bJb6=xVeyoSSeJcg{vvHLV8ks(_la~0i2G#bcN3|p>hFzpX{%mUC z>PG}=TGZ?vz#0UNspcA@)HY)>x}PjhvCaD-)L$LJv^{`5t=IJ?pFmb$|0IOk2C~+= zyEi!l*`lgvRBBmaur~Dh4^$S&j_NzB(k*h-rs5#By=u~CE9Y68X+<5I?GWXYu_;381JqtDlDEhOt#B<2f(Nf2uTZ zy-X=}Sb_`gUCeB3tp_!~qev@<^S8rA$yr7@oGQ?fFVi=5Sc|}-M+9ot%(}sBiXQd~ ztqNu_Rqw8sj0S>J5xk-BQZQ_w1{OaO)9k=|*JCkkBfb${tj9w2UP1JBJr+@Iky;>? z+I^Tmg_5I}!=Kzk*susK_MhYEe`?h+u?7?RRUxcJ<(k{HGL>-&|?L$4B~HyjC-&K?_tRg{>2Or_I6? z`K|iwDK>x`bFYX7EVg&)U_*C<50#&*x$o^pT*stVQd8vC5cw^cdq4*1lj=IVOGdS< zZqBv_$D7vKIF=ELhR~q~EUd;T88PWv3GDyktLdg#FofGD9GDZspT6`5Z zQcFuh3OGoGT{Ki?yarQzBi1%B_P+{SF6315csRMHXhgKL5sOKjdQ%CsxpRd4p^HqE zv8@VV${8+>tdh)_YE}lNGXvyK8ClePiJCQL9TMvpNG)7Q-(sQ8hJ?x#F1p&03`zq@ zMi#4=(W{Nwv#l?q8bKX9&qut5Uq;HX=`3Zd)_9D*H7m)L5?>?x;)8+19?7<8;ks@Z z+aEalk+%+_OGf((JR5uPuVCs|JHoQ>E{ z2_Xh9q03EKvt)yRLk-5vLeq+P7y;XeRm*I6O36kN8+a-gR~FNNX21(G_}gUT@7)y@ z3KZuH+K5m)o<(fnNeGd>xbSo{*4)uUr8D*qB$kMOOQb^ei^g?ZsiJ*~L=Hr+q7J{5 zld5HvOsI4FV%GxS54f2(g%Vn@8G7`Kbfg7qo$LiL#FJ}oE;)9E%xo3!pyc!IrM7%q z#7@PJgbl>ID^W_e$KEi*2|Tv5oyxFVM3Q?1RwH@+G1C z!^hJJ7;MJEU!Dq6quH!{N^Qk*tCTEM;uN>AqO!>?#lE};Wpg5>sj5lA_;AYCQ^gi2MaxgRF?lq+4Q3b}>d^~rSiQ^z^_4~% z_Uk6QNE1v_PoPL8z?&t{;j}sWaSRa(tA54wg0bF`Up-xTn(@9|NcY>YR(?*S6r|>) ztFWs=X{{}r?$CFK)1h|ES>@{v23zYFP(*vyT`vl!Y3&hS%MAZ%K3!|iI!COiZDw&# z?#w;fEPPzQKjC?#p2w;_>Qca!#}=$g4P>uAlxXpXW~CvCp`$_avh7C7mhx73Cw-IwPM`dG0h1Z8D6q7K_6ONR?|2`M&a=$~2=M z=OvwzFDE9_cb!qoa}uenGv?7f6RAx!3#}ezpybDU!7OUA2uh@p(X399`+c8tZX! zR5g|byUISssohp(Ujt=f>kFYv9xY~}bgj|SpmYkW?9V)Bmd^!)Z6Qv_(rk%smVFl& z_6CU3hK(6XwD7cJ85($`>mU{1#XZXBi z=wlK%6*nDvdGG6`2RBIZog9@r(?^?BPrmi+L=(HQZu(0d>0md8E70h>ZY)txiIgfL z;jT^bzYIybHpSQB{z0kZ@C0@sTt(|FR}Tq9WiZr3-WYF`?)*f=kbiO)duJqV>&{xc zlrf%pj*6j;5_x{24Xj*YLV+oTiN-FlSQ}VqB(>*xxfd@V>bGeqc?j&PaI8)db0ugn$~osH{0nG2pW*anzk`V`TtZa_@<@o@T3-zsaCLmA?-_JjcROCFUr*l<}9S^ zX)Ijd$2>icVN9hi%8$olj zSs*3%WnRHk4AP2phK|9Y5rq@`vP-&WSTnN#>NTS$`mtkr zx&V#b@GMQG{}!E~`Nt$^J>U+*d38z90^tV1t%^<1RwHZ++!DCCaBsmKh@qvEnSYIw zpqVCV;LnG@ES3&E&RR#MCMIZK;yEZjL95d>LCcLxz}z)K`xRk-CnabD5)!mw2={|) z4jM1`VQ}6(5~$BnJ&wlqXKnS}RcLd6_O+fdoTd%HSAqDiuYyAZSa?*1(VY$$Wv?#A z_V}@<%Iiv2C#R%zM#z8a%R68wH5ter%P|4|99aPXQ}t%zNjpH44L~)rckq=fYbdNi zkC(e$<~iWz7ywYK&E5s;=C~uXs|u2Pm??qyPWHu_M`W@_#)*n{)VRcbGC=>iReK~!i9+n~v{eOjF2+aK3 z@mdw}-T!{Cu<+qy#HWq39C>Zu8D2peLN2}58)g&dDCgZ*A<3~)oc-k%sv7zMD)*^#8jv=l#!X3*DR*xT}=HH0poMA~U^KmK}###lmt{52- zYa`YVdO(+Q9llXM5$6ZmSdOchsFGCUeiZl= z>)D~iti1Lw=S&sZT&z-h|Ei1?3rbj9GYi)~#dJr9J;<9aX(g>X18hl;s+hEr)|d=} zv@$7d1dFNs3pO@^FytdTJl7H6_i7dM(Xje_8`^u=BgXiegw<6!yt=e6+Yhp*{DEtD z-SD_g*yY1(ffTmVzPypH;+>dp9}!Dx%g#}Tlw9zpJ>6Lo*GT)uKsnO-cd)~j53~wa z^#P+?u=dgB$=Y;%BwGZ{#HpiL2WdR@tx@b>H4~qN%*y5X!3uC9Ckvls+HzB_nW&Og znu$SaW^QE1?wTz4)}l^NW9$waO=F(M_&#j3`Y!K2njSul@qJbw817(?>y7%*PA7); zg~sbiqYHgULyNHTZS}lzKWrCeVO4fu3Qfww(Ehc*IkJ4_Pj6*mXg}7ADv!a)Hvc|# z9K+V@fA*wr#;}2U4?k)*mhJHQEm`u0QC$w%;)^qMeQf!tUZZb?3{N#PJiU)C!{wv8 z%CH*MKT)6<)!W)Ke5@wrjblYM%uzk*jGMHVmMT7)M}wZhWc}+JwBs4pwC&n4iX&rC z&%8P3r`c%Bc4fi58gf)mDoxF=D$SXt3FjDcAI}=rOjj?|a4(ISrHfW$D0)0(oO*|z z8P7K8KXxPUY}QEM-;LU5V^|;4O(pd&!@ATKOz9?v^@hPs461*Q=t`lmn;g-D9fdzm zU`HLE-&8fFf2OJ&*K5(qiENi%vX~}MVtrEnMWb+X&k6#TlSyrIg7^U`TAfk3Mxhe0 z(kN_^K-DL+npt69vPncB+SOY5^Y_Bfo8KJ&<>bywy^~MIT%!4}rD`q_JqR;-ID)G> z7@x~s zn+?%0JM92|@9C^noQZ!N-@LYl-qyr#X~!?`UlhLTUuJctqUp?^O>uir_|0_om;;>( zn`v|^ooBKbz4cw1F%uQ?$Q62hCO+3bzC%}LvWcVq#RBssBxd6w!sH-)X<}E4s1G5%dpTqq0J)7y>9Cog<*sOZJGn?t9*=)Lg zxIKB#VRiMK+thLno0#%1rjrQ*u*oINm~R+Zip|BM#=y2TDVOEc|E7(k zL+7eYB@e^83~WT(OmMHcMSk~1wC|M@$21K$ z!^X)#WZotdFO!pxTH83W=nYPkDZ(1zCMP}>IjM3-av}puWNvB+wt{wl@CxzR5b{Y8fsF{l1&a|+96yx)ruU_LQ)32UP}zoC9h*yoPH>|d=BFE*-{OZ?|d7XHMN zftA~GYs5y!CmTm%W0QqabiZo$X;iMxzsV{o154g8tPxji91W2&McF}YmBPw63j`H9o^1O`7Bkjqh_gT3KZ4gc13o2Tqm~`?6k|o<{?`( z7-dvtS5imKq&{zA%eh5wt8sN3P{>MjmHyW#awXe1@?T66KZ$a*3AMb{LptqIjh;QT(Bta;J-=!Su~4w!@V}%K|Z`0{e{$>&oFC zlZ{XmoyCSlZ_8nJ2%RS8AMPxXWhrD?ev4u>x?IPkQ0KpxEbbgeHCD4edhHS#zM8eu z&&AQ&)hx{KfIt_RZ<-~RQ~Xpxaddt)Yvw;qy+Y4`19bUS_tv6^_!ncv z%Z=LPf-W$jOG9kX<;IFt`6*+?J?og|S6s3D60VTvI`j~4)}}7&Ae^bSWv-gi#&ygx z#B5n0M%KnRpdZ&^@^Yb`EkTRGmX{{@j7CK}G5=!41nXUlI)h zuWQ3Dw>+#eqbv{m)iSX!RK%|OGsUe(W}XkC$?I9X?iWPwt!MvgUpOpOLAc~N!<6H) zU|Z7V_Jvi_Y7S5wNJBTEh%Q{BDI3`9E))Njy0AvIgF*=DjM zP!3kI7QL;Y-cj%d(vLYvIevq8Vz!Fa{blm&URbFkEZ`|qd`DV;&uJ}^PW_$qc z_NDq;Sf* zl3r`H3|G?q&7@g?EoqD1mP@&&p<3&~ib*GbCq*vekf~K?aPXAN=oNR`A@9`KkaVBz_v}II?(WoAn_J!&FYtwD&wHhZ?lH&Jy)yZ zH>|MYjx_N%nE}d*>)muwVg#60TyZq<0zIHx6ZD$&+S@Fo{bm=vGUE#RWv&2a#ufCl z?Eo?f+y`s`)O?2}boTjEW$-sFy4f;_<7nYx5UPij!NyKW>AWU0s7~U)&L0%M^bTw1 z(AzbmkN2|2eXc!_P|p2W_RMmK_3;$(F6*LS?@1HhWkYN3kZ-lDRA+%A6R7$0)4S}M zoNGBMY0so8gn(NyVgn?-A+ zKW`QtkpA#l^qutMXHlv2LuXO&e)!rfijn@0GwBKGADT(CrT@xI+5|sm#>{_;BsD!N z*~ZAAM+h>~vwGSHIz2+rKRv6LjUea|g2CxoDFy*`c@HAFJA=Bu2d2)?pr@t3Zw4)t z{>mA&Q~Hx;&?nOGJA45Zy zO{X8E-+4Oe@52wAPK~91dm1H6|I9RcM*6#_(M!@_IF0tbkHPB6Y4pAHJ53{gkR|5$ zszp_KO|iUj(j!$cD*(4-LN7=Bu9ij3i;TPbq=`#bfQ*78yHe!{XX@lBIz$OfS1LzF z0Pa49&e59|fs7FX6LqeD92KQux>({0f%Zp!_pmfE!wQgbnx~2}R)9<;B3%r$0%Vl7 zX`+V}Afwd5VO1+YMu|)pO{@SJrE{9d@wY-`oY++1W(CMNiRt1t)SIl#bnl)fezpQ+ zlwPUgtQ8=mq^64_R)9<7_8R6A2XZ zmSrKZo4GS_kXi~XNu-J&qbcVj2+X1z>!LG^6G(wcx|Pwc9LZ~AUx=pjA3{;?Z z3PDwRmO4oPmkHEg`o|{F^U~isf!0btcLKdH{ii0-Md`;)pa;?qnLu@q!7t0EF4D&l zv0>8xAe-jEPh4kcGP#CPk^5nIdRDsJZiE@c6bz%&A0cR&p4HbzFff}gA7deP`>Q2< z)fs~SWa~+)dv}ha`p4N}Kc`WkM`eL#DEW&1_hf;#t|N;OXW`Z2ys9-Q);+3NYjvW; z6YM9weMbsA$%6HOj?@i)&Rw+~S2@aZ4NMi^n6G8A)`{{P;d(7=L7g;l zzeR|qQ{!R-7V2PJE-&d!)>E!f-8ma8Ridr2<_Q(mtP!qP4&zmj z>($AuQU7@L&{&_$ODf888m~NYk-Af!xD`LQD7^YH)B;<7vb+?jdS#*CIXUM;d80N8 z`DChi+X_!9nsY>kLj|ZPU94SBBTliX%EBn6SO1_Lr&utfwhvZ$=mGl7wsh$f3-lkZ zT868^X-nRpu}OW5?H~`FU6w~7Wi3CGDvqk&Le-K}X=0!ClzB2;?697aic-Z| z>q%C_#ck;9XDrTdk5PlJ0MTjk*7$b{JIxx`UHBJlGNgFq%{hse2Yl}1Daj+R;1r(T zD=4M0r&)-8a|tay&4TpI>a_DTo27r{LyvvVdh7Fj=y~b4^P!JFXXC20-&2ZRY=RXoe>ULlfbOvX6}cM zbTP3$?K;DHCIlkXsmXt^sZRB5BkYtbRa-E6V#j%A?ddzMS?>wA`y$HGzu7|(H0|MF@%b@FnW^d%U7^L5(rCA4%`?KT)+|GFxT zfZZ?slW~*=y+lpUv34VeSud0B=BM1w&zOT5Lr)`6<|+|Im2~s!2lAac*tRH-a@#f7 z29?LiK#a_r`AK*uC6Oi`ETbdm7z_w6qwl4EY#H4<$3m-GB1#u`f~m<@SUcFVhz5Pd z+8J_c>jpVp;I!^5797yvM^jFVwi-Flya>Z-1$5>s*3d@2kgxih)eSiGgGt@Uq?Q#W zuYlTp&5{hMD)2Cx|23-@5b2`cu%%q8tbpGCx&rnYMpq^Hm*1P*--qobeEX~V2Cp(08J1FQIb~a}Ys%x9G(z2-c$`A80 zFDP3Eq0UryX-dX97X7H=8H)fNevt`UC(odc7Av;=RBC-AmlHc95nDls-@jLpPPjDI zaYO(K%EJchnWnY*n6kcQ)d%|;sg1LxcIZll)SxLEE1KF66Y$k)a*U}Bk#iRUicvMEZ6UCEzFlJf|ag^X?V_jjzX z-f|oDxrnLf-&<+kMb_MJn1LqeaIPZC`px#gy;^Yn5DFS(QkzJe4GyCTiF*NZ-a2R$(GUE38#pJXyrf zqloR45MuT>bm#{*#D&+`hF7;Do-zuw2vx+wvxseY-&~-PKeD08sRn=HHoPe)9vgr7 zn1~QRp+Z=A7O{aRAw;VSRJFJque}ZLG~{i=Q~JN1?06Qj4KMF};k(6bsw4S=hZ5jq z8=x12Wdl@d!BbIY7K0YC0VpBFiLdCnpCG_t2Hq?i-bkZ8nJcS?j_?=X*zhc315ZMT zkgurj&*gXvY5i%KfL%WQb}u$pemuhNhmdBMh? zMQq?n2(kA|T6CEWa~1Gf8(yD^c<6K@#QW!McowmNrwX{rm(=zO@Ujj5w%G8t8STZD zUvx1MqPiW=A~x_Ogcx>~ez;ODzg;%Ghme&mzi6}(A`5HzR{2`QHu=5x1|mk2~3AayV0DVm@iHIm34EqzYlEiIVcJnyGJGb z)pIs@i`aly?YYw#;(|Ty!aHii`vIb};T1`|WILWkY{OggIc*bclnd`u8(w%tyn`zH zU)uPyh;4W!rzx|9jdWGVFKl=@C<+^Y`&E9=+VCu515Z`QPNxg`|CqNUxyUFVcZ`d! z4zV%H!Unik0>1Qx4bUPs040RDbc%*tW$7+FZyVks2+M}IN8vxv2$(q3Y;MR&j#X74G0!96>pUjgYT#T;+U%*6tf@lzf|@ zrGJN`FBcQE4L@Mhp5I!d<{3eS^?r-2VwBeok z+?GjsDHep**^Xxs8+Z~zsb*`wTi+|ZTwlp2A+fv?k6bn7VxGT zcr9&s$4^(_Pqm8Hc07yNz>^SS&T;zS7VDVoVc@m3;U!eWQ?267Pi*{I#0H*(5D$-0 z?C)$-@-R=8-)=U%{-0IgPqm7pAKUOOVgpY?h?>W!*&o<3Y+Y7(@DJ9|Q91F3nmq*G zppx5IJ6U~$JpN=I^&K}T;ZOEmv;K&LDSfKgmW659Q4biy@Wh8v?h&`Vl+vqpof-0d z=IwMbKZ|<&#d7`5R8fo`wlO;HW4iPgJLG!xx$V{3leG5^yW`j2h;_~OYUv3oy377@ zz4DWqcjkO1_c(oekIihsuO(>LOA@rHaPNx*?Ju|t{9XrF1lRU|30f=oe%BMA;8@+^ zR+B;;Zk!hX%{sUG7Q~m}eucXZ=Lf<%aP{HB;M5%hhN;xtYaYVwO5we~*?3*w`+H&5 z12)Z3W99GI2!u<7yKoCTinj{?ddMz2*w%Xq?|#qk@SMYcVw>=<1dZLriLrY)afatT zc)oZCD&%;cfag3szl-Nfph?E_Q+QsA=L2|dfafSYKaJ<*crLx2p!woC7SChx{1u+B zgC+>iNqBw(&&TonJ80_OO(^W^&c`_Pm($lrrcaD)^t^x$!hMhyeeMsEk; zpNIT++aKi?o1cPhjC-${A2-9Y=|*M#j{b5#+ERu0*N+UM2UU1&ed{2q<;i=o*<}ed z+LNbwxh&I^ipX=kzb=5b!u(Okj;YQ+v_g#Uh$z^;z{+za#w^qwX4C~*^m}~MpJ4aW@c|H zsllCkvmVs9CQoc+J;!57`;jvCJ%>8C${)IzsFs4PuSoRHiQ-3mLb-+@lhU~Y z+d=ISy)yn72b114vjT1pKxJ*uhxnzO!Ux+qK6&RpfoULWbyJw)hC@u zDv}>9I7O%wEK|;jm%w+*-;QP}D@K==Vc9bR_dAM(`0XG%W3>s7O=NJF9?sUqTU*yhik7{WV)4+|QOvF$!D$gYorvv}5aPR)^mATe@F?06Qj zfhQrv<16XuI=q!5f!5UFb^EV0CdzUZ9&6ejxt+AhzGC(o$rKdkG%*=J^R=rfr$sfA7Vl)m{^}>2W zxJaXNNt%?--5__$$YRS&RJ$I3EXo9!QxO2`2jSv6HV0fq0sCf>(g4^ftul9ciE`?3 zKi~cXA#}NjIFI9lNb=fm5bdbPJL*>l($DpHn0{m+RSn?{^iu<=bqH@*YYJk(q(#ZM zke^}VH23bbNlnEMD=9k!%_wdlEeYXW5+XpCnx9$hy$_=NXsonQgV`N!ZB9W@nq&Ui z$<4*!m6At!r6D@WQ77P^NRnnpl#~w-An#D#vE$wWhO{}1T}yjuu6rPxivO*6G7d@_r-+UzKDEzcYbh_Y7-lJ9$v}3NL9#KKmGKRT#@4xE zG>R6r0BIc-w}_2gNC+`{v5Evk*!9gKdOA}I^TO4Rm^0?3(8NZ(h2A`qHaFs@1f5)St=Ei#CiGDq^TR zdOY*#oyI&t?^lcNHs<~G^;Idg3Gboztx7L9;j?2+{$4|_ZIS?g;lh8Z4f`D_HpQQB zu#3Nud8K8`2hAU$MBi&3LzZsmPu@B>NX?rE@n%BRr%Dfg7TMR{c+kZjSl!b2|&SH|J9w z&4=s)MuB1}^OWc#pJpqTlFo=Y`GoF$p?odc?4q9GyjJx}TOXFmE7v_R2x52q?iQL7 z&cl3uc+F0H<~4dFoc9RG{2g4+#w(L+802;nH-D#UEqVRQU^>syKSxer!Zcp&0Mg;7|KLiEZ zUG7v|(<)Pa^A`1q-~sx+ZH3MV3}YC_*0$oy8m3|E^2BVZvLpXQ4V)bk(Q-R;zY3dG zOSIfheOmJ-fm*z*-S&y1X%%p3Yo4U_6j$}_ zhzgxloGQkp(1b|ds@1@f(z23Rv_lvk$=7p>9h0VlLMmZEo$f&|SF{0UG?)wgGLol7 zT)@GYl0zsPT%D0SHBg&8usqfbD^`pdYf&%C=*Zi5cowm)4l1XtZ&AjXlo3`)OWeVs zn27F0M>_JxL4Jsg83h`7*;PNaVE0k}NFjRvx~dbhpZ#CikLkph=yPxnNGJYS&?v&~ zLyux~`GvfrP?-w;33AQDDBRvrykFhbtI8wS!WWd+oeT0CL2hiw%%Op=d*8pFE&*?OL;<)0;vqYo} zQhjFbR3A2ZoM<8gRF^d8dEXGXOs&9RSVYIm_!&F@4 zE(f|w1_$VB{h=0j+KQ1Xp2bHbGA#~RG3Ins9E}s(WsqVrcN#bvELK_Zkdn#K-12zO zyEuBria2K)IHKS}B~=-^y+vTg#OP<5Q#Im4ybFj4&W_p~m7zm{{R ze5E5z)!xUuYIZAUc_VL%8kl(6d;huEFjKR2ly_JBz8Wlk!!$+>G;%DHrX|J9I8EEH zbxG7d0;!zyiI*=bY1r=(y+X$ldAuW@Jd)7mes+;sCGnd2{)^N#iAU?tU!?g-Jhc*# zQpM($bTJ9Dh(>oPv?~t@V0Rvt4H+=#;}5;m;-I=##s@uX|E|2P?`c`|n4d!70T=b% z#p=&cZ`# zeZPYybmuX8i?`{m?r8VED^#V&_YWp`fcCA5eBrpn^4Wb8>h7%fpzO{GOck(2j%yxr ze`2}!Jf3a($2J@~-Ip(~`Jg1b#1s z+XJ_#D{Jt@!fq`0hT`rw#ogNv{=l%=a3!dhAI)sSq<AZX3j{mAXOVjz_fj5m}=-|94f9T@uD4URSrKUi* zh#4-KGi7g3I!}V!DI<%5p+*eYWPcswITjD3`R^*jDX}l_7G=VAstAiJ6E0pwp;=bH zJ1PbYSY@C8?hrcO7d6@hI4tE_UXf8f!bLMXKqni3vdBLZ%P%qp_*(0#5d)6O8qthq zXYhc~cb{~n-{ve9H7%pxW{UnJX@3T0pPwHs{4s-nt|yDSvc@`P_wSOHr%~@*3pJ&3 zOYu3#!zHb9V&@sec1j3wd;r~joOel{S5M(>wBgMKOSW7pyc@`eg=Y~v$0D{Cfw?9F(}axHGH*78Vbp#c&%|R$Hf}bZ(XZdTqiQ(7XLr3>bgMSe7HL zlD-p4wFmIVLrlnd6(LbMqQy#l7D~O}6C_Cr?vhfdQ)3ur-R62&_^FaX&;YC_zv6i#Aks zAeN7phfvf&zBkHb_iM9enpWGCG~)-^*nP@i_lzZh75%8`Al}RckX;b~%e*bb#ep_} z;Whx3-|&7^Fo<^zJo!kYGneac4C3K^ZyP1F)2yN8R^^%tKRbL|r=)aVmj9F$M!5!p z`Z201ru->5j+d8tS(!}yu>*}C%-dEDij?oUyv1P=3bZ%To}xQ+u!*`y)usI z$rY|&TmkZgT?$r-zcK=hBYN`gqNBf*8Yk>xhF~ABHSHOK<+CtXG<8xBQ~|C4by5$& z?sgmr{O1)Dr|M8XMIZe&%^%9M^*dkDouRyC`{S4Y!PvX502gChjev5-mR~jj$3KC3 z@6&?TKf!0~r_WKyFh0?{rK&c#)bb`~E`$H1&BORhQDGsfQ7kj+qpQK9ABqqUGHfLp z;*^w55BX1BSJx+%#y`oYJML5UEM9MD1N9!w>%GTSQMi!MAw`Hrb|iz+KvEagJ=aIY zFb1g%9MzWQE#;Eh(g0%_c~u}S&Ej=@oDnhy7=6~sx19oM#Z&xc$32P|&f`+djAUQ| z&(>35DJfbMrQ0$RYs-j`CMRq3RxwT_t(HBxMD_`wL&JF|Z;tfQ?B&`CsCVJg+jzQ!GlQqa%5Y_usxM={+jxaozhVU86Bq{9RVeP#4^CqmosqmSsI{^`fZ_PF2gaZZs~72UKx-8?`Xo$Ebx* z4L2tiyJczm`p|(ao~d7do2rlDfmKZI*Yz%?Ltos#4`~ ze1PLO8a|FkrJ6}M=~Y2+2W1H_?`|vMeGs@Uv#NxDN-#@!ovVb4z39d`-roCym*O2Y z5xn>Og4#U8-}Js=FX18G=+-m5rvFJ#S*WXJp{hkrDW1KaRBJpR+w^Yvx28IM^N&wW zx%De|l)F@^xU2r8vw5iMpMLI9AyaBsy-!zL@fnoPIv_W8)i=c%yXyMtDln?ZI}R~7 z)t_=frc{Jfo9gf3d(|4W4N3!2ZK`|5nL;X(b=Lg0m2B%(=u|cj*Ws6Dqfcy1Qz!5w zMP`inInBJih(L{bkU*RU_C3X5lIcFG|OhM|lDz9cH?;%Z# zBZJa8LS|CUOgy7aj;v`!Wp_F@i8oF$A-_$m0I6msUG0#aRpJJu8mU)zHX+ZsCOfO# zC~`6n&WV*=YFW`PcAu_@jTVY~2V!mP8k7dMj4T?tu+6&xglOO<>&zLoLMZ1h3G&(4 zZ+gtNO{+c#zHO*xJ@}%)tpGw?<1*f<61nMcb)3`;k<*`}@|6P+*iSo}F3tx~r766w z*Le`5`QfP2>jBhi3h#g$LrZDQ6y7by6jM#3`n!6EQn{g&)1^Es&bdg(kkkrG_@_J3 z%_%(Gg|R)pf~YYmY9ngeF>)(nC}}^{i3UH%>zlH5&U2AqAdRYscUumm+hc4zS;S7o zlalaX9TgM%W!YT~ms&*9IDyiv_!KQ0-SXAItNwCR#P$X)<-v2@U+TYPH0x@!d_Pt$ zSpRENJtKxVR8tL2DZ))9*d0`@4%K6*bHA)7x^Nh+#U)eF^cLe#U#;3~P&#)=fht9q z!;z<jrP2-URmSGDlRBr3hnUK8fmOYa!^{dW+9csVvMVRO$w%YP0nsOIPT@P(LkQ z8KSpKspN2Jy_^yEHC5Nt6<12@<%|#rGPGWPP8FZdGqqmUnOZMDV^(rT9F;WUVeW&n zm7Dcn>b0%#pIb3!hH23C0;bpr+53RC7J)f4(XC3-H{+HjwG8(As zE!eip_i2%??`BgvmQqKi&u7m(xKBrz{x;Q|%6sN4y^pRImj_G^z~={QhZ-sel-@_} zzgSX9mq$#Dvn@yRQj9~db=4gos-X&_B$`H5kQ%nlqs1!hQ(97sc1lX;Dfv%b5F%Qu z7$=fE&5q@o_~kx{soc6HB1T0)F&B2K0IoW%26k|R(g0VtL`-&pn?1}mG4VbPdY(5P zZ1S5}5mI$pd)nLh?PB9s?b7QmNV8+PCN#)Rb}Vn0A`7AKpXbfIkNz!#PhFiX2d7{E zrhsX@e)W%JpzDqgj9GtE@-$vAaJZs9iEC+-N^=FyqM>`aCQ|;UIn($oZ>_$p<#LMx zhaO|IsoHejS%2wy>NOqfB~L$3&rRnY95M9fbY9Ot{GO~1@**JYZ<*IT{_iebp3Ym! zD|Y>6@K+rl(ZLyfq-W33Qk+=Znq|f zuXK1(%h`OUBcky2*}RLx5kc4IV2v%3g6Hxl;pNQb4fT(Q)3&+1vA(PkeKr?VkyJGo z+i;Q8C6`C(zduFw=3$6?kGjp{kI`qjn56VE!~A7fJO4kyCQ=0mY*1g)8m&=F?n2nt?+&}{0l0HN7tXf}Pe zfY+^AVSCTKja9A%R`Za%xbiSu78gsGQ^*UvZ>OoM07ZIpTm8l5XVPATT0rVCPQLIk zcYy?&ns(I_@#B`$ob9|GoqB=SkAHaee%TzTgK$-y#UMPt>q>D4QY{a^E`pWtjMVyxHTN%AI*io77xVufIma7V^Nf3<;D} zT+$RtL2Uw?f|<}exGXxW@QWoi5H6nw%V#Zj|86kjn1wrTE{h%#9C+Yag_TmDR*n$*Dj)gUy^Zw6ypKL;8ueYwpVaSerG1O}OaAj3 z+lpIhltqY}^=ar5UPq6wOEZ@6m;K&tRDlKxRuLkUnlI(S`ov&Z{p9EUUTau^>y~umAK?_Uii#$hNy-Gv*iCB+*evw~qTUx(DMD)cigtMOP+b}%K=~Z{< z9^BsUyp7uFR8#Wz%-juULKisFd%X+B)Yd^|TX$bn#172=JC%I!vZ^SAV9+e-eKV<$~q#oIVuqwTABv%sCQKY@meVGO}f?tMV2w};UG zR`ISryVY8ZJO&PfJ!1V3iY5M@{$=gL`@~}%o~`gjrh2D^(bRPf-{`qOeSM&9f8UvI zt>I5sThY0^k6PH7My=%w10G)ZmqG30Z^-Rs-okHf;6Ei4E!?Tw%RJb(zmIwaXeuK4H>ns&jY7+P>HU{^9p5YX`og5ay6x(k`1t}|1zsa_MjPim*Fa5K_Tq!z zHoZ^-PYAVG#{);H+10ZyBx{(-Mo#1~^F9hgjt&L#8S_^R*e&GqY&>J?DX;19!c+_j zB5!;l<&8xQ%ww;K2o?X-)mieP?*-bmj)$hJKrJ7ZY-DJC2_ZV)mC;bzrRvV}dSVd1 zyo~`IXHQ+?IDTHTBZsWa(%k>yFti%7_ME4>ub_kdl6tEbIq%F&Jj*P}(w_oE)`p)KCakLIq27WvcF>DTqVi$0|rg>Aqv(2krNcyHXW zTDXCy=od1`eIp;J_e!UyHu4<((=_^dBQ^!z=t~isu#5IX56a%ed_pNEnRvuQXqfwH^I7i_J7Vr$wWH#Dpnh6L{XjX zylKz^e4JYq_Ug;7Y<%8{p4g6^{BaXyF4|js9@@@Z{A+F=ZpX%GbDFaQ{a1Kv+PH() z(rdJ)gFARM8(vmQr8{`rYNe58OGXB6Mj9DdJwaw5gr@A|e*foO+{>nSck)ivqHTb! zBI&_S9;ly(xs&ZYh$3F&)$}($rr6hbBmbu>+p?)FyWmUHji$fG>oja6#|PQEFUyja z4W_{-vJqS^DK(!HKB4zt+YWpxP z^UOFb_heT_!lMZXdCkHlh5Q|dCk$I5c>Z1)oc0CxD;)M7|Iwj$FDi_CAIeD{BZ^eC z!G&*p01fG&PYM&Y61b}GC2DQpn!}~TT_DF{KD^z__<0cSJ2?FScBwx|)W*V(hFc2f z@jjx$T{)PjZO6M4hZ1qVXVYQcgnY(1Jm}8gE{RO%0Ac+@g*A$xPgS|j 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 AZ2$lO delta 68008 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 delta 62658 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 TAHnclxVu5_==b+>nWy-FT1Vrc delta 5135 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 diff --git a/BaseTools/Bin/Win32/GenBootSector.exe b/BaseTools/Bin/Win32/GenBootSector.exe index e618ad1d7feb588894011cac7ba883f7ebe9346a..7d3b3980d647cad885bc84e1f3f22ca8ff397b55 100755 GIT binary patch delta 87759 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 delta 87694 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 diff --git a/BaseTools/Bin/Win32/GenCrc32.exe b/BaseTools/Bin/Win32/GenCrc32.exe index 3e4b5e5a1ce70ed627857f363484442fc9702a82..a77006e7630f2d80087451d431d0bfde19d685b4 100755 GIT binary patch delta 81671 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 Ny7SgU3k}I0{}15K5nKQO delta 81701 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 delta 2188 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 bW}eJMk1Vi%SDtnzhDI(hQ#}!ph(i1ytkN%W diff --git a/BaseTools/Bin/Win32/GenFfs.exe b/BaseTools/Bin/Win32/GenFfs.exe index bc3e4476a4620c21090ae7f6ddf4983929df17da..32c813992e6cf9d682e61f844b36c4930c36b3a1 100755 GIT binary patch delta 72357 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 W+g14Zt>lsG<$hR8ld@iZQ};i-z?0bk delta 72182 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 PhFMrG{YltaEcpE&STW&1 diff --git a/BaseTools/Bin/Win32/GenFv.exe b/BaseTools/Bin/Win32/GenFv.exe index 485fa10bbcbedae8e2d44ea7ff9786bf56d7a4c1..df202d399b59282f5c290bfd0c4aed0f63020c34 100755 GIT binary patch delta 159033 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 z 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 z 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

@g@ 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 diff --git a/BaseTools/Bin/Win32/GenFw.exe b/BaseTools/Bin/Win32/GenFw.exe index 724b50170ae070c7d64e0299b02bd4c137d35184..7a816a2e9de49e350cd4f02ce24d9b268afcb7a1 100755 GIT binary patch delta 162993 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 )BrE6J24;z^q6B#Kf( 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 diff --git a/BaseTools/Bin/Win32/GenPage.exe b/BaseTools/Bin/Win32/GenPage.exe index 0c47f3fc86fdf127ad7a339b14ef0061ac97a491..0dd72b849a449cfcf23a4eea12ea58cbd65b4726 100755 GIT binary patch delta 64984 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 GRR0D9d^o}Y delta 64959 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�hmU%6$8#Xz+_$75oOS{AfqkMw(< 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%0DIW)~|r~%2G=0PNls9aB1qb%#of5=88oI)}BL;6W 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 literal 0 HcmV?d00001 diff --git a/BaseTools/Bin/Win32/GenSec.exe b/BaseTools/Bin/Win32/GenSec.exe index 62adbfae5379065386458f1dfaa266c3aa20529f..62b04ee013e6d74d50ce08d47c25b60671820048 100755 GIT binary patch delta 103432 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%0A(053FUIP^djO zi%2jv9jF)Tt*%tkm&!WfFmyiubS$O;y7FJfvI$*p6RTzQb+FPQ9W0rIt0s|-K1;lq z%7Ox0&(M#UE=k+O^T)9e8;&q%95`wku5Q@sP((|eaRkxjMrCjDKgY2*~y9pRDJNa1J2KgS%NM$+(wsWBUWC9UL0-2a>|-R7n@)_9x#FV z8L>LD#&D^LA%~Bgz%n`~A_B7Ri)=b1AyyV%0tao9mC@8nA*~_wBWwg*+Q3a2%*jST zVg}~xjs5w=4CZ7b;A8TCGnIc2*OuU)TbvRUljtvC>Cc{ED~AMyk$|0V@HP{fcg-km zr}4B-yw60|$h|)9{t*^8x0A4WbmDU-vVn#k{CkA0rRT2l?Mfb+XY}T^C$Z&qfdI3n zr^VWB{v7_!Bo@|ygIl)E@7riEG$DJtBfmWf-QL)Zyyj%qt!_urUKNY>>e6gJa59UO zvADB*GHYn)z_(3i{%}rCW^HVB4TcL|or1jg#@X;GtaFM^&Qj#lf!X`Wh}oYThyW5* z2>))9k!pSm3kKcSi%7>U8*K7i(w=`jg>|gkUgT$o$WP~4{Ld+Dl2+O3YzB4KsjQRx z*U1zabzQ~2E_MGKeCJf=;TcKwVLfdrTZ;rmmUl(+%Trk+eF1{uOu8^XK{vRdStwUG zMsW9OtRY2BQ5zu=j`He;!}~olA=}~bI5Lf8)T&Da;|y?*L%idQY_a@nG5_*KbTHw(mXk{11ebisG=`s zu=NJHY&-9t#Rl}Wbbt=DXBjatODVl*#I}rf@G8h5uY8M(8boi)meX6Z`!UNC1MUwX z^8%;EUGdc8$z_V#XFD&?V&uY_=gJIRZFV3X;-JtKH}=N04MW zqlVKPwwNrV&uY^M{`G9;Td(6M&#KDk4q$A=2})6eKj9B%vtajc+c^ddql)t!)HQjvX&TAfOoG#vOGS zHkaDu>V(>d-gLP-t;W(D?r{=jthNi``?4`opZ7lhGaCb*bFH~=4twmq?L$Jw)HB$# zTabK0FY?2!c*r6wyw&`W=PhFS^3|5yeKBk9o$?RD^ew@C7PFPl#fe>PD1%NAXiG_o z`g0t=x0r?Z^?mDERcS1`Bp974km-`w*$6>qmSOaMvOU^hJ=#3GPY+ybL6)A;*ucUw zm{pRhel(81n9Cx<)^7w-Yz0JFd*sgcma>Lau{Y`&G9m=BQq83>uw|>4ah?@U5n;;_$zCCGJ{oPb-cMA0p#bQ-u1Ud zTr}Gw5Pne1ej+~+7rDz$RVRVXs2-4MFBrK$V2^>_x7aL;OsgN*V=U?kdjW(^y+wXY!r>KM_e=)6!A9;SnUuqJQZq@=$ab*yI|A+tIhef)K(N6 z%&w=`abJIau7I`k-tk|O(|9?vdY}2PuN&!W`G0+FT!^pkxqoX2Z8EvBkiA%^%~~)E zWrb6r)3GS{3i}`%d(Lee(fbMM-JKvg?nKWYTdu;)3}is`ZK9XxzD9^PaxAGPJeT>Y z*RY{fbVwA6^a%A%dr8{kzQQaW(f3}fLs#RPm+IZKz9IiPvyf_vUvHgmVEO{ z=HK9lmQ_{52M;}Y*i{(g5}J@Zc4}N&$s#;=4kL-ch>&&+;>ZFfAHEIY{;M#3Q_Q1Q zu|;x!3;%Kz8(Qnm6AGB3j@ZQgS7Y|3VQb!hHCy3!10A6-$(;&e`{*9Ow;IcvV|&;J?&4`qgkfpeH>+p-De7I$8@hBY6qqdYg)38ff%#X6#F?|?Fj zP_CY?qqLu=4|5meuF`ENO-drgoljZI0u63_)mqk|J-%YI0_?;$j1tW_aTI%94;%8a zZ;l?!ncpYnPLr^^12|)#IUJr3ZFxmlu$n?T#JpENR*x*X#(Wq}{>m;p2 z>NsN(B{C<|ffOyIb%33euc!Wt4W%G%kPYQI zTOmJi%E}IM$KotB@`ZN-sQ1C}n)$x&h z{Cd`;w(y|)17afis`V_&P@A7x&l-~?{I;G2ch!0IgP66kR|rT#gxU@AY0HmwF%r|* zwZvWmuT17Cudz@Yj`7YoAPf=e4=+04AR{&oI0VZBC-Z%;u|S={)+M$e7->I2Svi#7 zeUi@cj`-|>t%4@O=G~J-q&-xCWuauujm}chpiKQTQgE@%yUdIBNIHCptK`F9M;o`{ z7~k+ZYuLa=8#q6!i2^~x=z&Ayx7G5R{M*-=Pa}Ays5t@`^y)0rII-W8LKM{G#y418 zG+oN%R>V@=ijrNM9x6+=o%{(a@Vs&uyNouU#xI(sN*Grt#IOP8*tQ*kh?Gb0g>SGy z-pl^pn;g|mcHO(fJm{WQPj%f?UULKUBijkV8(2VJ{hrn+>roO^SzV*GE&4n%9Y5== zwuN-lydb)d`w&LEJq0b2bqAHJxUw}NgRckD@tPeZSfqhws;N=f$BH8*`jxGnY>Cx& zP7IZyv-+M$K_oWGF)=NYmYBG`^}qz~|0atbyPgP_uvu5n!D5uOL+NAMqqEw$8tJdt zu3!^RJ(7l$@Tl!4Xi`A4QKcL4gAT5r`dt=3_$Fi@hIg*L$s!u)Dg7|bAtlu^nYY}? z0*!GqpJ}J=rfg&_<+OP)ipK&Pwwp)24c%G-L-VM-O)clh+>)#M+9ZB{BkL_EP2z!X zv3$Rgk?6ds%HGdiaK9=mSS^`|RHBru`s%wA`H8pK%S~Q~!4iS10(Z)yUu=qr&qr06 zeMOxwoXTI^#Ddd)$e?`U^ev`yPm`m~5@U#0iZA(L)$v+Ds9|;r^LFSYkXs)c`aSt+ z`wG(bG)>!=`?xBrrkaz%f8WFsy|?|BnDyDrhGk1Hi1O%Yy{$=9J22d#JRnh_>PE2H zUIm?yZh^&@lnVw?6G{i?xsxf^^Hw(1g1?HRaV^^AeH ze47P!*3*7ntJF4WhJb~tCOaNTO(#L6mbNenGH48c>1`%%nSKv$UmZ~sXG9RHP_@A7 zP#2;d5Q)oee;#em#OpRWnlsHVNA0(;zyMD>hKRFH_X}&Bn>mrs-h!d!-D&)-EvyrX z-{mcs>w^1q3(IVyRWn!@TXa1e%@!EpbdNLLCr#GJWL65xFPyIL?P9N)b#gSK#P!rJ z`t{VVxON;d%=KW0%o&#}-A#RGD`x88)_MmG2;7$MuqFd-X`rP%RG~nCa<4a;crv)a zBagnkY_1g)l;cWc(|=DXs4VMW)7l8!l*Yk#n79x7$9J^)_vjs#HM~NIn3Z%_o0Lri zD;=Z^{ZN>C5pracvg*Lr62!I=3blE})B+QKE%P`ynT~o6?OZs<)k-&=NimkiS6KbKl z4#K3~mT4z=&U*|u?*Wt^zRWe~C+mm4!pSbOo(9-d{^ zDX2p}Fib+9*Myz$v>#%GD*w+@r6IGc2O7DzCk=f5KhBk&!5!{T=v-+)axo0gVKGM> z5k+Q3SkDm;Wi>!d5!h7(gz2Lej;byiJ*4$0F-@E=y*9j(Z~9aAGfoBW;y>li7W?^9 z9p|F4PGzx=aNfbfq^-C!UJ$8kIK}zWZonCPA2`2z{Di09$AzQEA3xF0lb%t(#Iw_R z(lhEdcxmTJe@#&f6unj6pr0rG73WFMs7ok}dH}~xuHTn$HI96M+fyw!^3&7|hBK#H znCwRs<_qIfe)BJ!Egc|UU%_j=2XY>Jsc}^mfBk{n#+WsrlAn4YZ#TX=qLR;fDCZeN zA3ouR3fXKgsec|ft&j)u=eDuzc-=xw*vA+%S3_J1F-De{lLJndsPO&;&d zkAKYC_S-EgqyzQu*gS01uhl%Nsn69zI8%Ryk~xE9dVGRz%HM-e`Gn=jU43{tx$|rA z={wkKk=LL9d%=XM$zZ*`VEnCCDw8Do5er{$_2u1mvIK37r)~iq?^&@E`@ud_Xo0Iq zOj8j7O-oH@)aaJO)U5svsI`z9YO%z1ybo{iDcj|+dUNhmV4lKW{S2pnwx&6eisi`| z)jib#U#tVE+vp6_sAN9>Gd5U$K7?QVjJ+pM8NhRPv5)0vt$5hyEDXcdk)LBi;&NZU z_H$@?$*uVH&$TtJ2D`BavmVnoGqfBQ>;@f05--|~(=@;Jb0TCrtzQl7LxcpPi$KS; zk2zM-V1igr8rZ*k8QH&;vX$!%zm~l@V(*B zs>GynS!`Jsx7~^vT`*=K!wc%f;;End{4c!50oHZMv?JIt?P=CFIEb0pvDYbQYzu`u zCgK^io*Oe&{i-oFwP8B1g%=YnmDnsnxF}xHTL;)LvY~)4J_JRsUp>D65Oz!M;)4%k zf5#l&@d#_l_aA0m4fS{>yyOdRMNvoC7VKB_inGo4NkAPaTX#ki{Uqq zV>?1#ogv@zGma((saJ=YgSY@C0(0=OD^fBn$!7^(`-RIn`OLnxiKk% zkQn>b$l|hS(v_+_Gwti0DS{d=OzQc6!v@u+IO3vc_~(9uzGFW>@(qiC^Y9zi8cx%1 zvA-A}H-F2v$y+)V_5P0aG|1{u{^}X_z8o`@$9>Pn2i?cDfiyQrl&Si&`{|8x(FmkAg~z;IEy>$&*I>`}3@E z53NO^@rxCOBP0%F%B_{nazlWcgDEl8wdd51yu$_7 zDq952in4x44Os9P$}J>#<`!z2+#S(nxzIT89z?9blOk!GXLQ6_9j%`_A!x57AcGOM zFap62AlOX4+6)F0rXzm6fVIP$;oRjSds~JniR~9L%7A<9A{Gtdwz_`=JqF}8@jd6^9{c=C$NEY0{9jIX<&FnIY!i)KbFNZ_Vz*G1PCBX?QN)!$q4 zoS#r4`&;szKd~>uez^%Eiv2rTDl+S+=fz7bUSNBauA%j~D#R9(OBiXu@Qyi>zkY=^ z^NPJCcARe_jx8H21k5+2lCL;v@aKPBVXfuUzw^MKS#V1lvO#;LZe0}yek`infkc?I z_Qw*WOmz_r`NFFZt?q$*!&O^fUR(6# zBXi^c;|rIb@P1#)jd|!bR@3wImQEO8${|d}n$Z z6Taw@+`e&3>ogaUr4NFgaNH&wUi|qI;K1FRGfUVcxmGas&P}-SI$LDhK|z>9uA+)^P{Zpt+qLK$^c+H{IaWj_b*LPm<*mK37g3hE3((}n}%$1NoT zaN_tT7Lz9g^1PeaE4-t(*53bolht+ZFmyHf*-h50Mp$AT42^W+t!|;?+*8WC{02Sb z?OuHOEjG(glQR|jxlKcOXc_Y|)a5UzEad;0?m0dGm2O&N`y1U?R2C|CAIx1#Su3C2 zO&l0q_6Ft%XosO%HHh~u#ggXJM9NkNJK-OfvNr#kz28f5dh;yr{2P|z_w}F*HIhG0 zvP^B5n)MjNUY7MjSu?vYenj?>XUkrQ9yZ+81{f0qI z)GTlw0cbg0r9Qf>HX@e9>*l~d`JHX}uS7@QMWTb_921?1xLhOSUlRTJE^FUNB+8K5 zKN6kVombsu-Li8)RzV&5&95^bzhY0M7q&g-{$|McTt;6lE?btsE%P|8kV}8Z75YMd zw7K(8m;5@J6f&(c-*Xy0SiH9^CpXz6zs^cL98=cf7ygx)T{-Mwzu@OI-(SueM^f^r zPiKK|Gd<%zlH5n#vU(JFYH!^QxfQWlQ3V=>hh!p^yWL}L+_dlYavyig8j7gA_dOO? zgFLq&#NvBwbP{DsyWgaqhE5oat(OPpyA}##yX9&w-g09^=Caz+UazzB;ZbbZLb-&V zLu@RlvkVKAf3W9TQ8+!c+Y(x=-%P=9q=i0U`k`DMw*YzdT=JMt`Gd_FOWtBqiF8w3 z-IS4HT~A)v2y_bR>=7?C=_FQJt*SCn*i=f~Oe}0xb*-vOFcbEH$s!x~PD=qz+aTDKbK?#y+ojQhCZjIfv;{$&X54mhxYeb8&@jgytA28sId8z`jaun;e#C;j&Y5tESHrH4)bDs1`5C1lomeX2U5QtTqZB3Xr+O4Y+sB7~CO z|9Da4qZM(04}6SKJKUX*SrEAwA2UC1E#-Ro>pVcUL*a1OCoCw;T7ziLi-hyHV!|E+ z5V?G+M&v9U{S*b4{shfDaA!Zk^a$K{pJ2lvT=z$cQ_0_m^_f!|gv+$bvnZFCuN;G?LzSq(K-q1|)%#QVug zLyg6_0fOXimaO>O+E27bjdc#8BZ~c7Gl#t*A)jC1yVvFPL4{$T88s zWF@Y;F?3t<4Vq{zw$>oJE%_2YZoBJmKv*MrBfT^#Wa=(c9SIxEl#m8G1JT@NIkm+bn9|EphRc}} zMlu|zD6LwHR_BeGwub1otszq3g(W1XS}{veHc&)Qld{I^t6CQ6DZm}jtF}d22f!_9 zab*S{e$k|edicnsG|~kT{YAH|2xokuHIxC(?0o5$<#pUrS?SR9in^n*=Diw9U=J-Q zFon4-r%|enA?Of0xvkg)A38jf*+VZ})Y-PL%ER*WE>F*;qrShgp`Nw%j?) z^Daufhn==qw+Bb^rI+<#nRq4=P0d z#6<}fIVGip;+9fhZKvO{C=+Wc*Ru75A)T(+0r?Y>*32`Cu1LsQ*nC}`68b==>{fOv zO55fqSNu)7uo@(v5ib;%O)TqZCy#O&WXF$OHh`vh z=oh=9Q8=L1L9CdUDVSI&Yv+&|)U?;_SRDMhQd?=}s1}G8ibvO0nrK|oR7C28Ngd5! zH;Ecp64iXmzJfZlAM=H^mDXPLtuT)i`z`bhyU6qD+ripOV@IiL?_9DEYAXX}XgGab zmFdC6Xu3m2$a#TC$EE`B6G)-u38bp4(j?xdpp4t*eNBwNqWC zgKP4S4$8~Cy2^&8L`Cc5+qsVn3mX${P+<;F(pwJFCy4pcZi;Us;)Y#~`5FWZHRcl3 zn1$P55=-&*w{cPxQt`6OvgE%hGatAqfl)a=LYWx`2N+=Y@S#v}Nnu%JbgKWcS(<=q z>?>mKN}9oS^o8mi6pgJ1FZrAg-&bE*s`VV2GRXTprv!z}-HL@uar!ar!ut;HW{k$!(jAN0y`S6X;DFf>t!}~_S?*Q$&$mF3YF7mL)MRgh}_3Bbn>EB9e z&|3)EKb816x8+#wcc_O$+*a7cL}(_tY8*_sIu%jT;#Nv;gS<70f7e=hC&4C1kAvLu zEa1p7%R>#HU5tcaqm95RxZDLNQr(t5Awjg9aNE61jS@XgaTMPhqReQc;p%6|eVpRd ze^hI>wrWBx+K@I%z?h^?LUHQ?$B9Y^#!TporHyrk4RuT#f#~Y97$1hsH`{~}O?s#7 z4jKwuKVO*S{=MkfueDKHb#-K+`T*9EN;hJnv~(538+Gwn6`u2`Q+4dGFl@CvG*B8v zJwlaf1~HVh6C!3ns~a_RDR1gkRO5X`l-r5|@~P(FZO10e7^bw52X!iH7pC-(MLQze zC(<3bp>1w*W44jyAv*pv`DohEK*ar8xZC*zyrVu zz%_t7{9kHMT3Wpbr6Ko^P+WLOgc8(tL>Ggt?fy;Eiq7u>Ftp$guT)^rBB-{(KWYr5n{Tm3;(OV@|o|&&QLx9 z26%e`S_5JM{k!nP9h5*vy*E%pt`|9f+5sg6S`#`d(OLtb4~q*rDsfI87dtAmDP+GW z#k*!utPpbdSUx>UN!G&YI_Ie8wn2Qm%d_c2M=0 z+eK-qYd`h!&blpm)s|ywGH5!We0E#WTefr}1?;kvLv+VP^U%+>ZvEY>b)AKGs%xf#3<(GcFD~guO%)j z{E(~`&O-ZUjPh~|dsw$6ZP8F^;a`@QSspqE?$cEXuemIdBy3%JB45^3S?))1U#_<- z?JiEs+=c$?93#A&5>WG;7Gql?AKFcMS!1m>K)u^dnc?_8DOMR-vr$hW!md5}g;-@o zO|y7i*QIAsOq>#LXr5uVNb>=&05$?XR%P7D1hIsPm` zX`HB$UN85z4$!q7ScA@WL1oLVp&Cbk1Z}dWgo`>8gDEs;n#c4|-lSS;OjL&IEk4wK zTD7+&ff1yeLkdNU6BR7xLa+Izr_#!x4}Qc9;(5K|>V0O1`Pg$|$I@vb<)x@uZzb9w zw0%ddgilRUqD57=`IdT7e}IFg217WF^jV2DLWk%|sF1 z>8p72fIdoV5geQszMWH)hDFo+C>e%&#Fgri29+wJ#Q!~XbH`?KVv2Hy3Tj9{j9B1) z+7A^_<1Uz=<(eVmeqxoQNh@os6){>QTNZ_~R%A$3F34f_IBrYaz+-Vo#&CO#+=@Y2 zeVwB58fl8TdOl%rRx<}_;G@!%Js_v3(LiN_(cV*3=Fr%?C4S@3Q($Mk$gtkSzCTzQ zN;xnMQBueqG(-t;WaCSE*>OHZiD{{ki@~+?LltsB-52^10_Q)Wl(r`NUyLzKp5(2g8)clBBI1XsZR1|KHwY|Ms4v z#isPejZpfKyL*JvoXEdALdm2`I^YGR52J^zqj5mYLrVul*j6Zlu-z!psvMUm59ReH zD84wD9x_4c;PrAJF$6m7Qhj7B7(r)GP|9VGAv_~P@s%%y@s~1`B-uBapUY5sQ7Zlu zl@gJhJPkOBkgumJd+E#48E7_KhJk?@uIgWWf0ojK-_2Bx(YK;3WwMbTn$J=Escqqj zbCoOPHlGJ+hr4i|@_+)&oUeF^0Iw`iyvbwR0;LP3Q*<+1Y0JiW1AmGdC)NY$Oq-Yk zGFGKkX85RIe<~K-=rF%}usdxvbx~)<;fS7nk8nSz=MX+=vxeqzLlJ@Y8PS&g-rDOH z@5g-J62-?w3v{?)(S{|;VA=H{Y`E?TnTP2d*d-XbRC&&Cb_4KmK#)sech`bmB@rjo z;}qmd4uTZE!3`87(J{y_1mP6KWf6i5e}k`Dsx*q6N-X2Tf{qyTZ*Ow~Ydn?Jp$?cYxGIxILsW;igGJy6XWqA+@{2go|6VdeM85 zR3hB|(iymBOLm;JPdvm++k~4Wtru>8X&GEgpPtfexIG8-mnOmO(>GNbq`PL}_K`y1 zrVQvVdBe5z?=QIsx4Tr)lirh{Ly_B8IwRb8X_s)#(pGY_ar^K};Q^gdxIHARa1*6L z!cCSEh1*Ap6mCx`NVsv5yKsj{l5kU{+liD=nsi0DgQXL~9VqRA+aI?~?SN~x^q01i zf1e)GHn`bT7F&f!nzR9KTK_m{E!-a6Q>Eo_;}iQxOUNAp0(JjMx;qALpClMIhMU;C zhm=I`Lz1LK-R%OG;)m&O5Zsj1o>C*Y{Rj4zToV(zNkif=xdo5jU~PF12p8UOz@_&y za0d+ND<~#{it$eF4!A_uorX5P-m3d}q)W|XZV`q;ZJ1uj< z)G4TD=cXq}XXcotX(x;15vE^cZuT<;@x+lPS6-fO%H-DJ*imwLq-jXqm0y{q4Kq-6 zj#FsfYLv;h@tKqKY?dnFpL0rkPRv9N{aRogHOjQutyg)zMY2H&KKkcjnhTHu2+2a= zm+%Z&37C!d^rd(P6a$XZ`!b7^1K6~ThfX&oh#5WinF&&Dke}M$+<&0q!iDS=HG8k@ z`RN})%fgQHwbM;Wa@Yy}%XCv9xuKaRubL_{nsNdR<>8s8=Xlf%Q*g5!yjwxK?GGA@ zG@G)b`_Xqj{Q4OtcQ10p&d>c&$u$!i8sZ`O*nKP?^?&_iuc!qzmdJ6MKFeJ&|`kPQTtMFv;JlFd-|7EpJ|EySft@N zzE{J&>M-9s8)>+o;Fo8cd`&lhjFk+RwXk!3=e~15SO$yZUxF~>$93cQ8}#tHZyf)L z9%R2b-g%bE&+TlJI9rCLcbdfUw`Q7rjLAW9B1gs>9rf^1Cmq$47%if)OFY5=gYlR} z4}2t14}7qv?(^Xk{o%V=8UeME=Eh0jYgO@b-fEtytMO)j9B)Wi+AY@~0t)pw3s!1L zHmtj*n#9Mes-J&at*57cpwUz}>7zKwR%~B<#QV%QdDUpMGfs-wsptP`k%nA$Kg>Uv z54Ooi<0R8j@mwSFc$^eH706cv8p-#@bk8}e6T-sfbERR{nU#1}C1>H5K z_IahdV6*(r+uD~&?{pVjHa6S_^KlE1%~KzA7hIF~9_JYgO^rv-|GK;2{|#N*mVKg0 zoh=*5mCoPiXFGo%s>F-s(I4ssK-3ve3kyqi_D$ z_iy_qEwX(>e~@c(;fb?M?y#!=;v!QMLo{DS4s1Tad48>nrlsvbpFn^6peyu z27vy;s9D4xB}1+&{mj+EizXJYPTx+L1@qjVEYJdd4foOlGjB4-D;Dd$q?_g=VQE z56?9<^xBQbBY;>UPXD`&iv)5_f!-ldWQjMFu`YNf{w2ZXJH9Y^5Qn^t%{Q7w;WU`N z1t$vdH_d^cM{{lbWISaa_?f=QYf&&`!Dx2?%1Stkj``4`-J=d_wSegDr%Q!`rS1<9C>U9!0B}f zHYB9*4w4iBj}Gt%Zxy2=|rDiky2acUS1Db<> zvoWE~#?%5H|J4an5Fi*30tf>{0-^w20I>k`>I7dY5f4d#6u;`YRHpT zo4VHUZ{y!CEIf?AyxJ66RJ7W3u7+=$8DmG2t}=4cgz;1S`)e<8^uoViXY%Rj=;J?a z>VzqoGyF5B`s=a$MYPFdr(}ls&$3P!ZS|j#HEr6|>6s#OyG-lY>Ja`jMo*nK)<1k9 zvKs2&Gt+;<4F4I^#*UsaZo=3x{u8G7&lov*tccfq>hv*Vr~7AGM`q$@tUa-D6DEzN zSQDm9%gPL`RkZYVlf~F01u9qS$XWJKGbYRxp_*ZjCw-gl@NL}G>Gp7AMrMwzrcNsQ z`b|@sscsu5hVZLzqQ#y%dSvFSEBh!BrWh2v{2pBt(_@r?fD)f|@VB#46sX}EenzGgOIx|^PQ=x6#t@<-6j`STj~xy9iewj zj9b%B9{t{s{U$@vzVJ>1OMH#A!l8k;x@HPjKviF1+4Xrdg(4Fts!72!G`( fQ!j-MaP8the`RWjvsI72GL1LvDjIprRAu@I@>FqM{()@P0uQ&@sHAGbn22tx}rM%oMyO4m4iCky5vI ztSlj{tjE;yhGvRpVr6AzPgYjwqjhk|tb7WSUVH7e z*S?%Xeo170N#y#f_7koBN9(kIRk|S7gc)?Y{9yc;fR=p1CH8OWKa2TSY^-#0>E3v0 zP*dj-d4$e!x-;)gyOc=+LR}>?DRUjM#Bsmj$|UF%Wfn{&1=VP&0_8wLm4aS;;WFg4H1m4 zK8FgqGp}bjwjf*isiP3iZM|+&S~xV8H(Yr)bh*)vGekh4OQ}gyOMPqpakB@aM?XZU zp{`n%6X{MjxSM4-ZU8S^FNDZz&F#%2&3mQ`dTy)YIvJi=qu9!HI$rglh3}ux+^H$k z@I0s|(8VWclh#yBXgrP2fcbzC! z=Q-!d0Y{W3jqBIilwGC760LdNm3Lj28+#|qu>_b}i>7IUSzvh8e?pXO35}S3-L5o! zp2{1Y)C5ZEGxUH)u2mZujquY}k?&5gMI+xJ6Ed#1JJwOPD~P_gp}$a@lT2#S{h}iG zp1Xou&ggOsxU!tao@Qu^qD;jzsM2~?Hz-->>FF@M06Ajl;K6y+4)k+Q_3%*gT5~ebLp-p}QwB4Ci8BXPCwXEBELFmy>0}w}9;>|r@{R3(a zDFivk0IJtITzvM{Mp$&TJ6&-dZ&Z|CSCChS0&GEAcBrF-u+ImmqCT8N4o5c^+J-1f zh{}uVMf$&BQ*O;y>qS1+GY6f}?x+D3#T89(11eCIdCqM;cPcrEA-CXSy^!%-VPlw8 zM;)GyD+YJ^xxy3}dR@UK9YDvghN48FO#*yv=A_Uj zkvx5?^5tZ=rrqsRaVR;Tw-OSJo#bc!`!>S6?s+-VHrL_uIU9nU2 zy&Dix5tZ#boY2tTaKusY8D6{T4ZGP+ye>{(zRD1@3_WfIf zaQ?GJfTNH;{haH#-mYv_J+V9UTvlaj7&(0;lFd=@)91+a?BRfz4yKvyj_V|&zQnIP z>=yPNRsAXIjCOUM2rq&KqE9%fQ&8p1KzEFxi%*+w_)=&S1ENjY_K08Qb`X_xr6~QZ zJM-+R)F6rMTNr!#*+R{>$=a{Nmd_U2)XpHRy*d;n3P(xVu=-F~-dU%p+lj5J)-%s$ z!7FDKrG~lF!(GS2ft*z|3SRlFTCtfVUygsp&I|L1LVwC|tVD()i;fS*Q6!YtvQ= zt>mw_iDx=~zRf6SIZ3}%xMaO6&%koy9TimFb9AW=(gK>vEl5*lWki0<+dJ<7oJb6PqS0%sZ#(J3E#!MV*8d$XB3ow6K6 zdskHV2SvwqLQFRzR8n5@AsUs=DvB8>5K?D)@)bm&j=DR{mUxlDOjqh-cK;I2qFXsb z0daJti^p4|h0R5cs;3}k!}#h_q#{HS=|9m6 zROK{%QTk<9-ermjCljw6FGG`v_au#DbyL2lon=NdG^1nP9ctW54K-L#U{#CDyPwdQonOIC*eHNBy6yT5<)bnDM*H^njUnWN2E&v=m!b<=IX0W{?4|ln-l%=JA^jncqriF)eY@K4eL#2xs9m<_>hl<$?7F6Pt%Vw&H z!7-Jn+!F>W;hje#cyQ$0A@$(`uRxKGC3i?2SipC7Y$N?PlAr0=zI8q_9EEi8)qESw zfXrcaBi^J_l)Z#9&jny)35@XSbOg}uRrAqvZSLZ^xY-qt@QmaEspB|ms9flFzcDbv z#Fuo68YdzMn+Rn_WydK$W{Q^ai*8WHF_x%tt8q`y7-#yQ5Y)XgzAYH3QPym z-*lUc1rNtb61bTvaCJ)(bEZ$sKOXgoc~uota$wYSVn%c_LrEVf6pH@RLJNb6ttV~D z%Nq!6G#yOex$3>#23eKXolIvsn7OmyQa*^}2nY#b{mceQKDC<;WPXx?$FubKF+F}n zj~~+G89Pe8pJ6&^Jq^vBv^%OGu2XqXcbk^oT9k$(VzxP=Um|-Kc?RO|x+vwC z-Ige1W;g~=X1to|ww5%pZqKo})3-y9B^eGIWrm1MV|5FR*`-^2TKH|AriEN;%h2i@ zPKp~XTh%7QyzJir2+gX`QGQ5?+DMqC90R(BI*sKWQHSSC`gKYq`xaAN6poq>HcR?}r&v%co%)>?TLGmFn6=j2wn)LCdn! z$L!ZfypQ)HLIMgazdZwBMYK%`c{-7@jcP%2P7fIGUe`@aPA6^QYYFjMNf)2`-fuuf%++rM z$2IP>(256q=jE&F zba2%YAXm>qx#IME(Pc0R*lAOvAPrafk#NI{RNMjlqwe9uetwy%s7GyzC!|P4w3LKZ z$LGcgXpuGFm6uP0v_jR!5>tZJ7i!<6GbRsj1*?QkGbB!WzsvtWw;~y@VJa3E+McO-J0Th`e=O3Jiestf_XZ zKYcg2J5G~KtHf|+@U$t0Fl()QQAo^^GnB~7+}JbHDVoCOs3TV99k}@BjX8o}xMw=q z>8kf~LQo&K)DePXPPERE0AzRiWxKMjkmSPJWQ{AYMwi=4m{%X6I)DS2o845_u{v z%4#uu8I`fPs|zj3Fk9t2NQZ?M%-ef^s64P;rz+{mc+>%^IC<+B<|!_>M7z zJArVgdvS9GuF&LevG4E-&=mr?6B($V;99c#9XjTSHa|`h*wy zj0P=y7SOp~s7r&MC+I{k^brl3fE^Ge*$bVdL6;CTUWLZkloSnYrrMdk$X!$@6yIz$ z&l}oivgv5>sLByKOt@2BNwbjBVcQ{O0un(XlW|Q9A>g8h%4Ecnp82k%sRGC1wh&ID zg&vVRh;lPZ35MnUvI&*Erhhx)na(yy7?-FtuWl!=Gl7=)hR$OUGMqT7lSGG%SkkRH28H1bM zv4v{U^#4|iH7k9!$aFhv{=aK*9)qvv0awyYaMmF(vxqjZ&?B^bm~w}g5{$G=_y4H^ zPHzoLs0L#(MEJFXQ2JLcpSXc4cO|Vu8Qp@=#f@A^g-Dtf1y@sy{(o)@Q$t->ooCuV zRpn>+BhOI3s*u4*J9co>fR>%Zd}6^Tcy&m-FTo_$V$*^q?)1>akis2&+<*>|d#H9D zg(3N@Ow{g;CwTFI1h$7C9ndSG99UxcxW%ia2eG>P6$%w^K7XseK0~Py4XiI-MUOV+ zZ5}<)7Ft2150Vcjul3PdojpCbwdlzWN+ zBLz<{618;Yh3gPqTEj7wq5N2H{t(J{o-{h*2;9sIjuXWUuDmE+P9JxAG{lU8wlx7u z1Wm0;99^m87qDc(@LHkBREN@-ei%yYu*&QkN}bQqP})^5hSE2YLk`O6t`9=Xbp8VJQ3BlLsY)B8wU9e#GyqpOSKQdc4=HYp>dx@)#{F?X&3m02;=l(^a zkS81kMge|MrJQX|=gms>7J+Wnny+t)sS4!jzo^VG#(b}WY z!s60ul@jW+oL?N=Vgz}6uUKlG%gC3j0koxmNyaKzSvgJeKW4X3^#Vv~}@ugb%UKoi(rt{HqMk`M{f6>4RK4V%CNpb386HVYG|3bhY$hi%dSjB<?%fkNQ|D@+%s_CnmB*E!|+qze~0_)nYj9U@mG*Tl3VNCoEHq0ftaY#5Ez>V#Z<6 z_FaV(g^fivwV5h|Kt|mlaYuAVY*CpGoKW|!g#6gP3KYNeen0vh(Vvf3hnfz2QgEpr zQVZgRp=#BIDF`ltLZU@*!K#_zxDswUaQYwR;^$H_oYcU1I4g`;F~YsbLNHenrLi+}1cgcog7X?#?vQmzWfi60 zP>h)8xCLsWD7K<;>DHRW5xO$M)##?zIve1uMo?axY@O+tg&3EvM7HU`m{5##Uxf$> zJ(EQquS!h}qr!>7nm9tNB8bR)4r|4l^U=dP8NU{b82U0IBmd-NVa^ntZede*2myl9 z>tH#aDu=Ee_Mu8N)J@1yAx~-$GI@tC6*$W^2${Y^mk&s`2B9vXLMCev>I#mki@+J7 zL8wbOD}zN(OD1(tDnp6WvZ>#>l0@&z?NUm4y+1t!wdsEUc}_*6G6EDNiNc|%LqoCc z?FsRe!)8$uCvv=Y`okjCPF4TwN}{^za+(TVI&DgIn&=3wB&w+{$K(#7gkAZ>3m07+ za0?|eltW&)=6LwB2UpBG=$ zoaj)(t_)M*=y$F7aO>bu67rNjl$nkp%(o1<%GXVB<@p3Wc+(L*CEQX*^mLNF=uPVsuaUao771oLCM*@5so*{84lvnT)3MCjQbFHs zv;j~DKphqi&8B14TC4&R54Slb3u{20&j71a^=LX^W{JYkmq%eqsV)m0K@~ZsivK*K zRV-=Gbj)a5^jJ76}q0G!tYYlf+pe6r!?0 z!ruf1udE3n$8j08y)lqF^6Ip>Bx)bw(9ujU*BU_8c_Yta=aV$$zimWqBZQ|=*ucN}!ulw3VZEgQHsukvYcR>}; zub@ha3J%v=SM_VEVWq=7M2l;dCM;R4fuMvMs4b4^9y-DUkMS|X+VaRzrbLy|%2YBA zm>7&trI=~RDr%-$BLPgu%qe&>B%aMdvrxxDPnbPwv{Nmwny-qkLNd|Xq6o$p4N|K? zVDxHj{Bbl0>ftSQM-G)W27b7awPu!o0(}>|?DWigjE-|IL4%U)Ucsmx^rN!M2(H4Y zO^^6iS$3lH$ z6(V}3ueGu$0@wP5YVpGNt~G{gov|1c?+wE==Bcjk%9qBw{#+k zIQ6Jf_6_vF&?%AP)D#6h?fBsIUQS}AniyFWykKy3GXw-aUlZ6gngjCFJp9KUrr;qrW-V$ANf-7|342ZKDw!Azm7WXDcz_S5G`TU? zO|~Mq`aXEOzjbEm=>3`a2^rwVnxbW|Yd(z69ox+8ClySVx*P_f4P)cUzq~zmfJybv zWb~PJ7&y3oTzkrj8#mbLb=)Wh4&3%*b0^5{HYi` zMYq6dS{0(I6&(d@*d!zMX)+CKjb@=W-cnXLFtS-Eaa5Z~6eB`+ilH@xVf&bQi%}^* zW?Ctgj@7S}#$ID4M$Q{zZIBZDE%Ez+#Hk-w{1&~ja zGP>nvR0h*MABO4E5878{Gr1ZczP#H`Q^v`XfRFTDjaJ`h06qM6ljWU8l zC__viDCh_h*lVqZLdh-YiQ$6KaTM8rR>+K_cq16ojdV1TKAj#5FeL|16P+jpKa~!V zH64(e2toaM(MdHUCIF=ZPsmB3ybz6MbwW0c2&LCrjU-GHKLq}^y>rVP7?L%UhfVpEn3Oh(X2c6ng9zh@}&JSP5F?Q2IqcyIIKakPhm_}$ZbUFV8 zU!Sqm50LX2w~SvT<$S=4$H&v{(D=C4LhQ^M)a`f`9oKiK*N~FZVROK^J-!nmcA9XH z1p1Fo=om_ZAvn8)Q}vMVa2DS_A+`1SFH|6opp$U4p|}DYF*i&Ho_O>s56X;}=3nJK zGP}`jdS(YF;Rj{HzATjTOu(t~=Fa9>rC;HRS|h8BQl7zpx5(`TCrM~os*@B+w?&{r zU!WmyL$gXR_)1gC6G5iuHm3`)&@4G6D;_saOprQU<-H~jl47p%c@rno?exS1HjCe! z*i(YYT_+77S+gbykvC6DYD{{?et!rsFHDMTJPMCE0}$NtDrb{p+fyz*lHzU3Y7vrQ zgFl4Oa9+Ryv{93z8jqoD5b1Q4&!61UPLEg-tA(06iGnzgNpm)F#9Tc+zWo8%AeKHb zMTKQhJCiZcY99)bN#Jl7Y5b%Ct+AMYKY4Tr$pVBrAVAn5_YRb<+|QTZ+lN|k_q`qC zy)CGAI?<^@sQan5s=O*>ppjw*zkP3K)|bakDRM?D(CG8NT>!tO6Nr@<91Wg%UECpb z?~;yrKPBi8jYxcUsfi`#Jat>TR)0bL%4+B$O3^Vr;H4WryQ(4;X4d;p#?=)8r*3U# zePOe^rr|l{DyWl*M4rKr7k$_O;$1QgSYjXvaI{I4psI{mduD=>tC~1|cJ*%={R5v^ zKSqZ!Tl*&#{NML=cFu=biDFS?VGp!JVx}=K7WKs-hK#k%;2v;5kz!p9B&tApp2I-L zku_3|)hP05p+u~)Py)FwtO8}$E$Iss(*Z;8kP;MAmjp})&FR!ir2>XC;=RunS+K(5 zo*H2!U65ibgJaI~H>Sor^HEGJWG$xzE#0g~qLjcGmat?5Bcp$qg1sp^ytYS#mrK&? zgnyu&nM4Z}$QxQpg%Nn1Lc3B(N<>Wu^`o$L)egQAwA5BY0$v5ze(FR@pScIbJ+EVu z44{-3g}8~>VUY%L!6*@q&~x=Hn0RSUC0{?SyK_EJF{l%q!eqR}5+bCC!t@qdDrIR)!FQ3F_i3Kw_|<9-$J+fcHV45_A^Z-=&lVN0f%45o0bY%%7UxvQr$) zlK^lB$V^|Nt{s3nGd)#DZ=6`oV8+i(@4{yD+Ucp%o-g>|83X9HXhvJ(S@M0|$a9|k zf|t%{H*gOC(0^Yjh@2ojX2E#G1lDY&N92&ryosdi1RcI6@A&2y{ML-#DU^>XGlUTa zSG%O6sIlpw!7VIht+fuJ@?A>yob|kcm=vDlrz!l=neBv?<@I+Z?L&=2^P0FrD1nK$ zryANxB?sbTlvs~`qMM5Bv!D`# zv|}3o?E#mhyviSc&?EgekvnF!mp+}y*Uc(p(|E${$Y|wtvILy(P7_BM5dze?aH2n# zq|9*Cyw2y$?$CS})??7Ju%~W>>oD%(C9^H}{*E?8Gl;jPst1ENs%2B&7$cyFC9w8a zkE5zoqU$d7upn`^^|6oDRc%_l*zZr_4{8L8nTPVGS>d+TT3#c14dVmksaqj+cBO8d zSDX|f+E1=g%ARMOm@zQT{?!M5noT3Ow_XDh(C*#v~-y3T)%w zW<|E#tHNk0j)vF?6I4y}(AjNCgAYYUuLChvgX5{VPlIiQZ0mRNIS+NRe~so6;ToMU zO0PhX$+DX%6+gbyd>m#h6Rn=%$epx8Mg7j+sMRvFQlab|^jEiy& z#|2<4sGn<~F4vqr%rT$x3MubXEe``A9ey@v4|nXN%rlg^U(3uixNsf-nN~*)W$NER z<`zDCPDkm@m3-ZtIV_mh&Kc4;8E_%ZG@d-SjdXh~pEpj;T~|EZ;rX z(xi}{OX#^f|9GyYa|J!0r{|_Cg}8V%QyaLi?Au4WwJdNDKOExD zi4uF$cu6JHuFT=>=Pe2u44%csRLrgn;4jUyMyCozV@o`D3hihVUq)VTvLhLYu$gmD z@y3sKW<|Wuqwd7X*%0saXg~4jh1G(SQL1<=kV8H~6>lbxz2eQy-uuU+%~-=Us`jQg zdGp6cb=--xFzPSv6)mm0g(f+jgi%)!X4k#E;ITscrnz9dVx(Z}I%$IH<#puLO#>cROYIkY+BU`d8e%PlBdzy^m^KkOUH4- z+bl9d zEsS9I@xu!{JA0arX8!8>BZaaEXM{6cB$WQo1ksDUwJqK!66v*`hN@SXU)>)XL+FN= z%!=?{SZ&cLz2{y?i5GwoD`RaA@vW#Wy=^)J(+C(HYTM3FberKzNguj$vph$MC(djj6aO_hADSjzH^K z!zpt#j(vVnf6FPZ*G_!QQA5ln#^5#oKir&x`Lr;tC;t}zYU6IQ~ z8n1+x@QNk(1y(>&E6{!ExZb9x1Ei_a<#tmZ-{>dJG{;F2WFKA5ku)FjJxd2jF?N1+ zX`E%*=78dODY%>RJ&#@1S{hKyM=a|VW)4I+ugi^B@;C4&mqj)IRM?Oi_G5ErhGU;< z96z#bi1gw(p{l6IUt#a@laD_leLa@9>IHVSix8&%JaqMK+a6Ivy!Inq=l9F9-?8-F8yb|E)AWl8rVf8E)KZvS!4YyTE{e5K9^ zbhJ96R0;~$pz>m{$~7s^x%tBUw7?d>thV?^`5iiZeNdok6Gd0j1?n1$GE3=>5~ccmG{ZaZN-`i(PX}_(Cx%d(xj;1;Dz!ywMY#Os%nZjpN>GCsIDDc#-a7x0QUX4RP&iYyfbuwHP7oT=fDyOM2$kgdn+ zkr8}hRu}Lxu}w+DK?m3rWrR=$3!3h8lo4YPDB6 z=pu!fI6H1^Lho3)8J8`%D9;q|E35j&2Y9#}!d&ovYfo!!?{{s**6Xw2PteQsO3|C# zx_XF&+n(Y`Ub1?cSv8=Ec-07cz%+Cq?1ML3({9w1!hf=$5Me>IB18$b!LYY@$Aqj( zVz9pnEnm}4n9v%S&;fpG4NT|&SJuRv1|9IT6Qzc?E3{g^7o9<~Cyy;#zcwUfAAh{C zOX$n~Im%=gKTz0PDqGDxh2y2Mt9f#fRf>I!uPN%_>~)CfVveAGNuwb=2pw|5E52k~ zB)Le?H&Z6UnUs=cbx92^qdQ(G!4-!bibR64$*w5-j?IZ|@hFTgQ5fB##sahKG^^q9 zYddt&4C6XZvGxHp&Mi-$z{1Uf-L-QU-{~j?K+*v_Y>|PeI>vCWS9g?G(6R1aI4)^ z!t3)sK#--5|J5^~8uFUtdxq15Q@mMg#}&RJJE-0QPx|OnQS3Nh_f%i@0YCB7w04g` zx4yB(ZK*>D<+`Ldt)dYzTVG<_$CKCh>KIB+$PxXlRS>06NU40C3P!6AL&cQW545P5 zTb}X5eE4;KWqnewY-silC#)gbLtQ6g$cHsm%@MYEY9Qg@Eeu2`&mQCxHVkcl69)qW ziV2(VV#j(Wb%9b01p7C{kllX0Au{ag0Bo%PsCH}IDD1ZL#>l~GcVnn_i^%8i1bTMB z9f9T@;Q1RPOGZ!O({=a(jSIcxntv?KfT za-nn}mr~eZgQsVw2XLwShmM5Cg*jF+Ow*tvyip4SM>RXXNR6V`!VqQRUS9t6fL51z zG6txv@ClnRN~z|L`Lp#E-bn5sMZdzk%hBvMA1AkC7x-gxyAFq6CNf$-smRCkixVpx5MWNs>0c#E)!= zk(%z~m$r0~hQ7p2&!j+K_Gh}XkNJvcI!m*+@mHUT9GABtS$7|P1MxHCCng@+1v4-- zOvzswMm4g(4ztuBT0A?_nUG7B^I0BzUV^gqF|Vu0);X>;@Q&x<&qHSea8W#SMIoVf z&q8QAUX4*TO}j&=J;Wyy4D~tv;Z@)&a&Rn(d>d)ZL)#w5YePHMcdys!$_RYNU=eH< z2?C&o6^?oZW1`N}1YCk&5GLCBx#oc#Nps<2pBoU?K%5$UGH#}jhYv{wDi#(fx&{`Nl($HKTF@AHY>muC|R zv+roN+LTp)X-ch{FFgMctKLek};Pb+19p0DVCEUb9G-dCscSz%u&56L=8!c zx3?uy5Rh21EoQ;WN~t!ca;va8YVkG`JgKGrwIDCe_OD4-q_}v`<*vya4W) z#3m@4viY*ow(LLr+0x$qk3ABAfRB+SC|#gS?=08xlEG`bh7y?WTxxf?l|S8%#5}?ejZWqAD=;XsmSm zo`RCPB8GtoBMA0Bj{yp$k&-Q33OL(0%;**J7nY&QHD8UYf=E)z_k>RKC~vukkFb z8>IJhb)wCmnZa{+wq*+6ymNHe&IbYz@M)?9C42_|ZD(8Qp((uO>+4M+S_C4#F*La~ zKk)il2~NClS6s)fVgBFL`;AX}vwM4;UzkAYKxbnwJzv9Ld9!u=`M)@wjGd()|*jwr_?svz8y-H-Y`ZTkL{+%@sgIgM!G6-w=Dh0QK=vz-C?C$Q@fqdQ8$TtC7pp+O@yha;KylQth~F+B)@Ss@0CB*q zn{qJ2Ym0Ce{Twkbp}Ea;>4S^XXe`e?)FVvE3@CV>3Qox2hYv+bFQ@bKhq_x<2V#iT zrC)gD;nr=3r;D<%^bN2rCAR^?Af$dT$)p^#^GS!>43_O)A?OQ&WP-Ob<+nL#^;Vf; zV6ZftbvWx8sIGg3VvR%lkX%STf8%hZbk>B$in(DKnh|INd>!?gqc(1PtF06=hClXJ zZ^>cfFXJh;5wCn}3cJPIA6YMDH{tt^Oq6;Vx$*4?Da^>@-j3r{Z^!qaTuYOnut^hL zKbTzKn-XtNpOI^rK4V(-(xy!Jdu0#=&9xk_mRy&DTsI91;(vXKzCKXSQ;xQ5Q+trU zMNoXBJXyCM_a$^U;L-=b$>n^}(O3zX+m6NzyG&UfK3UtKu%YV|BXX74p)f2c)W{|4 z@H*4iKst?I1%BoD?ZIycekJ&ADd!E2rJ0G2yPg=<;b%CMtcyCtA2>E^TK-|m`29jBt; z-wyna9OkzxrUja=H`+LUPuN3a11u07znk*eDE`6mD5>KJUVXerm_85##vQNBAH}<$ zh>}iN_l`Nyh)I=W_@sCCN}o>Q#*?F(te#9H(P`c`^7~J6$^LzWN;at}_|RFfZVCP7k;Bj7{mK0^HY+-wt-;Q!+|B4Wp{*~dqfd{| zWmZe--1xfb1^SjJR&MRe@i6{p<#egEJD+yCJKc&;ca;`)=Wm@(kRB6H45u{Si*P1j zSn&&3?XIMXMp)L&#au!pFtB=Bs6aEltWH2P%-*qzE;rBs*iqM)64<7=-x9m(WjheT zyOQXt%N^=h21|)|%D6*Ns0GfKOuVZUKlNVsCL|X{d6peFdHs7m+fduM221rh0{}gK zGnmHYOKs@gLrgmqyRy zEk5Yb?tekPXC9yQL40_m2)6Z}5bUtgfi0R6-clgM+V;ieZGPrs|H@@uciM-^4 zR#M5Y{H+hh_jz(yfLVzC@W)WU{?H2_KtWfiqy7+slrkofr=Cd&iw`V#h6cr_hw{QR zQHaG}Ibo;QY6dJ!GV&l)j3z+u%C16RpQq zv?b6N0NETtn3{+%VaX*D5@+ZXPiqy5ZBWA7O?b+y7roiy3zRjKGngQ~u$<_%)AzKe36G3ErvPBW7A@RhgM<{;zmyfe20w7JQ zD#DPbwILD@hfndA326SMIIi!5?>a&O4_nY7t6!g~_JUfx=88RzdMD$6Mp@XB(S3J1#a3P4y# z7qX1@@q;XSuPmzwLveohSH&a}xjW4js2EXRx%sV7OjAvmFqH6GP-80X6Gm9j??AIT z@^zX8ZSnDh1qrC8o{tGndGFi5inIzjej@#y1$hZ6{k|0zG~`oNQ6o^)tEfRl#wVMw zpjhIWjdQDLv=4lop(re#tBn>+7)t#&f0gPju<(;AP*I}1vh*9Fs3$*Bg?Sn!yuz%d z(t*M(2FQl<4J1sYzc94IBRW|oVJPGNMwliJ(a_uP9X_6DH38K`+D3TFGg!z|-NGHC&LpCDMEbi{^Ab`TTtKV!w`rn< zp`=%|#ze)ZC)J>UW^+vPinhha8=?uQ*PzaF(`Vt*s^x*+z$-PXcP=t$-5zkortoqBW@~jB$_U`(^%EF5lka*%KPj-~z zhIa6zboiJz`7+XZ>OqFZ+&WOhOTXuJ7>Dy3XGbbeae-BD3B_1gwjJZKviyFgE4z#t zt#WB9Q}GPSLn@xq<30`4NSUC5u>TQ{lMY~|eZ-x%uB+@yUo{(VSz|OQin5g8R!V6b zUNptcj-$1>A%?n#AOEsN!zCc1?A^$}{<4kq;ADR5%ZP@P2()n{kNT>Mb2)HDgaA!I z^JV#WJ+Hj$x$v&%b$-vTq#9IDLLjpH0lW)?c2s^t0#$I-lYRzn7WGjB5^A*?13&fE ztG!$IA-HeqErREw1iw&VK0aZFC?Jh4A~gP*zxZ{}utU8A%83x7V*;=KI!apHg*Ut~ zOj;oEF&D;5-G1h!7w)&L?G=D8`25COeiJQO^%9q(@8mcU1{eQVDN%F+p;_$cJ4_ zXman1q~CCgHu%x1w$iwl1ybvm_kMD5H4EztLHvZn#3(^2jpL8}CkiVBYyT4^W&OZ+ z{3ou@kuCvvm>wl4adCc?NOPRqflBP7%X(atWgWQwa%c7(?|yk|m=stXD*y?~yjWgx zIm%qoUQjL%g8@|A(Cd_WW&G^r2u3_@!MDGkC&u*Av5?_?6>#=8BlXC;UJeVg_IJ{Xfp&`yh+v_&{Di9BBuB z>+$;^XYdI>h#5R?G=rzIko7W3)!=snzdHQ%02}c$;}`pbn8B+eB?FL#-(>ve{=nP( zc-IVGTMK*g$G&0jwF@vnSWtJRZyWyQk5SGw;tLdF8*?3us5sMDlzCa%@D;izz5oL^ zIT5o*%yYb6c(InFyl{aF!&@{Ogp9xn-4N)nMXFv!{O|I8jq~kix;! zV^-SV;WtU;$9t}9E01mz)H(>?Ipv9$x=Q=^@tfDWHd%vbT9TqZX}c881T<~Z9jNO1 z#24CKr&;g!1_ob;-!yGHj+Yw5iPfff!4kuk>wUbXgQJ@G?jwYNL#-{lUc=x1sihdy zd`0(O{Anp`MFr@4@3j*rX__de!{~20`NE$kqPM^QbGnp!mACpOMauYrPyJ=OB>l#Z z{4!EnQ_UOxnj+2mo{#!9zNh1BA$;{rtnp?CDNDZ+{u`SIIc@Qntv=EpF8C7?xsu8c z@Rxq=CsiEa-~5^+z4;}Ny3w{lyYm=er}C5=mLVe$AiFA(ZA!P#i4dZ_JIiy93W%)4 zcrl*)lrYRn3oqbs9N%=Km$c|(e)>j7bNE3FaSr+@L2>bbU+HLb`Ujl-x1VJBfDiod zBx&bIeB*!Hw+aVuG`g#ziK}+-qIt!|(LWO|JI_D-Zx1Q-Aiw?J4pNs>yu)t;*w1|G zZ?R@G2xq8-R}o>Ga_~Ja|JEL)EZ$^U(; zd)L#S2sL4e7B8Wlwij!p-cZ5CE3HBk;!OFUJfSYO1*tz!OaI~7b^YW1^^T^b7x8^b zD9KByg-XeNU4#L_pYZqU`mql;{uv`JIm|o#*{KC7EwCO~t^RX>wEqNu=Fd)|xdZt< zeu97YXFqA!3Et%P-{m(t!L7IZu}}E&+wG(tyZE--E&F7>CaMX`-ATK4Z%4rx^tnN2 zJfUhj82h-vO8$pTH)A^XUGZ_vmFM}@+a0B8I3rfysin75p%z#KxS?2Ir!&~Ka>{aM z+52F96W0DV&C}7-wRj&l^zQ7&^hs`nKgqu^oxJDAplJP=-;p}^W6)%MKBWlO=u90+ zhY(})QkD_8v{)hH&;8%x;I7oFQqGjv!%fvyyd&ffj)WhV&q(Y(4OULD^6=va`v$Q= zOnT(qgOBN15|g42%6o!YyGF@a^D8nJCm)x;3TCax+<>oFYryQi=MP9xDX8@?-_t1InF7l?6!kK(m)6zDl?~WJwnt8E z$jaCW`MZW}xn%!Ho@QV;d08W`FtFHGR7Tqxf>!A}fg}nQK5AfJG#vmF%Ei)uom>Cz z;DZOt8nFr{m6Xe~o3QTE_Huc16V@qEt?EHj`IBGuX8BSR_LDTGR{qS0<8ouL3P-CM zmoty;rvrPY_{8l|v050aT$nHSYRVGK zS{YXoC3HDWsIa`KDeFX3Uueo6Z!k=fbftUbwkFn_4U)&3Shn=t7WtTojg(fdlN*P! z6e(q$oF2-iOFzp5kCab`qFPV8euqvewkohdSXx)t zMV5o5H|1HiocnsVq&%sn6R+bi2Q6!?&`EN;NY*KGHdGAa*r*dLyg1b2Tj7--h-3e}>jS2c*lH{eWSq^(czSf%M z1=3JAN#qr6SelcTvQ5P|V6a$YFBMDKgV*a!E3ww0!_<;iq+#ItweB=y!9^E z7Vt!S)dJpVuUbHA2ew#RcuS6qU~R|%zNY7|Zpoz)EJ~gq!&1py_QkNxlsUR1lj(lB zBYT$a`JLFu(%X|{do25qo}=Sfd%6#gV_oUKAdU^7`_4Glk?x;qaMoFcCw5lxXLM#U zl)p-YAM4Cw=~?Nl@+*jE!v?DcHi79~@6-AtmgZqLu8VEwyoW7;Rg_ye!JzkGyWp?J z^mG>%MFiV)VX4V?2wh6f9dtJ-vmj+UI=r#obs8=$keCsB4{}Kt_AOD%@5)Bg{ll*8 z9=eBhL$!v~%C>GSPbx2$KkkO!kGs^JrBlAWyIS4c?y7pqwEHLB;lPT2lUWb8hVa(* zU{RvFg<~YD&|Q`Fm$2&A-%5C?2TL`o^&AtbcU?@D_rx=E^qrc&Ps_=FQK395fqhRB zjOnRL{9I3#NzcFZgp0;KqL=C>2KGWtBY%|__F~D>y;J1t9EwB@E_zh};; z;RPoQAcF|M$oy_OGO*F3z8~)>fxE>E)NcLf1h*-NuahgGSNWR5tyk(lEI%Y)>C1*j zQMQh@2CW?*=+G?@c{a7chSPU^7{GlonoEL^v@RMKZ z$L=~XpdPo7zwL*b&A%q!>c?W+tDLn1l*iEj#bTkO;sY@%hAZ#iBMbgMjU8m zw~;D(-vE{z=oK_Kx@!PB{<@p;M*|RO=zf&P3}kbu28Rc-4${_}@^=GS`xbQGE~DNO z1t8%)%wY714O!mH;skOW-~|i9IRVPRQ4iSY(6opNWCoG=wdR zYdBpC$CYdK_1?cn@Ptf2jB&|}ronjZ%44$p`ViK6^kp2Pg>$bhUPb6#&K{!oO}o5L zpbX_<99Tt|ip7*^f+qb<(Hwk=!faET-XVw=P|bGb&!-Qz8_K?6()q(rr?3bqb(rY2Um6axczm(k!U~^AgMVwbm$Vnas|9aj=vb>dye;mS~~Tb9vDQ!-vUZ`##S3y-Aypcifl zegmI>rvlihoeMj!ge-Eq(JVGjMSrxk5XCUb(W33UztyqwraXT%>o8a&VFn5MzQYMK zEma&8g=wwD%R=N^2pRp#$M56OEKFz*eCZxK2H_3vv13@r?ssa_+*^l+rRyM+2Y-E1 zn`yx&Ts20jxx5TznyY2#J(w}DT+wge7{eZ+7L87a2|$g>=}a~dnaW^1eV5K&BaZH| zY>rfOSgsw*9;fHracqvW2Hl~kS?>yOvB9v<)5=tob%$&L-tmig?=9z={A4EU;3U9jS4#=0i47lzp+pf5l>z~hrQ)+v zgi*P&@FaP@RQ&|h&BUp$2oXoQS#);VM+TG`NyJBk$c5hCjPo;e6rB;^qcSQH$PVBxATV{?Om zc4hZQav*pYj*8G%MMMJbAK%~r!lFj*;q+}DGyUy0zeWH;nGig^rbtxZ+q9%}VN3%i zmilR2{&gZEgY`G%)JZI{%rSlkRhI-UO{xbsy{4k(ee1lR4y$!VV7A>Uij!_wXrpA-<|AIesc@ z(?eB`KskYTQz+ptGxgd!$H^4fDSZ;?n!I=_d>iiXOl4gf3w>3vvXwUv)=p*LHf%}i zK!{KKdZogKs^}Z5*W@2(d2L8hmEI&pvz?+;e4h-Z+-ae1i)up~yf);`SZg1af0cQk z3hl$ZMgR*+8-}w+_>%{MMylRbbz5anl!Dnc0rA0x`rHTbWm+ey##Y?xB}4BQd3^{O zOkk~5BCg}+F2`*?+sP1RZOSZ{YA?dX#P?iC5u|>#CwlDwHc(JA7rGD~8ZlR{f!=6- z4_*^KO>UjV;v}fX}O@*+Cg_^m%3sFYDR2i;F})xmgP5P*BrK8x_(&h zJQor5_G|K_xhyvJqiCv{!Se+|4a;`aCqsEl1>v);TJ^9qD3G1`{>Zdln4vu4MW#pk zmo1fULDHs-S93sD-BMIieE`dRNSUFu6K_%BcwC&92$iINmBE{|lu|PQZ)gyHY4kvx zZii~}(RlD8u?0zV+`SfVHYbv}(34&Hrmd(@r8o;unfNI8F?r=9EH-d_)CSh0kFe;0 zN5G7kR_+s=%jp5BwbsxV_aQC58897v0W#Q?-Vg`vg7c;LtoBX0Ox6Fv{p0GfsACl$3J(1psB(Ao;m@7{!mEFU@1`OFtcupL&#qHI>EUC#Lmyuk5X( z^4>>T`_xqXiM{8A2{*IkpF=i+(KHFpEXcbonvCLd`kP66 zETX+=HGv8hr8=l3^vp0l3+I$SuR|Y=MdWIYw|NoF~bjkTRy#%B@Bu_itykIvKJ9( zXm%FmXJ?_XZpwwpwot`RufhlBj>)~2u>_N^UbOV^O>_CNWvp+gvfAqVtU^r;mdFk) zV{M$ZvGw&@Y=k$DARGO|ddKbD&gwH+V7+A%OdVTKz(hcX6A@L)wm3SraKV#DZ-N^B z3`Acq(9ip!&ll+DJ!3t6fL@o|U8O#V$P>8&%Evn;db~L1S8R|db`F29!;1HV&-&#= z%f*kgc&x0IKaSaM+%eg-9IJE#j>!)#N30ujOy0MgEtI+*JJ>moEnw2gYx46eFqmDR zBp+SD`ZO{xOTh->D%~>q)(S*i-z-hhUB=IY-!J&xTq^f+vVD^IEm?7*Wh_VJmiep$ z*d^w(Kc$mz%YzD7Un%{d{21NC4j$Z5zz#EM)OdN8i?!=|4?2HwdW|v;4h4Uc6ww40 z3kfiU00=VZkK8H*__MA2hKrf|{(urNP>+FtU(tha9iB$?q#X2m`u@+KO6wbczCh~_hq%bG012 zE&l}N*py}Oiw;kH0@!;5_6QY=tlQu&Bs{y)OO9N{dP(&S<#DT6c=8n-Fo5^gP|gCS zpgLb5e&EX?CKZ5TOG<@-MZuwSfap%judHJ2!iK9JNTWhIc4dA;`P)@kX^F0oo33X4 zSwnfmYWA9CY6HQr`a1SCflup`BOA!UYuGNr{H~D29Q<+((__~_Jgp1t!kVX8QN-GJ zpf{6p@Uej^*Rr{~+~L_qWy&s9!P)}7?zsF;5j!o#RmjC_(dP@XBD@y!By{d}Znnnx z=c*K4Eq-V5yNsVV@I_O=P0fG&E;sd$Z$TF%(d$)lBu)yX2-)c`g@fP@LQu@8GIU)= z59knb>^jybpn4hyb*=S@bu8|VdqShq-wocVlaH)p!>CHEm{}V(&fbZ-lJW--fz zmJbxeu0Q#&{9`d|6*Qv$w%q7R7C*A+zqi5Lj4^`394yW(!xyU(sKM&!?_vLOo3hCa z=!N7O^+~zB96m<8Zi5*OPGRAbtrha}ClQjmZp$A$i79CMZJ9mA;#dbc{wemiuZPLs zJ_U2z`K#P~Jv$Uo+mqTh$hYg+znMYazkxjw9t~xQ4bJ7`M8yz*AV{scCXd_5hV`Tt zr$z8y!duV9AsABY%HIVlj$2sh*>%F0;kXQksC>{_erF>qa1s=KxhSNLT)03Yhpzhx zPaz_6!wyug$f5^gsQ?s`4Ht!!pY#u12ajxKu}u1MlzioBb|j+7P=AL*bBKbP3-Hb0_7+S;${8t-+JdE} z-AVGJTQIyn{=Lk%z~7d2kUd-27%4MI9{3FA2&N7PozJj)nG~~K{_0tFpD7%=wqcJO zHfvYj|3x1D9NQ|*{aL>BoZ6?GZ)M{mJm|%m_b?u>qKyUj1U4Z<`Ruy<_*Q0@ss_p* zZDr#n&qcYz^Xzr$$Zh%4=dn2b?lAf0^K7svFg$=B$)g@DJ& z4{n3#r+%c&D0%xf)(?LC>uqeWbo-XPzJ#T;8QquK9xl16Ag_wn{1+xr^o#E-*p-iy z<)2D0!9SQRH!Nit(*I-ZP2j35zW?$2%zy!cpn%}Qrl_c>xGRXt=9cJ%+_x;PZlt9N zWu>AbB@t?$#A9V9?y0Gjd9BpIC9Sm3tjx@C$sWYg%0x@y|333P_i}H2KL6hrUeA4= znK|doneEJW=1j|K8egI%wbY(`J6*R1u&IoxH{bbP(`q)4x(qz&5imO-eW z7znLW!`JMXyu<)_)MiH%`tb**YC&amVuLpK{{%R5BR1NAP_pwfCh7x=E({9^k7V*kPV5m+hS^z?geJ&&P@uTNq+?lH zE?O^xmu%yR8NN1n4S#Y%a2KG;Cs^NA$zbl)_zZ|V58(A0Z?qX*9I34>;W(^%8w|LS z(sk@|q(0E}VUHu|G{haRxGK$exBajs*Q2)0?ftJ@NHW6=C>=9Fkurv z&%|1?c~Cy`Y+-UNA0?nCwrQa~4!c0~se|Z)`+;0SQtLuet@_Iqv=6uuPdgzNJTqZ7 z^355+1gk!-f^KZndNgp3zgfjKn0md9*2w)qb{Hld==)xI8yhhTex&1XYcUTSnV*4C zu_dRidyC0#;?g8lRpa_vTMjG8SaUKnk82E6g4F$G9<}9aDD)mz2D7jl02CQKe!KRH zIQIu#->xNf+zLx>g_gp_-1nfLgu&R1mTAx)Q)fOVabVijs?JqySoJyg2Hn3y3ytZn zymcO+Ue{yTVGdBy(DSaw@NI%c>AK#L-rS)zPHw{h7(uESl$qM(mbexxy@FxR{J}9) zRPIOg?EVXGD;O{P%gea^DO0b$N!2^Fq=D-h6y0u61_Q2OR{#djh>E4@t;`};hSNCg zStg<{U&2B#5=|w@v{1oe9VvIG);K(b(bG;dqW+aG*wSL!2>Ajs=FZX)2NGYyR z%}y+%XP%^K?`X}M^LE@3&k6XA1p92JYEj;Sn1Yduu$fNl-q8;7-mC3ht$BK{6J~W@ zls9*gB?lIM7^@(CS>*zi@2d*a78Q6DGeILLuPm}a!MIQ@Ok0KX+#r48UF{_A=52V7 zhxSj>7w=(>AMPf*v@gVlnFM2yBRJ}Q?`vson5HHB5w-QDB0&4+weMSbWiiUyFSf+s zPg~#DVuKktLx191quq?eei{c|eP4@k&kffd=`OpC9q9*l8#~g!@5T=F!AG1s(uH=o z+u4jA>Bv1=eKB(ib=af5&Mben$Jp4__h3f0xZ3Xhfwn{QUi2YP$%?EW+RHw~;6R3X z3Hp7n_8+;}L(mKRwDxiwKHle#SPx;pxDNxE<`=8^zWBISsP#VL zIf7d={`7Fv_I2!X-8w?@t4}v8ZRyF!6IEylgG@X~zF%rhz4!dg8`t`qNz~~}Eu`r% zHPC>qHEho--I#?SoD;48nn;ts)H-U3wDe2u{kWC4Q7cL#d#ByX_R|ZMqdy#cXcJ@N zGk3W*@gWkJp2DW8&j`vc*IEVl;<#W_7$j|GypjEBd%5;hTNW|}Bd@Z)%T;x17x%jC z$I8h0$n2hmwP#pO%hZ3nkJ3+QOWexmkc;5ygq5jqJtu)@l>Dd1t52B5uuru3 zW{BbIUuiy=`TYHrmNMK+SKQ8Wa67M$8@DQJnkwpw+aG&zM11T4Ni>jbS2=5#j^4Q& z6`g`82UpuqX$g+(K8vh%$!?VcvlSslGtrgib4GS6n(IFU&81zb)7J(~>(^RHVyjF} zJ*pp;89u#bR=@12YSiF~!p>8NwhMh#Z|A=s8b=E*%tt)gNqW1}wEk;!S77g}uc0sT z%Sp=kMhg;~?$RUQVEOf#yHxy*wwuG#zttY$_wH}C3F5VC3ObGH3cCb-2T^!b6RWfI4(9c<}TFfoEFj* zvv!_G>Axz~6K;<@2@z-n`g2ug1HO~vZK~W?h3OAf(KF|?WXFsbx#DsG@@t+@nuqvM;>aAo|Q2;IbTMK#2AnxHHUYkACLHxR^>&m!5uR@c! zQU5)R2u;S0nsDwB`kE2)TSZvxOC`Y~n8XFGhqswsMI9;Wg4Vbvwsss%(dO-*J)7B( zNm^@_tw-{sL5=^4(o6NogS6y=*2R(ao*mt?eimPTe?dwik9aY=cinNQ!`jrQ$ z@kMR1HiO>0sCCnp(W#4C$B466lCUCqgR3yd`FR;e&hcYu1Pe*6$cUD7fhOy$D2 z*a{rfQJn{(#OnmbzL!jHcE-4*)Cq4?1g4_bwlq`P+$E)FO6k-kt;jp5iieZMcdpp8 ze$sq3?>>e*rplgsS?i*CZ&vQ2X;t*$&(MZxa*cv@?b!y?FsLx@!LaHJuF)I1wol9` zqY0JJdzw~82P(Bk#rb;F;ffaj;4P!#udHX*Q6weP$b8dO*uH6IQa)E;KdS7|MK>sURs>h1S3 z4a@;?ks`Y31?T6ZAhKKM&BZZ3Y(A9gTRu?ptUH+{Hx$BOA5rR6tySPG<&TvVOoI@R zp&$5&=3Lb}iJ4XQx36OEBV;8ty9S-0UG~Il+NYXmeVM#|)7}?L-=L3w)1vM>_8w+d z`9a_vClB^OUVU^K9++q0gw^G-{*+`HfOox1 zNtSov_Zr-{E+kp*;{86J-x0PA@1uA&=okpi5xsZ+p$*WqCN%Jdw%mQRQEm)2f4!k~ zPuR(oRp@J*xmHjZ^1^|x2BCFD3Uen6X$O2EC;kh)ZB z6Gi$ddbwKbdXGBcD(_N#Z;y8MPNZ1$ukO(2)mmGeYNghA z`CuND)U)Tfs**bu)U#VSfYiK9%caEI(33G|k$DFqvG_Rw>p#5PQsLB6&(zC{jR~Bo zeE#BXEmHJ1b?S$Hu2o~>U=R*QVJZLn+uAhmvqqI(5=_>=wBVN2Sd4XcC;L#-Yz$yK z%0H?i4)CMJf1&3v@tUb^a>p2YpRNR4XMK??nNoK$s?+|;m;U}si<>+%%2{pETVDct zhCb2Zr+RDl!)~78XZF_YXVtr#aBlTC{}{r!x8^rA=?nkXT1>u%ZB~dvZXD>M4T|48 z{5Y0;gW?gx&+MYvFGGLNgmaJOs2K~t5sTj)&FaXK*=h^knI#o~u)uEZd4HFjJ>Z@t zsvgJHr`30~P|&+lT5bgEA>_hYF(_O3PBYTSKck6uLcFz}Hb~LAP2&>C_@bgaU_$r7H!s5Rj#6e({#p28;S9}F zJ8r)##dM)vpvUToCgSvEdcK}W&_1UF^+b$#@-khmC)x!Mz!rzh55V3{U~v$B-_i80 zm#O_d;*MzbDYf+yDI)Ty{c$hxizYgMVxQ;(oq3@hwineGJ2cHoiGJeih%+lxr}Gk) zL6%!_$H&jmTf#ccRdh6&df2Pfxq+w^&0nP*?L`O;_7`txPtni*VvtruaRDN1z!S^4 zYbgisRrSquO@J5rnNsvK8AptMW?A;_B#Y;*Bui^N&G7AmcPqT7;>o?8L>~|F45OU^ zqFd{2eJkuE9IVi+mc2?!h;>u~=-p=&srY`hpj0 zXhcKNw&7LPj?fs5tCafBq9qMQoH)0YN*jtMAraF0t% zDmn%94E+m-pK7n{hby-YKeN5EpH<&z!nwDkT?pg$%5P(Iy-SU*A7-QseX@hNYP#%~ zsSkDdsiw<*R=t;NgeGIr|24v$faeJLji$RQSXdpoQ^_kEb-BZ}jGJ!eO_$tJO}8$0 zRMRc_jXE?Ip&H>(7)ox%N8EBFh#HGFV%SI2`L5QOzG*B-M0`L`gosJri`sB2&Y#-G z{!NIuAjJCL=)(M${#V#)Sco_`q9_!h8!PLt(K8%Lfnr z<QjX0obmuXX5ajwN9&$3i0o`dNP1j`~8EEin`%ceQ@ zP3=TIO}sgWC5v6VNsq*eLBek~y%Q^jPU*(2%3{m$M8h^)%CQS>b>Wbz3u$`yA6@E# z6W(ZWOhsR0?66^OTu{6hNJT}ev?kKz4x(AFq^DVY?SVfe)=o&QxGjdnY7&@i+1xPM z@)@3w8zo!b=5M^c;2#~B>>{wrgOV*Z%@7iqYiQ zs#hy7_3Ge(*Q%wSz3?i;=4-5ad#sDYy9lb!eb}8}f$`W8&)Ha&&@9??O9_Xri-i*! zm-xlZxD;1=s$dMi)LLsn(P<#z5=9)TssxzQ|X-G4VYtfVzCmKfand)Je`+t-jq1J+1L0PUgJJ5)(`b2@> zE_yl+?O;YjDv1*teHk3fK-DL4fg|15S=?!Mo#&hB*LlasyeqSWy`<-jGJ94R(OnC^ z1LtF(`r^jZ-syK{iK;WO+g(Pxx{7X%4W%$o{pxV!g<)5r32o{o+Qn22Q&@}w8*Ml8;`v4= zVVLI8Cyn7iFC0Dim2P(vz59%NggszW;07%47L2@6nT)IjI2#DE>UTz);Oyi-P(6b2 z5UbbPZqwu4Mbv0VO46`C{fXz$KLBX+;4#yn-%&Iug{fR1?9eX&k;it4>sci(JEVl) z{`~O3z5Bi-hcNdey(Lpqzhe-5U#)><*3x4^pRMbN>Wd+l>dWbFJ)er3> zdy2D~_-GGx?Jb6jtUa`-w^-ZM%6#O+!DcyhoE=-}u(@dcgZjsdU|$Z$&>9&Ep9kW_ ze=woE5ibU7{?s=?MAcW}*?uZGD?!ZAy3qFt5WFwUr+fN{tzyq^+SNzgCoBiZI}!be z#{o)66usC#CsD*S_Bg<^@n=?Y{y|+r9b^N{dx@e&{h5dxx+V**jQN8q5=Ga5G4Rk& zy~ddXGY^kVqLzI{MvKr%M$y2=tiFmAA>6ae<|IboLX!-AG0}>?BC-D9!D@Zgs_&dg z=lY7)2DyW)Omfdoq@aExsta?JX$wMYx2gDEZ~*k3sN%5&MB*&evfoiyDx7qBq@U>6 zzydtS>2{9;_I3Tl3j!mY_Q_(RNS#bCCZkjAKbam+5p$G<$b$T-e;U0uztL;gq=?7O zkjZ8UzY#J&RcsRZlc;T)C=h>5wC_q2F`A~+4+BI`;We5X4-|dno-Gy{JrIIxVGVU` z@6oP7(fr#OZ73zN;Rq`oD6q;*D+Y;AgmoNE8Vu0Xr)cS5(I=qcIP^9CyNiZHLo7oN zoJijf78zP9br>Sj!qq}l+Fnk4(2@KbV2S^ViY9}+9!ATCh;80;p5o5GXzEjxcCVPz zVxt;S738l3NaaM-pDdrEd}hb0u62vuXrYVuim%0uQT7jqif)?NKa#Gei>}&wiXJBB zw^(Q5&v3ynW_USEtB?`R$D^T&t=nift=$09u|>Cjlw zB2cZg73~Gzg~j}vsYlc8vEn2KRma8wtCM}+c*cUJ?*w2K(}4*PP*{t5psz<$!u)>% zFUZ|LQOwkq(}{_|XlKux#2C%!Klh7n4bD2uqLEO@*;bf5-t`^-M z+-Mft9`|C4x6hg^I%}GjeZvDn)3kcD=|Sdb&BxO#H4;?ohqKw8q%?;qO;Hs zQtedHAz)`;9+RjPVS;nxAoY1jboPHj`5GxKxqgu5JR}B)aWm-9L*hJ@*hC;*wTVzF ze^?ZW;eG7)Kf?LgKY<>%As-89tqt>q0y<;E7^a#1KaXJy@u zwvgsNA@+!;yV`rs;9y%98ZZ;V^Xb`{qBUM6GsOoYv$K7|lN_89M~}@y@I3Ypw7)w` zBx$1U1NJ|&F%A`bC(@Hoi$fR$_na+ui;vsUwb^2+81yvFe+Dy~*|h2z(GssxynJS> z>Rg!sLm~^F!DRIL+2r-C3XU~i)@Q|Wu{4Gvo)c|GJ{-g2DH{rGQen{;R2vMbGRGT3 zs>0ftsmYc%(vmH|;#oK#*)nQyvgIK>t%oLCR;DLg2E%V0o?dv`;CUR++yTkPTH~7l zngO6GcrU>FmGoq_))>ELe6rl zUtB1l_71GkiyR|)11sVhs=|AVM4*;NM;3`>hN+(~ra36{Xn#RID5ui;e6h{p%@K}! zUbGh}HPqxc(T27^FYdiZt&D|NQ^0)4j6_O*LG*Q7Om$I34(yT`UCrHTT2?*Xx>NN; zP+#U@K%N=WNZ$ij34@`JS{GeS7he$WDme~<9T$t~ZZRD?Wh~onUo4&x4+T=&0@0Rj zkraq_x&DEwZ_=MW$p&vKj(9d_M(~G22;@%=*tfKgOoNga0{nackAY2eUSg<P!0n^OShOj@ZQE52Z{>NQ>2drcACI#MSRAj4? zvuJLi2oGOShhQ?I_f1EPJU;n4fIcV`Gwc8UH+$eb_SgXG{*s9E7(J_|mL7dcjP$8_ zQpJbtApauNxN9$oCLX)sNxns5y3e}5OiUljD-yHaYlEqM*kFlxCAZ3t=|DmEmPPH4 zeuyrYb&NBD5`wwJVS4}?V1t4Z{J0YMFCwHnFHzMI|3$3kfdcYEI`dEF4EMKtHs(x1 z(FEb0fuKfsXTm>#{j&h<=WB*EP$B7dPcB7t?i^(%UwEny1`BzIVyg!JzvzJ)Q^A=* zrX1{3P1Bc(Cb_#*eNpTjz$dd)iZ`>fA8%%7FZ(NY_Lw0bnju`-T)465n>oQIH~+un z5DgQ_@HW}meUln26Zc2&MZP6?9>wq6dsQ-zD&NKrZn$^CD{Pz@Np7Ctsjy7Ae89Ql&ofF7aqK-n;$_jZ4MXQNg$8kg zUnw);ts5Kn}kzEXE-QnGwp+@R3&WOnYwCiMgB(&?GfTHDenl)iQ_|{-Q zu5XolISCw$T;X5=W;VVeTIZH}shSD~A3e!NT_xB=4C?op$P#vVS|+siT*qI9$W%1G zN*H|NkE-?y64{%>=S1MrKzuK_!Y%{9L_wEo>-epB;o5%xB!?O&j;+wW%f(Atcl+t( z;*h8xiNx{N(47&7?VCuf*TksVxiCr%%rxo2tjj6TchLslbNV0d@_)D|AKditDj~G?_D5EWk(wI=N8S`T%#(DEj;|5F#<=af z7}`O*|8;?;{&y?7SRx(|Zq`Q05wo*V+IX9L)5B{;`({wWVX5sfkH}RJ6#=IKyR_lG zr3m_btq7j1_K&d8%o2|i1pO~ocjeJ~-Tu+0{~fM+$rt_+?li%QuD<^|5zhVaWPW4U zYW_MAGB5`19u>X7FP1;}O4T_2zye4&yd4>9ocP9u)b)RDNSQt2xpm^nuwFp1?ccI^PSgLcf@5`e40?@@6Kg=9R>vD~8jDS*aRP z2u`TM2Dq7{s3_r z3z8>588>hC1n5N<8lg7ELr`Hdw5eZiOm{bkkphbyBQ}bj-hC8*McvlY@{MA7qvAJ{ zEm!aauSvF);@x)*#cvW#>pfMHYtgp zW^Mq_+bsG8bla#hr8!=>uLWqwH>14*?F!xzszB1q3md|SC#R)U!{xk{U!fWSxLdV7 z`Yka+GnaTy@e zt^RD-iuoxD;hU}4#pzQ`Y1@RgPahP9ZKWsYV7Ylv!m9s{{Q`8_>-uxxA`Zlct#M)k zov<00T1_XmVRE(d8r|F`+IbBHFwDJGQ_R~UJZunLg~9xrF!EORm=X?6fMVdVLcc-P zH05o~2LW32wiqJb|CPRj+mB;QNWYaGR2bYJRb{&fX_#taLHJi-dW0x@Y!_H6uC|Zc zjtQt^oXNw_<2yvOXj(&^>U(ssNA46qN!L*ST?lPlLmB=aarTFHiEz#1RV+GCNq|S7 z{k8Y8uHy=gp==;UTo(cIu|_pCvs8prgP%OSss0|Z)@9VZdk=^S7kW_+pl?($vK)C(@K_T^fCKR7ASVn6qjUV*mB1cukX+ zYVK0uXJTep0Jgf&brhuGFqp3;2PX_&wbYw@E^Hp-Ywp&*QvP8xTJyQ^33OWOH2bWQ z83$?K=a_uqedTjetlg#g$HZWdi{3T0uN*H9Z8ifPu)6QixB5g&+{ZG~tK~@F`kxi} z%{aK?xOg;}O_{?Uuj)nkyXu*et1wG>Togp_LC>i=6XbY_(_wTg&>X-h1eycwzYuLR zIZ(@)q|d*7x3;kV&{n>X?l~bC3Sz}ve+-_=Hg4u$s-I+QtGv2~{>p0027CHo2gKw* zIXi;%UbkuE7a~=xJx*7@5Mg5dL8|{H765F=sr8qlhZaW@zZ9dwzQaZrhVMm1N3mdE zpmzF-iupTJA6AdbzZAiuXFdA)ON=~LVdPPcb=T-|JfOv-;@)GFQjXP)hBT)fUF({I zw5l92eET`s%S8{rH$PXT)v{Yl`l}pEv$s5`^$Bsce$zB_J#^-06m}Bafp(vhqKVd% zMx7LC;Q+OLe5!%uZbDKV_whGY}q&JjnHasMSs zKXCjG;~h9c$4-fd#P}oB^=qsqwV=noHZr5|YXs|`(8jN^VX*TPI`_3`)uRcv>Cj`; zS<_{9GjaQ<@-ABBsn}Q6boci%IT`s0_5MbLHDCX)R8GYXn@S~4C4M7%MqNB?lxDF( zb!sg;p*h6$L>~p$E1%y9C;c1I7|VsV-#~)qAt}9lP4pI7P(W9BSLBX)^ z#cSF{CfAdP)9TY=usD2|Do=~uuEMV4Tp1-6UZ=^2L=4^dPV8_Egv5^$^R7|(8LSG| zE!jZ)q2YgzB>zhG@5Rx7p{)IdW|V^7sk35@3ts6@9#LZZRa*0dxZvVlcn+&KRkZzF zT{p$u#MB?Lrg;T=xgrWH?|Xg}w*#9UKo&t=-hWX?q@C?BG@(Nk5PaJYtT->aiP;CJ z$9WMEG8%A&X{D91fT~=GxhsP{d4Q&!7X!3*^xk=F8h=Vi)@#I+0MQf>BMC*(NV-)Fui_;_XYd- zpRsa<;IAu%6^c2nuZa8VE&CIiY1`?6`JxHM%*QZenf=%m(O-jX^t&p0yHc@U#o*)z z%DL*c8rc39(Lp|A4FsO!>UzPXEf^B!{=2h7*v_kFvM(|Zz?gf(miyZa;DzMl= zt_3!2)ad_FWaawYEvm?((o6H^mZC+f+*d_6!YI0=#%|dRm|^&@`(R#N4<7rcy;x`-3Q@0%sH$}FjiD5-M&(py|2=XTXl)E1AQ!$)At50;v+ zRFvg`(llUx+{`fFy;no6w|cbj-ld$|;mp|Tk?-*^t_q?vTRl2RXvdJxHjiy`cY_-G zV4Fw2T(a>lCB5yD`o9bEjki5UQQ+^QPow$as%mH3Z2Tegw*%;b-$modV9ZP$dY@TF zs4W#BHb&4N@gn+N^lD_|g0f^i-3v;3W9>ZxO!8C@1ua^v)q z_3N0ZL$H-QQxSC!{qTnfZM%o#%`oESZ*?<;?;Tjv`Li~-8x#w8TD4a(`TqA6u(fB#q z62SZ$04Wa`iQnIo@;udAVyZB0u${HKTrS_b&SqE+AmMj8UJlw@1nl5YJe z2K(QO8A&1Zx{e}D@9Rz0o1#VTvx~SF4l2k$2H(7W{A-!p4s3LBXQMgpwa#jh)mX2@ zIw;$d>AaESjnuzmcQMl}z+DFhelOs6cgMfp0%;ioJFG@ZRHj+=KDoHnK#l9ZdQ~L@ zStW8tDZ3oLNAg#K>RBMNh9G~(V9XBE@$RJK0D;3r2#2{Cn7S+~=4{H;E50^qKW)$k zW*>LV@+g{7EgI)Of7*mhbm1bmu3_X=XxW@59s#)&&EhDeX+Hm`Xp2u6Vr|rO#zYUKGb0{Av!wJq99ANc|U`<~}R`5K@N^+;)QY%Y|494}JJO)bExE z4UJ)fF6Q!2f63YqozBt|w?y++b#=*Eh`-hY71W|0>y1J@SC4ky63x=;Ko@gS)swunx45?r8lZ zQMRaHg~c46si&<|tmW-vr$uG|Xm^a+5lHndZYV1IRV%gXzw9$vys<*DXqq$5@r0@m z?nJnH8%v9@XYBVEYxmxwMSo#rH|Q4C{)II*yrcgXT^?fr$YtIaf+Vj`5lflc?9SZu z*D!BI`J5XtTJZ(P0D}ibD#MNX!oXO>JIkUAyGlVtiWp4L`+25jhY+b&) zHurq47g)*;$k039V>b80%gOr=hVVW;sM{S8IoJ>(Y=#bUrF|SrV~>M{`DY=baL#CI zfgjhJvG-3JkEL^L$3F^|ox2K#2=vND4nhRJaYu>3_wQiZ|4JGCeFyWl>@sS47mKQ+ zVGHK22&sM<5N#88yv2;t>n%rK6en;$n5maJ5ce2}Zc+@{#r092P>X8FQVbsY@Y=h@{bh)l z(Yko7?9#ffk~mB2SFFG(aka`Qt#dVZi{Ft=>lvWMCuGysCw80so?fc>Rg$TVJIA4| zsi7ttk1lq=t}CY5-)rAZ~8o)A)rrz=7#@#HU& zLrS8YhcVLe5QvaEIQOeWl>ee3?4ibR7%)8|W&4m1l{oyDjH0)s?B>!Qdqq>Flr8JW zsXhqFIkJ*MJY>fv_ZavmDy*jXG6WaMPx6rc136yoXDDfBjveV84+;IvgLK?Oh8vR2 zZ1QyjnPOE}c#5O1d4uxaJ5I52mEzutD36bSsI7hFJOGY=Lo>Yq(AEXu*NQ07;Rib5C0j&~ z1tn~WIv3$Hiukf9jCR@H4y-Ib!!d{^*7Hi(2 z(}qgUJRf;0bkM&-O{)$|>dTf*?u}4V9l9xM2s;GrBdfliA6Y|*rCJ#MTweyXS2k_@ z7qwIM@shG%!vpctY}e+rvTMU@{)Szf7QQl8)I^ZgSB?^wBWSa)oWO_k>-ou8zvikq zvtqI$^^dctpPy{jnrRmXvw0qzvnx;^Aj>;?F^GX}o&@n7BJ=$un*pHXezJ!s2y)Tyxmk zgns2ZooXOEnM5`#A{?u8JhBrr+3#+3@s1^@k3O*utA&#$M3x#4GoCGmf0Rj# znOCSN0I~$EZV!+x9Avw@lf_)Ew|?SR=1(!RLVX%$Hf+%PgIc$ftTKM_QzbQND4Q#j zA%z~QDjK7R8ULz7rtQZ`4dqi}a}|BlQ1AG%ISXN7m8{mjaz75O#68;u7^Qg zQMVSIcDc1^faS%Z0nzi%&&Sqt*aWv`a`Xq$zBT!rIpZSw8ywQ2HWJj%bmE6)PT9 zDNDssXlaTMSF0A38YGiAz88XIMCi_c#phxqDNgQVq3;ootTN(6a_yc*2bN*TJwpazLx?H{g1Zof>XNQ*mD|^kF zwmL+%=}`T%voh~hpIn(?v?K4c+RAd2uo}8LEztZPBHN9eY%o-b{B<&vHy1h5N6)XL zHpEE{i5g~OB->E_QO#}D1q0cL2)jh|vcC-Eym~%VMhq~cnCu<}&Z_s(?_72=T&6ya z)|WNhB?{H_0xwWisO-)(TQrd!{1Tne`h%BgLK7M7ZAOz{$vNHhm5Qf5Xj2oJ5xx8; zN5OV2&51Hg##VrwQIVj+{jTH2GIUxY7wM6vhS+de0^8VBMzyg*L%^{U$qFt1s|WYhy1gnY_s79p=4<9kv7D&>4B$gqn=-!eIV2v_cr()CytG4E?7$^yu57g%=0FnExD@ zJrptFbzENkk_!gL=I1#I=J1nBdnAF=Yif`1XQm!+#L1QqD^P5f>=q@QY>v)UCt+u% z-e?Z>*)E!Uac;s0!E>}MT((YZthQ)_P_>M1Bw#-B$W5uh&=&nKDrB#x(jVcnjmN@N zY_x07MNndd^l8c#__1yKoXT9*{PUXzAE*sHM-N0`;PK_dv@}8vZa4$^%%}CQVt$SL zi8hR-$_UxY;f>QbPy)=u0Ojc!SNOh`p*# zsxcq3$QBTTU8g()V4V$l=~&M+mN?n^!T-oYS`sB2-(y2VDC|F*9%vyu2#?jYtc7e$ z*Q2DT2$@IKQL zgR1|jwgCPRdPAJQcM-8_rFbrmzB@+gSq7xd0&p86>tB9Lom$G4+I70GrR+Lt8JC(R z%jzKb)Q@fibzXYD@VyH`1JWSK$a=SL6^3z5xN7!uV(Dy48J}y?9_65Y`J5Z=OW0_t z4IYX%3DNc)2VrMiPeNn`abU?nbBTz)QRohoUIt3l7$}ft>f>_E`gueD5ua@GtzOy< zt8H2}z0OwYj-BB&_(Ce_WoPJkwB+k5tD@y_@p~HeX(bcH`)Tw{E7`o!EtRv_E-JF2 z=grVZXVRutvZol9MiuViY=AmLzn(!2TFWNB6`aMT{A2AvU0cgGJ)g{ChC}oAO$8v- z>bZ5Gx;7in-WVBIUIRO>p)4Qnj-!`b%ie)AQ0{y$mvQYf)CCqK(+{oXz+etoTr?ge zVQq+CnR@;z>fJ^r1kc6_pJOcw^#_e=-Rx>AXd{b)k9SN#IU5Q>w~Wcn-BHv&Motuq zQt8DQ*;k~RZ;w>+X)8O6hUt{pR<^7+IWENlt(b?~%6_8fWSmHrF(RylPVhT0h5l|U zTeqCnIR)JM7HEcga~TqLB#jqZ@jAN(fgq6DPEHk5b7)ID`LHTuiZ)HXuFayM9c1%1bC7|SoJ3SH9D}uabVP~q zDFr@v8HZ&tY+FK4bWXK8^eFJ&*g?kEXC$mR;>wq5s_G!q#GUcfr6VRr(Gw`EqnsuN zq|)h*vX7X(lp1%E!$iz@dbpFkztfQnRoZH(+qf{Tc|zJHRTEh6cB>Hvjq1vWFbPz| zZ*-DH;`L;EUYzvQ#PTHji=AbJ7Q1d3lkuqPxM1#`W5>`}wd(pQ1|BoOJ?1L{{M)?v zTj;&Z>FX|7die{mWq7L0Ki0v?n9_S|10xu6$>4l;1$^af6GT;Z@z|WOL z>ed|yQ3W);yL_bI9f)Cvs8zzwOK+9ME%%l();LY=mqB-3*%C(1!GPn8mVRu`KF3Qh z97usZWQTy*o}6ae9`J^P2HTU!+5@%p?htyphYa_(96}pP^IEWnEz?^L(f%H?b0fWn zDe=nrL+F0T>{?IxNWI+XRK+=3DJ$Zm#RWP&_%H)*5Eo7ltjr9;BJyu3t|(aKsc?EQ zN@%A3rPBi_*yQ=x>E=ixA=w=sxx5aP5uK^O;qc*gr$I3p`b$m^#)-A+&pAC9B`#CX za(XaIw+wx((}Pi(TlGOs4@T*gsrPhxFiM{cJ-4;fhjIE_^A@(oGjjDdP9MgZW7QiwJ%ID_ zeAFS-0jD3(7V{7sW3MEaY*@G$epdaA(~ogqQn;Tu{TP=`&t~ZFI{ehS^1|f`d9}ln z>%_|}^fL7qoqmkGN+Cbx^aIBW*C^ZvoqmkFUf~XN`Z4Zig&S}9nN4tHAwAe%#``T+ z4Js=Rt!ZRWdaJ+e*uwPk(5H3bWU}S#yt!AQ*~urRAjOLN)9wB;Ce8`h!U2cFAsCUg zHsS8=@64sEnR;S>%1DwFu)d$G?}~nOD@nF(Qi_(VZtE@#KE$6HxK9^$fsY=d_+%N! zm%U6&mYsr!GPh7aM1pL+6zBS+Qrej;do^C)*GboT-^;STRFfX1uyIk&1S6AZ$o zH+ge0f-=wY1baY8jkTF@9{ML884B5XJ#X%HBRkV{tA4Eyy_t&abi&PXz^Q4U%1(yc z(8rNLHd0G{?A56lfQH-RUA@OSU3@?K(0EE7C|h&(Wer3pjQ7cb$i~e^HXh<^TyA6| zjMpO@yENyl#XaG@9YndF?S!9IZ`Yfq4w5Hxk2&&#^9LK519~Y~l|2Co!R3x%&P|BS zHfAtG2PJr(as+d324(7AW-vpCCitCp1T%Q3Rj=$>M;ynl&K?>t#V8DhZ;n%YW;laK zCU{mj(3yH9P6e953>}@|cgYdV;L%q7B_r6;EAb2}?`nSxT|$S*Il29NaetBJq3?)c zCQxwYSr6JwUtyb%-cC>Lz(FYaV_8!jL7EZN))90x>*0R{HE;x#X4&e3G$!~*tV!^O zJ@8(1ZC#$7!XCa^5En-m9N>Wqw2qHj^#`5)>7@(G*dL?3(oB8G6k3!n6TD*-_xgbM z>1etPlbgEUC2PJGB8s|_HcW;#o~7!ny3GbfT&jxrewd{lCbNfEss_y?)<5Bos?TQd zP8puu5RPT&pEzA3k7nw7oUXJ|tG>nQO22{T)P;T@CX<4%8KxK3q15O|$-AhYVXg&>zF)h}gq0 z5%PZqSH31lv^E55=V!@mxhQea6X~Og%4(KF^T% z)*l03TYvsJO;MRLD&)$u=8o9{B_y$`a5h8toJ}1^$gqZaTp)EQvwPDEjI+pr)650u z&8O+(Oxad=q|ud3*~jNH1_-P#`fDo1-6uQu{rjnZvTn2Lmkm!B*7w=gaHQ_s?}(r` z?{jcJC;{A8(4Y6o79qjUnA~qu642m2?kVQJg|A{7{c0V?2w?Cc2*NlgGW5CGbbcgO;2+4QyZlberY56gl%F$; zGWC1HXy7Oeyzd)F&yAAZjg)8iMLvc0rM;tMSjc@(nJK@b#CIsJ2FcVPpGDV4$!Mce zDDa~cFnxqyd1N&UyjnEtBJ6fdQHxUC}_c+3LGaIdHyI(%oS6zL|6aIH8=|7(iUb%c%242KJ%& zu|WNLmKohN6P2U8K7*rc>5_q^v}!Dp_@o2c+a;o+85~hd7rtx>E5^yN=Kc=ojXk(F zp>XcttQ^TB1Nyu9vTe4t>YTBXI5Z&^Pz=HUxZ70Z~ye7lKBIQMF? z3f^B&SzotkV{-!AW&>N1(EszMLOPPhLY5be^%;l|eM#kNiCcF*r5DG`h7(2@u}yc0 zZIXLzFz?!5|7@L0Y))V!HYTAram2=h3>8~-0#%QfEpuay7-qP{@T1a%bEXG-&;9j# zU1M+p8!<2m{k7F*dP*HJ%ue9+lvZx!xiv1P$_eIF{)c^W9SqM23(~jIs}tnlUO@&E zFS{@i;>v_xu-1{lBWXM)Qb{-!PfaJv`^1iTdSW8>$)1g;^%G@m@EWv2)GA&JaTHP8 z4fNAQxk%*orpG497NT|yEuADobC(&QKe>QrqU2mk6PxCV`u;VJ=t0*BY?dZS=zgor z)bDaISA`~0n6|5``H?gpuqlSWRen1SrT)+0pw{=xZr<0kQ}{6KvTT}izwA6DGDWc; zhHP`N{}6KDg{K?5EO-J%>R4yAIe~2+z_u|7J@R!rcfXwIpx4@k-hO1K3q1^fn`-1zy>`gp_i_pzEkVyJ?}zqlF@n`{9&&yPXFvR z7kW-$7kW)r&`(q4b3k zno++U{6Xl%>EmB@;m-+d&{GAxWjT#_81#1bSNXTjgW3%%Yi)8R+u!w!0%yU_arS?5A;uS&ivJtwdWy@F+w zlO-Q=RL2u8^dj8p?NRAn?!uoF*r2DXZtIp|~>x-_0@wO$#;ST+uQKo30I9!{~`c_hX1P*#e? z_pua9tLZ70;>S}g$xozMUYU_%S^8v(W$dgJiw|Hu0XqV)>uo8P{g0+tz5x7l(^4$Q zfYab25aIy556^^b`>@C5ZZRZ!kZOtHSPF44^{3LUbawWtN z-dxpkrWU%e>jXB)GYS2@=jq;Txl|_C+_C?Vjon7?ZVS~A!)qaVKPAJ&;)N9Rl$?w~*1Qy2quzDV%H1ePuS0B@-yfRO015}0EmUB4YC=(n)k3KE)f&&arKX&2N zuaLCaa=#Z*XX~64%Vj*N_k>oiJ&2+EbM$GhJLA6dv0QBJYwtT>#tX6hMf%QC=^nSZ2e$ z4DP*f>&sFs8E`)ecQM>$aJPdy8Scm7ehqF3cQd#L!aWP_voEDsZon@R?xAqM5BG7n zZv&V}OP$uHz-IwKT(a1uv|G_Ta?Vj||f8@7v=ie6U z_lle=*7TtLugHCJ=3f??w;Zh2bf@df5lcpQ@++3fB61aF6wBT&vCQ_N6~%IvxOj`| zuaHYc<}F&aLe3OFb|rt3&6{>sOOhU#1K*PV%MV~XtiT$Ceae830bF9e7hvlv6WB}Ud$eR-`1af z$oo~<+5f;eu6}%zF;01G=uCrOmAyoqmGWMdxNMKMzAB#($#K;DH7GdQbcmddSzg-E!3?G3R?2EMX7u7L~sa9kCy( z>9^Oh+A|ZUX;xv9_(nB#UIlk&+||YIiPbcd-M_&A%_`X{ylM46Y0gK>Flkm(`6{M) zlYV2InbqX?2GhJro!?-Z)s+4QXpFo0PZ~HFW77EbCM^R_c+-Eu@WCN7o|{z8FlVqd z?4CYIaueq9n}n+pBg7kjQs>ni_f1M)jotd*e^T*kw9B{uq!X)AMLxJe!EeId;ZMqV zQ+5xXF&|aiO?SyOh_V_`soPLukODT_D*h09^b|LFfgycIecAmk63KwHEd#iXk@XAX zsQDVXkQD$O`mOudfWKXn=*$`!8@lXY@tcZ~;UzM5NNT3)EO{r+!NQIQ+*rUYs;k~? zQXLC6C$KFB*fu7iXN{%hC9?exBR$61PBTgI?({H=>Z)&?=t57O9A#jGo=Vl9W5|0g z=#_J}SZpOO{2iX`#vf);UG>hc^qjy3Jtm>gA4Buj%ITa-zpTYU0lfX!$=3&~XoE%| z?yL8~Ryi9@%)P^v0C%+2`{fQA51XU7;)vd+K$W&0??oLdRn5z)e}9$!SSRO*^zk%v zz3eh%7l;AR1GUGIt)q~IE@Kc3ak}cg_cHVpJYUHuTPLUgA zhPZbe&DwxyvW;lkxI{AoIpGowhB{sK(y=blIDw65n1t>>lCEu#?~Bl}v~gn{`!F!= zWIt+x8(qv5y6Qz^Tbz4nZpuE3;o(r5x;;YWyRMC!HmuGFrjmB0*jx zt_`+AE6af~&%}6s6nVWRCv*8{y=7>$7QQ9J*}e5G8Q<|~WuOS>C-?+>ZB8fslaY68 z7xc;ldwl1sFW(9B$5bQs=SEWC7D%I~AE%yMWW>m)eo@i`wnK4ox&iu%3EB))3cawy zQTcQ|)$K!WD_SSju@+~1VbDJ+Y?!H!H}NixpsibE=imUNpnq{GkgzfK-?qr-G!eUp z9^WQyKCK@#*xH^+729y)r2igj_cr{qRQvPLf6t&*Z_7S$r<6t)n<~hgyVEkSOWxdV zT28Fe#Hlc(!E~Nja^ zzqZl`+hxb7oV(1TOKR241$qqx99o?Iyp_Cm$grrM{{%Dgs?-D8?_S~#&{3jDcke=shzS7zu(+xgnzM9M#iYh!{-g4 zc4yp!c3>-}gLuy1xs2y`JOSIN@jLRV)=S>Qa0gF-`SAC+UB+_^-~5c*Men{N_lnh* zXvVuTc+_mj83_B{wyFFf^rx+yZs)8Fk~UGl2-PEpNH8I7Ls>pCvfh1=!hlIx=*;Ev zN^sy$^!>ZguI^^gj(5=ZaHkEao2bulrENeOv>91HFwmr3?x4Nq(jBb6mRJ6ag5|hM z*=_YuMfc z_t_cD`w|83lD)h1z1NX&tmZp7D7eTR9925{7}(_DC_uVbRVw4HzDVGUo{)951kzK>|GT>$DJ57v2N@QMr6_kGzrBzQ<&G>06~Ouj%%-j_|9fF3^GZagylA^W?up848a%6RQZTC_(#FD{%T-w$NdW}lqnj5t;mQVIQK+-PC$!|3|k=P2m| zY)VF#qUVCL+s4DR@B`#WYD3!cf$ZuR3;(){sIPn=pKiroxUM+Ew=mPUcZOGvv9fdU zzKoA7nBiB|S0D8Jhw_V#%c@!ZF)}alCG{~#=hLhCrR&(49sh|Zhig@yCG579)54GB zXziH&%tvykmRmQTPF&8|*#WR%rv}J_{2-;#^h*K|->Aawr&+D{h$llq@LFoWfjx%& z$t;7fLut77o5Jh)H*@@POAL>$>zl~9SDIDyZ9_+bM(tPmr3Lv{ku^C1;|;*B`UPJj zn$fmi22A0td>j_D#hR|u`QK-cD=NAUtPI#5<}=QH_RDtKC3>$VZ-X+?P^@vOK z(S95-3OGzP`(+Qgr~X~)`LWCm-TAK(pJ_<*i;v~&V$3aitQ5_%wl6I$#W)cs%(j-w zcH^fZcGSzbWVgC=$CA@dU)7iEr8lww(yN1wA#D@*M;&tcRc*BfVJR*tFEI!?SDWLb zzjgC&?K*a_7sZtsU97cCHttmZFZTYIGJlrTKggouGTG7lQ`KpC9DJDGxeX()RsUaU zZvt0U@y3mxd+wYoDhMbjC@3f@xFCodC<<~>R8Yiy%O#hqxeG>apooe{?v9xiW{WMR zmWh@cE~%BKx#W@+n$_V4DVhr^$@_igoO?O9<^8<>&;NcH=A1b*&-2VP&&)itK1a;1 zLH2^YkE^zUNlKlS6@3v8&(ak2>Q88j@WvY)H8+f>P$&egP%fC13D)AvY4tSiAger` zZdDa9kjE0sL^l|+n2dwjB8-ZjQt(Abv8jtdRi@%(@zZ$k9F|~DR>p0jndgN z>7OuKIYX?{3aisg@L3E7Kln@EMP3B{y>8>XkC~sBU$XITcg+oW*l}}A->v7h0p42| zPik62_Mn z!{{^miZZp?1zvvK+|XNu+i@&HQ(UJ0d7iiY(i|9m4rI_GCZWf)uWQPb>h$@57K~kM zmEHrj66;Rk+s^ZaUz!_4-G{uLlv*Is$#@k_A)4DVwHqbE7UWz6)B9)xY?$GsAiwkc z{Fmk?NzLh#M{ak9`xtcijnpLuphb3|XTBq#MYQ^Oouq)E91vmGY4x#8{qQ^9{e(H) zdS$TSQg7RFdXUxbC^rX}#6H6?^`lOP#$AhP`w-D>lvtJ8@np|hb&loKvUca*xLg8|okL6wH9>=}+tKM5BpPR5_Mqq_1fW$<)K zqB>oq6fAfikHmsg#DaYy#;KAPVt&L0b$};)W%h92Ai|GpCAIupKItoSSD#5|h`*)k z417$UNcYIm+t_dUp|7Ar+&jZ7zB1p&%!sglef=AL2#LE z_I0gxJo6i~x9j*JC`w_6Z&Vw;?Hh9)w@#-)xiINm98;U$C^9vjKwFET=xRnTb^Fri z?P0<+-)5*2De7S@OgGI(Vc3AC$8$E#$MB7AkRadZ2xfosn9=a{csp=|;p=33m@v(! z0qATFWv@WN7GZ$z?bce+ zW(OdpR>KO_%&+jWakxS^gD&c*eW} zMuRfG#Y`TI2JQdW9M!LWJ101+bU0aIRdvtyJWZVM{|jBTAntkvy)Mk{=2w-i!NM^78iL5$&W)%F66r=w(KqGtaD13ff?(=;Ez7-oM-& z#p`@$_Li4=^A_KkhnQP>KjRhUW`DlzJF~UA*RLX~^lQQG@60f#ohjb4t-tb+3(%X_ z*5RWr;4q7&4&OoV=WFxp7tD>_h0!0nh_)gHRu(I`+ePymvQ(RYbP@BSu9Hn%+rS15#rkNObR4@*FFh;74Bo>yrOm96)9{VV3z zWba!1z!m7Vf4K1*S1`KFcjL9Ln*G=k+}6gA{9&paf&+m!Vp1FA(YoeHal15oB_|uh zv&x)}1M$D4eqKCIUBtQ-OuK6CVqzCQL&|Pzj?>Mv+2vTkQt zuwYr7`fK1{d{$%T9Y76G@Iwf5JAa)=&@&x8a{r9~{G+*k%AW^Fs-UHibwjfIeX|q+ zPt(?UTM*3S59^B~?V7c%3KQFt;_odA)+i+%*UA*KU}DGHQx#?4kk3 zLIqBUJ`r-P8`h??p~YH&)^tNXRIlhUoZ4;dti(a&GSPr0mHpj>H{iZ$hbv5Y1MXT1 z=uCYF84D-CnMO=R%Zz`;R7#jiVRdc(O>^hYg&KqUp%FG{0a#}XRX_JLFsPZ0V%qZQ zpJ=|_d9Kqg4M$}#Nl5VL7fEIHPm~3$0mni!;N%BhT zoVCyc3nKLO)!jVncXQ8njVTt)YA4;d-*H8vjb%xkfF1e|$u-PDG~>geLWApT z+e{C#dbPe2gCIez)%bb_25B*ED-hjAiB(=(q`WrM%am&B*}q9aRgPu{+Rllr*xsOA>)gBV!?%=~yM(9zgXRA@)T^d` z6^pB+pF7%sH^x9kJ{wEt;7vxk8sMQaM5veQ7~nY~Yw!q!8syH0-^1d6ub=qFd*-lalymKK zCw!*f(tcH|db&u=Qzom=zr{=LnLD@H{Qre5FLmRC{xrwPFLon_1oHiVnge^6YFrr# zt>4b`eD8ne!WAOo;EE%%?G$l^K&T_!c$53!@(vB&a|U>R&hW4{9-*%AG{AF2*5DBc z^|C8}_dW&$%5{GAzPZtm92&iN(J=_vBy}O1q+Y5dfViRn)CcIrbET4a6!2_2Y7N>{ zK%-Vpbjdi`f@yc#PdXbbxAA@tAdS2E{0HWE)4QakxA)zI600i3LtCF}8bzhMrk}fx zK%Rwu-nS+XduaAD?cnhbQGm7T@XUu$nqG7lx@Mq=D0IyeH3YPCMhM$hJUE8Pc^fx?5Zp7k zA6~M$<}7dc6bp?P@ABbK?TQ-hG_Ocj2VSb+udA@;x9zEUxy-4 zBwZ(a6`;89!?dmM+k9gMcK$+{`?|tB-s2f=5rVFilbwke>Y7sC^{;FK%6KdGVQf_L3@ZZE)|GYs#1Bengr=k>IDnU(81- zETVJFvpDG(UaMDN`-fze<~)s)h9c}T!v0qoC-wR(PD)0&0_TS~6$taebERzMKmTNo z<*pXi-t-RdZeib>??0>H4XUx0KKuXCdfD%Es>VV)C!n68|9osRiUzJ`fr2sN89H`J zo6W*4J`~dyME}H8R>5O_vKkA?&;h_=hC#L#VwJb0YBB=oYycpt>ww3ivB9lAB{S$4 zKdu0yHQLh8DcE6hB>q;i`qH;T0?4w6zTr@7t8ewM9K>h1Fb{d>S-#kX`7rar3NrE$ zzz?~wdey|;?$1Bt-#jvfR12$(E7T+O7jd7u`5A9nZff3FM7snH8+Ah{9|Rru7TAqX ziIkuI_jdtoqy0Od`H`H{Za}4$Ic@fV4rGR@UtphxgP#*^`z>JQ7~-c7?IZGpk*FFh zwB21Wt*Vl0o3=+8Q%*9Z%mfT|*F%1`25W2I(?naRYSx6^f}#UFv?d^iIYWeQ6sB%{ zLbTAN4Q2}`8z6=e#M=+}nwl)3-QK^PXn~RwrUrQUtq%2pEa`pr6>dLV^n*GCn6&nL2%tB5YRmUoZet>w(M*6!fi;ZJ$8I}7hv(-{o7 z7NNfQ(2xUhjc^qWf^jGA^8N0tPsbcxw)Nr%<08}t4-6R)cL`S|7QD0GPF{F1?Ql zm2JCugW4?Klq)*p`VWz@DxNtyM4ij@i;a)7N zUm*BopoRKS>ZMlRHL$O0PDtPob3#`!Fh;tQqP4d7QhRgwXI`w0sht1Mi{(}iYeF4< zwoenj$eSh0&t2x{yx9<0xy(cAvT-g$wa?aq^>xvZx*Qj;8&~ji^;ly$>Jqd_zjvhf~g&ua}{Hg(bJ*t2|EefF=@GUqkE+UFS3bzXHY zG4QIYM;E*jJ^ISubY8VX3OlbRWbx_^*mowF-)_JXVXrvYk7+%6fA#&Pe4rl-sJ(;; zhsKiYM$<0+)%2x&nICIfdohKJ=@^=J!4=a>`5`~nMlSn=-}Yl~$X}f0tNmG1dGlGm z&mWz7pR*!||I(?`v`g!=)TsygSJPtsy+fxcrQhlu`ocY0hdzG+b?ELUzAk{RtFcfo zq?rq~UVZ#~)T_7SivrnP(?tFtkd5{j?siry5D;%* zS+I_~@OuO9!_K%9Xgb{eJfG1944lrFw_(4_4X^T}tvo1T4>8F!<4NHm+bbmUd3np|S zSS%Ch{G8F5rt)cR+3!)EkWWMQeRR0numI?QTkZ^Z^Ao@=JHua&K=!BbcOpRbzythR z1e@hjBv`%ibisgjY>KIR;wa+$MvqbaM0?gj4lCf#+Ou(^T7hZuWtTUe1|0IEh*b3M_uPDK{mtRlHY67LrmQxiH{y)$wFuVatJMfis@4 z$G~&`D;>$+eH1%ebNL>< zqdfSS@9D%E@NYV^Xy2t+G&HdKmQK$fU-7^$%v)>1M8>*&sT07Q3Gf=nhj&57W`i>Z zKt(#BAHWX>!@4*I%tAIq##$WL;Y!YM<*|HfG&1(`E}kEa-Vo}*$!M11Ifi=Ajb(@| z)PbeX^A=rMdr}9+c10`E?<4+mS2lK3q9$^7K3~+y`SgT=oaN5sh-|W>Iyn`8I zgFnk1&M>JI)}42w!4g#;5y4mAa%(P5gv*$FtM6L1u4br9f)ZxehMYK>Sr`kW;n6QJq zZ#?K4#wW(J7IMWgzAm06n}+gV;#nIp*OIK>8qVwYU?E;Zg$z;kNZCfZS+e@>a6Y65 zYvnDzi0T8ijnuRL>cruEa}O3Pn^*E5daz&Qm*3`vJ=rAR2}hiAzCkDS+e17i!HHx3 z2l&_oP&SCalz@sdKr4BB2G{864q`a&$lw;|3!7*eX0Yx;tXhK3O~{ZWDeWLAM|0}Ze}Ul@|RG;tW=BHVO+(AO|LRoXM}9#7Fjr0MA7J4djl|;a>g3 z0Jpg_TtRN|E*);6Gh8W=Pfr2;tG4hrQ_#{+*uuX`VUtsaYa(fOPyl zF_axJh4Nv;*aZ38UA%A@rZPHyD8^J;%PGcG%ih&9wAVR9&sn+0aJJgCl;;m;4dhwt z_@Ut#d?&5rH{jRkwN8k1aXk|c9|0Ao={g=V0^e_}H%u{ytj3--f|`@r91Z<$%0e5leFjKTW;P^G__cdubYM-u^vC9 zwN-i_?kU{rP^&aC+zQ(hRw=R_#&_+l(qM#5f{TZ12R9#XWhk%Jgw?IH2XV3xXD<8= z@ZV{#4fZG7v9@BP^hJ}<^jeC=K9?e2J>i`0s0bn*RRLwI2=qXTX0Fvti zz|Y(G8>7LJXkZqWQ<+Q~c}msqyYf?`S(K?OH;-W<@LG>yLGV(>u%^C^*3doPiv)CyhXXA zZEH9tH}NF=lkv3i9K-xlwOcfAGnPelB5b(bjbW22ZArwD*sO&Wv;@5JUs4y^Q=jR= zw~b}q?Yj`I2a9QgXfe%$66Es~=#e$giwvv6q_%3BL7Znf@%!m>Ru^6}mep?{VpZ*h zv?C5wZ*S)T{7rN%r!egrYK(znDzDfb}RxqvD8ci$Q7|flwR2&PP7aqKp&L`OmW^U3-ls zV8ZTHYIUqHo4+W^&>_FJynMkSJybe-b<9LZOYXG0Bf%Mdr?@n{h@H%X05@@Q}#*OlcA zD#GPP9$L12X%cwkKRSU;?&>;9RIlM!FErr6s!6zd0;^*V_Aa5apvbl|Vy~Dk@qU$0 zp2%9+VU(db3@~s6FJovz+s zrvWDD3RU;LW}xd6VwRvQh=>z(DX(DhrSp%^o3Ws>e%p_Yu-Iyv46~nDA6b6`ulYQ7 zGMm!bre*yaNHm}jYYRQVL3`GxG_g@kTO$1vN5?mF{@Y~cbaXs;3TEt&4d;EPFsGyA zFH`ua;d~E#JHk(1cS0zp(Hp&LK-j{7P#hkgwTZjEzc7=4%e&=IN|+vQAG=WYoazgLJ#qC!8qI1$rL|NfpDz(RO*gNOUrO zt6iXr+VGdBvyQdehz#u(8Tx!7zc8Im)oPpDHV}|7gGG8^O9e2Zva8thqb}UU*Un&G z-l0?>Hq&;a4L~UJyf>78HiP-;YY+^FmBqCLWZeVpLYew{YhE^kHK3%)svi>JjHiC3 zbl*@OFq8TCZ+_GR+hroqap6X0x>MWcxJ`PqcAK;-MUg3SG(zUiWQ}Wz5V}wn|ls^4Z!Q8fJGDYbf5 zG(Pp44V?x4oZ0M!8WtV@!!Nlyo2`^re#ukkKnHu!w&0aHY_myz;S(N_#s>CMXxH`r z6~w?arT8)~TT$;}$82sU1?9xMsJG~C#VUGB@;DLy)P$Sm$+Xnz1hEqcU7lQ`sNa6f z&!sVIlNBF7t5oM8N!ET*D5)>069hPV%Zb0Q4hiEO=dzxSR8&Qp?0$%h*e+sO887|S zp#TbK{rB+K<}#by{PTipFS2w~D>v-D%UvT#8gyE%#AdhLOhHooIrT2RVVB7Y`mFxa zntzba>U$Qz)Ncuyg~eVR+>E;8Q~rHA3-)-~DRO3OUh5^+tKP;yDnK~i)%0Hc#7nHXsSm&H9LskeYg5nKihyN;A}KXd z?SMC!23XyUkDkZcHhe0~5c`33O7SzqK+lwwj{WSUsM&kTsV>KHzB!*>aCH*ic#pXh|@4T?AQ~_C60^#D;qQxl6DTr~GmUwMtQM z?c!S&K_7S9#Z4K^+b8)S_zE>kVxbwVW5*$%(9Rtf7-LcWnp3ffLX1D9)}l9Eu1>2G zy}`zhC}Z_rGrlzgL-nV-_=OCNcs4ZSPcqmOpI}HAs+GD1+hKE)PU%Iyq$zh@jFq>X zJ$%AqmLtC&#LE`5WuvkdcxcR-2sfoCO3gDGb&0^caGuxvsgr!4*@-l zlFNbZ3G#h zb!QY0T*{jH4nksVs>G49$`WsJW74tQ399E< ze+829CZCZFq1*p=Af+yv5PX!)1~*LDQI)tpjHbIjxOGp#6Xk*ZRV zr~_H)9_F-Z>SYQLP1oX=yaJTI=j?8qpzL*>+7OCHp^}27BCB^rf^{J-YdK!kG-FfU$sfO zzmVR2J*0>)lk?*5kKc|gNjVeB)T6Xv)X+;DeMN{ieO8y@xx`<615reWM13CV5$Ydp zBx!%xYO8b%^^itz>JOV?0HkWCGFjvOl{a0@TGd;FLxvF4BSpBmg@%Q>i850+g>l z9d#9#Gzm?}1DiGWuVE41YbOg00fRmu!*+JeK1`3o9rqLt7rPj;(fQ&(WZR3>`t#c9!t()?sz^KKESDng<_8V}~@@!-??` z00(u2rl#%1&MNIhJEG_Wb7&1dW<6_|6f7XA)#egGjsx)+9Y(8jW*b!Mb~cJ>^PqnV zzQMTT%V{D74(NfS83b~B4gSq~)@+mxas#GQ3?RkGOEQ9NZvfeeK&IG1I?h>#)eyt3 z;vFbULXlj9_uar6o2v6!8(6*e_=>#>xIer>ThWLUKe5@BhJ$2~9!jk^sivwW)hQ<3 zEq*tgAKJiL1479LG_Xat`Miy+X=k10-{v^cjER6SHD#uO4dXPLyExeJ)(iaFM%K~} zAk!H@IqhCA#rWSb7JA+QKxDe>3p{2M8)mXldHD6~Y+I$3$QiK8z&=qTkw!>bOk1jh zl-wzLi8$Cdxf)kEYnG&g9PSKKl*ozc2I9I1r6rl+W7C zI++yy{$|#YB;o7LEV!%AtMw>#1N$Kf5o+bsDqh)^0GYnp6W&S2Y8dlXFJeJ&=F9F_DwNoR8-JV#`kph>WKE>^LT zk^NMFC82c37oD=9A({GlsNiCWPf1t7tm&*}|NLg$C+^cM;&+fnXCCBxfoWA>$d65NA zZ*|ZVUi>Qar$hBFTUlT~-GXN)+bt4QSskFYE&80QYW3PDB587*q zZ0D$4g)vXd1fC9{leGJBa8n8NQca1%PF9>L(T#aV+L3*OLNN#rDnn;=QWdgRMr2wd z4Vkd(xoG^R*I3kq{Y1Bf-MV@Px;w+fq(^7gkx)zhIzVRcyTa>#VW)$bx6uajd?tvk>{xV*b+W zEU>}Hi>b3AV-~o69Cf!z{6)Hj$5kCRiGTV!>m$2P;_@3T$3Kw9cT{8VXDz&6nHH?( zPXv}uN?L7o;zYjV4YsmT{Y)KJIgE{>Q*451&&QRi{X~^_o6Gy>v*1DNCs3AgDif2r zr^(aih%vr<4_|V^s?s%wOyf2p%-W%kKyF_V_Af!|{+vMva|i8jGU#B|lghN}YRm-w zZ9YrzIrm>u7P^g%%m^4Q%A=#rl^$TBQ>#}7feKZh8(-BxOwnT6%BdtMvASE#T8b+J zc0!}ZlsK85Z6VT-Zpc@tdICl4 zxGEx2P^sY-S4H@Y<`ds!!u;@Z`2BQ1KT{!8b^8#iP_>T{P?Q0XuzLC$b{bF$(7MGg zM~~+^y=GkR$6NW1!cO@!1UiS z1(l@zE3QR=O*r0ooB5D`;BBq`U45ISjq({oB4#7S)h=Z%wTf$(GIT>>Du*1|^@*y; zHVLV11Va67xF{oGQ?bMobfnlme8fL^hqcPstD(p@pm-CdWsm`ZqLvYbBeHEPp&$_I zC?g72pxE{yrp0n(T<8K-Q@fCqlbi{raAO2rDwY*}4lk9db+w0QscyM$6oLyY==1vIxO)82 zPBuSIzwjyACXE%fwT4)*aCDvG@`bshs`v;+hGN=oQ4Yn0Pp9~&AF(j2e#1{!J0LD* z1ss5cT4pu^(qd|W#0@`#hVqbItW%UuNsu!Dp@gj&X`rN=ffBKdcC+BsUCeBf-@487 zcSFzj;YGXI2X&k#ne=;RUf;t)Q`%`+J^-o=<%&k4mD&`=W*40)?Q9g&7DWHVL68^4 zM6Z{)ge3`DLJmyC)2R)2-tc4AzIrbo0!TN(Y;$3a`23HVD~2m8K4$*?-$jo`qwjJ$ zG)rqI5Ye3W45UO6?AG2u$1VeJwP1A z1)hCcfCiTEysgJ@278^rUI*AOKVj45SA2QXOo3*w?v`f7+1Xtd{H zYWsl(&{|9lv{)Hg-j6>jV0#U7{(JWWa%gQ{v>)e2#t(J^h~=Yb^<0VpV2pv*9d!Do zabG_202?M>?!*fYuy^IqL43?->?3(mNAB@C3p1VOv7cikyCs>Yeh&TMOb34Cb8Ri; z(dU@DH)QdJgCOL^TAUxmIgIy#)F90t(y~Y0end!PG%jd04^op>#W%6+F`+m2J;YMv z!1jFFAvVag5a~=>n~w>O{#B5g*dcAy;){`a1s2%}7Nsl5IL>a$ICD7eBvb&;+WfVX z*k$(?k359~7?Gab=PMS>UpvLRnoRsUg>CXEK-hNKx!u!FHFFvVxVg|83R(V{!qlJm zop0C(xqBQ>JdGXaYp3%5chF{SJ1{+S6+~j^|*gU!JHNN=_Yb7UifRokUplw3{M$`W5WmQ2E9yET(Qj2d5~a4{Z{`OAtj)3+2_XvNp~1`Gr_p z;`5?qvpS~{-RADL{JE<*9Vo`RawuPLmBpEk^1`cZtf_=IzQ*F}YL(f?SP9g)<9z-# zHmdI4c1~mnEjl2a-@XPiX1C(5Kd{cGFL}ZbC@AlC{G}goV&OX9^8;(xlTP<{R`T&b z&5O?LQdx!Y;x&%+2V&4sk?yAZKlZ%U+Xy3hfqb+mo#1fabRfUX*_#}NQ_1Hd*4 z)rP)ITsm;`fV$5UlzU`YHT(e#BZ6e7B#NmHYueL4M_G++tb+N-8e%I3C02-DFMccKTgx zRn8}tt(YJr>{_b|zUv$glwZ2ZTFR^b;PNjlIE1wQoIxse?5emlBwlqtoPY~*15zVV zP^f&u-24YIe84YktbC=E@B4+Vt7~oPBwJ#tW_NS`+%3qK+=MTvir##2wj5|~ z^xIQDt59ypYyHZqd#ANyJ{v3=_S=@-*~$B1m< zFMRFqtXsQ-&7I(&PPbNrgQ_~;DG36jtrVQJiJo^}BhFM7Y1p{aLuFy|rke%nDvLAs zcT!%pg+WaBhsT$T8UHeE#(zpJwHTcrYL%E#qUAdmy7X&%Zg*KI%AHXJrS8DF&b z5qB-cB4kJtKA{wwOlKx)?fs!rR?E4=&=uvMN?Frt9&xdf4fns*_yaxXj$-at21R6C zA3pUD_M+)4e(Mix1U@mG*SgE9C0|y`RhWA-J|AUYcH4Ti1 z5YZ~EN_})mO(e{>>NgCnzR$M)7t+`VK66{^z(|$A58$UR`XL%le-w$6KYZ@h;nM!7uSTsgO^8*G9Jew&oKWuLKf)_8E-WlopLn_kH|zSzw?l_cGtdpW6s1YyXJ}OJImB8yk$j;%%!!ZEkfrPAfV8+opK31huE0w zhMv;1oYiST@$}g4OKFXF8%4uW2>O8Q1k2Qk3z1jvTaS3(a`w^$3Kr85q?^JL%#>tX zIR#<=$k)KLU%b$Cg;<=ksmcrDHlBoS#KNYPKUY=?X5z+Cy5tGhM4*Fr$@QkMi@%lv zuq26R-s&;)e@@FRvBNz(l{#2aq{s;Q8vEQ23vTrhpU{Vxh||$|v`=9I1O=^}{>3Hx zt5mQ|K)_NK9{9VD*@!wC4t#ZAdX5BuK6pQ2tzD^zv(Kkar^4oapI}A_U#34{N5UOR zQfp}d-4DxDqNxs&kj~9OEFbff&7kDpJ!KIddU7JPw?OAr0j<_ZSZoFB(7~>v-m+&P zt2hkoPLIM?+UgnYoU#ILh(pI0AMu?PSW^Y6?<-i7RvIc#11Tu$Co!qPy6hF3v}z*A zX!;jxGMG}pwlsDNUwgwM7RK*thzZRpbvKGb`#S5 z`d=*Cb(<{eJ7%5A9`WD*Vw~vAe8&7EsJf{wuy6y6?pT|K^ogJs5tIi5#b~nCK9i}& zxu8jfUi|tMe(o6yudij$B`41hg>9!%E8PZ_EU4~%33uiPZM*_cV}eS;!v|Heh2!6)x!qFUaYQRx^)bg*wmXlOO7v*kFQ88Z&*`f`2qGv(XDA8%kzlsS*^n!bJ3D4}|x(A|jj4F6yco8i6n3 zxS%Ms7?a{pY#eP;nv%cFq}a$WGbsV&*OrxqssVX9uY!{%v#s8x}3 zvR#Rddb=cKgI|}G2w621c$$@PQw@TUrSUM4DGdnnWM<41wa$i2@zaT(%hY82bT_^f$1oV(u9{;6j#ow zDPiq9Keb9D;pW4=3HR1BoHwYz;dMNR!ruY66D}L!Ju7jbK>(RmO=->xzc9J*%>dFM z;xDVT5UwXh(%m*hK3Zwzzf@BKTkA4nV5F$GX$>@9q0uvZ;^8hz1C7VHPoDacAudXQ zz41g-)KF&;dZC!VwSlO~m+W6r5gO|3(aMUnUE=oBNrKxYenzC1T$I?Vme76a8MMz@ zYOOVNU-~&h-1oVOcJ!;%M(+E(A3Wkct1D9*I|>Bt`ZE-vQ=y19gKcVk9iGhSI8@&Oo$vX-*CCf*MM1qY$5~p@fkT%Qcl2Ek%>_ z>Rfv(RBCU9R0Lt=!Kqpdsi|zGgb!*e>+Al?;w672UJ8Rh1^%aSl8KMKXY%C*u3AOB z>ZXSt_x?@=N0A8IMVBB!L0P}*YZ zs2%hhi!#_<`8h*J4C!>mg?>K(wRWqY=!b-?g)Pu^DWMERX0&inQQRg6_Sr>D+P@+m zu!X01BSE2IgRW^h5}<+%vx}OH&d3rmy0GMhl8z4YD3?K1(UUXkK}|ez)1hVL4Xp76 z7FtUb%qo<$HDm@gZHohnA)No}p)@t>1fq%J^*xnF8kaQvka}R!MRPVzr52V%H7EXH zuG^JI{5emhWnKD~mrYvzcKU{$$2s)v4Ns+^QR><|m+beR%3vAlO=xXpb}%uTEK&$L z&lPy=`tLyj6e^wodaAb4D9)~)TmcJFg{hlX*A9@N8$SRX6TPO4rmEzg?PpirgyQPH z)KzaPc#AqpNDI68{4WgV*3-kX7M4}lOVBPLH0L04y0DH?Zz9Fd8B|KwWd4!jX#UZ* z4NVLDTT$D>W)LfGsX@>kii4^;3&akB0`$-Thdk*o1N-^OqwR38v6=vc`JiV zu5raxIVgy)hamZW9lq5^S+4aQnkL9YeU+eA^$$PQkL<+)+hzB7sRVAkN4(V36BZ=k zN7s&*EO4Xi@I}7L;M%|8`7m59#Mhn+e)Cln7y00$fNtPOmi$9%8s9;=}(#IqpZ_9UuD{uF(i_w!H_w0Bu&rj6dbRZ-q;Q=xB=C@-1zZIjuEV{Y_aVF?&N)mD{idR=X^sMUTwrpnC*;9T&%5u9X}%qED0$z+z>g~dy!;UqN*S7py@*$_@&OuC-on-kC$8#6bRP= zt`FQ8xH%p8n_ZN~M!mPO23#+4{$m%E6v${6twd?{Ump^`5Us>I1r$Up=@c`(tKw7L z8b$cC!=iXfS0zb{r>mUrcXjk)RBwV(J5x4)?y5wIaaLAUFQ(;M&WXR0weU)u`|_RW zJaUt+xbIuLRe;~P0-iy+=(B}W0iKqw^6Z5n2|0Xt3(;!e~49HaMG=QA$Cyp7~Wk8 z(Ul+1?DOtRH`#Mc4J1tkl%=;3on?pr{7f(9Lc=0ti{VopxW;h(;KJcz;1*f=;oi#HwuW-C%bYd| zfL0EQ4M|ujY`s)_F(G$QDas_Z2VdMrN!Eu}*aNOQ$sJewDE`&A_7G%k=)r3xDm|KQ zkH@YgxQ}&r1pYC&^STQ|^u9g#yhLq`v^7y_D#~0a@*NgvLpPxiL@o*-bh!URX_%mq z?wR$!4p6lXtU>3xup%UFgvJp7L8Gkc;G)h%WBSaQW^0o28r9NYl9Um8lMk(*R_yI4 zFo1M7U?>>ZSHVIq)S8|Blolp^>?39mFXMJ=xaTgSzx4N&}@TDXk^lvv~JX-&+Ti6S~PNb%vO zfl5me9h?`T4F)R>3Q`6tQ%s)3m8yXTl`4|N{XKRwV>8)ju<{2LRMZd*Sm3W4f(oc{ z7tBv{og%~5smjr$m9)`{7%h@Li$Yl|xG_ZeUJi4labM~V9*ZmYM>$etl@Cqp=ah{9 zK3uU@O(zUXYif`N-hG6!ALJBNj8G<<9X&-wCJntq@IMwk1-4_04C_5?&S+%><>0r` zN;3JK#we|fY+R<79e;6*5*?zEi?OxyJO+(w%GH{l)HbJzNg@8@7$t<@xr|jBRgL&) z#!HmE&Tk$wRyp^7`5ZD1HSyph-e;VWBV!u=`*BJ`@*l#lMpN`zMU4M2PVv=WT#PRs z;)SBmeO_tkBIf%u(ezb}Q+%{H*qt-J$=X{d5mWMzByH6|TPctN{`Ma8xA#mfHR0b9_n5ztYWs#8Y6h&ptJQYLSh$a~LJ>dTwM`NWw@qWsxJzIUe58(8+uQi=q& zn`r<^bbOGmd`9Rey@Xc7(gz{kZHVkr<8V~9I9Qq7fv zDyI0VxwxqZiy?IUTg?!bkX+P`u#H!>v9!N^E<^+KnV(2NTa0L*cTMeed-@|jVx{8i zqD5NbSFm6uX1HB>@28dfTg}I0PV^4$nWxlAO0NeN4h(Y1>+YJ{dvC-kbrMC{un1Ay zcKlU|&8$_wyrgr*3C8#<5WgeEFQoWCzRPc{QtJ5o7^4&+N;QhoZZV?le3!@Op-26> z7eZEG%XxA3yRa$rYMxTxwSdCBmLhD_y9Gz`ly34TW8@-b-x_6=sn5BiF;d~8SZVjk zSSh)A9L7*_Qp{niWdG$aid(8AzjHp3@;tArn$AuSLO ziPB8r$4MiF-(5-;elICT_`Rie!XGaA2_G{>!XGHz??V84N~-V&N!NA%H2fYZ-KB%V zkCS!?KT+B&`~lJm_}2K0SSeLJfQiCSl#+!%K#GAM-?x_(2EW(90a6hBzWq`p58bcm zP49iBTkw+yc9+hvL_oaMPWU~g z0O2P{9>PzOB;og!N_!E4Uea~p$4aM!KU~@`{1oXe;SZ8F2!EKADg43GO!xy}xy}aP z8b3f9PvPL$82A}f79&N#AZZ}{K?7o?MEE_sr$|=#aS45;F60jffqHn5?)$;-n`o6h z;3xFyDKUBuj>AF_{k}~q>Jze4DKTxPw3H28Xnt2+K+%fVC@e0^uASp zUjcvMzaA}Ag2fQxEra=IV=d!q?f$|lZJpCY3Ohn^c#CnC`VGsD z(X&;mKzROf?KvS8w0|k!j2mZJ;@;b1X}n~2Mfez#fw?WXnQ*Pr5IGaiaJ%8s@t(OD z&u~R>$LW1Zyp#`DxP*t!w)7Cwcph_mNHsxp$^h$tX^UNUd>uMHe(AxxZuQ>$dN|)O z+ma}+`I6t9ZD~w?XsV@dbrsp$jlK2~4^M@uvQBd>!A*Ya z{)7X;^;D!=aDv~abnpeR;4}noIKiXR5D5RdG$j7;1Ybt)@I@p{o_olrPVn;-2%iEo zu7Ghfv1*rp$Rv#kGfVm5W~o)7SyGoNlFxEQN`Om;%ZED!N56A3WB%2NkMwU=%)dK5 z0&P#BN1TY{xpOUUa^)<(Wv->6?48CxBfsY&eht1kKQo5UpKI}#zgf=fzlaa3SMVtE zkH0J;$QM`hdE$M&2sa09)DoBzH|Z&FZ`Qtqzp8)PyiNbIXQzhr@g5Dv?|U`afd~0# z>A;bHgkMXy)VEkJ#z=t|wYaaSy#7o0*1J*=YJRzTEPoXQn&)}P@*n8oX1!S6`9+Jr z`^WWT_3T0?tRKtYm}~Jhw{8?GGGsp9R*zp45z9ZPgnc_{3C(_85eE>=@5Jblx5w#` z->~W-xs&yWU9&X;YP3p=73S`Xmhl$zEnUqgmd5f11f}+J{lT!Zt0oF!vb4xBZT9E_}@*i;wvaIgWp@2*UTYCjWYorGB-Oo^jF*&p1Jed%hP` z6a5!gCyswX#kTA)=5&m&n@pcao55CnVHHP_=#&KH44m1@H2n~*trUmOS z{vmNvlMsNS90t6rLzw(t9Oc=!+S@1Mq)R7s2xCs^n09}y;r8}cVTKXEnTE`@;+~5w z4R~1=^7YXjJ?Zef`oqV6YAA;6b>>V$}{F#ysM=ywMz4r zT8Wju)w0k9ryj-)t^v<(NL-MpQb-%~UFK{s+ z%>Hv-&7-m`jlBm#F(u)kOpeDh2}vrSm1SvT>cO{VSsIx)Z?_6bt2g~aoDsmU(7;yL zr4D)G$@48PJZ7oI!@T)~Al=`5;5RL;d4#HmOfA+!VoS7;?sBQd0DJ8ks>ra`|Wc=n>09oP{}X z)H10*>EFiR|KE44=O47xX;FB*3hb#iP!rlg&2Nt|ga-p9(M&$5`RJJCIb|uXZ%!@n zJZ`yTvJ@TdAq5=cmJ^mK8D%r9(*KJi9AAgS416SdPPnOXHn{O{W8g-@4TMXCv%+

j=K<#m=K{yzq{to_Qbi{a33nf^46YPTg)4%)2zMIpI2RRmW#N&YRw@YddkvUp_4Ti`NC6{2BwSrl~a~Uri%rpuPl`ojQH~9{{wh$ Bf(QTr diff --git a/BaseTools/Bin/Win32/GenVtf.exe b/BaseTools/Bin/Win32/GenVtf.exe index a222d5e6b8b1406d2876f363c03d7e0c104c1e50..ee60e62d324e720340660fe623705acecc410733 100755 GIT binary patch delta 92072 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 delta 92102 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 Uao($2Qvx@xPTJmbnYG3S0Ii7~bN~PV diff --git a/BaseTools/Bin/Win32/MigrationMsa2Inf.exe b/BaseTools/Bin/Win32/MigrationMsa2Inf.exe index 089252d4e592d888fab49a37cf2cceab48bfc64f..bb3be942fd5e46b38d3ef0578edd01a54fffd5c2 100755 GIT binary patch delta 4502 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 delta 3755 zcmZu!33ye-75?YGuw0TCNirc27C~DC6h%c)(JG24pcKTmazJCqxrCheIUsX=%S-h?^WFyH&9UFCR)Qhewt^etp z86PYk)P+9&X5XIc0ErC196O|SvrQG@2HUrl_sqljD{TMXY-7x`$>tTUvQ3W4Xm18g z4E2rPo$vQokxM|`!CgVOgKq)d0lpQ~1KbVN6M-E-R*-=#>gABO=uU?+ExOC0Mi%vU zD9fVXI@H*rKH%FxeG%9p$`O&i+d+};=a5L>pF<*jKlpY~4gx#k(hoQ!(zy0u6u^l*nndIY!!Xe0tV;>x2O66MhdBIj?4bb-4m(hoW$ z(uEF*^cZkY&{za^#HGhMB+}y@66FaFiSk5;vJlClNe+tiWN=y3!y5fmeM z48g1zGyfON0t7P)}dDLdl#xqy;xdcYau1sL0 z?5YGt%9hkJ(!Z2lT}xR;%03@sX4-5`EGxFz+E_NrX6s_vV>VkKpXW@KCNN@ZLjohF zUO3N0&UG%XUQC!Ird~>5#MH|%X12{I>W{+6 z{yS$uT>U9wl9-AnFkQAa^lxxJXb*S@XfJpuXdieO=o?%xp#9(xpl`t=LEnK#fewHpqe0(;3qU`B9|VsaO;OT!Sn(5}RK-t%E>N=G4HYj$gwhl*0;MZn49ZZv1f&%kP^RLi zK#deH1!XB-25PK$IjBjD&yMj;V|+8kPlK8(UIA*M_!-cJik}6wRQw#MmEx74ixjT{ zU97kS^ee@yLBCe~Jm|94ir0WHQM?w^M)5lEdT=Rt1Na5-i{O`#Uk}t)@yjqB3jNI9 z90k7)-VA;N`6-}wir)lXs`xD{r+5pfz2dh)mn(h;bcN!rpbm=P1zo9l8|W&tK7`m40ti)jKuYbZDNOY}&5!51IBQ{(AFL ziQiz!YCp-8miVdW2m7noTkYFuU?bT^ijA<1)Tp=mf~?Bep|r#JTY8#SOB=S09ZI9U zmp0tIppBeX8>IwQi{AkxQtS~kCud~t&`~)#mlsURlXK`Udxni((Jn39Yt+TwzIAlL zq{5;3L&mmjlh?N8RUJBXjt;&oEq_azXx%$@-xZ541tiin8Ui0 z*RI%XIIOSr_HQ!Z9oE-*i}sn8<+^j|Vx4Th&PvWQKbGqh^KiLt;q|@8tSHx4d4pav zJIZx8Z~HYS>xjNSbk}VuCb>sS6EpINZs)z;-7Gz#Z}55zG+!LiUA^&ZO!iTIqnEbJ z^gpU^O8Pb&hS||7oMB!*sxS2pwl=%v_Vyc0(_{L&(9RKIv!EcX&G2JZY}kBbj_Dgi z)7OU0O&h|Q=8&-8?lz4ptki}JQenFOpfgQDh4puLwpmbNTj_SY`LIIY;(gl7q#oB@ zJRWU&9k(r?U1sJ9Zo0;NcwArab$rp(J)t{#4}EEFIH5b&eY-3b4#0uDwPr zHoGhJZ7H2!X^1?#19A$3eADWCTcm51Ez)hfxv$E)I(yVCtI{`zHlA&03PNd_rlQKW zT9js5oU|6YG%-0Rbrbr3yRNp>z}9IAd$3P0fCzr2dV!H_fD1 z+sDy-n(13@TkXEZ%&xX;+598(Nww}2qVLkpg=OiD&4s6QyU>6$>E_N;`f6`iT{HcZ z?o@y8j11(D7(K}JJ!SjrF+ZcBycXxLg>%f2Q@V4vKAkki1{23lD9kO8H|2j_%GO?P zKOBjT||8lxewNH!;P5);}xod9EorZMWWm0`v80yOcGvwAngOH!|(_ z+dbU9#_o}_xn^*U-3xVAnRPY#+DkU=&=@gvRFIdOHzYV`rcPa{IKuvHvk$U(k1XGR E0dMCJ?EnA( diff --git a/BaseTools/Bin/Win32/PatchPcdValue.exe b/BaseTools/Bin/Win32/PatchPcdValue.exe new file mode 100644 index 0000000000000000000000000000000000000000..27a4f1f9081cfd92d8d34c99e76fe82d0a9ee0d9 GIT binary patch literal 558196 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ξQ+@p}+laH$+10bW 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 literal 0 HcmV?d00001 diff --git a/BaseTools/Bin/Win32/Spd2Dec.exe b/BaseTools/Bin/Win32/Spd2Dec.exe index e1474b6aafd4b39d4a2c45f1f15cc62cd232867b..7c16177bbab2ed26c3009fd18b17d31f8bccf0c1 100755 GIT binary patch delta 5563 zcmaJl33L=yw(nL|I^9V+>8-L7=m3Gp8bBa~kPrwXD1i|6K5#-O)gfh)&e9zNlGq?& zXB=V~uLuH)isOQT0>XU8aTvdf$VcWQI5;AVyE23D=evxD<=fPJ-IIkjPW5ewBB$fnDzg$Mg=-5@6*S-Ulj5<)m@)_ z{EwqM7~><3F*doTy1K?cyig644Xa&V*2PdpTgD?3oJb>ZT)^hbwgGtgaaW>N+Akvn ztkTRpW~MNv2&~e=s-l=DiUD7XtTLKaMKe!ycrCHY7*=Iv9&30VVXR}BCpNq`vC23$ z$7f=yjVY0gPwWPCut}>0=5ewL#ylSq#8O0Go`mN z8N!r4#$+f{+{R=WQ_`4kI4dWWeL2RkD3d8<)L5qUzl9pXlyv5cG6)CU!j5Fhz!39| zGSC^f(04P1jLKrlpj)WXOc~64(FWm=TUd(2P`>bxu3^T6n1&mZaZJfHCfQ6G(PiRD zjxkIe&y-P2A)>px&CX%I2}~Ky?iW~%#J~@9@W5tgWb3EXw+N7>D;XfbeR}yIj|hwO zqeG7h@Q}Vb^REJI(@RDL0QT#r@3sl>NBy%gs{zjG6 zxvZ)=;{-_8o}YIevbAUDe+yH!#}<4J^YjN7T1BYU)-O5->-5sakBYES`)Wu@>Z{WoQz2=C}x`8t3rT1v$~;JRi}UjkJ>sP+}W zuK%TSBS5NNRxNS!EBv1WjMQh;Mgrt(^Xh&Fl5VSi1z?u;hrkaoPdgMm1B}3xC z)am<{ivTOMgAcw6tGY#Lt5!S?YqZ3sljPx-P47di_WR}w@PxMgp~J8g{_d z(caRR{`M6K-qYm0ry&yUuiKp1J{c@p#H**kuAP0g9a1s>2x0lbXuI2g2X1}wzHK6< z)xQp$Og|}6rr0P^Ob`c&V=YmZ7>j6$i0c)MA!LznTD5nn58aK91UzxUIwHkNSQm}S zGy>Ns&6D@5dXH;ksP8T;_C>ul=f(1;?0;(BH3~$3z|6twPR|c%>tY6PhkK+ z+bT6_i6w*y6~<;$K`sbdm}+541X~TPS!7KjQ=?duz!Veb2fmKx72Ygy4QdQ)l0rs9 zjAUuVLT&kek<}y;Wmtjb4h06@N?g2MlTgmo9KkiHv8>5Z3%_UsY3{Tkj@zKb7|KH3 z+N^hK`$bW)w?y@HCu~?Gzd;PcOst852}Z~2))IHSmQdJP;uZP5LN|)R8_9l2c~j*7 zqnrf98Upyago7Nm%E50YE}3so#3;VujgX7SvTH|V%XAjBal?tWVDWRT+5C%^DDux* z!cVpHmNQ(j^w35ZZbH~W$_vAW5GRi1cc4KW-Gi8JJX;t`B8k|z)0;>fEs2h2fS6P;x3pu+Z|As`n|!1dY`+{qvmiPs!SH- zplAvy>GN+~MN@h(6-~*^RH-mSED+y=GTgi>M52m~VuObg881{+q*Rv+{QqX;?0AFN+qRHOQXbkZS;Qdnnx z6?s(cBdnc>I+0TiJEp6FVDSnHPw@;cIf8(x&ve7^)=PyYLzc&;(Ik!L>r8y zY00GJK_BOwQ!_hQeEW>o1$@3rLr$Vc$?rfR>lr+TzD_MP6GOfR^u`tPTCKD z+$6t@r!NmNKd#9}rp=-mH6&`}%L-VKJfwaAyoQWo&op{Ap+uHMcL0CUieOO0-?XTz zs2cdyL3>0zmPFJgvH66bogtFc8Af>-g=Vb7hse()$hXTX>NDcGEyfuZZ{ex*4qsY8 zTUA*c+CYd6JUl#c7?{9GF4-Xh693H&7MMmPonGYJ<^>s@NLLm8trn?y^)~#W+ec!# zw^=`lTi>tKdLEsL;TEBi6->QJk5O88I8vNWyBT*l!3(t0iIE$Ly_Gw`bC)}jN>22G z46dPgB?qfGsO5k=T)YvzpGG>hE#4{4W?E0-yu64^5tclQ8PmQt^}>sCj0tkJ8wbaU z#cM$yeP}9}IC1exE&nynTcDlkaF{BHEe5np9bU1~Ie&HG;f}(?&}<#}IsIajh8>ti z0cCtd6W#P0uQIz<>H4+ir=NEnSKoxTx#q8k+FX^@ijSlSL!}^Xtb090pdog=o+2gx zhxzoj1v%M=rftN(osot}7p!aUTW3Ej(TJd7q7g~MOv6GWibiyY{cOw|BMiw`;hzKX zqeyFiLvn{?w$5*~a+UTgEm0p(BtO84P}lC3kae#F>6q7IO|iOFzq_%fzA{kjE%UAO zv{-4xc6eIi?wx7=I|&HAcX&F!d^#>uYUVayJRR3@@w9DWvZ1#2>k&U-{$*QO?K<_c ztwX(R&oi5OY`#7bIE?Mz+j~hy7*2g}FRU{}E}0O00MjcR!wr!g3o0DF9y9abzt?T2 zMqtx5#{h}{E?)QiHAlzu*PP?3%>PZX+1*kkzwL(Vz{wUI(f!XT)x#6HUeklx{^BfZ*`4V42Aq>IevHDH9q$CpWm2!!&NA} za}!)a%#OAiImP{RX+oLO`DDM>_M$vCTloZ7xJC2SDY_2?m+@-JSXbUG$z+U=)Gkir z`}_Ww0`fGWbuN~Je7CS)#qA(Z6k0dq#~@D@9(@-33G}_}BdieQae{w8?iS>+V&PN? zujESc`0Ndr4fhmDHh$N2K28tz5y^pBKAbNSQ^#BQs3?yXUOR*Dh_bsoQ?H70yg2QG zgnvIHrQ&a6Mo3HmB^u8c9wTGJnENlAI^}*G)Vj z$zvkrmm*lTw+wA&qDYO9dkgMA=n~vp?gny#|cSXu$ z#F3&I&qc~3gf*iu#!T8uOR>N#=ZLYjX53e9c4Em*R}4O5CW98Oz&{a5WZI`@R#O|q zElIMBQ(myR_*+Kjb8w%9%?05%AEOM?; zS%rh6$n2wTtd1gl+H8C-ip={kgcqX7=S?qTax|S+^2KO;?QC=cRz}N%gsE=CXnCZt za3#JQEf?e-0V^vhDR1DfOeG~hmqENg3?Vc5=y5V+bb%cUW5|MM2I6mG%zdmxtK)wozE zj*OKD3x&y85=+|yGjT^OIX8L+v9ZT2R!1CCyJh*Y63(B;LGcvp1DDVr zFDG{Q=SSkH=&wdNaZkLQFO(+WH}MqePu%EEpalM6J1$5d_TBejYl58Y?&{pzNIf5P zPxg2g)#JMf6ngF-Z{ZKqD*zw-wY>Yu2w+Si70ZW>I6aX{^U_)uu4;D4xGRyu$9Ca~ zM7f_KgLnJ=#LPzzpGef@XD}{F&JvFwbm5YhiMJ$)c)vJ~n+PjB_7lFDB=<2@MDl;B F{vYe!lkorm delta 3719 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 diff --git a/BaseTools/Bin/Win32/Split.exe b/BaseTools/Bin/Win32/Split.exe index 3e02697d7afa700d32a5714f4f98d9620dc754f4..ce172e92d6d4d8be9454270226e88bd27d2ea3aa 100755 GIT binary patch delta 35540 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%0DS=I_uE^pk3S#gbPL?NcF&dWETpE^Dx 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 m<>0OSw* z?2h&m$KqP((#X2E#r7C+p-lTgB*t|qEbcNpST?h~Bro5I@CU-zvgf|)vBU1~^}IE= zH=vJ}00M!cyu#u@pm)ifd`+r58BBk0`Dfx>F-orR`{J8*xu{G3zWw?x*yQ&`HuAx zlm<=#jRU8G(!rxa#7b+%GjMkOe9xl!jRl?@&f2Ias} zBZ|&7N~0$lrO{UyrO|&fN~0$krO}hYV?hK*jVO7FQJQ?^DHT>L(&(vXQlqajN}~ft zY4kL38YmBr8d3Cgqcl3-C{1RgG}$pqldncNiqYr-@Ho&6IBG=Eg+^)gHAZRlOrtdV zTB9_&$S6%N2B(99aMXyBOSB5RQlm@Fq(+w+rP1X^X>`aajh+P_54sMH8d3CYqcpj~ zC{3PYlqQF-H&UZ-FiN9u1ZRM5f}=(heX~&-9X3j%=NhHaw-}|#w;H9%^T3&)O0fKH zm~}~*CxMoOCxceNSqf(voaJyt&2vcZM7$(+ur5L=>598F%wR3U#8ox z_Y~>2_joe8?FKiqKt=aPBh&UiPe!-h=*j4|n>-oSHB9$=Qo8K}o{Vn$pqp8!qKDjQ zk%~6E(GnGHaihg5+8V7hrnY%9+SJ3IOjx_x?n&vrc*K*@rXKZVw5iA3%u*FS?ncX0 z^n@F&P|=fav|L3`MeB^IKcCL%FCpzJayr%cwe++nqfI^I$!Js0dNSJ7b8wUg)$&Oc zSfCwn)IOW$J34jQHT4d6V`AvkJ8t%u(*QlsBAN~7O0N~7O4N~7N~N~7NePY1mR z&Ii2@X3z&<2lQ9))u6wD3qT)&XMjF}^AYG{a3SdL;P5q|Prx%l{{UYLIt(rXeF`oH z9RUYHpMgt2pMy(5|8#$%{{=1seE}{9eF+YMj)G@_z5-tdItHE%Iu5P?odC}PodjPG z`Wk!#=-=QQLEnIH0{sVkv-%PKuW|wU7Caa99rzZ||J)UP555)j19%!|yFi@<-wirX@On@e!S{g97rX&VT?O9X5C6GvH^z&w+P<)itRuNOd);D^XpByHU^*bgAGMK?4Q91R5lG z4`{I9mq9}W?*$DN{0eB8;8#Jz1-}NmOz`WV5rX$2r)Q1&Cod$_Q}1%0dhXLpog#aa ztr}k&OX<{<^ib@nb6Q$t^=RvR5xzj_tb86H%;V986-mrxPI-BjQzG7aRjb7Z zGLte=LoH5;v@};n#^qYu;zU2$_bTh`E-p@U8##fj)U-fW(wNjhP8y|#hPqX~e!VJ? zl9Zbi$eo;(8u}$_%B0laK=o8LpW)bjjNtCQS(M6{A?g4W1L zUC@db@qW?t&l38tx%{Za+9ubRTCEnWE49=S6IoXp+x$YizIxKIjg?vPa%)v=*O>R? z=BF>HuZmTNUmeXN^;P!v0p`{(vha2L3K8eI-IJg1vxl5_rrS65*=l?g%9I*=u&-SQ z8LqLDeBxZWyT%?azO34BCyA4Cls@g1mHX`>qFV0UZzqc*(yFxwifM9atvyIAlA&7r zGXI8JAIcnA*I>7o`)ciu;sIM8Y@E9&fCzJ;^oraF6o&koCX>g-E>N8Xif52*7Eo#nU#_Mo$xT^562iE2|; zF8ds`lrN|{->tpnH~Ji!BKz0d15(xoV-a#HLbJ>AN`C4uy8G3N zp%1UW%yqFy4i*&!i)EVzyMuhO-tOF@V|6U@)fZBJ`KgWgq2BIjJ=NJSJ0<$hkpm8@ zm2BuPryaBhG(Vi}M`%uoQ!ZETS6g;?vcIX{_q?L`}LR3k6n6TEdT%j delta 3300 zcmZXW33OG}6^8$FZ-$E`6bdAaf}mxvrAV<5SO_#KGAWfRut5xDU&9~-NFoG~#~h|G zh;Se%;0P!nGWd{D2BD=zLgru_(6%5@6>Ejsmg3nL-pP9H%elGx`|o-G{?A$Ot#{__ zZdtgs<&L5>FL8cM*ZgsZ)~!63c5lqN?&0D9pY2KlI`%Za#0@~6xk_FYOJY6Bl30(nB-UdriS<}ZV*Nb0H)tGuGa}C8Es1j`{Lr0; zVm-k=6zhqW#Cnn?vCabb0cFECBVwInNvvP6B+ip9iSrao$p|G=u0^q)3hoP<2H%W` z^>j;O{h}qYo?%I>LzX1;OiSWC3)~Mh8{8i>2mCl_E?C#@<~|tm7r|c)e+m42WW<1$ z!k-U65B>u93j<}@|0&Di&xSw87_W#_HtfMop5o>jPz;sWwC^+je7= zB5hxbQl#zcQHr#Eqgs*mOWQZAC8J2&w*qCpsooB%JX387s)eT798?QTwIwpohI%JT zkx=hODH3Yy9VK*o<&tV!)FcVDJxY;K?*+;tQ|$<<#in{csPav9DcA@75&RtJPv8tt6?hcrJa{zd0(cDQv*7pj zbMRQupTW?8_++&GeO^jXMz3&o(=jp zc#e7SpJ07A!E-_X1*F|YM^)>s9~Tt3iQT--bC>$pr(pn1>LQ9J*b)D4WQ2PVr&T&lP_JYOnYR z=mEt?YlAu{J_h=Q;^P?D`r~kuhusTKxK=OsrV8)x?SAWqKk4rlI;vxM!vObsj7}fq zCWTKv<*rH$kM`XeHT2+bRDy1PUB&C=*Hn#gt4z1ljTz$rdc|dxtT$d(aXK^0jnfA% zD^K5_<@N|0tfTarYRh@NOL2S$5Je!wS5NobDbH#`A z3cT$d?U^^+?Tq)d`k!;|#zL=4v#9f|InySX!)NttnEt-dOL1>CaCG~IPLj?q@)Go* zv)#07|H{`ZUrxbZzRG!W*@={f)-dp5#QvLL`BCoT`(QS&o zhvJr;aWKi(8_T?UdRDR5$UT3{SykIj(z}bjw(62TU+gt(7JW_z>Q+ZG)p4C%;`MNf zC+Z<3UPou(G`+0E`=!&dLZ6iTiAMTXiPzbAvWreBHTR32&XW7-wtAb~4-e9pO3nK& zjMYucyhhbK*}cq5x@+y~SaXISH!gF$o>}BI)XOWq7(Lz0b9}AWlo@|C)`ewWs&lo4 zu3v6^Iy|BKmU|C6l|%IGaxcZXv``-`H~G3fq;Hjb-JQ}j-J`lI!XC;qDLQ0et_j@8mRmB!`bP`#tl>(KJXeh=B1WBu{%Cgi3M U=o=d+ThZS9b*l;7Jmnes0S5AYK>z>% diff --git a/BaseTools/Bin/Win32/TianoCompress.exe b/BaseTools/Bin/Win32/TianoCompress.exe index f9894b0a781d08acd62699b7828a0ed44290ba27..58afbabc3ac7e533041ace32c88aa6aba12e243e 100755 GIT binary patch delta 68550 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 delta 68519 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 XTvfjQdGWMks=bBB#BcX|b;f@K*rJG8 diff --git a/BaseTools/Bin/Win32/Trim.exe b/BaseTools/Bin/Win32/Trim.exe index 9777b80e3f31ae9a9904ca99b2c492c2290d146c..8bfdbb3ab439df447053c873ad3f572fba63025e 100755 GIT binary patch delta 6248 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 delta 3705 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 N4T_Cd!ykKcw~UnK^T2 z&N*}D%$bjSQ+)YyPm0ImNyUGiogPmue)%t7o{1lOf$nq6i+w!nd+a>6Hfik6V<(i| zI6HUdtQj}Vy5{EG>#n)wmKhbf*G|iwHRqPx8*j-ixMY0p%`>J>JFR!`p8a&y@18U( z^PUTHMwrFHqt~{&DG^oCHPEPU{`pC*X5sQr85hRZN>(0rZUC zkcWIxR?VNG%Jq1roHlFfH5J!*JoA5#$|!rC{xya0n~(pWriyvCPlG1*_J-c{Z)~}` zsN_%JPa61113zitCk_0hfuA(+lLmg$z)u?ZNdrG=;3p0If24uZV2iIMy`ive2mUn_ zwyU2G{sf9Uf`uIoo&zV0^#lQz%ng*b2MgQ1*5P+{_xS2lnYm&Ogb9?k1q<7}R_6lA z_tmElZL#*FQ1Ig`Utv{|f6`vs#KbL?rUyz=(RQ#nGf*_yw;;-`zaw|xD6uk9t) zg2lpdpb&zgqV_=1T&ZZjsi?A&5dJ~fhT&XMtH!4a1oh;X2?SM?rUgo}g3v^|SJaio zDvPp$2M0&wb~X-evl^iuU`m3;X;!~8RYi+egPa_qa6=`P$$xBYQH_F`u;wrmLN8uv zGFg08Byp9mJ`GC0nN56r<<=~ZRyp)t(oh)gPgM0SR3MG52DP+|%tHaAM^VEmss__- zar9IYI-RTqmM_6mYO0FV)Uaq768tCZE?02G5Lh32Kg+OjQy}eV0a6IH$w6Eqfz(I)V$*zI+VTv*MCT0dKy6 zrv|(Q1}+PDiws;5@Q&5+3d$DndQFlN2D}qYk}?LolT4CQ2E3E6j%F;Pe_u=H#7k?L z4ivTq3fo|8fx-@st~qJJ1s%Qy#V&b;cGH3-`BJrl3j*G$Cch})Ei>@gfVTpJi27;n zfkEl3OQI2@($e;!C8-N9mV)i46r~2+O2qcFh#Z|2%nXjm5-kt^MRyN43Kq8p`@(GT zGa^+G{ecjr&E<$FSlZG2VAq2ps8mG{pg8s_!x&WOThQjoc&H9F4SL(RkqSj}>(H$k zOI8C!abK<2O2!iE55;t$JBNWAjMl}>7TZ|Ca^uR@!UI^ZFN6)$<)ddhf@vr=E;ziP zv(Z032U3pUKg41F0*dq6(kI{J`)ENzRAOgv%elRWS3lA2~s> z`wIDs8L!gGiL9!5Zg&qVp)1)7FkWVnHys|J%L#`pc~eg*slezuWh=%@#LSD^eOry;xso}qK&2hQs!HHg4lD;Iar|~7h3{Hc ztb6Y`#e8Hc5u5#<{C{+t;Xg(5pDJw8Oe=g_lfV!h89Q)=uq8RcqEuf~((!K*xt!V2 zYz0wclu><8eu_zrp{jH?BU?Eb>+xD`-stObEj@|SX`U-{_xeVhJ>Cu{b{AKHFeHr zZy;1-3F@I~DIQ80he(*3ma!oBy9;6w+Z~9B!#MEo0jzGU7cl!_iuc#uHh_JSUQ#xe zv;z~+?wU#Q%Oj2V&joCuhottSy_&zXKWaZ znJ#Ud^%s?uv7yqlx7c(1Ha(|ZtgGZmQ2*3;=z2JChShO(T1rVKR=N#^t>|yqNSa3+ zE+TFCo3_~_;q#XEtt$Pzq0nNZ7`vat3^F$KJ$`EiLiAP%(OZ!vL5#I%ft7}0v)+S2 zV-#U+-TXYqTV!pcXxEl+%5H=->_i{0?m=$cJDWqrJc@(UBD)=Nd z*0NYCH(yZmTy&}6tv%??lHkpQ$}?WZ1eHIh2d3ys*kbdEisn_J zL4QZ~7F2KTfSlnV;2|jm8!!`58hr|sJuZl$&;n&5h>*ae!@3uQ-m)rsg6(ip+JWgc zcahBD+3*C@Q4CSM%%1sQb#@|9Kl_I*gV+^W=!zp*qmG_*{Pe^7W9N;u3A6tA9FY!2 zS%-BZVkUoGhF|&yZeX#5RZm(zUT zsJ>Yr)i);#O{+3m4ANH9p94V??wb@T)j|U+Vvtap9!y;UW)Xm4C!~e;-V&53zQg*u zjD53-eKP>=R|hDR3`1{(Y|pT78d1yyC~GiGb>BeV@4H?xeRC&kMBk)G&*y3bHm#(r zGG&~{`VE2>#A>xnpf|^YB6?36<14oOO|j*3oXTfHv~-wW+Bnt5IYN_Z+OTejw1N6# z;uZQ4Z<$3^CBX?h&BF|}9zzx7N!C9xvFgy}UgSj0YfH$`p%QF!&90bh_xaYFuWK+^1 z>hQ4Ywz6d`H`tVOh-r6ElU}4V*$FVF7o~rk_oL!^Cb@Z*Q@5PJZkad9Q*o&DVuJpu zIFrFT9KYI4T~4+az`5z+8WW1s29H&2^H||9#Wpsw{#SbnR&ifcZ#*p}EK^llpo*=F zDJ`LZ5mP#W{Ld9ZXnhF;$yo9kD3zg2ZdQhd30ig*+OT&hlhbumV+?H#q&1UMf1zLz1^4_vN)K&w0p_8`Q4L7mPsBY*W!LJR0LpKZ|L0efG zPC2bxOgRU?a4^d0Za9b}svEi*zqIx$YFD^ac+sHAU9qE9BR8Wsx~r(zokv~CgN1?VT z`I(B7KYIRkI`59c52^!k^l^Y1zw!P*RG5W@rg&>uKKE~Uq-@reMY68+UCnXQj+0L) zGm68TkRR0u`X{P=Y-@)@7wc9W^C2=)XElQrSyUtywLg+J5htwe%!nMcs-geU$147m zum*u4&StRqMHI^2!Vc@NS1~YrnmRrNzSUQk%b*Z4aUWO(?X=hzP>dlRE$k`4Q5q)y z(dWfbiv+re8T*MIeu47Bi*HMIiS-%m6BY6F=~`7$jJCyJ#?+@6m*I}bh+$IaNg&m= zbz8KsSuQ!HKFYAG@}Icn~&FAYumy zgr@TI!q{P9Y=OqYq60XdCPA*wYRK;=5UcCYwX$Fbhq3tvE2plKAhVf)5p=A<(yTy9 zIz_BpNgV!>vB*UVUZ9|_EP2%nF7sXbzGOUE~`W zd>0s4@vX{$Z}6&M@C}(23|&BG1w$8*S;5c+^r&E^M+HMp=uyGYDfFmd$PB$G7&1c_ z3P#^R7YZ&2ET;-gvM8{;hRH7FZ^$o@fuc>#rXS#W8jK3W6WZ_?{2cHjGDBmNuyNLL z?wG9ETuR{f!P3&Ss=f-`Hav-AQ6&OnvNK*TP4mB9p|Lv5ACuRt)D1I)TJyq88{<{> zpZLC63_m(}5N-lv^0?<-F+teP8(P?Y`w+2sn$*&?Ds0O^j66WaUn|g@f#$)%$_{&4 z#><6Y`|B!_n_p6tyePpF=scAiTH1d5F{llP;sKgI%J=oZJ%>Uy!Y~Y;dZ|odba0me4D-bPkDgE4%9gOIIbBr6^~VvQ_igXg6Jjq_o0(Sa z^*znG0zJm*Bd8CY-kk^*kTl1qnKI4Rsa&i7ciaoo^*_bTh~E_bb$$MfhJ3Y*kUev_ z0l$fDOFL}4zqE3BT-$1YtN^(Y<@T2Vy9j4zP%fF5#UHImE+K($Y#*z$vtB}ou%QhM z^OniCrO^z>>x2Ap0DCI1CWJ*v?6X*gG*}D>fE!urtl&9R)jUX*D{ExGd~~_)Vz9!E zYMea|k@`MGZZW4ZXAc5=+7Y@pp0zXjIgwTVhZ+VT#bxc$`c9t zsG3UQ+4NAN`o)#=whsIT>Q`>fUcY^OsQ4G-fQp0Cd>h%Or(z&f!y8|bC^o27nHEu{ z3Xi8wfGQ6cjp+c|T7<(tbeU7od^SoeqqECf)Ze(b{!w-*%2E1_)(^t0pOfe4c(7?4 z+r^};KX&PpUcs zBRE(3=4La{?62yw{0uZfSd#7AN-|EUtOuhyJ1{&)P&vL&6)HCh)emsP@JyPElvV*u zcBo)6_`=n<{wnwWQ?|Z^6CO4YLX=I+0ARL_7|0311YoAe4u{$~EU?Wi{gq|zPsH!1 zl2-I#?IHuk9T^)+2KwL5SaPoz1t!&O3^<$v^2j$;dKGN74=u{Qy#je0;_c=TNqMhT zC1_e!RT!CRxJ!(kRCSwpF)%ogJ4dhqoIuItQeL{Oz_CA^ZG4-tO0r{Z9xS)Y~awU*8obA@-~hGh=hH-lZ-d&~k>^pVg%Q_J3*p(VMu z9|!etdhe?RFUr9YB3cfNL4?%aRI7C4n~Nof>FweDhK?9;8#~cD4q;65VXO^S!2JFy z{{fudGFQ(nO4?~&stw)Sj|YKhwIA^6w}(=qT0Nep%h9m<1%~G;8e?-bCeci8*ye)C z+}38zIi?htH*>*1FNxKbJzl2?aJ`59c^X}gRG(=sW@ggLqHbR~(q|ffq+-vGV1CXi z!?U-vC$pcVKQfJd#$Gq((A0ea)iJneZ9Yo zC?2c_F`i+eyjeSsbYZoL{JBQ{y@A35xQ%1KB1lr85X>a2(#k7}g;tC(_f|08~+?gl1mq#nT8I+*e;u)-si zmxXX+NZIZaD2^Ke9I1Q3o2ThUBYC#GXaN(-3T1_aEt+)hDSsA@TQRa3m(snoNW9x3 zCZC1wJh!-I;n8x6jYDysV7H0?K^TLZ8CdkUHoq=Loh206p$RM4w_Ntn)Z=sG{V#eV z7d_EBHs1Pm{E^rmb5AMB-tuj-@rJZelLP*g&Gs`naB~ou^G3=T#^nLPWDz5(Iu*im ze+f<5D-wZc2^c zb~Ao+#W3KlT0>b?Q5wVWV#%-``=ja)ho|l7y&O$jU#~)2u&6QFp{zwhH9#BlGZ)3F zQ0zH=e~|AEu>Qf3=xxN{NO(CSm4b{;MF_5M^iO29;Z58k)rdG6)E_&a2lEHV`TLml z0%z*Mo{Hn5S{p2_4Q6X9jJ3uf_Bsfm>FJZg`)Iq67a64{dNT1TRwU8ei?;ah4m63w zJLoJX_=C_`@{g9LRoHhkn~n|pmU463IqbVYF%=y_Q6JIkBgmWQsSqzI6NsLImCbaH z4$IdD(B1#CuDMiKbY04Q{E-#JVbnx_KQM3~`GQriTESCshu=)}dec?8k8%{}fQI{M zrTYMxx-YIxY>ejAFdof-wawA4=x6AElKEpwbnL zRu!mTcd-Aoc>9lC|Kw*S#&cJbMZ)oY^!S2EFXC28%=+N93nkzJ>q@{UMnx$N{82lp z{?)iEh{y}+^3F0(-9?_M53_f@sJ)e4^Kj-DC7waAdP9Y6Qy(P;GkAG!xd;D4l$-{? z*lI1@-q~pm42oMDk_Ml_$h~#ZmZwqPTJ&Hy&$hx21dhmA$DCu9Ne+Sn) zY8w9|v=G*svNb;A`Um>6t*-)wvHH6)x+bNsasQjXz#f80r4kYD;|Tl z?cA)Z4J$CVep0*$`dWVUNKp)prC|AJ{|ABq2sp0Hxr_2jDWI#xD$R_lFAJ1F;g%I( zZ+}P(|4$zc{?o$TJQH6_EPXAGFhp(PR^sqIUGTU-m5@H&1y74j&_A`jVwwn#+mv>E zoW7fm)3?Gr#{<~ddID}S9Xb(X3Vrb%j?L|Tar;R01=qaV!`*LhA{a1U43qH#Qk2e?+){mDa65{cONkV+K3mz{aC8R&n1%H$aKF0xV@q#PeJ%k^P_GfVlutvzy*J&3x1&szS0H1 z$OXUH1@CjgFLA;9UGR6g;O}<9SGnK=F8HM`_@E1ZnF~JTg8!up{#P#eYgA9BI3 zcELaFf`7yX|ELT8br<{&7yM2a{2MO#H(l_JF8H@x@Nc`|-*Lh3a>4(_1^=!K{yi7` zZWsLfF8B{z@E^M1_qgCca>4)A1^+h}{9YIQJ{SCc7yRE{@CRJ*AG_fH;e!9f1#h|F zn_Tdpx#0ilg8$qF-|B+@!Ug{?7yOql_%;{(S1$N}yWsD2!LM||Cnd%|ywaRoGZ3mx z#zUP#KYyY=v5Y&fbg7R=qMz=-d3H*;rkhMnk@L&A^VN+Yh%j;rIhK1jxY)=`esWv( z1k_TS3Y0!kJ=D}n{-Wx`{gspjxjd2OwU2zccrri^=CA7}^#+Cy!~~R{0G;oG6)Fp=jUjdr;BL z=-DZEgylLNE|ja6kBa)4yQE465a1mpUib6OO~Z@HFF^lNO@77;sinEQN^r9XYHCyW z&V2K5E$ccdobIW}kb?d62jTS1!MvfRt+S7zev0y-oTVcMRN?9bn=$3`Y_HS|<1Nap z(3C%vc+lzy)ndlWEAr4h?^4SeN0sFG{8MR`V3WLVw@65FIK!+7H}-LDwVD!~=4 zrZM_5R1p-HRZPX5TiRaHZ_$Fb|G=tn2~jSYhik|SzlhYFiB=ni4~FUC5>1=ADV?`X zy?-?V^`#d|eZ}qgU?})BA5>JgZKofP57NzLx3Lcg>zmZE@7)xkOfzp-`|c1mP}qLv zWvPB5d$<{M5!T)*T9%9@vL|6|0%{vtNDWFSgNda@1I(*grU`10FHx$us8sLSZ)`ns zoI@}6hRZcowfXI_&?c@8)2O#4 zE4@Rl2Qvp!4exgfuPK6MrP(}l*PAy|8%7jJM;ErkObWf*O7JBD(xp}xHI{h96a5C& z%jXnPe?g#>*M^fS((p{KIH$ydEX03g1LoUVkH^ z-zTY_rG;;f3-0uW4t;t?zQ@{sOn1+u%cCxeUG1wMjP85@`RvYMC+&GXita)kIe_Z` zPrQDX_nKL=r_It|K$7`k;KWNyLJJx1Y}UTel}X4=}eh&xHV#Jp{B_HaUl9os6od!)Y!lC`C? zGh;)Q=i_3JZ(kBV8+U>FU_eJ*XXkm`MV!MoDXq`IV)JndwGXI_4a5s(hp6RhL%>balGcawD9ZZi+C+~53U7Un08xA%HHBM%kSU8l;}%?BL=JYUygY|;~q%$CgRyZqB7MR18+rdOhC@0%lT1)f#`$7NF45iJQVmEeL#g30KR(G zw2Ipz`iDI|8f{Ngq&HS>%tmq38#a@|ZOw4Ma1nwo;93wr+uxS%saM@or!qIGpY`vs zdthm6t$XvrwitpgLdA_GA?PJkxZYc)JT&fqJ|^Gr>(<0=U@E=U%30IdiNdR`@t_YB zt_l{f3KZAKHPF(Uajdu}%nfNYvf6s%9a`^N>v}1?vOEp9OF91(uB5J4s?R>OS)b(K zvkx2dPQ=BvJ(uv}TI4Hm>MOF_P#`=Q)>^lt+U85?`s(q1r0UGFUF=9mfvco^FA85N z8!WNWQqZC!(^N;|CMjBOH63|#Y{f^TV%4dcv(c#wfsGwv=-=t+-?Le#^e>_|Pd3Y< ze=$>gDgf`%a5>;c4POIzy@n?OUaR2=fX8~~%`3if_UsA#6O8lbjksp&gc&!Pyf8F= zS_N!I`Jdif!uNR>wQ%UsWH#rb&W&dw^#iP?{x4!Ra-p=LklUV6ICo$1v*ulGH8s|i zXNRqZX0*&2iwyQYQr~=$rr>cyU2LDtfr8@r8UC$! z#@gZz5~Qu7(8CUopP$NKC5!>8#Oz6P~=itfoU)k}}cbQKYF42A$%q zU=zezA!2clF;r|}cr{{p?ZN0-Q&L70#mX^a4S@A1(v7P{tVw9c`fM=8$|q~pdR?sltTwWQr_Xm=tI zRJ>gNkf?V8^kV&T5Y;G!RedvU{+a5Ui%sI`>VZUZMH+4XU@&x<_aSkk&6x zu^NH&Hx)C%SwIY*>`L?$HkY=;q1T%gN7*k%&3%~_*-AahlB=h;TzrGz0`x**Ewo>+ zO=%5atE6lbdZBC;yCT{6KD_pw%h$g9p(~c6rKUH+hWXUSa913HOxt)fTK7GqwSF&3 z+4&!gT5U$XQfqybp}jQR?1A5k*1b@dm3=0)-k+MQ<}*;;4^L?QprD@+#&iXKth${> z@j|u;$&3vljz8aPNmT;qlHH}oTwsFL^5i5F5=eg&aLHkqVrUUp9Kpt?u&B%hVoG{E zT#Z7_MXFPLwfvrNZ$u*JbYcB_y0reoS^?72 zuM21?R__pblW1Kl6)Zls3UGM#tFi7tviVL3SXzsyWe=o+5xmFQ4-Q5N1#{D3%(6pe z_QPKtk}!s5NTdp5W&jDbC+qfequS4kYCkQu{cm13lVsjJOnjH4lDJ87QT<+60_Mp+ zY+dF_hR69V4(T~h{tNIP4O@U4HT*Zg^&0*QVDy5Ne*^Fu4Zi}oM#FW0muYx2;7Sd@ z2$)91wrT-i>=|9)8GEK@>=|ZaRg-PutXZ6DIp_Wlv#*(dheqaKU(0lf*Qz!i#iqDO z`0}aCzE8ZiTV`J8ccgkQxg1I5eH_xQfwatYhU|5=O=23KPp4wzxvb5eL&uy7fICJdBiX0ki`5H2!T zvrJIRR0WHxl!vPdYVUV2%E*XoI+RT!QjGV3tp~$8idU5&CQtW5*?c*XuGD0$!`(0>Br?nxI>}=WCfD z7WVYUL(#agFj=2*-h@Dw`Z4Q(52FoANB*^{$htki;gv7U9D6W}SeVb(dCR!I;(F;< z_lx25Y`PtOyJ?m<{>ZXl#W_R!(($)}n2QB29M+YT$u$mCaIvZ2Y*ugvD~Q^0QuFn< znVhdAFND6-41@5zEn&ptHR1lHNOeeH0cg&{~s`saiub+HZwALw&7-$oQKK?eL{i z7R<@VU~~B=AsF}k4D2-zYaSB9H>p*u$GC6ZxN_m~ba*X9GO5i+VmnRNn;2AK(e`C< z_Tf0=s>XsVM^his(#7o62VKmnW<3gHRg+vs2_tJ)<=5{6QrY#6g)r4xB-Pq<0*rYc zDa9vuhxoft0BR9Gc~ND=u7?9QcAW><*!5|EjekA~@H$PK12|?C^L-tw-eXbgn`III zx~OFh*p&5+7j11k87VUczK55s|EmlN=k?9sfa3zD##(T4*vqQ*&2(hYO|rXNty>_j zul<@iLt}mK8gKbEL|^i2?RYm}+OhjPPakyfMXIKLQq$Q8FS-h@v(d3A>kwSm_C`cE z9!8Jd&qO_nn_oXixz2Ks3xB|&)w6L^}ZoE8@$9FS|qm6=fg?Uh>WbHk)F?v+_@iS_tN4EicyKS6m0{4)VF^a+Lt zVJoi2DtSe+5PmJO4h77-XM}J%iv)KBrd5Wp$zjz>W|`E+r;71WTM7oR#CPxu>Q~Q& z-64|R;5cPOH;-2)UMTje9@zb}&5OHxMeL;G8TL%i1a>m1OFLPPdYVp2cCZudm9<(A zLp!prN<$I*x@sJ#S?uRfr_J1Z5i`Y9!1u-NV)R7?$|%l(5PGG@1I>7|4R>LNsqi*b zs7Rk)A?tzpP_wo7gmCCy&CohfJsD5vGBxNY1e;i91+kGx^@c)1GZsl^9}wC}D8-I^ zY%YLM>9TQFi{wv0GU(?s;P>K*3c9f`S)P3-(~6QlQQ~qW&B%J_@_UFk<1pRC!)$iMziOrD|J!Cqp*MRc1=c%x0EV7&SgItk4Be-)F zZZ86WCbLH9uvSQwI%LYNkcj0=nO%(6wD%6bQfXY*-6ry-NSD{k-1NAe7vJgy*J5i|nPX&s9 zXJ$V>{vZLA4xVr>TvGOTTCjW#Ja&J7c6YJhd=)^&?e9+n5?j6fV1^g59KxlT_~f6_ z@d-m~iBE>Xt~Q>A)DMYI4oJ5<$0r}N+c9QqtdDZz;*%Z7pt~cw(t25?k{kSU!3#LC zdv2Ukw_1;fwCkT2o-0RUBzW~k!0o6;Z(N0@qN0H8WT2Uppg3OHOg(Os_(`*Q@OSLy zsm%uju;Fd4-rXFwiOh_hYq)5`1jMezeqB(w;GArIaSXYjV-Jd>4^-0)gA2HOLgMaM zp;=^s3!%A^T-YYmyHm|f^vvTN8+|hTgD@`QeQ9|gval42kZJKM$7yjW>WZHZ!z=HL z4J|)DrX*@!DiTenM8}9kGTDS=vI&JJn`%O`-S}th`zeWpCWxe6ug|C0^;(V_6|L6m z(4esYkVsf*eR?$2I2P3htK}(sV*=^Du`*P~rL=WHcNV4T*jpTlLe0fWrWRuMf1=1x1jaaVWlO36DVfU|g2`N-EBX0kU$)Ex zvPBMEb`ORqR0$?GISfD?EXM=p4~E)0pI`2 z$lUuYz>PZpF2H8)oevmoN%=W|&D>iKxJKuf0bZuz>j774cq-u0*dZzSQC5>?zs|cg z>b&g7@zpm)#$X}n!f%)&dZT|Y+yCVL&;mH5NU(ecL z{7MCMZ4E-wKFY7`>}GR|;qZK>;UeO%dn+!)_YM~>T>N#*^M(tdc?L;Za_r&Ad;jgG zz2|qUUH$b3U?G9O4x+9u{q=)}HsY^``Xl~&hMX0+`0FFX5>2OGKV0vm*KXt@?hH`* z>!S<{#$OMSM#VpO;je4IgBzk*{L0g{zrGiRjK6;2A$NaW+oiuAjhYhs>r0_C=>p@g zZ_6fQ#$T67%I>dcO8yV<*DrKX0bTg(2Z&Vudd8qAfBmm-oc#54ls3LI_m2^Oodr0` zUw1>Yc}ASSZtB8cXQNImj*`k6E%}~RjI;jFeM`vW$<`dGlmS04u0`06ac##bK< z*!b#9!2efYt@is?Mf>Mf5JTeWNswdXNl5*Wc>2=>{<%5qpF=pCfY#B51lY^0`N*I> zG!!n8Oo>WwUqvr8WX}2Vj-(u4ly9{rE!O7$3q;d)Z`R{mj33sff~TKLWka#o7Vi&+ zva(*LveQ_Z?X-K-HyGB8xtvad8$XdPLm?_|HHX05m-d6KX%B+ZcnQMJ{oX}dhz;S; zbs#z#L3X8eLl%cKr;VVT%myUbhMJOt)pX;s9yoZN7_&q^?_w9wKDl_ngwnx@IH8g- zoL4$+dXO+Y#qe{YV;H`^J%L+q0OR71K1KDa#i!;xEOywV-9L++5wx4=RO>R`xa^)J}#wdtVa%} z)}}y!s2w!yhCV6zGVRM^Eg*|Cs1BE8mXwsW&`BchCL!Z)`PB=L&;K2E)%B+;S1sdh zR2y8i1i8^`$t@_2YQP+P=BqWtf z9(X^T?6oLqbIEI=EX2=;u?dNvxp$Sv;t-$l^Xq{3Xm|@?FXQ5Q ztF;Z|TpU1Tf8)AeMB?T9P>t*U#)zlH0hs-b6eR67d1{;80fb#@zTqMgFMl*oxS-Rt z`U)2^aJt^#*z}~~LTDBsX`f+!_oZ>HJ8@FuvcK^p6p-wTu0Y>rlw}*1K1_`_@dvc9>cmeCrXYDRI1fl9Aypz|1@;f;*bvj zj&jIH*Mj{sb$>(2-Lx+WkoApLRbI_Rp(t(_BRS^LdI3@wK-K7cTxeC(MP=d<1*2`{#qeg$hGY zUGD0idm65s_n%+-EP;Q11MG`)jQHo9pdGLFwGXBJ5B_-!L{NGa|J;ib*F%EgcIlt*KuwAL^WD&ysL}Z6$8okB z@y|7qDuC6+`sdY>{{#HBZf0z~Y|^07v=f zvyim;=Wn|3&qb(H4tt#f=2M~?{M*Bk2Hyc3)nGl6%0EwE1CM(GsJimc?|&NQpDS2e z`_Drki}>eWfQ^4n23)Vpw4=Q7&tCwB^@?x*2Vmo$4*)j)c|Ty|pZ5a(as2bvAKyQJ zo4`N+C+wd$r^fl`r;$N>Q1SDFDwV)Lm+_#MF4}ji%|++J#le+`yPbfVTwQeML&lW| zO&yYUSMsT4cO_vL{T-T=kr;8&56p;!&~K!W3l|rCN0*V`9Hu#7l5NKL+F!;+$bS*M^2QBUifz>7yZr05f}Z;s))yY7;u!wya!2} zi|**cML&i*;i5AgL+Glg28Ts8I54)sW06!YI`c_5-Nm5l%0-{e=ECQL*({Es#Ta@c z;5{0C4sfG}9|vrF^eVu{M^^(jK6)u&;8Rqy()j*j`m{w_2JTJB7a?t%EVt!KhU+mo{2)nU$6AJ`|Fuq`s))>Q{s?%u#v%p z)Z_7|Qz9WX_TC-+b+P3C0Drx5ZvuaPJCPg3UynUJ%3r_vk(0k3jnWLExaINPucap? zr2YbMl)v7Oq|IM$})o z*k5mFaqX9HTo>`zR|7WwdLm%sug3y5{<;vb@z+BD8-JY#*!b(S0ULik81RqpukZTt z{k7*ze$>GE{#_Dq450D;GY*ks{PkF5u&-2neZER1^4IdkQTXfQuebT@x~UO=-PXm$Nk2+aq$ z#BKN2so+Az*FRtA>aPznTsiye+C2&U_3L0?oMpscmt7Z$uUCCdy-pCl@)>Ztf;S2x zMEUD9N@UvtIg?yCZh;gT7R(mN4bo^LfBo@?+Fx(_EBTvC{%kGQp^)*{2Nt;d>*Zbg z>)TLMVt>5^I*W;~AN@BOGx2q`qzb@h>=wvxCI1Kb>jNJo@YfAQDu2DIZwHIl-9M_qJ*+$eLvb?&t-9_n(_4!8zTNX18}3x?+&{}|oQh_e9)*)#hv?y$`s+&#SI+)AjS_XWA99qTjri-@Dvi$FcD<_jx&|7IiLYOfMicq#vrw7D*Xi$*KWBfPi9*I-4@MEU>l*92^w-<| z;^wb+L1!`k`pZ@_X8iTXl8W=!xV-V1*!b*qfQ`?70m75F%5V?1n> z1RD))K4_IspEyY*D53;QTPQ(4k$}&Dd^ZIW^ibbYfds3pv%(Sx4ez7dCCE)A!63uM zi`|_hIMA3tg0I1@NPj12l>{p<6$uI`!S-fKkRuZC83<+L2?=@zs|i7Z<<@Mlj4bql z&5jknR#3y3C=RKn?S21czdEqK;LV17YVWe219%XLYa7i z-Cn_JLXcpI^?TeDR}u)#EF|rHu0ARS;Z#AhIsh9}rf4^|Tzr-x{Z-v}XO&md_R;=MN#2=OUe6(Mc~BlZijzaec` zLOg3|@x?DK#6_jj4SC?vT8JanfIk&rFvMpd_~pI3;LC6_H<--5Xi3cAv@kth+;C*)qt2{82QBUif-RTLi97VPlc}=Zy7H_3?y@3eL^AHLgcb>_8WJ5UG5ccG#zDNl73ZXoO zP#{hC+UuItOhed952g&E-6OQ}6k35aZOG8>dR>c|u5I|8e^A4_g;t(IE0CrwF|;*? zwzoE&`-FCv(8^P21=6&K8rsQ*wvXc%QG5!uw1G3-41E zEWA$w9L4)+BvlY=y^5gpNwjVYVtEfA_m-~$4ngeJR8Kl&ZDnzcGRCmA+afXSvw$0Q z{$qgGYxn`cYc+fy;8hx433$1NR{(~mkve|~c&>(nfazOP(N-1UDH>h^m?NF}m4HW` zaR&Yy=oxjcXH=eN)H$9}XM0ASUO(pyJU(&Xycy}$Dl6ZG4+THkb3Qvmf z_f@a@9un_5?pK z@GBbPeK)>4X|5rxF|>HKL(hc6FBbpH9B&eVSf80k2 zrUH!HK*t9`XNcppOvY}>A*$wkZ@2t67JCL1nxIL?8+6G@P3XqSiQ zz|F8ZOyn~u!54ce!DNwu&wzY}gkCNvZ^A=@N^8}8BZ1IdiKJbEyI)Np!2?j5=&>ib zV7G3Rb~)&R)$$Y%Es*xm=b%2>{phn@W|aV3&@yY0(0PSUoI(O(hH`9}vb%j!cnGCbX!Gje8Zd{ON)GWs9ZjQbETtjIo76|f_;PIQ2a;-EL9JIiGqmF(k&0gnwHb0H=wLo_kU4ms*bO>-nbjX~c)qBy zjzH43G2V+4ox{8715hU>x@0xcNt2OXmW-$dU%4aF;0u7G8eEH{nxK~Lz>L!aRJI9f zJ@ktSYV%ezLFs*#m85{-aDK?!8JVL_1Kg6?dEdLJk&;1ZAZvF|t9Pk~w zsgDBX2^6=4KNGW?84ZPeuM0nQ=`sbahj}CQw94eq_hV+a(KOrOWxs(yq)joj%Sl_@qF#{?H@cp*p?v5A z9;(GU>uY+b189E-+TRUcR*%zjREt#$vBlFBvML+@H?pdD{tsoX3k_kqBmV;v@jueg zHfA{S-}bV-(Xv%q_Ja)VO48c&R!iDAz3~f@E!GVhqbee5vF;)e!CIq!tS$*ahdl8y95sBEl?wiea(fNJI7AwQB zu&R%f+;t?3lRMnW?|@h7pJsZnF3R~g#o-cF5XI5ZmW z~mAC*NG3)_178N)?QA0WRX^O zF~vVs|EsfeX*K|TJS!t?5O^TmoXb<02nfTUa0pH7C4^L31Cxg|150sSkM{Q+kd{_+XQdF1YuaD@@wD-pw`hVYu zBfd5GOt#`9m2!(-CU+_K-r-vAn?VLe#7z+^P-7^>og|U_;4f@lpbjTntoyD&V_ebb z&rCYWPz3hDnvBy3=lr(7$>jV~9D3OpRg0t+>m0*qJxbXbwQ3R1%J)NCtaPw~?}v&` z_wlRu^8L{DnAqx|OV07D0Uz*|l_`Ei>cW=j?}y%x>Y6S`OBox)&;r$aFm!#J`Ao^U z`)CY@pr47(e*UWc`JVFr*5eqe_``BI27$H^1N881CgiC&wEU!Ch@f@+F1m)@AZzZ~ zAivO;Cm3Q54t*3IR%V0()eKES68m_AAttQr{*vNpdIYf;nmfldm!rsf`Zg2tR2+-% z+jEd?*_Z0ua(GEF#B6KrJ8XKFZkoT+bTy$sb*`!de-MHY%He57o@&|x>rE%ArZ-_+ zilkYJte0;yA!%B)wPk;*Z|mXXa1McN>r`pFQ8&$BY1&UH;LlcdbPI+E1*El*IbDm@SiRA;I>pa()u zde{qLLTV3Ov-bvb{2U^Ny-mzP8@QNN8vX}L4|)yO z`fW)5Ob67*Zm{0qfp=jG47&etkH`O7#gXNirbJ;&w*koXTCd^rxxV^z#t-L9tM$^V zJf&5E^uG0`=Vb}qV%@tbCEWb)(2Sm$IvUA$ozx&tsX-uJ!#q<%NmLEhs6jcNAkKMw z?N?>^7s6oT=h5=3=x@u;(|+eGeVEl^bsHv=V;Y4%S6J9Y7OMFSRM+B(QPn%>CuH_F z_T6MAQ6YN-NxN^@u^vt=el|CA(BIIi%!SkCJS#rFUQSy74(VO6z3&3MK;db1rK##z zR22%Xq#(;-3t$^N*Rtw)_)V&Iy~rg`+20UI|0$AV&>*A};&)JbP#sO;`e2AWlxRdx z3;@)MHHDPB2}yeh@RvVET;ex4DhW?X`PwBGuZJtF)A9alzz4>aRVkN<03V!F zEO(*0rcrvQuf_TuYV@^V-9;Z?%|2c-RI9dcnCjRe(s!v;P3ard#X8XipMmP9@q}0z zK|djAK^BJJ;o7$nR>)pP(%#3`9}@KOf6%J*ag}Tl#`p2lr1jUCKK`sAK_9O(Rh@^b zLZLDWlB4=KQ}erdC*@iza>-NrSRmcUL(w3l6XMTNI^4(P0evipU#nWt$CCUSNqZlE z@q6^~1U2do#rB%+;}a_3)e`jb+Ae!}H7abnMxwoy)|WUe3i#Jhl8`*b5eTFm*sUn; zWnbrQl;Qc_Q596 z=E2;zkmlCGsrlktt{XU64g_Nf{>nsVi{Rcw zx%dvzALwbZ_G2>y10xxCqHK$&UxN_L;|xg@F$!CcNa74h24$W~V%J;z+Q}+uzI1e? zN}^$`X90&d>Q-8v({Kv*5P0P&*m~H`ZhX8Fj;9Yd2eI>j&V;0R=s!M_0XF0mEWd@P zU#d`9<*;XeDkl5j(nr zc3Q9C%e0H?XTqMbt$003srMregLD=M4{*Z?@cjMxp4}Rr1$c*sZvA@z9=N!QOHGCrAObs6e zm|+&nWCGr+;ckFA`#?@l3SfFE!XCh!fBFIZ&%S&Q{S@J^0Mpp|d zWBf=D{x|)a*|SH@xpC^C2zX`$Ji}8k?fPrxOs@!+^RTd|&~qWkFC6I^f2L>r8S#Ji z?)&Va20Pz*H{Ubjy?oDR{5NJdWYqt#pZb6N{&t4!nmT`fJCnPn*h=iMrsC`d4x5JU z+nbEX>9t6W_&F zxUXd%!}@B(f4b0zKGvcB{L{Pdjs*%y3O zTmKQpZcm9PNG%gj5dKq}$`e>mb~9hw{sU=gWN$-!hfP;-AAVJ*z zc=YCYSAQk5{$S~5=kwV^*v)V*HP+3q#%zu+vnC@0Zc4xJbFoUv&N%k^I<50mMhZ5$ zrz4H|H0CN2PHyM&KSs>eO=F)Y5>5vONBVQTHSeyi#&31t8meeT*x12!%`D4gy&Kd zke6piIbkk@=A)}o+IE@zASW)&3F?uCi$RVT17BYY3F4J_1eLfCybAl@GWxeQdJhTX zMOQ0_R_ifCiydKvX8enx@~Jr;CkRDcBk?89}MAW$42-4 z&Ms;AyuR&pEo^Vla#*%nD^3%O8H}#5UPTD!cm)!t8QCZRi>b6`US%vsXwE>=ZZTJo zi#WA$*Rs{R)v&NM)k$Z^flx74G+J*bW%%#FSdH&Jz2<7Qa!rNjvO-%2zV)~RCwGvO zPawJUyvLD~8WP5tj6PRswVpDxux^J&Cp$D6?t~eJmTM6uYx=3u3Fz5QD}M_+Aq!xz znosOW;E4f)BLYGQEi3S2S(8ma2-y=zYRvgkLplnnTa>b+C-*7MUsc=mm;}D9*2v$b zc&^u1G;FH-HASArMK^!D*(^XnC>Zp)3kkM6KBdJuRt`CZL0eMwT*MM09wq(cz7&l@1?%nL6a8ixV)_nz>YI_CHXQZQ$Jp<~eB3JVgd= za`VMViGJ{-Rr-%dWG!Is;oNtb3=p}f5L7VaUuG=?91itsteHs4AHt0O>SvZjAof24 z?L!k-i=^oYB=!sX*T=ShcvSnnqT27A6w`hyl4_}u{~4AVC8#8Bsj;X&3nK#yjBacl zam{j^P~Ry$eo2w=9a0}pC4Sx)HjfOt}T%+OLfR}0bUBHzZ z-UXOWhi$zLm`2qP@D9S`8P*T?jQ`QUxBu++sCcaa-b3y)aHDAB3N#)Uul=w084i_@ z&G|mVVLD`6X}$PTOvqMcJ%J1zvZ>R%8kHeY+f3-gx?5#L?lat`G9vdGrl|~hkz_1M zCa4T~ktClPBUQ#h+0uJ3}f8x;sm z1q_AYQad4p1}m*n+($v zQ=unHaIS2z2I3e<{~0izM%Z>XR9xC(r5S<((VLlSDvyr zD3JEI$DqD|zaAx6{#GgPWqH3mMR@{g<$eBJmfyq@vN;m1ws(MQ+MQ;4wCw^e0EcDx zPj%2-IX-&ZV!Z_&3Bw;?6F_PFmVTnP8nj?NQcJasWnY}H z2}W~5)(c5HcV~gSE;UzV7%2fGy4I=EdV#bqPf?ygT6z0dg_WlmIYUVDN#d8M=uaT6 zzvqO+S%3Ee*HojIS1s21^QpffUFZ*=ac{9!Kv|-{2QrNQPCH)ovJyO4*Sag3H@aT{e+-DaV9F>)Kw5u~ zph|6g`u^w!GCYtZ>M8n@wASAYA#v84jm7RdF8mH#Eba>STZTa(#nOAQ0AX}Dg4wOCgUqgu}G z!mRMOTUx9khMSS$D<|*einzaf3AG#?^b>+w5N6;$v)8Ca$SRPu ztL4G_6R73)=nUzf7jfG|*Sd2(m60v2%TtsgkT$D}P^B>|VdMcJ$s&ngo?=!4X|u`} z5@)mOsDb|Q5jJfgKf^H-{#IQV`orHUYq7qCvV`pvu&vDMzGFl$Rp7yT{g0F&QzYOs zP@Rq^^mj+dRX*QHy#)i5#-L7c8NB(0}O>+%%+38eMc z3soBZ2_u&aNh(SF@)Z3Er1iJ^zOen-riD$wHElser8M!;xtLOUMKr^&{**%8WJVN~ z_&hWwN_;td!(`miqMRjQ#JcMbRH8@3;4@Io(+a37D=0@AP@)7mr(JB6C}f{wW6-X| zBfw&pN*rJqISY*FT8pH0IYv>3DWXJ4Yb9>`bwr86$e}{g1}1~*4yPzl(pri43W>83 z-VR*Td^j?t#F{)PkyjF&&9F>;vZuwG35|&o@4)2}McVskqQpunarp14#8&boH%J3= zPY_Bx6fdD67fO`CunA_MEK$gwMAELrUDXMc_z7ASMp_Xc=vq^xbxT^8rzlY%t;9vB z(paJ}(zuQcA0UZ(iV`KQm3Xm`I4ki?;M5;4b~uXOt2Y$vN74UT3Ek&~qDwHxeu@;{t zH?ib|V;^s~b#)WVgEJ5r4QMs?CRPTjYZ@DlAqJvGU;Fe7|L@t?akrJrr<1$hM%2T& z8El(!E$-5z^Ol+1J-U!@k}n z`sFhaYQz(LeK=lX1ccX7VJw|iAMAXpp)F)@7D352A--ARAcX1bbi>G@U_{s2Us~ra zCvNn}FE)DQR}bySQKj_msrQC^w=5Sik9?h}0wRRu{dlj{@iZmbj=IW|GF}ML48DH< zsMo%J9~*lu)-OX&7Zr+7yZXE3E!K2g&-b<8l;EOZt}+LQi-I21({vu@{`hVvzln|a zg~G+m@pt4L#_HDP4r()f|Cek{i_d2{_=vkm8{hY4xp}{#eMIl-wpeE$E`2|feP50} zNVrXEKg4GsREH;eIXhTQ2z{T)zCRfItg7#Y?41jp`u@9LIS66;KGQIAgrg8!NE;`F zde7iJuq&F|i@?A>s;itDHJba4p*6--HzI--oyk+KS_q{5QQI#$8P$O_7~=d=Ql4~uu$tyLPSxlww9=|JU3kZj`7FMJ>_zXkEGPY|joI~-mv zh>O9>bP+G>6X$!E$$oFH-tXm0JKU2}C(gG48KsO%q1Py7WGgO=GJ2?_QO38pZH~f5 z8Oc|!zTe= zui;$4t2KNm;FTIa1aOsxGXc-naBsjfHQWO*4T0@;13XE?Nq}iS%>OQRxZHOk{2#zH zI>O%oW=KW&E5Mv`3I7W)T`=L#0k>nUVdu&7DPRt`et-`ErgwoVJnsYMcx3rqfXClB zZ<=S~HM7Q7%$PN8^i42DKSVI9T{em3EWpIY^^E)O{DI~T99mad7} zFR!ugKn4t4t~e~SZc-_3mg5BKN|k~E4}-$3i?M=0(bNX{eh{mUbx-TO<-ef+JiD*< zO)cS2`kf4!VkK-k2(_wnLUj%pkaIp%jQjMdXa`%=Ypg$9Ama{0NoZyx$?RT2>p`iY zI^UB;jHLAVDrbTHke7Ox@E^ck?5*%8Yj2?W45=zwS}DRS=d*kH7vbdfXO+&tdg3 z3%_+GDhdsns<_E#kB5elFiz3o)#fFJwi{_}y7o9U8h#z_5JQW=!J*xHzrEdZiA_G} ztz}nW&>p}%r1brIPtmt5AvzzVzFVMKb;6E! zOaVi=c>RzN^j&E^iCgSS-$HW}l6HMp`|P5J)wZ^mR-5`8daYbVFyink>0)1I#o1s0J8J^{}@T_l~j$@S5kYB zf+lejfu-Qs)vsP=gix(Gr>TB@lZ4bPCBM4V4W`uj0lAw|2IDW`TAP*gQic5LfP9E9 ztXCqI(^IfAb543*-Wn|Db5E>6yX4rSXhS+&=Zs&Kij55ncOs4(uLh6ooiaz-u(T4seZzp8>o~ z!%qUP)bLusG&{zvj{;^7_5-{MFgulT>k7dAbopg~hgVe0ij7<4wzdSW2um;aAbKr~ z4NhIZi=^VwnUQ$Z*D{5dHx{him<<-Q5)(zcftF^3~xW(1hEB9lx6|M>vuL=~`&_sh6Yy1}6JnT9m4KrPBoe!9K z?@Hm7!NQg5TMjGDU8pPXlp)q?4PL}RF|8M>Ned*~uSpI@!LY%vwLZogrTKCOmGxMO z?!nU3@|F#wwL5$>rF{Xdy{r;KINnCu4SZDH0o1LmcWqx-@29}VS+B2tI@Wg&vs(Fh zS7@{c0f=WEi)(vHKX`cf8??!Q8+HCSD6?L}{{*~N!!3a0{-Us}?eNmJvY-D%>}OHS zkG7sUPYlU<5(5v2w z)rSNa*$9Bue0@}kcvy}}>k`zZFMP&+wiEZXGf_a+E#Kmp9HYYF(EltG3_IiZ62>=bj<_B)w0WRaHZl|{Mg+lm#+tE`HqypENf7_Ttd)HW&4;Hu*+@4BE_D2F zSa_Z>r7bSpG1o44IFS7tc$L1o1GF66|Gk$CGk_N3$~DH-T?AnWtpaJBdIAR5X*4bg zxM5uKt3$#GXjcNqQxI4Y&_UNKd>fJ5!eV6)&2h4_BS5Njc>xY{a9EPDWCb>O<2ylx z)Hz0k4US>)&f6WtHzD=j&i^X$=aJSHj;|oC+&GuBor9m#TFEh5X}yQql0aCV0YBqh z2!}wl0)RY6lI^@;eu=BQX?Je=1;F2V>c* z0kdlu%U%kYy~S8|EZ~?e*NZ3eGO~_c5x9>1o`Gxh`+o%zv2NOki<{wyHBj8qP}qhH zgjSaN`G359515tH_Wx-b4E>p*xKRj|T%nYT{-`u5n#@e4B!nI~WRK5JCvWo;$-G34@{E=d;${?>Tecce+>i`~04H<~?h_?_PVaz4qE` zuf6ua4f?ZggxD3e>=V4h)7I#>>XEF?%(Qb?Bdo{vHJjdu$p+qRPT$Kpy2iz@1umAk z0o^8dTUF=U(`lN`G3d>pq*Cj9*Y}Fb&No(R(6Lc)z=R)ESP2_^6^$+ZCemG=fv7opE}&W;86t z%ZVwLB7H`o^@y?6)?Ke|ahtIl;0^YDC&1MfP6K@9m09Osdg-Kd<`n?kj%BF!VE@-W z|8}@xj?_-kif+hy2gVaM$4PZ9*Xmk|L{Mu>^k?yCd{e9MDNJRfsq#JRs?j{z8Ff{J z;M}a10}Pxg%GZo@)2~*eUL}1gj!{TEH=1&8gbAq6*xRzu{}N1QA7{JGMl*@27c+G$ z0ku{da8@W^GxfeM^?jN8Q^ISIbQ&}8?Lm9@Vr1|o+KQ6@LnmZ#y=IWSw~4Qr z!P~!B@>jAi%|ZsdhhN9w1sOnal1p$gGg#nda4R#oA-Dv5%?vJb8Jx-tYzg3h2rfYe zGwAMR(2p6E1ebuXnL!7a!LQP#X$jI=E5YM)kikD~Yiu;Ndmw{Ia0&RD87yhCEV`2! z*b;y_!6lf$3{Lkln9U66)<7jE*MWFDkim&AgTVen*O0$sL&ijWeu~ z!83Uup0^S0>z{2Y-t$nyKm9?Qz05p!BYO4B(&*&U$m9}sV$sYJe1Ja+3);0KDKkd_ z=DRl~a#1v^NX5Iz4TL9wFql1!=94*XL+Q`1QC78ku{BQhKzupMG;=vJtAPq+16VAL zA#X5xJQPqwoSTEQyKj3pT*I@YzP$)&yL(+~g;|8P z8QJQ+D-MY3!`Xmq?fY{9*I0Nu;N=#c4A}LRCjfSR{(q@o z$81Nx9`EVbiP!^a^{eY2RfbQ%#LloNSO-0uw2w58uPIc$ezfvCRrLr{h@uJZ=2wGn z%xa-T8Zb>Vtdyzyn;>5^^)(o=$gm($iJ%z-tHFF`5LY6c{}~q343f#`Yi4ks%OFvS zq_oyFc4Y=}CGuBha8qyz_?j8)>@rAHB5hkMLDdBwF zMDl?x8w1shYN1;*FYt*7t<6aLLD-gaji~R1=!hCPXTs1 zG`}H_{UU3vcJ7A@)87EpK z*z0?O)go1?#!lKSzbDM=kW?ig~LWIMQW%oFpZ z@zv{CXpBI(Ulrp9&-`3=9wZE@wSS&eCb47^zr2L<3ri03?3XjX6P65S@ou}0Ea}Z+ z$(a%nIpYB=Nsa21K5Jw6evT!Avu$5wru&i$FrS9V+z^R)VoKx=7sVQRoJZXJq-(x%jpB9ml!hsUcD zAR>=8wu)BVB3TOIhoMAX`>rzkA*grECAjfVq~Zv0TRRts8qWDE6i{30jhut z&PoK)n&T%z9@x?iK3&r60_^;qNy5-Gbuzh!yvHCD9!z=4bb&y&Ro!>Cv??jq$%yT5 z2Ze~CHrj)jH48WON-yT!2QAgd;+*_m%s7mKO4+$o!QU7MAgz{-5yNP8Og5V19c~qI zeeJR7EY)3eu5sg@y+DsH7#fpIjrF56nl1mb1WgPi=zg1MS0q~hu#YsIkHGlPrP3jg zw9}A^Zh&Ys3sPkR1kHkQ{3zPx7}nIFzo^9!XE9*R^UYJsM9SInriPA4uI_&7U#t8- zy%5Sj=_UzJhh;e0E~fJLsr(nuRJQH?bh64vor%hSyUwzRQ`lP5v*7eb-_(QhS~;Kc znn4+o=_zcL0}SDW$|rd2>NaoozRNbAA)3|^+yD1{ry_zc~U~2FT+*n^)wY` z8G@?y=N|zrz9$fUTE7YWgVulT4AuH&^w$HLEM*Vs7w0$y(6 zy#Oz^a67;i7Ty(bsfBj|Ony=Sw*gEx6K+PndKR4R3zGb^J34^X{vj*gKZG0ROXn~T z8L!wMIqyK{u;wJ`9Do=h60y1`%jmX!hjL!)ksE0q?68; zX}vV_3H%uT%A6cT=RsuZ1uien7x??dZb5W9DLBI6E+no`f;OJ&XO1TYKYV4&I5jZe z#l%hG59fy)&2tWM|G-Qy2+Gt+!8H!|E6AcsLDw%u3d&6GW#n;TbaG*&d_Ed0DjuUL zLJ*QgrY&5VDhp+1HI{$-i~IdFe{uDsv0XIVl=|6B=@4e5S8SJ4D`*cPkX;z}5K@v_ zy$042fHc$d2Gpvr2fY^YKodk{k?9YbJbhecdLUSTE{9kNmVZtweZU~3;}-CU*FbVY zeOlxHFA4d)f&MljpOpxz-k*0AH2J=W>C^jkhC}babBgGF%)G+h$NG~{Au+%J>i!16 z8!Y@KV5j>(0=&$=e+zJxh2H?Y$iiy?>k*uP+MKuRd!CEy>je#4L5`^G5Yk^U451xR z*)_SMvV-mUiB@G-m`^Wlp|VTOTD+i`(Yh}*FK7s($yuPqY#pJ9@yc&hvo z%C?Y-bOq*RI89&t99l@rMuY zJsISTMtoTgaJitwo~d@zQ*k=2L;j$6-j* zjhAvTDdllKWjmZ-+A8Nin*`2}LryB{+c2jUZn`MF_>~~eUqs?JfX%}BPNdJL@ncBP zC)SQ%l@9mAK$9bfxXFBRJ>yJ=d$(sFwZY9DsPUm-uQ_TqYaHefB%Dw0LT{YMnSn4G zW}(@LrT<#vf^#o|{t~<~F`xvlc0NOvQu;l`@WJ}*iasT3aDMxS{jp^c6^DX5LM zMZUU;ywMzt>7Q`Z-gXl?PVb9NuE9{6mn$v?j2XXL6%o`Y=HMF>uQGT(7b4P2Oquq2 zKX-Ul2-JiMIxEnopsxZc1><2rSW-phXGi5M9jt3|gs)njiZl5CL!`m05b22j5DAy6 zgz9(WbwQ105I7KLQkq$P4V*Z|vp}U7Ck8lX^~$jA~Q!s5e0ubYk3`8He^P+@ate5Vhuej?KFg?fLVyBxmeE%q z*nBs5-9_R1qJRrf1hedXD#Donldk_w@vi@^FlWH+D1xo$@^(kiuYgY=6|GrDr#UK4 z1{GxRe93n@^DURBC}4rC0{%6NmJ#`!x7?}SIS7embef<~6|(t^$Tjz%u`MklA|+_u z%2!qEwxJ?<58bAp_!u&C{qqx;5c2xxwC(iIjji_2!;xIw1zwML22zy%nbYS!%Sig? zp{Nt-p^gHUpT2L$2Qb%(N66v+g5>?;@dR;O>z`||*i`ae1zfcz&U{bAgRS3`pGWav zgO7?m6p^zFz-O%7A5Sh*p^m`Xbrlc6X@j7@1cwHd!1d3=9TkJfAS8L3=RGE}f6gq-GfqnKfELRv%{GH1mC-^ypAj)LLF!KIoF^A1$VfMIOI)uk zGV=KGK{9eaa;zV#Jc@nmdgej6%Py#A&Oir&xB)%$0Za#`Y+(*2I+JB}(i0epMPXTR zbp9;dGp+;ttv=qN{2gn-6FQVK1nbYnm^`ru`x@K`>cQ?mL3*%^z#i;+d;}Au3XW-+ z$)N~pua%aGZm1M7eZ5vS6e4=95zInn^`qN%#j6Y=fc@+2q^%H8Bji4PwZ}GO-VRIzRV+M;hdA zb-hrWx&x>Uut4z{EKuaioRSQ#U6pBDZ)xm1W1(z*vdyr^9mO;{oB3tZ^i6OxM^Ad z{nMEKr7rz*nf{qf-_oDa3jMn?{efQkM@ssq&7J6@|1_rG$)&$D({ID{h5inO;B+e` zc>H+eunym~25K?!5^g$W?s2{vIE6Vp@wVmAVqoYsK0cnG#uTsfQoKe|Jaz6dKAKNu zif3qwsr8fVC;IujJJPB@npa}F`7+koQpg4tHTP9DVy_8FToU;47@(!%ijlEg1z00? zEAJP{+s2kJhOArathVdJK){SlciZyaN1cZ+#Yb)4>&K$CK8m2OgPw#2J)4-i){p+R zjfk<;w!JCi;%z$%uxs0+0lT(+3}Dx``vYETaeD)9;aS_!$q~$=tG)PEqP@5TvLW{3 zSnQ!#aRCT-ZTQ}d?{h-^U-@r#W!8lHw{9=C!8f%RFPxENFHXk`b|>m@o1h^%Nn6aW zVfsQ&(q?yM`sfRs5Hblt&1J!pUj_3@w{7P@!QPPyo3xChPMDVwKU-aRGH^WTMD(FPlldORO16peJCaXNp=4qZ{R^j;`t9_Y zL`=4FowMU|hx-_Cl~J8v7e=)wqsC%l3TMhmVfl=d*Wd}R;0P2#Xz``y2dwN?MhVU` z1pQQeHp)*$emcqDiu{E9LqP)5>m-?0OQ!M^4hv*Cd+y}VRNc1#3N zzI+CwnTfr68e^c{HUj`ZCoJ|9!Y{dL{I(f02yl`i`G@7S} z+e6h-U9_hp+A@j8Cr&ZL6E(aGIxBxkx8AIFC^}=TpLMB)m>M^Tog=9&VQMixBXVFG zQcH8brp&a20$pF8klNlzt?qR!h*HUX9TQYmAzZdk zs>4`UEETZHjSF7ly|jKQICp2tXW zg)oqEE=_UbP%B|uU9=pDwosz+i5nB~1XFhll(1Xjd*?_;By1<77GA~H&}Qy=BHxWn zmY&UDPhsw*Og6@6Bvzuywu|YUiLd$0L(}q7{>Kp1flRZ&htB>>ntnM{jEdih8zFwU z*bQy#SPTr3m2nBeqP_T zI=r!?u&xV8%4<(uBr`nHJ*0x5ybRG#9+8csK{^I*EmxA}5A*9>uZz6;6-(tZ%=~Bp z_kl{!j>Qb9F%zbemxUy(oKMUI4IE9{cBd^mt#sAY;eWM>h|fK|ial=VvUBn}x9oJ!AH@okf=rNHXEIm0 zl|=hp3ESFVdrZsP?*rt#E-m}rE_~NbGVv-pHJ(Y`WT96wnZc)sm_Rm@^E4A8OXFER z5(##1*?6A9J3o^T17`hXt;w7XULUjIi$XN>?YP*ob@(Ha*mCmmlcO;L8^ba3lHXVv z)L{|1=OnypI;d|`0Od^}rC_JJ^Dq<;Rk0B-M7wp9!cJu|V|>Dah$n=lBZiX+mdDIQ zZTaCq^q^gl7Q3kDCXrp)Ou@DrG)M{VZh!59(|({70+AMe5&iw-wD3!*m}f`}SEryG z5>~F@39jbX0%%Wayn6@H*eW!qNCxAXfm}qQlgARaBl8ajBW3hUYR9bT&1AwS^R}@y zQa`)cl+q=ov67NJMQ8=GDaDwQPP&3Bjvz>CbQFyVY&ptFA;~w6O%<0F`_A0_Gc~{d zQ<-12P<{va6U}O`F1yI?;Z-bNh!Zpfblbch5|v{P9V8Pp^+Pf6h2JVZ__d2g%TV)q zb6EW}OdyN#>hFOKaT|bMe*)?Yr!PqpiDF?pf+<$z&DWqz{>)JrOf5At0VlZ5CL>rU z+m%{+&r%@NLEf`-kS)g0ZSux`A29!ej|mk00v}-lMgP*EQ1qF?LeaZ`6DWEaK^=(C znTnxx52WeyvvKwU!}9e5by(g$6qP;X^N0XOLuZEWJtaOCzXPxvi{Ave#>OcE?EGw3 z172+3Ujo?q*)9U?{A?Ehrk{=Jp9h#-7U7wISqFsA1k9#LcoN{T7CsR$g@Erz1Lo+J z@NmEsH&~FN!GK54z3{>-a9Ze@7uusn<>V%vVsiW7CtWe;oX|MjjXMS>Hys%o*AGAa z{zp%O`VVs6Oqg$K1WDpQNCkZ>h9a~h{)4uVq}Jw}cE&gL9~_pQ@A{W1jx9MO&yG>VgIQ0=KCY<2D`pn(HH`^E3W zr)0xJEtcgdl~^o`xB$s#{hUw4)`tG`9qtTo0n*;j36rLROp`T%Od2c&6^hg8YR1Pho@R^$-n~Ay)VP$B=KOW*4ENFR9SQ zP~tt2uD^L8r^&EgmgZ{3v@S`?b$1!gUE=cu>0{=3H+4-sm>svgKImEDbv8plsu86{Wo<>~KoT&BxfqvoM9ngvX<~I{* z`PkuxEtfl79{Zp!!NRoMSF)?ySE9PS5lg(49fI}*f__3iIowZ( z>VfZ(rPe(i0_nRzFfXgHaQGZLJMkrswsggjo&!^idFb z&GIgI`69)sOvhbI3jRgD27?Up)-V^W z@#iJk@zWb$8jn%vH5hOVCdAw%pC>o|gp{Sq2LQzk^2^8&xpc<>)&W7!IInwkQ zt2|l;#_FLY26IRmA-UVN2jfFFprbmiuHxu?>d4g1^PnncOAeNXX^{O-?cYi8mf~epl)Tv%kJ*M@pN(EYne6w9jWMIC9wx!_m9pn)a#(czJ<6 z$U#ogVe>Qfn2Q<4^(E=W?P%TNXk8vR6~n2z*qf8%9TD^L6INRuX>Vg}G&7cp&TeGR z3*kk>B`7j<<}*@`k8HagqT9&C5Rhd#pf>RH=K_; zioyP!~zI z@|0`^vZx~*>Xbf$8kuakL#4#rAgC3BDo;Tb$fEA#P{;R{!qyKW-bsSDQ1Ij_cmi3x zHxIThg ztKeSDX$`wi%JzCt+4zZNy8`@{Dli`EURpNj1Kbxpf>lr;W#cnaJ_k=!0q%7rgenl7 zyX6yCHbHv|LHlK_q%eyqh{IbOt%Pkec(sQu+oxzgXa#6_{^H$>NOc!@Q+6+5f@RqK zQoO*b<0lsHE|f)zx2spYLI04d1NXO?3yx*+@<^OG#v^iRHj1}Lw0Nc#PkN9}UhxEN z-N!7Rd^ulIm?6cJr?hf`Z1KK1$QJML9<5Z}D~M5dv*)My8q+eiXLye$x%3S0@a1AD z@C)1P86HOIq`+M~UX6J~3cQ{LzEa%#)1|{?Le;4VqdujFJP;++mM>^ueH3KP zcL3eKMnf9O`R>0I%- z0ore`5c@man>^>r$|@;DEep|zNlbfVcWgXfL}Fv{1i5>{6Rm|1OQZr7poI{$QxLQl zcYP-*j7D5r-cRMl2zep3xK>^a#S6^46*DHL2V?SUh4X|1D4ZDL5DQIHf9=P^+($_P zALZA6%;3jZ>`mZ_-(|$X+!m2>Ze;SN8%Ly+WPa^$!=HACoIeEPSyj{@m>jcm{)Q*# zb$t1N$oVtdlk*qBN)Zu^^lf^lKP22;1B%S8L&)91ER@{j4c8T5@DcZS5(4F7)*bVq zh2&pD(O5Oau z$|3e4qR-m7h=|EG?z}z=9ByNr-o;XD%fTU&3#S{lxRF`qd`8MM@I?LW9hK|2!I37$ z`xWjztu;Y=9zj1Lo4ff5(Y@fmAxkNGJ{hD*(%*+&Zj!Y;#p@%G_4UaHa6ECjqhH?KEbvUzEEplbzY;wCgYJ_Z7}?jxxjeA*Pj zES`ysOhqwqzoL|S-Mdn1+^;C2`-%o}u(mYEXEcZ_1w}X?(jcxBRDG^NTq!7hR78Wg zQcyJZl^Vp9gIE_AXb}Dmv9hLX5dID^D6=%!#+t#yH3&Y=r&W9ef}Yo-#B@gxPNKSQ z;51qZ_!3388$}nK*O9Im^usE9kRyA`;$dCI6_cT^7~wHZeqDQ;!H-$3Fz6|`EWt0w zpv4+=3@X>4W6<>)bPT#&gN{LY8gvXgMT3q(CuqKPh57oMKe_6hI|Z3X|}8QLA+bdy_bT&OdIWdtxbf$y9X{5!_U>j6Wnhspu3 zwQv-0wS}((yv)M$09RS~V!#V6d@kS;3!e>`^~yA70OrVt@M(Z44TPrwrl1g>0+=#H zcrsv$7vXHclsv-Y08=Olj{;12B|Ho;MVas*z?5>r{QRPMR=j zZ0MBCk-4FXna7KFQ7<~+~1p4d7k^d_L;((~YCQ3? zQh%21Vf|S+|FD0eKMTiFG#}|Xvv8L0cN(H6E33$C)R2?p@8Ksw3rcP2@5gC1`%&?| z{CBH2S9(_djK7KYuB298h_nJ%!Qslq5=4;mT#kK9+9+C*;Diw5=_(b1TSWCMgKSw) z7L%|Y?C?aUw3zHK&IY^;#P+n^+ps&+#?KIM24L$(+7ntbjzh~nCYC4x9B?-nU1h^rAlIg z^Y+@HzV4Sj{YCfo+qZXA>;x*95;*=t{X$TJ-o4+Sz>_m3%kCviFNf1#y$|RdeVuhxiZ?eVLvSl&Ld^E^)Xx)Yh7B z>355KECjR7aYwL0%_84rtzJaD1*i|q3FhG~@Ov@-C)Du|t*wx3cyw8|jI_9K26lU`~Z&&`)zuL{*da z#HSM`ue#6OsqS#7K>gGgpTbSE=gN6c;V0UJ>NbL!IvvJ)D?^`v#r9V?9^Jrg=D3ELy?T;w8dr|I@C^7@zvk-3! zu(lZc_Yc4sf(4rSRT86Q#1=hIM7|$?5WY{+@23g@N6wWG6SlMo)eq4RqvXRm`r#bx zW2-+#O@oNQBm~53KJ6=jJPbs}Xw)DN2EI4WRX1K{!n#&7b z;zE4gy`ic9g4BfvautsGSPK9{Sc>+B2GQpVFIOTMlg$vO4H_))I;b)59`wJSp;%;g z5dy~wC*>)e6v&plI9)hdMUEYf*hmLCNbpJ|+uD)46M&X1jh;q1^9~V6ULonzqmI=cG+d$x9!xeY;gg=FHHT%BYjQtKOu+}}|~ zBB^<7R~)ltkSaS8xgH-A$k`=kVc)$}T3!Beb}E*SB>bViF&%wccR5JKT%JT2H=}{hi(X znObYT!ECzK=6j^I)*H-%TcjGgqul0c%z^0*f>F7TJtFtlfjzL+w}KU@*a|b_MOO`i za{z)UlFUBg$7;?KgQ(E+9U9E(jtU+N$0VfI2SnC`u%ci!88Bi0PGZQ}^^@ z9w6YWz3z)7SJknHG;Ul zdcU8zNkz{;fIM5_5Mg%&WSSq8sScl z$jz;D?2I?zReXjDdUF4ScR0J8`W8)*i`vqVkZvBQ-eylsy{!`14V^LUZyjEwVYsv_ zx;OpQ2A}M3sliNIj3JTn&^BX6CEO&#r3O>=0KRcKmEyf7-(9{0=xohz@hfAJkKJOZ`;Pgb$y4&x9SRyi4Z6V$) z^qy*F7n({*m{v@*T%Ixx5XknV`=vr;Y&!2EHqwC!Jb+Ynf_iaBl_%@UZ`%6XuGj8= zMbXgiQ|eFj%lBhIL>_WA`&n2f4;XfJsX19;l%T?#0NAsu7n>mn%AJ*&)#zUAz3lt2 z83f$RJ^|^wgKk;x;655B9@eftJR$!tSH$!GKw-)Mb-)SvKaZdq(uJikjk_U*Btsf@ zd;d4hLDP6=oDR6u!tDVUT6j0WGXTTW5ZVba>#qmk5a9R?>zVcp-9KX;JNtM@ZGyjfD^eEw zID~w5^!(g4UBx&K_BZcmjpHhF4_to<#_=LkiWig`N_&~PMni6LWcC0n!bwi0{EO+3 zI5T3KAx2Z8LK@8Ua=}%drW;7Fc8s@MssDFR?t`PeuD6D%5;zH2XU$njz*)a=7H1A^FNvG>kxYVsj;= z9_<#Zx7Uoo3gb6V!=8K~?j(rqiRimcyt8yd;g*O6rz0IZNjMmj5Pr&Yf#9yK=!K=G z$-KlvjjoCLO9{v@%^ce z18yAp=kM5u1S=zN`44^{$9?#ikpIi@54rr0Pso2r%l!KwsOmWNR;c3`5=m0W3u;2D zghw)W`ZcglF4Uf}!F}rBhX8M|@I8QQExZu$G7ColS6TQ5z>6$g1h~w?*8ygOrmnpj zFzbr&JiwxNbFEjRUnuuaxFp{y?t>F}$a6SUjkfCh3lRRb17onD|78k{2veiBqwyk!JxA5$^>!j6g1rN;Sd$HAW z&=ZwGP^6s37|6r{|Af$LE6jmUicmw|1?Q_LsJbi6Re~#av|7{BFcavqYR>qzQ^bg9BsqnuJf4BW;i)x zv1S(Txh}%-R1*8vo-F7(DX2U}-wI?cy75Y^V1`I+X7cL5zaoaVJBf7Y-q=gu?dD@MbPMJJJWrh?skAWRbTeeh4Z(?Yvz7h`eetd!D&pT+g;b9dJt5A9oM-I^r444U+#1hAMdeJkM;X|0C{rvf1 zWEXAdh@NUC7e5RU_>u{iV`(^LcZkHeWVqDd);RV^nQ*ERY%!W;5z3Gl;Y&^cwwxI` zL=KO-3v^)2R|MP-B1tHTkugzN!fV#erI*8TNCEh)FT?wJT&IC{$GP z%CW~%+7D&?;H%GRNUi=Dt_un{mwGT1FC-I4iA#cblkGu3tGmLpght;*!JU_0{9-_@ z=g%Xp2Nc@cz!Yr2Y~H&+CwD{%H*9Ub*5bkk6wrWfCvJ<`b)4q!Hj+Nx?d#*yPe&bAr5IilFXHi4-pZjLfn8hk7puVo^>sG?|$ET2twk zpCA^XYQc-t!zLvMLDEd#Z~h?#OHoB{Ix#sC!tF1^cqHQX<;|&(u{t~7@E6-V;C`w~ zi7+I7yaT1=_a7l86GbE{O!n^NbQMW2m#1hSfo!vX3(?WsIRKI7-tl{qjV;P76+0QT zXsi~}{D2a%&HM&;p*@|de6ex`b6^75M6b|9X=`Qs4vgwE#-?{a(o274@(soB&b>0c zijmvQy_gx?B^gvQX*u{xZF33R_Sl6Pv}|$Y`S*>~1@Xd+WcXaHCzeX|>giu6SqcsS z1*k8maOo;?FqAJXJ2+9Rsi3i2@qQ(d~>io*BVnn5?5hZnmhaJ$K zhK~t(ex_4pl4nZGJb%F2Z8e;R-VIY|5)gfc(+pHJMz3ki5rz{sVueOCG73z)Y4W1D z-E<;gXE%)kTw~)52E5$D{Qxhva4*0W7VZJK)WQb`9RLcH=74wM$})TAMTV7J@iBA!T4~BekjBTY|oeWzA=ps zt!C3a1mAh6sW&miNh0LIwd8L24{tn+x{T<=e-xkcZ zc(u`;t2vs@3;FP1zKLRLg}sd^;iiMR7^K55w(Re}P81P;%HuWu+3!SF~?vHk0H-AN_DcSA39@Z@DRxesKE4 zmjlMhw-qWR0Vm&X{C9$os5cIB0l7MoLV{T|iU8bikOMvW_HiJ{crg1%`sUn6U445i zKB|z^{vAT{6oPRfnM+KLx#UZeo($;X>DO=fLFg zzmLiXTfa+Z#oO;f`C#k!hRNHh-`ZB|w|he?^?Pb7_51I7so&JV`h6E4wSLR)NB#bQ zV7z{xCZ?<33Ve6<`wQSrR+l#dcJ=!;U{}AN19tVh4)Fi)`n_{I^?R3BzbP@+Z&rHo zU2L|n+MCV4G4X>gfUP0CF)h8QkY6wt-fZ5NFD3Hji;RMNbf@vtPI>-3&hC-3Pv4z8 zGMd>Oo;NjA@E6sX7-r*Sc=3^*@h?>10pc0#ifNBUtTx+@quG<8Tjtx?qa}B?(zUTxjP-Ole;N^o!pHF zyd!eABmKo=+mW}&J$bwJMp6BV@^&p=LEg+yl(#mC@^+4VDUmN23hto1{rj61^0qWU z-qs=tF&wM1I`btR6BY*pS$P|&}2hAz)sd)2JB>QIp7_UHQFgVB5yBmN8V~Yc{{L#Rd|wG6qDaawb=2{u@cjWnC{Hm2YP7&;siMkcSY zJ_AN3#{d=eIYR5xQ!c7J_Qgk49-|*YeGW%3UY{Xi+WH)i&#pcn1?=i`F<@7pcL8?w zc^hC?pCy3*r~3Sp_n*8f^;x6iOS^~1tvg)p)n_i|hGehu+%d`bZ`f69&F1h~;pl7SE4YZd;gj|(zhO3w*Pa~byMjZmJ=t)9O|b#w)qR79_E?gl zb@-Gp#nW(u=8VG2-wa4%>?ZHSknO4SX*==;H4HG3;0j8-$}DCu+hcC zkT`mD>nXlToX=wmmHE8E$Zy3F2st0ppST}o&1;E`z8Z*&3cH4_itF1~m8MFl4xL6VXJQX+C7u^vmTe%YZ+%W9Uw&*53MWDY=Vzqk8z#ArEh zuq=L$@x|v^+PQtkzx(Jw;JWn!KmDr>_>s*bo%p+Waodu_Go*N|mZ+W?D*F^9Y)Sm| zGa*qhZ$WJJ#Y*s9O~~>2IGssFT2lI%NTH@)`Lp((lj+>I$&srBSFM+Iy@-_Eo$_#4P#ch+cb zJX_jN0f;p(VEPXmApu6^+$S8M4;aaz{ScD&b3T@xt6T}rUlF8mz9hITGdAq;DZ(j` z70wYG;_YXvPBbRXc zo`xXhd5hqR{I(*`b3Tg8a}N-%(gVA~ThlZFF`PUfh!wl7%Jbwir5u6syekp`eNJ)T z2!+$YcPv?9+htQUF4CNC=PBze9U9~1I9uw_2SAs?0JhG!t6ixIgsd7jE# ztUPaJWGkO%J{y%;%WU#>ciT zZJ)*2`3F+g`<-EB{W1*bRd>I2n#g)LBBvlNdy23ek`jrv$7>{qol}IMyDQA2a0*He zdT`1`2=evLf}4g|(PDXu?iR@E?joF;4ckY^9E{k0Sw9OgTFN(8OZ6b(^G>&fuYy+d z>+3^^*rK;eSg0}7;VvMqNNi#Q`}Tc*rg@7{rOY?va5Dq*eS)}2`Q~GnOru#1w#quF z_JNts3(A!H0EioPxV4xT(OT*~U23TdYiT+r?d|EuvY#zd9@1LE>JUO0#Na%3I6AeK z1ZPb&Xm!Yzb^fC3Hup3~LKaA1dIw9UoSOD;Ve2ez*$0pqdp|S(6Iu8(hqQ*;1g-D6 z5>d5Wm6u_}&h;qi#V_HRT>0LzvUw=KuyYj$?7k!34q-u(>!BBkIo2T-5z$xqjqmw6 z;4KJi>u|>gX1a{H_ELM~^fc$NaUD2> zLzK%U#WG3p%Z!3CEL$fyz>`buacs<~mSa(*;V<~l?_w02rPOvs+QVoTVTVI&tFA&Q z3SwvaS6w}dl*Db|t2}3EJwMHo67q^O^%Rlk&XkeTZz<1BB3gU~Y!oasgWyP2c@~@| zIOt-srrlf!$;1~~pj>EmGe8(VNt>An*z0C1%xDC4+sAUW6KgiEYo(i=f-GP*b`R`k zk7=2I*M$5(hlA4P{~q9k{A&=@?swJ;=uvwj5nuP4ff|B2`BANQzjB^-0b_$hP-LM& z|BUy)hXHo|Zx6uE&#({R6)M2Drk)I|DAYa4O(J3#R~P2hkgO{f>ND6+Hkq z0haa06WM`d-$!VC%TD}Ht#EN8FZ~t&a<;5@S-Jw7sl2{CalH!`Akh7=L4Vf0FI{&n zxP_Noy@?-=Iq_5d0lvMO`7D~|v#950v&2e0*1ueghIS8P%^la$l~|pV$JdN~(-dhe zsrAF^hXnY)-ln3{bh&7{{=plwp2b?UG&80hH|8OMVQZ}?Sr%Ryyu(b?hZHkh*ql5Q z)%cc(*$69UEtfC6hmR^SWz`UYtq7`PDjOp53^C>6Ud|0vAi`E#hrckgh5rrMjX%By zTy5Wf0{B_LWZ*i$ z){D3VTY4Yi8%?p?6l1JF z+X{NZ40fw_%Jw0APe^+z($=Q4{$;d=75JK@Yr{43(Te6US$m&7eN-D6+qRK&YT|9@ zRKQNx<^p!Qb}V40Yexchx^^I7r)viQp3t&s{V8p!?cs@c6Z})vkTV(o3_$0)Vh#x3 zkyi1^c3Q;-uT@;QIo>LyTb+&<6l6R8(NGFPdgIG5eG$LEs*k>qn+B$Xx2CJU*y+{c zi3o*M!jL7B=}x6~nSZWom4u%Jv`C1*R_hl%UUv`s*!UL|*S zxEBWI`^u~S!fGXdGQpN~Kwze&L`>cZ;VSv>4z~&0inX^GnkAK7$x5E{1uJ>JR5G8D z@_BfoMsXqpA#`ztrt8(Nk_Bf2BKnKIa{v`u$=w_Yb3uZ?lHYvA4OV}^?28?&=3+$1 zbw-WmGrSBp^}tobe1-Kvjphx;V~wO2{}nG=m5}>UP?3;kZ0GY+JP8>m^G!8TzC(PO zh`!#pD-n~$(n-kS4)=z@Oh2#jXX;7FmhqP069efzAFCg~rKETaab3{V4TlncpCnSRQEP{TPfAO-v^eQAj zBTK2PY*1l)nog4SEXi7)vUx-xxBms{!2oYGd9P#Fh@Ber>H7;1%Uj6SXiCo!=fU7# z={#staJb6ZW%9O6-r~r*E-Gp>-Y&HDvQil*{07!M$Wip2d>T*vm+ zOQ2(pJd0?I>gKJaYu)EjpiRHk;qbNVA|7LrriN) z*Wc$$%(41(m)NryhxrLjXJW~1axz7-r$fAkh`z4kgX-;Yr*5n*!KlDY?;>terrsg1 zk2+i&$zrScgyW@(F|WJLTm$c6;310b+#!m3&u6d8T@?%3H*h5St9W-1Qh%Y!(NUP^ zflp4GRT>(QsPFydt!-8rXh1xUJm?;_bmTOcJm9 zQ1m~;*_7-QFO!5ONmG%hIKKq4XZmb?!78UWUJ-|_pr0h@rDl+z!~8)@lc%5yWYM2? z=%oqheTl9m`SBx`1j-vJ$Wu}f$lAG=GKCvsG{SQ%^^L!BgBqmsp_NETCLM6sXUAAE ziNjT}NR0>h@E857Uc6m~K&+gWeXgmLOh+?Qi6m(qT1%of;-wj}L8^fVII0+>W8EG6 zg-6@q2*Dpge0SLfw(d#T68!>ZAi!%$?GnU>@Y zLQtF9>zFl>o&)RflCS=Cdh0<{k|;q|q`&1(0Szp{5vO2rrS(%^%4Gk8pL#u8XrP~Z zC!|=%+gBA1{ zuYEu6$9M^_^JA<4Tw~)r4%qoIssJyx@9zQZ{1|rwF17C~06U*?IbgD#dEE+_769Qg zz|;zaV}Pk==x@9MFf}HWb0`d$&9o2TYXGwy_W*naU%z)>0ZQK~=Y^SD1I+)yC?$-));g4`YP#C*0LPt50@ zC+4g7;+`1sPkxDs9eXzrkArTt%YP0ERN6W=BUu181NW~YKxP5vf^+3S(=^?;&zQ`a|&=ubkTJhQoT`SI8 zk5+jYz9#u17t|D@`p}BMct%<=>^~`XlEM!?vLx0dKHyJz&?4zXa^s@p{0n9lrzE zwc}R-yLMay_}E6g`2W<+5b_9?6w~M zf=QWh(`EXh6iT7ht)*R{nvqz**2ChbQRi;gM&j1euUO3iTT3SaL6%7NZT9cl7=(|i zn)`f=Dw>L5e3kz`#Dp@|{l^0k!OhK-1KwoouoUom3ttC#t%a`w?CNk1;6JfW*zG^Y zdd6edCHRX=pliinJnMJ(i|+&DleE--dH!(qCaK3|T8~S#0;}|=ax?1@>SCce=Iywm z!iy4f2wtE!q{~>Bly=b<;x(Rwa+_WBg?No;^2JYY35s})r}D*SeIfVLj^~SY`akGM`b^u>IsW0Sy+TMI|ufCA`X}j@7nZDpjhk7m1wfdsntHtf`y$xK_srZGs z7B`|hVoCc~N96omoif*Bg%OQC7o)AU(N-6)@t_(Hs`j9j7HWB5X=P463`d-oFvM!? zd0kawH<$;GmOU9ec>=gC&Tg&Dv3{=x^DBxj{a1cqzW*R@ixZYBv+4K3`M(aaUtp$} z1ZApzFPx|8aDUv}Rl$KU`Z4xc#ws`&)4YLq=i&BX8uO@v64NHnRe|8V1jnSm=nYH# zMW@rN!K646E&&OCem_OTq;gyLH_nR$t-`Z`#P#v}@}Nx7r8bzDL;Sr~hubEQ{!sy$ddG23cDS$n#mUQ-qeNb0bk++VNPA6Td0%O=eemQ+G+Imu zay6eC=`DEu@D{CB&~8T1&&U;z`AhF{ZtXzJfT1A7FEv*aH;DoH7qaGWbBJw;=&QZa zL76(vO>wxZaonvx)3kt0J<)jxsC(8@D-IAZeV}qXvW*KXneO&_PHrS&F<< z?N4yH&k@&0%y0hyZd?t_|7tsGU|WAn#%w0#Qv*wxR8qH*FKXabhd3~h{>zD&)CxTM zZ*;i7;`kju{X+sW^@MqX!+im`%I*4oBFt5&8MFVZ6z0yXq?T7k;u`D>yoJz<`Li0U z$yE&qS_y)FLY{oYUwTgsymF-F+)*rq?^=S(h?~R!RRg6Cv3ZZ6(hm#D)Tx1Nhg(ft zU#4vWGW9su+2IxeS2_0tG$lB)n4H^OL(a7)=VE+DVrh7SN4rPM31RL*?8Mj%$2mcp zfS_M)<~_U}&P7pQBKp6&vjI~j;ikRPi|4`965JS8fR9q5 zLr@}rwd5ngWLfYU!_^M=TO0=MC+2YCCbdAXN=G`}CxEL}`q|-9rIjd|*#rJf7|xenK92D1Z?98xhqkKf*GgHwe)xg)dGL zfAb|0u~mqWr&Osxwn|S#%2K7dk9k$<7pa~B`D=q3;xhk7dJy*;9^4N1w}D+!bF+!- z6NRO~Rla^O7QUd{P~7z5E*PHqs)V1&iN{=m`yoL^J@GK9l0~eNYhNTc8igBtM#>xT z1oLtAIU!VujI|EN0(GqtK{L~Xs$>tAELk>OmGpFklw&!MO?9N?ZjcWKWaaBXP;N|b zp1^bsCIa{c0|))JZRXJjw00J}SkoP+0Z!N#V{adyN)Sm79n=y(j0rF6IOA3lAB_tw zvlf6e!u{{Dd`40C>m$snAhU9-$*fHzs+>>Umw_kP(m7g82+Wdk=&x7{uFMj&=MnUi zxOwq*nAL<_g^)ZDVpHubxo?o%sq%*h$!@wMId_x?W1gXQX@`p5Wk~(PBd2s|@Gwga1?cDrjdT=;v$f{_XI! z@=(jy3=m?+{5J8Yg@{@qLY~52fh>FbBV}RlF^_CVFLXexR@s}~DtkY;5A3}X3wqL@ ziP04iiLDh<_zeH6O{83aReZKhzhM+qf3%o^Z9R(1ejORg?_<`X^~q&QrQj*pv{!f) zp%5=qB48#OvUv@VIH$*7h|^ShR>UVQpdgD}|Lek>V1?Y8Q-$_C~C_@7S#Sm>Al*aArQT1ZTR0R}m7<5HRDvB+W}fEyakxS~5ZrSqdm( z6e~pJNUR3W@G3q-1>lSX$(bbaiOhxQ? zG3C`cAXARjoref9JxjneKF3rSGgWy;iYozw-o1gn5fLFif;|P;JUX`>`_M-gfjw`7 zO0ef5G;d+g9K=S1eZs2<33~{bPi2+TA|y-p@K=ggPAF1dpjhqP4Yq3#4zJ>q?2&_^ z!!LG^#40R4e-)n)v;bmKaCVV`EX2ELu{_1L6v(ot_;11^OVm)z=_1D#_)t zh*Kt@50;_$)gz$O*=f(6%Ox8PW)@yxE{0z5@WzyaGq@6}!JI5_OXTersRiR&b?hA0 z%c|UaxcbJ|8+~?<^xx*0V-ik#YA`=zz6z^HH2E}Ll!f^cd0QrLu`5d!Wi^;L3o=$D*tT^IH##=&s#uFck+$Z#j#Vx%OGga2cyU#%Cl}iYG*| zYqXpY21erRE|}pr--9K zRvdr2Tf~v_EB=NtnC_~dts=MEa8|ah))58!D3`Ym^W?5)A>`367Rm~!*hbcAE$cKT zxlVhaPOn7Xb^D~dnx~eTwJ_B#UtN8TpF=GJUIyw|^vbr3PI089F ziszx2ROb9eMo5@_M5q7>6Ntnn5rY#d(9l!y46owTOPB#BEWeuYHx*2{z$VOJO}JX{ zkT8LWF61g7Pq-Y_fQ0$<5@vu2%daMUlO#OHCd^+=c%|SWVFHoZXkwQ087Uu&XLuE# zUcwA8VfodBkCKFE*@XGag#FUp0r4PHxZGES>4ga*OuJe|@wf)ltkGSm!CmYS=N1j_ zY=?)}X%GvZWaNIS2C*hc96vKP=v+0EHHcxpc!$Smu#NS~4$>fWU5Pmqus2`7&~QC^ z-7hQ)Ca9KSYtnjbP1=;5_ciB<^>{d(vyWD6&#CTnhn*)b`JG4UG=NX|XqN@0<6}bU ztFihUL09@GH0Vlyp9Wp&Z_}VFeUS!T>E~+DmHu1}y3$Y4pey}Y4Z6}FtwAaMVSp1# zzaN4+vEA(#Ol)6!yKl7uR&3yMvg>iY?t+?yXjWLaa0p^?!nwOOs)XsE1en!J_(Z^T(h(jD zm_k8#G+@dL;gNvpzaTseFo)-aj|R*kCEUGhU02D&CuZgLqdWICa_? zr-y5}r}ivjVmDwKZY;z3|A?^F)_qoUd>zhlfH&Cp#{hP6d<0;(r?xlXu{*e@R@awZ z9$&xlzppR*msIa^Fc|A@mg0#YyLw}BJ-%_-2KK)`8eg`7`fW7V4M6?U7nWYU-SuVD z_OZQee0|x^U1(=;|0@y=Twk^seF;<{a>o8wz@%WLM3(hs0|hLE4o+HMw(1rdj=uF} z56Wv0{p~Hj^<^L59JIcy02pq4Sp{ZoFs7lzVC8sxeOc}C=;>QqU)CG3*$}uvw&nV= zy_t04`m!}}IMz=A)rsrN8YsX4>&reV69G=kQvqi3@pYyz;G?ImE6i*ptnys*2Sl_M zUt3#TR>Wiz_PVYmf|cW(ZE=}C9&oLFKOAt4g$Dp$ZsEfKFShW3fGaHA9q|9Mwv3A~ zRsQcwl>h0nzOrHk=B1NYF8wz*ldbty^m#}RVEBK9$3rwEtgU* z%l5Wl&HjrO_1(~zwCW*>-qz9XH`A0iFkszzmdkSTu@t4z40MR^AbI~{$8T<;A~a|+ zT)?;i)-N(uH*}-Hf=Jl2w8B1Vgz3`^&3Lai(iu zm1Z1Z{~GU0nP)PwSa{NCBAQ`J{lR`phXKnIz$)_{Y(|mn#KYMBP00>eLEQ$pP|X>E zlD#R`B4HY%D%llnMup5z_?jfy;hH=s?MLxJY!B+}N=CJ^7)lxC>FJ;F-pTa0fStYZ zCEzL>e*@rgGkJkaixqeO@fZY^*Y@uxtheg|;gI!q8(!b%4z<&PCok2r@D;weoJR7Xf-fqRL~CZ zBm+hoLFO!^WluherQ$_I?wv$l@Wh4?mU9g{94B%ILsW3y8l|fJT)}MyKh#+ZD;X0y z61Ed;c#!WBW&E)x4ST`JsH;TK{Bj~g;rN}`BuPS7>;FkxOFO5}ZP%ohdQh|HI_?GvC$*=XmpO4gW z$<}Dl%&s*iap8WHUpvp1$v7a)-X-?TCOPk<(Og|3zC_~Y*xK6-Ys3AOkjf&+c}>{x z(@}?I5%JM;ENws*+6jD+gkb(Pny>x}`jcx-y=jf+Yp_{rd~ev`etz8%al3|BVTuQy zL+RST=&mO>oze>@H?_7irqreUPpbIL9`S@^?To2MK#;6L za~=GWc!j1YIL9Fvi*+ITatJ2A*h8CcM91e2ZF)fxrrxqQ(2Jj4!nU0b1>tC?l1?LH zYYr0Zhi2Q_p-nph%~zZ1r)e}@GNd+B>H}_-U3)`|)1LNyN7Wk(crhG>$X;ar9Kc?` zRAEj=P;Zq@I9+55`=x->Mb1YS=$A%lza&*2x46c)%>Nz?N|2}Q-T5A#Lzn+%zzO+( zfS`6?)6>u=4MHMG-PeMe9;jOMVD;B)4~8}Wn1u|@WPDT-$CJZ%jrU;#0J}cyP{1`d z&H;dzTX-M9i!GcExWd960GC?09pFL>?+Tdx0{7Xp1C#@K(Tb_EY?- zv)oa74Ag}Gi({ZQ3z4J3G745vjeEPQ}duJ_PutBQ5^MZ!r=g~Z> zFQ5eJ_%R*dl-Q~Ers2ML=WZINGiY^j4?Ix-U;mIVx4F)4XSs5>rDj3g5KOoZ4f>SV*dG(jPmNKs%10*k56AhzKe{FxXWC6IMci)agk~m2hX?-)F zR!QPDp>yAB8wxkInR`4xmmn(y3gnL6H!z*6SE}ZX*L=#Cuohq>$*<-9=y*OKT^q#w zgAhS`>T#IxY4wx_PUzrSjW~VrB}<`@-AeH93crc`21=y8+aSr_K$pBTtht7Mrtp zA+wbyCRH_CY#?&C#FjHX$-O6%$6cl?dBY1?XEdJw8q#W)NaqDwe!vsYn48 zHI9mPj*8QSic+D1Pj7Jvb}jj-_&ak=pyJCoFlHE7h8=r;673BmmKcIGgPIh4y&x>bR!V!z-j(OnIQ zV)h3;nvVo$pfUEZ#!7=<{mo_o(0m=I8_*ozR*IccKf^x|{_RQ`&^U`^`YVzpJTyY@ zJ^iGlGQPM)VPsQkiUB8#FD^r{E(Uo(7o2!_!GY|-0$gv`BU21|Fikq08S-)naYHDDkX|S^ZWO|}zg!_C z;TaQ(Fc|g!uC@1m&YAN(XS(A5p)+eg&t7}4z4qE`t-bck^UJlyo1MWPyr!I0NuxNG3(+pTV6oDH7i%_%z&H^@bqKgVIl8-_Uy6n1({jWsphoL2qc)Fb@ z=?dUqbz`p1mrO)_PK}6oE%)UfhE%N14PW2u%{y7&do6c9s&YP_h1_V%_Z{tkt@f^C zeaBs@#LAobP?LC!D+l`b<_?Xhz-LzWt~}G+a*GOQP0m~jkTp@p%6w2{Wv|+k0BPmJ zvD}7va)0jhA@g~f<$eE(7&BfUb#=&kUmun1;CkPJYgDqctYp`mRNcl)Bb4h7M9dbF zG?S_kh~YTF)b&1mu*e27Y`1-#*EAuMX8^nPzOKM4ZJrZ=-Fn|K!1H-dvm&j4?b_dN zU8`&6SM~p!6i;4Cu{yu%LLJMFBegs8tFu%H!sl1l@y^VzCbNFVsHP5mQ0k550ouUM zuP!jD45P|NHuYBs&!+8ZEp5jgzZ)x%!$>ly?^XYf7h5)w7I}M8XtZP$U`)^1M9akX zQEAEpQPnKQ6ju$+E?GmDq;j}`&&zG~K7f~M zWH~=!v9A72*;@#?-V>~UMm6%v)*v3RkBDC}bFsKUu(#A3LM$^$=^sF{274QuJBN$c z;9PR)aOI)uh>QijY)I)q?=h{T7s-M>gruogg-wwn(zG9t6e9zF)20oxO-q@C7Vs^; zt=mh>%VR136&R(wdqN+G zoEN{rj!5p^=5@+E@nXt%%i&Q9XJDCGKx3A}hcwhV&&#dta(LJcZ7YqdsN&pjYw|w5 zy`<=)=mB+VmbXs05DS5mT!@EAa{E(FkLG&S`{gobAz7Rj^JS++SE=653H501;iaqa ztfUH0t65=NlEyq_9*oAn9jt)QvI^#5EOMnfH5SC+I7u66C>RKZ_y$h`Z?Nzqz|L>E z4|tV*J_C5Eg`>c8EPMm-Obbr}F17G=z(p3G2;48y^G~m>C)U@eC)=0Sh^^X}wfHy7 z`p}@=u`dtQVqYHg?Mus8ihXIw1L-OgzuPh0_@2Hy|BZRzyydr_()XFELSJx$NPPLv zR^m_fqbgVYq}rk(ob(=|EOTRrS$d3?RncH7uV>ch)Xwx}gF26xYA8-4l41rPRow05 zH*0rh0aMe~3>-GbkAZmalRG%Z>X0KCp4&>9GQ*RK<2CJ<2i~ru~n~xGZ5@epDDI-mh5{H0yS7iOaP; zo~i}e?{LRB#aY)XY%09tijY~83rFqasJM|q6;y$*C~m3OOsUx{)R-kOT}#%q?TVS? z%u5PKt*2F~u?IiMc|Q$RKJF>C2Eq@0Da$SRjb#b0xa!7Q7W_6EEl4S;3x1iDQ}LLt z(AMnGf*VD2_jgnjOAsXB6udSXzNH2-9N#|JZd-7s;09FtbiqxPBE9&IdLMAOe83{4 z-u@x=njI~p9O8d)I)at%A6BW0ytH<>OwO&iz52b1Tc(KHFH=R_HcAKUx@I&ku|dR* zyTt`kt3HR_?Pi=R&c!5yRNQuXu<7PT;YWY4Jljvm5Ab`aAg1!$g={W!xbMq=A__E3 z36@A=tW1A()l?zt2JS(5I;20wF|wlRy}UR~OMFy-rJ-lWua?4V%1VBbC!{Kiah15%AO<6*XZ_TjFpwRD`_T^S(b86v+tj1UEJkp;h2jmDg>c@*RlcK*G+W{- z0Wp6BMCx#sqWu%blGv8!=4eaR1v$mQaJSSu7C6ZTIhdr2t0aGz;-BJ$ge)B&N2R)S ztZ@}p9^#^yCB1!WQuOe=8WcTuNP?or4XhO151d3%DM{m_%sB#&!9R z?{qJetRpXw-1MaQCzFp%_$T9moqtjQ?EI6Fz|KE82iW;1{ehi-(ihnICw+jOf6@zB zghc8(1GpQo#8tWjONX}t?gFea6TQMwz9DqRU$J~_zEA%L_dCC$u1a`3N- zJkPsCgiv)uXcQ#Mdm};{S|b!skWB1)9xce~*qZz5Hj`z$?aSPw5;D{o*!j380I#%p zjs$jbkR0GYy6@S_rL6SF8Idk z-o$?A`ddWzvX%K%3Ju-w{9|(+?Tqjl-ZEhEDF%^Gqfb#T)A+_B(HER?B|pDk8_~8lviJ z?sq;)ica3|yq<_*V88RXBE2E|oh$#LDl{Ws$T4a?p+ev0Ws)+yk%EmRFFFR%+{oL& zgsli=gEG8JibbyZ-N|ZXWVs+%neE;tAU3GDRYzQ9f&HU|D{ z_B)@nJ~`fpOJd@EzcU|u3gUNXKK5NLqhPB)3d&dtccVbf&m4P>II^Nm&Jfi479K_&yDO#j&h1CulxpdG> zr7FHs&#VpjUQ39umxh#WrhB7h8~LT0#`wBGItN|DZgHuZYuN=SN>cR2-xPNPx$uMK zS0_FSS)c2lBh}}cC0K*V9rThWlfzK;2< zr#|5nxMc$CGXK^+B>d;GBv6j_+dzDOj=REdt9QC*8S%bcL8z`#^0Mys3mqZNAVjxI z==?Or<2BnQeujhU?#3v~kbl>g%2XmaJH0j6skA-u7f_a4zAuj?b!lxMK5dHHQZ@#3`S}!Aak$=p$oF?&;(nK3IMruZ zeig+RR~?mIvVcda{a$dCNPmAv>?RIt1c}{wevrKdqXlt)hd56V1H64r5L4%4u3tX* z!gA;e!3|6driWDOZ{dEx;kEvOia=UMf}V)hA{(M$>jR=DYJ`Aebqs@Zs!#WJL0}W1Py$L^bQ+=*%-qV~!TM zNDI_oUCdX=7WiOFfjh((3P{96a-}w-;26VkV9@~%_X)ubi2v$ygY}v)%*UH7!B>S=daEF&c9;vpJmhds0@uj?sh_Fjv=GS| z$BLD?*(DZV2+z$eEyxJ>TP+~X7|9pg+-x5wIg0jC<1q2B7ea`M#58wQJgqksrpo@> zbAnCxMeb9`)$STExPgA2A-E~6H=pu*%prCPt#nverB2-xINTlkhE>`;q*A}1k8`-M z2yURCKOG)ytm)?;aSpVl(a=gC6U3C3`Ul9CIoy8WntmSosrGYI>F4PzL)yD_;&Zj1 z=kQBEbKjOg^s}s>dM6P5G#WzDe%L##pIe3yV*2?+N5yKrg)p_BHxCOo-S6k0Ay-=; z6Wl;Q&jnW;LGjR3XFQHT2MpBFGQgj7C3TmQ0t)T|p(2Hk#y}N1#H>*A4-X^XNlZtF zyOz`ALGmkx1}pUqRP`se=`+AJopr{|>K!|0{8!YJB z8+76`ga)-L3R$btiy|>oGDFA{A(}e^GgYN#N}j36-NiFY=CxX2sT8GG@R$NMZ43N) zaLodTfgJ3PcgYnHMm1Ak!8~oo_1vBq?2DO#nA#Uk80S0O(*!p#mPUkB>Z`9Y4!3S- zy*VNE+VigtQ9qp;sPwBr!It{!>(`HLW98GSMtJV|P=$y7-|4-1rF7pk<+l7r<5T!W zQ8kU}?KTLRPBO={ncb)_MQcwo*!l}X2r=rb&{2^E6+xCCE{LftcT(5U;jSez8?3Zq zV6gSZOzotd+Rt|iVqnZI6vWg@T|fWZ;SLL}v@oPnzn^b$xXnZB?HE$8>F53qaZ~8W zNOukhw$$(EeI4#&;F^AZnyDuJmnHrD`Dp3qBJF4Sjm9ULem;o3uR!F}*g=fkrk@q9 zFTX*SUmZe->F3f9EX#AG1p$_K6~t7QyME4dxSQo$rU5Ch18xDk(Mz4qh%kx*X6hIa zy**q>_en_sGqofy$VX$Q-hyK)F&7D9fczT-F_nBLF}FM1!$ZmM5mKpdriM7&3VY4? zR`2`&YUgE2=N)mmblybmJo)A7JJWg1xcbg?p2m6JCNgO{Ptk588RX-#vxBYAcV=qs z`<4MCAtcCv$%3280B5FVINVl#BaStVVCKvBFAJm*W2F&g@*6E1Z5qKN`U2XG>~XnX=|Etvz3AkL$0RDTS<6d59u0Qxd{bGgW6O zW~y4vlsr>2_0145Q%dH4E|cbr(gO8Y3slG!n3q!ELXd;qadb#a%xtO~%u``pM+7$5 z7u))U^o0|~OouyDa06rMdBII_)O_`|<~>{Qh|qek4XM|tuiG5rVWE|F3#-)4rUp6O zul&s?TmMf-Ks7A(TICD3M=H1FHyR(oFS6buRw9t7Iq|aBvUS{y07WY!8EpNMzQNWT z_4U>|H~yg_$nqNmF;)DX)ZOlI4;S13%X@@XdKme<;SO;N8!dvB?ip68>*p2@ccI`0 zDt+s$U`zde-UxqHz6wL@y@=3OQ*to$!);QUhDx50QU)?pKkli&=-W!ER>E7dcx@$rU zJca`8jI^)UoAl)Tf(ibgo~3(*pm{9S4e;>0=z+9MaFH84wOrDtDraXYj067L0=t9UyKrg~U zLL}p03GVk~A&*b23Kiy8gZrAcQR7!A4X!HY)#Nr>LX#)6d}u`Rt*?J4Mmtc>HWR=7 zntk?Pnd_&Q5}jXVBlUBDy@B~1O%xdKB6YLUFsiCJL>2^6RBSk$U%dT90A@>k=c68{%Xf7WSJE|Q<}h7Y>ug+I2+L&2pQ?zT`#A0O9R8`&1D`du5_&<_9SO_C4&sMdeXB)KM0P4hh_ z$wh%``lp#B7X_+^d#y=wQJ_w23QTejJNrD(B)KS1C;oj+lKqSt#OZ31?2^&g-Ek)A z&iWi;lDbP~KLaBIrCxpDq-EGDOjE@P!UR@yk}g=-hOZH}OD5|KUE*zQmUz{h6}FjO zGL^YC*w*E)8f+`0Dwyinc7sVewv91K$F`9s>DV^FBpus&n51Ldi6-gT*2*Lu+x9m} z$F@C8(y{Glwr)d}W1DA^%C-##R<@M`C$a5il4kXKY#$b*52fLO)$3IZI##d$+f!Gs z`G#O~gm0o`$2mY^EU%_YuDMpGwt(6z-}*31K=Y2 zJPWwc!kNG#CQ@%5V38n!cbwHj?~M@nH(&|Q2>dg!h@`;Vfkj#c-Ucj!EbzC$BI5#o z4J_g>@K?aqjD3MO1IsuUcoXnuVE7XG1h^cSNonLgU>Rp^fXjhJx8f{E)&h%8Yz6!> zunc*Dmjfr?V4&%8*_6MOP6(yv#fABhv#fPF&b zoL-T0NVGeLe}ByeCbR#gG70QyhFEQcFN9A zUH|6+qV3lIO)4W*Cl>TT|9KMOY1`9*QRXwvyzGDQWHmabfaPm{gS8f~;>c`KZtU&iUPCnvrzeddjJ?O!L zn~sy0I^3rOH{c004Xf90zr!6DTJMHa6YKdAR*U?7T5^?rC%$!z!3}tF!_#_lWfWJD zMNOu^pV}xq&CM>E9JUiZS9ltG&GMAn6hipYg#rV7aXdZS;ocp(6Fnlhsl&-h=Y9_N zTyPDw3s{G9anv?F52#C-Q~nx_TnBH zT*fk~p|oc4fQ;f_8yb2}&;q*%JzWevC6Zt}O_~0+^vv(<)6-4piHWv=o*#xvb2=(L z`m1vUg)BW+38skr($1Eix`v**N%Yh${`C+;&%;`v*yQ}tmL5q6J^I(u(>y`X!c)TH zWxsY}gr99B{NRsegxgJ6-5BBNZkwH$cE`?qDb7D$cRoAh83Ayh)EfYtTpCvn+Bc4ZEsRJW&iCUu)(l_v4&_8Xe;dG`b^x6dQMt1SEz`IlPwJK#AM-V8j` z!k+?{TKGd?=ku-y?jPxQ(L{bOyYkQN=+yK1e{etg&+4j$???ZYcj5cdH?dx_tNrLN ztyFcES$TS8_uzi?u^mO1hwVp~n{2YYNQvE!eou#x6ZyZ1=!9%XZ$_z{iKvs`Hbdm5 z=862@Pj-9J^M}#F2a|WWe*^bMUMBBFA4`_)w!hw$>=s@PyurdR0k5?1bHHvd`U2qH zIe>5c@fQ;Qc=498;*3w8vaAK7xI3Qs4(;A>Pkbluj3-`qV8RpE{pcC20oncN&rx&0 z=sLss;Y-$J$q_E2R<2nghLf%4PYpl`=9b3#l}7tblkplGGELpzi`m3(#_SC5C}1%_ zFKgy0W(ztq`zg+D^y*+0!q=B)CvlPJHDU;c+ImUMl>l%MKc$YUvgF$_^h@hgd1 z*t6CdY3M&k%72oKhW_iM{Q2SZ%VQ~js4M>#DPQjtD1IX|4gJ5gr~H0?`OT#K1ycT5 z0k=dROZh)7xAY%r=%?iAoK+9<{sAd_8(4<+msmyV`lOT{tCWAcU;YJB{!>zZ?*Q%cSjz8Y%Fn30(lI_K4dXYSh$#~b7ZldKPIo;A>}=T+z|NM<26ndWUSMa- zZUuI>tQ7dqSt>aVuJ^4MZ~24wZ+3>2t8>He-z?yr$X>PAW1Y-3x|wS>W*t(?{hJGIpI5VmreAgPr2@~lqtE63&0aV($@gzwuH78Ge{%{5dIM6JRl1ay zreCYir>mxsG*(G2-|QopT)t_}M`d1+ut^sKZ?^q90(iZJ2Li9P@L9mFFS`N%(YrT| zJ=*(&r1K#;=m3omts}OztQP{dJ636?c4D|yx>q_8A9AL5#aRifq)z1s9*7~4*F|1` zlge0KQb>EDghLe*eQ2}~jrE~XK9ui65?wI3BYbGMg*dG-SU~`pL`5P1GAWWTcAh1F zUn}Wj{`8hVsV2rmsunM?`m+Gv5~Y+9y1(@JkSU>?)L!Rsj}zR0wL3;|Q|+3w&8Irt z?}<$smHg53I;rgmv0iqcnsbz>&Lm(jkt&%}sHuK|&EY&E*sM6$lMF_x9z8Ck1#VKi zbg^yyXs8gCeCg3*$IGL7pJDNewp7JuMC*uc(JK@AjOdht9x4C}dJBnd$Pv@k2Q#hH zw4FvBP1QP$>dqB*ChiuEONUo1q*FzR^0kcCT894WR7@dT#+S$1GFG&eGDHk2CkX1X zirPw1^;c09vZ(VN>IuhlA*8wJrt%cQ-PTLW%28bXRa}KE?ih!=_}GldG?k;EaP%Ql zs&O-cypeRJdKFDVW0?C0Vya{~scPkL*M|lH-)j@B)ZZ!PEwc5_0@p}Y$#W`I-Ds@0 z3@0jD(n8uDm)~f-DZhwNW~@XYJi}6N6g$q1R4LBkB!f*qJB$h^ReyI>9AH}D?bF&y zRTC;HULn6o)oJ3MK(jlcr7NAr}--l6>&*m$@J?9 zF?;>smZNWC>?L~pRQ8g19;wc6 zOjd??xk9F_uHymQZIqbk zS8$kWlz7=QcDP&-8qqAEthB>)vcqi`8qqvXa8oB8PWg9txIg-Hl~115VcG?jc>DI0 zUXgV!`)T9&7GTCC5lw*@rbXTgwvL-&syH{0402;`>kum3Fnw{MZT%P-h=@x;D?3a* zDk)wezrOO91jBTW4$~s<>C=ToS$>P@ZPljdHEnzTSgKYb?1>PX)q|)mvRLI`af++tYudSkPP*nX@RD~?+Qx5ec#tzEAui&Emi@fbU zq%7H!k?u~8aSnIcks`F>Jp@_Xk4)}(-BqmH5UdjiviP&wj@OkNw^iMYnn$H~9KrPI zOU9LS#Ak=vju1c2Y&M}I{wZ&D!wDU+h>nQq@)g@hMnNGva6}2_#q1G9d3_pR{}oOR;KR?NH3qV0NA!gj(D`a|w47ch{1`Aj zE`xaBbTy6odI7HyNDcgL-Qa=ee=d<3YIJ1 z+(<+k-{hsM@W!MH$JeZI6iMU4mtTep|0-B1Q?r{^wL!Py&|fRn>Flh`+~u`iFleX5 z8n1=p8!S8qxZJ{*0I#y}2;ij_9s)ea!hL{eTDTW*sfEt~F0yb>;6ah@k=}n~CXn*Y zzsE1?5xJayZTYulWRJ*qqk2R}@$Zv=^oaD}-<(TXx98un{HwU6N93#g9+6l1_Za`i z@z2cs%&(bW+@3tYkUM2`elZ)lTs8!z?9Tk+emXnd`t!edXXY1;a1Rh0>d*(JUiGQT z^NVjyDsle&WAlKG7#(4#_fnze4&DdWO$OM?`BwEE*>)&u zTiao->mN>wqPmStPh3NbVT;>zM~iNFU5_3!;Cm3vwBBuy42x)icDmdc6-O?7K{_>p%E>?hlt|U*yQ1Imr?!>?03)lIax1 zG1ur%(Yj=JM*eV9mu{@XVwk_yvj6@!>M~B(9TX{4_EF5WLRgxsgw_a>RQhyF-3KU) z@*Wwdu!_Mwh=FGK_K+|}PXph03s3!9yoDpOOVXb;kIl1O{K;Q6Z9P|oW;-N$Bf1Dr z*9f(7`Q=0~zeosI^9zL4X1^36Pa`ynvxW#C zthlA#-b&3%p+>(oVZ>0=ww6+I<{2r|4d5GCDNj9f;BRTTjfScO{VLv$D&pib``swZ z8N*SpBpE}uHXU|V{MNL_aN8jm!x?_idS6Q1#Z~d&J#OifHR2$BvnenzIvhuzbGQc! zZeSWeN^nyrYtECq#^G-AJ-H^2sZ5Cb=JjITFkx3 zbO^2TS7_x#F_6;K;2TI}tQSufC00|_6?B(36^~jzBrZRjI!Aj$+*j{~j?x=*0aHGn z!R2Rjq!xRc{O^PzO@}DjVI<4+lXl)r)`NMIxcux=tW?sa@-wvtv5v7a{Z+qIAv@|0 zXsM%4rfc3CMCx#6@nn2`l7x(8ZtV49 z%Q{K**}51Q)|Ps0fs=f;zmW{P{Ot2IZd*Gl)yvN`q^jB?;kGrYNztQM)}UxHThJXv zPZ(G!dJs5?qT5Isr*8ImT(qstL!7#i#;KdbJBiW~XO7I3%rsp5xjPFJ{#+E;`Ey0U z&Y!y)c&W`l2H5#?qkw1H=YI!w{@h4l=g*xFEKHWV&I6WF*&cW(u$W7E-Wyo@z7=p! z;Nacy{mmD({(_t0b^UqtAYHP&Yguz@bk18X7sS`cVyC+x{ur_5g!4~4KxQi|i#OJt zmb*l5i(j2Po6_mFC2UBNE8MF+tgjl{YA<&=3qud^dcvTx-0c`exgADsidmWGUmE|n zhgG2Ws(7D#760LfGK`V*ua1A~AW?{k8dlKTm3;5C+N-<2`~FMyO)pEN(YyWfx-53i zE}lHQPT?N>W=!BL9rxFhkwwew#Y2`9Z>rn*jl%u%CrO*QeqJ1rYH!b`%y>@DUVQ$N z;?L{KgSkzZ5Dw48Il*LBd#6x<^@sKzTvwSfl^lF(HJX=|dW(HSjwzzYs=a?4NU5n; zxDC;YgSXg!*;Iy7ei6+GT{eG>_jVv$jck8KQWhxAD_%943C&!=ws*M6dedC;Y`3y^ z(lv>(a15}U+Z+nK(&jl3*sYs426lJZ?+NVWznU_8CV%c=H!rz2^NoKc<{N+hzPF(& zz2Pev!+2+A8jld2b~6oKUw?QRA}SU>yJS7TX^sDN|Fq`j4c}Ec@If&*tgrW%kayVn zdcC(*!6Cadyw~3{bB2pFv)=bMRKX%yyQ+EL+s6lptBccB#6aN3#yMWo$Jo9`NEO1I ze2x6CDvPO$@OObxQQxQd`K2`WX_^_b5G;?yuHH_o)W7(QVa%7<<-+hy)d+alLU4O2 z|8YCsw|YaQd>MrkaCT}M?REjn#VRdBd=M1n=%o6$Htw@BTe& zDP5m2Rirv<@>r^P`vKboW+#az=(Xpet+-OE_zaz5rU$o470-sZLLN&Mm%A!n1TCo* zXpYcUG>|H8@T+JeRmgshkdBbYQbm@lVz^XcJK~)*9WlQNkjGL*uB#%h4~#6mQ~X9wnpS+V zA3o=Kru;oApE#RWSK@4PJ>ifnIb-H^e}iiU(`^rEO>WRbwg*g?qLa4=oWj=g!1jPA zRWp~13o0XzS(>?LzAxCiJwV7wyfoVbj^|~PyRwl0q0!QVC!uw_^EMEJDuN%V>>u}a zDw`OT=kIMD#dxUkwgHh7U;UrHZ~as)TKj2VYkxyn*=cR{5I68ZJV&$s{I*HC zwb9cq)|bKWTOTO$^US?g?C)d_Y(%a9Or1Am!g%jy%Cetp)>sc`0%;$0vHx8lU5q`J z-RnHU(N>&q*~~35jH!w%6FYN#yP1b;+Rg|v_t63+p=iq}1k)ItS4V1}F{z8#-dLYT(m)FCvGMOr3ELfPyFP*$ejjPdRosj%{Q?kM%aI3K_+ zu^^+b1>bc4KUtyKML1~EJ(i0X__p+*yH#j(HrMZH;i<;`^p}SMqo$%7~ZZbJx znXpO2K`c?H4+j;wTK_J!>I5%YVB1la3kMBhmC4uHnf9ncSU9Mc(bKABYp#uKYJ`=k z@(o#CN|eaMiDmj}7Zd3iEn`COi<2=?PQzqOm=L43=PmT6qv>T9+p-tWP&=~8t=EKY zEz3`9JNgSvqtps-^|p-;dWi*1MG%L@ZTBQT*S-Bt6_RR5^jf!;Zdohcpb^ffe#Q=o z;QI+{c&hQC|06VMghX-fB3Wj>L9r(zf;aYa-5;^$>^|3>tp$r3Ho-^J-K%r zCmGJiNd`XG{l4gpkkz6W8mL8XoUayHr7{tAcz~Bl_4iMzzeiI29ctEpBuQhqv!-B% zr%_12aCbopFx*|FcH#^Tk-Nr{8P3Wae+#g)*_(i!&Hey*mCf@Gu(R1~falofD}bHN zei69TK3@i0WZ@;iGHNBZ@GP+CUa9v{VCl|Qz_Wpav4yiuY~ioDZr$9s{zu~rztWZI z;tRiNH&=WAS8vzxg@0}1D@?k%@C%l9b`@WE`F54lTH^~>>{&Cua6UDd_`)NZsquw& z=Y_@>nknHm;tSQ%CO^I~uYO8=p%+Cb#TPyxY2yn|oo?a_NAM^-zOeRuwQa;dq*UGg zC{C-#CfDr)^N&4QDh|dMrg8)fFE+=FnUp>Gm+{g_fAv%ZdOFFZ;KEsgs=)=_%bIyh zBDQclu#^8=fSvr`0PJE5TkX-{e%3`GXz*3F zU`mhP!%NenYp2mgOGzg7vtB2d{(jbVWbk7}(Zqh%Ho)txjyV)~t%aKdFST%E;N9EL zx;}Y6kq<9*K2eGxTXrsrY<_<`bnn5DR7I6E~PtV!ina z^B{5G`3UnMao_n_<^dN6w1zF-hI6&NJyNY_K`(I>jw`c{!a?jMH9qK@F?AGVhT-ib zfSSB%C93PRkjFxjcyT%fdE!O2qg-5|IG2+Yzqu}S7}v;rR)hna%(qD9fTI4vlMlc3t*o z8mevIBwH;5j`&>4svKg(X)UWn))Bwyvm$z{7GHdBT3>u9C00zJGE?X^6uOJ0*};y) z(?UtCM}cXX+SK9J72JTByj};~6q)e%!fuFK)~xm?_18{QvDhMF@nj1Ti;$(+J(HGZ zhZDR+QW#N+a}dcOlTQ~aQbU_}z+f5ILmd^}p`t7dipHWDVrXaPU%z2((D@3zsO7K((KigQxTWBUrLJ#baTfoa8Ttf z{ET`>umc_9M#xzXw*$ooRZR8Hx`9gl&dheWvj4!ea=}#XOo=3T8=FaIE)YiP3UV|) z7nq*gE2itcOl)<%a~c6e)1Qjgn`DrX@nM9x{+xP?Wx!PsVoQBkYoDXF>#yFIr;t6L zokNk@d6)7jV2Dvo``ZvYGB9L++!16$!C4|o4P4bfg--RC3u5YEaJ+v9W@*2@pyBV- z9VbO0mHNED)8XC#uHk*#66L+bV!TlY3Ga1{J1)Ob{Zs^8Zooyuq-k!x*uRGCYd5@C zw71wK9_0PczXx0IZ$jD25%ME`fi3k2t$n8QUVoMM3R&LIp-AO@eiu6ESC;O3_ET@tk&xzl_8or_ z^_AF^(3DONe$W19xpGjdKIi8;!I^po5$cec`i3eM>I@^)Df7C2@zO}#oVyXBjU>&y zPQGXVuwd#$9WN@ffDCS4mvc`--VOlXVEerhu$!l60K0kmZ{WIl`gY*mTF4>rw?ps6Kex&H+h1uB)?80pF4JD_@Knb~_{#kaQxK&%T zFnc#IlQi|26l})LmU|frb9o!k)I~6XQ8Yq|P1;MdT@dVex%R%q*ck)tboC{`PFIfr zcDi~9u+!CjfSs=H1^j2%Wt{>wohh}$kOR9<0*#_`J}IyI4jP^ zxnUFMy`U;}n(1Ey*wRrkFEm2*_BO#S^^Q<#R%&PHuO7Eh$oj)`$caBJouToRo(M$R zc*^56RQY(K)T*9ivadUwvfLu#B-ZhWr>M^RtZ^;Dln7c;buSCnH5WGbq_~RL{ixN^ zl(>svN_|J)of2gV(6@AJEgXGwqHWu-&7t#VZ`QFn}5yz4FqrsFGO5;M6ltujFfpLFy zov_h)6-2mTN}RQ#+Jh-Mrhn;-)L_a{lv7b5fuGP|N+&p|!uA?jf`+^D+mH@%6Z#!j zTioe_8<>BAC+oQP-b}R!t}{NXQXk zgt-1Z#S!uR@oZzuDok%^`&MCx%q&^ZpEnE0-u5-hVz`d9P8C1G9wpvz7Pqn=Y90 zuSXp36|IP5koQk)3AWx3rmQHm4Ct+atbDOmAFy&5EvYS-GK?aX_n&-|;Qhn7VZ3ic zR@1?-OLv|$Bj%9}68 zS!Rs$=P1QjseElfoV+FVq=zLm71LinZv~82ZWuFn(c7@ig%3ITQnVbBHl!3sLdl;9 zP>o`PS5kl~t~HcO4SKCTo5(o-sA;>6Y(H9pL6%s8x0>9>CTKE?!GGdPZ0WB-Y2Hu~ z(vL1c^&M?Q1|&cgSS5G_MCxz>swq9RN*AEYovkf(0iO;g=>k4SnxqDNnj08lD)q8~ zlco_7k}g2SJ|h2WsV*`_3AtLTF(m04t#}Wnsfhs94_*y=*LAN!Z=6l%w8qgp)g&Fg z*O;Wzd%1y?-V1?~=*=T(rac=UV;1uaH3p_VHb8YT?<7DqL*i4O0L63_@ zB~HjEpg|WGMr6NI!Or}RiTUxLk3V(O?hTJWb?2RlKb;s!%#1bubOH-IHvaS;j0pH0 zauh{$`(9UA-7Yul8q@mt<)YgOEq%hmQfT}sPEZqlffktIodYa0*ln6w<4<2I7!rTF zVzXHKK>TT_K8BbF5R{bo)AUVY@uyZ`xHwTSR&aGjVkIyp`>@xG8aQ4f*ckT_8cY?N?DzL1lugsC7p>PG?RAb~|QsR={?xlTE!G6y`Y(ll#Q3!k@B8D!4N zouXSeI`4eZ&ElOm&n}rr@2BdXg66``+g@gS<;PP|0>)hj;ip?^RWh8tW3@n zCYSsoOqN+@On=Rp2AEvm+-fpFt}tjDcT85CZ3G#EBG(+!0$uIIH;=5r&# z61}#dDIMq5@8=Jgu1~YPhuho9(!KA8tl#$%Q4CqXZ$a6(n>p6qtT|KKx!%o`MlD7x za>$!lzu&}5GgFfF`_W|BZu@ehWVY~sft_#p7Vt{@{1sp~PkIs9t=}&Kw)f!w(Wz6? z`u(j5|MAbypL%QeFNNv2hH^NZKMTyCIemC%=1)I-pYR-Y{`5VIBLBp$Le5yrW3fJ;(JHk*-|GWCWBmp<@r0gqpCaWi zC8H_-QPxW8!Nv(wq@*Mfv{xkHY==U$>o&T||yz*SQp1e=sEE$kt^FOd%^g>($T4oP;o2>$u^FGP+w4iLG=$pR4sGH2& zfTAygK`8omQnH3N>>2JH!LZ};QD8St?+13e{tjTL>!$%bU4Ij>)Ad&aJ6&H0{AcEX zX8zaUlcf3IQhYC+|8@DD`JY_VzdPqG`qnav`}w2zSQc+;&i{D8Ky&jylS-QZeQV}_ z=m4{oaEp16*dOqbc~DPsBjhrd^Lm&EdviazOcLZObaC=vFTrl( z2AaJH_5-0A$E$0U9cwhJ-oQxI1kd-MEpU7Wh^g*ZK^qyATh6tE{)1+2EJx2#m$Qu! zv4RB~?lh!hxv`aB?lj~VhBuDI1=2ZhK9NQqWy1}@If|s{yO$MrgW#6vuR4X9?C1OzGOn~de;&10t+~ay$~r& zL}qeyk1J~mWf}6@4_BtPmZs)!Q9oW76JN(~G+xdx9NdSkAwUpU>g_kpF;#Ka5$y}I zXGghs9x3;uxXIBzj*1;kX;EN-;}yj%^_nR)YlWH;{WU(nq-{6NB&Y2rH`*K_fh;drvtz;Xz z8K;VK6Ukr)&3`+j1rJ&(UK(oIHvfPywv7?o)Ub?e!OaeL47jERhnN=RNDBs4NDEeK z3*|_-aquvPcWmUoB7}TVQTVfscY5 zl%_*Mno)3&h{H*)4TsW(;Mo3hZAeErz3|Im*ZwA9BK(Blri$<^D*!7T?h}F=&?#4j z)LYO{2%h2)uL`a7q_9fe3Pvx7dlI-ta=sX-vfn}^=O8}96fNO;2f9ywxek(F1icB@ zKmwt<^2I2>OvuuRzoOktGRX1;Zw6am&`4VF${@?Or}qnM`glQ1m3=32QyuPj!3}7Q zlfx=KOe*c?5Icodx`R8!0+qUc-pAqY*f*@wR|Gd*Kfecmb&R|sxPgA28d9(6=UEOh z8d_<;uu5G&k94^Gz%~8+d!F`lQ|ae+Ur0aC)qa-WXnc<8=l!{e)AaKQ>E{oMTt6$? zeI$b{U-f#h^`@Uc9AKNidY`bS#{@B5KR@VjV}cv#=d-~ThmU!S@kky-pi@1Pg5#y* z2fLEGOGyDUS}%-zHBikRVpb^mYuAL3?JSFFMtlOr%78bsT_djVuZ?Idjd+@+N_IL)Bg*7AT6ULd#DTH6K-egqF${xh z(+EXtDvbzqVGkiBm78~1Jv+n^(gQ;5#N;ZieTLK?*I%_N3R$c2-D_&5BsQ#O>g=~M zQ-jq^$ul)moq1--%+Uf%wLtyV0u{0aKA2MAj<>?h)I@Tnw#1mJTVbB^^LqAy1pDGN zK};P>P8bI|+|vX%FqZ0uRGRP1)Bz5+ZfL!$Uk%o4)Yr%TEWvMZ@oTWsTLm$-&z$;t z$l=}!t{DNR_Eq6&D8e&tqX^G5<+l7rPAT@+7H);^>fP*LQFrO=%~n%76e$n z`ITVP{eJ!#ak5g?~)p-d@^ynbLW0u>>A1nW&v7ztMQ1 z>AYsK5`pME4e(6hrRh9H>p(Kd$B|)#I5Rcg5i&CL>_scVO;wG~Or7j-TltMxccwNX zB8|w>MvRq4l*we8Ozotd+Rt0q;1jHLp&+JK>iYTL4tJs81}ZHKsnqZ1TO4j-XuTan>NWk`-ywDm zt#s$|U`zde-q+#E`mO2br%%^@uA&>g&sj<0<5+;Pxco-rgZZVOTgFNRqMxfpnZ(As zepa-;B!jKLI)o6@&!s&r%ddrsAj`W7Vk*mBKj%5zu7Vq2c^z;I*a_gzrt%mJWxBV9 zPgEK0q8Avqv@M`cM-$ z_~pOCsXXCSnf~hT5ryn^+Sj~@{-JcQ|0}w2XStN{AHouLU;Gj+0bhj@^jAwz$d+)D zE1_Xh2@5Hqc!dO=B8AP(rIcJEE2YHccc7R3LfuI5s!a2(FUg~uL-+`s)+E0Jyvk)Z zk1#~?=of*w2v+ix$Zwvv+T@9u&HQEu{=foV5*aB?d3>v`q8uzy{YsV_qb2Blu=Q8N z#R}PQ@nuj2R~54*EjM;jlb>vZ$-4Slh%PCv8Yq{Xah~ct7R zEVH`M0_xGywvyX0OOx%^r{7Og546CzxyMc(n|8O&u1B-sgI;;dA6wke3KHc5A2;XRXd`+iJ(+j1IcY|7WUpLuGlfN4NACVGv0hyY?AEJ`fmhi) z*8;os>T$qx?DI>3-Fo%Kz;18SKY)vDo{_+X79IgC5nieH9AJq83Op28WJ};dz#?`6 zpA9TiZGrm&%XCcO-oWDB3w#E!ILQL{02ZG|;M0J`E(+WQScbX4oq)xhz?Mh{;BsK* zq>*ER#h|nSZVfEP3ST+W3RqNPE8v5GWyA~I1lZiUdhsO}O&DD$o2rIhG&(Za0ONX( z8dNwgGNAXUNN!|MugIXh$lwzP@h{S^SEL__6Z-Kl(yLdb7m0Sg_!s$8H?^Ae{!^0I z`=>#suJ@0IC(8~cwL9zmXEO%Vea~+o?@*~&o38Kp>;0+f&U}fx4a!tqy3<2_!H=H{ z@sONLx3#mytsm-xJ|wuQzKIL=EONMShI(cfht=!+nu!kgworHQsE~Ti2cl1Nh(kjw z-TG`Tjjii&n}t@oNO03Nc6BGqs80~}ph1}!RI>mZxs4>zAp5S zRRZ)^-B*Py0h1j8tDZ6}=$@fG=m8Tf0WWAFVk`2OTLL5@1n6H&z=;V0)+~^+Qr*^l z$xwN=k(3U3Nt=P>Dt`HlOW5ZD+M1D~h1I-8;fD&D&!Q{AfY&97hnn4Y|CwI zJVh-&;VI_xGRd7fh=T1Fz)d(v*YP&61yIZi?$mKotZo5hDjUg>?63-j6?qhRgN5%0 zF1PR_nEr0O*>QI=N?z;A2ybC|SD(gSHI=^~c zdmYf3m8VyB51wD$IA3&E*!fkydcwD@i#U|d_^tNpKM}Gc`&{YzkR936DOGo5>m(uN zMzt$=Y5KbAb2{%=B+vaAJSwmY8OdD^|<`>&(CGoIY|SA9>;jNx&_ zKkWYN=cqYgWSpnf=LD;?8~A4JtG3oq98961`>)?4bmrKf%!B}(>+D}1Z<1Pd`;m(hZdt<~~ajO^5Qwhd>hp~Oh+ zQ~U;2Ei3F(Xh%u;Tu@}KVjn601yg>iF_p(s{t>QxB1Y&dHA1qrT1`?a{jblZe001m z|7%uLy1p1rzdV-mUxVRlIB${i`x*K()6jpJl;6)Uf4Y>vK*~QW;0(xPDgP2z{*i`$ zN}irIZLgra)JV$S29}Yb}a0QJ3zZUmhzuCUU`#Id8K1~P8!DNQFz)9j^!Ckr4C}v!(#^tTJm}2HRoGPm3(Q$ zbX8a7;*Vfj#Tc0nj(zl)s;h3Hmg*&5CRwU66l}EDN)L5Z&f64ARlI5vitH9CQx7Za zHyqYTW~-z6RU~xR>A=oTbpm#Fsx7dyQ%3xUQdvar8AUC>RO#_a?y zHxR`1@LCrRuP4r!V^AU;FLx``AF)w~&@ucfbZIc!PZy%69){1NJ(-Q@A5Lf@x6RQwN`!SJ9mC)dQ5T}5EL9LTNcTYJ^ zQS*pX3tk$L>{W@BbtP#G>R{w>=OZeI|K_{|Gx$gzIksClTrIgRyaL$S(?!5eCZ7Oy zGWiJbLYsdka1EoHJ8sv;w5fOE4Ut&e8l{;h1$NpI=&Vy+Yhpw2a!C!wit3P@$0|S7Ogcc zT4mm?G=G+E^;TF6q*WX(y4)1_y1tlTUTk@d7X!_Uh5F)f^P;%G zjh3~HkoAm~%_xASX0%MBTfngl9}vsS+4-O1RXH%d%R|YdWi6v+i~01l-_$~6EO2S31_7YRB;LER@-gscEBot!*IW1v;I$V1 zH?Y&$OM(Bu_|SV(+_3obuIx z9L@4sMxkc8{z6f?&*FV?)d^-y+;#(F;vDm$SP^aY zSqAYtzBj2Brr%n|%X-GkX2y%G0P^jr*$@gUdWaxb^}ty7oSo%n%w#>7G-g1J4cRg< z##h1ff0o|pw>hBM-hV*HOyhhZTS`pUY%lQASeUun7&9M{OpKWa1k;U~g}irTW}oj9 zV*MLr|JmNp4^yYI{WQ;baveD>~}Pa zl?OW*E=Oc4Czw8cn)iNZKRk)f9${YGt%xcmH*G4SJk#GhpSS&;8=@mun*I*akxgeM z^*5-#j{H^nJ48o*b-(s^o&1gsgC4~jyfpni^9TC7l4PR4pA<~j-?Mq|`n%5dM1NQD z-1Yajz^=c)0(Skq0eCn2oBO3+O3cr1+OiJ*>3WN-O)Wc#l(Vsa;QP31ep8{aPVGtx z!JDwY?V@TC3f$JY-doQnX6Zbb~?s z-=Dp9`J1k{cM;^Vloc&$4;U+x-)LD|ekrbQEG`g-l;(P}e_d-RQ=AQXGI^it6)J8U z!7b5W-FBdm4IqAhFSB?{=40eG6QSfYeC6aQ;6EXC&ZDWD1{Mv-cMIt6L$pqJr{bdo zC!y1%9Noq66pJcY84)wdpkT1ndV?$YSPC{pG|y26b);q9*^7ih zt)-Fr&7Wwz6)@b$jFkw4a-8M;dbVSb;=D-GuBf+NqMalAHprLpqHaa#AaDmQSmYnavsH|yVqkfXsNQ`vvCGZgN+&7EvJ*xq zn(%L}QVFjh@aIoT=XxKKtQ;qS_f;tN4QP5VFaLKL`5`xVd~=VE{7f_QSs+2v`z!e6 zyiBUIPEwr{YSwuPNuwjy{)~=T4Pwef_@-4G8A5nf*Gr9P4CWxRuDee1!^BMBi>eay zj$y#%_IZEcMHW6Cc&>%J1JAPXX}~h#T2am^z|s=}w+A-s!@bRY8!2~f)OL5B_+Z!* z^vf}yCY|5TLKaoOY+((0Sr01N4gIoehw7K`DBw=3UuJq&JX1rzlzJn0Ablb-TjcdO zDfTN2roG<3w(HB__qVxbW2@KhU^_}*$DuWY>FpLem_)F>49bd@GzN^7$!}C|Dpn=sXIooR^lvom?sZ zq2)o+DsRVG)CoHK{~(I7tmgSM_r>n8Wy19hbgrSpqvkT6Ls%F$&{-?ie(=?L1M@;t)>Xm3M*+^+5S8+Zeif6z3 zHVDDzjs0r(;m-ajZ>mx4$gPK{@o?W4NwtRXGpl@5&vuy5$OUzG5peziL}tR3knE`Bhq zok>{O+)BRZE&A`s)Ukkj-<{1OL)WZ3|b1Zy5@JtJz2V835 zbAXF1JPcSAL@VkV04$v-a9?2c3wm3>V9=krh08^2oWF2svcDkaLH&i{)V=ITQoG|X z)S+Y3?f=T)omn;P%8DFaL>-Yb-7er=zsz=KiUuy|Ckm-{l49e(S6pdxtVDm+#w%oP{Ma%b zW~0gCwSw@Va_UbGLscQGM!V481NOIVc|;VQE)1y$Z3lG*Wd)R^)8G3$+)D*FVD?`t zHTwJ1xlVs?K5p0gdnKGyqaZdXNYGWb(2B=v)!)~-Qr6O`LDG()6t~UeY>4vpw_Jdq zZktC{TK&BtMsXKA<^2@eD^+>>)0NNmvl^{~?5xtQKK`ERIK`;iFhckmQ=%lzaWcWi z%1cr<8P^rf6*5KXLs4k1ZlP0@V{6uPLCt#JA%tf%)X2=!BVJoF2Q<`NxQd3_Jl$w0 znUmy8W`t7o(@x+G7XA^~>8CBgPCsn|UTX7v1nl%vIq*#T{B2+nbkRL)fCs7CNtul7 z#=41_pFHx{>zmA4^i4fq-@G*^pl>SD=$m$;Z=T%84vBHTzUk9Ap>J-WxLxX-qlk6@=lGy3Lc#Z~>1M&CrD34ODO+`+;0$uy^LGLPA%zWEHob$CA(I=t_othD;(QHNU) zs&9sZE9`pv5vOkokKVPu$#aG7A4*UiTj;eET8qE9mn-ERL^a5w7jH@Ui=Q6l>l^=L z*XdMFQ(``<%5msxx{Q}eiN4C|%%RP+D(A}V^eX32ib+yA|7L4PlFC`tHALm?kw)db zKUGyuo%|V%g6A4u;AK)h=hdud1oaq|vn~rQvVzR%RL)gWi^NVv=WLMNR#z16nb0`} zz)t5}1nhLqFkq*1@_?Pr$pv;g=X7AFbGiVZdG?=II!538o~&;+L%#Yq5;a(M3aQ=k zZ|c{gZ?b%SbN*~!--yFg>h7z-Cx09*368MOf=&yP^3R!RG<|(Ru zl*|s~4i2r6nJ)Tm^#*;eVeXXc^h}uh9#?Q% zAw_4x?e|o&j*R3B~4YfPO5HXhL?uOOTAC=tU0Ymh@ASAC>io5TxjAnnzjOeJC!k+*K%^n zZK%`aREkX(B0m>2vND~}p%P=~9Z4PRvL8K3r*9>xk?!OP@SdX6Lngp=DOUFZs7_az z=g02W__C-*od+h>8LL_6B$7tIFWMW8{V|9E{VqFEa4B!+o$7aPU5G4~+%QXg%5m8V z{hkl(^!tUtPQMQUcKW?Pu+#6S13UfR9k|q%c^a_rOZ>}IfQ8Khw+GgFu5mbX|LiQ+ z=>K6Glj7ljjsD-O7X9BKq5lc_+4-&2|2#;NmfyKdMCB}XwyWOf@%4lHzh095r>tG; ze*%eGgVp~eRsSn)t@{6lB>hkBpxzxx4y*rJ3EIVM_aA%IuKy`3z5aK&Y4rbOtN-~H zs-fqnL;eT-4<~EW|F+QIX4bC%T`6hwKc)EkAEJEyU)!fa^U~}8NvZmOT5bA2vv&PY zVOIaM(&AI5n`Y4eAJ?M)UBOBEziyKLzvq9^|0g=RH2R-i;34||`Vgt`^}nMcS^t~i z<@7&V+}Hm~RIU1-%6$D#ZZm3({-@Zq`X98U5&at{#7P?c&$jJk{ZBHW{~M;${}iiX zgi!r|U5z?#Nvbnev(8B*t^RK!`X9u!`k!|R{V%z#t{%UCLjPX|?DYRgV5k3w0z3VG zHn7wGJ%OG6?*Z)ee>Y%X{{#E_A6WIjb^iaX0WkW1d9wbOThrD5-#|!x8C!05%l~gw zi~ip`q5tnn)&D$5l9n>2^&)4lm7E8&0~*jw16tRy<9H#~*o@d$cUH^7gRF>ozuYOq zZM&=wl*w;Ymm4URX@D$2=rmvs@kpu2;#^Ep%)sx8t7{47lQ}vK(6sf6uAi7N1II&r z&0F4i%GM7;$jumGGl8*bEy3oiu>`Z3 zbGXpwb2ryw3BKH68+oP7QUWu9dnn8hw}Mrl;;MENN$m>9V(QYlvpw6V|xvN9cZ0t$8nj>4xT}aft3B_XWGV?_cOlKsfJ3o)F zQD^I!_4X+&A+?VrQt2vGdvM`5P>R_-I+*UuQg&o>5)-)!Fdl-D+aTa%XZV}x|#aG_rq<8dXCh3YBPS1UXd_<=lJ!g@w<;= z(;2@jK}*tJ+1#~EQjOn!#88tAQ6|ZN@!L0z@jH-Wb*>j?{C*u>qt5%^O4Rw!!)nwy zgQPKjvk%3ZZ38i#@q3haI@go^EpsKewO?ZoOW3|kfSv6-AK2NxLBP)T^#yjeuRE}_ zeWw9C+t(G?*}e|I&i1tfcDAn#aKiTeMUy{&KkV3K`zI^tI{)iSo0lC;YB$z@*6gSD zZxy}-0lt;|^2hDBZ({A=TXtItgQMvwttcdj>|E$Lc=x$JN>$>4CmyC8MAvs>Qn zHJSIlrJ|C?24ghm3T_Jd`N9cl!4(ddZD=7T>)?=j%@))44)N;HO24=)q*AxVv$hHfGiW*Y{ z4gzqhYO6QFk+1|tNWb5umF7vMas5?)Tp@eO?Y3iMuTC|qZJt!^r^FqTsx2pJ^w-EE(Mat;4Ct>#@Du0#i%YHk zl6zG0B{!@Q-+eRi1`B@(TyEiaffrf$HQ>1xUIjeM!Y>00Ys42{4y>!sgW9DoLDaeh z-}u`LlJ!j~#i_oLLA&fQQoEyX4yZ-n9O&ztZ*KDSO_|<722u^vn=R-@t`ui4k|MGXE3ULTR-(Tu zvI<#&%(+BGc9PVzj@&_!-EpysY{a(ZQ`(XwFSFT7ZnkA5og8VJMogchC~Rz<{G7(Y z3Fh53>$#?8JsqjX$Ys@0NZP$*4#?$9_=jBflUihtgq&B89G#HMD}bF`{sY*_<+;F4 zF3$#@3o}HH`vD7ML>7Ai>(^IPwqMmMh<1x7@>sm(51uzYNJVWe$`fv{;+H=w&7Y;s zMAWcE)!rQ}$`n_PF(*OeRXDBo*z~pfVyrz+UCj%=$0bOVfc1j-gA|lS~{5yiYK7udke&UPOlNwh#7i zbGmLPK@pVJ;`FhVVe}nn6u7&nb zx#=I-Wl8_6F@ILJ6#mdVnM8g}KYh(INmn_(FrkpIEe)3!kQpxLgmU>dUYc>T?l@St zkYs|(;{;R3iST&?862OFK0d+c9AL-i1A!f%8v_3kKD!<2yTk88YvK1{j^8M(wESN3 zRc-vf?7|R!w@SnBE@alJU6@oK!b`*No^4@aHh zy%szW=R#f=d3&3bJ9u*Aa($WR{NT1PtZ(xV|NP*so7K0;fqC956UDb_0%&$6MfDUR zbukTS%u`)9yMoQ^JaXp;k0U8$zNWYh1-C?h)wfZ|>cO7pt8X({YN{f4(6>3195p8o z?mS>eNB9$rwBUrRVnpiPC+R$3H7(S+&y|83m;*d1xHV=ha|ZaIF<9wvPYA8|s*rlk zWbGD*_)BQ?uVYxHZnAck!(9Qc@j$&z+Dk2jcP*}wUdj?q$K^K~mxuvf!g)Y}^gQ5d zLW-uB6lWUAVAG#HFW7W5SzGhD%r6YfhH*=FISa7OmYPo@7WeyklT-A61v|QCNWBfNE za#5Rei0e|D>wt^9)=zWI)bb*%xz)F{I?E9K78bs?y)A(N<^Yk@KVidAQzFtfBecB*@JS#5;8^BXNT+DN6mr|l5s zZHK0}F3X`VaKS;nysF+4g{I<_Ku*5OD}mg^{>icH_F4k~&z=ay_1~^y4X8@)%NI_Yr0A@=NP5~_Q zp8wE$eTbLfzi#1H>g3%e-BkDqh1%Pcm3S{djyS5x36^P znq>R$_bVg*I{~!n_2186=QxTt{(B~p^xuaGZe9L6e^kVO_e5^D;kg_+VqK|vpMTz$ zn(-$*{pcw~jP)nR5ce{;R}t4`?RJfH7i#-&pTU*a@?8$#dE&;DtNiyyh*hlrZ=U{p zo>!s9e+LcjOSb>+v_0a#CtxzOUjN+~o9I<5iT~b&jot35|AGxVE_usjYm#B%98dqf zj)*b!w*B{J@G4c`ul;xR%=-NIbkGz3-Ftk*e;)x$<>vVUWL0iq3YO{W@!x$6E3-WP z_b-_q)i7$)$l&(y^xvz23+}8gGmZb=y0?D+z2XZko3H74UHUXx6aD<^I{kOHq4EH! zxHS4$P%%rx7lJAHZ#ss$-;ijB9Nx}*^Y9qwy%?ul#=f7WocD*H>*__E_sne(=l$r6 zzu~;olZ@ty^KOZxcHVhVeCV`x-lOJ3oOeJ7*X6t$qY@dK&dbQH`i3~~T9A$BytiNp zA6boc{dr}?dCtX7ay$~}Jsq&ad5%ZY<-AXgJkIx5@c+PwGFy*{)77zXRB<9!twPWvy|2`J5@!xF#8~>dI*!b@T zfQ|qD4RnnE-V50H?_U5L|GfvW@!wT|jsM;WSp4@;^TNXa_F}&B-#eWCdn>9cmi>HcAEI_3iQFqY_3_a?5zEFnf1){DF0nzmEZ;%&MX?ehoP*fSd=|A=Y!q)sqRsK zq8MfO+J7QFsux(dGC-@|^TGCG9#TqB=Yze1Bv%tg3T|hRiFZEON9odOX0fE(k=t!* zRv?Fo>GN?eZnQUXoDa4JOp8-E%hT{>fex){t7kZe#4~`+;kgimY*M_=5ZDWGD?uE- zRRqzK>%n$@3E#K+=BKG4%z{Y+Y19+v*lMJ{_!z}=p zXt)_*svYC`Mt~_z!al%a8~W)pI}UCA2J!qE-#O;v{+ay?UFxt0XV~^&$352 zMOcs1k3@xHxYA$CQ~RgIwQ4TAs`zHARwF~n1Q>nM57swTxgkKFv2QtfwGcW5(0H*f(?Oy$$XH;L=)MCJfhQt-icSTdS29 zN37MpC%u~b1!Q$-?nO^UtkoE7Fn3svfk?WnRrfg7>JpHJwd&w$tuBZz^8+wuEaZ3C z%y;Nm;<9ZQpT;nN7MKYc%z(23>B5;(Np%mf>(sGzg+~tOm6= zR6eA6bj4NgT^N~7`WcHe_H0t`I^I?58Fx167Lcpr5o>1Hm_FD&n`9p_mb+1lT!xKl zv1g2R12Ky2^M^2Oj53~B_?2Pfg@!<6*jV|d=wB!5Un|Tv>T@;1?QkOyJ_1)L8v;K< zvKGqs0hIm;&U_^GnHE2*uAukjzcI-S8w;)fjw4}q&v<8J%)LOAvj?(Rr+^Jrf+Vvq zjX!L>0BFdH2vO7;pQzFHuh9AqbA7h`E4DZvDO*mRXJedAo9i)b{4td_H!Bz2-*e=+ z5zigP?!#;Vl5i=7){N+4FGW(B-L1o6NM8k_%k1joF=n$+*^j~VF)EoI(qN2uPiDmK z763MO_g26aI?r6dYc)I*aH)o`09>r$$$$$rd>LTMjN{00fGKLiBLT~p(o8qSj42QH zNH#U!bmmUS`0}5z*XPt>uY20|I(1Bpz3z+~j;8x^vDUSyI1Bb#UJOgFaM|nSuSe|l zj?sU^UI($!90eMCJp@VG>z#sIm%YCH{D{3i5?s5DQE%i>QP?!B%+zDAFM6X+d%gF( zI_!00gX?Xt*8-P@r|W2AuRq0#NqzSE1xQjHh_}7ILKEFSs!n@7!%*?I*T;d1nf>nr zreLqPw5jji;tb>vxw@9_-#<6TUN1?j!(MOMP^Z0K0Adu|DG$W6*LN8L5qsUaJYugW zjr<$-x*6U~Q2HnKdh>4EUiVR5LEG!YFNxUe0YbPgd;Mn5h`qi6xm5{buU`V$c+-4$ z0?pC;&cKoll43Z!gE5D_PC-&l^R10c^PL;VUY`T9h>;Vr*tV*lM5g(Ui7xZy;z*gV zVRyQt%oRu~W1Tw&*0(hf;~DEWu@p#ST|`@5z}(udUN|;ltIq;#Y;|YA##WyI*x2f0 z0UKN03b3)&Edd)_-5jv7)r|lfTkQiZw)&rYok@K^=zsd&*m+`@Efq-9)+3PKp?)gQ zX9HsQ?lh!jODW8*{Vk+k(z<(aBl=rNv_z;j+9_3}`F)rMGzig1f zy@t51kp7SE?n3P?4=oICch7QPC2mZ)YMNy$#46tHk0xG)`n?J@(=5dX_f_DkRyyk? zX{D7AuQh!rTL~{=L(;qk!UedZl^O^Agd|Kq0=wvO3#}wLpJ0c#yXptdbXQ$%S!`=q zIG^mhrdi%1Vobg5Ef1fASE>2|EP^m5-j_~>^T}{Xt}-bske(F24)kPFIQ?9iW)U6v z@IkMjXRsH~bEqSeO}TfVTsO~cym&TKaUBirVB)%Tu^W`Xlki_wdH$@x|2t)z81X$M>It~DA?O6@%g z$ViOO`{H@>>MenAE=tc^&uhcvJDw)CpNRu0{?aQi@&!Zf01pq!*ex?C9A&5%5pk3J z;U<|iWi7lFAFsYrpPU$!dc@@DnTs50({z?;I?uFdGWRl5hlT0@#)XQ^!l;58ERgoJ zZs;6oNtDi%wOY0d@n)3jGY!^ApDBZEtg{AF zpz{F+!@LH<^KeB6NecQ2q0i)6JAN>IMsOZM5~O8=Eq?R@=euXPS+GsbS13|cKM`EG zRq!ss&9#2SWMaUdLvGYnmQf|GOPPwC8A=qQXrDl1Xl0)f%vr-Pon*>aq}1C7$+{{DVZuDowsaJ-e9b9H%O|rIY~Xa7wK$+l{|IWJOTSV|-;{?BDoW`a2T?v* zQcJl?Ed|oGOq0^1l^dlWFQu!)Y01q@DZPQzT}nUBls*!rD>XTF3&tv(B2M<7f|(<} z!?ee0i<^1-MkV`?#I3lNZuctP+-(!Rtj5yQ-Kvs3isV-t#7fT{Wmgh0*1Q^1b)&&u zN?ezIp5{?#mhmhX7~CoL1myM?rI(aK*j6%@yKlMbPFU2}Y7v-`%MXzIyc0+>Y|qqou$I`H7HWwH3+}a7TUk=vOq1CicYu7CIJ> zV5N8!?;w!&4r4oO?{HUlu^hA$!-Fjr(NZ?YQ9@v=28h;*utY&kHQ@z9cqB=NhbaOV%uoHxrb(hzF;!u=f~;26*0||X z5wp-S25l;4=w=&r@AJ~kC6rUA{*-tI1ry>m5E_CjD%dO-CIlNSvF8>{aH?tx+TBRH zP4dg9D%bd*SNTFu~2IP))h;V9126B#+p@MfI@80YtNkae?bJ2P<@TN0)Lz$jhm=#(fLp) zlz<(*B7>40A_Gj{h~|e>QZ}qFP_TqJa{)U>lGBi^lBGJlHRm{;>OvX+xc97I2OeaR zM+UIs_ULic5NBL8gAd*l#o+$0qZq7FNnvn@f`!4YfE^6JiKH6p&X|V5>q#iWHPofv zVe$HlPT)=EC0oHr<}f>&7zWQ*jBuk;!*>EUV_iRBGuFKc@LHWG2e29IP6u49?_UYn zjCH31&eiv?08FW~tVw{`AcQ9ZrVT)-<{J-~(P9eV5r8}BJpBQ)v-1AAfT=EodjOU( z^Pp+7ht0~Fe$C9mQ*ZE%o;-U*&NZ{A4xN1URNpZC!`js7$uoQ-eS?Sk`n#8@4rUfK zc;K#y7x}XBHxPfV@#h?%VtkrcGl9d=n@iUn1qRJnw2t?4d&|&s3z`Q*>&>|0XOsFV z?;{#kYaMZ717AVfnzz!PhM8CcWAij3fLiMrZ4hd$?pTXbQ*`OBS8>$`w`#5A=cL;t zR!^?J%>63vhLh;t*1(`WjqmBzTEjuR`q5xo^NfWoP1)zpS1=yH)9+Fc(2Z)Ixe(k0 z)03<@ck2i5;DPJ)(!Np+_e;F#C=(r}x0(xx`4VqeJXA{EV>+~SIFjmh#|cp5!-@I* zrLQOX_21jm2-SU)X%}a z6^Zr_rX?k>#{W^x&wnR*QF-(PhMK=f{NA2F&#Rdw+LFJnJy`Xqnr#TCH!lE1z77Plix+~L%XjIIM)s=1ZD!7U3-#dcfw{w6b&yR3h|i8Rb=bwV z#B`8vo%c>FsCGdscf_^sM9_bcp(6uL>kF)?rM{}@$BqPfn|W44AmX4yq%Z8}ZR!w* z|8b;0!lr*C=;!SlJ9kJd_t|4f`VvF>Oko{*1=bUxV_vNPbplB5(>7s`^)Dek4y0ok z&mKq8K12F5U<5~jbVA;yBy?sksXs>2OKj2=SW3y;H{OG5yhydjdi*IZkohE?uDFK4 zJ-Hr8(tT~x(}naU9$a5S(ia=j|8{T)#;#BU(wdWlJGF#)IoIB)$7d&GlQ- zu1ZZh#8H!bNV?D_{UX*>^7f6M+utSY(ImY{kxr@qYq#cYn%<( z#2P&S4~>3v{a~EA-Y<7a#2zoG*#=f+KDj-3U3WH8hhUXA^%tvL0Ud?l%5lZdE9z(E z0Bx1atgFw9SY;T?5^Dl((2zzO1MCw&lUg+N39X=gZ1Yk5xC{h(fmiEaK=#})kK=c` zA_Giwnf1;mVww@!3r-M8cM!em_}HN?w!0gTuxXj*;$^$fPE}m=Bo_~0&M)9+5El&d z8jx>SGX@XJ9(H(+604uhh2S(I7mguk&J=y>R86|bBaxiv3gHwIR$sA^NeoHrp~YXv z$Ps*rR~hsOq{qBdh{YzXK3)d6g8qRj7)>F`u3!mSVkW3g1!lBOalCnu3c17a zBvf~I`^lf%%RopNeEeg_aG}h)56S8)Xd4`x?gz%P4Nrm&VzdTX))DU2xI#xEy`u~1 zhNLnQzB%al_aJACkyuc%6FmZUqCbm}F$u>2Nz4veCIY?>aHWO|0UJA!2Y98vKM!!3 zhOYx$qTw9CR0WO`W&);=31#;YkN^_rJfySFAA;BxIwLEke6#6uTqiqrxxl4M!y45dFz$}-J4=2 zqq3(`HTOKK`}NIe1?4b9kBD_Sg2)@NO-X;$T27M=$aw`Qypj6!vIKrJuooS-F!~mp z(~)#rmodkfjSe?sJw_cibV0O^cNWLE+Ch;uPyomPe}K2 zpqmbty#O8#^!20R&+||OW7W1&*IG2FdJ|tFRyjW3%p2c}>=|0D1CTqG{p_|B=@Q6K z0>e{1c^?WQ(U#t^t8TKv{fU#$F1yf%xG`~^z0TFq;J)BFas6pKce!evt7fTY_y*5H zmk=?wP~#U?7~E9gss>4aSoEhA^=AQQ`}CKu!}}oFfE+~tWjQP;Un78DfIfd<^ha=Z zVLQ0H>PLBSq1L%hH!Qq_cfj4c^3_r9dfR&TGkBG@x&^r8rIj$ehe{xyNKiAGlGaxJ zPS6vpK2=$D>13b#z0CL($f{%#z_L-^zU*ZG?{MO=!pzR5+DtR7{0BDBU5%r>s$p8; zRD-()xT?gBOQaQ=vlaGtV=HhfB`CA3fsh3lt9z|zQ zqvSf9a@S#i=$71^zANVrj_rThSCY<7h)k5>S`IW3DF`4+l7?xwkZ!2%2{&k+V;G?JLk42`P54E7fEzf!<>{mxQGGHp*V2|Q&6`*b+4C9i^` zj3q#;n&_do_SEdtC0cMjk;`492_*2b9XH;*nzHJi><{3Ut5)4vtMP{5kI3Q{elrk^ z6|}v6cf7&HYbPGee1KVm*h1|n_uIv~B6x#Zx9qJCNMy)QlG3XVrJJkX$%orLPtpn)wz>>kIms%tt{)38psKxC>yBL)>fkqf> z!$_KG_LDFD^~eb98pu$`bEh+%KTGZn)& zM-4VJJ46oa=UZ}1B!;~gu!&(80ta%gabayd!*l|A%q2ne$fhaDyKl^O;j*KC@`u(J1y1 zBH>L#Bog)>Ij8GLxXkK)njHy8cVUc`htY1FP^|m!rL=}JmG|0x?7!(tt>3V&97rn; zrWXg&7f}s@qZY~F_!&$lA`MkoYF!H$%8u1QSq6Q3ZhJ0+PAv(ID$BHvK=FaJBDMPY z-{xL@>DuJjPK}qIWM|7A_iNT(_cTjAi5L~3ugtJb+F*l=!@NDrVQouyp|(j&Hnr!jUXuVNOAP7BiHzEy;*zTV8L?LZ0ON)6uw*w~x^ z;FbFREr823JRk7i9|fDHpa5 zkL4@$|3zA1YZwW-bm!w{u^q)6r&x8bMtspTgnW>QQN6@5W_!lqUhi4xM2|x4G268U z_k7QCPw*&LjoEq{#01YmtD3rNYWI@bdvs;rvaRF;cZ-!QvbJ=jjVla}Dh!NLt2=20 zFrUTN9UF|5EV2dzc1w4zN11Ab7BmHp@{A9A5iwS}#s&>DxJMJ$)ucY)Dnow~)_dxC zf1;tG^`56KT-n5f4`Y@#LPBB-vF7Q)$2{Ot1NWqu_b2YdN=tq3Ps}z%dwDW+q9(c+ zMC*9pt+S!>o2SM6G6{j2oV&fpY5=C-+-QyRaDsFE?@M=5ai7RL`qTDzf}C0d!5E2E zzVrx$sB#=JhZ8)SxHMC}t9EaZ$c*OL6?F~(nYiKac!PMd+m5#cqHT_gt=C@F=GeL9 zF`VYuW69&A#$t|Jc}{Dt!b1n)X&|i3@uoXqV>jZd%N);xIlhH7WgZjLJ-#i>tL^Kk zf`~mH4A|J?zJN^(*b}gc0lNV&!ar z^$6Qu=V7@H5=9xV{+-=}sx$je-Kkc?m#J=?9MYDkKac}y1;O-!KzhE4*Yah$@lQcow>t zxG|Mgmi>8y_^YQIy4X{le`L*7YTY9#9YrpcQy2=sc9OY!R_biaGxh` zOik^ksR(K*!2)?S>s*g=Rnr6w;s@UT&#O=~wKvS*-s|oEyb6^Q505m6<2?)Ah`_;B zQ`0nGEYvkU-m}mka8+-8zLZWkCD}h24lLH3XG?3{X=r`q>EkZ+;={C7rop|>)9E%O zZtN6F39Jn}@R0_0yl1%^8@TJQTIF3^#MnYjYdvCczb6;2-ka%FsI*p= zL0qobk1-iX1F`yICG*tB5Lj^Ff+df0;>_j^j5}@ffsd426)*##9R*T(4uo9XF9NE= zL8f75QU*d!&pR@X=N$`N41_v(dfxM+3D>MPp10p!@TTc_8sm8vROF)maJ~&lmSZ9M z-XYAbeeZ{W%~)t7VB>pV1#EopO2EeVJ_FeJ-bVo&-@6oW%oypQ_8M^1r2KC<;(r&^ zP+w&Ia1!`k*Ab~hm^G;wRfiWIZF}KAkG8!qR}2fS8r+~mRqFH;mQV8bU6Jg64qU`q zgzPKWmEOHw_lTbM%S>5*ant$M!ytzDAW)5_Vw^{;@ za@qfqDVAJu+0P5L8NgFs`|kbdMy}Yg84gmfN5n8xM|RAgAUo#g zA$usTFvI#mXtI4(Ro?o;%bN85Ga>$*d{*3E+yrPljc1{wy$Uske!9W^)N={)7>`2j;N^6K z`yg>$R_iOA+8e9Zc4dFg)0Lg*S?;66jjim_tn6BY*wM4l>0X7J%FZ{qRSYd%59h!(CbB)fyYb9M3}65;3NxwuIlk&GdiILg#xGDqig#gUESmcTF$y zD%8XvqYdsGo-t`-uR^9&vHk5 zl&hL%hC%$?GbTOGt56egbTzn3JY&*t_PHyoBKQC1>Y7gREVK-W%DTRf1u*@>3g(9N zyH)FOGcwr{D-qL#_nI=`r9GOzpBHoTCg6C3xY09qZAQe{LQNAMZ*YU2vFiu_O&}}Q zfWys1&8`RPpQw5JRxPcwJsG-D6aA$PCu*u^DakDYVSGeOCR=v&&N)`SS9FWql_?ne z0~CCOGOE7`|H65XDxN+I}#F6`|~t{k!Q2 zW9DRRqgQ*2uFP}>xGwMd%x@k#Bd@%@VGz3#(Pe3Kh#0R~?l8D}!J69?^zD@N!fYlT;CkSK-pt`^9<0Dop(Fhx>pR^I0|{|>8L{1AgQLS<~@ioxE*r3 zg65?VAA;u1dr<^}X70PoWoE=EFj>CC7e`{|CV)-M>;r6K=HHOt#LT+^o0xegU=uTc z3)rk#?f^Xae~h42{QRLaex@Qw{M-w?uj_);A;iy{#!CF`z3Mnl$IoTfdaQowS*$$l zlAD`~F0-(pT^|T<17B4rSV&lfw1o10Z!*7i)&#-NPNc2b|FfvP_1G@<%I4_XNwVo> z4&13S71Oc)l==axk?j8-*J%HQy`OwUN_}q9T^A?4Xw+)11#^*$$N4!BiuUn!bZlk2|wEF{|jmgK~nl-7U-`#5vfDzkC)WZAMdyOT^ALh15iymb;hv+7LkvCN}86AxyH_Jb=k?as9Kdfl0}B9}tF`#R}N9L`#AHl>Eo z0vMEQz|V21bSC-4ElyG?vt}(bok?)IA?bEdm+VG+I#|64ofof!1QXDm@J2`gdt|Ub zTZ*In)EHE4mXox83F-)tF&(N{-p-W{bu~`ut4aW#L)o6h9&t4{qVyMUG0E`|5&fNT7xedi z2r1d`slR+gXV7D=OMgF{6VcyBD5qZiUGZ3y{$7iuTYneVDE&38dg|||jagh>`a2S2 zjQ(0U5mGyZ^%LFtTlJ`i{w|KAzqQq(ze%3@`!yaq^tT9vmHw7K25tNqPvhzD<0R|U z-{r*6`gn9{M1PY38~r^Du+iWB$Zz!bcfdw}_X6(2Em;R=c4PE+%0I8aC3WcU5?g_biRl-{+BZ>+klezoEZJN^y1R z?;?;f`rC7Yt-mdx%CYwM6!77)zYoRH-(F;ohuM2Y5&yzNhyHHCPH&~ZQj4}6eHpOP-<5#-jyZG-tmni3dHsF34*gwf z>+dei97CcoqT-Z|QH$8$$^i8D%lP(}k7$2aUgOf=;WH!p>qj~D>TlPFqV)G?Z0C0C z@3BAr4gDQ0#nq+1TYre?Z^3w5e=o&YB36H=gAbSfJ`zWN=Yy`S?Re?$Wq9b&-&P>3 z^f%>6Xydhb8c%;alC0DIb|!|_*~Ng3{@xAP=x+gFqrW!;Hu`%LV57e|fcuU)bPKHX z_j9NIGJ=%&w*&Y)OAA#|;Tf5n>u`o`)GX71Fl6gR@XY zY@57qd(UlD<+B6j|6o-l^{a@YN6p<}|0y3)(chh+75!U#)R}daD0(kc*DApam-W7a zIsiM`$)tV-H3>-!#bUOipScrFj!`FGOqWsT3!H6BYaUF><4C)CpeY08tEITkC^_C| zo~pkSMW03Ho*PR=7chSu6#Y-sNeSjxERv*tEw%pvSJ#-Ek68QnP*qtF*=eI@XG`sS zvVe#FV(mMT9eL?BAfIPKRk3!Ig1Z=?lvsl>U#e;^I8BiR>6k^{9$?#9`;{CfMAyE= zx<-nln#KEk)2?r&_8k9P8>IFE-iO*(Csa48`u3wR zkC`ez$}#VcOV5|)bc}!T9Cem*j*c#;DU!+xbb1DT`YPmfS%DppHpasLVkv4Y%=xOW z%#WIJ4DlLZV*^$JHa1{6U}FOw0c>o*Lx4*(?qa}HiWJbf4=_bUxCro285qlD2;LX% z7QOYVp24xb-g}Yd7#~kTQ;K~k!s{FB@LjP(8XrGihkaOP+lLl#ZQ8#n`%t^zC-#A< zBI_rW;`^fM`PL4VYRKWKu^pB6wA4pfN`dXzb|h^_1K5sQ+pMg?qtqR!hz{~%Z3iE* z_uQ4Gd(Uq+YUeAZ_iTnJtVt+8;D3cLwS;&L$cdy-8+>nMEz+_>zZv$hvqObKg0mUB zyxq3rx38mn&yifKitasSRyQebC5!XRRbD3-NY7e52Qmoq#zG&gH_&A?SPXwzg@qVx zJJu~g?Z1iCK5FF*^L2d0+TV?;itWIPg+}c%O=`ahJXn`wO*r6RL3YBt2Exm6MOE?T zazbJ|TA;eB_JZ?1rV8D*W8YWNwQq+G5>xvUtGg6e#^U^PmD&rWYyUjRp!PJb)~YeA zy?_g0MymEhhn3}g8A~jw-^Q;!AF=lLqN-B+KWx;lQ>FG5;K7>mJ8NG`cEY>{!b@>Q zRq=8tA=JLeN=9{6?FDBGc6hsM|Hqfnwa4qhv9&L<&XVFvSe#$3QhR}P?Oy~L)ZWM1 zKQW567jXXQD8I2DYeA{sN$oxT1|PBZVN_LW&rnkd?#wAt`*QGLP20!X7n7YZuYvF) zTv1gV0ZRzA&$n8mx~leq^AUD^yK7%t8D0DK(6yMh&$rHz;%I(?ez{8R1=6)&1v04p zR%Edr7{S^LI1@*Mi{Gf)FYG0duR&l0d|~3M$VyeP*!gaN9scA5B&%V;jVzGaD-0(%pA(Zc4?kcR2miKNG)})#0C> zwEff7zsC5d3An-bbo!u3{5o{L!v`fs#joA*D0L?!6vqeg5qn~@%XLqT#II$Oq$f)J zT8SmedgIqSuq9oTPF6dtfk?W2(Cp8nd!lFj`ivA;SNwV!$e<@OKCyucw0yYA-?SWU0M?XQTG6_;mv|kUP5k3rMP!R>!+pPsOn}Z+<5B zCdt#@l;I&NEOuo=bRp?TD!a0C4GhJz$my~xJ0NPt6)zr>ivrE{`29d;Z^J-d)65Hc z4dv4D9OX!v4IE|unjcl>4@fFAI%EUv;s9W|%xEVyeB1vXN>p=%_{58EB=c+AneckV zj_$*KV@G!bHgmB@<2}#EHebBDS{MQ%=G>!5^ZUI*JCs7* z)F$;#kcUIbqUN4}?;xO*VC%fsIeQUkrSJbA?pF^bz4D!;C*f>JuCh&1AWiQAMXwj> zee0$t_n*R{p|&|Lw%)}Iq^!<5Hx$1Z#~gpPiRKv7YV4@7(`p;=&_Q@M2rHXg{uXTL z$9U?pxjP^!3~lcqS!HvZ;LaxIM->tQU%N44bFTz!Z0eUiz(VZ&gR0Fde}N`}JJxR*fvngke0ZhC+{3uCtkIo63bf#W-g>gT3;#!;q_! zovRgc!ES?+V_CHtEmoCi=c&OGjcv#ibE2}&YKE+z+eT}HGiy?G*6*hw>$7&&`IkR?%&UzPmW)+qnbk^R;np)|S&CzR+>r6Y>G0e3ExpX)e`z8b* zQCPpEYZHd8a=L)KhKOULueaXV!OlAgAikZ0tNJ#WIHu49q~%+BGcgG%VUr50&p^_> zgJayA=q--648T0mJUk*LP|4J%v(%J%Ei} zxdU*qzV8Q2dD52T0v;-pWznm=2V+E3ytc||KMFzmf8P(iM(l_8`w45c{V21J`^vT- z(f$%UIA}$v=uHM|MPFnq`m#Zy=s6IC^#!&x>8(mK>l_fh5=9SFQZi=s-(VD7aQY+Z z9<$DRJ@(}x9DpW4;O!S{7FvS^cMmxSh`NV}JC*$(_k75gX)OeRd?~6DFHWFN=Iyex z48d|$$(S(UhYcX8jGkV3E$Ar3@@3DtAC$E1k}gw7}4X6!pa9{qAY z#Wxt=or>v~a{uswUT2P^1JmvsW!7Jqrjs-Ko#%5ZJDMr*~_w0jBPE@F2co=11Mw?;3p&>392a-}Jj*0I$?}egs^m;qL*n z{_I~n0AJ+Mzv|jWq59Jg|9pRXsgC~ivfZEF`yzgSqQ7N-S~tMepGNnO^rwX&QEz`b z3-1~z$07acH|*wi_ooi8#p_RJ8y39#(~qxu^ryb>*U_K8M+Ia|RIVx+)1U4m!Px%v z^Lz37)BTE??oaDri0a-Peh$c+{?shZyFYy__hUDW{kc9$=byz4p9+p0Ye28W=}#Mg z3n$hftKevNa9kQqcoYb$&Q$p!I>%}}jn|p7NmiT~`_fKk*L`F7N0GiX0I=yx7XUVW zsXJiPm%0HqeW^2GHLDQqtLo}YdOjhqrXStW&9AI$4TelCTgUgQ)=O8}0#glJwHa6Z zY*Ihvui{xKZ7-}c5BsuUmCG||<7=%)`-uuAR$p0-)8+Y`*lUFlD+H2*y!y$C9_QJF;+hnKu*;X#?wOO@Sg}Pa; ze%5ZlGmaT*tpqG|rM`yS&XGl}wHQNzs^vN|sI@AwAe2gE9l=6cgr;?-v$ z*H5^u_&T1s-g1?APAYOygH^75Sm8?DsB$^#cx@l#deqMK5pxk~Zkx#Xsn)65AfLx?cauOv=iFTqq(8UNw7!2 z#@Eqs9CxkrIPR9~p!kWHy&cHTwHb&vyG{E6De z)nd;r9_m2791oT9mwpOu{su{<{6nDpj}cSF;%Ix{a^x_&-{P~2d^@#{Cj#E4;XjaP zvxffz*u>%%;HZ93cYr-&YEI-6dwRX;{~YU0i@=V=*Bq7|>iIdF-jGh?9bZ?l(_l&n z@5_D^KOSITVm$EVh1z#U=J)zv5QztF1c`d%fsUB6bi@NcU^YnatG;(3X-)Vs5{BaE zo$E_p^m?W~3y1ZsdXDvWOnfQECF)JZH{XyaCVUtJT8^kU3AJ;1={H4#-JjMx7P#=z zNuFN%uT@cmpTnf3Qt158q0p^>>hjV{Apxj&1u%_mr=Kn)g4W&N0ULY18?f=yKL9p< zdOP4Uo&R&d#!qhrEK2|}6I1p1X<1yg=l}n7>U$-Opy+!$EcUFs9?Tk_a4=sDd`tA* zd;Wi;)_2VRe_-o7J3yiJ3T|*L$W*TNtV$&yrB1tFqHZ+g4XUM8sBR?k#suEDN!@6~ z8yUQjt!^B~8~u1=oVw9?qrW+lsGe`5KT$)`13(2zc9j`?aL3rf+Z*{2C7G#(6sagxo zrAVqnoqonDiaTh(>c!Zg9iO(@pt-)~e9iUmm|CNQ*kc{5xR%Y$!|--zKjV?s4B^cS-bE*R03vM|l$IUk4W4L-FNAj2d-A z=(M=x^)-Wgp3VM*b4BQzz@1g}9@$?6Fc{)B5GukIyfzJn2|?(&*7-L3f>Vpxx{dz! zrnynSg+ir}RQz%knE*3qctS{Z^_K+LdQ5nA5|2#3J zIM}v5Ru^K*vgq(&m`rfyL4Rg_c0vMbLq*J6&ug<}e+Y75K|dlW4*2s?kR1C}0U(r? zn_=yi`?+Kw#A_flA6E#VSvJ?r_6EbmfrAdouV(68GDU7$t@Qy&+ta8sB9RRBWiiKh z-#@IyhaK4R%$xHp0*I5P_;Sz;jmpimW=Zk$ScLE`Lpg-$g z(E*=zpMq&)R;{_v$RUl8TxHEdAnh0yuAp3w03GlVW9Vn%nM>_t-6p@MRy%(6*R6JE z0a5jbOR&JB-%Gj_p{Yw3G2tb;*xe9(mIPg#?0nA6iLJ-~Jx4P$8@Q_2MQ4j1zk-Te zn-H(TV^aoUUIXD7xI*&HgMLELy&P2Enl;VzL_zC@q<-?2P{<;MkX%KI0%;xY2mYje z-h~yJrdOR@wKyKR^47EIFq{30XkW24U5HN+;&K(@0_i6D@mc90mB?akKSzRs79sgw z34(%_A^kO`NqEe-fWIJ(hAXyO2<-`^?U$=`K7lmtAZa_}0-{SzK70ZVA)f&=ooQOo zPkn>DgcV=U2EJ)QSx_6UZ>8f_)M*IRZ~g2MJgXiL(+G!VprBufa>lRFKxVkCtnV8wZOJSL2o=7e$^Z^ag@nb_3I9>hq3} zJS}Ag?o#B#Y1WvJW=($eApLSFPliQ%tg|p!tO_L>kzY3yBHs}adDN^d{3RdJ$_<5# z#96%!RJYYQ@HCi>=d9Wo+(@y{ohc$;32v?LFiga8IU+D#1EJoyLgdN8FriExzXUHg zA{VqFNa`ow2!&px;FqiP6@j$KF9UzlHGWuLhse)mEgsL%aq;U2%oTTVd}9Ac$Nd#CDU7$OY|lY}eOMW(tMQq~MpUh+H5o@|q{L z$mcv=hsfVTE{gnkq1OrYvJ>kUIrCBE@~cHYU&_-WABG`e)f2EG%CHn+;YGhHh1aaz z#^GBn@+`orTon1!La!a@WjCx} z1yUo6ah5SiZ)dx6LnV~ zt&(^NQOxiFmBbECi3577BsR6>TAdY)suo%u0NcafVyiWhRWGs4F?Zwm+SR5wBj106 zM~r-1d5(M&@zBBkDopMnY1m(;l7{{JRno9uppu6D8&p!*zgoe<{$#)o_A`-GgXy`)^B7!PP+$zMuf#Jwcf=`7i}~RyV8eYq|1UDO?gH41tvdp)(0PspyjH_U04~*V z6Trn9ZVb3k!-;@%HQWF&8-->4Ri*Zj5Z(`%<59x<0MpPA{uMBL0O4N%)1@Ko^!)^w z0S50^0jA3%yaRA^4Sx){5(=7v`V(F}II0JJGDC9Q9)dG!lZ2LEUj3)uGp z5LKFS%vGmp_VY0oaTnU2g~oOQIZR#rXCYaqNuRUL1c z5|ZhJr?I15Sq{OOfh28LqTp^OuFNy2cv8~Z?BDjNHv3IV#q9Tj4BX?e3CNYVo;}Pl zf_VZ)JK*0W#N{d@7=d)W-jT#Z@&R7!XncAN944ux8o{&!!9chI6gYz6FIA5IWw6jL zCvCr6#a{`eX}|r5FdmuNB)WuY$&1khs)d89g)xF*+Zt9b04s1>tSUw@wZOB2xD`8s zff<%(U*nk?!K`|PHGTyMGJ+ui#L*NBMljT+;TXZNq)a#m^-4TOFwAcj&<@vJi<249mOwf$&PeXf{k;5rVGeS{Gsmz0x(o@gd3E#e%znxFNZUItZk7?MQGYEwtp3 zI&^K%!z#oWDD;+to{U|jwbYrIkU53Tv5V@m7`reZLk#)VA;vOLvIFTGaJ0N*?DA3{ z2z!SJTZW6Vos*9!?0X;`iRzw)-*88D7m?X`QQc^Rdkt_^$No=85w-k#?P$i-gw2`19i z%%zN7>JfQ~7PIV?R`k8v&W&gfce^%DejzxrBxjMjDX|+HpwgCoc$v zA`!V<#V`q^Mcx(siI%T98h=ds72}ESD8jY4mk&k4_~XY1?C}S;yks#yGzGTQ zx9GRX_+ug9E&Bcfz!e(49hQoyvmENeVq8U?~* z08?8Dj|5Ej14HA>0L(Ce_Xh)}dm`KyFhfnk=L4>VGNl0S0a%YShD@J1b?7zqk1%3Z zBI{m!A9>AHdaYh9!>jf8FP-Cwy8@%m^kD z#Oj~YL7Skj?11R4S3&jP)JIET8ExiaXN8O3oN0<$&1B`L2 zP=ZZnhWii6uMUxy-6v)dhq1w{zK!|fs(lbP3#ft33iug*2g7oeH8z2?iOVK#DAW~M ztd{tU7Q~tmk~h5kPC zX+2hsbfk?S)9u>6!A-IgK2Epm#f(H;>pK0z)TDUrT721`h>MG@Tr3R*WKkT2V}VZ{ zMUCKkh~^=mY+rGb3rnccBlB(O%qjpRy@c0B;he%BFse{m^E`+koiJXPTXRB zc&ji2^$9UEhMwwID`yj_54W8`(4ASIt##@2%PXX24 z@0Q(LSNrU{RMlq(I)+*y#!>%&uYD3(AGDAB>h?Joh1r9R37EF7O0?^fj&-9{6^0?) zLocx)*)5Q4Wkx6+3nhHS`gAn)`GPlG@8W%WPhIWPN!O>9)W-)Fvm5@+_F-nWkNoQP znU2EH?y7wXF()kZvtFM#$x<L&ZKv;zpYyU);P>H9mumWdnGOQ>fS-l^$ zIpkbU1PFjW`jNjPamD?Bx9IzK0lu9^#l{EVhou z4Z8Db8`Fvq#BcQH-~}s0eb_F+Nl5>7NM=~wf5b#o1wLP~6Fq1%deAoXpcTWjDnLJ& zUSoZCl(q=Bz+%(b*I2nnN)*un_|{73G5j7t_&r<$;UjRRZwvYfu{&CqVc$DB355iw z1CpR4Q)l?m-Q(iBXj>)#2R=OuKbS^jD}zD-Oj?cgz&MzfQ9HrnX58Bbc2}6`!WyfW zVe>N@;@#}zfhv8IH;RG}SIWyTT~4D#`iBKyZ2MDL!A$Ihfl36*~T+Ogq@2 zgn6p~wAdjSbd~e;V>w}%UNl^%Z)SR%KOre+(2gpHQQw9FcMi|`P^|oB+@Q8o*OirT03OZzPzCTL zs;lw2GW6dB%`rX2Ryewx+mX~pzhOV0^&@h|7=1X^?(bPYeVgE0P>~3W0P}x0aw+p4 z8sroE58RzlJ=*`0#D4ZZ=z9Qf*7pN|S7`Vaz{cj!2W)KqjerY~2Yu0Z9bl?6XT6 zaI4MdNaD&%4(5f2r5XCemRK(~xHE~1D$*WBYTC}D+-$saRAY59h-Y~g`t=QAP3#968u`xQ8oyrQ{34w}2g@NVf??Moam5i-WnFeMSUUb<|So>PXQS zUhVCJI7~SM=?rZcU&HourLKaOi==+iRwxW1g*e*>@6G47Uk)`i%C`@*(1C&?R|z5n z(m})|LFpVpc}`IJ0fn}@CmtXKrj51}5X36(B@5f)l~@Js6eRVNSA{}PQcxT9L`IU<)$0Y$r6bQ-C>@#7 zaM$lh7+u0V62ep$e65nO-wIn9+TRt=+>K&4*5;)-)Co;W$#lo!+mcV)pL*`H$V zRFs;iq^i_j@DY%0d#qFkN2Nv!?ecGyd(xWd zn6$339-hZ)i1UUFrSRs5^PoP4rKp(PITd$Q`$%#zlCdKztfYw{dJeON$cllM#KB8d z653Z_Edp%MdM&cJAH8Y;>HxEgAiy4LZH+V53g03#YDrlPGL?OT5!M5(d3cCo4Hu_G zb8(D=iZcoj z`cBWWcM=YmJAI085O9Y2M#K*04rZ0Fb&Gz!vs(4@{ea>lVu!PKNCCKQ-PvZI@%d z533StyvI7P>x@*)c+WZ6w`XITg&Y{dRjQvY>Sxm@GT8He|MpWo*ekR6IcLXYUy0Qj zH$=sww$9*Wn72TeGvUW3YNs{_%|V~O$6A{pK0OQUS~d5vyG{a#upU>0^|(@d5!M4j zSYKw{kA3W_9|_J_B-Io%Vh+qBH#_cO9L{`#j!6;nNi!-9yMj+B&|){bsz={#?E1#nk@DzG2~|w=Cc`=M+36# zN833BH>m<7{IC!nD1_xIwo@QY_&5@F+D@X&g5MQ$NTbBML}*YIl`EDBQQ6cU)FIaA zH;@M3>)X^D5#&4D@EV=wwTt2v22)tS70IYKo7vnl7PVWw5X2yEDY|!8hfT%zWsr0o zF#Q<~s>fkI{Xj=HcZ)$y1)ee%o-DS(}kmCNt|un9S3WGsa{tsCWh9 zg`xaro-ve|ufiD0H;Wh$R3hMAfGaip9pEh*{sOSEj~@Uo)A!#4T%zH308?JHSrvdY z<=pwqp|LjT@4WM@>`TaLUv_}3%qJazGS>A(>JaQp#Wt}oYoWq0AT(L{!CE1INsRsFWl zU;8;kpgLP~LCE>V?0}4ZRKKOWkWC03x=6o;9~GQ$PWS4!&90B_x8}{>e;XEdNI1Vo z&A{w2VaP|KAGbQ+O+oemsP@g`9U{OGB)%C%2!brMKEsx9+=3tl zrx;1z?kcz(kGek|cZAsVXXh$YVfp9FXpD{Su6O}*xhgKE^PxYr#Q5r}+wu@A67|PSRSNDxB)L`v zrT~>l1jmmgZyzVP9f+$ADwQBy(%O11&e0;7eN!DGnTuR%fXXvWDlksmf^lLgU@J4r zhnNvv0!9u4)IH7t>IFcnQf|iSNTEj}&S7YHQNWhsiHfb6STPFt+mqd}T*YAsq#Z^L z+&(&82C`T?nusSlOidH1Kz;@u1VZg_r8D9$B#+iCw%Q17+8nj5M0q($YuZJm?Q}*& z7iaY83<>0^E~fCqo5uJOC4FJ+N_iIRTDpNeGRZ!;?=f2k7>pHKp98i%K(X}>lGWF6 zg4FR2(HC*t%$Kvp&2&(4dyJbY$3s(Kj-$Y==mN(fsa(#s_HZCC0n6obY9K_ooS7_6 zV)LfBv4hzm68f7($3^_jLcm+}{RMz4G<-eawHlrUxKzVa0T*ld3c!ULo(wow!%U?ia=@VVN05DH7C^Nb%=3K5$1xEp`ldFHPeYOc+Fyd3Mcg>& z&&;1C{cS!=DsL?P4Q7`~jQ``GKl8W{rU2EpEETm$T8GyslCbkV^C`%T8+)wj(^+rt z^Jk93VXkh2{n<5+Egxl80j39C=g)i@rw1(tE&{dQo;~Q6Xu@ZJu<9v^9iaL}caG8e30j9*M`y&CXkAp=Y zx%78pF%J1uJl5!^gBkDr&Go&CuSDg&_ji1)Rld}^IN(ruo{D7_j8cnh+bfw=4vvZtkN}bnZXi-1EwsA{?S8nUUWQQ)PSTq8b2DNb9MNT_ z>es1^PYO-J_o;$?nvceZ#rQfkL*$&H9|_X76DzeEVV}P`__Ta@5a*u-x$?9_y5MHq z;OZgfm-HcK?SN|*`qgmBYy?mX{rj$pqW$CvrWYq_ij>0^M z^EQc3HpDUi>Z@vDh-2%k>-(J<-gGe?Ya5yZnxw#pAfk>MZeB4YG>cbEejug{gYV`*^4vRPjmZ8oQAk zJN~kXc@-n!lAb3fTvDPB^9A%tOOa=<*6E{8j`*h*fQ^4j1Z@1%AIM*!^Zy61=^GZ{ zgE;>$_7wy(6)C^UKMi*Jrw-5*iO05L9(CP7FmC$9!JLn_Q#y(Fe8KnZB(R~y)-$(7 zoD)8U`V(~DObuWJuu*nnBZt^yFv7if5D1~S{DT2C+34@3Z(zG(K8>pLglkMFyo0=q zaz^ad{$*n$GhW=YOI%zM2v{j#1e?16s?E0ndE->MxLU|TCKNuvE_4;u2~H7`?uo#c zrg@BJ<<#yiKWP^Ffd%(yb^#C}6`2`<8s`ru+a=if$c}^eACu5=u-JxK1{vMPZpG#! z=F2vvd<9$UX75-p_D&*VH-q>%5nX$pznw}C93x#U1WBR4LX@Cdqm+K>mB#OaWIXy{cNVF^?7@9}^oQHTljH3dvV{iuUV+&xLy!FiQ%W0CgUbJxT zc~s$3bE!G|pd(opZ3x!gnc%v+{Ob7ou_=fJ)IoPWukhg=Zjxv)_prCp3J$Aop^^!6 z6On9WX41JnxnMo7RQc;qioiKNGz{_Q^i;49d2)JG_thyRbGjJVcOa)}btm+Y+p$Y> zJbxQvBa2R7%wOz#?8{$HJFr$GZ)L6auvRJOO0B|7AdU#hua0ouyTY#3<(I<|TngKP z{hIl(tLEId2Uj)l&LX)&O^ykYlV45lSdt5g)yP$*tH1e^~Dh0Q$ zr6}2{0^vkl^&xuJlash}JkevwDQGtm&1FHRpj12FEwazu3g!@%N1xXP9{M;ujR|%aRCI12L(UIT4;A9Vzb8X}xx_$4VFG>k zpAqrtA;4So{d~a2r{4&8t-e18u!(oG02k}~(*WlKZVsB00aKi$KNc|UQUc(SfN7a{ ze;8m|7Q%x7v#)?%Umw6!PToHkFh!jLxCh_?TnObUE7Nb316JgqmEm%=*GBDgR|d_T zc1`TU#KA0%MnxZHe4Mr0F+SdgI!XM&eemn>itr)DA3xR+fBYN$O~oIlW3vX-3T4QR zLaV*ny`k4DTB?-ne9eKxtUs|)0ueyue3cq?BXYjVc6B3iKI=Q`M&x|fb?QcA?f-mm z>kp&+WIw}umxtve8m4=H&>ptDnTcPzelPJ$CB$S+0Z|-?0T9Pr;2H?6#TBgLfL1~h zza+Pn_=N`o;+D1L2#%wRtt`P^iCZ{Zf>-JD0_i^g1Logh-P%zE7ylt5z)l(_l|AVJ zC=gx&T-p=NXQ>MF98w5HvKw4Jggy2v(XRK2qO`4S^r;jJ%ayE)0o zwjtJ)QXc^)ab(L!lOd#GuamR%E*syjaVxV;vT;4q;vc;UZiiTbvC_2(rz! z#ZFISPRK$`YP<6~q?bdhblk@dy&M4YC zdNC)9k0{$)AxM$!avQb%HzM0D;Kjq$HdilCwONgja}!b3lO-=C4Rt6}&r#49+5X zbrm5?T9dz;TKCBM|i;tQFNDCA=xQ4#V0 z8+FasBIM2B#j3`>iGY6w>k#HOATKSU*jD;A9(`QNz1W+sm=Uy*Na`n5LSYIigybqh z7D!9s%CREkEDE`q5^`%GBdLU(FG8LK3KTMbm5{S&uNMmW2_!EsY$@w5X-z(fE(H@11}C;37lgA_t?6(I|xrI3J%fKD$8 zdG$WA!-uP+67pCP@(@sgRAx~C9Zj0dpl1j*( zMaVrtfkNi560#IrK8p33q>xiU&@{&;KL<;i$pBnv1T1%nlND=Z*WU(gf7EL}%Bi}5@DS|9lX(561 z{)GJ_M1*^+He-FhOt2$lR)LHHRXh2lojQOH+ljxborL#xQb>Ci;+LzmlR%oo`&1#3 zE#agf?Nm9W-gX)XWF;D5Z6R2Tdt&KWHFuQe-YRi8s6?Gu`g#+QxHKS4r7waHE1HLYoQLF>1XGNv{)2PvH39W8ivCrVLyYJqNCtcnC2Z zrdzh5D%P;S7qf+UYS{l?B@O$Zs-$6mqe=?Zf@#>PiNH%f>B#pd|)hzlcQ5$Vn*EY4Xb6$^@Ymi_#V~)gt?AySmiR;c2|j? zV-V-~hShlH`q)+C8!eD)6K*T+dob50t`c{(MJ|ThDpyP9`jolaVBZo9Rubm3Ypsp# zV1jN{S*rIS%V#Q!qk^T!B8&cp)h1^7f9Bo=KC0?!8=r)L0|pXoz@Sm1f<;A(;-}oS zNn|uo#!ezZ@Qy_csds~dfNsA$pR>xqdN zYbrsbe9yD?K4;EthK%+7e}DY}d(Pf_?X{nE*=yg<*{O=ydN=2I6yZ0ltoIb~odxSK z1Hz8hbmho=cC^M^V&Bo)4yJH@h@ZW>nqCF_z==&Ob zQu|el?dwJJ!HTRG(azVOj9=ekziP`hqU8SPhhkK6c*GUP*Ed+}Mb4EPoFAg@Gt6q* zr6Yg~t>EGQze@xlW5x3zaoF=i*LM;3jWJj1oPwX;t(?eM_fC^}Vt$IrLOpr%Y~>t{ zidugY--o^Z3VwCPzQ403qV`ep6*c|&$>G93vBtMJ__u@*lG3C5I@o+f- z04L!$a0Nh(WLJ)YmY;`Q&q%fi&_U;$$5=YgJ>1DGj}BxZy%Xs@I^Br0IgY)E^cwyA z&q%M(>1U8;=Q$3nLR!69z-b1DJGP+of7^Gj|M3+1|L27MPfo7?^y;GjJH7h9!>0cr zad`d5swl!2OaJlHNB>7B)qj(Pdh+Dee^m79|AeIauc(>&FZ_$XC)5AZg#Iu2#9#j> z@AuVz)U@kA)-OH!|4uUfM_uTDp>MD_z)AQGEZ%ATznJ=u+@$({u~Yw9UhDJUkv8>z zE7GR^*CTD}|FcM&`u}I7E&WHjwF(q-jxAu+9kYfAqIwc7T}zMJ^xh!pxCOz8jB$@QO+xaj}i zy!yY*rvD&uc>VvInvUi~jms{e|bssF-%O8qZM=>LW$fBm2P zv9JE4rd|KBdg}R{efMPgkGkfmPQMW7Bq!~^W6@BVz_nqh^f|~)W&%dBX#(*>jDady zLEFHaNSikB3eu(xG$3u-zDwwdpH5d)IH-tb`pCy z8+9=rWK^~u=lvXgA1C3>I5)10;l>Db`}@dEW(@CKU>d^$+CnwUYg_mLY10;VBW>Ek zYe<{6(15gQ3!9KOZD9k_<4U;jlh$yc?-#7H>;DF@CG+8-;A{O4@atR5hZ}l|{`;Tb z?4|X8k?{!@iM9SSK$>st!2>92#^%riE{nif%w5zzSVZH?+9F0+8xfNm#3IIlWn&R& z=tKMZ?Z%~e463+O&Xk;GxDfXf*ifCEI)?>PEEBYWy|2XPLVy?;UGS+o(<(k_DYs|U>QI{)8 ztwz~j1(FCMnRgi>;UcBFYk<8O1qt3D$&?&H82q^jiPZTFN3^|M9P7u$!@37&nq2%w zFq&_KrQMOzuKX?cCnTlcob|U6FmAGY)W|@fCiH+;2rE&-Jni|)yI=8TPx`c{e4yQR zxp4uk75(>Fv7ZDwO}K*S0g)F-T8-NQm!SVY?2O09os8NZA9wEN|~U*+YKo#fy!@#m!xbBF2AzAZCzN8-4)C;pEYE|0G-4@yuvF#G4(1 ziBNkb?@7sX-!Q%v1W^dh&o}yG<1{DxP@P?oYp)_&QhossH@4xAvzijK?pv{HfE;AfDjrG!;Eo?};Z) zc_|T3Tn-Y4jVHR|G`y&mT3_6Zqu*Y`Z9UKJu*~(vZYB%$vo2;T|9%5pYLfE~PvT#x0@vA}ZTBr6veC7x(td9CkfPfXa& zK%`B(IRR-ip2$Obg)V;-(lfP9WFtLJHkZClJkjg3?|gpwy%hSNm(c%6a{cGNi|GFg zUj5%-(|?dSy#BX1^}pFy|IbOP|0WAb^dA+y`j64uZPRLfeI2;B>Hm)ptN$Qx>i?2= z{q=wHd%pUQnl?3k?PDMP?~_dbhlu_M{q-N2Ho|v;u-5-8sQ<`Ks{bTw(|?vX_5Vtn z{v&PaKhl=|BW>wF(w6=s{q6Pthu^*a_f4VyMnK4zK@B zPW?B0_5ZA-`fsw3ME_CItN+DG^&i~Z^ndJO^&jL-{a^Ktzy4S6@zsCSw5jQ9ANlBi zelqWsDmM@8z1jtI_+*HM*ZS zgIdmW6?5mku5TI2T~#fLtfV@k1KK7Zy63-&Rd4^ktH0iOLEJw;bQ7zJ1nrW zfDQ`ZCgKm?Zj*oY?Y8s5yS^><`e}!`Whj?wWAoZTM&BmHA-?}_ZyD}~H_^8YC#YVj z+l9CT*UH}Mne`2)TfOQy6$f(EEkkufcFxAt&=ljGS=KGXg>paeOMS~QE=}+lSLGwB z3Au8}`+Iz7Hj$NRVlkRX+*QOaLm^mGA-4=i3OR%1>NPq3AUXM0bNuXSGDJaX?AHNr zxnAEgJQq!<>wvM4+%o(yL?Gmrp`n40+l2tae#`J`U$Xfo*?$Z)$y&Dz=L_Mz%N(ZW%rbB3$q&mzwnX$!;0$I8{2COMiI|W~Xq4nYR0X8}Z2Z{vVdOQr!PL z4ROBLT}(z>)&Pt3kGERpk>xeY{J*%|j+2|m(Ecmvi6)yO@43P$4Nkn0(_ z`(r@F%xx$7p+;`={vT@q4EVdiq8k!p_k&2AWA{9y%{7mEkT%yms*yI=Jfe`p04RnM4Ao-tA&9Ir0HYWZUkvAqB1=OY4iSH3DVR?J|B)Wh1MVGb68&1 zPX6Cq07SeIZAtSyVg=-!>^$OlNxk;m!)u$iRb=oC-z=CGI8$jb8L#7k3&taqk$uH66gMQu*hesh^?*lN9l8a)|+|w zmL9(M4Tt!4=;hE3zU!^S{;s$3Q*7t{P*vVl9%_qJUM6O+4-fdB54^ELzxL%sRFDmF zWdB}%kuUD}HDKAo;ddbdumMcO>~ z_eZ2nJztLWw>kG`?)j&jM{_l7X9Gk`E)- zGZg7X#EVE-CXw9$XOP9U9Zo}fk52y-X>%O94ry}^c^T3xbeRgIXClq9A%gUUX>Lg> z`!wwKNgieXcqQnrKLx+O#r$#03n}dLMaw>~!X^~L1hnCrn7}^i?llUFRh?kvll*R7j3ghKBP5YEO_v5G6K35kev(L>dGz%wy z1+Vts#fqU{%f#bY%qo-^8#f#iZty!~O#lN-TUt_~h9u>br z5jZ#e0y=M=iSzbFU@|M9!&yl0Lwb)+zm2r%TXrIC z`j*W|o4%z1>0hHfk7>TY?IXJ@*#HIr z`a1Q`>KsgxRQz}ncBRh$9FKiovBt-|`0>qh(diyd&*DMiEoczC`xR@;3mk7jd-+8W zZzFNRqV*Op#6?DF*IcbWPfWpN|>?ZvDFD(>W#FiOF^VfUHS&) z&H2&+q*rTwYe71VI5O!w(A0R{073AzV^odZ)02Gu6PdZOkT3($^Re{l*^wSWqx4zVh@dW9ewH#y*NvAUPQv?ehFjTa zmVFK|3HsaT8-0B2^DGi{&-ct=Z5I$pG2fdCLG5B!yc?!sz_BrNdfBQUYv!8voo~@xS@l=LJdZb2aM1K7+pY z`Ew`XQ6Q}Bv-NIR+Y`u5W}g#DRwjE`cjSDpoi((5UVl%*KCeL9w9j&+P5ZnUY12MK zNSpRqgmk*^x>n=o{dW8OZsvPGOktlzmVMrIre&X-L%;UU`MBCf8?AUutKZSqbn0J= z6LY>(K<2P>zMWVER5n@(u#JcD(`%y}j!I^uuRp3;c*J+k7iC5FU?lJ5Tx?dnf)ypQ zw~ruWd|I@Qq+Vs#^`B_=l19};^Ir(>)kJe3cC-#R(abUl`%g5V?akgO!izyT#YFRY z$U!`V|3verpycrkn+v_3!SY>GO@jUt&0|Q=9a~Hz!DPNG-z4Zi(cGHr!(o3P4wdiP zwn+EaoM<+kPUX82I+bjqc>`L2`?{5C_t-|yM04mS=tYu=W{c#xCz^dh&=z$xZuXgI z7SpTwOf=ulL3i7#a`jZeInjIpnKr^VgRt^y4fnxEy@p(mSJM;CD9NgG5S(XjXL;?@ zel$Db(~6NcecDi@O`moK(xy*49qC`AF6Ws8kS1=NXBHx@j)~ql>4rP-B@4#{BIPvG zTz=N)L;u_E?{( zGS9brp=MzM9hfIJkD;Q+!uJ*USU6RMeR{wo$Pf5%t>#JWS;poK0>A2WqH3*1e(SZG z{%FKBp%$d6o98}?da`8+)SaiIFc}=a!a z@V|Okgg=zR|H1bO+dzShe_LNV!q@K*dr|mHjJL7usDv+d9>Y)l%9&i8FhCAIvAx9T zFQjMzanFa3)c5^!=UnpxhwVXVDx3OYcb){<60Zp6tj#=fBVPAX1B&j!bSsKC zaq~|x^YPQ@$G`D&+K)Va;A0Zr42H!!G|B^P?FMTzLE97D-9*|CS+pM{?Jr1sw9{kY zWu|;g+Et2nX7kO8@8}lL^<_L4#O2Ld@{*YbY&h@03ul%CNu#VX2$zQrNpHig_D?9h z1+UxO+cLmKMhzA-WfRPP8RcRcpilVl7;2lFV17&0_aNU!dk|tOHzN^SEeuVEGqpjv68bkX~31iB>SVfCQ9Mmw{ z30(*tyv(g7X{c4Axp+7?Hh)2zJZ_sD>q#OLqYVWR!b@G15VEb$-7;P(198Sr_@YWY z)M3%@XjH^m-~F7_`5z?uS1a_AL<)M*4Z>`o`UL2$y`lJg$uMRQ!+W_hnlsO?2R>jo zSF!78!AZY16#UK4J}T3iMFyPt@lX&e^>a2BP!hSZ-tkCQtSl>D6pR%Il{UJ|cXXAq zR=^z@D;pO_$zKf{H#A}4SD^*XT&jn=+oL!fq&!ASNM~G%52NSU+ru*WdZNW zkIyDidp^dGv37mV9*=JntA4boe_HvEpHgcL1&kv?+0{2f&uSl90lClK#2bJ$3z)78 z=Ng-jr(bVj@-LD!;^Dlq%2N6md~nVR2eAjmbgtVcW>wsaYvZ^?&t{3}x_b8bSJ(F@{nsY{_3kxdoN1xJfb4xVUEKL>kfZr|u8Gd!)Y~#1bX^66oMUpfKf%#!4^*PQH z&^VC+DDVdsGC_F^|Dbpu4RpY}@&)W#mu(mZYHFFZP|G$RUgw9}h75&TFwwtccfApf-?oEIzh<6QOJ<-ivs;Q@?<(|Xs2Kdpa1 zt0w$uZN;ZG6`wTcBInbe*7v9heTuA_@FzKID-J}z%$Rm!&WoY_(e_C*^K)Jd?~fjw za$gP!vUuIt+?Al4$JDwV_W{ z)Us*;;*dAL$w1T+ZO8*ck0GrP;%j6BYmk2c6_~C^dh{Ko*H5>39Fb4H#!rU_$sk;c zcT568e8!~(D{dYTo56ZBLHwf)#J*GTzQ8FP-_M#7!@qE)Q(_fH^Y`$zoE9KC1x{BA z#KMLN(MjldGr{bKjyDs`ToPstf=N2AqQz#>iyTF_N>NlLoFGQ3!&o8=VihfflkGR1 z19k~lqQlkAa%jwnY!Rb_t^?=WkC%i z@)eB84>zNEqDT-g1c(-fML!3IB^?Sw25#MuPGDGyY*Q!4A#KM{^s&FjZ%-_=*B-Yf zL-B~OG>QgL!WaVe^aJxF^x`8bDA%q`D?gFrcty)IS;lAMGZ6$Bh*mLn#lm|8+`Y{w zW903DuECQSWybtOp$Zh;gA6cOp z<$K%MLPCR4f#r%>A^cJF;6-MI^V}7L@L-ehFtglXSGlGmL=fzf(&z1uKo)DiRI=y~ zS=^0uLKeG_ZOURV(so%`{@a{EIGn3mQtL3D2l%ifjQSWLajc{YAK$78eG#w7!5g*tgZN>CX#8f)j_r%04wyTWa~#3TjEc%exdln zHcucI>2XtU626EP{{w%H@iz#y=`el)5Y$NB(Qcxjs{9nI{Ps?jKi4Y1#9KbvlES}7 zX9WY*-J-Ly1Jk-TJ&8^MiRjS4wC;$p@e31i450De<;Le2LS&paU@#)?>@wp$^{@-a zT*S$3h$za9rbl&2%; zn0iU?QezO(((<6D@~6F}w=5 zbGP9k-sO?AwxlmVR<{;E^($a6RqWCBggy1*hMwRM<)tJq$y3*Ust058yt_Zfqc+%o;Vf<(Bst(tifjiW%$bESDu2}~SvBb9U6 zw^?Np|CxPLrB?uxrjzOCERnptQbdCOlCylo7^=SyvO6HWwzTiOt<&zUlMn40zXSo0 z#Ns~H5lobVm~monNCU4dmmiM+LR3WeqyIb7 zOOfu6^eaeL>vSX1WPs1>ksg1ktmKYYS8~jYIhRa=7vl%HsTCf+lbiSYc|K6xxsv7j!r3rmZ8^%wWP2eUJM7(!J; zCOh<9BSO1!q6ffsU0o4?F)lyaX_xA09`4mt;VWI##?an)_JXoXS~G^#Ih$yTJc%C< z?~UipDNktO4*`w&wMXb-#ol;UE&RXfH(HA`VB~TU6Luhte}cyAorS-lh6%wJAu51yI<7$G{$B{n-1PceET`cwT^S5T_KLJ~EmM%g9WU5+?I%JHdLuASw;wXW8WC|Ip4Qr9b{Q3?GO;!(g-7ha>a z;fb?k&4E{Ext&^9w~k%Crcc5TU|O%A_QR4RMbE2-E}_?j*4Vlfxd45Y`;%DOUSrdP zBc!i#-O?nQ#XiWTQLfO~=-Wr;Om_TZ9ZTCBY}+ z5&1+CW2fFxErglRCww5YXvBN)kEgcT_P4I&_ST~H5Q*C}M({=I$-l*O_^sBu@D}50 z3^^Ex_=M|wmHF^we0~a^L(%Yw(^beap1TO5qJkppo*pdA)J~39k~)ACH!gGVFL$M= zy_JK67WP+j9khN*S`vROF@B(FEivYi79x=)#_tpjMGvFDIrO5z0DdYh8@vo!Hfg_G z%c2dHP^^AbDranWzxE1#UVZE8`l+Japx-d&i$YfcN}c8<^4fO-9J{BVuW z4lQJWO=VhskEMxf-88QpYa+RlH*_Z9+JeyT$U5xiEX)OAewK&-f;^N^O&W3@*;p2r zT=c5dxa~tsdS>M#Eart~)zA{-G021{#l!gsXO|eK|Arne8_u0u&&HB#BpVYl@TERg zG;FCn>Vg`vI(BM~bd7EEZ32A4G{0FaX>e3sq0;ir;t9<^(ZBf3;^WLTzFAz@JQ|9k zTDb$QG!L)J)jucm=jm1X`ey}y7FdNZ;?JH{L7jUZeyTp?gB4@K4Zur%F!GE_)g4{% zW)x)Sb!Y!ebyjRG3S49c6y2DGpfuLQQiv_aWe|=syj9C#c*e(W!<*C477(ZYII?Ja zc|2Q9pS=bZOxx@6M8fvEAWgt&haD)x$r00EAk9uN-HP<3<=ptM7|Op(E-RKFL*%v6 zW#wn_mpxdt^zpBDeH;ntQy=NJ*Z&xFQ|n_sOeU`kwvmgF$ovLMtMNT7K4RIfV9uA2 zb>QB!OvSxtsin9uyaMRd7UKwDX@jp4Kby}K0YTwDeq1uaRG>Cg00m!S-1RG4`6b2{ z{EUYS@rhG#92LH^avu04D&SkEc!a&NE1w#rG+Jrx7gtf@qQHN<8jamd8`3gA<~rsP zU*l6Go6BvQ((5Odru-Ah=5v+W^TiRyCMZXpyhFnH<+aE=M$we-Ij+S6{n^R*B>&|oY>#{o}5QC>2!<$qii;7YZQ2W_?P~Oy&OVK&gM~9I%^`sPOQ%_2e zHuYpA(&l%J&PCe%j?rMGFO~zp7t5q$tUCNFY57a3RmEB7Qjy|^jsy?i$Da%F=N|mI z27fTV&S}{P=&3;k0C7DwSuG8cEni=S=`cRPnn=8&Ka{92BAP+mIf`;Y=4EDv2gd41 zGAe{2;y6gh7xEEAoV8MmIK0c~dnNG3zx(lTbEOCZr^1RT1^k;25tw3~iMqylc%a`O zm`#yuu|}BJEUF^Oda8;RYk%hb0}txzB)JCC*J9=I3RA30SJ3|dhhn{EP6Kg)ELY$+ zW!WDX(&ks75aT!6a0k*WbovXV$)DIZ(qw|^kCA4hOz%TFrOe=0_Cu~&D0dA0l;h92 z_+z>OS)V(H5zzMaj15g&horEAUm%B4c+v*)4i`?r!cshxM1Ftbx*~S0@#Xkzc!TyS zn89K5pdDoJCtNUMi^Z=fod zu?b5>H)fU@|G*n&xtoZyCnbf^`lC@WR@`5Y6fBq6q*sf-m;BQ%8^Y}De^st_C}=Ob zDYM-8TD72rlM4#_0`p*W zZ$@=CewP{j-q%aHT6YiPx5c^>PuBnV6VozwsDcUQRqa8)2L9WcZ>82R5r4G4Fj93Y zwd-c=3;`5yC=Q5fQZ6~vt*_y#r|Lg= zRQj_+74+%->)K zjsXuq`M-wuuy>t!_fzd9!@I}FCf=>6Xfc+++b$pILvTp_2pl_ESnsC}ZvTVwMLd0C z*^H9kx=zcF5)pg3654EBfVs5CUoeOEvJt`+`Q=;kgYIX^LwfZ_eAXnDANg#LxBEW* zvHX3e9{?_Uu-i{oC(8TT&(wFE@*J)BOeW9az)0Cop-+bt{zfP9&!{@u#J@lBfAN2O z@MjM3FGj*E8bNH@A~HDjZNbS`KX^>GG>biF5b3d;s$;KgCygcG;KZ|$bPnLqUWf`+SxG!hzCW~~uhxu$9S{Q^D;+eIj z8MEI}A+)r@i!hD>)vh-{V8mURqJn ztzgPt^1nzszBz^V^58#x?1ed$V{bGp_A=0JFPVo9*`wsFGGqM@?E9BACie(_UV?Ea zK2CecDmOk+w3IyrRJG39L#O>6lrvVQqhTjM)M`&W7JI`fuc>dQl-K3JRPkS=3R+_e zO;d#xE1DA@kG#%Tv{Zj1 zs@iucFF$!4+~t(VTmPL>9@~JK;%~Jo=p&Em>C5AI%Hxu~KJs7=<*^eDi#&!Zc^I>C za0+>`;=&ZzAL(S$iNCLYHvQd+$5!BDxg~G?=fShWW2q|WgU5>W@#sN3F8GHJ9?T&g z8_}@fQ3O0vAkf{;mY08zeKx)B>Ob&E)qn7)`>zVR`|pk?)pWbJBI)9X$ z_$*6T=uEuDA(YGeQ{tIZV#VD!3gJEn52Kah!I&V2p^_}jz;V(94jV?t)kXJYpRv1)7Iq zp)Ocvj7Ay)#Fc<~uOlnStm9O$VTuA8Z`WZT_U{D2|{tpJQu~ z=a{OCs`q|U*!L$kNlY<@<+oW|7(@} zjd~nzKpx^3wIaT`$hsO!m2gM>#Xju%jfaI;xUVVG!>70Zp7H+RHYa{>{mmwKZ~blP zqrz{sD(Lo4HvLfZ!;0YS4>IaMIHI;VqyK$9Hc{feYf3y*J=6Z8ExzZ=afcFv1O~u% z{=-=$4h~0WwRX8H3=j|Xue-GY8-|=l@)UC$uWDAbH)Efguh#B8q&`-`i%HFe(tOTy znTvUw0VQyG10{0SX6OgF28Gpk=mi`|{LrN!T7o}k;m-;913c2^4-F*qN}9U+DzQ(~o= zDaMiWw<_JVE^T`H$4E)-=lBMYe&xkp^yu!FFZ0{3I2sTu?oPe1p8#@|_w!GS8=dww zV@pc=ssg6Uz9Ooi+rA*LE$Pb(=bT%O{jdATi#e3nZD?5h)2)zK3K^_Ne=HU1O#e5# z`mgFI8=tHGZuQ^ZkXCB6hyJ&x-~ThD|2uv9&m8GL8kYV~KTQA8pS1e_vaA29e$xI! zMq2*%h8+DL*xuRrk3Ew39m3Wsx`|F60G-@jaPr2l9b{g0RS=VrBlQfQ3CSOf3Wm{~(7Cb^r7yQMOZ zN6}pi9krG<%qeA_$E+a73^_AuMaswwS(n<8v+d-t!&T2)pZR>+NS z+BBmKM*9-oGE^+-5#548hd*jcdf?O``}A{NF;~dEY*xe^nAfzqOn}|`9?@+w_LgSV zl=Y}8lr|nUi+b9S&_dd%oDH>+W^Ob~6FRQ7V|jsHnX{Ee)Nk}gm>4W&k?le6qD>+x zpr`y_P5Szen-l^}Ws^*gE`!TPW`W~?HWwxmBT$d)E10(92)W7{%Rrk);fY{DbdibZKp@&PC88Ih%gR#Scm^ZHXbNabqE1d)bx6d*b0$z@5a*t# zXdcezKy=C!;C8UoW0eU~&eYD@a5fYY&z0f+?IoppI_UAV?-HUb-%ozA7oGB(s#`G6 zFWKi0sDC*yR;(1MfeJHAjeB!8%4Mulfv7a=IDhBFIqqv_*&~HN5Y_*v0{NS z1J${JQIa#H-bX;L_WbmH@n4+snXy4xR1$r!0)|T8BdVZ}zL$1dKDb_w_|KHj{>=&b zoamO%ZD`m>KDBfyjDS|BkdJI(ioBzna9Q~aymvPBmRL1Fq3*fxOH*Fry-fM$_=tz` zMUwftsvF(do6ZtyjM*I);Bs-E3TIej#W<_{N~EsO++8@0df<6E$Bm#Ym*@HsqXp*U zc^eL>aUp#X(%1AazWw$|Ga{2FJEq^R_{MiUo3Y-h9~04<)fE>$(62F&q0*1Rs-Ta4 zO#hbp@oGZ~{U}4jKKfCG8~vgm>pHI=Z{Yp3T>E1@&C&0~lonnJfT%0220SdEo;=1mFxQtRWGe=&#S?Pq9MG@`#PTH5e0tzGq|cJ+t8Ac#pZ zBIMincJ+^V{-^Qh)@Pk~u3VcE&qvW`Wv{bUK_5JKC-9Wrtrki+<-u(+L~-oc#B4SC zY;*&QftNW1b`d!6G2CbVt)bmwLOXCX;!rH92Jm{Riq`0+LcEKGFA~JTREnnMw~t`6 zED7*@_tCF`jA^J^M?LsA2H0Fn2hDr)XS3Zc<%CTYl z`R6rGc^$-WyZ(Fj6LDT!or}lut3u=Q&-ij1d5cCh76IFvZ{bBvynN%K|Iw4p#GG*; z=8Qd~+wcl5#vL_fJuyq=9mOeT(Zrk)MN4`{x5yGe*}$5To^`lvWt<@e-BUn0|E;;U zFFpceSO4w)B3V3%^|RoYosI95{UUzAJ(*VH4=?(t8FQ#+XVv?v*%me5n+{qLRw@NO)Q5%nx#FX zTM=-fdR2rhAP-qD5 zLlz1HN1KH`3=~=nh>E`VPxjwWo!XvJM&ME>w?6reCtFuL?P;YZl_Z{h^aaznXRCs4 z|Ci$ZbN~#%X5rN#r?F!&7Fj&Yjzwg0i*>X_yavoR7iVQOUn?bHu{chED`z9hvhFIl z9rIcI4vq-kk?Tu{8%7m)176;UlI+`$zYA~Q!|&V?Wx+cU8FB;3*$`e97|M^8Kr{uh zF>>-PUx$4jd(`|NZ*Nw5k{#nol#b0M;Q375NN_~&J2>@bgA$ZVihZ~fFZ@$K_ySTJ zO9)DBuVZz~&%*B{XcHE0Gn=6-ynlUrd%b3{E!4KI-NpO@J4_?kv+{mf}R}%$~bGf~zcv(wcdI&F4 z8t+!qoUAR*04ER?IFXGd9HfzCZVgz{xOm#fib!p75BvB5e>gPZ4@Db0`Fc}%Cn)2a z!I7#X=pP?k@Ai*_%O!{YvG-pr|2Wtd;hctDVD%#AlEKmXURcI~Hyvn1Ipl_08#8v( zZE`9+cym$DTs=CoOd;OYlo*}yCb~WxQ*{BE_2DH+EMTZ{)`<07lzjZ=tM>l!`-J07 zHhx>{*O`2`HM(2GDUhrw^_CSSJSxeSN7R?b;#{WXju=Xbd@-irS{_!JFr3O#x6KK8 zS&2jD7lIN8fPy8wEJ89(lBN{k;ezMqP7%-PZR2Uqu^)|Ctv zR(ta8lNH(KdhlS3?K~&Jk$L4Rn=5tkPygwTM`FKo`p>DlzUe=qkCp$qK4NFJ)%a$u zk3KSo`Z#BuuRcE741LrZXVb^exlBWS+-uiIQ{Db|^zp|)%Cc0YkS=^f9gP7pluSR4 zd(PC4E?!!l(~rwP`VaLZ_H=ssF?FR=KSt~NHvL#+*AKqEl3nTKe4&7f@!=Y`Vqm_& z94ba7w8m$?Fb9Srft*1Nkg5CT;vA(Z1L2$0gl^#Gl3u1(&aji#Jx$SxVQ%-p; zUZLb|%Ih%x=gWOA{Tii%*R$UC4PJ9>^NSpb9oyeZ7UlKQtRx&P`V0TEK~8=?|vz*!YmqO)vBwc6>`RZ{YN^5Q0c(4o$*G{*3`P z@6?|I=#3gh-hI+V!cRZaSg*(UX01ObTc334*BG~cO?<+sU&9oS*7`o=+5R8M^JL2N zzgPRnlR1><1i<4XPrhG9N!M`!U=A807?-^5m z$LVTH_I3IUjQ4So;fPoMrr0&n+vzqH5Ff@Amdke+>Gl2CKnt z=9Iq!el_Xi*N^zU`m_&z%prbdXjt&e1%4?oTa5l#n7RD7Z~uSg>c6U=wEw@e`fqPY zq$A@!`oAvy{_|9-@#;#S{+su6%FwX%Ki{E0hsP3y<$Ye}+Bo z#IK)fGZ}t8AY-LJt*Gc=&e9(vef+QvgY}OUKKL<*`qLW?3x0*E^=G1;Ef-#X`ZH{a ztN*Hg(*8rny8o!?-~arM^u|N@AFKtU|4;e!pE=ThG%Woe=+Gajftb(tT_<5Ti!MCA z3;j9xs1v`p9uruS;kONaRQRn{1%3Q?Y5MpbNBk~%(g#205Wk&hSnwNc;kOy?JB268 z@iOR#Uz+zNwk~$!wG#M2jgsN@DEg%Enym`@;59vcyuMGoj(@@jFXj-hWoTIN8fxKn z*zxXN^vz)set4yEzTVGXV~d>lO;v3s!|!tRQQ=qQX3pQA;yx%&awN_RBsu?){5}cK z{^Gty!xz?lja<1Hh3e-@vdk+b)_o2028Z)b$&(=b2>$#Ge{R7a zjtl00z#HS&iuCmXZ(c|I^IIQ%U=H=+q2*d1iY$G=Vmnnt-7ZBWBy+dI%|%^st$*`nvuXDee8~-%~9(8QKjblqsHp@M@1a(k5b3ozK880Y;yrBXu;^hSXrM~G0rdRdpg+Z zDLpQQ=UoWQD2l{JkXCS){QU5q`iK+n(VAA0`NVKwqWnXlD(J@B7C&RNm1n=-+^na8 ziTM)V&4%}+Y?a-?lERwOENr#%eEBM~XkwF}uW`$YZY$*GMQLG8Sr+zsdHDRqTfR}J zp%5Y~)mZ=>A`7`A^lsR&bVl z=#vCk8%tgMSOR;q(yYzioXQmgFtbM279JJDc&D#sxM?bDcaefWHEWaWQ}K{o->GYJ z|3f3wMRftlG@Z`c_$n|8o?+HjoMV3+3=Q>iu8!Xe=bvEySk+YuetMJcx8l63F!ZIY zW@6?}W)1iN{ns4KE&-LxxH}ic~=#JO+N#+3}J+6#wx9;_==>A3T^tJSL%G!DF@!kC{)V z#N%=FEnPfj#GH6cwA1k7F$OYJcnnqreejr&J|2UK$E%O{;K3Z?QHF*Ej~W{uH$IUP zk2>@%T|B1NIPn;5r{Tq8IAo~sC{zV~@Tf^2kF$x#i$C|lgE_>b7!3;^3v75?xjZEv zv(UG6@tF946OUnb8eTk3gA5fOxvHQK9_!M_<1FIwhlhReU=Hy(3k?e%i)?s|{cTD- zZbIME#bfmSPCQPv)9~VP3}mSA2&jTSco^y9aSrkL)k8jbFo$@Yh=v7^r8Yc9{w5_J zSD|m|;xTNV6OVp&8eTklK!ysBR#Ze|K6vCGO52|fAs!Dd@WF#Q#G^MF7Ccti@EEi# zB_3hLqFNj5WIT52Tqhpg?KHf2dC?Z%fC#czg_=6&^cOK_C5?o<1JKh{w$j`ryGF;_(?87ChG3 z@W}pkN<7Z6_ob8i(fwymJeu%31s-pMXN5<-D(Hj9iuCaqPCTxz^TC5T#N&N5EO^x0 z@aT9vB_7Aw`_f4~4$gMs@z$J_cx(gD3Xj#Qpbs9q)5l{3@wjBZ4<5`R9y`&n;IYMq zN6V6wc=WXQrIUCx-RHz(EAUC7AJ2nlg~w7=&Ef|f?7mvHav%=$ARnP~IE$QP? zN<6-~-v^k#iQy06OV{0=z~Xl`grhT zL&pAjK6o&Pc-)4D1&?+c9`k>Z5|7`bZ|UL@o8iP`s-1=xkINxLr5{DApbs7cGtwSk zt|lJu&Go^9ImBZU8WubPKje8iwSGEtVM;t6N8i%LW5#qR9uw^}ym*X(3>6-ORY4y- zCZvzYX~g4I+`2ONPptK1<`9oEG%R=oZFt=HNJ>2F(6@B)n0l8JkI{A-UOa|Fh6;~D zRnP~In)LCwjCj2GGao#dLp+Mnu;7tv!{f@Ir^I6x`j##p6Yq55G0aZGi^pk@p~53q z74*SlUHW+7O}AM8nB#*7bBM=TXjt&bx8X7NVL9#0w_7&i^{%N-D@{T_9oTr|GxdI& zYMdzJwxr(K$!tEkvOt>5EyK&~WapD_*ya0n*Vhjy$NNiuYC`h$G}VT+FYm(7zW?@Z z-*>&T+9|J?ZZpaL{oTM+$?IBG&_`ZI`trj01&n|9`N)eol-C?IEb=@XsTHTgkre4VIJ zo={4U;i2+j_{eAwM+Z=499}iqz_St;X!a7f6ufw!20R`26Z+li)X#(XokCt8Ltd)2 z9jc&P9@y_M?WBIH`!6z|FQR_le2xZ9zSbVb+{~4M_68}&Ij1>M6RnQ0j>FMJyyZ`%V_~6eR;(r?& z7W~KB@Sl(CU@0*FJ^E(pk{54kxkn#kH#zZ`YNz3p7wcbsw~0rQD(Hj9icaHUeXl_9 zcyD?F4>{<^^Fk&blhCl>G0uj^%vh)O@gelnfsGG7c7M{D_jUW>IqXI!p8f3YdhzT5 z9Z>q!ii%*+2hZJ|#uM*!QR9!``QTj%JUQ&h`70C8-e_3xywZl}pc*Hh){FG;JzIRg z>-T?U-%_2sJzaIe+!1i~H(h+yTQ~SI-7LICzXx8H5gU^g$NTE>X`G_$SV^{9psx1( zWSDW4fXwdsYoeibm(_OA;1$S2sPbMb-A|NfBvcmK46e60B$bHx79u*he!O+NGQ zH|2AfuQU7>y>x@)@xSU&W19C3CQfzYH_YCW7r)c)H1W$-1%2=vnm&G)5WhcE`{2hM z;&&Dr7W{6s;Wu`kiQnPpKj^0iL0A9M)n`9_>|W`_vkAYgc3thE{@duY(#LvL&gP2T$e@&-c-=;8|_Mvm=^vJUY(a7axD?hsVJwPCVYaAtfH$z_Y?*wJPX? z$D;J{xR!Waa=Q;6%po2-(Xik#(}qXO&-C{b`yA6c>q1u5_ihG3O6@` z49wxU<$L14SG2VJ6V(W<{O7FiJKit8-ihxFI~i~NDqx`fpDO5s@0RrOJ)QXOztsm{ z=7|48!-DTz8@}`Bq|~?Hqi>e&5D-^?#9nbfV~TulOMEowe*#|%75WkIRSoHM~8-9E4O^M&v=$k{Qy#4XS>u*hR z;<4UN!(0Dp@T~AypbGlnF(G|CE+!sl-sFP^bBMONqzvH~Qeg9OAJI4GSL2ZFp>$nG%n8(YJK*SbvQZ zkHvNxUOZ~Sv%=$6RnP~Ib?M_Vj(GIKLa%54f;q(FAv7#_tg_*;>YkK%yn?=^i^s~V zop{9TG`x7+Z7oh;s|xzyVWf{oIq~=g3!5H1m_t0~pkcvdjSY__cc;YT1@tXlJQiQ& z#AAk?h8K@2Yq2+?3i{xY-!*N2T0uPaSNh<=9O7{s8Wub@*zlM?BPAZcN8i%LBX*?| zkEwPVUOXesPrRO74*Slclvk~6OTVk_Q8WW#N#Y9EO_j(;W2hvN<3~t-_pfn^aLj! zr`lybh>>K6nJXrR`6DOgw(|6CXU7Lp)AI!-B^?8y+L8Q{r(I`j##p!!C2; z(a%o9i$@R0Q0Yf2DxxtTJcg!^$7tg5;B`KDFo$^bM#F+fiw%!KccjE4tXNDv-$`>l zt^0T@*zjn%H6z6(!DR?YSi- z9$%wxR$qMZ_a zf=8YWk1KCViN`GTEfpT3e`)&jVG$=@{p@Xc@#+B?EB$FjMKI%o*M#)(`VsMZ@CqNi zm_xjJqhZ0Tz=qeL8&l#HRxBnR|NQjl)E_(X=x(Rs#p6rxtnk>2ivD=iq>o3Kc-(ur z4<5`R9vM(B!K1$okAk13#N&L$Vp@3gyTpmdLHxFK(2K{%;923ZLlyMVk9FzeF_C!O zJkbXa<`9q1(6Hb!$c9IDmAQX*nEl6-?Y+{A<@m?hKfIKNZ#ubapzXaYdFr%{+VrR` z%EZSL@SzcW;s$S1`NMtsMLEv5-(;GvsKwiF)az!ZNkR9AMtEc=9=4(F=ErxxWa?O_ zyhht8IQzr;!-1)iSD`BCBQGO;dEu>I@PC*2$cs7R|Io0=>l~ZBuB=R{zq8OcOZR-n zUq5@E_#-DC!|XJ?c$_xD#3NS~bmQSVPc}PHh<=!E&_xgacy?Cme7p#4L^zo9NWG(9 zrUrr@&P(M7(;k0Hi2nuSeeh=v@!tsH2>v5&`0tsL692Eqq{jc-j6dr~JLR+3-i8ZL z$hQ`KQu=zUD(IFE&zGf-*C^uEtHK8_<`A!k(6Hb&%7)jf>r>+O3i{@dtE)d|yvY3~ z*{XBp`{{G6)QQ(rdmG;Rm!nS#uOd~@2e0Yr<8>kNdhb#nyqH70CZS=$Ype~gnUhoE z^*H)=SiJtj_a~0N*ooh%_BOrv9W&0vFQ5v#@w52@eD>@&xu=xdx&V59?@x@*$`0Js zy)l#>z<}Y$&9r=9oS(|YoGAhTd2xG))ix|&7krAjGUl{?C#*Ak9 zSTVk!mV;EZAvcC|wm3!Akc;8sN^}kYT0A=Y!_kXA|CA?DD%{bS@d!m@eyX@o)lCEk zp79Sw8v{}YMBaZ&a73dYU1T-tY>#a{FRx~`z3+N!$cg_-Ra-SHc;&65`@@GX(6d;m z4d0@Qg*xz6x#+B*pcZtX7PL@nHF}~kjaqBOxNkX7o1{>?@MA#@gYsKV8nqUDk}ul8 zFCUy@vEbsLqy5SpQ2=E_9bldcYVHZ6Jp9d@3Hyn*6pg>EtZvqt^||0uI`aANCN9hU ztSm6(q+ zIaUt+KJF?UE8GT~)@EqJQj9Mi3@;@C zCv0(a9XGbX;+QPsqwcW9k;Ulo`6l5lsF5Xvw*>fMIuy^wLB%b`k2=WX8q!}Q^efiH zDz=;SQ7*haR*Kgo;zf|T?Aqwucy7E6pGi8jV?>+r_=Qj}7HXRu>&fa9uemzfFcvBr zWsdtahs1->zhL)H#Rq85I2LjOH^Lefa2+&9UR7$`2B1XQl-f}hMeQp8L??l&J5a#h z5sOFVdfqRwynq?KsCaceDv3ekToAqy7mQT4f}-&m{cwE|6a`-$gJ+4v#|%ESleF55 zg`icHVZ4Xw3i{7DII5^SoD+zOzrYuK+S!0^rw-pA#=sixfc$dHagHNmOv6?n&NRW3 zSbc9-U!OYN$+gS=IsVd+==bu92}6fzs;1ZcxY*upSACA}S<#LBFdGko+8i_a#ecr# zo6;#?Fq&E1&XX6ZY>djQ*jM|5H1|zsZP~{x-Np zrJ{R5*v*lvJmgRmw3qSb<9T8&R5@Gxs%OSkV!^J2y~`H!wn}@kVES9kRXL`09K?ljBhJRWxoRhQSnoMC&sm zMo)Mxq%nw7`zqREWx1#xot_(*c5J+@a+NYEn14byAH4u5^0q85;^jt+Z9*>CdhDHqmzx!+9#N0!_V;w@IC|6UW`C{IYR7ZiFn1{SOv#oHNcWS++;Wx z2(<8%oh|W5?xEM=6lVi!geL;Kvm6&FPCEX}^tbDZT_c04-)cOEe2agG#x*c(8L8M~%;eHX*ypyd7*-_rueG+? z-tj~@>@fP!NddHAyetThZ+g3+c)Lr=sUt%re z+kDM0U7Bq@gFe_zPY?yYBzQ!pX9cQ{z)Y$6`^^K$JS1&gwNyI-kW;}gh1r(!h=*eCH4&ia)*j$mgMs3$5=8#4?=P)Yl5!yLVI z*2f1>@%~`b2s?~3_k79AdySceB{FC$5;dBHzx{ahZR${`zKynX;B23|Q1#)Ldi*L> z1ykt{%6r;7c%HMpx6r;NS8sbbAg0?}tqQu^i?$4v8Pt~by@04WgTnNW(g>R4PSk3Z zmuwJ7V>GB}i_U5bR38^_Bdl!dD(+y#9ahEMSjFCWhy#N7chzEeA1m%NgRGt4Fc#X*ircMqTeeXH3hH5iu`fOi)VCnZZza|EVYsycLWt zyn&c!ym!PCN_F4(1xR?-19BB%N677>4}BOzFio3&_gotwLWykquE z+=F}kK>uumH;RBi2}SUYV}v4qz=>I9L!;0LAwoXJ$3?dBG1^jj>G;d)X4R}e23%=% z^N#MRxgb@vJ%z^NNT`*5Pgs1cB?>!4`%NMA-;8WAvj3zuC5i;&Q z#`*YlJU*Se=bF#%1F^C?%yw^s`s)#yKR>`^EN3k?5~lUyy2TbW-qQ3mT-|2Oz3p5~ z1Yyi@X997FUpzwGjQIF4_WMsHf3N2PNlu~HoAYr7r`#2S;oG8fj~{@IXj)t zgwE>P&~q3wRvVd^kH$i);^9>>Or!UKaxAnWUaNL_e4_B+^KL$D_F6h8L* z6y6PwuWoBrn=_kd)5xab_*Vk4I%#7mY!Gd50=?9@8=S;KOX3wvMpPKp-7NyFoHOsR z9XVDy@|eAmfzrq$wV}t*$RoxuL@}|@f_QjA4D)r)hhw4n@rwDeiiWz-7IdVc%=i#^ zNk`)7NZivAPM8y&7zh&01yvbU7)R}b$G%};-K;A@fxl`o^6g|T;2}}<3=~17Sg2md zPn7g@2tFRFFORF^^LVdG6EAWw*^+$Tzy5fVLFWeM&!`=K_{>mMR&uyasjCY z>1%%cQ-1FQ^dm-_3K&phIBGcN4`dqOs>sDYL~m?EB=WTVV#rNAbJ_o4{R{k0zU7>> zeYUvf>)N%K=8JEKo5w;G-pk+aGHr1H&i2LB^YQU=fZAacqTfgA!5E9S+VaPoEePoq zJ7;~4D2JPm6%Fhh|Iz6K1JjO#aHCr>9D72im zVVnkQs@%O23)3`|0?@Ejce(LVA#7cC(t(&;~LPP~KpF0V(+edvtESO_Z_KxJ!Wq%4iIq0AI@Jt|A!Sgy{(P zO0ta*xYsZ`m;cl(_5L3yZam-b;VUq*ji=BHHOyV53MN7-m%jVOZ^O=X#&7+s#+1D} z;swOZ!o6zvMX*i9eghp;4D10hm%TXZtMOmYKN>Su5eYMRSgPu};|zj&OdHEKh+JlS~Kp*F3!G#~^3&Jxx{r)#*Ao~&AxbC#8Jc@buKL$DRUa4yP z$3F_M`(*--{Tc^ex7sUeAENZLGJ%)OrdpVrav>lXttPT z`U^gKm-fczZ0*)G z%NM0tKG(lIR>bsjp?iOhUq5OyreejIHa+y~>LG9rv2aUs&%{zzRt#(XEzzN}9fO%x zBS3^le-Aa(ZWu{S0SOiUY@dwq=eg4u{-~|GdyuBB)r}5t{Md#3HaK@^L|`w{*Nna8 zCqK1)5f1qIt|x?p#xtlgB9whcSL24Bpou5H#*@==?GvF#D0f7t{f=%}hEqYwh>GB} z0n4cP2sN_1gw=q4bvI~TMRqxj1MlO(ujbJV^4cXHiC}R6@8`jHj?UpyDO|D?B!z*WPC^)ZvT4pm|28so#g52ASWj2b)6)P{Nvy$pUYE zFk&o2oXswAsiq*hDFdr(f=hH`mN9_qCfrLYz;>lTNC00F&e-LJh^gr_%xzY&9c>SO z{1L0^;0o~<7l!zuLChRFqV;4@g_6GWV>J3S>`(8Dle5P@ljTTdVZAgP34lbOva!R` zMsA$@PK;wga0YsWSzv#r&pf6o>?2_`q{u`79Lo>RO11+m$TLk>67U@^{sz&7_E*AiRZ{d3YQq#(Kt1h zHU)yHkMXv>bN%P*Pr6Th1l>vm%TtFUw(e*(1G2@)?n;{!NqhND7Xt0PE2JdV;qBVD5cr8uYMTX6x>(L&lrMn3R-;n779?FEIWAUQ1d9ddo}&UT9d9c zNGhqBD14uk{v5dxqYnOnK2cYB)z15}la&rTd>;7o(?{}OnvZjX7`;|@Lp>UG{^_A0 z2efR8yDa~7&OfuoJIlsKY5wWpUshQ(1}pG5g{USL>I6`gbIjI9|aCLSL5GAlxrTNXToP=2_g56L5jB#rTKTj zyshB_5bNb;9z*Fc{?QJJ=W@|uS`Rhk^Slw(O+rCsjKt&Z6FY$i+WS`H714?n%KSl@ z{*8{-O#dCR*)P-w>zj=sgZ6_pO#b6tIk>(RahmDFvBwA)T9lXTvHuVbv~Za`x;L{L zqG&PR{1P~HTQ}imwX_8cFki3&Us;>V2NFBLsNHtiGUVroPY}NhvX@CFUrO_wc<<=P zSlDM0Q6$y2zupi~Np;WyPh;3`QX`tTJ*XgEIDD}Brwg{fwisFHB?hHqX*#{dKgYY% zL$`b)&b*JQ@pLlnCnyP1LtXSaEzU9ybTy~Luc)F4pYAG;zHq$cKO8#lMQeUsOi^4g zR#IZ0X3}-hQ|e*=7-1a|EiJfzqLm%!CyjAKTI3P)5l z^6Bv&0fRoqk6Ru3mk0gRGlo6b__lV@lV~CAJ-Q`FmeyO0vCu6np2I95x3JNCA!ia} z3U)R@ABVjDB1}1O;ENF(?>L>$Z!g%npZa+;DxJO=sbR$hcR^9Gms7CQ!0#@_1)$p) z+J|aZ#8P2Ma2jr5*RjQmuJ2WQJI&>>>swXBSY*emf$b%al9GGkA@pfq^Ra4D*kb$z zvk_Tc%bb}JSa;8D%0!6Zx*Gk1_9AY%P=aPK{08=LBPRLKzKC%>Dqx&2iB17guph73 zCtImF0${{S3)Ikr`2oz)ZGZitr;+3Ap2(8F&HgIig_EybCyOxfEH8meNS3Z{6gV0d z3f_*F{dO4Vaf==iOL0Ct-Cf+D@+tHY zVV44{J#Z&YnlUqCR#8Z9@HzK}O#P;R#wnFtc>L_L%5yHnS+fr@A}F05f#ws-*>?Li zioj+~=umA4vIys4oL7g(IBpo#(uF+Lg#*|$&~4l7&)|eKS^Y=s^`CRpPu72qGc-Rr z4{DtePMmgaGfvoLop!|;;fH2`EAqMsMh`|+e}9x{OXFjcKO9eO(O^4_?2kQu#N30? z4Mt9JnedL0LOG1``7u@;X&?z2GFeOEUur`b_PM3;NHym4|3oEhX+VMt08L;CokFgzYs$K)*NsG495UUFoTxh z7V0R6M)4?5KWZ!@n{xiQ8eg=5*n1-spxAltY9UM?X-+*MHy93Q9Gw0gC5v_(Z_12Y zr9v<|D?d;6LXxl zGUFy)mo*eVGHt#{@q}R*{5bU=(8WsSJ!)9^DdE{T$D)JqpJcx(I3k>V$B_iMgv$)r z@d;<^c#(Q40O1{^D{oPhn-1w3)QqI{+uB4!U%mq;T8IBmlIa2W207w5-H3TPxa{((UnfdbFe=WyC! z7z0n1n1UnMUc%A*EGjk@6)>$1@I8rk=?V`oU%e0^8=pMw1hI_>-g(53`X(GaRMWt0 zoLujMWf>U!3vb)YB(=Z4#<*cL3x~J8i{|1e3tHA zZVWfe05TXIE(73PXLL9Zbn>bO!Yl*(=id`TsL9R1<`HBjGr~Dj8)@{tQR_~dT24Vv z;9nr6Hqe5Auy+}5Yc!7=!s%c{&y(JwnDk6kt+|i%0FeO{PiDP5VTzy1Uu7!@`1)NQ zRwW#EXh;cND$DPJa}c;+65*b+Qo_D@rV{%23slL9MKGK|hRPe;!VpjSguiMm_LSE0 z_WBowht=I=rb+m>5q|18&du`o^Z2bbfu}m!G4WB3XGBGIPIR#f`TRbB@F53r6%_E!7Mn+;Z zGTVw{kO*N_p}jV{2bVj6c^(ENG#V?;YbwV8k9flF^^*8k)$?`S8)&|+D$95oUO^NS zYY>nc{EfJ#Bi3PMDbS3;iziuvbKXY-fjL|848b}cK{rLhd>u1a8|Qq$0`ZIiC~@e> zP3S#_oy;Ni$|Dydq$h8Q)n1X$oR&fiL)?MiiwI?X5Oya1C~>VvZYPm54ra$Fstflq zXr9NvBgPxK!aj50fJ*XtdPbmS*98l5#?^d2Ei|kVGuAIcrFL zGcG%mXIM$N-M9wZf|UU8}f>Ad1XdmP6Hu;cm5h3Q4s0U6Epg@EouppEd5h!RI8VuOz zBs72u0$R#YKoJt&q|h>rW-=W`rOLYOK2%w^xVZnS2rU*ig>D8edOzooUCjxuKjc|Mk3!9?_g@O*56L=r<)8pPBuE)fvOUO$TcC*iv zqxU=C^xVFFKwb>Az7^${iTZ~Ox}R~iXfJE?Ut!D> zb+nN{wlmsBC+O?-VTVo{*VnEv>42cG|5i3qbd1z8Wx=oQUcS?hw50)RR`*D}J+&fC z+ToM@I1BO}LNtPL8oobFr$sMhyjcHEUM8d$TY4@QHPQfklEITffEfZ$gO%_q*dWlS zR;qavTK6H}d~Ow6X+7pXiUARENdJ%8Gr8Vukss z*!-a2YF{v$Q@^t_JS~PYXDkGW#;p^{R09QQ+zi#D?l?8xs5>a+C@V~Cd(~eR1c5Dl&W#r5Ca0rs8p4ag$W3!Qd+~%a~`mDtr zP08ssW6x#KJHvW?jyPYD2jvCkd=zC(S+D5ciYuHK`F2L`G*#geH@$_gx}ej!by#>>kx#Hi83F0)EY zBip0jq+7SQQRmbmavO%&xiK3#DporhXZ&Pc=Vj$89KV)%1>O?mD&SEWj$lh{D+b~vlRVMrj3lZWws43 zndzoO1x;=#+Ya=0uRoWYn6x$M$1iCi?{RC8#n1+F4{?6j1ldVCGc&Kz^sb>y`^;1N z5uO(X+ef{AaV`+{L~0N6mN)}+r@GK=lHW`uN`y-AvIF6j1@J z)xbIf>i%#Tw0YXo#-AW7soCOfTa(JWleSpLa!B7ww`$f_VRd}*&~|uQO^ob`EgA3<5066A4W^~uzY9$fkxE+ zc;dm<%j-Li+7CzfeGhHvxg8`VAM|tx{ZVFZ;Orz9;$%T_tXuJOa1=#KBd_b(!b{G` zi~FyWZKstL#$XeCJ^Dzk?8am+H;bCxz}I*0R#12@=jf9A5I8UMbuPDEuiso8i!I*L zGr+UjXlxI%y?BHS*STC=RrH(^dAXMt^$*2)Fqcz7aA44aUh3VP>!jSSNH1Lx>$(i1 zJaos#BJ1ml0G0;=%WUV0%&M~}8|m2xKV+{oYW*Ij-+|XS7}$>)Znj6I@=vp}>mIdk zQ}bYZs*8DZhknesbgpxIN3LZh@u`D^xWwHzW|um3W$FQPrnYLDH3&*OZ3Ohwyb||u zwq-@8=k)TfJ?w!NcCB+<*G{pnsZ{<1x|YjnQrmN#D`A-l_s^Ua;-Run_sMbxsCRzx zG+0lSX80CuccFl9PX=8QfG+!xb*J!=^y7kVb$3H-{U?>%XWLUypFC%V1=voxk~z zSp0T?2aEpMRJ?t8u1xMvy#Ir`O=a2F%py>Hxo-b(m;K!E4&hft& zen2nn=Pinz_ld=yjGbez3-#@S^YnY+6*pYa^~oEqTzKpCSH{l$z!leB8Jl;*4OiTH z-lAK4T1kP1-yr>?fAl&R`ST3|$=VUZr%w|zOqIUMvr8v*(xP^_iWP zFrlb%e|(K$TmA%!NUf3a`TlK=$+|SLryw-jmX|L{aFy|^3@UvKigGhG`Y1w^Bg~F9 zuinhnqvcx-&B8n4e#VX+Z1J-24hdR?@A+WWAB)A7frS1~=I>)XxHeUM`BE`qWF8DY z??(G&5kT#+#$m`DDd55x#ba$o?hynQzVU?s)h>);Y=5j)Fs*!}GGx&n^6PPlVmw!A z^lvD?VgokBLlsqb@~h|uTinkuUn;((GMSdcRd%^2P}bg@{Hh8IcJs!qX4{qbV8|dm zjK3a-0JdGs^qgd%H;k>rGBxWJaaTSrsD!L&_8OrcUf#WsT`dAYz5IuJfVUKD=GrZ0 zCHsH}$-n2B9NfeT!^nUkIa2qC?B)tGp%F~&g`FDSt=Jv$UuYM2(p^y%=qiL4kas9EgFSnlWG}_o$OTkc z`zh3JiyGyCW^DgGXvuB@1-m}9&;+!g2N;c{RXpKW$67`fplLw80{GMi{+`O?D8kYH z8bmZ}VQqdpk8Et^Duo0Z{*2dm=z(02 z>TkXl5TmUfb~Cm+x_DQ^JuR`_vw9NzL5Hd~4GPkb-Tk*OwZy9Vs()2XKL1Pq{5Rf9 zwp>lpB<*wXS#QhevZbT@-LN0O4L8O4oeL?F+E#3G^76v`e)J2CU@;btB3jVi@}aXJ zfZ7uN_$Joj`VZ2zaVi$u3`RHiY$ZLGl5T|*)$=3XlJ1)vXUjU=(xbwpFxwypF@Cu3 z@K>>|S2zSdji7gZ8&TdCPfeziU9#I_HyxX8+11xt)t{fb?1iejN1mC|xjoalosS@6 z`qg6z@9o@9RGRs=2P`k38Wm>}#&-cT;Ck z`9P*^$Kow5JN0=abRu4pUb-W8)0Gl#MeChuS5V(Ugy+8Ys{TJrUG^enpPZsyZToq9XW!w20SRQG82PN|sc>kst#(f&EZQ0D5wIxBvo4O5#Ho4WP_ zwwq)1)Nco691P{kHp?c4W|4mFBZ323Hjpz@iHG9(n5kUwUC(l5W+*fvX5?R>2L+(f zwzEC8M$lNL;di*%Mlcfra8e^>&^QI*BLa(^5T9tWHrTGOYb5{2F$DE5DNg_oO6^P|JfO0TL>;)%>L{zybMA;W4;!0lh~M+*$a}!?l?IBt0k)ZbA$KOwc3#Nd7~7 zwS~dAK=8@y)SR@@g;@6);Ry|4rIoA-{gQ^Z8LNg>iOO%wv}`N`aCtb1htyMEsuLnW>*bgl1~C2BnaIQ@``uM>vfoJjib&-}V5v{>9K z+(-dZ5)(b|olUn{t$Z@6_An|b627EsM$|O9f(Q&Bt}(V5S>KB+`v-%3BYA~ATeHD5 zYVPZ7=xwj@J)2tWG1^BxW2qN^>Pxir|E@jO+xALfufEQD*eE^gYkQ@)H9@upvK@)f zLZjzE$8Kz!43-i3DtG-#gB>m$VAS1xZ`3+3hM}lHu#8ajwqZ-w;w6itG|btp-HR1_^&Uw*dLhzy-1rnxc)2F(Brp%A&X;_>}86MS#%x zn)GW`-3^g0AsLRjJmkdcuI!q9^oJ0&HnjV0p5-@h(fVD)XbA60ZR=?geoUV+pag-= zw)JSjnRq>ziPx1s-q-p1vKQ~{n^!e!*|aCsnHjy!a2BbbiI$B_9mu(^wj(y>2dDI- zj{ZOWmSQ>VD{pM?M=T{Yww+A)c;8p`(F{5*?E+7IaL3F=jOg6%bph$xZ zQjK)D)?yZeF0`ABC=(-vU$B_k-6+hAYB>)WN@2rC6eKEkC{u0H#B`y?0sYa%t zJUxMcbObS`qJ>O3kpSfAi}lt_D{K!wj&8207D9Oz@yq{;tkojC#?Oxmj0=2Si|vT+ zd7smld`)GG(bIeATed{s-hw?RFir)Ua~h0VQtz(u)U?8ygHjrVePh*$L-^i|Ri~Pu zFi7Q_G3X$aFpXx=iITe}$lX_gLXq4}#@~V&GhU6`lCZSe{I?ho-3|#r{gx{DIs#)c ze6SwgBbF$M2%E;V!W}{bAG_;K2Eit`^eu=0@0Il18K2W$bJNK(9$ za2SeufF!m1y_FpQ#TK0?Y5zo#ycw*Z`tmkaifOp%hrQ-ta-M8-|nevtMYyJ z8G#TA8ePFmEu>^Leb&H%T}RnW>s3?QFwni9aKO*o{AVDDJJBtlvLo5f%C+snAvTQM z==XKrYVsPo-$EleghLse*ro%vx4XW(3{K{r#?s;8wc?)vK@1oPUfPSZDevKx2;jAn z3@}oI*SC1y6+Az{^Bcgcf`5P2!a5@I(bX^$QPCp*51J17zaJMCulvn;s!b8^Ad8nQ z!M|eq+>Z;Bl)hIqeWLxS#&4pLTW>MG%rFpUrTZPFvb2@r%fh6O`J^zu>_$eZ1@!-a zd|B9`XYf#!_q8ibdc-FcCWtRn7TE#66qJs{mxW2U_#_Yd?C;CQY4l-IeUdrfGS`be zZDU-MfM^Nd;;F5Eai*1+*s;1to2!%VCRVaBLdcg_{|sFSp@)ttK(p=2;gmW1z_Y#B%yZa<+v^i!kZF5v2bgrK8t9 z+FlJQ(l#AbEVf8|CP@Fh(kG~Yu}?4D5RM>P`FTMi_wbIdS?BvQNrlrVsQ>8V{xlqVqlJe00m%Abgrg+mazwuC? z8TzO8EPpUtTS6o=?}*=n1rwDOuifQeu%4gtY&U*LZ+h}*j?I0Tu_xV@AO~p9%1hsd zw6#E3((1QQK{L$wl8oaA4C2lt{9r%CQ0WcG=6D@)(=U+3oTud=u9#=b$(pBWMv`~sLF_x(WmkHj_Dlx zX^z9{*hKv4!p%18c3h&5G{lzeBMmP#DOFN6?BjhGiWGAI5jO7~w!CIZu#?h#pob^o zIjiUJNWQhQj*n{R5QV;OEknixy_jk~h9`pTYAA)RPss#n>>8MUz-RbVN@bQW(OGI{%NioF`Cty*DAa`~CpXeFA(7Fc` zg=x;V*MX7_Q&-@%N6F%?-VjuTF3gz7vnW(P%Z|Th4%*r!iG7z@rE$0Iigmp|i>K^S zTu_~jbAHf0$960b*u}Tj>N#yQ*<{u^6Vahb>&HZgfAC@(Zrr^?;?31w4w%z?BN8e>y){3626$rDPYdNsF2nsxG z)=dM&m#8loO3SX$(!(-@cI^Vw@}E+=Af!8F=5Pe(0=+3&lNhXDk-V+h&aIiwZRw@k z!ULgOw(0EZZNY)iy}uNZdq|zqRLAn#Pj4+FI4E{B@Q^sUaMW5ot%3Ew58HFro}UgK z^EszIA-CAD=R!UgSN>$%HgO_udg(yejm`m~+(6b}KTu`eSfg&NG1yoI=G;l-R|r^q zXieC%#8qKKRm4hvwzI#(J@*Tn37;o0a@p*@4~@CQE%cI)G20!3!K7{QxwD-cK&|xB z4T=J;E*$1@*W(a6!-G~dUUW5=NS#i|zL;hHJ{Y2CU6aMbl+(9xi)xg9y%~K}$JG6# zQwT-;N^O3*)`eIY#7yoob3&rKOG>C)fuzKQ;h-e1(!}y`@cbM)Ey+PNEVVLJ9&RDJW4VS9U9d+{YqwQEnU^K~HSsgCK?K>`GzpSXq%W%d7&lhO(grutQn1jvmG zj7sNYMl~h_g&d&)DC$<6YfHqyQMcj@y$B$3U(s!ySjYJd17ZDFSp5wlT$Gc=6UI(s zP4pwfug8fC{0jKsO->E@{=)O4iA%Ca^KoJRzmhd$%= ztZ7fh&bKKIrsEE(%U=L|Q#E`yTk89L&+@CV=6Ksf>=A4aD}G+GJ+$)dS-rQ_#K{oa zYL4YOjHPVidEqC!uDF(65wQ<;cU|AzrTD3e^%C3g#`*;dA-bN55>}-tixsmatj|Qr z45=R9A+Ku~7leevG5m+GGAe5vQzx)t|>NI216 zms3+h0X!9u&M5emY33_SKNMJ-4ksurC(iq=f0|s z+~D+sl&{D*FU)vuG~?6CNU`*5vz4wI&ro{XOEjOGKMm*iaQ+-yu9&-YG{@=dz@66r z^thw#_z9i`8wMPkOCm~!`MnqLeBO<%SKd<8bWMDezJ~p1GlhsxRcLqD0RW`#31VfM zI2}6#Qen`4MIbtWk7j6}?N85^J0MQFeTA)aww`KAzjlkfvc9T|bs0ht-ZY07E^Y#7 zCBDkzDzcYMng~efTj_44Kp%+Uw`9xiseaq>WmK6}%Z%Zq@Hze330>HKNq}beRrNwM zac45|e8U{vmN0KdqVN>So8=eqRZy&($PHd>e>JveHtCp4kN&2IE+MvQ=>zKz1jZEt zX1KGsev7E84;TwJ27W-~Qmq3#z{D-t{y9B*Lf3mrFCU@v#gt3wyk3~1KHHxi&sM{7 z`Ih0zv4kOTqVQmG2Cec;%LD194_sRJ+2`qBw(WtsN4{|T_Z3pMD#f3QQRN?1rszlm zr%*w7P#Qnp6m#ZiG0(m6*szNXdDD3S^u?yTUfmR0P6ccvwhw=O> z{Nv)|MEoydHT>;424_}#t%oEzA7WPK@q7u-7Q=l(*A3c-_R+^$V(t9DlK*cb?O^`L zYTnAfs<)E4x@Jmo{Y_+_E&5B~L(`*JK99N1wk}Xqrq{q0gc=yED2O8&Xbse_Zp;VF z2)pkIOrBc!$+~?Qx!0t2JsU#C_apo*Uymj%1?%hD(gxL;^k{e20YSf{XB9r6wWPZ$ zFaVH-*v~HcRtwCCXIondpq-<>09X70m9VwxvJ;fGE`zudh)Yp&LNf7u107W{2KjBvfsrC^D`;9wf*^~-d`blr+SBWf;L=)UvQ zKuX?`?c5QZ)l#?OIg>+2HV)QgdzBwiiYVOAAOSE>)Tjhpn0K!rtykR*zGUxS$(Kw! z04sj!wJ)uyMJ8)R>U57FxKUqEe_an79Ait8ZdTZv?ZiXEsrfV`{Io5rFsmUx{f%X1 z>eyCYgW2X%U8-8H-(B!v>)~*kDpMQG$ESf-x*l~tNTHkvh?(XE_Ni5$QY);6 zp$_-8u!bS4VP#Omr>%w|Y5+3S0DD4Xr3OCv8t$w>=K_NHIluo}W^m(+KSmQQ}P z{Z_+Zhr1!HVbE$A2x@r0)i6j6bd=E!>VP}dz$ahBHmhML@sD8*JFSKtK@EFb4Lgev z-&us$&M3S%%5Fh{gI`9s%=O@G8{IN5X@CV~HTkng6^&zyBL5QP{Ic|>xe(!7IW?8l zsj(-(f?68KW0m_7z1;Hv>De!xplnJ5^3-<8X*(&LNohCn+eI8U%$s_{q9%~ zUKIJY-;838V{hz4sQ}eDQ|S4vHq*3en(-AT;UYSk>%|{dbAHlnBv`8!#JY|*XEPL8 zyE?Lh{Af100APVq-Uiz4KI7{w{LsW=CV5xV-4J~Hvb99edUGgC5Ay|Ei3FhY<0eZZ zd-{V52hFN%#?(P~`THb3?~sDeN>Drs5I+V`O#M+2;=mhw{G5_~Z28dfAc}&swPkAk z`y((34Dtw>Q9Iet=AK>TEQM+Rmbavv!pXfj0kD!KbYIA6TB)d@^zp|V(PMn^nz|MLL_fClXdj?Pf+Z-u%`do~ZF~z2WRL4b_kLMp zwv9QbPwuzp0tyRyE==3v!^){9Yk|KR+k+U|gnG1VEMqODAGh|xlN&foE0)dald4Cl z(Wyp5S=*e5^#`3GksgfKt;kqcwf9e5C5su?4o)Q)U+OGBNc2BH$eq6yippw`$*Bk$ zgl!wl62@Tr9n+6nO#o1vvMrDM7e+%ox)h5;RoK4Ds*6de_=b#JQ}~YWRaMtzoDx!X z6VY)EoHQWH`N|)sbT(vGX_Cd&f=9ovF;u;Y#BlXD%}mW#&zJe0BSiR~A3@Ixh|NZT zi_+GnO-Nh+`2$H?5gRpvm-Ybu`t6FlJsmiLgm;liOtd~G!nBoghDN;X;5iJr1wZ$& z-zT6ZaL+DQx6xmPa@k@W-OL`t&e6@yTnHqhFxu`8CB)nqGc`|Dp#uq20(rFdiGg)XtyTmgG6B;Qe2*gnkM;L-(YJBe z?*+gMG~OJmTJ{-ei#rg;2*Wa30`La&`+_mJVt%21xm*3p(@3V-Nb)Z+XroCOfsr>u zN)vb5n-Lfh!|<^sJX2=5oZ@c%INS= z(}Xgd-~3`D$LBA@6*z^EQobC7Kla57}LT90RwS zi)>!^f9%DCZ;lI1WX^95b*uXZSnYYN1L#)%^1_E?Dlm=8$J0MRjxa7}Ezj4Vd-avq zF0zfXwxYn#cAaKjyinXaYFau5Rqs!-k>8NW&eNRTG~es*eyn3zzEcEu7QeTEf68<7 z{Oq~&gXz-TW|~_)01Uey%fpzU6^1wJZsTn4OwXwl zNI$M$>A3cqzk=lj6@4~m6;t40EASxkXqlebRzSa2Ko9xZzQ9kUrRUU{zV^Aj@c0J* zmThkp$Cn9>@ck9yqq$X=ldU7yb1i?0UAoG;bUdHZkL%Z3&_f=ssV)uVY=lW)Z+mW) zira3j+jW9X&oNe1zgAQawxQ^h{_g+C<^&v6<;*H|G1s$@UusfE+Ow;aXf-`)H3{Tt z1AL65t$OrYSU@!cAW_|;Gp4LkX+fEhS;YpT10W$-elXAVs9I`QwU%_8B{gKK^M68= z2?^8OA3>OsPezPBA3sR4hi0C2y%#B7_SlOLtz>?f`sVVymS+uK&)?)(&52vD=2>0S z^FQ*eq3Zc7JgYByzME%H-(uGrg4xoW=e}O( z27x3&Ahy~1iFzT-`=qdE{XVwU41;j#kxb&Q!hcAl(Qb*4^!up_mazCmz%5M1lCkI9 zK>SBwKnznzxoCRH#L`83V;f(r$=)Rk3Q`W@*rs=d1jHXi^dBeFo=AS-->tonZC)VYz~T61wlTmPxHB(B}*+lq*5ULTz_9x&C55NNeC z_8GP@F_WoV@d7}HibAY`12X4)6PHqhsz7kr3eCZbB0`(0Ul26*sC}eX3Lw-8)3jkv zI<3uTiusf^?4qYiEt6F;zdd!9 z@*>c=cU#`ZLMF8^EI!LV#Z#B-gF5~;{~@1XF{ajpCI5P&fyvAB^-p+IikJgEyvNJ) zw)k*NgYI0oL(pZiMh<>OFvYWT6PbC5Lj4ks^B2)~jdsAN44c{rtH8Mn{faT~_wyTr z)k8=icsXhjJweD^eY^X<%P^1Dl2R$FL* zVymDdtB6>J#$uN>2Y!lVaq?5t$!v&UH516i$C)xJrev0KgDh{On^=C(Z`hICWLajB zLzC>W^0x2$F?a&E=l-jZHWPc3RDBp``aaGNrXeclDz_;*;}e$96vpoz>r;Je3Ex^s z-X_EUfRt;Y2WN>c=e#%ub)yb&6ROtqX%vND(tR+pA}RfrGs7vS$_^>X5v& zo@NCny=-`wRNc}w@^Y3@t#v)9R?lIzdJe0#XI1M^N%`d&tbLptZD}_*4n8Bgi%>#Oe3miXVNUp#!ulN(2CQFruy z)Zs+&-CEn49vGa#);z4B~v zL?uX8wn%%}i$77a7ngQhzM1&#=$5rWs$B~}W##C#1yKyPY7By{x}cds08xF?O~*K0 zW)JHwJhNm9GO0TUEs8@g+>&El$`d>+Sb<<@hO7gKm2`+B7>L>i-F7Z}D~qnSYk$a( z_&|iut{^TMvzvUPg?$58l@TitsuYvvw*!6ed$x+AlAI@DHb0Z?uLS+Gy;`trBewHP zim$V9x!LB&C4dHtZLCHXTdY+d=Dk*Lr#$_b7FI+||J3?`-3(y`4s><;U#tEv1Vj?W zOxkn5PZ$F)(hH{B^CnL|;2mT~#$aD_1C|q9cz&B^KwkKgX`UqkUC}m=Jscf6;|=9= zbD@|3Wkg9k^knAd#3G^y&o?ou*(6n;ELa!{oZl!?7=k9#7ZAr1qlhkOkB|5Kck$5# z0)I|wfR4WbT-eIvH%(ht$73Fkokve&1LM*2$S8V#;@A*91M}u80sqHDlYybD3Cj&I zbn~OZRFz@q(MUH;QiDQR>lNA?psVd$8+7d)9Z-g{uf8m!a{Nrh0n_mN;46irMfCVqRY>xjNKZu0HiQ0HPn;*OwP29GlL^NuttT4x%BTzO8AQ_=G3iObdM{smO*47`xiQew? zp9FpF3PKTz-jteOVaCXOyTY52-ZYza*UV?xFdEH&k|1Ze=dh9I>*rt5bw$a{>WNXv zFUIRTw%n|nMROkn*oW?);X#1T2mxOCju6A45hg2tLBbpoFmmByE)c?SgEayBO02NX zYBls5Un~ABQ;)6I(~7kcEi`GZg-;SMR3sB`P~~qpg2!`;Jyto>s@$@yD3P{d-~$UI zM#P`9%T0g|&uf?{9w$Oaf;s%yo4(*wG0fB$3Y`UvPGi}-jPw^>VU0+};Z7kbVi+D!#OflI z_}$p;Glg!2dMXJG?2(x}{NExo7vaZ~>W4wBj>JAj48aKu=m zfE(Dr6`!+_J=!v^%#`lMc?C-g&+Z9Adn`LIC~JTj58XYMt)(nIs1)8NU;pN-2#D~& z8{h{Vj}f;sVlH6YR>F&V!wac}g&*%})J^3OE8+wD?3v0o?+u&`ADTcN_Kwgv`@VmG z?;*g0`T!4}DaV82x(x}S$z$W`Uvz!+`thgN8BJg*PS=pSZAhNh#TRGKZwfZxX793Z zI7E`OWE@i5nVcpJ(vFc68c)3$=iDe~_PO5>VA&Sm%)yUxGsZVJ*Hje_q6{ZBRTt`g z(v(7p4frV}{_s1L{67DG#{W&hUp?#pkN6)MUqt@0VFk4%S@Wea$%;`pyY7+ccBceU zyMedrZTgO%C1IU6_gJqDQ05nexy0gZ!}*IdNm$f4*s2c(-^t>wOF?m~<1jv?h3xc% z9;BH=1B?NUrvV&IR-ys>G=+419JRc_v(vqw*1^R?&^URthhXKn1yuokXP>eTxKo8o zuJGBPC%ZqUE&x=*fB)K#O74Uezl9H1eN%kcAKLOC4~CQ_xHo4dIS^KMVXf}Ms0 zkivSeo*Yu%OWH?&9gNDeVQ=273>&4DFc{&PPE-wd2_+(mt4=8!B2*~p79JX+Z4k(D zGm2}yd;DL6i7wkzdN^WigLVU#E-XbQb!+7)eDk+SU?d!p$jS9<2xowd6JRR@e{CFn z?HeAIJwn+0?8*Ma*#Qh7TM!1Be>WpPj; zGTKoFOz$Y3s4jx)N3)Puvw2rT2&ZZ)FSTXD(X~hoY_`ChiuN+g3L1COk%8eQ}(?`t+44N5fX6}%nLO;{XR40m7ae#}#WBmFpVd{jy0Q6B{ zco);o@TAs|Ru}2zr1b|x*(_+SlR+L2N+7Q>s-c5JJi~sb*Z~d$owhh|%x{UvMpJ_E zmR#fE`b`go8eXMhhg8FK<6bL90_vF7Kxo?BvJ1U3)AHL)OFr1LZgC}nRPj@-6edJ> zody1*MCdT9@d6jjfRi({Pc(pVlB<-6XhiHYh9ObeU7FiLhlu>XnGIoe~IecWY;-LXPU|y@6*jb z&xB6yuio#`${XNmuUtL|!fD19Z&i``4?9bZVtLek&>;*uVZv zH(||oIu30qVa}863e_p@+TchuRdWrcP@Gwt@$9_#oMu9+$`8;s`0t6|PT+!rvcuTM z(zo~3c-P4<$GJ{gMxMbKN7zMh9G|&PP7&*4#0&1OIkIg8_FH`2M?6(&8PedEMeoTY z-g{D7!`9zP^=C2vx9UGxxV$FfK>1&MA+HU)LCrnxWK zh*DgkssvelEmH0sVL7ZAG&`bG_I%JW#rF2aBC5+(k)j2bdmw(P=&c?a)=MmQ4r1IMYi?`k{-YxU{YGA@K-R%+Z=4JFC2z?sdV(3@qh=wUb2 zx)3=ib$#eW9v^S;X5i&@@{=YSz@F!a-ba~ReaPH6T3hnF#ge0Pw5J+`tjqo^R7ez_ z^YYC`#L{s9qdnw>FIQ*avMTXvS1(08yG=!RYMe%yRijGNb?Zc7^7(tiwATbW#O zpu7vxbi7#6YbQyS_5pE`0KS^>Vnq-~k3Cs}G%Szi0ROPN2>*)dX;p>GI5XNzM$dM) zAT%%5^>F0)EjhfqW9|X&I!$ zrsBxeWs?(iVb$i(Lx5pU@}8dHC@RW&90b#tB6yZ*;f`Z|x4D7UxDgpG*^ zhr4j6TIih%B;|UOlm|1_^3Lk&PPSy(`TP&A^k<~#IKxD{|F+713l3WH-DDng^%v^<2r{yauk;U8%FGvV=1;~+BolsVE)?t*9m}=vC_4} zpG^|jk(w{^DSpj+wrxjlVO169%dkc*eM7co1CdFF&u{mHYXEt~vd2>kBm%SyB;D%Z z!$MUy;?cHPSyx!ux@^n3Ov~2v(yg(spt7wUt}`fmiB+~0dtC5gkt+L_ipq`-D|)qh~^|JPT7F+IfE5OC55rtXY=Lv z%39g0Y}uAxj;RXQQ`=gizZA3rIG^{+^q#Qd2gu}C{{yPnR)6PK3>Z@TA8_|s#Vb_t z3ahwnMW$^{SaIi?AfSwjmj~-VtoS}M`SpLFubB1UvW-eb;qPFHnHe%m0`H zY;Jjq1>D#6)Uu6Ly=_l%#L83Y*QP9;#W@sDrEl+n%<9;dr?LxkZ0)``+j4KxZNJ+l zy6^*058akK5Kxb6dOh{12Xb2j>T!|(X6D>&!EGPs@U3v$BrSg|Xc_WxO3*T)fOltG z?#{H_lU{lccdIM%;U4$+bm)iOKdXJMTEv^>9rsXa0+atniEBURl@q{tP0e8Gr`xf}^55E-j zb{xMI8xQ&IPdPj)6FDO8t?*mh-!`7#HnUMCTy2jEG$nrfS?!?_s}ys7GyGPV;Q6gR z8Naos{|>)Bqh~z7J<5M8Q5 z!b+YaXkTQx9{*?7MeK+FU-8=)LWJFs>JnFb#=jR?WIM}z5B&CIqzM$8)a}OA;I}6Q zA6BR`-MJTK-Zf!m6Z6~OTK0HqrBw#M-4%SeN0q(1qOwOlQDS*c$Zzir%HC&{!Ee9f zKS=)xOIGq*Tl*z`+w*_5p56k#ofTGG$#1p#BmDMwtN1PO+aKZsvsoC&Z(08le*2vE z?6v&&`0c+GCgitsaZra8pn~7_kYp5~#8vmqZ~sRWU=pskCw{vqV_+N4Z(mxX0FY6dfxjbLwx7U$W#&35~Afz$1d!1Y4 zw_|*tgx^jSpBC6xWS_;!mLO0`d;TyUaE?T%&mW?FEJ!Wv|NldXD50}j79CyZh(Qb6 zv#ufyy}lNXL!}muQ}X&wHP2n)J=AIbDEB4mq%5vo_R6$lrw`iNhwn?Ob0x>DSFUE= zDZSnsS}q2L0*V|{(9?;=CsTw>r)YBCgqB{~80+F(i$=dg(F~;f1R6?O87Hy)EHS;l z(WG81;+(Dj)xT;6@olh6;W;yUa=~87jr{3I^20E2?C5wFiJV40(>A(nGdnG!DeOzDl5=#3@Sk*KaIGS*L=ngNp2O|i~4&&t|eaw z5u*1&WqNFh$dc&q|B4i!p!{w3SCl`mqWrOYD6e>wwZ=wD@hBDjJNR1__3JELvA(c> zPt#ri&56eMcZOY&`#T=2D6jEG%TJ8Y6Bw#54=O79#5@L_;p_80nn~uD&KErktU&V< zV|I?yS5#Cs8ox_(>;7q_4b^9Ov;a56S=2Cy*Nv{-lSYgRYtuADWxZq_44GH4{?uB)hD z#OpCsk}~`{mh~Q;zrCZ?l=n~N|L}Z8`TSkw<)5a$==@dS&krEiW$iy$Q9iTh@@M|O zqWskr<Jf~>;ozG0tOhDNPEtg%(2N9(PC3*c9CLT`HM{T#6xApca^)sF#{zS(E zm9#sSJn$vj)ELZJWw$JgP31{1Dqh12r(v?wFdlwZ{RzE*kp5~)m&R(g z1n>2jdzEtp@&#&zX{ukw^USozO3=ORb-54Ix;YgS>_fA|PTyJA)56Eph=_~avx#g? zU(&VxMK^GYc^r}&El)Z*OzMWNj=3qt_HR}D*U*0c|1#WE>;q*rzW(Q+#%|aUqZ7cY z{N0jwA4HkQRHjB{!Ix}^8dD4l+ zq{CAS%99$xq`Dp<2lYXe%#S$=zR~S)bas@ix}8*yyYy4+cFS1O{Q`r!x_uE{%Xjco znjN~me4`Ml-M!1iG&!!8KdCR==kr;QrQC#iPnB>{*MvXO@=AL2#I7U;mRHiRUefix zB_~FTT>oV?rO9qgt+3&Y)v7Y$)2y<1;lNa{zL(nlkxwX9l3GayV7|BD?tXl*I?YjzM(1ePF{u?Q z^MHPeBM?^C1|wK5`gA8Du9p>iEW&lR8zR1fHil_b%U05 zPjK)CpXL@gUU-Xk)CQr#>beLHy@s<4WG>uFT%;XQtzGd{Ye(2>S3J*10~`f& zxiu3{4N?al({}ek|G~$0km0?-dkNf)^q9DOL62a4g6Z8aZVkaro$O^JDL8ih+qZe> zMa478XWVG{=HO=lI|OM&(%Nv!37QH28ik*qR}Viux4Yl73@8(U-<5Yv0>7bg@Oz9a zLMq|so8SoG0Chb4nyfGJRDCjlU!DI@gx_xKht^zreb`IEPtPIz{^6D~_$euX-=~0V zQLYSyXoKH`@nPUk-4nWGynAY5w}n>=yL5rX=#opITS+(gdE-aKff@Q72(xPAOu?ti zKI`6z5ib%HwphS+O=5T9{3Y74l63zV=C$3(-Aba8;p3zT7hAknJ@s!J#bx-svBg0VTAEao&fmOGtMAF^6Omz#a%Qq@7O)C>= z9d4yhOEqXtiY0FHUqi*=z@YJor=^<0_N~NC=wbmWKkq+h4|O(rVgklE7m&_esO_HO(0 z@HYFiZoB>2FlvAL$L!Chc)JP=9B+TNUT%N3_1d59TkX$|G5fQ#u|qirTkX%TMfS(t zYk!8;*`HwzIN*4Zz&2%o{n zzXxb8{_th~6#iRy5p4jWV%tewgHLe*&x1U-UU}{H(GUikznLLFDeXCrhJ}}Nn^7ON`8>~+5bsiWb7sMH|=bj3@4m@Q0Nel9K_Xsq8r3i)Q;o*|t^^wAdsJQP7GRQE+td^sb zuaQFhyw^s~ESxT3!_EG=LCre|(pT9^)-62y`Y#*#QrNeU(0MRp?i6Y-w0Wq$k7w`r zBK(AoJgkY@R+=dF=DT>nfU1Z3U-ZI0{4R!!#PsM6YuHONKlo%6=zHcTsY}@18ua&4 z;ImM#gGX`Z!=_Ks!r4mZ1_;I#OP{SoUNi-(FXwqq?Zy0Z-OF_SZO`tnj}o~=j#7gf zL({?{M5Ru?gx`-nM}ay5jSeI`qH;&()T;Q6hi9j&(J5^s7*1BJ$tf*7#^*d^hcNw! zB6F;vE*6naYS*Aa|iI0@!P=7Yua4@7q5S zov2`q*nGvuG5%n2c+_d6&X7rbMXTbA#Z@5%R!rjN)EK>{kAaBVVx*wR93(toT7vp> z<5y>Kjs&&$<&faDc+oM&$vBE|^6GP_35H+@#m%6vOY zEuMmrY(q{j9jW`(rYOe#zfx<7!dBl+Lz`#0Oq51VKM_p*uDt>pjR$;GfAKR=_tD4< zJh{Dm2EOCpm(*$oe(FjykmtE<2G;Sxqu@VXQ#k{`f8DHl4hQ@?6jFhgJ7J{jWlo*= z3}O$9;{Ki?L52~tG)!K373v3mNbOstnmDMcWz-}Et}x)8`wI9qfs`_4U58@U^;~B& zDjL9Sstjt7M0eD%+Wbd(NIhWF$v)d9e+eeitAKvJuZhed1o9?)77}_mpCgtUw34IC zpHzh%?(f3#L%KV$8$=kbRZ23otGtqvf=Zrah;}e>Dt@6*io0M=Gw~_DrDu@Qco4vU zFMrKu2=2vQ1MuG%aLui9Wa)5S)@p+FbXKlMpOUGwRGUl~?iYqE*;T4ds;@m{t#T;d zP`jr#^R5G)Urx;pJMnER7AMY{Ye0OK!^mOeX-Tmyd)-e+`KJA~yJdt;< z^KV`f-gOj`@V{Pdk}yccrqL(*V;oW}{9yTBL5jrUy8%{gNO?7Q(nfh+aP=pyZ0=sH z`}~M!e}7#uzG(T->CnuJa*uD|ww3iirfh&%#XY-`+dI4yKHi?oZ6mk447DV14Fz9v zoOl#GehoWQ@HiDyU-0-4hREP?HKxnp@c?`U!Q&zH0D+RZpQ_W0hxY28wWVi()*y~7 zb*%Hnte4X~7f_H^xF+BlTokpx_*G`rCO&6-^qX`SU1jhM7z%l&i;-n={mQdSzsT1< zk9&Wd_Im`3^2T096Uf?kKN+_l4S)|zRYqnoYs||#{$2AjAHXs%Pg8SoURF>{uxljk zZl2Hic0u#8XTo zf0&0U)7SAkXSzP#G}T?aH`Mde^w}FM&;Hr{m1oZWdL{KtrM`EyzTr~&y8hh#}0zRFHdE9>-s2fm}swffsnLpma3e}n%1dIi4ED|P;AeG`23 zH`n&Y{q0wObq8Q&e?NR>6v&bOrq6zeGO-)#Z{9n7_8K1RZmP|%WL3Rsz@MnDf+!OY zWQJ1TTQQJ5BFccq&_@p{$MEGv;TR(QXQ#uQS`Fdmx*Ld%sh=}lgSfG}Fgw@Dafrkm zj4`)<+rEgdVw1qeZEEDG2^u-6*hq2pm_3CXjbN`(#O)BM^}4UCk|K_6?iqz*#Wwd0 zlLe?55p>m3Z3iGYtsGF zR!vQ&XBV&8oc$8!;9s@#dzF3C@iacMovo5VYCS&ZVups=YncwjevSUKkSQ~*9QISS z)|7tS`q%ZrY)%hw!auarBaNxUefV1CVW$%324mE%Pp0BZ&1tCZ?ku00Tcy{IoWUXK zPD5@%cr$e{to-J>C#K&5G9!*3lF~z}o_gHtR|S3fqRB^z>?(DkBh{!zg6jU$stdb7 zkaKFLbwRj@fS=6e)a`cn-6htA0zrZMTeHu09psyx6{&ftFPl1sZ#FGM|7pdL z3Eq}IyNg~{FP*lf)*gg1OB*CXT3B&BnVPMd0zjN%HPuVpj(4QavNqJeq&q0+pU)VA z^=-a?!4OmPDd1j$wAj3S1{ua+P7oUBz&Ez1T9y8jFnzI4PbKwrefTwLUpW(KW~}Q} zUGc6P-oySq_li{+OjK&2O5PckJiyoIIoVk!z{wU~5fLk{S||3URRH^%Mv6F4b~mUR zn@?uLeGv6Fo;73z`gidx6o&Z5Qaqp2eZvh`exhsP)z@8Vvd78xYw={}wt3jX;BRS^q`P!ZeYg2)zsG_4E?Gt}Yy!gUnz7L=#e{ z-Av$3pUT+m#q=SR8K`ghP=X19o{g|j)~6{jj-FXa*Qp`N3{m#(KN~DUl)Z%Uy0ajf zhO*CXvqX zrU}N6I5=+nL33{e&toR2Z!5txmG#BT>(l&6HnRB>D;s^fTh_O|7ff+X00X>#pIu`3bKfC{S z_5Q`G?pdqtX`t%s`n!IBANMY>E;Tq4GygBVTAb47T-&g_<|ygcYufaJefKdi1@taT zyjl;)ZcD0C4FxTkG56Z{Ez6eJJ#(eZNAecOQ|v4h5h`%H;YhuW&BmM1E@Z8qAAeS( z_BTh{a6LRK$`6#6U)P0(7Xpg<)}4NI+4@Gm>MiM4?Gv4DigTkLEZs{)K}XEXChA-Zlg)!yJlto`R>xRXag3>4B2V)eSWQK#Kdy5m(@ByqcOB&l zkW|Md*!(m%2o}R`@jC>IAuXAl**kbI!lI^dO5u20P4A_f0030iu}yJ{h*M)0oQVEb zZ-+M4=K-Bupc;MI;TV2?DA^aq_X>CgKa1g-62RL70?>$K!&>M@(|7rY#1S)U9|-pySGw-Oma*=Rr{f99%9rnQso_-GJjG znvN*we8_RI2oA8!A6J4!uzx`KygGH+0!?7t9dfYNt6d_m6Yv6jDy6^9!VS`!O6dV~ z@)oUw`hzRyx_vf7VF$1db_13#V?uA2e}_B)3PoH)yuW5 zYj=n7UL5)X`s@xtssn8K0@7Umcl>0n68F@8So8Y3<_E72^O_wFUaoo@Y<&2}W9;^t zKOjX=LEnxb@%+-diDihanh|JpY>Yq9KucF8M~#du#fu$b!F^IFMqLD{wUSk#19rviJn$btFNfH zrGTUt&$acta|wV77O)P0%XO~l(B~5|j%9iHyBemApWI-Apz`wcJg6{q7>`T`Oh$1#Ow!e4eR#O4gp-BQ(r@%;UCkynt`x;bj#rp3Oi z+13Rt(+wRSKO7ZTMkqo;!~)k0GXD&JVhd1WhwNx0Dxq74nz0kNKa`8-qc0 zVXkWY+}|;((WV>s4H0Q6(^5Ff{jN#Pca_)kZL3Eg?Q*ojEhYT!Ybhk19Htd$eJYtj z>#taKdhs{^WqNQ*MMrj_RjrSO)7;gT``Ypxr&H+ zaQA$K_mG5jb7jqtdzCpzJ5H;LL93xe5(K>WV;o3$##Gf{ZZ|vI`%B7L{}_D2JKs!G4!RH9;jg>@nVLg8HeM5swuPkPs&QbVQ7K zgj>*%tXjr24B-p>?K6||x1n+DEnqX+??3}*2CpOgSnoaWI@%B5upq4w_$A$oPy;c# zPl!ca%}>aBj4REe*ZB*S^Z_MVJ?UGGD;e|RVq$3C%kA#{B!~Fd)sSmpj(dI0o)NKp zcgz$uxE%ZnxYFy8>HJ^#$+c~DXHr3tu!#oW!?(W0gmsCm1!^LI0 z)m;IzV}Eo0TU6B7vMvcBrn=W*bGfz+@UTrF>r-@c6VDI8&$hbDFxBsopFLq*U0EMS zC^CL_FZ^t)JIYEfRPQF{XDcX~oQQ`NW{8Kag$vNVd)<9|g*@y5cQ?=3&b1XhYz?G& zJP(`7*L+S?yJbVJ?Ws8%>sH*)Qp$C%w2}2N>Wp23nzi3dPX$NYMK{E$x4P$NX=KNB zZ_0EJc;2?s?L|*?T+AH=2MwgriMgS;IL+C%O;g$iaBX(Dzj*>ycutUY_nTDB9Q8(K z<%e({PG89%NM8#d%;m&x41_OYZ_V_~H4y4IV^^6PcQiif=BbNqn~odcCm2Kyu{Lyi zd3v#~L@(I=IDtk@rCT#s4!g(qSMx&#zhKdMYu}JNg5?wp0+Ji)qwiQiFli5Z8Ia4* z18Ootm)RWKh()}L!#N2u5EJ0!xddD&qx%F#jE}VO;I5q}DMgybdu;cxuB)lS?-m?F zCYlIkakVdN^thY556oF?wEz68KkBn~1T|!*OXYwc#NC>JADpKKUbjU>1om7G59Q9D zk#zq&6cai*PZXE$C{`n`OIY3N?Ij>gojP7UenqzxT>umCLR~^eGrbCQI`AfUf;QgJ_vKfey z-)6(EX8?P#eHz}!u#t@+cZ z&0fHJ$Y!+zkeg3w{6`kHP}9@Dl)etLB6q8=fK;OlZ62X4pubvwHd<7{We_BI5N%`6 z0dLjGh-t}+h55`>rnhC9Yq`j3@hB;%{{T`GEmo~3%sEh{Dxw7+UZTyUf(Fa5+0-#9$|GVjor*TG6 zf1iY2Etw+Y=X;JW$p%oZ!|72l4y9gBDiggZ1OCTiAF^@KKWfz0Ak0o2O}dB`nw^n8 z^RHd9Kk0Bv`Q>#qzJi&w*>;pe@@3<)pvf(zO7RZl#@&sF- z%1cF@n~&^2>Q6(6K#=wsU+Wu=FQCWotoQV|2QfC7yO17#5ebX~#lb#VJh`6=3=Ai+ zl0KJ=a?$Y<%+S0bc3f*CJ3Mc$bu$2$7Vk~->3FueaSFO#%a}~6$f9kdZX*o9ljb9f z?OH~iIaOr6K>4Nkc==WrhF0B;5DCn=&i#zoc8&;;uJ%1uk0}hiAgRii@N8lqF zXUttXOSyEL!ft;PYaV&on=74_xhWf;!eQX{$RWo?vRCY2v^-~f#3`rpG?ma} z{c(~PU>vhK9)Z%8=GGE@rqC>F=hQv*&wyFpKg8Q&|I|_wN>~ZP^v~#r>F=$K5EF3a z2>r%G8!VRMVr5W;Qa#~-%j;``vUqX>SnU+}BIgWBN8xj73BIQW@SRnH@2tt-Tcm%i zZdR^jFI^*R%ds$9Yx(!!rjLrJ`EZ$vBfCTY)mRYBI!swoEebKZM|>t4XNbdPmL{rn zaDkNfR+RV6&GRTZyfV~+#V%WZOBS{cDC7ZUy zvtgu^;F*gtRdN@I&9q%)^9nCd)^VNI;9%0D6<_S^gfmR0ws>7sCEC&Mvg*#lvv-~EiV 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≫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 NE*n&3udYwP;Mb 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

YFD~P)kktXdyg;Btvo)EfPp; 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

L?KG;H7lk4LUdvI&iv(jg;yVl&<+)( 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

k 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

  • o~DSjB>#@X6oHmdbP1}cg5r2_ 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 h-@g*Ym`PTz-4a{RmGTla1i8?p3bf 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 z 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

    tdp! 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%0AZ4f6t)lu5GsS12`~zbDwt&0VlWLz-VoH;;uF(1 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%0D&bpO*4Z_a6Mq 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⪻UFuyQm-7xW6o| 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 Zxx=unLLu~u@&x|g94uJv%cMoh{{rL@j5h!P delta 88128 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%0DCDJDSIG3{81nZ|S=# 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 Q$XXWjAJ%>ITY=vG7whLS&j0`b diff --git a/BaseTools/Conf/build_rule.template b/BaseTools/Conf/build_rule.template index 7e5d4aa037..0f2921c714 100644 --- a/BaseTools/Conf/build_rule.template +++ b/BaseTools/Conf/build_rule.template @@ -1,5 +1,5 @@ # -# Copyright (c) 2007-2009, Intel Corporation +# Copyright (c) 2007-2010, Intel Corporation # Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved. # All rights reserved. This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License @@ -237,8 +237,6 @@ "$(DLINK)" -o ${dst} $(DLINK_FLAGS) -\( $(DLINK_SPATH) @$(STATIC_LIBRARY_FILES_LIST) -\) $(DLINK2_FLAGS) - "$(OBJCOPY)" --only-keep-debug ${dst} $(DEBUG_DIR)(+)$(MODULE_NAME).pdb - "$(OBJCOPY)" -S ${dst} "$(OBJCOPY)" $(OBJCOPY_FLAGS) ${dst} @@ -286,7 +284,16 @@ $(DEBUG_DIR)(+)$(MODULE_NAME).efi - + + GenFw -e $(MODULE_TYPE) -o ${dst} ${src} + $(CP) ${dst} $(OUTPUT_DIR) + $(CP) ${dst} $(BIN_DIR) + -$(CP) $(DEBUG_DIR)(+)*.map $(OUTPUT_DIR) + + + $(OBJCOPY) --only-keep-debug ${src} $(BIN_DIR)(+)$(MODULE_NAME).debug + $(OBJCOPY) --strip-unneeded ${src} + $(OBJCOPY) --add-gnu-debuglink=$(BIN_DIR)(+)$(MODULE_NAME).debug ${src} GenFw -e $(MODULE_TYPE) -o ${dst} ${src} $(CP) ${dst} $(OUTPUT_DIR) $(CP) ${dst} $(BIN_DIR) @@ -424,6 +431,9 @@ *.mcb + + $(MAKE_FILE) + $(OUTPUT_DIR)(+)$(MODULE_NAME).bin diff --git a/BaseTools/Conf/tools_def.template b/BaseTools/Conf/tools_def.template index bb0cead397..e797f15c53 100644 --- a/BaseTools/Conf/tools_def.template +++ b/BaseTools/Conf/tools_def.template @@ -1,5 +1,5 @@ # -# Copyright (c) 2006-2009, Intel Corporation +# Copyright (c) 2006-2010, Intel Corporation # Portions copyright (c) 2008-2009 Apple Inc. All rights reserved. # # All rights reserved. This program and the accompanying materials @@ -27,6 +27,19 @@ DEFINE VS2005x86_DLL = C:\Program Files (x86)\Microsoft Visual Studio 8\Commo DEFINE VS2005x86_BINX64 = DEF(VS2005x86_BIN)\x86_amd64 DEFINE VS2005x86_BIN64 = DEF(VS2005x86_BIN)\x86_ia64 +DEFINE VS2008_BIN = C:\Program Files\Microsoft Visual Studio 9.0\Vc\bin +DEFINE VS2008_DLL = C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE +DEFINE VS2008_BINX64 = DEF(VS2008_BIN)\x86_amd64 +DEFINE VS2008_BIN64 = DEF(VS2008_BIN)\x86_ia64 + +DEFINE VS2008x86_BIN = C:\Program Files (x86)\Microsoft Visual Studio 9.0\Vc\bin +DEFINE VS2008x86_DLL = C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE +DEFINE VS2008x86_BINX64 = DEF(VS2008x86_BIN)\x86_amd64 +DEFINE VS2008x86_BIN64 = DEF(VS2008x86_BIN)\x86_ia64 + +DEFINE WINSDK_VERSION = v6.0A +DEFINE WINSDK_BIN = c:\Program Files\Microsoft SDKs\Windows\DEF(WINSDK_VERSION)\bin +DEFINE WINSDKx86_BIN = c:\Program Files (x86)\Microsoft SDKs\Windows\DEF(WINSDK_VERSION)\bin # These defines are needed for certain Microsoft Visual Studio tools that # are used by other toolchains. An example is that ICC on Windows normally @@ -158,6 +171,7 @@ DEFINE ARMGCC_BIN = / # ===================== # VS2003 - win32 - Microsoft Visual Studio .NET 2003, Intel EBC, Intel ASL # VS2005 - win32 - Microsoft Visual Studio 2005 Team Suite Edition, Intel EBC, Intel ASL (also compatible with VS 2005 Express, Standard, and Pro) +# VS2008 - win32 - Microsoft Visual Studio 2008 Team Suite with Intel ASL # DDK3790 - win32 - Microsoft Windows DDK 3790.1830, Intel EBC, Intel ASL # UNIXGCC - UNIX GCC, No EBC, Intel ASL # ELFGCC - Linux ELF GCC, No EBC, Intel ASL @@ -166,12 +180,15 @@ DEFINE ARMGCC_BIN = / # MYTOOLS - win32 - VS2005 for IA32/X64, WINDDK 3790.1830 for IPF, Intel EBC, Intel ASL # VS2003xASL - win32 - Microsoft Visual Studio .NET 2003, Intel EBC, Microsoft ASL # VS2005xASL - win32 - Microsoft Visual Studio 2005 Team Suite Edition, Intel EBC, Microsoft ASL +# VS2008xASL - win32 - Microsoft Visual Studio 2008 Team Suite with Microsoft ASL # DDK3790xASL - win32 - Microsoft Windows DDK 3790.1830, Intel EBC, Microsoft ASL # CYGGCCxASL - win32 - CygWin GCC, Intel EBC, Microsoft ASL # ICCxASL - win32 - Intel C Compiler V9.1, Intel EBC, Microsoft ASL # VS2005x86 - win64 - Microsoft Visual Studio 2005 Team Suite Edition (x86), Intel EBC, Intel ASL (also compatible with VS 2005 Express, Standard, and Pro) +# VS2008x86 - Microsoft Visual Studio 2008 (x86) w/ Intel ASL # ICCx86 - win64 - Intel C Compiler V9.1 (x86), Intel EBC, Intel ASL # VS2005x86xASL - win64 - Microsoft Visual Studio 2005 Team Suite Edition (x86), Intel EBC, Microsoft ASL (also compatible with VS 2005 Express, Standard, and Pro) +# VS2008x86xASL - Microsoft Visual Studio 2008 (x86) w/ Microsoft ASL # ICCx86xASL - win64 - Intel C Compiler V9.1 (x86), Intel EBC, Microsoft ASL # CYGGCCx86 - win64 - CygWin GCC (x86), Intel EBC (x86), Intel ASL # CYGGCCx86xASL - win64 - CygWin GCC (x86), Intel EBC (x86), Microsoft ASL @@ -853,6 +870,454 @@ RELEASE_VS2005x86xASL_IPF_DLINK_FLAGS = /NOLOGO /NODEFAULTLIB /LTCG /DLL /OPT:R *_VS2005x86xASL_EBC_SLINK_FLAGS = /lib /NOLOGO /MACHINE:EBC *_VS2005x86xASL_EBC_DLINK_FLAGS = "C:\Program Files (x86)\Intel\EBC\Lib\EbcLib.lib" /NOLOGO /NODEFAULTLIB /MACHINE:EBC /OPT:REF /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /MAP + + +#################################################################################### +# +# Microsoft Visual Studio 2008 +# +# VS2008 - Microsoft Visual Studio 2005 All Edition, including Standard, Professional, Express, TeamSuite +# ASL - Intel ACPI Source Language Compiler +#################################################################################### +# VS2008 - Microsoft Visual Studio 2008 ALL Edition, including Standard, Professional, Express, TeamSuite +*_VS2008_*_*_FAMILY = MSFT + +*_VS2008_*_MAKE_PATH = DEF(VS2008_BIN)\nmake.exe +*_VS2008_*_MAKE_FLAGS = /nologo +*_VS2008_*_RC_PATH = DEF(WINSDK_BIN)\rc.exe + +*_VS2008_*_SLINK_FLAGS = /NOLOGO /LTCG +*_VS2008_*_APP_FLAGS = /nologo /E /TC +*_VS2008_*_PP_FLAGS = /nologo /E /TC /FIAutoGen.h +*_VS2008_*_VFRPP_FLAGS = /nologo /E /TC /DVFRCOMPILE /FI$(MODULE_NAME)StrDefs.h + +################## +# ASL definitions +################## +*_VS2008_*_ASL_PATH = DEF(DEFAULT_WIN_ASL_BIN) +*_VS2008_*_ASL_FLAGS = DEF(DEFAULT_WIN_ASL_FLAGS) +*_VS2008_*_ASL_OUTFLAGS = DEF(DEFAULT_WIN_ASL_OUTFLAGS) +*_VS2008_*_ASLCC_FLAGS = DEF(MSFT_ASLCC_FLAGS) +*_VS2008_*_ASLPP_FLAGS = DEF(MSFT_ASLPP_FLAGS) +*_VS2008_*_ASLDLINK_FLAGS = DEF(MSFT_ASLDLINK_FLAGS) + +################## +# IA32 definitions +################## +*_VS2008_IA32_*_DLL = DEF(VS2008_DLL) + +*_VS2008_IA32_MAKE_PATH = DEF(VS2008_BIN)\nmake.exe +*_VS2008_IA32_CC_PATH = DEF(VS2008_BIN)\cl.exe +*_VS2008_IA32_VFRPP_PATH = DEF(VS2008_BIN)\cl.exe +*_VS2008_IA32_SLINK_PATH = DEF(VS2008_BIN)\lib.exe +*_VS2008_IA32_DLINK_PATH = DEF(VS2008_BIN)\link.exe +*_VS2008_IA32_ASMLINK_PATH = DEF(WINDDK_BIN16)\link16.exe +*_VS2008_IA32_APP_PATH = DEF(VS2008_BIN)\cl.exe +*_VS2008_IA32_PP_PATH = DEF(VS2008_BIN)\cl.exe +*_VS2008_IA32_ASM_PATH = DEF(VS2008_BIN)\ml.exe +*_VS2008_IA32_ASLCC_PATH = DEF(VS2008_BIN)\cl.exe +*_VS2008_IA32_ASLPP_PATH = DEF(VS2008_BIN)\cl.exe +*_VS2008_IA32_ASLDLINK_PATH = DEF(VS2008_BIN)\link.exe + + *_VS2008_IA32_MAKE_FLAGS = /nologo + DEBUG_VS2008_IA32_CC_FLAGS = /nologo /c /WX /GS- /W4 /Gs8192 /D UNICODE /O1ib2 /GL /FIAutoGen.h /EHs-c- /GR- /GF /Gy /Zi /Gm +RELEASE_VS2008_IA32_CC_FLAGS = /nologo /c /WX /GS- /W4 /Gs8192 /D UNICODE /O1ib2 /GL /FIAutoGen.h /EHs-c- /GR- /GF + DEBUG_VS2008_IA32_ASM_FLAGS = /nologo /c /WX /W3 /Cx /coff /Zd /Zi +RELEASE_VS2008_IA32_ASM_FLAGS = /nologo /c /WX /W3 /Cx /coff /Zd + DEBUG_VS2008_IA32_DLINK_FLAGS = /NOLOGO /NODEFAULTLIB /IGNORE:4086 /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 /SECTION:.xdata,D /SECTION:.pdata,D /MACHINE:I386 /LTCG /DLL /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:CONSOLE /SAFESEH:NO /BASE:0 /DRIVER /DEBUG +RELEASE_VS2008_IA32_DLINK_FLAGS = /NOLOGO /NODEFAULTLIB /IGNORE:4086 /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 /SECTION:.xdata,D /SECTION:.pdata,D /MACHINE:I386 /LTCG /DLL /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:CONSOLE /SAFESEH:NO /BASE:0 /DRIVER /MERGE:.data=.text /MERGE:.rdata=.text + *_VS2008_IA32_ASMLINK_FLAGS = /nologo /tiny + +################## +# X64 definitions +################## +*_VS2008_X64_*_DLL = DEF(VS2008_DLL) + +*_VS2008_X64_CC_PATH = DEF(VS2008_BINX64)\cl.exe +*_VS2008_X64_PP_PATH = DEF(VS2008_BINX64)\cl.exe +*_VS2008_X64_APP_PATH = DEF(VS2008_BINX64)\cl.exe +*_VS2008_X64_VFRPP_PATH = DEF(VS2008_BINX64)\cl.exe +*_VS2008_X64_ASM_PATH = DEF(VS2008_BINX64)\ml64.exe +*_VS2008_X64_SLINK_PATH = DEF(VS2008_BINX64)\lib.exe +*_VS2008_X64_DLINK_PATH = DEF(VS2008_BINX64)\link.exe +*_VS2008_X64_ASLCC_PATH = DEF(VS2008_BINX64)\cl.exe +*_VS2008_X64_ASLPP_PATH = DEF(VS2008_BINX64)\cl.exe +*_VS2008_X64_ASLDLINK_PATH = DEF(VS2008_BINX64)\link.exe + + + DEBUG_VS2008_X64_CC_FLAGS = /nologo /c /WX /GS- /X /W4 /Gs8192 /D UNICODE /O1ib2s /GL /Gy /FIAutoGen.h /EHs-c- /GR- /GF /Zi /Gm +RELEASE_VS2008_X64_CC_FLAGS = /nologo /c /WX /GS- /X /W4 /Gs8192 /D UNICODE /O1ib2s /GL /Gy /FIAutoGen.h /EHs-c- /GR- /GF + DEBUG_VS2008_X64_ASM_FLAGS = /nologo /c /WX /W3 /Cx /Zd /Zi +RELEASE_VS2008_X64_ASM_FLAGS = /nologo /c /WX /W3 /Cx /Zd + DEBUG_VS2008_X64_DLINK_FLAGS = /NOLOGO /NODEFAULTLIB /IGNORE:4086 /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 /SECTION:.xdata,D /SECTION:.pdata,D /Machine:AMD64 /LTCG /DLL /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:CONSOLE /SAFESEH:NO /BASE:0 /DRIVER /DEBUG +RELEASE_VS2008_X64_DLINK_FLAGS = /NOLOGO /NODEFAULTLIB /IGNORE:4086 /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 /SECTION:.xdata,D /SECTION:.pdata,D /Machine:AMD64 /LTCG /DLL /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:CONSOLE /SAFESEH:NO /BASE:0 /DRIVER /MERGE:.data=.text /MERGE:.rdata=.text + +################## +# IPF definitions +################## +*_VS2008_IPF_*_DLL = DEF(VS2008_DLL) + +*_VS2008_IPF_PP_PATH = DEF(VS2008_BIN64)\cl.exe +*_VS2008_IPF_APP_PATH = DEF(VS2008_BIN64)\cl.exe +*_VS2008_IPF_VFRPP_PATH = DEF(VS2008_BIN64)\cl.exe +*_VS2008_IPF_CC_PATH = DEF(VS2008_BIN64)\cl.exe +*_VS2008_IPF_ASM_PATH = DEF(VS2008_BIN64)\ias.exe +*_VS2008_IPF_SLINK_PATH = DEF(VS2008_BIN64)\lib.exe +*_VS2008_IPF_DLINK_PATH = DEF(VS2008_BIN64)\link.exe +*_VS2008_IPF_ASLCC_PATH = DEF(VS2008_BIN64)\cl.exe +*_VS2008_IPF_ASLPP_PATH = DEF(VS2008_BIN64)\cl.exe +*_VS2008_IPF_ASLDLINK_PATH = DEF(VS2008_BIN64)\link.exe + + DEBUG_VS2008_IPF_CC_FLAGS = /nologo /c /WX /GS- /X /W4 /EHs-c- /GR- /Gy /Os /GL /FIAutoGen.h /QIPF_fr32 /Zi +RELEASE_VS2008_IPF_CC_FLAGS = /nologo /c /WX /GS- /X /W4 /EHs-c- /GR- /Gy /Os /GL /FIAutoGen.h /QIPF_fr32 + DEBUG_VS2008_IPF_ASM_FLAGS = -N us -X explicit -M ilp64 -N so -W4 -d debug +RELEASE_VS2008_IPF_ASM_FLAGS = -N us -X explicit -M ilp64 -N so -W4 + DEBUG_VS2008_IPF_DLINK_FLAGS = /NOLOGO /NODEFAULTLIB /LTCG /DLL /OPT:REF,ICF /IGNORE:4086 /MAP /ALIGN:32 /SECTION:.xdata,D /SECTION:.pdata,D /MACHINE:IA64 /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0 /DRIVER /MAP:$(DEBUG_DIR)/$(BASE_NAME).map /PDB:$(DEBUG_DIR)/$(BASE_NAME).pdb /DEBUG +RELEASE_VS2008_IPF_DLINK_FLAGS = /NOLOGO /NODEFAULTLIB /LTCG /DLL /OPT:REF.ICF /IGNORE:4086 /MAP /ALIGN:32 /SECTION:.xdata,D /SECTION:.pdata,D /MACHINE:IA64 /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0 /DRIVER /MAP:$(DEBUG_DIR)/$(BASE_NAME).map /PDB:$(DEBUG_DIR)/$(BASE_NAME).pdb + +################## +# EBC definitions +################## +*_VS2008_EBC_*_FAMILY = INTEL + +*_VS2008_EBC_MAKE_PATH = DEF(VS2008_BIN)\nmake.exe +*_VS2008_EBC_PP_PATH = DEF(EBC_BIN)\iec.exe +*_VS2008_EBC_VFRPP_PATH = DEF(EBC_BIN)\iec.exe +*_VS2008_EBC_CC_PATH = DEF(EBC_BIN)\iec.exe +*_VS2008_EBC_SLINK_PATH = DEF(EBC_BIN)\link.exe +*_VS2008_EBC_DLINK_PATH = DEF(EBC_BIN)\link.exe + +*_VS2008_EBC_MAKE_FLAGS = /nologo +*_VS2008_EBC_PP_FLAGS = /nologo /E /TC /FIAutoGen.h +*_VS2008_EBC_CC_FLAGS = /nologo /c /WX /W3 /FIAutoGen.h /D$(MODULE_ENTRY_POINT)=$(ARCH_ENTRY_POINT) +*_VS2008_EBC_VFRPP_FLAGS = /nologo /E /TC /DVFRCOMPILE /FI$(MODULE_NAME)StrDefs.h +*_VS2008_EBC_SLINK_FLAGS = /lib /NOLOGO /MACHINE:EBC +*_VS2008_EBC_DLINK_FLAGS = "C:\Program Files\Intel\EBC\Lib\EbcLib.lib" /NOLOGO /NODEFAULTLIB /MACHINE:EBC /OPT:REF /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /MAP + +#################################################################################### +# +# Microsoft Visual Studio 2008 +# +# VS2008 - Microsoft Visual Studio 2008 All Edition, including Standard, Professional, Express, TeamSuite +# ASL - Microsoft ACPI Source Language Compiler (asl.exe) +#################################################################################### +# VS2008xASL - Microsoft Visual Studio 2008 ALL Edition, including Standard, Professional, Express, TeamSuite +*_VS2008xASL_*_*_FAMILY = MSFT + +*_VS2008xASL_*_MAKE_PATH = DEF(VS2008_BIN)\nmake.exe +*_VS2008xASL_*_MAKE_FLAG = /nologo +*_VS2008xASL_*_RC_PATH = DEF(WINSDK_BIN)\rc.exe + +*_VS2008xASL_*_SLINK_FLAGS = /NOLOGO /LTCG +*_VS2008xASL_*_APP_FLAGS = /nologo /E /TC +*_VS2008xASL_*_PP_FLAGS = /nologo /E /TC /FIAutoGen.h +*_VS2008xASL_*_VFRPP_FLAGS = /nologo /E /TC /DVFRCOMPILE /FI$(MODULE_NAME)StrDefs.h + +################## +# ASL definitions +################## +*_VS2008xASL_*_ASL_PATH = DEF(WIN_ASL_BIN) +*_VS2008xASL_*_ASL_FLAGS = +*_VS2008xASL_*_ASL_OUTFLAGS = DEF(MS_ASL_OUTFLAGS) +*_VS2008xASL_*_ASLCC_FLAGS = DEF(MSFT_ASLCC_FLAGS) +*_VS2008xASL_*_ASLPP_FLAGS = DEF(MSFT_ASLPP_FLAGS) +*_VS2008xASL_*_ASLDLINK_FLAGS = DEF(MSFT_ASLDLINK_FLAGS) + +################## +# IA32 definitions +################## +*_VS2008xASL_IA32_*_DLL = DEF(VS2008_DLL) + +*_VS2008xASL_IA32_MAKE_PATH = DEF(VS2008_BIN)\nmake.exe +*_VS2008xASL_IA32_CC_PATH = DEF(VS2008_BIN)\cl.exe +*_VS2008xASL_IA32_VFRPP_PATH = DEF(VS2008_BIN)\cl.exe +*_VS2008xASL_IA32_SLINK_PATH = DEF(VS2008_BIN)\lib.exe +*_VS2008xASL_IA32_DLINK_PATH = DEF(VS2008_BIN)\link.exe +*_VS2008xASL_IA32_ASMLINK_PATH = DEF(WINDDK_BIN16)\link16.exe +*_VS2008xASL_IA32_APP_PATH = DEF(VS2008_BIN)\cl.exe +*_VS2008xASL_IA32_PP_PATH = DEF(VS2008_BIN)\cl.exe +*_VS2008xASL_IA32_ASM_PATH = DEF(VS2008_BIN)\ml.exe +*_VS2008xASL_IA32_ASLCC_PATH = DEF(VS2008_BIN)\cl.exe +*_VS2008xASL_IA32_ASLPP_PATH = DEF(VS2008_BIN)\cl.exe +*_VS2008xASL_IA32_ASLDLINK_PATH = DEF(VS2008_BIN)\link.exe + + *_VS2008xASL_IA32_MAKE_FLAGS = /nologo + DEBUG_VS2008xASL_IA32_CC_FLAGS = /nologo /c /WX /GS- /W4 /Gs8192 /D UNICODE /O1ib2 /GL /FIAutoGen.h /EHs-c- /GR- /GF /Gy /Zi /Gm +RELEASE_VS2008xASL_IA32_CC_FLAGS = /nologo /c /WX /GS- /W4 /Gs8192 /D UNICODE /O1ib2 /GL /FIAutoGen.h /EHs-c- /GR- /GF + DEBUG_VS2008xASL_IA32_ASM_FLAGS = /nologo /c /WX /W3 /Cx /coff /Zd /Zi +RELEASE_VS2008xASL_IA32_ASM_FLAGS = /nologo /c /WX /W3 /Cx /coff /Zd + DEBUG_VS2008xASL_IA32_DLINK_FLAGS = /NOLOGO /NODEFAULTLIB /IGNORE:4086 /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 /SECTION:.xdata,D /SECTION:.pdata,D /MACHINE:I386 /LTCG /DLL /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:CONSOLE /SAFESEH:NO /BASE:0 /DRIVER /DEBUG +RELEASE_VS2008xASL_IA32_DLINK_FLAGS = /NOLOGO /NODEFAULTLIB /IGNORE:4086 /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 /SECTION:.xdata,D /SECTION:.pdata,D /MACHINE:I386 /LTCG /DLL /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:CONSOLE /SAFESEH:NO /BASE:0 /DRIVER /MERGE:.data=.text /MERGE:.rdata=.text + *_VS2008xASL_IA32_ASMLINK_FLAGS= /nologo /tiny + +################## +# X64 definitions +################## +*_VS2008xASL_X64_*_DLL = DEF(VS2008_DLL) + +*_VS2008xASL_X64_CC_PATH = DEF(VS2008_BINX64)\cl.exe +*_VS2008xASL_X64_PP_PATH = DEF(VS2008_BINX64)\cl.exe +*_VS2008xASL_X64_APP_PATH = DEF(VS2008_BINX64)\cl.exe +*_VS2008xASL_X64_VFRPP_PATH = DEF(VS2008_BINX64)\cl.exe +*_VS2008xASL_X64_ASM_PATH = DEF(VS2008_BINX64)\ml64.exe +*_VS2008xASL_X64_SLINK_PATH = DEF(VS2008_BINX64)\lib.exe +*_VS2008xASL_X64_DLINK_PATH = DEF(VS2008_BINX64)\link.exe +*_VS2008xASL_X64_ASLCC_PATH = DEF(VS2008_BINX64)\cl.exe +*_VS2008xASL_X64_ASLPP_PATH = DEF(VS2008_BINX64)\cl.exe +*_VS2008xASL_X64_ASLDLINK_PATH = DEF(VS2008_BINX64)\link.exe + + + DEBUG_VS2008xASL_X64_CC_FLAGS = /nologo /c /WX /GS- /X /W4 /Gs8192 /D UNICODE /O1ib2s /GL /Gy /FIAutoGen.h /EHs-c- /GR- /GF /Zi /Gm +RELEASE_VS2008xASL_X64_CC_FLAGS = /nologo /c /WX /GS- /X /W4 /Gs8192 /D UNICODE /O1ib2s /GL /Gy /FIAutoGen.h /EHs-c- /GR- /GF + DEBUG_VS2008xASL_X64_ASM_FLAGS = /nologo /c /WX /W3 /Cx /Zd /Zi +RELEASE_VS2008xASL_X64_ASM_FLAGS = /nologo /c /WX /W3 /Cx /Zd + DEBUG_VS2008xASL_X64_DLINK_FLAGS = /NOLOGO /NODEFAULTLIB /IGNORE:4086 /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 /SECTION:.xdata,D /SECTION:.pdata,D /Machine:AMD64 /LTCG /DLL /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:CONSOLE /SAFESEH:NO /BASE:0 /DRIVER /DEBUG +RELEASE_VS2008xASL_X64_DLINK_FLAGS = /NOLOGO /NODEFAULTLIB /IGNORE:4086 /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 /SECTION:.xdata,D /SECTION:.pdata,D /Machine:AMD64 /LTCG /DLL /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:CONSOLE /SAFESEH:NO /BASE:0 /DRIVER /MERGE:.data=.text /MERGE:.rdata=.text + +################## +# IPF definitions +################## +*_VS2008xASL_IPF_*_DLL = DEF(VS2008_DLL) + +*_VS2008xASL_IPF_PP_PATH = DEF(VS2008_BIN64)\cl.exe +*_VS2008xASL_IPF_APP_PATH = DEF(VS2008_BIN64)\cl.exe +*_VS2008xASL_IPF_VFRPP_PATH = DEF(VS2008_BIN64)\cl.exe +*_VS2008xASL_IPF_CC_PATH = DEF(VS2008_BIN64)\cl.exe +*_VS2008xASL_IPF_ASM_PATH = DEF(VS2008_BIN64)\ias.exe +*_VS2008xASL_IPF_SLINK_PATH = DEF(VS2008_BIN64)\lib.exe +*_VS2008xASL_IPF_DLINK_PATH = DEF(VS2008_BIN64)\link.exe +*_VS2008xASL_IPF_ASLCC_PATH = DEF(VS2008_BIN64)\cl.exe +*_VS2008xASL_IPF_ASLPP_PATH = DEF(VS2008_BIN64)\cl.exe +*_VS2008xASL_IPF_ASLDLINK_PATH = DEF(VS2008_BIN64)\link.exe + + DEBUG_VS2008xASL_IPF_CC_FLAGS = /nologo /c /WX /GS- /X /W4 /EHs-c- /GR- /Gy /Os /GL /FIAutoGen.h /QIPF_fr32 /Zi +RELEASE_VS2008xASL_IPF_CC_FLAGS = /nologo /c /WX /GS- /X /W4 /EHs-c- /GR- /Gy /Os /GL /FIAutoGen.h /QIPF_fr32 + DEBUG_VS2008xASL_IPF_ASM_FLAGS = -N us -X explicit -M ilp64 -N so -W4 -d debug +RELEASE_VS2008xASL_IPF_ASM_FLAGS = -N us -X explicit -M ilp64 -N so -W4 + DEBUG_VS2008xASL_IPF_DLINK_FLAGS = /NOLOGO /NODEFAULTLIB /LTCG /DLL /OPT:REF,ICF /IGNORE:4086 /MAP /ALIGN:32 /SECTION:.xdata,D /SECTION:.pdata,D /MACHINE:IA64 /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0 /DRIVER /MAP:$(DEBUG_DIR)/$(BASE_NAME).map /PDB:$(DEBUG_DIR)/$(BASE_NAME).pdb /DEBUG +RELEASE_VS2008xASL_IPF_DLINK_FLAGS = /NOLOGO /NODEFAULTLIB /LTCG /DLL /OPT:REF.ICF /IGNORE:4086 /MAP /ALIGN:32 /SECTION:.xdata,D /SECTION:.pdata,D /MACHINE:IA64 /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0 /DRIVER /MAP:$(DEBUG_DIR)/$(BASE_NAME).map /PDB:$(DEBUG_DIR)/$(BASE_NAME).pdb + +################## +# EBC definitions +################## +*_VS2008xASL_EBC_*_FAMILY = INTEL + +*_VS2008xASL_EBC_MAKE_PATH = DEF(VS2008_BIN)\nmake.exe +*_VS2008xASL_EBC_PP_PATH = DEF(EBC_BIN)\iec.exe +*_VS2008xASL_EBC_VFRPP_PATH = DEF(EBC_BIN)\iec.exe +*_VS2008xASL_EBC_CC_PATH = DEF(EBC_BIN)\iec.exe +*_VS2008xASL_EBC_SLINK_PATH = DEF(EBC_BIN)\link.exe +*_VS2008xASL_EBC_DLINK_PATH = DEF(EBC_BIN)\link.exe + +*_VS2008xASL_EBC_MAKE_FLAGS = /nologo +*_VS2008xASL_EBC_PP_FLAGS = /nologo /E /TC /FIAutoGen.h +*_VS2008xASL_EBC_CC_FLAGS = /nologo /c /WX /W3 /FIAutoGen.h /D$(MODULE_ENTRY_POINT)=$(ARCH_ENTRY_POINT) +*_VS2008xASL_EBC_VFRPP_FLAGS = /nologo /E /TC /DVFRCOMPILE /FI$(MODULE_NAME)StrDefs.h +*_VS2008xASL_EBC_SLINK_FLAGS = /lib /NOLOGO /MACHINE:EBC +*_VS2008xASL_EBC_DLINK_FLAGS = "C:\Program Files\Intel\EBC\Lib\EbcLib.lib" /NOLOGO /NODEFAULTLIB /MACHINE:EBC /OPT:REF /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /MAP + + +#################################################################################### +# VS2008x86 - Microsoft Visual Studio 2008 (x86) with Intel ASL +# ASL - Intel ACPI Source Language Compiler (iasl.exe) +#################################################################################### +# VS2008x86 - Microsoft Visual Studio 2008 (x86) ALL Edition with Intel ASL +*_VS2008x86_*_*_FAMILY = MSFT + +*_VS2008x86_*_MAKE_PATH = DEF(VS2008x86_BIN)\nmake.exe +*_VS2008xASL_*_MAKE_FLAG = /nologo +*_VS2008xASL_*_RC_PATH = DEF(WINSDKx86_BIN)\rc.exe + +*_VS2008x86_*_MAKE_FLAGS = /nologo +*_VS2008x86_*_SLINK_FLAGS = /NOLOGO /LTCG +*_VS2008x86_*_APP_FLAGS = /nologo /E /TC +*_VS2008x86_*_PP_FLAGS = /nologo /E /TC /FIAutoGen.h +*_VS2008x86_*_VFRPP_FLAGS = /nologo /E /TC /DVFRCOMPILE /FI$(MODULE_NAME)StrDefs.h + +################## +# ASL definitions +################## +*_VS2008x86_*_ASL_PATH = DEF(WIN_IASL_BIN) +*_VS2008x86_*_ASL_FLAGS = DEF(DEFAULT_WIN_ASL_FLAGS) +*_VS2008x86_*_ASL_OUTFLAGS = DEF(DEFAULT_WIN_ASL_OUTFLAGS) +*_VS2008x86_*_ASLCC_FLAGS = DEF(MSFT_ASLCC_FLAGS) +*_VS2008x86_*_ASLPP_FLAGS = DEF(MSFT_ASLPP_FLAGS) +*_VS2008x86_*_ASLDLINK_FLAGS = DEF(MSFT_ASLDLINK_FLAGS) + +################## +# IA32 definitions +################## +*_VS2008x86_IA32_*_DLL = DEF(VS2008x86_DLL) + +*_VS2008x86_IA32_MAKE_PATH = DEF(VS2008x86_BIN)\nmake.exe +*_VS2008x86_IA32_CC_PATH = DEF(VS2008x86_BIN)\cl.exe +*_VS2008x86_IA32_VFRPP_PATH = DEF(VS2008x86_BIN)\cl.exe +*_VS2008x86_IA32_ASLCC_PATH = DEF(VS2008x86_BIN)\cl.exe +*_VS2008x86_IA32_ASLPP_PATH = DEF(VS2008x86_BIN)\cl.exe +*_VS2008x86_IA32_SLINK_PATH = DEF(VS2008x86_BIN)\lib.exe +*_VS2008x86_IA32_DLINK_PATH = DEF(VS2008x86_BIN)\link.exe +*_VS2008x86_IA32_ASLDLINK_PATH= DEF(VS2008x86_BIN)\link.exe +*_VS2008x86_IA32_ASMLINK_PATH = DEF(WINDDK_BIN16)\link.exe +*_VS2008x86_IA32_APP_PATH = DEF(VS2008x86_BIN)\cl.exe +*_VS2008x86_IA32_PP_PATH = DEF(VS2008x86_BIN)\cl.exe +*_VS2008x86_IA32_ASM_PATH = DEF(VS2008x86_BIN)\ml.exe + + *_VS2008x86_IA32_MAKE_FLAGS = /nologo + DEBUG_VS2008x86_IA32_CC_FLAGS = /nologo /c /WX /GS- /W4 /Gs8192 /D UNICODE /O1ib2 /GL /FIAutoGen.h /EHs-c- /GR- /GF /Gy /Zi /Gm +RELEASE_VS2008x86_IA32_CC_FLAGS = /nologo /c /WX /GS- /W4 /Gs8192 /D UNICODE /O1ib2 /GL /FIAutoGen.h /EHs-c- /GR- /GF + DEBUG_VS2008x86_IA32_ASM_FLAGS = /nologo /c /WX /W3 /Cx /coff /Zd /Zi +RELEASE_VS2008x86_IA32_ASM_FLAGS = /nologo /c /WX /W3 /Cx /coff /Zd + DEBUG_VS2008x86_IA32_DLINK_FLAGS = /NOLOGO /NODEFAULTLIB /IGNORE:4086 /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 /MACHINE:I386 /LTCG /DLL /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:CONSOLE /SAFESEH:NO /BASE:0 /DRIVER /DEBUG +RELEASE_VS2008x86_IA32_DLINK_FLAGS = /NOLOGO /NODEFAULTLIB /IGNORE:4086 /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 /MACHINE:I386 /LTCG /DLL /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:CONSOLE /SAFESEH:NO /BASE:0 /DRIVER /MERGE:.data=.text /MERGE:.rdata=.text + *_VS2008x86_IA32_ASMLINK_FLAGS= /nologo /tiny + +################## +# X64 definitions +################## +*_VS2008x86_X64_*_DLL = DEF(VS2008x86_DLL) + +*_VS2008x86_X64_CC_PATH = DEF(VS2008x86_BINX64)\cl.exe +*_VS2008x86_X64_PP_PATH = DEF(VS2008x86_BINX64)\cl.exe +*_VS2008x86_X64_APP_PATH = DEF(VS2008x86_BINX64)\cl.exe +*_VS2008x86_X64_VFRPP_PATH = DEF(VS2008x86_BINX64)\cl.exe +*_VS2008x86_X64_ASLCC_PATH = DEF(VS2008x86_BINX64)\cl.exe +*_VS2008x86_X64_ASLPP_PATH = DEF(VS2008x86_BINX64)\cl.exe +*_VS2008x86_X64_ASM_PATH = DEF(VS2008x86_BINX64)\ml64.exe +*_VS2008x86_X64_SLINK_PATH = DEF(VS2008x86_BINX64)\lib.exe +*_VS2008x86_X64_DLINK_PATH = DEF(VS2008x86_BINX64)\link.exe +*_VS2008x86_X64_ASLDLINK_PATH = DEF(VS2008x86_BINX64)\link.exe + + DEBUG_VS2008x86_X64_CC_FLAGS = /nologo /c /WX /GS- /X /W4 /Gs8192 /D UNICODE /O1ib2s /GL /Gy /FIAutoGen.h /EHs-c- /GR- /GF /Zi /Gm +RELEASE_VS2008x86_X64_CC_FLAGS = /nologo /c /WX /GS- /X /W4 /Gs8192 /D UNICODE /O1ib2s /GL /Gy /FIAutoGen.h /EHs-c- /GR- /GF + DEBUG_VS2008x86_X64_ASM_FLAGS = /nologo /c /WX /W3 /Cx /Zd /Zi +RELEASE_VS2008x86_X64_ASM_FLAGS = /nologo /c /WX /W3 /Cx /Zd + DEBUG_VS2008x86_X64_DLINK_FLAGS = /NOLOGO /NODEFAULTLIB /IGNORE:4086 /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 /Machine:AMD64 /LTCG /DLL /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:CONSOLE /SAFESEH:NO /BASE:0 /DRIVER /DEBUG +RELEASE_VS2008x86_X64_DLINK_FLAGS = /NOLOGO /NODEFAULTLIB /IGNORE:4086 /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 /Machine:AMD64 /LTCG /DLL /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:CONSOLE /SAFESEH:NO /BASE:0 /DRIVER /MERGE:.data=.text /MERGE:.rdata=.text + +################## +# IPF definitions +################## +*_VS2008x86_IPF_*_DLL = DEF(VS2008x86_DLL) + +*_VS2008x86_IPF_PP_PATH = DEF(VS2008x86_BIN64)\cl.exe +*_VS2008x86_IPF_APP_PATH = DEF(VS2008x86_BIN64)\cl.exe +*_VS2008x86_IPF_VFRPP_PATH = DEF(VS2008x86_BIN64)\cl.exe +*_VS2008x86_IPF_ASLCC_PATH = DEF(VS2008x86_BIN64)\cl.exe +*_VS2008x86_IPF_ASLPP_PATH = DEF(VS2008x86_BIN64)\cl.exe +*_VS2008x86_IPF_CC_PATH = DEF(VS2008x86_BIN64)\cl.exe +*_VS2008x86_IPF_ASM_PATH = DEF(VS2008x86_BIN64)\ias.exe +*_VS2008x86_IPF_SLINK_PATH = DEF(VS2008x86_BIN64)\lib.exe +*_VS2008x86_IPF_DLINK_PATH = DEF(VS2008x86_BIN64)\link.exe +*_VS2008x86_IPF_ASLDLINK_PATH = DEF(VS2008x86_BIN64)\link.exe + + DEBUG_VS2008x86_IPF_CC_FLAGS = /nologo /c /WX /GS- /X /W4 /EHs-c- /GR- /Gy /Os /GL /FIAutoGen.h /QIPF_fr32 /Zi +RELEASE_VS2008x86_IPF_CC_FLAGS = /nologo /c /WX /GS- /X /W4 /EHs-c- /GR- /Gy /Os /GL /FIAutoGen.h /QIPF_fr32 + DEBUG_VS2008x86_IPF_ASM_FLAGS = -N us -X explicit -M ilp64 -N so -W4 -d debug +RELEASE_VS2008x86_IPF_ASM_FLAGS = -N us -X explicit -M ilp64 -N so -W4 + DEBUG_VS2008x86_IPF_DLINK_FLAGS = /NOLOGO /NODEFAULTLIB /LTCG /DLL /OPT:REF,ICF /IGNORE:4086 /MAP /ALIGN:32 /MACHINE:IA64 /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0 /DRIVER /MAP:$(DEBUG_DIR)/$(BASE_NAME).map /PDB:$(DEBUG_DIR)/$(BASE_NAME).pdb /DEBUG +RELEASE_VS2008x86_IPF_DLINK_FLAGS = /NOLOGO /NODEFAULTLIB /LTCG /DLL /OPT:REF,ICF /IGNORE:4086 /MAP /ALIGN:32 /MACHINE:IA64 /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0 /DRIVER /MAP:$(DEBUG_DIR)/$(BASE_NAME).map /PDB:$(DEBUG_DIR)/$(BASE_NAME).pdb + + +#################################################################################### +# VS2008x86xASL - Microsoft Visual Studio 2008 with Microsoft ASL +# ASL - Microsoft ACPI Source Language Compiler (asl.exe) +#################################################################################### +*_VS2008x86xASL_*_*_FAMILY = MSFT + +*_VS2008x86xASL_*_MAKE_PATH = DEF(VS2008x86_BIN)\nmake.exe +*_VS2008xASL_*_MAKE_FLAG = /nologo +*_VS2008xASL_*_RC_PATH = DEF(WINSDKx86_BIN)\rc.exe + +*_VS2008x86xASL_*_MAKE_FLAGS = /nologo +*_VS2008x86xASL_*_SLINK_FLAGS = /NOLOGO /LTCG +*_VS2008x86xASL_*_APP_FLAGS = /nologo /E /TC +*_VS2008x86xASL_*_PP_FLAGS = /nologo /E /TC /FIAutoGen.h +*_VS2008x86xASL_*_VFRPP_FLAGS = /nologo /E /TC /DVFRCOMPILE /FI$(MODULE_NAME)StrDefs.h + +################## +# ASL definitions +################## +*_VS2008x86xASL_*_ASL_PATH = DEF(WIN_ASL_BIN) +*_VS2008x86xASL_*_ASL_FLAGS = DEF(MS_ASL_FLAGS) +*_VS2008x86xASL_*_ASL_OUTFLAGS = DEF(MS_ASL_OUTFLAGS) +*_VS2008x86xASL_*_ASLCC_FLAGS = DEF(MSFT_ASLCC_FLAGS) +*_VS2008x86xASL_*_ASLPP_FLAGS = DEF(MSFT_ASLPP_FLAGS) +*_VS2008x86xASL_*_ASLDLINK_FLAGS = DEF(MSFT_ASLDLINK_FLAGS) + +################## +# IA32 definitions +################## +*_VS2008x86xASL_IA32_*_DLL = DEF(VS2008x86_DLL) + +*_VS2008x86xASL_IA32_MAKE_PATH = DEF(VS2008x86_BIN)\nmake.exe +*_VS2008x86xASL_IA32_CC_PATH = DEF(VS2008x86_BIN)\cl.exe +*_VS2008x86xASL_IA32_VFRPP_PATH = DEF(VS2008x86_BIN)\cl.exe +*_VS2008x86xASL_IA32_ASLCC_PATH = DEF(VS2008x86_BIN)\cl.exe +*_VS2008x86xASL_IA32_ASLPP_PATH = DEF(VS2008x86_BIN)\cl.exe +*_VS2008x86xASL_IA32_SLINK_PATH = DEF(VS2008x86_BIN)\lib.exe +*_VS2008x86xASL_IA32_DLINK_PATH = DEF(VS2008x86_BIN)\link.exe +*_VS2008x86xASL_IA32_ASLDLINK_PATH= DEF(VS2008x86_BIN)\link.exe +*_VS2008x86xASL_IA32_ASMLINK_PATH = DEF(WINDDK_BIN16)\link.exe +*_VS2008x86xASL_IA32_APP_PATH = DEF(VS2008x86_BIN)\cl.exe +*_VS2008x86xASL_IA32_PP_PATH = DEF(VS2008x86_BIN)\cl.exe +*_VS2008x86xASL_IA32_ASM_PATH = DEF(VS2008x86_BIN)\ml.exe + + *_VS2008x86xASL_IA32_MAKE_FLAGS = /nologo + DEBUG_VS2008x86xASL_IA32_CC_FLAGS = /nologo /c /WX /GS- /W4 /Gs8192 /D UNICODE /O1ib2 /GL /FIAutoGen.h /EHs-c- /GR- /GF /Gy /Zi /Gm +RELEASE_VS2008x86xASL_IA32_CC_FLAGS = /nologo /c /WX /GS- /W4 /Gs8192 /D UNICODE /O1ib2 /GL /FIAutoGen.h /EHs-c- /GR- /GF + DEBUG_VS2008x86xASL_IA32_ASM_FLAGS = /nologo /c /WX /W3 /Cx /coff /Zd /Zi +RELEASE_VS2008x86xASL_IA32_ASM_FLAGS = /nologo /c /WX /W3 /Cx /coff /Zd + DEBUG_VS2008x86xASL_IA32_DLINK_FLAGS = /NOLOGO /NODEFAULTLIB /IGNORE:4086 /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 /MACHINE:I386 /LTCG /DLL /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:CONSOLE /SAFESEH:NO /BASE:0 /DRIVER /DEBUG +RELEASE_VS2008x86xASL_IA32_DLINK_FLAGS = /NOLOGO /NODEFAULTLIB /IGNORE:4086 /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 /MACHINE:I386 /LTCG /DLL /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:CONSOLE /SAFESEH:NO /BASE:0 /DRIVER /MERGE:.data=.text /MERGE:.rdata=.text + *_VS2008x86xASL_IA32_ASMLINK_FLAGS= /nologo /tiny + +################## +# X64 definitions +################## +*_VS2008x86xASL_X64_*_DLL = DEF(VS2008x86_DLL) + +*_VS2008x86xASL_X64_CC_PATH = DEF(VS2008x86_BINX64)\cl.exe +*_VS2008x86xASL_X64_PP_PATH = DEF(VS2008x86_BINX64)\cl.exe +*_VS2008x86xASL_X64_APP_PATH = DEF(VS2008x86_BINX64)\cl.exe +*_VS2008x86xASL_X64_VFRPP_PATH = DEF(VS2008x86_BINX64)\cl.exe +*_VS2008x86xASL_X64_ASLCC_PATH = DEF(VS2008x86_BINX64)\cl.exe +*_VS2008x86xASL_X64_ASLPP_PATH = DEF(VS2008x86_BINX64)\cl.exe +*_VS2008x86xASL_X64_ASM_PATH = DEF(VS2008x86_BINX64)\ml64.exe +*_VS2008x86xASL_X64_SLINK_PATH = DEF(VS2008x86_BINX64)\lib.exe +*_VS2008x86xASL_X64_DLINK_PATH = DEF(VS2008x86_BINX64)\link.exe +*_VS2008x86xASL_X64_ASLDLINK_PATH = DEF(VS2008x86_BINX64)\link.exe + + DEBUG_VS2008x86xASL_X64_CC_FLAGS = /nologo /c /WX /GS- /X /W4 /Gs8192 /D UNICODE /O1ib2s /GL /Gy /FIAutoGen.h /EHs-c- /GR- /GF /Zi /Gm +RELEASE_VS2008x86xASL_X64_CC_FLAGS = /nologo /c /WX /GS- /X /W4 /Gs8192 /D UNICODE /O1ib2s /GL /Gy /FIAutoGen.h /EHs-c- /GR- /GF + DEBUG_VS2008x86xASL_X64_ASM_FLAGS = /nologo /c /WX /W3 /Cx /Zd /Zi +RELEASE_VS2008x86xASL_X64_ASM_FLAGS = /nologo /c /WX /W3 /Cx /Zd + DEBUG_VS2008x86xASL_X64_DLINK_FLAGS = /NOLOGO /NODEFAULTLIB /IGNORE:4086 /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 /Machine:AMD64 /LTCG /DLL /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:CONSOLE /SAFESEH:NO /BASE:0 /DRIVER /DEBUG +RELEASE_VS2008x86xASL_X64_DLINK_FLAGS = /NOLOGO /NODEFAULTLIB /IGNORE:4086 /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 /Machine:AMD64 /LTCG /DLL /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:CONSOLE /SAFESEH:NO /BASE:0 /DRIVER /MERGE:.data=.text /MERGE:.rdata=.text + +################## +# IPF definitions +################## +*_VS2008x86xASL_IPF_*_DLL = DEF(VS2008x86_DLL) + +*_VS2008x86xASL_IPF_PP_PATH = DEF(VS2008x86_BIN64)\cl.exe +*_VS2008x86xASL_IPF_APP_PATH = DEF(VS2008x86_BIN64)\cl.exe +*_VS2008x86xASL_IPF_VFRPP_PATH = DEF(VS2008x86_BIN64)\cl.exe +*_VS2008x86xASL_IPF_ASLCC_PATH = DEF(VS2008x86_BIN64)\cl.exe +*_VS2008x86xASL_IPF_ASLPP_PATH = DEF(VS2008x86_BIN64)\cl.exe +*_VS2008x86xASL_IPF_CC_PATH = DEF(VS2008x86_BIN64)\cl.exe +*_VS2008x86xASL_IPF_ASM_PATH = DEF(VS2008x86_BIN64)\ias.exe +*_VS2008x86xASL_IPF_SLINK_PATH = DEF(VS2008x86_BIN64)\lib.exe +*_VS2008x86xASL_IPF_DLINK_PATH = DEF(VS2008x86_BIN64)\link.exe +*_VS2008x86xASL_IPF_ASLDLINK_PATH = DEF(VS2008x86_BIN64)\link.exe + + DEBUG_VS2008x86xASL_IPF_CC_FLAGS = /nologo /c /WX /GS- /X /W4 /EHs-c- /GR- /Gy /Os /GL /FIAutoGen.h /QIPF_fr32 /Zi +RELEASE_VS2008x86xASL_IPF_CC_FLAGS = /nologo /c /WX /GS- /X /W4 /EHs-c- /GR- /Gy /Os /GL /FIAutoGen.h /QIPF_fr32 + DEBUG_VS2008x86xASL_IPF_ASM_FLAGS = -N us -X explicit -M ilp64 -N so -W4 -d debug +RELEASE_VS2008x86xASL_IPF_ASM_FLAGS = -N us -X explicit -M ilp64 -N so -W4 + DEBUG_VS2008x86xASL_IPF_DLINK_FLAGS = /NOLOGO /NODEFAULTLIB /LTCG /DLL /OPT:REF,ICF /IGNORE:4086 /MAP /ALIGN:32 /MACHINE:IA64 /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0 /DRIVER /MAP:$(DEBUG_DIR)/$(BASE_NAME).map /PDB:$(DEBUG_DIR)/$(BASE_NAME).pdb /DEBUG +RELEASE_VS2008x86xASL_IPF_DLINK_FLAGS = /NOLOGO /NODEFAULTLIB /LTCG /DLL /OPT:REF,ICF /IGNORE:4086 /MAP /ALIGN:32 /MACHINE:IA64 /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0 /DRIVER /MAP:$(DEBUG_DIR)/$(BASE_NAME).map /PDB:$(DEBUG_DIR)/$(BASE_NAME).pdb + + #################################################################################### # # Microsoft Device Driver Kit 3790.1830 (IA-32, X64, Itanium, with Link Time Code Generation) @@ -1083,11 +1548,11 @@ RELEASE_DDK3790xASL_IPF_DLINK_FLAGS = /NOLOGO /NODEFAULTLIB /LTCG /DLL /OPT:REF *_*_*_SYMRENAME_PATH = echo *_*_*_SYMRENAME_FLAGS = Symbol renaming not needed for -DEFINE GCC_ALL_CC_FLAGS = -Os -fshort-wchar -fno-strict-aliasing -Wall -Werror -Wno-missing-braces -Wno-array-bounds -c -include AutoGen.h +DEFINE GCC_ALL_CC_FLAGS = -g -Os -fshort-wchar -fno-strict-aliasing -Wall -Werror -Wno-missing-braces -Wno-array-bounds -c -include AutoGen.h DEFINE GCC_IA32_CC_FLAGS = DEF(GCC_ALL_CC_FLAGS) -m32 -malign-double -freorder-blocks -freorder-blocks-and-partition -O2 DEFINE GCC_X64_CC_FLAGS = DEF(GCC_ALL_CC_FLAGS) -mno-red-zone -Wno-address DEFINE GCC_IPF_CC_FLAGS = DEF(GCC_ALL_CC_FLAGS) -minline-int-divide-min-latency -DEFINE GCC_DLINK_FLAGS_COMMON = -nostdlib -s --pie +DEFINE GCC_DLINK_FLAGS_COMMON = -nostdlib --pie DEFINE GCC_IA32_X64_DLINK_COMMON = DEF(GCC_DLINK_FLAGS_COMMON) --gc-sections DEFINE GCC_IA32_X64_ASLDLINK_FLAGS = DEF(GCC_IA32_X64_DLINK_COMMON) --entry _ReferenceAcpiTable -u $(IMAGE_ENTRY_POINT) DEFINE GCC_IA32_X64_DLINK_FLAGS = DEF(GCC_IA32_X64_DLINK_COMMON) --entry _$(IMAGE_ENTRY_POINT) --file-alignment 0x20 --section-alignment 0x20 -Map $(DEST_DIR_DEBUG)/$(BASE_NAME).map @@ -1104,9 +1569,9 @@ DEFINE GCC_IA32_RC_FLAGS = -I binary -O elf32-i386 -B i386 --re DEFINE GCC_X64_RC_FLAGS = -I binary -O elf64-x86-64 -B i386 --rename-section .data=.hii DEFINE GCC_IPF_RC_FLAGS = -I binary -O elf64-ia64-little -B ia64 --rename-section .data=.hii -DEFINE GCC44_ALL_CC_FLAGS = -fshort-wchar -fno-stack-protector -fno-strict-aliasing -Wall -Werror -Wno-missing-braces -Wno-array-bounds -ffunction-sections -c -include AutoGen.h -DSTRING_ARRAY_NAME=$(BASE_NAME)Strings +DEFINE GCC44_ALL_CC_FLAGS = -g -fshort-wchar -fno-stack-protector -fno-strict-aliasing -Wall -Werror -Wno-missing-braces -Wno-array-bounds -ffunction-sections -fdata-sections -c -include AutoGen.h -DSTRING_ARRAY_NAME=$(BASE_NAME)Strings DEFINE GCC44_IA32_CC_FLAGS = DEF(GCC44_ALL_CC_FLAGS) -m32 -malign-double -D EFI32 -DEFINE GCC44_X64_CC_FLAGS = DEF(GCC44_ALL_CC_FLAGS) "-DEFIAPI=__attribute__((ms_abi))" -mno-red-zone -Wno-address +DEFINE GCC44_X64_CC_FLAGS = DEF(GCC44_ALL_CC_FLAGS) -m64 "-DEFIAPI=__attribute__((ms_abi))" -mno-red-zone -Wno-address DEFINE GCC44_IA32_X64_DLINK_COMMON = -nostdlib -n -q --gc-sections DEFINE GCC44_IA32_X64_ASLDLINK_FLAGS = DEF(GCC44_IA32_X64_DLINK_COMMON) --entry ReferenceAcpiTable -u ReferenceAcpiTable DEFINE GCC44_IA32_X64_DLINK_FLAGS = DEF(GCC44_IA32_X64_DLINK_COMMON) --entry $(IMAGE_ENTRY_POINT) -u $(IMAGE_ENTRY_POINT) -Map $(DEST_DIR_DEBUG)/$(BASE_NAME).map @@ -1169,9 +1634,11 @@ DEFINE GCC44_ASM_FLAGS = DEF(GCC_ASM_FLAGS) *_UNIXGCC_X64_ASLPP_PATH = DEF(UNIXGCC_X64_PETOOLS_PREFIX)gcc *_UNIXGCC_X64_VFRPP_PATH = DEF(UNIXGCC_X64_PETOOLS_PREFIX)gcc *_UNIXGCC_X64_RC_PATH = DEF(UNIXGCC_X64_PETOOLS_PREFIX)objcopy +*_UNIXGCC_X64_OBJCOPY_PATH = DEF(UNIXGCC_X64_PETOOLS_PREFIX)objcopy *_UNIXGCC_X64_CC_FLAGS = DEF(GCC_X64_CC_FLAGS) *_UNIXGCC_X64_RC_FLAGS = DEF(GCC_X64_RC_FLAGS) +*_UNIXGCC_X64_OBJCOPY_FLAGS = ################## # IPF definitions @@ -1228,15 +1695,14 @@ DEFINE GCC44_ASM_FLAGS = DEF(GCC_ASM_FLAGS) *_GCC44_IA32_ASLCC_PATH = DEF(GCC44_IA32_PREFIX)gcc *_GCC44_IA32_ASLPP_PATH = DEF(GCC44_IA32_PREFIX)gcc *_GCC44_IA32_RC_PATH = DEF(GCC44_IA32_PREFIX)objcopy -*_GCC44_IA32_OBJCOPY_PATH = DEF(GCC44_IA32_PREFIX)objcopy *_GCC44_IA32_ASLCC_FLAGS = DEF(GCC_ASLCC_FLAGS) -m32 *_GCC44_IA32_ASLDLINK_FLAGS = DEF(GCC44_IA32_X64_ASLDLINK_FLAGS) -m elf_i386 *_GCC44_IA32_ASM_FLAGS = DEF(GCC44_ASM_FLAGS) -m32 --32 -march=i386 -*_GCC44_IA32_CC_FLAGS = DEF(GCC44_IA32_CC_FLAGS) +*_GCC44_IA32_CC_FLAGS = DEF(GCC44_IA32_CC_FLAGS) -Os *_GCC44_IA32_DLINK_FLAGS = DEF(GCC44_IA32_X64_DLINK_FLAGS) -m elf_i386 --oformat=elf32-i386 *_GCC44_IA32_RC_FLAGS = DEF(GCC_IA32_RC_FLAGS) -*_GCC44_IA32_OBJCOPY_FLAGS = + #################################################################################### # @@ -2250,17 +2716,17 @@ RELEASE_XCODE32_X64_ASM_FLAGS = -arch x86_64 RELEASE_XCODE32_X64_CC_FLAGS = -arch x86_64 -Oz -combine -mms-bitfields -fshort-wchar -fno-strict-aliasing -Wall -Werror -Wno-missing-braces -Wno-address -fomit-frame-pointer -static -c -include AutoGen.h -fno-stack-protector ################## -# ARM definitions - still a work in progress (Assumes iPhone SDK installed) +# ARM definitions - (Assumes iPhone SDK installed on Snow Leopard) ################## -*_XCODE32_ARM_ARCHCC_FLAGS = -arch armv6 -march=armv6 -mthumb -*_XCODE32_ARM_ARCHASM_FLAGS = -arch armv6 -*_XCODE32_ARM_ARCHDLINK_FLAGS = -arch armv6 +*_XCODE32_ARM_ARCHCC_FLAGS = -arch armv7 -march=armv7 -mthumb +*_XCODE32_ARM_ARCHASM_FLAGS = -arch armv7 +*_XCODE32_ARM_ARCHDLINK_FLAGS = -arch armv7 *_XCODE32_ARM_PLATFORM_FLAGS = *_XCODE32_ARM_CC_PATH = DEF(IPHONE_TOOLS)/usr/bin/gcc *_XCODE32_ARM_SLINK_PATH = DEF(IPHONE_TOOLS)/usr/bin/libtool -*_XCODE32_ARM_DLINK_PATH = DEF(IPHONE_TOOLS)/usr/bin/ld +*_XCODE32_ARM_DLINK_PATH = ld *_XCODE32_ARM_ASM_PATH = DEF(IPHONE_TOOLS)/usr/bin/as *_XCODE32_ARM_PP_PATH = DEF(IPHONE_TOOLS)/usr/bin/gcc *_XCODE32_ARM_VFRPP_PATH = DEF(IPHONE_TOOLS)/usr/bin/gcc @@ -2291,8 +2757,8 @@ RELEASE_XCODE32_ARM_CC_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) -mthumb-inter # # Use default values, or override in DSC file # -*_RVCT31_ARM_ARCHCC_FLAGS = --cpu Cortex-A8 --thumb -*_RVCT31_ARM_ARCHASM_FLAGS = --cpu Cortex-A8 +*_RVCT31_ARM_ARCHCC_FLAGS = --thumb --cpu 7-A +*_RVCT31_ARM_ARCHASM_FLAGS = --cpu 7-A *_RVCT31_ARM_ARCHDLINK_FLAGS = *_RVCT31_ARM_PLATFORM_FLAGS = @@ -2341,8 +2807,8 @@ RELEASE_RVCT31_ARM_CC_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) --c90 -Ospac # # Use default values, or override in DSC file # -*_RVCT31CYGWIN_ARM_ARCHCC_FLAGS = --cpu Cortex-A8 --thumb -*_RVCT31CYGWIN_ARM_ARCHASM_FLAGS = --cpu Cortex-A8 +*_RVCT31CYGWIN_ARM_ARCHCC_FLAGS = --thumb --cpu 7-A +*_RVCT31CYGWIN_ARM_ARCHASM_FLAGS = --cpu 7-A *_RVCT31CYGWIN_ARM_ARCHDLINK_FLAGS = *_RVCT31CYGWIN_ARM_PLATFORM_FLAGS = diff --git a/BaseTools/Source/C/BootSectImage/bootsectimage.c b/BaseTools/Source/C/BootSectImage/bootsectimage.c index d8dc8907a5..7386bcf2e2 100644 --- a/BaseTools/Source/C/BootSectImage/bootsectimage.c +++ b/BaseTools/Source/C/BootSectImage/bootsectimage.c @@ -4,7 +4,7 @@ Abstract: Patch the BPB information in boot sector image file. Patch the MBR code in MBR image file. -Copyright 2006 - 2008, Intel Corporation +Copyright 2006 - 2010, Intel Corporation All rights reserved. This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this distribution. The full text of the license may be found at @@ -56,7 +56,7 @@ Returns: --*/ { printf ("%s v%d.%d - Utility to break a file into two pieces at the specified offset.\n", UTILITY_NAME, UTILITY_MAJOR_VERSION, UTILITY_MINOR_VERSION); - printf ("Copyright (c) 1999-2007 Intel Corporation. All rights reserved.\n"); + printf ("Copyright (c) 1999-2010 Intel Corporation. All rights reserved.\n"); } void diff --git a/BaseTools/Source/C/Common/EfiUtilityMsgs.c b/BaseTools/Source/C/Common/EfiUtilityMsgs.c index 68cf02469e..0e7608d1cf 100644 --- a/BaseTools/Source/C/Common/EfiUtilityMsgs.c +++ b/BaseTools/Source/C/Common/EfiUtilityMsgs.c @@ -44,18 +44,6 @@ STATIC UINT32 mMaxWarnings = 0; STATIC UINT32 mMaxWarningsPlusErrors = 0; STATIC INT8 mPrintLimitsSet = 0; -STATIC -VOID -PrintMessage ( - CHAR8 *Type, - CHAR8 *FileName, - UINT32 LineNumber, - UINT32 MessageCode, - CHAR8 *Text, - CHAR8 *MsgFmt, - va_list List - ); - STATIC VOID PrintLimitExceeded ( @@ -151,12 +139,6 @@ Notes: va_start (List, MsgFmt); PrintMessage ("ERROR", FileName, LineNumber, MessageCode, Text, MsgFmt, List); va_end (List); - // - // Set status accordingly - // - if (mStatus < STATUS_ERROR) { - mStatus = STATUS_ERROR; - } } VOID @@ -211,12 +193,6 @@ Returns: va_start (List, MsgFmt); PrintMessage ("ERROR", mSourceFileName, mSourceFileLineNum, MessageCode, Text, MsgFmt, List); va_end (List); - // - // Set status accordingly - // - if (mStatus < STATUS_ERROR) { - mStatus = STATUS_ERROR; - } } VOID @@ -396,7 +372,6 @@ Returns: va_end (List); } -STATIC VOID PrintMessage ( CHAR8 *Type, @@ -517,6 +492,15 @@ Notes: sprintf (Line, "%s", mUtilityName); } } + + if (strcmp (Type, "ERROR") == 0) { + // + // Set status accordingly for ERROR information. + // + if (mStatus < STATUS_ERROR) { + mStatus = STATUS_ERROR; + } + } } // @@ -545,6 +529,7 @@ Notes: vsprintf (Line2, MsgFmt, List); fprintf (stdout, " %s\n", Line2); } + } STATIC diff --git a/BaseTools/Source/C/Common/EfiUtilityMsgs.h b/BaseTools/Source/C/Common/EfiUtilityMsgs.h index 40e6e170ae..8986a592d7 100644 --- a/BaseTools/Source/C/Common/EfiUtilityMsgs.h +++ b/BaseTools/Source/C/Common/EfiUtilityMsgs.h @@ -70,6 +70,17 @@ SetUtilityName ( ) ; +VOID +PrintMessage ( + CHAR8 *Type, + CHAR8 *FileName, + UINT32 LineNumber, + UINT32 MessageCode, + CHAR8 *Text, + CHAR8 *MsgFmt, + va_list List + ); + VOID Error ( CHAR8 *FileName, diff --git a/BaseTools/Source/C/Common/ParseInf.c b/BaseTools/Source/C/Common/ParseInf.c index cd10da9b2d..2ce25be86f 100644 --- a/BaseTools/Source/C/Common/ParseInf.c +++ b/BaseTools/Source/C/Common/ParseInf.c @@ -1,6 +1,6 @@ /** @file -Copyright (c) 2004 - 2008, Intel Corporation +Copyright (c) 2004 - 2010, Intel Corporation All rights reserved. This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this distribution. The full text of the license may be found at @@ -484,13 +484,14 @@ Returns: --*/ { UINT8 Index; - UINT64 HexNumber; + UINT64 Value; CHAR8 CurrentChar; // // Initialize the result // - HexNumber = 0; + Value = 0; + Index = 0; // // Check input paramter @@ -498,50 +499,65 @@ Returns: if (AsciiString == NULL || ReturnValue == NULL) { return EFI_INVALID_PARAMETER; } + while (AsciiString[Index] == ' ') { + Index ++; + } + // // Add each character to the result // - if (IsHex || (AsciiString[0] == '0' && (AsciiString[1] == 'x' || AsciiString[1] == 'X'))) { - // - // Verify string is a hex number - // - for (Index = 2; Index < strlen (AsciiString); Index++) { - if (isxdigit ((int)AsciiString[Index]) == 0) { - return EFI_ABORTED; - } - } + if (IsHex || (AsciiString[Index] == '0' && (AsciiString[Index + 1] == 'x' || AsciiString[Index + 1] == 'X'))) { // // Convert the hex string. // - for (Index = 2; AsciiString[Index] != '\0'; Index++) { + for (Index = Index + 2; AsciiString[Index] != '\0'; Index++) { CurrentChar = AsciiString[Index]; - HexNumber *= 16; + if (CurrentChar == ' ') { + break; + } + // + // Verify Hex string + // + if (isxdigit ((int)CurrentChar) == 0) { + return EFI_ABORTED; + } + // + // Add hex value + // + Value *= 16; if (CurrentChar >= '0' && CurrentChar <= '9') { - HexNumber += CurrentChar - '0'; + Value += CurrentChar - '0'; } else if (CurrentChar >= 'a' && CurrentChar <= 'f') { - HexNumber += CurrentChar - 'a' + 10; + Value += CurrentChar - 'a' + 10; } else if (CurrentChar >= 'A' && CurrentChar <= 'F') { - HexNumber += CurrentChar - 'A' + 10; - } else { - // - // Unrecognized character - // - return EFI_ABORTED; + Value += CurrentChar - 'A' + 10; } } - *ReturnValue = HexNumber; + *ReturnValue = Value; } else { // - // Verify string is a number + // Convert dec string is a number // - for (Index = 0; Index < strlen (AsciiString); Index++) { - if (isdigit ((int)AsciiString[Index]) == 0) { + for (; Index < strlen (AsciiString); Index++) { + CurrentChar = AsciiString[Index]; + if (CurrentChar == ' ') { + break; + } + // + // Verify Dec string + // + if (isdigit ((int)CurrentChar) == 0) { return EFI_ABORTED; } + // + // Add dec value + // + Value = Value * 10; + Value += CurrentChar - '0'; } - *ReturnValue = atol (AsciiString); + *ReturnValue = Value; } return EFI_SUCCESS; diff --git a/BaseTools/Source/C/EfiLdrImage/EfiLdrImage.c b/BaseTools/Source/C/EfiLdrImage/EfiLdrImage.c index c2c8111d31..7a3b4a2234 100644 --- a/BaseTools/Source/C/EfiLdrImage/EfiLdrImage.c +++ b/BaseTools/Source/C/EfiLdrImage/EfiLdrImage.c @@ -1,6 +1,6 @@ /** @file -Copyright 2006 - 2008, Intel Corporation +Copyright 2006 - 2010, Intel Corporation All rights reserved. This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this distribution. The full text of the license may be found at @@ -84,7 +84,7 @@ Returns: --*/ { printf ("%s v%d.%d -Utility to break a file into two pieces at the request offset.\n", UTILITY_NAME, UTILITY_MAJOR_VERSION, UTILITY_MINOR_VERSION); - printf ("Copyright (c) 1999-2007 Intel Corporation. All rights reserved.\n"); + printf ("Copyright (c) 1999-2010 Intel Corporation. All rights reserved.\n"); } VOID diff --git a/BaseTools/Source/C/EfiRom/EfiRom.c b/BaseTools/Source/C/EfiRom/EfiRom.c index d43520ae47..981786c705 100644 --- a/BaseTools/Source/C/EfiRom/EfiRom.c +++ b/BaseTools/Source/C/EfiRom/EfiRom.c @@ -1,6 +1,6 @@ /** @file -Copyright (c) 1999-2008 Intel Corporation. All rights reserved +Copyright (c) 1999-2010 Intel Corporation. All rights reserved This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this distribution. The full text of the license may be found at @@ -1205,7 +1205,7 @@ Returns: // // Copyright declaration // - fprintf (stdout, "Copyright (c) 2007 - 2009, Intel Corporation. All rights reserved.\n\n"); + fprintf (stdout, "Copyright (c) 2007 - 2010, Intel Corporation. All rights reserved.\n\n"); // // Details Option diff --git a/BaseTools/Source/C/GenBootSector/GenBootSector.c b/BaseTools/Source/C/GenBootSector/GenBootSector.c index 05839bb736..e4a79be69c 100644 --- a/BaseTools/Source/C/GenBootSector/GenBootSector.c +++ b/BaseTools/Source/C/GenBootSector/GenBootSector.c @@ -1,6 +1,6 @@ /** @file -Copyright 2006 - 2008, Intel Corporation +Copyright 2006 - 2010, Intel Corporation All rights reserved. This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this distribution. The full text of the license may be found at @@ -542,7 +542,7 @@ Returns: --*/ { printf ("%s v%d.%d -Utility to retrieve and update the boot sector or MBR.\n", UTILITY_NAME, UTILITY_MAJOR_VERSION, UTILITY_MINOR_VERSION); - printf ("Copyright (c) 2009 Intel Corporation. All rights reserved.\n"); + printf ("Copyright (c) 2009 - 2010 Intel Corporation. All rights reserved.\n"); } VOID diff --git a/BaseTools/Source/C/GenCrc32/GenCrc32.c b/BaseTools/Source/C/GenCrc32/GenCrc32.c index a94f9202fe..34d1a7a344 100644 --- a/BaseTools/Source/C/GenCrc32/GenCrc32.c +++ b/BaseTools/Source/C/GenCrc32/GenCrc32.c @@ -1,6 +1,6 @@ /** @file -Copyright (c) 2007 - 2008, Intel Corporation +Copyright (c) 2007 - 2010, Intel Corporation All rights reserved. This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this distribution. The full text of the license may be found at @@ -86,7 +86,7 @@ Returns: // // Copyright declaration // - fprintf (stdout, "Copyright (c) 2007 - 2009, Intel Corporation. All rights reserved.\n\n"); + fprintf (stdout, "Copyright (c) 2007 - 2010, Intel Corporation. All rights reserved.\n\n"); // // Details Option diff --git a/BaseTools/Source/C/GenFfs/GenFfs.c b/BaseTools/Source/C/GenFfs/GenFfs.c index 324490a707..cdaba0c8d1 100644 --- a/BaseTools/Source/C/GenFfs/GenFfs.c +++ b/BaseTools/Source/C/GenFfs/GenFfs.c @@ -1,6 +1,6 @@ /** -Copyright (c) 2004-2008, Intel Corporation +Copyright (c) 2004-2010, Intel Corporation All rights reserved. This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this distribution. The full text of the license may be found at @@ -119,7 +119,7 @@ Returns: // // Copyright declaration // - fprintf (stdout, "Copyright (c) 2007, Intel Corporation. All rights reserved.\n\n"); + fprintf (stdout, "Copyright (c) 2007 - 2010, Intel Corporation. All rights reserved.\n\n"); // // Details Option @@ -287,6 +287,8 @@ Returns: EFI_COMMON_SECTION_HEADER TempSectHeader; EFI_TE_IMAGE_HEADER TeHeader; UINT32 TeOffset; + EFI_GUID_DEFINED_SECTION GuidSectHeader; + UINT32 HeaderSize; Size = 0; Offset = 0; @@ -330,6 +332,7 @@ Returns: // Check this section is Te/Pe section, and Calculate the numbers of Te/Pe section. // TeOffset = 0; + HeaderSize = sizeof (EFI_COMMON_SECTION_HEADER); fread (&TempSectHeader, 1, sizeof (TempSectHeader), InFile); if (TempSectHeader.Type == EFI_SECTION_TE) { (*PESectionNum) ++; @@ -339,8 +342,14 @@ Returns: } } else if (TempSectHeader.Type == EFI_SECTION_PE32) { (*PESectionNum) ++; + } else if (TempSectHeader.Type == EFI_SECTION_GUID_DEFINED) { + fseek (InFile, 0, SEEK_SET); + fread (&GuidSectHeader, 1, sizeof (GuidSectHeader), InFile); + if ((GuidSectHeader.Attributes & EFI_GUIDED_SECTION_PROCESSING_REQUIRED) == 0) { + HeaderSize = GuidSectHeader.DataOffset; + } + (*PESectionNum) ++; } else if (TempSectHeader.Type == EFI_SECTION_COMPRESSION || - TempSectHeader.Type == EFI_SECTION_GUID_DEFINED || TempSectHeader.Type == EFI_SECTION_FIRMWARE_VOLUME_IMAGE) { // // for the encapsulated section, assume it contains Pe/Te section @@ -358,17 +367,18 @@ Returns: TeOffset = InputFileAlign [Index] - (TeOffset % InputFileAlign [Index]); TeOffset = TeOffset % InputFileAlign [Index]; } - + // // make sure section data meet its alignment requirement by adding one raw pad section. // But the different sections have the different section header. Necessary or not? // Based on section type to adjust offset? Todo // - if ((InputFileAlign [Index] != 0) && (((Size + sizeof (EFI_COMMON_SECTION_HEADER) + TeOffset) % InputFileAlign [Index]) != 0)) { - Offset = (Size + 2 * sizeof (EFI_COMMON_SECTION_HEADER) + TeOffset + InputFileAlign [Index] - 1) & ~(InputFileAlign [Index] - 1); - Offset = Offset - Size - sizeof (EFI_COMMON_SECTION_HEADER) - TeOffset; + if ((InputFileAlign [Index] != 0) && (((Size + HeaderSize + TeOffset) % InputFileAlign [Index]) != 0)) { + Offset = (Size + sizeof (EFI_COMMON_SECTION_HEADER) + HeaderSize + TeOffset + InputFileAlign [Index] - 1) & ~(InputFileAlign [Index] - 1); + Offset = Offset - Size - HeaderSize - TeOffset; if (FileBuffer != NULL && ((Size + Offset) < *BufferLength)) { + memset (FileBuffer + Size, 0, Offset); SectHeader = (EFI_COMMON_SECTION_HEADER *) (FileBuffer + Size); SectHeader->Type = EFI_SECTION_RAW; SectHeader->Size[0] = (UINT8) (Offset & 0xff); diff --git a/BaseTools/Source/C/GenFv/GenFv.c b/BaseTools/Source/C/GenFv/GenFv.c index 135c9ed23f..5b7f72e19e 100644 --- a/BaseTools/Source/C/GenFv/GenFv.c +++ b/BaseTools/Source/C/GenFv/GenFv.c @@ -1,6 +1,6 @@ /** @file -Copyright (c) 2007 - 2009, Intel Corporation +Copyright (c) 2007 - 2010, Intel Corporation All rights reserved. This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this distribution. The full text of the license may be found at @@ -40,7 +40,7 @@ Abstract: // #define UTILITY_MAJOR_VERSION 0 #define UTILITY_MINOR_VERSION 1 -#define GENFV_UPDATE_TIME " updated on 2008/11/21" +#define GENFV_UPDATE_TIME " updated on 2010/2/1" EFI_GUID mEfiFirmwareFileSystem2Guid = EFI_FIRMWARE_FILE_SYSTEM2_GUID; @@ -97,7 +97,7 @@ Returns: // // Copyright declaration // - fprintf (stdout, "Copyright (c) 2007, Intel Corporation. All rights reserved.\n\n"); + fprintf (stdout, "Copyright (c) 2007 - 2010, Intel Corporation. All rights reserved.\n\n"); // // Details Option @@ -126,11 +126,8 @@ Returns: run in Flash. It supports DEC or HEX digital format.\n\ If it is set to zero, no rebase action will be taken\n"); fprintf (stdout, " -a AddressFile, --addrfile AddressFile\n\ - AddressFile is one file used to record boot driver base\n\ - address and runtime driver base address. And this tool\n\ - will update these two addresses after it relocates all\n\ - boot drivers and runtime drivers in this fv iamge to\n\ - the preferred loaded memory address.\n"); + AddressFile is one file used to record the child\n\ + FV base address when current FV base address is set.\n"); fprintf (stdout, " -m logfile, --map logfile\n\ Logfile is the output fv map file name. if it is not\n\ given, the FvName.map will be the default map file name\n"); @@ -194,10 +191,8 @@ Returns: CHAR8 *InfFileImage; UINT32 InfFileSize; CHAR8 *OutFileName; - CHAR8 ValueString[_MAX_PATH]; BOOLEAN CapsuleFlag; BOOLEAN DumpCapsule; - MEMORY_FILE AddrMemoryFile; FILE *FpFile; EFI_CAPSULE_HEADER *CapsuleHeader; UINT64 LogLevel, TempNumber; @@ -545,62 +540,6 @@ Returns: VerboseMsg ("the output file name is %s", OutFileName); } - // - // Read boot and runtime address from address file - // - if (AddrFileName != NULL) { - VerboseMsg ("the input address file name is %s", AddrFileName); - Status = GetFileImage (AddrFileName, &InfFileImage, &InfFileSize); - if (EFI_ERROR (Status)) { - return STATUS_ERROR; - } - - AddrMemoryFile.FileImage = InfFileImage; - AddrMemoryFile.CurrentFilePointer = InfFileImage; - AddrMemoryFile.Eof = InfFileImage + InfFileSize; - - // - // Read the boot driver base address for this FV image - // - Status = FindToken (&AddrMemoryFile, OPTIONS_SECTION_STRING, EFI_FV_BOOT_DRIVER_BASE_ADDRESS_STRING, 0, ValueString); - if (Status == EFI_SUCCESS) { - // - // Get the base address - // - Status = AsciiStringToUint64 (ValueString, FALSE, &TempNumber); - if (EFI_ERROR (Status)) { - Error (NULL, 0, 2000, "Invalid parameter", "%s = %s", EFI_FV_BOOT_DRIVER_BASE_ADDRESS_STRING, ValueString); - return STATUS_ERROR; - } - mFvDataInfo.BootBaseAddress = TempNumber; - DebugMsg (NULL, 0, 9, "Boot driver base address", "%s = %s", EFI_FV_BOOT_DRIVER_BASE_ADDRESS_STRING, ValueString); - } - - // - // Read the FV runtime driver base address - // - Status = FindToken (&AddrMemoryFile, OPTIONS_SECTION_STRING, EFI_FV_RUNTIME_DRIVER_BASE_ADDRESS_STRING, 0, ValueString); - if (Status == EFI_SUCCESS) { - // - // Get the base address - // - Status = AsciiStringToUint64 (ValueString, FALSE, &TempNumber); - if (EFI_ERROR (Status)) { - Error (NULL, 0, 2000, "Invalid parameter", "%s = %s", EFI_FV_RUNTIME_DRIVER_BASE_ADDRESS_STRING, ValueString); - return STATUS_ERROR; - } - mFvDataInfo.RuntimeBaseAddress = TempNumber; - DebugMsg (NULL, 0, 9, "Runtime driver base address", "%s = %s", EFI_FV_RUNTIME_DRIVER_BASE_ADDRESS_STRING, ValueString); - } - - // - // free the allocated memory space for addr file. - // - free (InfFileImage); - InfFileImage = NULL; - InfFileSize = 0; - } - // // Read the INF file image // @@ -683,32 +622,22 @@ Returns: // // update boot driver address and runtime driver address in address file // - if (Status == EFI_SUCCESS && AddrFileName != NULL) { + if (Status == EFI_SUCCESS && AddrFileName != NULL && mFvBaseAddressNumber > 0) { FpFile = fopen (AddrFileName, "w"); if (FpFile == NULL) { Error (NULL, 0, 0001, "Error opening file", AddrFileName); return STATUS_ERROR; } - fprintf (FpFile, OPTIONS_SECTION_STRING); + fprintf (FpFile, FV_BASE_ADDRESS_STRING); fprintf (FpFile, "\n"); - if (mFvDataInfo.BootBaseAddress != 0) { - fprintf (FpFile, EFI_FV_BOOT_DRIVER_BASE_ADDRESS_STRING); - fprintf ( - FpFile, - " = 0x%llx\n", - (unsigned long long)mFvDataInfo.BootBaseAddress - ); - DebugMsg (NULL, 0, 9, "Updated boot driver base address", "%s = 0x%llx", EFI_FV_RUNTIME_DRIVER_BASE_ADDRESS_STRING, (unsigned long long) mFvDataInfo.BootBaseAddress); - } - if (mFvDataInfo.RuntimeBaseAddress != 0) { - fprintf (FpFile, EFI_FV_RUNTIME_DRIVER_BASE_ADDRESS_STRING); + for (Index = 0; Index < mFvBaseAddressNumber; Index ++) { fprintf ( FpFile, - " = 0x%llx\n", - (unsigned long long)mFvDataInfo.RuntimeBaseAddress + "0x%llx\n", + (unsigned long long)mFvBaseAddress[Index] ); - DebugMsg (NULL, 0, 9, "Updated runtime driver base address", "%s = 0x%llx", EFI_FV_RUNTIME_DRIVER_BASE_ADDRESS_STRING, (unsigned long long) mFvDataInfo.RuntimeBaseAddress); } + fflush (FpFile); fclose (FpFile); } diff --git a/BaseTools/Source/C/GenFv/GenFvInternalLib.c b/BaseTools/Source/C/GenFv/GenFvInternalLib.c index d17a2ff1a8..00d008573a 100644 --- a/BaseTools/Source/C/GenFv/GenFvInternalLib.c +++ b/BaseTools/Source/C/GenFv/GenFvInternalLib.c @@ -1,6 +1,6 @@ /** @file -Copyright (c) 2004 - 2009, Intel Corporation +Copyright (c) 2004 - 2010, Intel Corporation All rights reserved. This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this distribution. The full text of the license may be found at @@ -159,6 +159,9 @@ UINT8 m64kRecoveryStartupApDataArray[SIZEOF_ST FV_INFO mFvDataInfo; CAP_INFO mCapDataInfo; +EFI_PHYSICAL_ADDRESS mFvBaseAddress[0x10]; +UINT32 mFvBaseAddressNumber = 0; + EFI_STATUS ParseFvInf ( IN MEMORY_FILE *InfFile, @@ -716,6 +719,11 @@ Returns: EFI_TE_IMAGE_HEADER *TEImageHeader; EFI_IMAGE_SECTION_HEADER *SectionHeader; unsigned long long TempLongAddress; + UINT32 TextVirtualAddress; + UINT32 DataVirtualAddress; + EFI_PHYSICAL_ADDRESS LinkTimeBaseAddress; + + // // Init local variable // @@ -789,29 +797,35 @@ Returns: SectionHeader = (EFI_IMAGE_SECTION_HEADER *) (TEImageHeader + 1); Index = TEImageHeader->NumberOfSections; } - + // // module information output // if (ImageBaseAddress == 0) { fprintf (FvMapFile, "%s (dummy) (", KeyWord); - fprintf (FvMapFile, "BaseAddress=%08llx, ", (unsigned long long) ImageBaseAddress); + fprintf (FvMapFile, "BaseAddress=%010llx, ", (unsigned long long) ImageBaseAddress); } else { - fprintf (FvMapFile, "%s (", KeyWord); - fprintf (FvMapFile, "BaseAddress=%08llx, ", (unsigned long long) (ImageBaseAddress + Offset)); + fprintf (FvMapFile, "%s (Fixed Flash Address, ", KeyWord); + fprintf (FvMapFile, "BaseAddress=0x%010llx, ", (unsigned long long) (ImageBaseAddress + Offset)); } - fprintf (FvMapFile, "EntryPoint=%08llx, ", (unsigned long long) (ImageBaseAddress + AddressOfEntryPoint)); - fprintf (FvMapFile, "GUID=%s", FileGuidName); + fprintf (FvMapFile, "EntryPoint=0x%010llx", (unsigned long long) (ImageBaseAddress + AddressOfEntryPoint)); fprintf (FvMapFile, ")\n"); + fprintf (FvMapFile, "(GUID=%s", FileGuidName); + TextVirtualAddress = 0; + DataVirtualAddress = 0; for (; Index > 0; Index --, SectionHeader ++) { - if (stricmp ((CHAR8 *)SectionHeader->Name, ".text") == 0) { - fprintf (FvMapFile, ".textbaseaddress=%08llx ", (unsigned long long) (ImageBaseAddress + SectionHeader->VirtualAddress)); + if (stricmp ((CHAR8 *)SectionHeader->Name, ".text") == 0) { + TextVirtualAddress = SectionHeader->VirtualAddress; } else if (stricmp ((CHAR8 *)SectionHeader->Name, ".data") == 0) { - fprintf (FvMapFile, ".databaseaddress=%08llx ", (unsigned long long) (ImageBaseAddress + SectionHeader->VirtualAddress)); + DataVirtualAddress = SectionHeader->VirtualAddress; + } else if (stricmp ((CHAR8 *)SectionHeader->Name, ".sdata") == 0) { + DataVirtualAddress = SectionHeader->VirtualAddress; } } - fprintf (FvMapFile, "\n\n"); + fprintf (FvMapFile, " .textbaseaddress=0x%010llx", (unsigned long long) (ImageBaseAddress + TextVirtualAddress)); + fprintf (FvMapFile, " .databaseaddress=0x%010llx", (unsigned long long) (ImageBaseAddress + DataVirtualAddress)); + fprintf (FvMapFile, ")\n\n"); // // Open PeMapFile @@ -826,6 +840,7 @@ Returns: // // Output Functions information into Fv Map file // + LinkTimeBaseAddress = 0; while (fgets (Line, MAX_LINE_LEN, PeMapFile) != NULL) { // // Skip blank line @@ -851,6 +866,9 @@ Returns: // FunctionType = 2; fgets (Line, MAX_LINE_LEN, PeMapFile); + } else if (stricmp (KeyWord, "Preferred") ==0) { + sscanf (Line + strlen (" Preferred load address is"), "%llx", &TempLongAddress); + LinkTimeBaseAddress = (UINT64) TempLongAddress; } continue; } @@ -861,24 +879,14 @@ Returns: sscanf (Line, "%s %s %llx %s", KeyWord, FunctionName, &TempLongAddress, FunctionTypeName); FunctionAddress = (UINT64) TempLongAddress; if (FunctionTypeName [1] == '\0' && (FunctionTypeName [0] == 'f' || FunctionTypeName [0] == 'F')) { - fprintf (FvMapFile, " %016llx ", (unsigned long long) (ImageBaseAddress + FunctionAddress)); - fprintf (FvMapFile, "(%08llx) F ", (unsigned long long) (FunctionAddress - Offset)); - fprintf (FvMapFile, "%s\n", FunctionName); - } else { - fprintf (FvMapFile, " %016llx ", (unsigned long long) (ImageBaseAddress + FunctionAddress)); - fprintf (FvMapFile, "(%08llx) ", (unsigned long long) (FunctionAddress - Offset)); + fprintf (FvMapFile, " 0x%010llx ", (unsigned long long) (ImageBaseAddress + FunctionAddress - LinkTimeBaseAddress)); fprintf (FvMapFile, "%s\n", FunctionName); } } else if (FunctionType == 2) { sscanf (Line, "%s %s %llx %s", KeyWord, FunctionName, &TempLongAddress, FunctionTypeName); FunctionAddress = (UINT64) TempLongAddress; if (FunctionTypeName [1] == '\0' && (FunctionTypeName [0] == 'f' || FunctionTypeName [0] == 'F')) { - fprintf (FvMapFile, " %016llx ", (unsigned long long) (ImageBaseAddress + FunctionAddress)); - fprintf (FvMapFile, "(%08llx) FS ", (unsigned long long) (FunctionAddress - Offset)); - fprintf (FvMapFile, "%s\n", FunctionName); - } else { - fprintf (FvMapFile, " %016llx ", (unsigned long long) (ImageBaseAddress + FunctionAddress)); - fprintf (FvMapFile, "(%08llx) ", (unsigned long long) (FunctionAddress - Offset)); + fprintf (FvMapFile, " 0x%010llx ", (unsigned long long) (ImageBaseAddress + FunctionAddress - LinkTimeBaseAddress)); fprintf (FvMapFile, "%s\n", FunctionName); } } @@ -898,7 +906,8 @@ AddFile ( IN FV_INFO *FvInfo, IN UINTN Index, IN OUT EFI_FFS_FILE_HEADER **VtfFileImage, - IN FILE *FvMapFile + IN FILE *FvMapFile, + IN FILE *FvReportFile ) /*++ @@ -916,6 +925,7 @@ Arguments: VtfFileImage A pointer to the VTF file within the FvImage. If this is equal to the end of the FvImage then no VTF previously found. FvMapFile Pointer to FvMap File + FvReportFile Pointer to FvReport File Returns: @@ -933,6 +943,7 @@ Returns: UINT32 CurrentFileAlignment; EFI_STATUS Status; UINTN Index1; + UINT8 FileGuidString[PRINTED_GUID_BUFFER_SIZE]; Index1 = 0; // @@ -1071,6 +1082,10 @@ Returns: // copy VTF File // memcpy (*VtfFileImage, FileBuffer, FileSize); + + PrintGuidToBuffer ((EFI_GUID *) FileBuffer, FileGuidString, sizeof (FileGuidString), TRUE); + fprintf (FvReportFile, "0x%08X %s\n", (unsigned)(UINTN) (((UINT8 *)*VtfFileImage) - (UINTN)FvImage->FileImage), FileGuidString); + free (FileBuffer); DebugMsg (NULL, 0, 9, "Add VTF FFS file in FV image", NULL); return EFI_SUCCESS; @@ -1106,6 +1121,8 @@ Returns: // Copy the file // memcpy (FvImage->CurrentFilePointer, FileBuffer, FileSize); + PrintGuidToBuffer ((EFI_GUID *) FileBuffer, FileGuidString, sizeof (FileGuidString), TRUE); + fprintf (FvReportFile, "0x%08X %s\n", (unsigned) (FvImage->CurrentFilePointer - FvImage->FileImage), FileGuidString); FvImage->CurrentFilePointer += FileSize; } else { Error (NULL, 0, 4002, "Resource", "FV space is full, cannot add file %s.", FvInfo->FvFiles[Index]); @@ -1967,10 +1984,13 @@ Returns: EFI_FIRMWARE_VOLUME_EXT_HEADER *FvExtHeader; FILE *FvExtHeaderFile; UINTN FileSize; + CHAR8 FvReportName[_MAX_PATH]; + FILE *FvReportFile; FvBufferHeader = NULL; FvFile = NULL; FvMapFile = NULL; + FvReportFile = NULL; if (InfFileImage != NULL) { // @@ -2109,6 +2129,12 @@ Returns: } VerboseMsg ("FV Map file name is %s", FvMapName); + // + // FvReport file to log the FV information in one Fvimage + // + strcpy (FvReportName, FvFileName); + strcat (FvReportName, ".txt"); + // // Calculate the FV size and Update Fv Size based on the actual FFS files. // And Update mFvDataInfo data. @@ -2224,6 +2250,14 @@ Returns: return EFI_ABORTED; } + // + // Open FvReport file + // + FvReportFile = fopen(FvReportName, "w"); + if (FvReportFile == NULL) { + Error (NULL, 0, 0001, "Error opening file", FvReportName); + return EFI_ABORTED; + } // // record FV size information into FvMap file. // @@ -2240,6 +2274,12 @@ Returns: fprintf (FvMapFile, " = 0x%x\n\n", (unsigned) (mFvTotalSize - mFvTakenSize)); } + // + // record FV size information to FvReportFile. + // + fprintf (FvReportFile, "%s = 0x%x\n", EFI_FV_TOTAL_SIZE_STRING, (unsigned) mFvTotalSize); + fprintf (FvReportFile, "%s = 0x%x\n", EFI_FV_TAKEN_SIZE_STRING, (unsigned) mFvTakenSize); + // // Add PI FV extension header // @@ -2263,7 +2303,7 @@ Returns: // // Add the file // - Status = AddFile (&FvImageMemoryFile, &mFvDataInfo, Index, &VtfFileImage, FvMapFile); + Status = AddFile (&FvImageMemoryFile, &mFvDataInfo, Index, &VtfFileImage, FvMapFile, FvReportFile); // // Exit if error detected while adding the file @@ -2358,13 +2398,19 @@ Finish: } if (FvFile != NULL) { + fflush (FvFile); fclose (FvFile); } if (FvMapFile != NULL) { + fflush (FvMapFile); fclose (FvMapFile); } + if (FvReportFile != NULL) { + fflush (FvReportFile); + fclose (FvReportFile); + } return Status; } @@ -2652,6 +2698,54 @@ Returns: return EFI_SUCCESS; } +EFI_STATUS +GetChildFvFromFfs ( + IN FV_INFO *FvInfo, + IN EFI_FFS_FILE_HEADER *FfsFile, + IN UINTN XipOffset + ) +/*++ + +Routine Description: + + This function gets all child FvImages in the input FfsFile, and records + their base address to the parent image. + +Arguments: + FvInfo A pointer to FV_INFO struture. + FfsFile A pointer to Ffs file image that may contain FvImage. + XipOffset The offset address to the parent FvImage base. + +Returns: + + EFI_SUCCESS Base address of child Fv image is recorded. +--*/ +{ + EFI_STATUS Status; + UINTN Index; + EFI_FILE_SECTION_POINTER SubFvSection; + EFI_FIRMWARE_VOLUME_HEADER *SubFvImageHeader; + EFI_PHYSICAL_ADDRESS SubFvBaseAddress; + + for (Index = 1;; Index++) { + // + // Find FV section + // + Status = GetSectionByType (FfsFile, EFI_SECTION_FIRMWARE_VOLUME_IMAGE, Index, &SubFvSection); + if (EFI_ERROR (Status)) { + break; + } + SubFvImageHeader = (EFI_FIRMWARE_VOLUME_HEADER *) ((UINT8 *) SubFvSection.FVImageSection + sizeof (EFI_FIRMWARE_VOLUME_IMAGE_SECTION)); + // + // Rebase on Flash + // + SubFvBaseAddress = FvInfo->BaseAddress + (UINTN) SubFvImageHeader - (UINTN) FfsFile + XipOffset; + mFvBaseAddress[mFvBaseAddressNumber ++ ] = SubFvBaseAddress; + } + + return EFI_SUCCESS; +} + EFI_STATUS FfsRebase ( IN OUT FV_INFO *FvInfo, @@ -2696,7 +2790,6 @@ Returns: EFI_FFS_FILE_STATE SavedState; EFI_IMAGE_OPTIONAL_HEADER_UNION *ImgHdr; EFI_TE_IMAGE_HEADER *TEImageHeader; - UINT8 Flags; UINT8 *MemoryImagePointer; EFI_IMAGE_SECTION_HEADER *SectionHeader; CHAR8 PeFileName [_MAX_PATH]; @@ -2717,26 +2810,12 @@ Returns: PeFileBuffer = NULL; // - // Check XipAddress, BootAddress and RuntimeAddress + // Don't need to relocate image when BaseAddress is not set. // - Flags = 0; - XipBase = 0; - if (FvInfo->BaseAddress != 0) { - Flags |= REBASE_XIP_FILE; - XipBase = FvInfo->BaseAddress + XipOffset; - } - if (FvInfo->BootBaseAddress != 0) { - Flags |= REBASE_BOOTTIME_FILE; - } - if (FvInfo->RuntimeBaseAddress != 0) { - Flags |= REBASE_RUNTIME_FILE; + if (FvInfo->BaseAddress == 0) { + return EFI_SUCCESS; } - - // - // Don't Rebase this FFS. - // Only copy the original map file into the FvMap file - // for the image that is not required to be relocated. - // + XipBase = FvInfo->BaseAddress + XipOffset; // // We only process files potentially containing PE32 sections. @@ -2749,6 +2828,16 @@ Returns: case EFI_FV_FILETYPE_DRIVER: case EFI_FV_FILETYPE_DXE_CORE: break; + case EFI_FV_FILETYPE_FIRMWARE_VOLUME_IMAGE: + // + // Rebase the inside FvImage. + // + GetChildFvFromFfs (FvInfo, FfsFile, XipOffset); + + // + // Search PE/TE section in FV sectin. + // + break; default: return EFI_SUCCESS; } @@ -2809,13 +2898,6 @@ Returns: case EFI_FV_FILETYPE_PEI_CORE: case EFI_FV_FILETYPE_PEIM: case EFI_FV_FILETYPE_COMBINED_PEIM_DRIVER: - if ((Flags & REBASE_XIP_FILE) == 0) { - // - // We aren't relocating XIP code, so skip it. - // - goto WritePeMap; - } - // // Check if section-alignment and file-alignment match or not // @@ -2889,70 +2971,18 @@ Returns: case EFI_FV_FILETYPE_DRIVER: case EFI_FV_FILETYPE_DXE_CORE: - switch (ImgHdr->Pe32.OptionalHeader.Subsystem) { - case EFI_IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER: - if ((Flags & REBASE_XIP_FILE) == REBASE_XIP_FILE) { - // - // Check if section-alignment and file-alignment match or not - // - if ((ImgHdr->Pe32.OptionalHeader.SectionAlignment != ImgHdr->Pe32.OptionalHeader.FileAlignment)) { - // - // Xip module has the same section alignment and file alignment. - // - Error (NULL, 0, 3000, "Invalid", "Section-Alignment and File-Alignment do not match : %s.", FileName); - return EFI_ABORTED; - } - NewPe32BaseAddress = XipBase + (UINTN) CurrentPe32Section.Pe32Section + sizeof (EFI_PE32_SECTION) - (UINTN)FfsFile; - BaseToUpdate = &XipBase; - } else if ((Flags & REBASE_RUNTIME_FILE) == REBASE_RUNTIME_FILE) { - // - // make sure image base address at the section alignment - // - FvInfo->RuntimeBaseAddress = (FvInfo->RuntimeBaseAddress - ImageContext.ImageSize) & (~(ImageContext.SectionAlignment - 1)); - FvInfo->RuntimeBaseAddress = FvInfo->RuntimeBaseAddress & (~(EFI_PAGE_SIZE - 1)); - NewPe32BaseAddress = FvInfo->RuntimeBaseAddress; - BaseToUpdate = &(FvInfo->RuntimeBaseAddress); - } else { - // - // RT drivers aren't supposed to be relocated - // - goto WritePeMap; - } - break; - - default: - // - // We treat all other subsystems the same as BS_DRIVER - // - if ((Flags & REBASE_XIP_FILE) == REBASE_XIP_FILE) { - // - // Check if section-alignment and file-alignment match or not - // - if ((ImgHdr->Pe32.OptionalHeader.SectionAlignment != ImgHdr->Pe32.OptionalHeader.FileAlignment)) { - // - // Xip module has the same section alignment and file alignment. - // - Error (NULL, 0, 3000, "Invalid", "Section-Alignment and File-Alignment do not match : %s.", FileName); - return EFI_ABORTED; - } - NewPe32BaseAddress = XipBase + (UINTN) CurrentPe32Section.Pe32Section + sizeof (EFI_PE32_SECTION) - (UINTN)FfsFile; - BaseToUpdate = &XipBase; - } else if ((Flags & REBASE_BOOTTIME_FILE) == REBASE_BOOTTIME_FILE) { - // - // make sure image base address at the Section and Page alignment - // - FvInfo->BootBaseAddress = (FvInfo->BootBaseAddress - ImageContext.ImageSize) & (~(ImageContext.SectionAlignment - 1)); - FvInfo->BootBaseAddress = FvInfo->BootBaseAddress & (~(EFI_PAGE_SIZE - 1)); - NewPe32BaseAddress = FvInfo->BootBaseAddress; - BaseToUpdate = &(FvInfo->BootBaseAddress); - } else { - // - // Skip all BS_DRIVER's - // - goto WritePeMap; - } - break; + // + // Check if section-alignment and file-alignment match or not + // + if ((ImgHdr->Pe32.OptionalHeader.SectionAlignment != ImgHdr->Pe32.OptionalHeader.FileAlignment)) { + // + // Xip module has the same section alignment and file alignment. + // + Error (NULL, 0, 3000, "Invalid", "Section-Alignment and File-Alignment do not match : %s.", FileName); + return EFI_ABORTED; } + NewPe32BaseAddress = XipBase + (UINTN) CurrentPe32Section.Pe32Section + sizeof (EFI_PE32_SECTION) - (UINTN)FfsFile; + BaseToUpdate = &XipBase; break; default: @@ -2963,68 +2993,74 @@ Returns: } // - // Relocation exist and rebase + // Relocation doesn't exist // - if (!ImageContext.RelocationsStripped) { - // - // Load and Relocate Image Data - // - MemoryImagePointer = (UINT8 *) malloc ((UINTN) ImageContext.ImageSize + ImageContext.SectionAlignment); - if (MemoryImagePointer == NULL) { - Error (NULL, 0, 4001, "Resource", "memory cannot be allocated on rebase of %s", FileName); - return EFI_OUT_OF_RESOURCES; - } - memset ((VOID *) MemoryImagePointer, 0, (UINTN) ImageContext.ImageSize + ImageContext.SectionAlignment); - ImageContext.ImageAddress = ((UINTN) MemoryImagePointer + ImageContext.SectionAlignment - 1) & (~((INT64)ImageContext.SectionAlignment - 1)); - - Status = PeCoffLoaderLoadImage (&ImageContext); - if (EFI_ERROR (Status)) { - Error (NULL, 0, 3000, "Invalid", "LocateImage() call failed on rebase of %s", FileName); - free ((VOID *) MemoryImagePointer); - return Status; - } - - ImageContext.DestinationAddress = NewPe32BaseAddress; - Status = PeCoffLoaderRelocateImage (&ImageContext); - if (EFI_ERROR (Status)) { - Error (NULL, 0, 3000, "Invalid", "RelocateImage() call failed on rebase of %s", FileName); - free ((VOID *) MemoryImagePointer); - return Status; - } + if (ImageContext.RelocationsStripped) { + Warning (NULL, 0, 0, "Invalid", "The file %s has no .reloc section.", FileName); + continue; + } - // - // Copy Relocated data to raw image file. - // - SectionHeader = (EFI_IMAGE_SECTION_HEADER *) ( - (UINTN) ImgHdr + - sizeof (UINT32) + - sizeof (EFI_IMAGE_FILE_HEADER) + - ImgHdr->Pe32.FileHeader.SizeOfOptionalHeader - ); - - for (Index = 0; Index < ImgHdr->Pe32.FileHeader.NumberOfSections; Index ++, SectionHeader ++) { - CopyMem ( - (UINT8 *) CurrentPe32Section.Pe32Section + sizeof (EFI_COMMON_SECTION_HEADER) + SectionHeader->PointerToRawData, - (VOID*) (UINTN) (ImageContext.ImageAddress + SectionHeader->VirtualAddress), - SectionHeader->SizeOfRawData - ); - } - + // + // Relocation exist and rebase + // + // + // Load and Relocate Image Data + // + MemoryImagePointer = (UINT8 *) malloc ((UINTN) ImageContext.ImageSize + ImageContext.SectionAlignment); + if (MemoryImagePointer == NULL) { + Error (NULL, 0, 4001, "Resource", "memory cannot be allocated on rebase of %s", FileName); + return EFI_OUT_OF_RESOURCES; + } + memset ((VOID *) MemoryImagePointer, 0, (UINTN) ImageContext.ImageSize + ImageContext.SectionAlignment); + ImageContext.ImageAddress = ((UINTN) MemoryImagePointer + ImageContext.SectionAlignment - 1) & (~((INT64)ImageContext.SectionAlignment - 1)); + + Status = PeCoffLoaderLoadImage (&ImageContext); + if (EFI_ERROR (Status)) { + Error (NULL, 0, 3000, "Invalid", "LocateImage() call failed on rebase of %s", FileName); free ((VOID *) MemoryImagePointer); - MemoryImagePointer = NULL; - if (PeFileBuffer != NULL) { - free (PeFileBuffer); - PeFileBuffer = NULL; - } + return Status; + } + + ImageContext.DestinationAddress = NewPe32BaseAddress; + Status = PeCoffLoaderRelocateImage (&ImageContext); + if (EFI_ERROR (Status)) { + Error (NULL, 0, 3000, "Invalid", "RelocateImage() call failed on rebase of %s", FileName); + free ((VOID *) MemoryImagePointer); + return Status; + } + + // + // Copy Relocated data to raw image file. + // + SectionHeader = (EFI_IMAGE_SECTION_HEADER *) ( + (UINTN) ImgHdr + + sizeof (UINT32) + + sizeof (EFI_IMAGE_FILE_HEADER) + + ImgHdr->Pe32.FileHeader.SizeOfOptionalHeader + ); + + for (Index = 0; Index < ImgHdr->Pe32.FileHeader.NumberOfSections; Index ++, SectionHeader ++) { + CopyMem ( + (UINT8 *) CurrentPe32Section.Pe32Section + sizeof (EFI_COMMON_SECTION_HEADER) + SectionHeader->PointerToRawData, + (VOID*) (UINTN) (ImageContext.ImageAddress + SectionHeader->VirtualAddress), + SectionHeader->SizeOfRawData + ); + } + + free ((VOID *) MemoryImagePointer); + MemoryImagePointer = NULL; + if (PeFileBuffer != NULL) { + free (PeFileBuffer); + PeFileBuffer = NULL; } // // Update Image Base Address // if (ImgHdr->Pe32.OptionalHeader.Magic == EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC) { - ImgHdr->Pe32.OptionalHeader.ImageBase = (UINT32) NewPe32BaseAddress; + ImgHdr->Pe32.OptionalHeader.ImageBase = (UINT32) NewPe32BaseAddress; } else if (ImgHdr->Pe32Plus.OptionalHeader.Magic == EFI_IMAGE_NT_OPTIONAL_HDR64_MAGIC) { - ImgHdr->Pe32Plus.OptionalHeader.ImageBase = NewPe32BaseAddress; + ImgHdr->Pe32Plus.OptionalHeader.ImageBase = NewPe32BaseAddress; } else { Error (NULL, 0, 3000, "Invalid", "unknown PE magic signature %X in PE32 image %s", ImgHdr->Pe32.OptionalHeader.Magic, @@ -3033,11 +3069,6 @@ Returns: return EFI_ABORTED; } - // - // Update BASE address by add one page size. - // - *BaseToUpdate -= EFI_PAGE_SIZE; - // // Now update file checksum // @@ -3055,7 +3086,7 @@ Returns: // // Get this module function address from ModulePeMapFile and add them into FvMap file // -WritePeMap: + // // Default use FileName as map file path // @@ -3069,7 +3100,8 @@ WritePeMap: if (FfsFile->Type != EFI_FV_FILETYPE_SECURITY_CORE && FfsFile->Type != EFI_FV_FILETYPE_PEI_CORE && FfsFile->Type != EFI_FV_FILETYPE_PEIM && - FfsFile->Type != EFI_FV_FILETYPE_COMBINED_PEIM_DRIVER + FfsFile->Type != EFI_FV_FILETYPE_COMBINED_PEIM_DRIVER && + FfsFile->Type != EFI_FV_FILETYPE_FIRMWARE_VOLUME_IMAGE ) { // // Only Peim code may have a TE section @@ -3122,13 +3154,6 @@ WritePeMap: // Get File PdbPointer // PdbPointer = PeCoffLoaderGetPdbPointer (ImageContext.Handle); - - if ((Flags & REBASE_XIP_FILE) == 0) { - // - // For none XIP PEIM module, their map info also are collected. - // - goto WriteTeMap; - } // // Set new rebased address. @@ -3139,7 +3164,7 @@ WritePeMap: // // if reloc is stripped, try to get the original efi image to get reloc info. // - if (ImageContext.RelocationsStripped == TRUE) { + if (ImageContext.RelocationsStripped) { // // Construct the original efi file name // @@ -3194,70 +3219,75 @@ WritePeMap: ImageContext.RelocationsStripped = FALSE; } } + // + // Relocation doesn't exist + // + if (ImageContext.RelocationsStripped) { + Warning (NULL, 0, 0, "Invalid", "The file %s has no .reloc section.", FileName); + continue; + } // // Relocation exist and rebase // - if (!ImageContext.RelocationsStripped) { - // - // Load and Relocate Image Data - // - MemoryImagePointer = (UINT8 *) malloc ((UINTN) ImageContext.ImageSize + ImageContext.SectionAlignment); - if (MemoryImagePointer == NULL) { - Error (NULL, 0, 4001, "Resource", "memory cannot be allocated on rebase of %s", FileName); - return EFI_OUT_OF_RESOURCES; - } - memset ((VOID *) MemoryImagePointer, 0, (UINTN) ImageContext.ImageSize + ImageContext.SectionAlignment); - ImageContext.ImageAddress = ((UINTN) MemoryImagePointer + ImageContext.SectionAlignment - 1) & (~(ImageContext.SectionAlignment - 1)); - - Status = PeCoffLoaderLoadImage (&ImageContext); - if (EFI_ERROR (Status)) { - Error (NULL, 0, 3000, "Invalid", "LocateImage() call failed on rebase of %s", FileName); - free ((VOID *) MemoryImagePointer); - return Status; - } - // - // Reloacate TeImage - // - ImageContext.DestinationAddress = NewPe32BaseAddress; - Status = PeCoffLoaderRelocateImage (&ImageContext); - if (EFI_ERROR (Status)) { - Error (NULL, 0, 3000, "Invalid", "RelocateImage() call failed on rebase of TE image %s", FileName); - free ((VOID *) MemoryImagePointer); - return Status; - } - - // - // Copy the relocated image into raw image file. - // - SectionHeader = (EFI_IMAGE_SECTION_HEADER *) (TEImageHeader + 1); - for (Index = 0; Index < TEImageHeader->NumberOfSections; Index ++, SectionHeader ++) { - if (!ImageContext.IsTeImage) { - CopyMem ( - (UINT8 *) TEImageHeader + sizeof (EFI_TE_IMAGE_HEADER) - TEImageHeader->StrippedSize + SectionHeader->PointerToRawData, - (VOID*) (UINTN) (ImageContext.ImageAddress + SectionHeader->VirtualAddress), - SectionHeader->SizeOfRawData - ); - } else { - CopyMem ( - (UINT8 *) TEImageHeader + sizeof (EFI_TE_IMAGE_HEADER) - TEImageHeader->StrippedSize + SectionHeader->PointerToRawData, - (VOID*) (UINTN) (ImageContext.ImageAddress + sizeof (EFI_TE_IMAGE_HEADER) - TEImageHeader->StrippedSize + SectionHeader->VirtualAddress), - SectionHeader->SizeOfRawData - ); - } - } - - // - // Free the allocated memory resource - // + // + // Load and Relocate Image Data + // + MemoryImagePointer = (UINT8 *) malloc ((UINTN) ImageContext.ImageSize + ImageContext.SectionAlignment); + if (MemoryImagePointer == NULL) { + Error (NULL, 0, 4001, "Resource", "memory cannot be allocated on rebase of %s", FileName); + return EFI_OUT_OF_RESOURCES; + } + memset ((VOID *) MemoryImagePointer, 0, (UINTN) ImageContext.ImageSize + ImageContext.SectionAlignment); + ImageContext.ImageAddress = ((UINTN) MemoryImagePointer + ImageContext.SectionAlignment - 1) & (~(ImageContext.SectionAlignment - 1)); + + Status = PeCoffLoaderLoadImage (&ImageContext); + if (EFI_ERROR (Status)) { + Error (NULL, 0, 3000, "Invalid", "LocateImage() call failed on rebase of %s", FileName); free ((VOID *) MemoryImagePointer); - MemoryImagePointer = NULL; - if (PeFileBuffer != NULL) { - free (PeFileBuffer); - PeFileBuffer = NULL; + return Status; + } + // + // Reloacate TeImage + // + ImageContext.DestinationAddress = NewPe32BaseAddress; + Status = PeCoffLoaderRelocateImage (&ImageContext); + if (EFI_ERROR (Status)) { + Error (NULL, 0, 3000, "Invalid", "RelocateImage() call failed on rebase of TE image %s", FileName); + free ((VOID *) MemoryImagePointer); + return Status; + } + + // + // Copy the relocated image into raw image file. + // + SectionHeader = (EFI_IMAGE_SECTION_HEADER *) (TEImageHeader + 1); + for (Index = 0; Index < TEImageHeader->NumberOfSections; Index ++, SectionHeader ++) { + if (!ImageContext.IsTeImage) { + CopyMem ( + (UINT8 *) TEImageHeader + sizeof (EFI_TE_IMAGE_HEADER) - TEImageHeader->StrippedSize + SectionHeader->PointerToRawData, + (VOID*) (UINTN) (ImageContext.ImageAddress + SectionHeader->VirtualAddress), + SectionHeader->SizeOfRawData + ); + } else { + CopyMem ( + (UINT8 *) TEImageHeader + sizeof (EFI_TE_IMAGE_HEADER) - TEImageHeader->StrippedSize + SectionHeader->PointerToRawData, + (VOID*) (UINTN) (ImageContext.ImageAddress + sizeof (EFI_TE_IMAGE_HEADER) - TEImageHeader->StrippedSize + SectionHeader->VirtualAddress), + SectionHeader->SizeOfRawData + ); } } + // + // Free the allocated memory resource + // + free ((VOID *) MemoryImagePointer); + MemoryImagePointer = NULL; + if (PeFileBuffer != NULL) { + free (PeFileBuffer); + PeFileBuffer = NULL; + } + // // Update Image Base Address // @@ -3279,7 +3309,7 @@ WritePeMap: // // Get this module function address from ModulePeMapFile and add them into FvMap file // -WriteTeMap: + // // Default use FileName as map file path // diff --git a/BaseTools/Source/C/GenFv/GenFvInternalLib.h b/BaseTools/Source/C/GenFv/GenFvInternalLib.h index 3c0e9336bd..b82fac8837 100644 --- a/BaseTools/Source/C/GenFv/GenFvInternalLib.h +++ b/BaseTools/Source/C/GenFv/GenFvInternalLib.h @@ -1,6 +1,6 @@ /** @file -Copyright (c) 2004 - 2008, Intel Corporation +Copyright (c) 2004 - 2010, Intel Corporation All rights reserved. This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this distribution. The full text of the license may be found at @@ -67,6 +67,7 @@ Abstract: #define OPTIONS_SECTION_STRING "[options]" #define ATTRIBUTES_SECTION_STRING "[attributes]" #define FILES_SECTION_STRING "[files]" +#define FV_BASE_ADDRESS_STRING "[FV_BASE_ADDRESS]" // // Options section @@ -82,8 +83,6 @@ Abstract: #define EFI_CAPSULE_HEADER_SIZE_STRING "EFI_CAPSULE_HEADER_SIZE" #define EFI_CAPSULE_FLAGS_STRING "EFI_CAPSULE_FLAGS" #define EFI_CAPSULE_VERSION_STRING "EFI_CAPSULE_VERSION" -#define EFI_FV_BOOT_DRIVER_BASE_ADDRESS_STRING "EFI_BOOT_DRIVER_BASE_ADDRESS" -#define EFI_FV_RUNTIME_DRIVER_BASE_ADDRESS_STRING "EFI_RUNTIME_DRIVER_BASE_ADDRESS" #define EFI_FV_TOTAL_SIZE_STRING "EFI_FV_TOTAL_SIZE" #define EFI_FV_TAKEN_SIZE_STRING "EFI_FV_TAKEN_SIZE" @@ -204,13 +203,6 @@ Abstract: #define FIT_TYPE_MASK 0x7F #define CHECKSUM_BIT_MASK 0x80 -// -// Rebase File type -// -#define REBASE_XIP_FILE 0x1 -#define REBASE_BOOTTIME_FILE 0x2 -#define REBASE_RUNTIME_FILE 0x4 - // // Private data types // @@ -228,8 +220,6 @@ typedef struct { typedef struct { BOOLEAN BaseAddressSet; EFI_PHYSICAL_ADDRESS BaseAddress; - EFI_PHYSICAL_ADDRESS BootBaseAddress; - EFI_PHYSICAL_ADDRESS RuntimeBaseAddress; EFI_GUID FvFileSystemGuid; BOOLEAN FvFileSystemGuidSet; EFI_GUID FvNameGuid; @@ -270,6 +260,9 @@ extern CAP_INFO mCapDataInfo; extern EFI_GUID mEfiFirmwareFileSystem2Guid; extern UINT32 mFvTotalSize; extern UINT32 mFvTakenSize; + +extern EFI_PHYSICAL_ADDRESS mFvBaseAddress[]; +extern UINT32 mFvBaseAddressNumber; // // Local function prototypes // diff --git a/BaseTools/Source/C/GenFw/GenFw.c b/BaseTools/Source/C/GenFw/GenFw.c index aabd143b6a..d42c88e23d 100644 --- a/BaseTools/Source/C/GenFw/GenFw.c +++ b/BaseTools/Source/C/GenFw/GenFw.c @@ -1,6 +1,6 @@ /** @file -Copyright (c) 2004 - 2009, Intel Corporation +Copyright (c) 2004 - 2010, Intel Corporation All rights reserved. This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this distribution. The full text of the license may be found at @@ -78,6 +78,8 @@ Abstract: #define FW_RELOC_STRIPEED_IMAGE 9 #define FW_HII_PACKAGE_LIST_RCIMAGE 10 #define FW_HII_PACKAGE_LIST_BINIMAGE 11 +#define FW_REBASE_IMAGE 12 +#define FW_SET_ADDRESS_IMAGE 13 #define DUMP_TE_HEADER 0x11 @@ -116,6 +118,12 @@ static const char *gHiiPackageRCFileHeader[] = { STATIC CHAR8 *mInImageName; +// +// Module image information +// +STATIC UINT32 mImageTimeStamp = 0; +STATIC UINT32 mImageSize = 0; + STATIC EFI_STATUS ZeroDebugData ( @@ -190,7 +198,7 @@ Returns: // // Copyright declaration // - fprintf (stdout, "Copyright (c) 2007, Intel Corporation. All rights reserved.\n\n"); + fprintf (stdout, "Copyright (c) 2007 - 2010, Intel Corporation. All rights reserved.\n\n"); // // Details Option @@ -244,7 +252,9 @@ Returns: fprintf (stdout, " -s timedate, --stamp timedate\n\ timedate format is \"yyyy-mm-dd 00:00:00\". if timedata \n\ is set to NOW, current system time is used. The support\n\ - date scope is 1970-1-1 8:0:0 ~ 2038-1-19 3:14:07\n\ + date scope is 1970-01-01 00+timezone:00:00\n\ + ~ 2038-01-19 03+timezone:14:07\n\ + The scope is adjusted according to the different zones.\n\ It can't be combined with other action options\n\ except for -o, -r option. It is a action option.\n\ If it is combined with other action options, the later\n\ @@ -288,6 +298,18 @@ Returns: except for -o option. It is a action option.\n\ If it is combined with other action options, the later\n\ input action option will override the previous one.\n"); + fprintf (stdout, " --rebase NewAddress Rebase image to new base address. New address \n\ + is also set to the first none code section header.\n\ + It can't be combined with other action options\n\ + except for -o or -r option. It is a action option.\n\ + If it is combined with other action options, the later\n\ + input action option will override the previous one.\n"); + fprintf (stdout, " --address NewAddress Set new address into the first none code \n\ + section header of the input image.\n\ + It can't be combined with other action options\n\ + except for -o or -r option. It is a action option.\n\ + If it is combined with other action options, the later\n\ + input action option will override the previous one.\n"); fprintf (stdout, " -v, --verbose Turn on verbose output with informational messages.\n"); fprintf (stdout, " -q, --quiet Disable all messages except key message and fatal error\n"); fprintf (stdout, " -d, --debug level Enable debug messages, at input debug level.\n"); @@ -860,6 +882,7 @@ ScanSections( NtHdr->Pe32.FileHeader.NumberOfSections = CoffNbrSections; NtHdr->Pe32.FileHeader.TimeDateStamp = (UINT32) time(NULL); + mImageTimeStamp = NtHdr->Pe32.FileHeader.TimeDateStamp; NtHdr->Pe32.FileHeader.PointerToSymbolTable = 0; NtHdr->Pe32.FileHeader.NumberOfSymbols = 0; NtHdr->Pe32.FileHeader.SizeOfOptionalHeader = sizeof(NtHdr->Pe32.OptionalHeader); @@ -1639,6 +1662,257 @@ Returns: return HiiSectionHeader; } +EFI_STATUS +RebaseImageRead ( + IN VOID *FileHandle, + IN UINTN FileOffset, + IN OUT UINT32 *ReadSize, + OUT VOID *Buffer + ) +/*++ + +Routine Description: + + Support routine for the PE/COFF Loader that reads a buffer from a PE/COFF file + +Arguments: + + FileHandle - The handle to the PE/COFF file + + FileOffset - The offset, in bytes, into the file to read + + ReadSize - The number of bytes to read from the file starting at FileOffset + + Buffer - A pointer to the buffer to read the data into. + +Returns: + + EFI_SUCCESS - ReadSize bytes of data were read into Buffer from the PE/COFF file starting at FileOffset + +--*/ +{ + CHAR8 *Destination8; + CHAR8 *Source8; + UINT32 Length; + + Destination8 = Buffer; + Source8 = (CHAR8 *) ((UINTN) FileHandle + FileOffset); + Length = *ReadSize; + while (Length--) { + *(Destination8++) = *(Source8++); + } + + return EFI_SUCCESS; +} + +EFI_STATUS +SetAddressToSectionHeader ( + IN CHAR8 *FileName, + IN OUT UINT8 *FileBuffer, + IN UINT64 NewPe32BaseAddress + ) +/*++ + +Routine Description: + + Set new base address into the section header of PeImage + +Arguments: + + FileName - Name of file + FileBuffer - Pointer to PeImage. + NewPe32BaseAddress - New Base Address for PE image. + +Returns: + + EFI_SUCCESS Set new base address into this image successfully. + +--*/ +{ + EFI_STATUS Status; + PE_COFF_LOADER_IMAGE_CONTEXT ImageContext; + UINTN Index; + EFI_IMAGE_OPTIONAL_HEADER_UNION *ImgHdr; + EFI_IMAGE_SECTION_HEADER *SectionHeader; + + // + // Initialize context + // + memset (&ImageContext, 0, sizeof (ImageContext)); + ImageContext.Handle = (VOID *) FileBuffer; + ImageContext.ImageRead = (PE_COFF_LOADER_READ_FILE) RebaseImageRead; + Status = PeCoffLoaderGetImageInfo (&ImageContext); + if (EFI_ERROR (Status)) { + Error (NULL, 0, 3000, "Invalid", "The input PeImage %s is not valid", FileName); + return Status; + } + + if (ImageContext.RelocationsStripped) { + Error (NULL, 0, 3000, "Invalid", "The input PeImage %s has no relocation to be fixed up", FileName); + return Status; + } + + // + // Get PeHeader pointer + // + ImgHdr = (EFI_IMAGE_OPTIONAL_HEADER_UNION *)(FileBuffer + ImageContext.PeCoffHeaderOffset); + + // + // Get section header list + // + SectionHeader = (EFI_IMAGE_SECTION_HEADER *) ( + (UINTN) ImgHdr + + sizeof (UINT32) + + sizeof (EFI_IMAGE_FILE_HEADER) + + ImgHdr->Pe32.FileHeader.SizeOfOptionalHeader + ); + + // + // Set base address into the first section header that doesn't point to code section. + // + for (Index = 0; Index < ImgHdr->Pe32.FileHeader.NumberOfSections; Index ++, SectionHeader ++) { + if ((SectionHeader->Characteristics & EFI_IMAGE_SCN_CNT_CODE) == 0) { + *(UINT64 *) &SectionHeader->PointerToRelocations = NewPe32BaseAddress; + break; + } + } + + // + // No available section header is found. + // + if (Index == ImgHdr->Pe32.FileHeader.NumberOfSections) { + return EFI_NOT_FOUND; + } + + // + // BaseAddress is set to section header. + // + return EFI_SUCCESS; +} + +EFI_STATUS +RebaseImage ( + IN CHAR8 *FileName, + IN OUT UINT8 *FileBuffer, + IN UINT64 NewPe32BaseAddress + ) +/*++ + +Routine Description: + + Set new base address into PeImage, and fix up PeImage based on new address. + +Arguments: + + FileName - Name of file + FileBuffer - Pointer to PeImage. + NewPe32BaseAddress - New Base Address for PE image. + +Returns: + + EFI_INVALID_PARAMETER - BaseAddress is not valid. + EFI_SUCCESS - Update PeImage is correctly. + +--*/ +{ + EFI_STATUS Status; + PE_COFF_LOADER_IMAGE_CONTEXT ImageContext; + UINTN Index; + EFI_IMAGE_OPTIONAL_HEADER_UNION *ImgHdr; + UINT8 *MemoryImagePointer; + EFI_IMAGE_SECTION_HEADER *SectionHeader; + + // + // Initialize context + // + memset (&ImageContext, 0, sizeof (ImageContext)); + ImageContext.Handle = (VOID *) FileBuffer; + ImageContext.ImageRead = (PE_COFF_LOADER_READ_FILE) RebaseImageRead; + Status = PeCoffLoaderGetImageInfo (&ImageContext); + if (EFI_ERROR (Status)) { + Error (NULL, 0, 3000, "Invalid", "The input PeImage %s is not valid", FileName); + return Status; + } + + if (ImageContext.RelocationsStripped) { + Error (NULL, 0, 3000, "Invalid", "The input PeImage %s has no relocation to be fixed up", FileName); + return Status; + } + + // + // Get PeHeader pointer + // + ImgHdr = (EFI_IMAGE_OPTIONAL_HEADER_UNION *)(FileBuffer + ImageContext.PeCoffHeaderOffset); + + // + // Load and Relocate Image Data + // + MemoryImagePointer = (UINT8 *) malloc ((UINTN) ImageContext.ImageSize + ImageContext.SectionAlignment); + if (MemoryImagePointer == NULL) { + Error (NULL, 0, 4001, "Resource", "memory cannot be allocated on rebase of %s", FileName); + return EFI_OUT_OF_RESOURCES; + } + memset ((VOID *) MemoryImagePointer, 0, (UINTN) ImageContext.ImageSize + ImageContext.SectionAlignment); + ImageContext.ImageAddress = ((UINTN) MemoryImagePointer + ImageContext.SectionAlignment - 1) & (~((INT64)ImageContext.SectionAlignment - 1)); + + Status = PeCoffLoaderLoadImage (&ImageContext); + if (EFI_ERROR (Status)) { + Error (NULL, 0, 3000, "Invalid", "LocateImage() call failed on rebase of %s", FileName); + free ((VOID *) MemoryImagePointer); + return Status; + } + + ImageContext.DestinationAddress = NewPe32BaseAddress; + Status = PeCoffLoaderRelocateImage (&ImageContext); + if (EFI_ERROR (Status)) { + Error (NULL, 0, 3000, "Invalid", "RelocateImage() call failed on rebase of %s", FileName); + free ((VOID *) MemoryImagePointer); + return Status; + } + + // + // Copy Relocated data to raw image file. + // + SectionHeader = (EFI_IMAGE_SECTION_HEADER *) ( + (UINTN) ImgHdr + + sizeof (UINT32) + + sizeof (EFI_IMAGE_FILE_HEADER) + + ImgHdr->Pe32.FileHeader.SizeOfOptionalHeader + ); + + for (Index = 0; Index < ImgHdr->Pe32.FileHeader.NumberOfSections; Index ++, SectionHeader ++) { + CopyMem ( + FileBuffer + SectionHeader->PointerToRawData, + (VOID*) (UINTN) (ImageContext.ImageAddress + SectionHeader->VirtualAddress), + SectionHeader->SizeOfRawData + ); + } + + free ((VOID *) MemoryImagePointer); + + // + // Update Image Base Address + // + if ((ImgHdr->Pe32.OptionalHeader.Magic == EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC) && (ImgHdr->Pe32.FileHeader.Machine != IMAGE_FILE_MACHINE_IA64)) { + ImgHdr->Pe32.OptionalHeader.ImageBase = (UINT32) NewPe32BaseAddress; + } else if (ImgHdr->Pe32Plus.OptionalHeader.Magic == EFI_IMAGE_NT_OPTIONAL_HDR64_MAGIC) { + ImgHdr->Pe32Plus.OptionalHeader.ImageBase = NewPe32BaseAddress; + } else { + Error (NULL, 0, 3000, "Invalid", "unknown PE magic signature %X in PE32 image %s", + ImgHdr->Pe32.OptionalHeader.Magic, + FileName + ); + return EFI_ABORTED; + } + + // + // Set new base address into section header + // + Status = SetAddressToSectionHeader (FileName, FileBuffer, NewPe32BaseAddress); + + return Status; +} + int main ( int argc, @@ -1686,6 +1960,8 @@ Returns: UINT32 FileLength; UINT8 *OutputFileBuffer; UINT32 OutputFileLength; + UINT8 *InputFileBuffer; + UINT32 InputFileLength; RUNTIME_FUNCTION *RuntimeFunction; UNWIND_INFO *UnwindInfo; STATUS Status; @@ -1712,12 +1988,18 @@ Returns: EFI_HII_PACKAGE_HEADER EndPackage; UINT32 HiiSectionHeaderSize; UINT8 *HiiSectionHeader; + UINT64 NewBaseAddress; + BOOLEAN NegativeAddr; + FILE *ReportFile; + CHAR8 *ReportFileName; + UINTN FileLen; SetUtilityName (UTILITY_NAME); // // Assign to fix compile warning // + FileLen = 0; InputFileNum = 0; InputFileName = NULL; mInImageName = NULL; @@ -1740,6 +2022,8 @@ Returns: LogLevel = 0; OutputFileBuffer = NULL; OutputFileLength = 0; + InputFileBuffer = NULL; + InputFileLength = 0; Optional32 = NULL; Optional64 = NULL; KeepExceptionTableFlag = FALSE; @@ -1752,6 +2036,8 @@ Returns: memset (&HiiPackageListGuid, 0, sizeof (HiiPackageListGuid)); HiiSectionHeaderSize = 0; HiiSectionHeader = NULL; + NewBaseAddress = 0; + NegativeAddr = FALSE; if (argc == 1) { Error (NULL, 0, 1001, "Missing options", "No input options."); @@ -1899,6 +2185,44 @@ Returns: continue; } + if ((stricmp (argv[0], "--rebase") == 0)) { + if (argv[1][0] == '-') { + NegativeAddr = TRUE; + Status = AsciiStringToUint64 (argv[1] + 1, FALSE, &Temp64); + } else { + NegativeAddr = FALSE; + Status = AsciiStringToUint64 (argv[1], FALSE, &Temp64); + } + if (Status != EFI_SUCCESS) { + Error (NULL, 0, 1003, "Invalid option value", "%s = %s", argv[0], argv[1]); + goto Finish; + } + OutImageType = FW_REBASE_IMAGE; + NewBaseAddress = (UINT64) Temp64; + argc -= 2; + argv += 2; + continue; + } + + if ((stricmp (argv[0], "--address") == 0)) { + if (argv[1][0] == '-') { + NegativeAddr = TRUE; + Status = AsciiStringToUint64 (argv[1] + 1, FALSE, &Temp64); + } else { + NegativeAddr = FALSE; + Status = AsciiStringToUint64 (argv[1], FALSE, &Temp64); + } + if (Status != EFI_SUCCESS) { + Error (NULL, 0, 1003, "Invalid option value", "%s = %s", argv[0], argv[1]); + goto Finish; + } + OutImageType = FW_SET_ADDRESS_IMAGE; + NewBaseAddress = (UINT64) Temp64; + argc -= 2; + argv += 2; + continue; + } + if ((stricmp (argv[0], "-p") == 0) || (stricmp (argv[0], "--pad") == 0)) { if (AsciiStringToUint64 (argv[1], FALSE, &Temp64) != EFI_SUCCESS) { Error (NULL, 0, 1003, "Invalid option value", "%s = %s", argv[0], argv[1]); @@ -1942,7 +2266,7 @@ Returns: argv += 2; continue; } - + if ((stricmp (argv[0], "-g") == 0) || (stricmp (argv[0], "--hiiguid") == 0)) { Status = StringToGuid (argv[1], &HiiPackageListGuid); if (EFI_ERROR (Status)) { @@ -1988,9 +2312,9 @@ Returns: // InputFileName buffer too small, need to realloc // InputFileName = (CHAR8 **) realloc ( - InputFileName, - (InputFileNum + MAXIMUM_INPUT_FILE_NUM) * sizeof (CHAR8 *) - ); + InputFileName, + (InputFileNum + MAXIMUM_INPUT_FILE_NUM) * sizeof (CHAR8 *) + ); if (InputFileName == NULL) { Error (NULL, 0, 4001, "Resource", "memory cannot be allocated!"); @@ -2090,6 +2414,12 @@ Returns: case FW_HII_PACKAGE_LIST_BINIMAGE: VerboseMsg ("Combine the input multi hii bin packages to one binary pacakge list file."); break; + case FW_REBASE_IMAGE: + VerboseMsg ("Rebase the input image to new base address."); + break; + case FW_SET_ADDRESS_IMAGE: + VerboseMsg ("Set the preferred address into the section header of the input image"); + break; default: break; } @@ -2114,33 +2444,52 @@ Returns: } fread (OutputFileBuffer, 1, OutputFileLength, fpOut); fclose (fpOut); - } - fpOut = fopen (OutImageName, "wb"); - if (!fpOut) { - Error (NULL, 0, 0001, "Error opening output file", OutImageName); - goto Finish; + fpOut = NULL; } VerboseMsg ("Output file name is %s", OutImageName); - } else if (!ReplaceFlag) { - if (OutImageType == DUMP_TE_HEADER) { - fpOut = stdout; - } else { - Error (NULL, 0, 1001, "Missing option", "output file"); - goto Finish; - } + } else if (!ReplaceFlag && OutImageType != DUMP_TE_HEADER) { + Error (NULL, 0, 1001, "Missing option", "output file"); + goto Finish; } + // + // Open input file and read file data into file buffer. + // + fpIn = fopen (mInImageName, "rb"); + if (fpIn == NULL) { + Error (NULL, 0, 0001, "Error opening file", mInImageName); + goto Finish; + } + InputFileLength = _filelength (fileno (fpIn)); + InputFileBuffer = malloc (InputFileLength); + if (InputFileBuffer == NULL) { + Error (NULL, 0, 4001, "Resource", "memory cannot be allocated!"); + fclose (fpIn); + goto Finish; + } + fread (InputFileBuffer, 1, InputFileLength, fpIn); + fclose (fpIn); + DebugMsg (NULL, 0, 9, "input file info", "the input file size is %u bytes", (unsigned) InputFileLength); + // // Combine multi binary HII package files. // if (OutImageType == FW_HII_PACKAGE_LIST_RCIMAGE || OutImageType == FW_HII_PACKAGE_LIST_BINIMAGE) { + // + // Open output file handle. + // + fpOut = fopen (OutImageName, "wb"); + if (!fpOut) { + Error (NULL, 0, 0001, "Error opening output file", OutImageName); + goto Finish; + } // // Get hii package list lenght // HiiPackageListHeader.PackageLength = sizeof (EFI_HII_PACKAGE_LIST_HEADER); for (Index = 0; Index < InputFileNum; Index ++) { fpIn = fopen (InputFileName [Index], "rb"); - if (!fpIn) { + if (fpIn == NULL) { Error (NULL, 0, 0001, "Error opening file", InputFileName [Index]); goto Finish; } @@ -2186,7 +2535,7 @@ Returns: HiiPackageDataPointer = HiiPackageListBuffer + sizeof (HiiPackageListHeader); for (Index = 0; Index < InputFileNum; Index ++) { fpIn = fopen (InputFileName [Index], "rb"); - if (!fpIn) { + if (fpIn == NULL) { Error (NULL, 0, 0001, "Error opening file", InputFileName [Index]); free (HiiPackageListBuffer); goto Finish; @@ -2240,7 +2589,7 @@ Returns: fprintf (fpOut, " 0x%04X,", *(UINT16 *) HiiPackageDataPointer); HiiPackageDataPointer += 2; } - + if (Index % 16 == 0) { fprintf (fpOut, "\n "); } @@ -2262,6 +2611,14 @@ Returns: // Combine MciBinary files to one file // if (OutImageType == FW_MERGE_IMAGE) { + // + // Open output file handle. + // + fpOut = fopen (OutImageName, "wb"); + if (!fpOut) { + Error (NULL, 0, 0001, "Error opening output file", OutImageName); + goto Finish; + } for (Index = 0; Index < InputFileNum; Index ++) { fpIn = fopen (InputFileName [Index], "rb"); if (!fpIn) { @@ -2306,7 +2663,7 @@ Returns: // if (OutImageType == FW_MCI_IMAGE) { fpIn = fopen (mInImageName, "r"); - if (!fpIn) { + if (fpIn == NULL) { Error (NULL, 0, 0001, "Error opening file", mInImageName); goto Finish; } @@ -2400,63 +2757,21 @@ Returns: // // Open the output file and write the buffer contents // - if (fpOut != NULL) { - if (fwrite (FileBuffer, FileLength, 1, fpOut) != 1) { - Error (NULL, 0, 0002, "Error writing file", OutImageName); - goto Finish; - } - } - - if (ReplaceFlag) { - fpInOut = fopen (mInImageName, "wb"); - if (fpInOut != NULL) { - Error (NULL, 0, 0001, "Error opening file", mInImageName); - goto Finish; - } - if (fwrite (FileBuffer, FileLength, 1, fpInOut) != 1) { - Error (NULL, 0, 0002, "Error writing file", mInImageName); - goto Finish; - } - } VerboseMsg ("the size of output file is %u bytes", (unsigned) FileLength); - // - // Convert Mci.TXT to Mci.bin file successfully - // - goto Finish; + goto WriteFile; } // // Open input file and read file data into file buffer. // - fpIn = fopen (mInImageName, "rb"); - if (!fpIn) { - Error (NULL, 0, 0001, "Error opening file", mInImageName); - goto Finish; - } - - FileLength = _filelength (fileno (fpIn)); + FileLength = InputFileLength; FileBuffer = malloc (FileLength); if (FileBuffer == NULL) { Error (NULL, 0, 4001, "Resource", "memory cannot be allocated!"); - fclose (fpIn); goto Finish; } + memcpy (FileBuffer, InputFileBuffer, InputFileLength); - fread (FileBuffer, 1, FileLength, fpIn); - fclose (fpIn); - - DebugMsg (NULL, 0, 9, "input file info", "the input file size is %u bytes", (unsigned) FileLength); - - // - // Replace file - // - if (ReplaceFlag) { - fpInOut = fopen (mInImageName, "wb"); - if (!fpInOut) { - Error (NULL, 0, 0001, "Error opening file", mInImageName); - goto Finish; - } - } // // Dump TeImage Header into output file. // @@ -2466,6 +2781,26 @@ Returns: Error (NULL, 0, 3000, "Invalid", "TE header signature of file %s is not correct.", mInImageName); goto Finish; } + // + // Open the output file handle. + // + if (ReplaceFlag) { + fpInOut = fopen (mInImageName, "wb"); + if (fpInOut == NULL) { + Error (NULL, 0, 0001, "Error opening file", mInImageName); + goto Finish; + } + } else { + if (OutImageName != NULL) { + fpOut = fopen (OutImageName, "wb"); + } else { + fpOut = stdout; + } + if (fpOut == NULL) { + Error (NULL, 0, 0001, "Error opening output file", OutImageName); + goto Finish; + } + } if (fpInOut != NULL) { fprintf (fpInOut, "Dump of file %s\n\n", mInImageName); fprintf (fpInOut, "TE IMAGE HEADER VALUES\n"); @@ -2479,7 +2814,6 @@ Returns: fprintf (fpInOut, "%17X [%8X] RVA [size] of Base Relocation Directory\n", (unsigned) TEImageHeader.DataDirectory[0].VirtualAddress, (unsigned) TEImageHeader.DataDirectory[0].Size); fprintf (fpInOut, "%17X [%8X] RVA [size] of Debug Directory\n", (unsigned) TEImageHeader.DataDirectory[1].VirtualAddress, (unsigned) TEImageHeader.DataDirectory[1].Size); } - if (fpOut != NULL) { fprintf (fpOut, "Dump of file %s\n\n", mInImageName); fprintf (fpOut, "TE IMAGE HEADER VALUES\n"); @@ -2514,36 +2848,36 @@ Returns: } } else { if (stricmp (ModuleType, "BASE") == 0 || - stricmp (ModuleType, "SEC") == 0 || - stricmp (ModuleType, "SECURITY_CORE") == 0 || - stricmp (ModuleType, "PEI_CORE") == 0 || - stricmp (ModuleType, "PEIM") == 0 || - stricmp (ModuleType, "COMBINED_PEIM_DRIVER") == 0 || - stricmp (ModuleType, "PIC_PEIM") == 0 || - stricmp (ModuleType, "RELOCATABLE_PEIM") == 0 || - stricmp (ModuleType, "DXE_CORE") == 0 || - stricmp (ModuleType, "BS_DRIVER") == 0 || - stricmp (ModuleType, "DXE_DRIVER") == 0 || - stricmp (ModuleType, "DXE_SMM_DRIVER") == 0 || - stricmp (ModuleType, "UEFI_DRIVER") == 0 || - stricmp (ModuleType, "SMM_CORE") == 0) { - Type = EFI_IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER; - VerboseMsg ("Efi Image subsystem type is efi boot service driver."); + stricmp (ModuleType, "SEC") == 0 || + stricmp (ModuleType, "SECURITY_CORE") == 0 || + stricmp (ModuleType, "PEI_CORE") == 0 || + stricmp (ModuleType, "PEIM") == 0 || + stricmp (ModuleType, "COMBINED_PEIM_DRIVER") == 0 || + stricmp (ModuleType, "PIC_PEIM") == 0 || + stricmp (ModuleType, "RELOCATABLE_PEIM") == 0 || + stricmp (ModuleType, "DXE_CORE") == 0 || + stricmp (ModuleType, "BS_DRIVER") == 0 || + stricmp (ModuleType, "DXE_DRIVER") == 0 || + stricmp (ModuleType, "DXE_SMM_DRIVER") == 0 || + stricmp (ModuleType, "UEFI_DRIVER") == 0 || + stricmp (ModuleType, "SMM_CORE") == 0) { + Type = EFI_IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER; + VerboseMsg ("Efi Image subsystem type is efi boot service driver."); } else if (stricmp (ModuleType, "UEFI_APPLICATION") == 0 || - stricmp (ModuleType, "APPLICATION") == 0) { - Type = EFI_IMAGE_SUBSYSTEM_EFI_APPLICATION; - VerboseMsg ("Efi Image subsystem type is efi application."); + stricmp (ModuleType, "APPLICATION") == 0) { + Type = EFI_IMAGE_SUBSYSTEM_EFI_APPLICATION; + VerboseMsg ("Efi Image subsystem type is efi application."); } else if (stricmp (ModuleType, "DXE_RUNTIME_DRIVER") == 0 || - stricmp (ModuleType, "RT_DRIVER") == 0) { - Type = EFI_IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER; - VerboseMsg ("Efi Image subsystem type is efi runtime driver."); + stricmp (ModuleType, "RT_DRIVER") == 0) { + Type = EFI_IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER; + VerboseMsg ("Efi Image subsystem type is efi runtime driver."); } else if (stricmp (ModuleType, "DXE_SAL_DRIVER") == 0 || - stricmp (ModuleType, "SAL_RT_DRIVER") == 0) { - Type = EFI_IMAGE_SUBSYSTEM_SAL_RUNTIME_DRIVER; - VerboseMsg ("Efi Image subsystem type is efi sal runtime driver."); + stricmp (ModuleType, "SAL_RT_DRIVER") == 0) { + Type = EFI_IMAGE_SUBSYSTEM_SAL_RUNTIME_DRIVER; + VerboseMsg ("Efi Image subsystem type is efi sal runtime driver."); } else { Error (NULL, 0, 1003, "Invalid option value", "EFI_FILETYPE = %s", ModuleType); @@ -2559,7 +2893,7 @@ Returns: VerboseMsg ("Convert the input ELF Image to Pe Image"); ConvertElf(&FileBuffer, &FileLength); } - + // // Make sure File Offsets and Virtual Offsets are the same in the image so it is XIP // XIP == eXecute In Place @@ -2583,15 +2917,15 @@ Returns: // if ((SectionHeader->PointerToRawData + SectionHeader->SizeOfRawData) == (FileLength + TeHdr->StrippedSize - sizeof (EFI_TE_IMAGE_HEADER))) { - // - // Remove .reloc section and update TeImage Header - // - FileLength = FileLength - SectionHeader->SizeOfRawData; - SectionHeader->SizeOfRawData = 0; - SectionHeader->Misc.VirtualSize = 0; - TeHdr->DataDirectory[EFI_TE_IMAGE_DIRECTORY_ENTRY_BASERELOC].VirtualAddress = 0; - TeHdr->DataDirectory[EFI_TE_IMAGE_DIRECTORY_ENTRY_BASERELOC].Size = 0; - break; + // + // Remove .reloc section and update TeImage Header + // + FileLength = FileLength - SectionHeader->SizeOfRawData; + SectionHeader->SizeOfRawData = 0; + SectionHeader->Misc.VirtualSize = 0; + TeHdr->DataDirectory[EFI_TE_IMAGE_DIRECTORY_ENTRY_BASERELOC].VirtualAddress = 0; + TeHdr->DataDirectory[EFI_TE_IMAGE_DIRECTORY_ENTRY_BASERELOC].Size = 0; + break; } } } @@ -2677,13 +3011,50 @@ Returns: goto Finish; } } - + if (PeHdr->Pe32.FileHeader.Machine == IMAGE_FILE_MACHINE_ARM) { // Some tools kick out IMAGE_FILE_MACHINE_ARM (0x1c0) vs IMAGE_FILE_MACHINE_ARMT (0x1c2) // so patch back to the offical UEFI value. PeHdr->Pe32.FileHeader.Machine = IMAGE_FILE_MACHINE_ARMT; } + // + // Set new base address into image + // + if (OutImageType == FW_REBASE_IMAGE || OutImageType == FW_SET_ADDRESS_IMAGE) { + if ((PeHdr->Pe32.OptionalHeader.Magic == EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC) && (PeHdr->Pe32.FileHeader.Machine != IMAGE_FILE_MACHINE_IA64)) { + if (NewBaseAddress >= 0x100000000ULL) { + Error (NULL, 0, 3000, "Invalid", "New base address is larger than 4G for 32bit PE image"); + goto Finish; + } + } + + if (NegativeAddr) { + // + // Set Base Address to a negative value. + // + NewBaseAddress = (UINT64) (0 - NewBaseAddress); + } + if (OutImageType == FW_REBASE_IMAGE) { + Status = RebaseImage (mInImageName, FileBuffer, NewBaseAddress); + } else { + Status = SetAddressToSectionHeader (mInImageName, FileBuffer, NewBaseAddress); + } + if (EFI_ERROR (Status)) { + if (NegativeAddr) { + Error (NULL, 0, 3000, "Invalid", "Rebase/Set Image %s to Base address -0x%llx can't success", mInImageName, 0 - NewBaseAddress); + } else { + Error (NULL, 0, 3000, "Invalid", "Rebase/Set Image %s to Base address 0x%llx can't success", mInImageName, NewBaseAddress); + } + goto Finish; + } + + // + // Write file + // + goto WriteFile; + } + // // Extract bin data from Pe image. // @@ -2695,14 +3066,10 @@ Returns: // // Output bin data from exe file // - if (fpOut != NULL) { - fwrite (FileBuffer + PeHdr->Pe32.OptionalHeader.SizeOfHeaders, 1, FileLength - PeHdr->Pe32.OptionalHeader.SizeOfHeaders, fpOut); - } - if (fpInOut != NULL) { - fwrite (FileBuffer + PeHdr->Pe32.OptionalHeader.SizeOfHeaders, 1, FileLength - PeHdr->Pe32.OptionalHeader.SizeOfHeaders, fpInOut); - } - VerboseMsg ("the size of output file is %u bytes", (unsigned) (FileLength - PeHdr->Pe32.OptionalHeader.SizeOfHeaders)); - goto Finish; + FileLength = FileLength - PeHdr->Pe32.OptionalHeader.SizeOfHeaders; + memcpy (FileBuffer, FileBuffer + PeHdr->Pe32.OptionalHeader.SizeOfHeaders, FileLength); + VerboseMsg ("the size of output file is %u bytes", (unsigned) FileLength); + goto WriteFile; } // @@ -2715,14 +3082,11 @@ Returns: goto Finish; } - if (fpOut != NULL) { - fwrite (FileBuffer, 1, FileLength, fpOut); - } - if (fpInOut != NULL) { - fwrite (FileBuffer, 1, FileLength, fpInOut); - } + // + // Write the updated Image + // VerboseMsg ("the size of output file is %u bytes", (unsigned) FileLength); - goto Finish; + goto WriteFile; } // @@ -2734,14 +3098,11 @@ Returns: goto Finish; } - if (fpOut != NULL) { - fwrite (FileBuffer, 1, FileLength, fpOut); - } - if (fpInOut != NULL) { - fwrite (FileBuffer, 1, FileLength, fpInOut); - } + // + // Write the updated Image + // VerboseMsg ("the size of output file is %u bytes", (unsigned) FileLength); - goto Finish; + goto WriteFile; } // @@ -2768,14 +3129,9 @@ Returns: // // Output Apci data to file // - if (fpOut != NULL) { - fwrite (FileBuffer + SectionHeader->PointerToRawData, 1, FileLength, fpOut); - } - if (fpInOut != NULL) { - fwrite (FileBuffer + SectionHeader->PointerToRawData, 1, FileLength, fpInOut); - } + memcpy (FileBuffer, FileBuffer + SectionHeader->PointerToRawData, FileLength); VerboseMsg ("the size of output file is %u bytes", (unsigned) FileLength); - goto Finish; + goto WriteFile; } } Error (NULL, 0, 3000, "Invalid", "failed to get ACPI table from %s.", mInImageName); @@ -2789,7 +3145,7 @@ Returns: memset (DosHdr, 0, sizeof (EFI_IMAGE_DOS_HEADER)); DosHdr->e_magic = BackupDosHdr.e_magic; DosHdr->e_lfanew = BackupDosHdr.e_lfanew; - + for (Index = sizeof (EFI_IMAGE_DOS_HEADER); Index < (UINT32 ) DosHdr->e_lfanew; Index++) { FileBuffer[Index] = (UINT8) DosHdr->e_cp; } @@ -2804,7 +3160,7 @@ Returns: TEImageHeader.NumberOfSections = (UINT8) PeHdr->Pe32.FileHeader.NumberOfSections; TEImageHeader.StrippedSize = (UINT16) ((UINTN) ((UINT8 *) &(PeHdr->Pe32.OptionalHeader) + PeHdr->Pe32.FileHeader.SizeOfOptionalHeader) - (UINTN) FileBuffer); TEImageHeader.Subsystem = (UINT8) Type; - + // // Patch the PE header // @@ -2845,28 +3201,28 @@ Returns: // Zero .pdata section data. // if (!KeepExceptionTableFlag && Optional32->NumberOfRvaAndSizes > EFI_IMAGE_DIRECTORY_ENTRY_EXCEPTION && - Optional32->DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_EXCEPTION].VirtualAddress != 0 && - Optional32->DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_EXCEPTION].Size != 0) { - SectionHeader = (EFI_IMAGE_SECTION_HEADER *) ((UINT8 *) &(PeHdr->Pe32.OptionalHeader) + PeHdr->Pe32.FileHeader.SizeOfOptionalHeader); - for (Index = 0; Index < PeHdr->Pe32.FileHeader.NumberOfSections; Index++, SectionHeader++) { - if (SectionHeader->VirtualAddress == Optional32->DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_EXCEPTION].VirtualAddress) { - // - // Zero .pdata Section data - // - memset (FileBuffer + SectionHeader->PointerToRawData, 0, SectionHeader->SizeOfRawData); - // - // Zero .pdata Section header name - // - memset (SectionHeader->Name, 0, sizeof (SectionHeader->Name)); - // - // Zero Execption Table - // - Optional32->DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_EXCEPTION].VirtualAddress = 0; - Optional32->DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_EXCEPTION].Size = 0; - DebugMsg (NULL, 0, 9, "Zero the .pdata section for PE image", NULL); - break; + Optional32->DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_EXCEPTION].VirtualAddress != 0 && + Optional32->DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_EXCEPTION].Size != 0) { + SectionHeader = (EFI_IMAGE_SECTION_HEADER *) ((UINT8 *) &(PeHdr->Pe32.OptionalHeader) + PeHdr->Pe32.FileHeader.SizeOfOptionalHeader); + for (Index = 0; Index < PeHdr->Pe32.FileHeader.NumberOfSections; Index++, SectionHeader++) { + if (SectionHeader->VirtualAddress == Optional32->DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_EXCEPTION].VirtualAddress) { + // + // Zero .pdata Section data + // + memset (FileBuffer + SectionHeader->PointerToRawData, 0, SectionHeader->SizeOfRawData); + // + // Zero .pdata Section header name + // + memset (SectionHeader->Name, 0, sizeof (SectionHeader->Name)); + // + // Zero Execption Table + // + Optional32->DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_EXCEPTION].VirtualAddress = 0; + Optional32->DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_EXCEPTION].Size = 0; + DebugMsg (NULL, 0, 9, "Zero the .pdata section for PE image", NULL); + break; + } } - } } // @@ -2941,40 +3297,40 @@ Returns: // if ((!KeepExceptionTableFlag && PeHdr->Pe32.FileHeader.Machine == IMAGE_FILE_MACHINE_X64) || PeHdr->Pe32.FileHeader.Machine == IMAGE_FILE_MACHINE_IA64) { if (Optional64->NumberOfRvaAndSizes > EFI_IMAGE_DIRECTORY_ENTRY_EXCEPTION && - Optional64->DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_EXCEPTION].VirtualAddress != 0 && - Optional64->DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_EXCEPTION].Size != 0) { - SectionHeader = (EFI_IMAGE_SECTION_HEADER *) ((UINT8 *) &(PeHdr->Pe32.OptionalHeader) + PeHdr->Pe32.FileHeader.SizeOfOptionalHeader); - for (Index = 0; Index < PeHdr->Pe32.FileHeader.NumberOfSections; Index++, SectionHeader++) { - if (SectionHeader->VirtualAddress == Optional64->DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_EXCEPTION].VirtualAddress) { - // - // Zero .pdata Section header name - // - memset (SectionHeader->Name, 0, sizeof (SectionHeader->Name)); - - RuntimeFunction = (RUNTIME_FUNCTION *)(FileBuffer + SectionHeader->PointerToRawData); - for (Index1 = 0; Index1 < Optional64->DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_EXCEPTION].Size / sizeof (RUNTIME_FUNCTION); Index1++, RuntimeFunction++) { - SectionHeader = (EFI_IMAGE_SECTION_HEADER *) ((UINT8 *) &(PeHdr->Pe32.OptionalHeader) + PeHdr->Pe32.FileHeader.SizeOfOptionalHeader); - for (Index2 = 0; Index2 < PeHdr->Pe32.FileHeader.NumberOfSections; Index2++, SectionHeader++) { - if (RuntimeFunction->UnwindInfoAddress >= SectionHeader->VirtualAddress && RuntimeFunction->UnwindInfoAddress < (SectionHeader->VirtualAddress + SectionHeader->SizeOfRawData)) { - UnwindInfo = (UNWIND_INFO *)(FileBuffer + SectionHeader->PointerToRawData + (RuntimeFunction->UnwindInfoAddress - SectionHeader->VirtualAddress)); - if (UnwindInfo->Version == 1) { - memset (UnwindInfo + 1, 0, UnwindInfo->CountOfUnwindCodes * sizeof (UINT16)); - memset (UnwindInfo, 0, sizeof (UNWIND_INFO)); + Optional64->DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_EXCEPTION].VirtualAddress != 0 && + Optional64->DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_EXCEPTION].Size != 0) { + SectionHeader = (EFI_IMAGE_SECTION_HEADER *) ((UINT8 *) &(PeHdr->Pe32.OptionalHeader) + PeHdr->Pe32.FileHeader.SizeOfOptionalHeader); + for (Index = 0; Index < PeHdr->Pe32.FileHeader.NumberOfSections; Index++, SectionHeader++) { + if (SectionHeader->VirtualAddress == Optional64->DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_EXCEPTION].VirtualAddress) { + // + // Zero .pdata Section header name + // + memset (SectionHeader->Name, 0, sizeof (SectionHeader->Name)); + + RuntimeFunction = (RUNTIME_FUNCTION *)(FileBuffer + SectionHeader->PointerToRawData); + for (Index1 = 0; Index1 < Optional64->DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_EXCEPTION].Size / sizeof (RUNTIME_FUNCTION); Index1++, RuntimeFunction++) { + SectionHeader = (EFI_IMAGE_SECTION_HEADER *) ((UINT8 *) &(PeHdr->Pe32.OptionalHeader) + PeHdr->Pe32.FileHeader.SizeOfOptionalHeader); + for (Index2 = 0; Index2 < PeHdr->Pe32.FileHeader.NumberOfSections; Index2++, SectionHeader++) { + if (RuntimeFunction->UnwindInfoAddress >= SectionHeader->VirtualAddress && RuntimeFunction->UnwindInfoAddress < (SectionHeader->VirtualAddress + SectionHeader->SizeOfRawData)) { + UnwindInfo = (UNWIND_INFO *)(FileBuffer + SectionHeader->PointerToRawData + (RuntimeFunction->UnwindInfoAddress - SectionHeader->VirtualAddress)); + if (UnwindInfo->Version == 1) { + memset (UnwindInfo + 1, 0, UnwindInfo->CountOfUnwindCodes * sizeof (UINT16)); + memset (UnwindInfo, 0, sizeof (UNWIND_INFO)); + } + break; } - break; } + memset (RuntimeFunction, 0, sizeof (RUNTIME_FUNCTION)); } - memset (RuntimeFunction, 0, sizeof (RUNTIME_FUNCTION)); + // + // Zero Execption Table + // + Optional64->DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_EXCEPTION].Size = 0; + Optional64->DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_EXCEPTION].VirtualAddress = 0; + DebugMsg (NULL, 0, 9, "Zero the .pdata section if the machine type is X64 for PE32+ image", NULL); + break; } - // - // Zero Execption Table - // - Optional64->DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_EXCEPTION].Size = 0; - Optional64->DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_EXCEPTION].VirtualAddress = 0; - DebugMsg (NULL, 0, 9, "Zero the .pdata section if the machine type is X64 for PE32+ image", NULL); - break; } - } } } @@ -3017,19 +3373,19 @@ Returns: Error (NULL, 0, 3000, "Invalid", "Magic 0x%x of PeImage %s is unknown.", PeHdr->Pe32.OptionalHeader.Magic, mInImageName); goto Finish; } - + if (((PeHdr->Pe32.FileHeader.Characteristics & EFI_IMAGE_FILE_RELOCS_STRIPPED) == 0) && \ (TEImageHeader.DataDirectory[EFI_TE_IMAGE_DIRECTORY_ENTRY_BASERELOC].VirtualAddress == 0) && \ (TEImageHeader.DataDirectory[EFI_TE_IMAGE_DIRECTORY_ENTRY_BASERELOC].Size == 0)) { - // - // PeImage can be loaded into memory, but it has no relocation section. - // Fix TeImage Header to set VA of relocation data directory to not zero, the size is still zero. - // - if (Optional32 != NULL) { - TEImageHeader.DataDirectory[EFI_TE_IMAGE_DIRECTORY_ENTRY_BASERELOC].VirtualAddress = Optional32->SizeOfImage - sizeof (EFI_IMAGE_BASE_RELOCATION); - } else if (Optional64 != NULL) { - TEImageHeader.DataDirectory[EFI_TE_IMAGE_DIRECTORY_ENTRY_BASERELOC].VirtualAddress = Optional64->SizeOfImage - sizeof (EFI_IMAGE_BASE_RELOCATION); - } + // + // PeImage can be loaded into memory, but it has no relocation section. + // Fix TeImage Header to set VA of relocation data directory to not zero, the size is still zero. + // + if (Optional32 != NULL) { + TEImageHeader.DataDirectory[EFI_TE_IMAGE_DIRECTORY_ENTRY_BASERELOC].VirtualAddress = Optional32->SizeOfImage - sizeof (EFI_IMAGE_BASE_RELOCATION); + } else if (Optional64 != NULL) { + TEImageHeader.DataDirectory[EFI_TE_IMAGE_DIRECTORY_ENTRY_BASERELOC].VirtualAddress = Optional64->SizeOfImage - sizeof (EFI_IMAGE_BASE_RELOCATION); + } } // @@ -3102,40 +3458,54 @@ Returns: } DebugMsg (NULL, 0, 9, "TeImage Header Info", "Machine type is %X, Number of sections is %X, Stripped size is %X, EntryPoint is %X, BaseOfCode is %X, ImageBase is %llX", - TEImageHeader.Machine, TEImageHeader.NumberOfSections, TEImageHeader.StrippedSize, (unsigned) TEImageHeader.AddressOfEntryPoint, (unsigned) TEImageHeader.BaseOfCode, (unsigned long long) TEImageHeader.ImageBase); + TEImageHeader.Machine, TEImageHeader.NumberOfSections, TEImageHeader.StrippedSize, (unsigned) TEImageHeader.AddressOfEntryPoint, (unsigned) TEImageHeader.BaseOfCode, (unsigned long long) TEImageHeader.ImageBase); // // Update Image to TeImage // - if (fpOut != NULL) { - fwrite (&TEImageHeader, 1, sizeof (EFI_TE_IMAGE_HEADER), fpOut); - fwrite (FileBuffer + TEImageHeader.StrippedSize, 1, FileLength - TEImageHeader.StrippedSize, fpOut); - } - if (fpInOut != NULL) { - fwrite (&TEImageHeader, 1, sizeof (EFI_TE_IMAGE_HEADER), fpInOut); - fwrite (FileBuffer + TEImageHeader.StrippedSize, 1, FileLength - TEImageHeader.StrippedSize, fpInOut); - } - VerboseMsg ("the size of output file is %u bytes", (unsigned) (FileLength - TEImageHeader.StrippedSize)); - goto Finish; + FileLength = FileLength - TEImageHeader.StrippedSize; + memcpy (FileBuffer + sizeof (EFI_TE_IMAGE_HEADER), FileBuffer + TEImageHeader.StrippedSize, FileLength); + FileLength = FileLength + sizeof (EFI_TE_IMAGE_HEADER); + memcpy (FileBuffer, &TEImageHeader, sizeof (EFI_TE_IMAGE_HEADER)); + VerboseMsg ("the size of output file is %u bytes", (unsigned) (FileLength)); } + WriteFile: // - // Update Image to EfiImage + // Update Image to EfiImage or TE image // - if (fpOut != NULL) { - fwrite (FileBuffer, 1, FileLength, fpOut); - } - if (fpInOut != NULL) { - fwrite (FileBuffer, 1, FileLength, fpInOut); + if (ReplaceFlag) { + if ((FileLength != InputFileLength) || (memcmp (FileBuffer, InputFileBuffer, FileLength) != 0)) { + // + // Update File when File is changed. + // + fpInOut = fopen (mInImageName, "wb"); + if (fpInOut == NULL) { + Error (NULL, 0, 0001, "Error opening file", mInImageName); + goto Finish; + } + fwrite (FileBuffer, 1, FileLength, fpInOut); + VerboseMsg ("the size of output file is %u bytes", (unsigned) FileLength); + } + } else { + if ((FileLength != OutputFileLength) || (memcmp (FileBuffer, OutputFileBuffer, FileLength) != 0)) { + fpOut = fopen (OutImageName, "wb"); + if (fpOut == NULL) { + Error (NULL, 0, 0001, "Error opening output file", OutImageName); + goto Finish; + } + fwrite (FileBuffer, 1, FileLength, fpOut); + VerboseMsg ("the size of output file is %u bytes", (unsigned) FileLength); + } } - VerboseMsg ("the size of output file is %u bytes", (unsigned) FileLength); + mImageSize = FileLength; Finish: if (fpInOut != NULL) { if (GetUtilityStatus () != STATUS_SUCCESS) { // - // when file updates failed, original file is still recoveried. + // when file updates failed, original file is still recovered. // - fwrite (FileBuffer, 1, FileLength, fpInOut); + fwrite (InputFileBuffer, 1, InputFileLength, fpInOut); } // // Write converted data into fpInOut file and close input file. @@ -3163,11 +3533,38 @@ Finish: fpOut = fopen (OutImageName, "wb"); fwrite (OutputFileBuffer, 1, OutputFileLength, fpOut); fclose (fpOut); - free (OutputFileBuffer); } } } + + if (InputFileBuffer != NULL) { + free (InputFileBuffer); + } + + if (OutputFileBuffer != NULL) { + free (OutputFileBuffer); + } + // + // Write module size and time stamp to report file. + // + if (OutImageName != NULL) { + FileLen = strlen (OutImageName); + } + if (FileLen >= 4 && strcmp (OutImageName + (FileLen - 4), ".efi") == 0) { + ReportFileName = (CHAR8 *) malloc (FileLen + 1); + if (ReportFileName != NULL) { + strcpy (ReportFileName, OutImageName); + strcpy (ReportFileName + (FileLen - 4), ".txt"); + ReportFile = fopen (ReportFileName, "w+"); + if (ReportFile != NULL) { + fprintf (ReportFile, "MODULE_SIZE = %u\n", (unsigned) mImageSize); + fprintf (ReportFile, "TIME_STAMP = %u\n", (unsigned) mImageTimeStamp); + fclose(ReportFile); + } + free (ReportFileName); + } + } VerboseMsg ("%s tool done with return code is 0x%x.", UTILITY_NAME, GetUtilityStatus ()); return GetUtilityStatus (); @@ -3302,7 +3699,7 @@ Returns: //Zero Debug Data and TimeStamp // FileHdr->TimeDateStamp = 0; - + mImageTimeStamp = 0; if (ExportDirectoryEntryFileOffset != 0) { NewTimeStamp = (UINT32 *) (FileBuffer + ExportDirectoryEntryFileOffset + sizeof (UINT32)); *NewTimeStamp = 0; @@ -3316,6 +3713,7 @@ Returns: if (DebugDirectoryEntryFileOffset != 0) { DebugEntry = (EFI_IMAGE_DEBUG_DIRECTORY_ENTRY *) (FileBuffer + DebugDirectoryEntryFileOffset); DebugEntry->TimeDateStamp = 0; + mImageTimeStamp = 0; if (ZeroDebugFlag) { memset (FileBuffer + DebugEntry->FileOffset, 0, DebugEntry->SizeOfData); memset (DebugEntry, 0, sizeof (EFI_IMAGE_DEBUG_DIRECTORY_ENTRY)); @@ -3542,7 +3940,7 @@ Returns: // Set new stamp // FileHdr->TimeDateStamp = (UINT32) newtime; - + mImageTimeStamp = (UINT32) newtime; if (ExportDirectoryEntryRva != 0) { NewTimeStamp = (UINT32 *) (FileBuffer + ExportDirectoryEntryFileOffset + sizeof (UINT32)); *NewTimeStamp = (UINT32) newtime; diff --git a/BaseTools/Source/C/GenFw/elf32.h b/BaseTools/Source/C/GenFw/elf32.h index 9e47123533..0edba15b81 100644 --- a/BaseTools/Source/C/GenFw/elf32.h +++ b/BaseTools/Source/C/GenFw/elf32.h @@ -1,3 +1,17 @@ +/** @file +Ported ELF include files from FreeBSD + +Copyright (c) 2009 - 2010, Apple, Inc. All rights reserved. +All rights reserved. This program and the accompanying materials +are licensed and made available under the terms and conditions of the BSD License +which accompanies this distribution. The full text of the license may be found at +http://opensource.org/licenses/bsd-license.php + +THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + + +**/ /*- * Copyright (c) 1996-1998 John D. Polstra. * All rights reserved. diff --git a/BaseTools/Source/C/GenFw/elf64.h b/BaseTools/Source/C/GenFw/elf64.h index 9960888940..ba8e85fb12 100644 --- a/BaseTools/Source/C/GenFw/elf64.h +++ b/BaseTools/Source/C/GenFw/elf64.h @@ -1,3 +1,16 @@ +/** @file +Ported ELF include files from FreeBSD + +Copyright (c) 2009 - 2010, Apple, Inc. All rights reserved. +All rights reserved. This program and the accompanying materials +are licensed and made available under the terms and conditions of the BSD License +which accompanies this distribution. The full text of the license may be found at +http://opensource.org/licenses/bsd-license.php + +THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ /*- * Copyright (c) 1996-1998 John D. Polstra. * All rights reserved. diff --git a/BaseTools/Source/C/GenFw/elf_common.h b/BaseTools/Source/C/GenFw/elf_common.h index 471c2650a1..1cd3f53907 100644 --- a/BaseTools/Source/C/GenFw/elf_common.h +++ b/BaseTools/Source/C/GenFw/elf_common.h @@ -1,3 +1,17 @@ +/** @file +Ported ELF include files from FreeBSD + +Copyright (c) 2009 - 2010, Apple, Inc. All rights reserved. +All rights reserved. This program and the accompanying materials +are licensed and made available under the terms and conditions of the BSD License +which accompanies this distribution. The full text of the license may be found at +http://opensource.org/licenses/bsd-license.php + +THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + + +**/ /*- * Copyright (c) 1998 John D. Polstra. * All rights reserved. diff --git a/BaseTools/Source/C/GenPage/GenPage.c b/BaseTools/Source/C/GenPage/GenPage.c index dac55889d5..abcb5e827c 100644 --- a/BaseTools/Source/C/GenPage/GenPage.c +++ b/BaseTools/Source/C/GenPage/GenPage.c @@ -1,6 +1,6 @@ /** @file -Copyright 2006 - 2008, Intel Corporation +Copyright 2006 - 2010, Intel Corporation All rights reserved. This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this distribution. The full text of the license may be found at @@ -92,7 +92,7 @@ Returns: --*/ { printf ("%s v%d.%d -Utility to generate the EfiLoader image containing page table.\n", UTILITY_NAME, UTILITY_MAJOR_VERSION, UTILITY_MINOR_VERSION); - printf ("Copyright (c) 2008 - 2009 Intel Corporation. All rights reserved.\n"); + printf ("Copyright (c) 2008 - 2010 Intel Corporation. All rights reserved.\n"); } VOID diff --git a/BaseTools/Source/C/GenSec/GenSec.c b/BaseTools/Source/C/GenSec/GenSec.c index 9a1d0ca48a..8c4f8743fd 100644 --- a/BaseTools/Source/C/GenSec/GenSec.c +++ b/BaseTools/Source/C/GenSec/GenSec.c @@ -1,6 +1,6 @@ /** @file -Copyright (c) 2004 - 2008, Intel Corporation +Copyright (c) 2004 - 2010, Intel Corporation All rights reserved. This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this distribution. The full text of the license may be found at @@ -27,6 +27,7 @@ Abstract: #include #include #include +#include #include "CommonLib.h" #include "Compress.h" @@ -80,6 +81,11 @@ STATIC CHAR8 *mCompressionTypeName[] = { "PI_NONE", "PI_STD" }; #define EFI_GUIDED_SECTION_NONE 0x80 STATIC CHAR8 *mGUIDedSectionAttribue[] = { "NONE", "PROCESSING_REQUIRED", "AUTH_STATUS_VALID"}; +STATIC CHAR8 *mAlignName[] = { + "1", "2", "4", "8", "16", "32", "64", "128", "256", "512", + "1K", "2K", "4K", "8K", "16K", "32K", "64K" +}; + // // Crc32 GUID section related definitions. // @@ -144,7 +150,7 @@ Returns: // // Copyright declaration // - fprintf (stdout, "Copyright (c) 2007, Intel Corporation. All rights reserved.\n\n"); + fprintf (stdout, "Copyright (c) 2007 - 2010, Intel Corporation. All rights reserved.\n\n"); // // Details Option @@ -180,6 +186,10 @@ Returns: fprintf (stdout, " -j Number, --buildnumber Number\n\ Number is an integer value between 0000 and 9999\n\ used in Ver section.\n"); + fprintf (stdout, " --sectionalign SectionAlign\n\ + SectionAlign points to section alignment, which support\n\ + the alignment scope 1~64K. It is specified in same\n\ + order that the section file is input.\n"); fprintf (stdout, " -v, --verbose Turn on verbose output with informational messages.\n"); fprintf (stdout, " -q, --quiet Disable all messages except key message and fatal error\n"); fprintf (stdout, " -d, --debug level Enable debug messages, at input debug level.\n"); @@ -329,9 +339,50 @@ Done: return Status; } +STATIC +EFI_STATUS +StringtoAlignment ( + IN CHAR8 *AlignBuffer, + OUT UINT32 *AlignNumber + ) +/*++ + +Routine Description: + + Converts Align String to align value (1~64K). + +Arguments: + + AlignBuffer - Pointer to Align string. + AlignNumber - Pointer to Align value. + +Returns: + + EFI_SUCCESS Successfully convert align string to align value. + EFI_INVALID_PARAMETER Align string is invalid or align value is not in scope. + +--*/ +{ + UINT32 Index = 0; + // + // Check AlignBuffer + // + if (AlignBuffer == NULL) { + return EFI_INVALID_PARAMETER; + } + for (Index = 0; Index < sizeof (mAlignName) / sizeof (CHAR8 *); Index ++) { + if (stricmp (AlignBuffer, mAlignName [Index]) == 0) { + *AlignNumber = 1 << Index; + return EFI_SUCCESS; + } + } + return EFI_INVALID_PARAMETER; +} + EFI_STATUS GetSectionContents ( CHAR8 **InputFileName, + UINT32 *InputFileAlign, UINT32 InputFileNum, UINT8 *FileBuffer, UINT32 *BufferLength @@ -346,7 +397,9 @@ Routine Description: Arguments: InputFileName - Name of the input file. - + + InputFileAlign - Alignment required by the input file data. + InputFileNum - Number of input files. Should be at least 1. FileBuffer - Output buffer to contain data @@ -362,10 +415,17 @@ Returns: EFI_BUFFER_TOO_SMALL FileBuffer is not enough to contain all file data. --*/ { - UINT32 Size; - UINT32 FileSize; - UINT32 Index; - FILE *InFile; + UINT32 Size; + UINT32 Offset; + UINT32 FileSize; + UINT32 Index; + FILE *InFile; + EFI_COMMON_SECTION_HEADER *SectHeader; + EFI_COMMON_SECTION_HEADER TempSectHeader; + EFI_TE_IMAGE_HEADER TeHeader; + UINT32 TeOffset; + EFI_GUID_DEFINED_SECTION GuidSectHeader; + UINT32 HeaderSize; if (InputFileNum < 1) { Error (NULL, 0, 2000, "Invalid paramter", "must specify at least one input file"); @@ -377,7 +437,9 @@ Returns: return EFI_INVALID_PARAMETER; } - Size = 0; + Size = 0; + Offset = 0; + TeOffset = 0; // // Go through our array of file names and copy their contents // to the output buffer. @@ -406,11 +468,66 @@ Returns: FileSize = ftell (InFile); fseek (InFile, 0, SEEK_SET); DebugMsg (NULL, 0, 9, "Input files", "the input file name is %s and the size is %u bytes", InputFileName[Index], (unsigned) FileSize); + // + // Adjust section buffer when section alignment is required. + // + if (InputFileAlign != NULL) { + // + // Check this section is Te/Pe section, and Calculate the numbers of Te/Pe section. + // + TeOffset = 0; + HeaderSize = sizeof (EFI_COMMON_SECTION_HEADER); + fread (&TempSectHeader, 1, sizeof (TempSectHeader), InFile); + if (TempSectHeader.Type == EFI_SECTION_TE) { + fread (&TeHeader, 1, sizeof (TeHeader), InFile); + if (TeHeader.Signature == EFI_TE_IMAGE_HEADER_SIGNATURE) { + TeOffset = TeHeader.StrippedSize - sizeof (TeHeader); + } + } else if (TempSectHeader.Type == EFI_SECTION_GUID_DEFINED) { + fseek (InFile, 0, SEEK_SET); + fread (&GuidSectHeader, 1, sizeof (GuidSectHeader), InFile); + if ((GuidSectHeader.Attributes & EFI_GUIDED_SECTION_PROCESSING_REQUIRED) == 0) { + HeaderSize = GuidSectHeader.DataOffset; + } + } + + fseek (InFile, 0, SEEK_SET); + + // + // Revert TeOffset to the converse value relative to Alignment + // This is to assure the original PeImage Header at Alignment. + // + if (TeOffset != 0) { + TeOffset = InputFileAlign [Index] - (TeOffset % InputFileAlign [Index]); + TeOffset = TeOffset % InputFileAlign [Index]; + } + + // + // make sure section data meet its alignment requirement by adding one raw pad section. + // + if ((InputFileAlign [Index] != 0) && (((Size + HeaderSize + TeOffset) % InputFileAlign [Index]) != 0)) { + Offset = (Size + sizeof (EFI_COMMON_SECTION_HEADER) + HeaderSize + TeOffset + InputFileAlign [Index] - 1) & ~(InputFileAlign [Index] - 1); + Offset = Offset - Size - HeaderSize - TeOffset; + + if (FileBuffer != NULL && ((Size + Offset) < *BufferLength)) { + memset (FileBuffer + Size, 0, Offset); + SectHeader = (EFI_COMMON_SECTION_HEADER *) (FileBuffer + Size); + SectHeader->Type = EFI_SECTION_RAW; + SectHeader->Size[0] = (UINT8) (Offset & 0xff); + SectHeader->Size[1] = (UINT8) ((Offset & 0xff00) >> 8); + SectHeader->Size[2] = (UINT8) ((Offset & 0xff0000) >> 16); + } + DebugMsg (NULL, 0, 9, "Pad raw section for section data alignment", "Pad Raw section size is %u", (unsigned) Offset); + + Size = Size + Offset; + } + } + // // Now read the contents of the file into the buffer // Buffer must be enough to contain the file content. // - if (FileSize > 0 && FileBuffer != NULL && (Size + FileSize) <= *BufferLength) { + if ((FileSize > 0) && (FileBuffer != NULL) && ((Size + FileSize) <= *BufferLength)) { if (fread (FileBuffer + Size, (size_t) FileSize, 1, InFile) != 1) { Error (NULL, 0, 0004, "Error reading file", InputFileName[Index]); fclose (InFile); @@ -437,6 +554,7 @@ Returns: EFI_STATUS GenSectionCompressionSection ( CHAR8 **InputFileName, + UINT32 *InputFileAlign, UINT32 InputFileNum, UINT8 SectCompSubType, UINT8 **OutFileBuffer @@ -453,7 +571,9 @@ Routine Description: Arguments: InputFileName - Name of the input file. - + + InputFileAlign - Alignment required by the input file data. + InputFileNum - Number of input files. Should be at least 1. SectCompSubType - Specify the compression algorithm requested. @@ -487,6 +607,7 @@ Returns: // Status = GetSectionContents ( InputFileName, + InputFileAlign, InputFileNum, FileBuffer, &InputLength @@ -503,6 +624,7 @@ Returns: // Status = GetSectionContents ( InputFileName, + InputFileAlign, InputFileNum, FileBuffer, &InputLength @@ -524,6 +646,16 @@ Returns: switch (SectCompSubType) { case EFI_NOT_COMPRESSED: CompressedLength = InputLength; + // + // Copy file buffer to the none compressed data. + // + OutputBuffer = malloc (CompressedLength + sizeof (EFI_COMPRESSION_SECTION)); + if (OutputBuffer == NULL) { + free (FileBuffer); + return EFI_OUT_OF_RESOURCES; + } + memcpy (OutputBuffer + sizeof (EFI_COMPRESSION_SECTION), FileBuffer, CompressedLength); + FileBuffer = OutputBuffer; break; case EFI_STANDARD_COMPRESSION: @@ -599,6 +731,7 @@ Returns: EFI_STATUS GenSectionGuidDefinedSection ( CHAR8 **InputFileName, + UINT32 *InputFileAlign, UINT32 InputFileNum, EFI_GUID *VendorGuid, UINT16 DataAttribute, @@ -618,6 +751,8 @@ Arguments: InputFileName - Name of the input file. + InputFileAlign - Alignment required by the input file data. + InputFileNum - Number of input files. Should be at least 1. VendorGuid - Specify vendor guid value. @@ -662,6 +797,7 @@ Returns: // Status = GetSectionContents ( InputFileName, + InputFileAlign, InputFileNum, FileBuffer, &InputLength @@ -678,6 +814,7 @@ Returns: // Status = GetSectionContents ( InputFileName, + InputFileAlign, InputFileNum, FileBuffer + Offset, &InputLength @@ -797,7 +934,11 @@ Returns: UINT8 *OutFileBuffer; EFI_STATUS Status; UINT64 LogLevel; - + UINT32 *InputFileAlign; + UINT32 InputFileAlignNum; + + InputFileAlign = NULL; + InputFileAlignNum = 0; InputFileName = NULL; OutputFileName = NULL; SectionName = NULL; @@ -809,7 +950,7 @@ Returns: InputFileNum = 0; SectType = EFI_SECTION_ALL; SectCompSubType = 0; - SectGuidAttribute = 0; + SectGuidAttribute = EFI_GUIDED_SECTION_NONE; OutFileBuffer = NULL; InputLength = 0; Status = STATUS_SUCCESS; @@ -983,6 +1124,41 @@ Returns: continue; } + // + // Section File alignment requirement + // + if (stricmp (argv[0], "--sectionalign") == 0) { + if (InputFileAlignNum == 0) { + InputFileAlign = (UINT32 *) malloc (MAXIMUM_INPUT_FILE_NUM * sizeof (UINT32)); + if (InputFileAlign == NULL) { + Error (NULL, 0, 4001, "Resource", "memory cannot be allocated!"); + return 1; + } + memset (InputFileAlign, 1, MAXIMUM_INPUT_FILE_NUM * sizeof (UINT32)); + } else if (InputFileAlignNum % MAXIMUM_INPUT_FILE_NUM == 0) { + InputFileAlign = (UINT32 *) realloc ( + InputFileAlign, + (InputFileNum + MAXIMUM_INPUT_FILE_NUM) * sizeof (UINT32) + ); + + if (InputFileAlign == NULL) { + Error (NULL, 0, 4001, "Resource", "memory cannot be allocated!"); + return 1; + } + memset (&(InputFileAlign[InputFileNum]), 1, (MAXIMUM_INPUT_FILE_NUM * sizeof (UINT32))); + } + + Status = StringtoAlignment (argv[1], &(InputFileAlign[InputFileAlignNum])); + if (EFI_ERROR (Status)) { + Error (NULL, 0, 1003, "Invalid option value", "%s = %s", argv[0], argv[1]); + goto Finish; + } + argc -= 2; + argv += 2; + InputFileAlignNum ++; + continue; + } + // // Get Input file name // @@ -992,7 +1168,6 @@ Returns: Error (NULL, 0, 4001, "Resource", "memory cannot be allcoated"); return 1; } - memset (InputFileName, 0, (MAXIMUM_INPUT_FILE_NUM * sizeof (CHAR8 *))); } else if (InputFileNum % MAXIMUM_INPUT_FILE_NUM == 0) { // @@ -1007,7 +1182,6 @@ Returns: Error (NULL, 0, 4001, "Resource", "memory cannot be allcoated"); return 1; } - memset (&(InputFileName[InputFileNum]), 0, (MAXIMUM_INPUT_FILE_NUM * sizeof (CHAR8 *))); } @@ -1016,6 +1190,11 @@ Returns: argv ++; } + if (InputFileAlignNum > 0 && InputFileAlignNum != InputFileNum) { + Error (NULL, 0, 1003, "Invalid option", "section alignment must be set for each section"); + goto Finish; + } + VerboseMsg ("%s tool start.", UTILITY_NAME); // @@ -1050,14 +1229,11 @@ Returns: memcpy (&VendorGuid, &mEfiCrc32SectionGuid, sizeof (EFI_GUID)); } - if (SectGuidAttribute == 0) { - SectGuidAttribute = EFI_GUIDED_SECTION_PROCESSING_REQUIRED; - } if ((SectGuidAttribute & EFI_GUIDED_SECTION_NONE) != 0) { // // NONE attribute, clear attribute value. // - SectGuidAttribute = 0; + SectGuidAttribute = SectGuidAttribute & ~EFI_GUIDED_SECTION_NONE; } VerboseMsg ("Vendor Guid is %08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X", (unsigned) VendorGuid.Data1, @@ -1161,8 +1337,13 @@ Returns: // switch (SectType) { case EFI_SECTION_COMPRESSION: + if (InputFileAlign != NULL) { + free (InputFileAlign); + InputFileAlign = NULL; + } Status = GenSectionCompressionSection ( InputFileName, + InputFileAlign, InputFileNum, SectCompSubType, &OutFileBuffer @@ -1170,8 +1351,17 @@ Returns: break; case EFI_SECTION_GUID_DEFINED: + if (InputFileAlign != NULL && (CompareGuid (&VendorGuid, &mEfiCrc32SectionGuid) != 0)) { + // + // Only process alignment for the default known CRC32 guided section. + // For the unknown guided section, the alignment is processed when the dummy all section (EFI_SECTION_ALL) is generated. + // + free (InputFileAlign); + InputFileAlign = NULL; + } Status = GenSectionGuidDefinedSection ( InputFileName, + InputFileAlign, InputFileNum, &VendorGuid, SectGuidAttribute, @@ -1232,6 +1422,7 @@ Returns: // Status = GetSectionContents ( InputFileName, + InputFileAlign, InputFileNum, OutFileBuffer, &InputLength @@ -1248,6 +1439,7 @@ Returns: // Status = GetSectionContents ( InputFileName, + InputFileAlign, InputFileNum, OutFileBuffer, &InputLength @@ -1296,6 +1488,10 @@ Finish: free (InputFileName); } + if (InputFileAlign != NULL) { + free (InputFileAlign); + } + if (OutFileBuffer != NULL) { free (OutFileBuffer); } diff --git a/BaseTools/Source/C/GenVtf/GenVtf.c b/BaseTools/Source/C/GenVtf/GenVtf.c index 2e417bf563..72fb109fa6 100644 --- a/BaseTools/Source/C/GenVtf/GenVtf.c +++ b/BaseTools/Source/C/GenVtf/GenVtf.c @@ -1,6 +1,6 @@ /** -Copyright (c) 1999-2008 Intel Corporation. All rights reserved +Copyright (c) 1999-2010 Intel Corporation. All rights reserved This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this distribution. The full text of the license may be found at @@ -342,7 +342,6 @@ Returns: VtfInfo->LocationType = SECOND_VTF; } else { VtfInfo->LocationType = NONE; - Warning(UTILITY_NAME, 0, 0001, "Unknown location for component.", VtfInfo->CompName); } } else if (strnicmp (*TokenStr, "COMP_TYPE", 9) == 0) { TokenStr++; @@ -2408,7 +2407,7 @@ Returns: // // Copyright declaration // - fprintf (stdout, "Copyright (c) 2007 - 2009, Intel Corporation. All rights reserved.\n\n"); + fprintf (stdout, "Copyright (c) 2007 - 2010, Intel Corporation. All rights reserved.\n\n"); // // Details Option // diff --git a/BaseTools/Source/C/GnuGenBootSector/GnuGenBootSector.c b/BaseTools/Source/C/GnuGenBootSector/GnuGenBootSector.c index 6a25bee957..9e32892d6a 100644 --- a/BaseTools/Source/C/GnuGenBootSector/GnuGenBootSector.c +++ b/BaseTools/Source/C/GnuGenBootSector/GnuGenBootSector.c @@ -1,6 +1,6 @@ /** @file -Copyright 2006 - 2009, Intel Corporation +Copyright 2006 - 2010, Intel Corporation All rights reserved. This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this distribution. The full text of the license may be found at @@ -273,7 +273,7 @@ Version ( ) { printf ("%s v%d.%d -Utility to retrieve and update the boot sector or MBR.\n", UTILITY_NAME, UTILITY_MAJOR_VERSION, UTILITY_MINOR_VERSION); - printf ("Copyright (c) 2007-2009 Intel Corporation. All rights reserved.\n"); + printf ("Copyright (c) 2007-2010 Intel Corporation. All rights reserved.\n"); } diff --git a/BaseTools/Source/C/Include/Common/PiFirmwareFile.h b/BaseTools/Source/C/Include/Common/PiFirmwareFile.h index 33b5645b12..4db99dcac5 100644 --- a/BaseTools/Source/C/Include/Common/PiFirmwareFile.h +++ b/BaseTools/Source/C/Include/Common/PiFirmwareFile.h @@ -68,12 +68,10 @@ typedef UINT8 EFI_FFS_FILE_STATE; #define FFS_ATTRIB_DATA_ALIGNMENT 0x38 #define FFS_ATTRIB_CHECKSUM 0x40 // -// FFS_FIXED_CHECKSUM is the default checksum value used when the +// FFS_FIXED_CHECKSUM is the checksum value used when the // FFS_ATTRIB_CHECKSUM attribute bit is clear -// note this is NOT an architecturally defined value, but is in this file for -// implementation convenience // -#define FFS_FIXED_CHECKSUM 0x5A +#define FFS_FIXED_CHECKSUM 0xAA // // FFS File State Bits. diff --git a/BaseTools/Source/C/Include/Common/UefiInternalFormRepresentation.h b/BaseTools/Source/C/Include/Common/UefiInternalFormRepresentation.h index e76ffd317c..9f38247141 100644 --- a/BaseTools/Source/C/Include/Common/UefiInternalFormRepresentation.h +++ b/BaseTools/Source/C/Include/Common/UefiInternalFormRepresentation.h @@ -3,7 +3,7 @@ IFR is primarily consumed by the EFI presentation engine, and produced by EFI internal application and drivers as well as all add-in card option-ROM drivers - Copyright (c) 2006 - 2009, Intel Corporation All rights reserved. + Copyright (c) 2006 - 2010, Intel Corporation All rights reserved. This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this @@ -618,6 +618,7 @@ typedef union { #define EFI_IFR_DISABLE_IF_OP 0x1E #define EFI_IFR_TO_LOWER_OP 0x20 #define EFI_IFR_TO_UPPER_OP 0x21 +#define EFI_IFR_MAP_OP 0x22 #define EFI_IFR_ORDERED_LIST_OP 0x23 #define EFI_IFR_VARSTORE_OP 0x24 #define EFI_IFR_VARSTORE_NAME_VALUE_OP 0x25 @@ -626,6 +627,10 @@ typedef union { #define EFI_IFR_VERSION_OP 0x28 #define EFI_IFR_END_OP 0x29 #define EFI_IFR_MATCH_OP 0x2A +#define EFI_IFR_GET_OP 0x2B +#define EFI_IFR_SET_OP 0x2C +#define EFI_IFR_READ_OP 0x2D +#define EFI_IFR_WRITE_OP 0x2E #define EFI_IFR_EQUAL_OP 0x2F #define EFI_IFR_NOT_EQUAL_OP 0x30 #define EFI_IFR_GREATER_THAN_OP 0x31 @@ -672,6 +677,7 @@ typedef union { #define EFI_IFR_VALUE_OP 0x5A #define EFI_IFR_DEFAULT_OP 0x5B #define EFI_IFR_DEFAULTSTORE_OP 0x5C +#define EFI_IFR_FORM_MAP_OP 0x5D #define EFI_IFR_CATENATE_OP 0x5E #define EFI_IFR_GUID_OP 0x5F #define EFI_IFR_SECURITY_OP 0x60 @@ -730,14 +736,14 @@ typedef struct _EFI_IFR_VARSTORE { typedef struct _EFI_IFR_VARSTORE_EFI { EFI_IFR_OP_HEADER Header; - UINT16 VarStoreId; + EFI_VARSTORE_ID VarStoreId; EFI_GUID Guid; UINT32 Attributes; } EFI_IFR_VARSTORE_EFI; typedef struct _EFI_IFR_VARSTORE_NAME_VALUE { EFI_IFR_OP_HEADER Header; - UINT16 VarStoreId; + EFI_VARSTORE_ID VarStoreId; EFI_GUID Guid; } EFI_IFR_VARSTORE_NAME_VALUE; @@ -747,7 +753,7 @@ typedef struct _EFI_IFR_FORM_SET { EFI_STRING_ID FormSetTitle; EFI_STRING_ID Help; UINT8 Flags; - EFI_GUID ClassGuid[1]; + // EFI_GUID ClassGuid[]; } EFI_IFR_FORM_SET; typedef struct _EFI_IFR_END { @@ -1009,6 +1015,9 @@ typedef struct _EFI_IFR_ONE_OF_OPTION { #define EFI_IFR_TYPE_DATE 0x06 #define EFI_IFR_TYPE_STRING 0x07 #define EFI_IFR_TYPE_OTHER 0x08 +#define EFI_IFR_TYPE_UNDEFINED 0x09 +#define EFI_IFR_TYPE_ACTION 0x0A +#define EFI_IFR_TYPE_BUFFER 0x0B #define EFI_IFR_OPTION_DEFAULT 0x10 #define EFI_IFR_OPTION_DEFAULT_MFG 0x20 @@ -1288,6 +1297,100 @@ typedef struct _EFI_IFR_SECURITY { EFI_GUID Permissions; } EFI_IFR_SECURITY; +typedef struct _EFI_IFR_FORM_MAP_METHOD { + /// + /// The string identifier which provides the human-readable name of + /// the configuration method for this standards map form. + /// + EFI_STRING_ID MethodTitle; + /// + /// Identifier which uniquely specifies the configuration methods + /// associated with this standards map form. + /// + EFI_GUID MethodIdentifier; +} EFI_IFR_FORM_MAP_METHOD; + +typedef struct _EFI_IFR_FORM_MAP { + /// + /// The sequence that defines the type of opcode as well as the length + /// of the opcode being defined. Header.OpCode = EFI_IFR_FORM_MAP_OP. + /// + EFI_IFR_OP_HEADER Header; + /// + /// The unique identifier for this particular form. + /// + EFI_FORM_ID FormId; + /// + /// One or more configuration method's name and unique identifier. + /// + // EFI_IFR_FORM_MAP_METHOD Methods[]; +} EFI_IFR_FORM_MAP; + +typedef struct _EFI_IFR_SET { + /// + /// The sequence that defines the type of opcode as well as the length + /// of the opcode being defined. Header.OpCode = EFI_IFR_SET_OP. + /// + EFI_IFR_OP_HEADER Header; + /// + /// Specifies the identifier of a previously declared variable store to + /// use when storing the question's value. + /// + EFI_VARSTORE_ID VarStoreId; + union { + /// + /// A 16-bit Buffer Storage offset. + /// + EFI_STRING_ID VarName; + /// + /// A Name Value or EFI Variable name (VarName). + /// + UINT16 VarOffset; + } VarStoreInfo; + /// + /// Specifies the type used for storage. + /// + UINT8 VarStoreType; +} EFI_IFR_SET; + +typedef struct _EFI_IFR_GET { + /// + /// The sequence that defines the type of opcode as well as the length + /// of the opcode being defined. Header.OpCode = EFI_IFR_GET_OP. + /// + EFI_IFR_OP_HEADER Header; + /// + /// Specifies the identifier of a previously declared variable store to + /// use when retrieving the value. + /// + EFI_VARSTORE_ID VarStoreId; + union { + /// + /// A 16-bit Buffer Storage offset. + /// + EFI_STRING_ID VarName; + /// + /// A Name Value or EFI Variable name (VarName). + /// + UINT16 VarOffset; + } VarStoreInfo; + /// + /// Specifies the type used for storage. + /// + UINT8 VarStoreType; +} EFI_IFR_GET; + +typedef struct _EFI_IFR_READ { + EFI_IFR_OP_HEADER Header; +} EFI_IFR_READ; + +typedef struct _EFI_IFR_WRITE { + EFI_IFR_OP_HEADER Header; +} EFI_IFR_WRITE; + +typedef struct _EFI_IFR_MAP { + EFI_IFR_OP_HEADER Header; +} EFI_IFR_MAP; // // Keyboard Package // diff --git a/BaseTools/Source/C/Makefiles/NmakeSubdirs.bat b/BaseTools/Source/C/Makefiles/NmakeSubdirs.bat index cacb50baa9..8fc4bcdb41 100644 --- a/BaseTools/Source/C/Makefiles/NmakeSubdirs.bat +++ b/BaseTools/Source/C/Makefiles/NmakeSubdirs.bat @@ -1,3 +1,15 @@ +@REM ## @file +@REM # +@REM # Copyright (c) 2007 - 2010, Intel Corporation +@REM # All rights reserved. This program and the accompanying materials +@REM # are licensed and made available under the terms and conditions of the BSD License +@REM # which accompanies this distribution. The full text of the license may be found at +@REM # http://opensource.org/licenses/bsd-license.php +@REM # +@REM # THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +@REM # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + + @echo off setlocal SET NMAKE_COMMAND=%1 diff --git a/BaseTools/Source/C/Makefiles/app.makefile b/BaseTools/Source/C/Makefiles/app.makefile index 2f95003646..96fd09480f 100644 --- a/BaseTools/Source/C/Makefiles/app.makefile +++ b/BaseTools/Source/C/Makefiles/app.makefile @@ -1,3 +1,15 @@ +## @file +# +# Copyright (c) 2007 - 2010, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# + MAKEROOT ?= ../.. include $(MAKEROOT)/Makefiles/header.makefile diff --git a/BaseTools/Source/C/Makefiles/footer.makefile b/BaseTools/Source/C/Makefiles/footer.makefile index 7bdf49c1af..7877ebc149 100644 --- a/BaseTools/Source/C/Makefiles/footer.makefile +++ b/BaseTools/Source/C/Makefiles/footer.makefile @@ -1,3 +1,14 @@ +## @file +# +# Copyright (c) 2007 - 2010, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + DEPFILES = $(OBJECTS:%.o=%.d) $(MAKEROOT)/libs-$(ARCH): diff --git a/BaseTools/Source/C/Makefiles/header.makefile b/BaseTools/Source/C/Makefiles/header.makefile index 5f69e7b04e..006a0716ca 100644 --- a/BaseTools/Source/C/Makefiles/header.makefile +++ b/BaseTools/Source/C/Makefiles/header.makefile @@ -1,8 +1,19 @@ +## @file +# # The makefile can be invoked with # ARCH = x86_64 or x64 for EM64T build # ARCH = ia32 or IA32 for IA32 build # ARCH = ia64 or IA64 for IA64 build # +# Copyright (c) 2007 - 2010, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + ARCH ?= IA32 CYGWIN:=$(findstring CYGWIN, $(shell uname -s)) diff --git a/BaseTools/Source/C/Makefiles/lib.makefile b/BaseTools/Source/C/Makefiles/lib.makefile index 2b1a9d4289..3d49107183 100644 --- a/BaseTools/Source/C/Makefiles/lib.makefile +++ b/BaseTools/Source/C/Makefiles/lib.makefile @@ -1,3 +1,14 @@ +## @file +# +# Copyright (c) 2007 - 2010, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + include $(MAKEROOT)/Makefiles/header.makefile LIBRARY = $(MAKEROOT)/libs/lib$(LIBNAME).a diff --git a/BaseTools/Source/C/Makefiles/ms.app b/BaseTools/Source/C/Makefiles/ms.app index fabc0bc656..05c68ed53a 100644 --- a/BaseTools/Source/C/Makefiles/ms.app +++ b/BaseTools/Source/C/Makefiles/ms.app @@ -1,3 +1,14 @@ +## @file +# +# Copyright (c) 2007 - 2010, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + !INCLUDE ..\Makefiles\ms.common APPLICATION = $(BIN_PATH)\$(APPNAME).exe diff --git a/BaseTools/Source/C/Makefiles/ms.common b/BaseTools/Source/C/Makefiles/ms.common index 1523ce75ca..83372a8ab0 100644 --- a/BaseTools/Source/C/Makefiles/ms.common +++ b/BaseTools/Source/C/Makefiles/ms.common @@ -1,3 +1,14 @@ +## @file +# +# Copyright (c) 2007 - 2010, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + !IFNDEF EDK_TOOLS_PATH !ERROR "Please set your EDK_TOOLS_PATH!" !ENDIF diff --git a/BaseTools/Source/C/Makefiles/ms.lib b/BaseTools/Source/C/Makefiles/ms.lib index 79fdf55e41..dd9ef74aee 100644 --- a/BaseTools/Source/C/Makefiles/ms.lib +++ b/BaseTools/Source/C/Makefiles/ms.lib @@ -1,3 +1,14 @@ +## @file +# +# Copyright (c) 2007 - 2010, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + !INCLUDE ..\Makefiles\ms.common LIBRARY = $(LIB_PATH)\$(LIBNAME).lib diff --git a/BaseTools/Source/C/Makefiles/ms.rule b/BaseTools/Source/C/Makefiles/ms.rule index 94687a075d..7702cfac54 100644 --- a/BaseTools/Source/C/Makefiles/ms.rule +++ b/BaseTools/Source/C/Makefiles/ms.rule @@ -1,3 +1,14 @@ +## @file +# +# Copyright (c) 2007 - 2010, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + #DEPFILES = $(OBJECTS:%.o=%.d) .c.obj : diff --git a/BaseTools/Source/C/PyEfiCompressor/EfiCompressor.c b/BaseTools/Source/C/PyEfiCompressor/EfiCompressor.c index 38a81c3c27..0abf11ed06 100644 --- a/BaseTools/Source/C/PyEfiCompressor/EfiCompressor.c +++ b/BaseTools/Source/C/PyEfiCompressor/EfiCompressor.c @@ -1,3 +1,16 @@ +/** @file + +Copyright (c) 2009 - 2010 Intel Corporation. All rights reserved +This program and the accompanying materials are licensed and made available +under the terms and conditions of the BSD License which accompanies this +distribution. The full text of the license may be found at +http://opensource.org/licenses/bsd-license.php + +THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ + #include #include diff --git a/BaseTools/Source/C/PyEfiCompressor/Makefile b/BaseTools/Source/C/PyEfiCompressor/Makefile index 502735bfea..c0bc5438c1 100644 --- a/BaseTools/Source/C/PyEfiCompressor/Makefile +++ b/BaseTools/Source/C/PyEfiCompressor/Makefile @@ -1,3 +1,14 @@ +## @file +# +# Copyright (c) 2007 - 2010, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + !INCLUDE ..\Makefiles\ms.common APPNAME = GenSec diff --git a/BaseTools/Source/C/PyUtility/Makefile b/BaseTools/Source/C/PyUtility/Makefile index 8f50ae1aeb..51ce9bcf34 100644 --- a/BaseTools/Source/C/PyUtility/Makefile +++ b/BaseTools/Source/C/PyUtility/Makefile @@ -1,3 +1,14 @@ +## @file +# +# Copyright (c) 2007 - 2010, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + !INCLUDE ..\Makefiles\ms.common APPNAME = GenSec diff --git a/BaseTools/Source/C/PyUtility/PyUtility.c b/BaseTools/Source/C/PyUtility/PyUtility.c index f06cb9222d..e80cd70bf0 100644 --- a/BaseTools/Source/C/PyUtility/PyUtility.c +++ b/BaseTools/Source/C/PyUtility/PyUtility.c @@ -1,3 +1,16 @@ +/** @file + +Copyright (c) 2009 - 2010 Intel Corporation. All rights reserved +This program and the accompanying materials are licensed and made available +under the terms and conditions of the BSD License which accompanies this +distribution. The full text of the license may be found at +http://opensource.org/licenses/bsd-license.php + +THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ + #include #include #include diff --git a/BaseTools/Source/C/Split/Split.c b/BaseTools/Source/C/Split/Split.c index d5fe738a2c..8be795ff17 100644 --- a/BaseTools/Source/C/Split/Split.c +++ b/BaseTools/Source/C/Split/Split.c @@ -2,7 +2,7 @@ Split a file into two pieces at the request offset. -Copyright (c) 1999-2008 Intel Corporation. All rights reserved +Copyright (c) 1999-2010 Intel Corporation. All rights reserved This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this distribution. The full text of the license may be found at @@ -58,7 +58,7 @@ Returns: --*/ { printf ("%s v%d.%d -Utility to break a file into two pieces at the request offset.\n", UTILITY_NAME, UTILITY_MAJOR_VERSION, UTILITY_MINOR_VERSION); - printf ("Copyright (c) 1999-2007 Intel Corporation. All rights reserved.\n"); + printf ("Copyright (c) 1999-2010 Intel Corporation. All rights reserved.\n"); } void diff --git a/BaseTools/Source/C/TianoCompress/TianoCompress.c b/BaseTools/Source/C/TianoCompress/TianoCompress.c index ef35f1721d..f99176a195 100644 --- a/BaseTools/Source/C/TianoCompress/TianoCompress.c +++ b/BaseTools/Source/C/TianoCompress/TianoCompress.c @@ -1,6 +1,6 @@ /** @file -Copyright (c) 2007 - 2008, Intel Corporation +Copyright (c) 2007 - 2010, Intel Corporation All rights reserved. This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this distribution. The full text of the license may be found at @@ -1695,7 +1695,7 @@ Returns: // // Copyright declaration // - fprintf (stdout, "Copyright (c) 2007, Intel Corporation. All rights reserved.\n\n"); + fprintf (stdout, "Copyright (c) 2007 - 2010, Intel Corporation. All rights reserved.\n\n"); // // Details Option diff --git a/BaseTools/Source/C/VfrCompile/EfiVfr.h b/BaseTools/Source/C/VfrCompile/EfiVfr.h index a88b101953..809ca9e4ad 100644 --- a/BaseTools/Source/C/VfrCompile/EfiVfr.h +++ b/BaseTools/Source/C/VfrCompile/EfiVfr.h @@ -1,6 +1,6 @@ /** @file -Copyright (c) 2004 - 2008, Intel Corporation +Copyright (c) 2004 - 2010, Intel Corporation All rights reserved. This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this distribution. The full text of the license may be found at @@ -31,6 +31,7 @@ Abstract: #define MAX_VFR_LINE_LEN 4096 #define EFI_IFR_MAX_LENGTH 0xFF +#define MAX_IFR_EXPRESSION_DEPTH 0x9 #define EFI_VARSTORE_ID_INVALID 0 #define EFI_VAROFFSET_INVALID 0xFFFF diff --git a/BaseTools/Source/C/VfrCompile/VfrCompiler.cpp b/BaseTools/Source/C/VfrCompile/VfrCompiler.cpp index e3c150cd3d..508b68371e 100644 --- a/BaseTools/Source/C/VfrCompile/VfrCompiler.cpp +++ b/BaseTools/Source/C/VfrCompile/VfrCompiler.cpp @@ -2,7 +2,7 @@ VfrCompiler main class and main function. -Copyright (c) 2004 - 2008, Intel Corporation +Copyright (c) 2004 - 2010, Intel Corporation All rights reserved. This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this distribution. The full text of the license may be found at @@ -24,9 +24,19 @@ PACKAGE_DATA gCBuffer; PACKAGE_DATA gRBuffer; VOID -CVfrCompiler::DebugError () { - Error (NULL, 0, 0001, "Error parsing vfr file", " %s", mOptions.VfrFileName); - //_asm int 3; +CVfrCompiler::DebugError ( + IN CHAR8 *FileName, + IN UINT32 LineNumber, + IN UINT32 MessageCode, + IN CONST CHAR8 *Text, + IN CONST CHAR8 *MsgFmt, + ... + ) +{ + va_list List; + va_start (List, MsgFmt); + PrintMessage ((CHAR8 *) "ERROR", FileName, LineNumber, MessageCode, (CHAR8 *) Text, (CHAR8 *) MsgFmt, List); + va_end (List); } VOID @@ -53,7 +63,7 @@ CVfrCompiler::OptionInitialization ( { INT32 Index; - SetUtilityName (PROGRAM_NAME); + SetUtilityName ((CHAR8*) PROGRAM_NAME); mOptions.VfrFileName[0] = '\0'; mOptions.RecordListFile[0] = '\0'; @@ -84,11 +94,9 @@ CVfrCompiler::OptionInitialization ( mOptions.CreateRecordListFile = TRUE; gCIfrRecordInfoDB.TurnOn (); } else if (stricmp(Argv[Index], "-i") == 0) { - Error (NULL, 0, 1000, "Unknown option", "unrecognized option %s", Argv[Index]); - goto Fail; Index++; if ((Index >= Argc) || (Argv[Index][0] == '-')) { - Error (NULL, 0, 1001, "Missing option", "-i missing path argument"); + DebugError (NULL, 0, 1001, "Missing option", "-i missing path argument"); goto Fail; } @@ -96,7 +104,7 @@ CVfrCompiler::OptionInitialization ( } else if (stricmp(Argv[Index], "-o") == 0 || stricmp(Argv[Index], "--output-directory") == 0 || stricmp(Argv[Index], "-od") == 0) { Index++; if ((Index >= Argc) || (Argv[Index][0] == '-')) { - Error (NULL, 0, 1001, "Missing option", "-o missing output directory name"); + DebugError (NULL, 0, 1001, "Missing option", "-o missing output directory name"); goto Fail; } strcpy (mOptions.OutputDirectory, Argv[Index]); @@ -109,17 +117,15 @@ CVfrCompiler::OptionInitialization ( strcat (mOptions.OutputDirectory, "\\"); } } - DebugMsg (NULL, 0, 9, "Output Directory", mOptions.OutputDirectory); + DebugMsg (NULL, 0, 9, (CHAR8 *) "Output Directory", mOptions.OutputDirectory); } else if (stricmp(Argv[Index], "-b") == 0 || stricmp(Argv[Index], "--create-ifr-package") == 0 || stricmp(Argv[Index], "-ibin") == 0) { mOptions.CreateIfrPkgFile = TRUE; } else if (stricmp(Argv[Index], "-n") == 0 || stricmp(Argv[Index], "--no-pre-processing") == 0 || stricmp(Argv[Index], "-nopp") == 0) { mOptions.SkipCPreprocessor = TRUE; } else if (stricmp(Argv[Index], "-f") == 0 || stricmp(Argv[Index], "--pre-processing-flag") == 0 || stricmp(Argv[Index], "-ppflag") == 0) { - Error (NULL, 0, 1000, "Unknown option", "unrecognized option %s", Argv[Index]); - goto Fail; Index++; if ((Index >= Argc) || (Argv[Index][0] == '-')) { - Error (NULL, 0, 1001, "Missing option", "-od - missing C-preprocessor argument"); + DebugError (NULL, 0, 1001, "Missing option", "-od - missing C-preprocessor argument"); goto Fail; } @@ -127,13 +133,13 @@ CVfrCompiler::OptionInitialization ( } else if (stricmp(Argv[Index], "-c") == 0 || stricmp(Argv[Index], "--compatible-framework") == 0) { mOptions.CompatibleMode = TRUE; } else { - Error (NULL, 0, 1000, "Unknown option", "unrecognized option %s", Argv[Index]); + DebugError (NULL, 0, 1000, "Unknown option", "unrecognized option %s", Argv[Index]); goto Fail; } } if (Index != Argc - 1) { - Error (NULL, 0, 1001, "Missing option", "VFR file name is not specified."); + DebugError (NULL, 0, 1001, "Missing option", "VFR file name is not specified."); goto Fail; } else { strcpy (mOptions.VfrFileName, Argv[Index]); @@ -192,7 +198,7 @@ CVfrCompiler::AppendIncludePath ( } IncludePaths = new CHAR8[Len]; if (IncludePaths == NULL) { - Error (NULL, 0, 4001, "Resource: memory can't be allocated", NULL); + DebugError (NULL, 0, 4001, "Resource: memory can't be allocated", NULL); return; } IncludePaths[0] = '\0'; @@ -221,7 +227,7 @@ CVfrCompiler::AppendCPreprocessorOptions ( } Opt = new CHAR8[Len]; if (Opt == NULL) { - Error (NULL, 0, 4001, "Resource: memory can't be allocated", NULL); + DebugError (NULL, 0, 4001, "Resource: memory can't be allocated", NULL); return; } Opt[0] = 0; @@ -339,8 +345,8 @@ CVfrCompiler::CVfrCompiler ( IN CHAR8 **Argv ) { - mPreProcessCmd = PREPROCESSOR_COMMAND; - mPreProcessOpt = PREPROCESSOR_OPTIONS; + mPreProcessCmd = (CHAR8 *) PREPROCESSOR_COMMAND; + mPreProcessOpt = (CHAR8 *) PREPROCESSOR_OPTIONS; OptionInitialization(Argc, Argv); @@ -377,6 +383,7 @@ CVfrCompiler::Usage ( CONST CHAR8 *Help[] = { " ", "VfrCompile version " VFR_COMPILER_VERSION VFR_COMPILER_UPDATE_TIME, + "Copyright (c) 2004-2010 Intel Corporation. All rights reserved.", " ", "Usage: VfrCompile [options] VfrFile", " ", @@ -417,7 +424,7 @@ CVfrCompiler::PreProcess ( } if ((pVfrFile = fopen (mOptions.VfrFileName, "r")) == NULL) { - Error (NULL, 0, 0001, "Error opening the input VFR file", mOptions.VfrFileName); + DebugError (NULL, 0, 0001, "Error opening the input VFR file", mOptions.VfrFileName); goto Fail; } fclose (pVfrFile); @@ -433,7 +440,7 @@ CVfrCompiler::PreProcess ( PreProcessCmd = new CHAR8[CmdLen + 10]; if (PreProcessCmd == NULL) { - Error (NULL, 0, 4001, "Resource: memory can't be allocated", NULL); + DebugError (NULL, 0, 4001, "Resource: memory can't be allocated", NULL); goto Fail; } strcpy (PreProcessCmd, mPreProcessCmd), strcat (PreProcessCmd, " "); @@ -448,7 +455,7 @@ CVfrCompiler::PreProcess ( strcat (PreProcessCmd, mOptions.PreprocessorOutputFileName); if (system (PreProcessCmd) != 0) { - Error (NULL, 0, 0003, "Error parsing file", "failed to spawn C preprocessor on VFR file %s\n", PreProcessCmd); + DebugError (NULL, 0, 0003, "Error parsing file", "failed to spawn C preprocessor on VFR file %s\n", PreProcessCmd); goto Fail; } @@ -484,7 +491,7 @@ CVfrCompiler::Compile ( gCVfrErrorHandle.SetInputFile (InFileName); if ((pInFile = fopen (InFileName, "r")) == NULL) { - Error (NULL, 0, 0001, "Error opening the input file", InFileName); + DebugError (NULL, 0, 0001, "Error opening the input file", InFileName); goto Fail; } @@ -504,7 +511,7 @@ CVfrCompiler::Compile ( Fail: if (!IS_RUN_STATUS(STATUS_DEAD)) { - Error (NULL, 0, 0003, "Error parsing", "compile error in file %s", InFileName); + DebugError (NULL, 0, 0003, "Error parsing", "compile error in file %s", InFileName); SET_RUN_STATUS (STATUS_FAILED); } if (pInFile != NULL) { @@ -534,7 +541,7 @@ CVfrCompiler::AdjustBin ( if (gCBuffer.Buffer != NULL && gRBuffer.Buffer != NULL) { UINT32 Index; if (gCBuffer.Size != gRBuffer.Size) { - Error (NULL, 0, 0001, "Error parsing vfr file", " %s. FormBinary Size 0x%X is not same to RecordBuffer Size 0x%X", mOptions.VfrFileName, gCBuffer.Size, gRBuffer.Size); + DebugError (NULL, 0, 0001, "Error parsing vfr file", " %s. FormBinary Size 0x%X is not same to RecordBuffer Size 0x%X", mOptions.VfrFileName, gCBuffer.Size, gRBuffer.Size); } for (Index = 0; Index < gCBuffer.Size; Index ++) { if (gCBuffer.Buffer[Index] != gRBuffer.Buffer[Index]) { @@ -542,13 +549,13 @@ CVfrCompiler::AdjustBin ( } } if (Index != gCBuffer.Size) { - Error (NULL, 0, 0001, "Error parsing vfr file", " %s. the 0x%X byte is different between Form and Record", mOptions.VfrFileName, Index); + DebugError (NULL, 0, 0001, "Error parsing vfr file", " %s. the 0x%X byte is different between Form and Record", mOptions.VfrFileName, Index); } - DebugMsg (NULL, 0, 9, "IFR Buffer", "Form Buffer same to Record Buffer and Size is 0x%X", Index); + DebugMsg (NULL, 0, 9, (CHAR8 *) "IFR Buffer", (CHAR8 *) "Form Buffer same to Record Buffer and Size is 0x%X", Index); } else if (gCBuffer.Buffer == NULL && gRBuffer.Buffer == NULL) { //ok } else { - Error (NULL, 0, 0001, "Error parsing vfr file", " %s.Buffer not allocated.", mOptions.VfrFileName); + DebugError (NULL, 0, 0001, "Error parsing vfr file", " %s.Buffer not allocated.", mOptions.VfrFileName); } // @@ -588,7 +595,7 @@ CVfrCompiler::GenBinary ( if (mOptions.CreateIfrPkgFile == TRUE) { if ((pFile = fopen (mOptions.PkgOutputFileName, "wb")) == NULL) { - Error (NULL, 0, 0001, "Error opening file", mOptions.PkgOutputFileName); + DebugError (NULL, 0, 0001, "Error opening file", mOptions.PkgOutputFileName); goto Fail; } if (gCFormPkg.BuildPkg (pFile, &gRBuffer) != VFR_RETURN_SUCCESS) { @@ -631,7 +638,7 @@ CVfrCompiler::GenCFile ( if (!mOptions.CreateIfrPkgFile || mOptions.CompatibleMode) { if ((pFile = fopen (mOptions.COutputFileName, "w")) == NULL) { - Error (NULL, 0, 0001, "Error opening output C file", mOptions.COutputFileName); + DebugError (NULL, 0, 0001, "Error opening output C file", mOptions.COutputFileName); goto Fail; } @@ -678,12 +685,12 @@ CVfrCompiler::GenRecordListFile ( } if ((pInFile = fopen (InFileName, "r")) == NULL) { - Error (NULL, 0, 0001, "Error opening the input VFR preprocessor output file", InFileName); + DebugError (NULL, 0, 0001, "Error opening the input VFR preprocessor output file", InFileName); return; } if ((pOutFile = fopen (mOptions.RecordListFile, "w")) == NULL) { - Error (NULL, 0, 0001, "Error opening the record list file", mOptions.RecordListFile); + DebugError (NULL, 0, 0001, "Error opening the record list file", mOptions.RecordListFile); goto Err1; } @@ -713,8 +720,8 @@ Err1: int main ( - IN INT32 Argc, - IN CHAR8 **Argv + IN int Argc, + IN char **Argv ) { COMPILER_RUN_STATUS Status; @@ -743,3 +750,4 @@ main ( return GetUtilityStatus (); } + diff --git a/BaseTools/Source/C/VfrCompile/VfrCompiler.h b/BaseTools/Source/C/VfrCompile/VfrCompiler.h index d3aa8ca56a..fcd2b24146 100644 --- a/BaseTools/Source/C/VfrCompile/VfrCompiler.h +++ b/BaseTools/Source/C/VfrCompile/VfrCompiler.h @@ -102,7 +102,7 @@ public: VOID GenBinary (VOID); VOID GenCFile (VOID); VOID GenRecordListFile (VOID); - VOID DebugError (VOID); + VOID DebugError (IN CHAR8*, IN UINT32, IN UINT32, IN CONST CHAR8*, IN CONST CHAR8*, ...); }; #endif diff --git a/BaseTools/Source/C/VfrCompile/VfrError.cpp b/BaseTools/Source/C/VfrCompile/VfrError.cpp index 963bd2da42..3289101710 100644 --- a/BaseTools/Source/C/VfrCompile/VfrError.cpp +++ b/BaseTools/Source/C/VfrCompile/VfrError.cpp @@ -135,7 +135,6 @@ CVfrErrorHandle::ParseFileScopeRecord ( IN UINT32 WholeScopeLine ) { - CHAR8 *FullPathName = NULL; SVfrFileScopeRecord *pNode = NULL; if (Record == NULL) { @@ -195,19 +194,19 @@ VOID CVfrErrorHandle::PrintMsg ( IN UINT32 LineNum, IN CHAR8 *TokName, - IN CHAR8 *MsgType, - IN CHAR8 *ErrorMsg + IN CONST CHAR8 *MsgType, + IN CONST CHAR8 *ErrorMsg ) { CHAR8 *FileName = NULL; UINT32 FileLine; if (strncmp ("Warning", MsgType, strlen ("Warning")) == 0) { - VerboseMsg (ErrorMsg); + VerboseMsg ((CHAR8 *) ErrorMsg); return; } GetFileNameLineNum (LineNum, &FileName, &FileLine); - Error (FileName, FileLine, 0x3000, TokName, "\t%s\n", ErrorMsg); + Error (FileName, FileLine, 0x3000, TokName, (CHAR8 *) "\t%s\n", (CHAR8 *) ErrorMsg); } UINT8 @@ -220,7 +219,7 @@ CVfrErrorHandle::HandleError ( UINT32 Index; CHAR8 *FileName = NULL; UINT32 FileLine; - CHAR8 *ErrorMsg = NULL; + CONST CHAR8 *ErrorMsg = NULL; if (mVfrErrorHandleTable == NULL) { return 1; @@ -235,7 +234,7 @@ CVfrErrorHandle::HandleError ( if (ErrorMsg != NULL) { GetFileNameLineNum (LineNum, &FileName, &FileLine); - Error (FileName, FileLine, 0x3000, TokName, "\t%s\n", ErrorMsg); + Error (FileName, FileLine, 0x3000, TokName, (CHAR8 *) "\t%s\n", (CHAR8 *) ErrorMsg); return 1; } else { return 0; diff --git a/BaseTools/Source/C/VfrCompile/VfrError.h b/BaseTools/Source/C/VfrCompile/VfrError.h index 500926af6a..916e0702eb 100644 --- a/BaseTools/Source/C/VfrCompile/VfrError.h +++ b/BaseTools/Source/C/VfrCompile/VfrError.h @@ -47,7 +47,7 @@ typedef enum { typedef struct _SVFR_ERROR_HANDLE { EFI_VFR_RETURN_CODE mErrorCode; - CHAR8 *mErrorMsg; + CONST CHAR8 *mErrorMsg; } SVFR_ERROR_HANDLE; struct SVfrFileScopeRecord { @@ -74,8 +74,8 @@ public: VOID SetInputFile (IN CHAR8 *); VOID ParseFileScopeRecord (IN CHAR8 *, IN UINT32); VOID GetFileNameLineNum (IN UINT32, OUT CHAR8 **, OUT UINT32 *); - UINT8 HandleError (IN EFI_VFR_RETURN_CODE, IN UINT32 LineNum = 0, IN CHAR8 *TokName = "\0"); - VOID PrintMsg (IN UINT32 LineNum = 0, IN CHAR8 *TokName = "\0", IN CHAR8 *MsgType = "Error", IN CHAR8 *ErrorMsg = "\0"); + UINT8 HandleError (IN EFI_VFR_RETURN_CODE, IN UINT32 LineNum = 0, IN CHAR8 *TokName = NULL); + VOID PrintMsg (IN UINT32 LineNum = 0, IN CHAR8 *TokName = NULL, IN CONST CHAR8 *MsgType = "Error", IN CONST CHAR8 *ErrorMsg = ""); }; #define CHECK_ERROR_RETURN(f, v) do { EFI_VFR_RETURN_CODE r; if ((r = (f)) != (v)) { return r; } } while (0) diff --git a/BaseTools/Source/C/VfrCompile/VfrFormPkg.cpp b/BaseTools/Source/C/VfrCompile/VfrFormPkg.cpp index ffa898bdbe..ccbc04455a 100644 --- a/BaseTools/Source/C/VfrCompile/VfrFormPkg.cpp +++ b/BaseTools/Source/C/VfrCompile/VfrFormPkg.cpp @@ -2,7 +2,7 @@ The definition of CFormPkg's member function -Copyright (c) 2004 - 2009, Intel Corporation +Copyright (c) 2004 - 2010, Intel Corporation All rights reserved. This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this distribution. The full text of the license may be found at @@ -25,7 +25,7 @@ SPendingAssign::SPendingAssign ( IN VOID *Addr, IN UINT32 Len, IN UINT32 LineNo, - IN CHAR8 *Msg + IN CONST CHAR8 *Msg ) { mKey = NULL; @@ -352,11 +352,11 @@ CFormPkg::BuildPkg ( VOID CFormPkg::_WRITE_PKG_LINE ( - IN FILE *pFile, - IN UINT32 LineBytes, - IN CHAR8 *LineHeader, - IN CHAR8 *BlkBuf, - IN UINT32 BlkSize + IN FILE *pFile, + IN UINT32 LineBytes, + IN CONST CHAR8 *LineHeader, + IN CHAR8 *BlkBuf, + IN UINT32 BlkSize ) { UINT32 Index; @@ -375,11 +375,11 @@ CFormPkg::_WRITE_PKG_LINE ( VOID CFormPkg::_WRITE_PKG_END ( - IN FILE *pFile, - IN UINT32 LineBytes, - IN CHAR8 *LineHeader, - IN CHAR8 *BlkBuf, - IN UINT32 BlkSize + IN FILE *pFile, + IN UINT32 LineBytes, + IN CONST CHAR8 *LineHeader, + IN CHAR8 *BlkBuf, + IN UINT32 BlkSize ) { UINT32 Index; @@ -483,7 +483,7 @@ CFormPkg::AssignPending ( IN VOID *ValAddr, IN UINT32 ValLen, IN UINT32 LineNo, - IN CHAR8 *Msg + IN CONST CHAR8 *Msg ) { SPendingAssign *pNew; @@ -1242,7 +1242,7 @@ static struct { { 0, 0 }, // 0x1F { sizeof (EFI_IFR_TO_LOWER), 0 }, // EFI_IFR_TO_LOWER_OP - 0x20 { sizeof (EFI_IFR_TO_UPPER), 0 }, // EFI_IFR_TO_UPPER_OP - 0x21 - { 0, 0 }, // 0x22 + { sizeof (EFI_IFR_MAP), 1 }, // EFI_IFR_MAP - 0x22 { sizeof (EFI_IFR_ORDERED_LIST), 1 }, // EFI_IFR_ORDERED_LIST_OP - 0x23 { sizeof (EFI_IFR_VARSTORE), 0 }, // EFI_IFR_VARSTORE_OP { sizeof (EFI_IFR_VARSTORE_NAME_VALUE), 0 }, // EFI_IFR_VARSTORE_NAME_VALUE_OP @@ -1250,8 +1250,11 @@ static struct { { sizeof (EFI_IFR_VARSTORE_DEVICE), 1 }, // EFI_IFR_VARSTORE_DEVICE_OP { sizeof (EFI_IFR_VERSION), 0 }, // EFI_IFR_VERSION_OP - 0x28 { sizeof (EFI_IFR_END), 0 }, // EFI_IFR_END_OP - { sizeof (EFI_IFR_MATCH), 1 }, // EFI_IFR_MATCH_OP - 0x2A - { 0, 0 }, { 0, 0} , { 0, 0} , { 0, 0} , // 0x2B ~ 0x2E + { sizeof (EFI_IFR_MATCH), 0 }, // EFI_IFR_MATCH_OP - 0x2A + { sizeof (EFI_IFR_GET), 0 }, // EFI_IFR_GET - 0x2B + { sizeof (EFI_IFR_SET), 0 }, // EFI_IFR_SET - 0x2C + { sizeof (EFI_IFR_READ), 0 }, // EFI_IFR_READ - 0x2D + { sizeof (EFI_IFR_WRITE), 0 }, // EFI_IFR_WRITE - 0x2E { sizeof (EFI_IFR_EQUAL), 0 }, // EFI_IFR_EQUAL_OP - 0x2F { sizeof (EFI_IFR_NOT_EQUAL), 0 }, // EFI_IFR_NOT_EQUAL_OP { sizeof (EFI_IFR_GREATER_THAN), 0 }, // EFI_IFR_GREATER_THAN_OP @@ -1298,7 +1301,7 @@ static struct { { sizeof (EFI_IFR_VALUE), 1 }, // EFI_IFR_VALUE_OP { sizeof (EFI_IFR_DEFAULT), 0 }, // EFI_IFR_DEFAULT_OP { sizeof (EFI_IFR_DEFAULTSTORE), 0 }, // EFI_IFR_DEFAULTSTORE_OP - 0x5C - { 0, 0}, // 0x5D + { sizeof (EFI_IFR_FORM_MAP), 1}, // EFI_IFR_FORM_MAP_OP - 0x5D { sizeof (EFI_IFR_CATENATE), 0 }, // EFI_IFR_CATENATE_OP { sizeof (EFI_IFR_GUID), 0 }, // EFI_IFR_GUID_OP { sizeof (EFI_IFR_SECURITY), 0 }, // EFI_IFR_SECURITY_OP - 0x60 @@ -1313,9 +1316,9 @@ static struct { "EFI_IFR_ACTION", "EFI_IFR_RESET_BUTTON", "EFI_IFR_FORM_SET", "EFI_IFR_REF", "EFI_IFR_NO_SUBMIT_IF", "EFI_IFR_INCONSISTENT_IF", "EFI_IFR_EQ_ID_VAL", "EFI_IFR_EQ_ID_ID", "EFI_IFR_EQ_ID_LIST", "EFI_IFR_AND", "EFI_IFR_OR", "EFI_IFR_NOT", "EFI_IFR_RULE", "EFI_IFR_GRAY_OUT_IF", "EFI_IFR_DATE", "EFI_IFR_TIME", "EFI_IFR_STRING", "EFI_IFR_REFRESH", - "EFI_IFR_DISABLE_IF", "EFI_IFR_INVALID", "EFI_IFR_TO_LOWER", "EFI_IFR_TO_UPPER", "EFI_IFR_INVALID", "EFI_IFR_ORDERED_LIST", + "EFI_IFR_DISABLE_IF", "EFI_IFR_INVALID", "EFI_IFR_TO_LOWER", "EFI_IFR_TO_UPPER", "EFI_IFR_MAP", "EFI_IFR_ORDERED_LIST", "EFI_IFR_VARSTORE", "EFI_IFR_VARSTORE_NAME_VALUE", "EFI_IFR_VARSTORE_EFI", "EFI_IFR_VARSTORE_DEVICE", "EFI_IFR_VERSION", "EFI_IFR_END", - "EFI_IFR_MATCH", "EFI_IFR_INVALID", "EFI_IFR_INVALID", "EFI_IFR_INVALID", "EFI_IFR_INVALID", "EFI_IFR_EQUAL", + "EFI_IFR_MATCH", "EFI_IFR_GET", "EFI_IFR_SET", "EFI_IFR_READ", "EFI_IFR_WRITE", "EFI_IFR_EQUAL", "EFI_IFR_NOT_EQUAL", "EFI_IFR_GREATER_THAN", "EFI_IFR_GREATER_EQUAL", "EFI_IFR_LESS_THAN", "EFI_IFR_LESS_EQUAL", "EFI_IFR_BITWISE_AND", "EFI_IFR_BITWISE_OR", "EFI_IFR_BITWISE_NOT", "EFI_IFR_SHIFT_LEFT", "EFI_IFR_SHIFT_RIGHT", "EFI_IFR_ADD", "EFI_IFR_SUBTRACT", "EFI_IFR_MULTIPLY", "EFI_IFR_DIVIDE", "EFI_IFR_MODULO", "EFI_IFR_RULE_REF", "EFI_IFR_QUESTION_REF1", "EFI_IFR_QUESTION_REF2", @@ -1323,7 +1326,7 @@ static struct { "EFI_IFR_TO_UINT", "EFI_IFR_TO_STRING", "EFI_IFR_TO_BOOLEAN", "EFI_IFR_MID", "EFI_IFR_FIND", "EFI_IFR_TOKEN", "EFI_IFR_STRING_REF1","EFI_IFR_STRING_REF2", "EFI_IFR_CONDITIONAL", "EFI_IFR_QUESTION_REF3", "EFI_IFR_ZERO", "EFI_IFR_ONE", "EFI_IFR_ONES", "EFI_IFR_UNDEFINED", "EFI_IFR_LENGTH", "EFI_IFR_DUP", "EFI_IFR_THIS", "EFI_IFR_SPAN", - "EFI_IFR_VALUE", "EFI_IFR_DEFAULT", "EFI_IFR_DEFAULTSTORE", "EFI_IFR_INVALID", "EFI_IFR_CATENATE", "EFI_IFR_GUID", + "EFI_IFR_VALUE", "EFI_IFR_DEFAULT", "EFI_IFR_DEFAULTSTORE", "EFI_IFR_FORM_MAP", "EFI_IFR_CATENATE", "EFI_IFR_GUID", "EFI_IFR_SECURITY", }; @@ -1340,7 +1343,7 @@ CIFROBJ_DEBUG_PRINT ( #endif -bool gCreateOp = TRUE; +BOOLEAN gCreateOp = TRUE; CIfrObj::CIfrObj ( IN UINT8 OpCode, @@ -1396,4 +1399,4 @@ CIfrOpHeader::CIfrOpHeader ( mHeader = OpHdr.mHeader; } -UINT32 CIfrForm::FormIdBitMap[EFI_FREE_FORM_ID_BITMAP_SIZE] = {0, }; +UINT32 CIfrFormId::FormIdBitMap[EFI_FREE_FORM_ID_BITMAP_SIZE] = {0, }; diff --git a/BaseTools/Source/C/VfrCompile/VfrFormPkg.h b/BaseTools/Source/C/VfrCompile/VfrFormPkg.h index 0b84896cc9..38422e1332 100644 --- a/BaseTools/Source/C/VfrCompile/VfrFormPkg.h +++ b/BaseTools/Source/C/VfrCompile/VfrFormPkg.h @@ -2,7 +2,7 @@ The definition of CFormPkg's member function -Copyright (c) 2004 - 2009, Intel Corporation +Copyright (c) 2004 - 2010, Intel Corporation All rights reserved. This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this distribution. The full text of the license may be found at @@ -81,7 +81,7 @@ struct SPendingAssign { CHAR8 *mMsg; struct SPendingAssign *mNext; - SPendingAssign (IN CHAR8 *, IN VOID *, IN UINT32, IN UINT32, IN CHAR8 *); + SPendingAssign (IN CHAR8 *, IN VOID *, IN UINT32, IN UINT32, IN CONST CHAR8 *); ~SPendingAssign (); VOID SetAddrAndLen (IN VOID *, IN UINT32); @@ -108,8 +108,8 @@ private: UINT32 mPkgLength; - VOID _WRITE_PKG_LINE (IN FILE *, IN UINT32 , IN CHAR8 *, IN CHAR8 *, IN UINT32); - VOID _WRITE_PKG_END (IN FILE *, IN UINT32 , IN CHAR8 *, IN CHAR8 *, IN UINT32); + VOID _WRITE_PKG_LINE (IN FILE *, IN UINT32 , IN CONST CHAR8 *, IN CHAR8 *, IN UINT32); + VOID _WRITE_PKG_END (IN FILE *, IN UINT32 , IN CONST CHAR8 *, IN CHAR8 *, IN UINT32); private: SPendingAssign *PendingAssignList; @@ -131,7 +131,7 @@ public: EFI_VFR_RETURN_CODE GenCFile (IN CHAR8 *, IN FILE *, IN PACKAGE_DATA *PkgData = NULL); public: - EFI_VFR_RETURN_CODE AssignPending (IN CHAR8 *, IN VOID *, IN UINT32, IN UINT32, IN CHAR8 *Msg = NULL); + EFI_VFR_RETURN_CODE AssignPending (IN CHAR8 *, IN VOID *, IN UINT32, IN UINT32, IN CONST CHAR8 *Msg = NULL); VOID DoPendingAssign (IN CHAR8 *, IN VOID *, IN UINT32); bool HavePendingUnassigned (VOID); VOID PendingAssignPrintAll (VOID); @@ -195,11 +195,11 @@ extern CIfrRecordInfoDB gCIfrRecordInfoDB; /* * The definition of CIfrObj */ -extern bool gCreateOp; +extern BOOLEAN gCreateOp; class CIfrObj { private: - bool mDelayEmit; + BOOLEAN mDelayEmit; CHAR8 *mObjBinBuf; UINT8 mObjBinLen; @@ -227,7 +227,7 @@ public: inline bool ExpendObjBin (IN UINT8 Size) { if ((mDelayEmit == TRUE) && ((mObjBinLen + Size) > mObjBinLen)) { - mObjBinLen += Size; + mObjBinLen = mObjBinLen + Size; return TRUE; } else { return FALSE; @@ -248,7 +248,7 @@ public: VOID IncLength (UINT8 Size) { if ((mHeader->Length + Size) > mHeader->Length) { - mHeader->Length += Size; + mHeader->Length = mHeader->Length + Size; } } @@ -557,6 +557,7 @@ static CIfrMinMaxStepData *gCurrentMinMaxData = NULL; class CIfrFormSet : public CIfrObj, public CIfrOpHeader { private: EFI_IFR_FORM_SET *mFormSet; + EFI_GUID *mClassGuid; public: CIfrFormSet (UINT8 Size) : CIfrObj (EFI_IFR_FORM_SET_OP, (CHAR8 **)&mFormSet, Size), @@ -565,6 +566,7 @@ public: mFormSet->FormSetTitle = EFI_STRING_ID_INVALID; mFormSet->Flags = 0; memset (&mFormSet->Guid, 0, sizeof (EFI_GUID)); + mClassGuid = (EFI_GUID *) (mFormSet + 1); } VOID SetGuid (IN EFI_GUID *Guid) { @@ -580,7 +582,7 @@ public: } VOID SetClassGuid (IN EFI_GUID *Guid) { - memcpy (&(mFormSet->ClassGuid[mFormSet->Flags++]), Guid, sizeof (EFI_GUID)); + memcpy (&(mClassGuid[mFormSet->Flags++]), Guid, sizeof (EFI_GUID)); } UINT8 GetFlags() { @@ -620,10 +622,8 @@ public: #define EFI_FORM_ID_MAX 0xFFFF #define EFI_FREE_FORM_ID_BITMAP_SIZE ((EFI_FORM_ID_MAX + 1) / EFI_BITS_PER_UINT32) -class CIfrForm : public CIfrObj, public CIfrOpHeader { -private: - EFI_IFR_FORM *mForm; - +class CIfrFormId { +public: STATIC UINT32 FormIdBitMap[EFI_FREE_FORM_ID_BITMAP_SIZE]; STATIC BOOLEAN ChekFormIdFree (IN EFI_FORM_ID FormId) { @@ -639,6 +639,11 @@ private: FormIdBitMap[Index] |= (0x80000000 >> Offset); } +}; + +class CIfrForm : public CIfrObj, public CIfrOpHeader { +private: + EFI_IFR_FORM *mForm; public: CIfrForm () : CIfrObj (EFI_IFR_FORM_OP, (CHAR8 **)&mForm), @@ -654,11 +659,11 @@ public: // return VFR_RETURN_INVALID_PARAMETER; } - if (CIfrForm::ChekFormIdFree (FormId) == FALSE) { + if (CIfrFormId::ChekFormIdFree (FormId) == FALSE) { return VFR_RETURN_FORMID_REDEFINED; } mForm->FormId = FormId; - CIfrForm::MarkFormIdUsed (FormId); + CIfrFormId::MarkFormIdUsed (FormId); return VFR_RETURN_SUCCESS; } @@ -667,6 +672,44 @@ public: } }; +class CIfrFormMap : public CIfrObj, public CIfrOpHeader { +private: + EFI_IFR_FORM_MAP *mFormMap; + EFI_IFR_FORM_MAP_METHOD *mMethodMap; + +public: + CIfrFormMap () : CIfrObj (EFI_IFR_FORM_MAP_OP, (CHAR8 **)&mFormMap, sizeof (EFI_IFR_FORM_MAP), TRUE), + CIfrOpHeader (EFI_IFR_FORM_MAP_OP, &mFormMap->Header) { + mFormMap->FormId = 0; + mMethodMap = (EFI_IFR_FORM_MAP_METHOD *) (mFormMap + 1); + } + + EFI_VFR_RETURN_CODE SetFormId (IN EFI_FORM_ID FormId) { + if (FormId == 0) { + // + // FormId can't be 0. + // + return VFR_RETURN_INVALID_PARAMETER; + } + if (CIfrFormId::ChekFormIdFree (FormId) == FALSE) { + return VFR_RETURN_FORMID_REDEFINED; + } + mFormMap->FormId = FormId; + CIfrFormId::MarkFormIdUsed (FormId); + return VFR_RETURN_SUCCESS; + } + + VOID SetFormMapMethod (IN EFI_STRING_ID MethodTitle, IN EFI_GUID *MethodGuid) { + if (ExpendObjBin (sizeof (EFI_IFR_FORM_MAP_METHOD))) { + IncLength (sizeof (EFI_IFR_FORM_MAP_METHOD)); + + mMethodMap->MethodTitle = MethodTitle; + memcpy (&(mMethodMap->MethodIdentifier), MethodGuid, sizeof (EFI_GUID)); + mMethodMap ++; + } + } +}; + class CIfrVarStore : public CIfrObj, public CIfrOpHeader { private: EFI_IFR_VARSTORE *mVarStore; @@ -696,7 +739,7 @@ public: UINT8 Len; if (Name != NULL) { - Len = strlen (Name); + Len = (UINT8) strlen (Name); if (Len != 0) { if (ExpendObjBin (Len) == TRUE) { IncLength (Len); @@ -832,6 +875,66 @@ public: }; +class CIfrRead : public CIfrObj, public CIfrOpHeader{ +private: + EFI_IFR_READ *mRead; + +public: + CIfrRead () : CIfrObj (EFI_IFR_READ_OP, (CHAR8 **)&mRead), + CIfrOpHeader (EFI_IFR_READ_OP, &mRead->Header) {} + +}; + +class CIfrWrite : public CIfrObj, public CIfrOpHeader{ +private: + EFI_IFR_WRITE *mWrite; + +public: + CIfrWrite () : CIfrObj (EFI_IFR_WRITE_OP, (CHAR8 **)&mWrite), + CIfrOpHeader (EFI_IFR_WRITE_OP, &mWrite->Header) {} + +}; + +class CIfrGet : public CIfrObj, public CIfrOpHeader{ +private: + EFI_IFR_GET *mGet; + +public: + CIfrGet ( + IN UINT32 LineNo + ) : CIfrObj (EFI_IFR_GET_OP, (CHAR8 **)&mGet), + CIfrOpHeader (EFI_IFR_GET_OP, &mGet->Header) { + SetLineNo (LineNo); + } + + VOID SetVarInfo (IN EFI_VARSTORE_INFO *Info) { + mGet->VarStoreId = Info->mVarStoreId; + mGet->VarStoreInfo.VarName = Info->mInfo.mVarName; + mGet->VarStoreInfo.VarOffset = Info->mInfo.mVarOffset; + mGet->VarStoreType = Info->mVarType; + } +}; + +class CIfrSet : public CIfrObj, public CIfrOpHeader{ +private: + EFI_IFR_SET *mSet; + +public: + CIfrSet ( + IN UINT32 LineNo + ) : CIfrObj (EFI_IFR_SET_OP, (CHAR8 **)&mSet), + CIfrOpHeader (EFI_IFR_SET_OP, &mSet->Header) { + SetLineNo (LineNo); + } + + VOID SetVarInfo (IN EFI_VARSTORE_INFO *Info) { + mSet->VarStoreId = Info->mVarStoreId; + mSet->VarStoreInfo.VarName = Info->mInfo.mVarName; + mSet->VarStoreInfo.VarOffset = Info->mInfo.mVarOffset; + mSet->VarStoreType = Info->mVarType; + } +}; + class CIfrSubtitle : public CIfrObj, public CIfrOpHeader, public CIfrStatementHeader { private: EFI_IFR_SUBTITLE *mSubtitle; @@ -2310,6 +2413,19 @@ public: } }; +class CIfrMap : public CIfrObj, public CIfrOpHeader{ +private: + EFI_IFR_MAP *mMap; + +public: + CIfrMap ( + IN UINT32 LineNo + ) : CIfrObj (EFI_IFR_MAP_OP, (CHAR8 **)&mMap), + CIfrOpHeader (EFI_IFR_MAP_OP, &mMap->Header) { + SetLineNo (LineNo); + } +}; + class CIfrMatch : public CIfrObj, public CIfrOpHeader { private: EFI_IFR_MATCH *mMatch; diff --git a/BaseTools/Source/C/VfrCompile/VfrSyntax.g b/BaseTools/Source/C/VfrCompile/VfrSyntax.g index 09ec6919ec..2a4f7b6488 100644 --- a/BaseTools/Source/C/VfrCompile/VfrSyntax.g +++ b/BaseTools/Source/C/VfrCompile/VfrSyntax.g @@ -1,5 +1,5 @@ /*++ -Copyright (c) 2004 - 2009, Intel Corporation +Copyright (c) 2004 - 2010, Intel Corporation All rights reserved. This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this distribution. The full text of the license may be found at @@ -131,6 +131,9 @@ VfrParserStart ( #token EndList("endlist") "endlist" #token EndForm("endform") "endform" #token Form("form") "form" +#token FormMap("formmap") "formmap" +#token MapTitle("maptitle") "maptitle" +#token MapGuid("mapguid") "mapguid" #token Subtitle("subtitle") "subtitle" #token Help("help") "help" #token Text("text") "text" @@ -214,6 +217,8 @@ VfrParserStart ( #token Rule("rule") "rule" #token EndRule("endrule") "endrule" #token Value("value") "value" +#token Read("read") "read" +#token Write("write") "write" #token ResetButton("resetbutton") "resetbutton" #token EndResetButton("endresetbutton") "endresetbutton" #token DefaultStore("defaultstore") "defaultstore" @@ -250,7 +255,8 @@ VfrParserStart ( vfrProgram > [UINT8 Return] : << - mParserStatus = 0; + mParserStatus = 0; + mCIfrOpHdrIndex = 0; mConstantOnlyInExpression = FALSE; >> ( @@ -335,82 +341,84 @@ vfrDataStructFields : dataStructField64 : << UINT32 ArrayNum = 0; >> - "UINT64" + D:"UINT64" N:StringIdentifier { OpenBracket I:Number CloseBracket << ArrayNum = _STOU32(I->getText()); >> } - ";" << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), "UINT64", ArrayNum), N); >> + ";" << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), D->getText(), ArrayNum), N); >> ; dataStructField32 : << UINT32 ArrayNum = 0; >> - "UINT32" + D:"UINT32" N:StringIdentifier { OpenBracket I:Number CloseBracket << ArrayNum = _STOU32(I->getText()); >> } - ";" << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), "UINT32", ArrayNum), N); >> + ";" << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), D->getText(), ArrayNum), N); >> ; dataStructField16 : - << UINT32 ArrayNum = 0; >> + << + UINT32 ArrayNum = 0; + >> ("UINT16" | "CHAR16") N:StringIdentifier { OpenBracket I:Number CloseBracket << ArrayNum = _STOU32(I->getText()); >> } - ";" << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), "UINT16", ArrayNum), N); >> + ";" << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), (CHAR8 *) "UINT16", ArrayNum), N); >> ; dataStructField8 : << UINT32 ArrayNum = 0; >> - "UINT8" + D:"UINT8" N:StringIdentifier { OpenBracket I:Number CloseBracket << ArrayNum = _STOU32(I->getText()); >> } - ";" << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), "UINT8", ArrayNum), N); >> + ";" << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), D->getText(), ArrayNum), N); >> ; dataStructFieldBool : << UINT32 ArrayNum = 0; >> - "BOOLEAN" + D:"BOOLEAN" N:StringIdentifier { OpenBracket I:Number CloseBracket << ArrayNum = _STOU32(I->getText()); >> } - ";" << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), "BOOLEAN", ArrayNum), N); >> + ";" << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), D->getText(), ArrayNum), N); >> ; dataStructFieldString : << UINT32 ArrayNum = 0; >> - "EFI_STRING_ID" + D:"EFI_STRING_ID" N:StringIdentifier { OpenBracket I:Number CloseBracket << ArrayNum = _STOU32(I->getText()); >> } - ";" << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), "EFI_STRING_ID", ArrayNum), N); >> + ";" << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), D->getText(), ArrayNum), N); >> ; dataStructFieldDate : << UINT32 ArrayNum = 0; >> - "EFI_HII_DATE" + D:"EFI_HII_DATE" N:StringIdentifier { OpenBracket I:Number CloseBracket << ArrayNum = _STOU32(I->getText()); >> } - ";" << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), "EFI_HII_DATE", ArrayNum), N); >> + ";" << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), D->getText(), ArrayNum), N); >> ; dataStructFieldTime : << UINT32 ArrayNum = 0; >> - "EFI_HII_TIME" + D:"EFI_HII_TIME" N:StringIdentifier { OpenBracket I:Number CloseBracket << ArrayNum = _STOU32(I->getText()); >> } - ";" << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), "EFI_HII_TIME", ArrayNum), N); >> + ";" << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), D->getText(), ArrayNum), N); >> ; dataStructFieldUser : @@ -486,24 +494,26 @@ vfrFormSetDefinition : << switch (ClassGuidNum) { case 0: - FSObj = new CIfrFormSet(sizeof(EFI_IFR_FORM_SET)); + FSObj = new CIfrFormSet(sizeof(EFI_IFR_FORM_SET) + sizeof(EFI_GUID)); FSObj->SetClassGuid(&DefaultClassGuid); break; case 1: - FSObj = new CIfrFormSet(sizeof(EFI_IFR_FORM_SET)); + FSObj = new CIfrFormSet(sizeof(EFI_IFR_FORM_SET) + ClassGuidNum * sizeof(EFI_GUID)); FSObj->SetClassGuid(&ClassGuid1); break; case 2: - FSObj = new CIfrFormSet(sizeof(EFI_IFR_FORM_SET) + sizeof(EFI_GUID)); + FSObj = new CIfrFormSet(sizeof(EFI_IFR_FORM_SET) + ClassGuidNum * sizeof(EFI_GUID)); FSObj->SetClassGuid(&ClassGuid1); FSObj->SetClassGuid(&ClassGuid2); break; - default: - FSObj = new CIfrFormSet(sizeof(EFI_IFR_FORM_SET) + 2 * sizeof(EFI_GUID)); + case 3: + FSObj = new CIfrFormSet(sizeof(EFI_IFR_FORM_SET) + ClassGuidNum * sizeof(EFI_GUID)); FSObj->SetClassGuid(&ClassGuid1); FSObj->SetClassGuid(&ClassGuid2); FSObj->SetClassGuid(&ClassGuid3); break; + default: + break; } SET_LINE_INFO (*FSObj, L); @@ -542,6 +552,7 @@ vfrFormSetDefinition : vfrFormSetList : ( vfrFormDefinition | + vfrFormMapDefinition | vfrStatementImage | vfrStatementVarStoreLinear | vfrStatementVarStoreEfi | @@ -586,12 +597,13 @@ vfrStatementVarStoreLinear : V:Varstore << VSObj.SetLineNo(V->getLine()); >> ( TN:StringIdentifier "," << TypeName = TN->getText(); LineNum = TN->getLine(); >> - | U8:"UINT8" "," << TypeName = "UINT8"; LineNum = U8->getLine(); >> - | U16:"UINT16" "," << TypeName = "UINT16"; LineNum = U16->getLine(); >> - | U32:"UINT32" "," << TypeName = "UINT32"; LineNum = U32->getLine(); >> - | U64:"UINT64" "," << TypeName = "UINT64"; LineNum = U64->getLine(); >> - | D:"EFI_HII_DATE" "," << TypeName = "EFI_HII_DATE"; LineNum = D->getLine(); >> - | T:"EFI_HII_TIME" "," << TypeName = "EFI_HII_TIME"; LineNum = T->getLine(); >> + | U8:"UINT8" "," << TypeName = U8->getText(); LineNum = U8->getLine(); >> + | U16:"UINT16" "," << TypeName = U16->getText(); LineNum = U16->getLine(); >> + | C16:"CHAR16" "," << TypeName = (CHAR8 *) "UINT16"; LineNum = C16->getLine(); >> + | U32:"UINT32" "," << TypeName = U32->getText(); LineNum = U32->getLine(); >> + | U64:"UINT64" "," << TypeName = U64->getText(); LineNum = U64->getLine(); >> + | D:"EFI_HII_DATE" "," << TypeName = D->getText(); LineNum = D->getLine(); >> + | T:"EFI_HII_TIME" "," << TypeName = T->getText(); LineNum = T->getLine(); >> ) { Key "=" FID:Number "," << // Key is used to assign Varid in Framework VFR but no use in UEFI2.1 VFR if (mCompatibleMode) { @@ -628,7 +640,7 @@ vfrStatementVarStoreLinear : _PCATCH(mCVfrDataStorage.GetVarStoreId(StoreName, &VarStoreId), SN); VSObj.SetVarStoreId (VarStoreId); _PCATCH(gCVfrVarDataTypeDB.GetDataTypeSize(TypeName, &Size), LineNum); - VSObj.SetSize (Size); + VSObj.SetSize ((UINT16) Size); VSObj.SetName (SN->getText()); >> ";" @@ -771,11 +783,11 @@ vfrQuestionHeader[CIfrQuestionHeader & QHObj, EFI_QUESION_TYPE QType = QUESTION_ mCVfrQuestionDB.RegisterQuestion (QName, VarIdStr, QId); break; case QUESTION_DATE: - mCVfrQuestionDB.RegisterNewDateQuestion (QName, VarIdStr, QId); - break; + mCVfrQuestionDB.RegisterNewDateQuestion (QName, VarIdStr, QId); + break; case QUESTION_TIME: - mCVfrQuestionDB.RegisterNewTimeQuestion (QName, VarIdStr, QId); - break; + mCVfrQuestionDB.RegisterNewTimeQuestion (QName, VarIdStr, QId); + break; default: _PCATCH(VFR_RETURN_FATAL_ERROR); } @@ -820,7 +832,7 @@ questionheaderFlagsField[UINT8 & Flags] : | LateCheckFlag ; -vfrStorageVarId[EFI_VARSTORE_INFO & Info, CHAR8 *&QuestVarIdStr] : +vfrStorageVarId[EFI_VARSTORE_INFO & Info, CHAR8 *&QuestVarIdStr, BOOLEAN CheckFlag = TRUE] : << UINT32 Idx; UINT32 LineNo; @@ -853,9 +865,11 @@ vfrStorageVarId[EFI_VARSTORE_INFO & Info, CHAR8 *&QuestVarIdStr] : ); VfrReturnCode = mCVfrDataStorage.GetVarStoreType (SName, VarStoreType); } - _PCATCH(VfrReturnCode, SN1); - _PCATCH(mCVfrDataStorage.GetVarStoreId (SName, &$Info.mVarStoreId), SN1); - _PCATCH(mCVfrDataStorage.GetNameVarStoreInfo (&$Info, Idx), SN1); + if (CheckFlag || VfrReturnCode == VFR_RETURN_SUCCESS) { + _PCATCH(VfrReturnCode, SN1); + _PCATCH(mCVfrDataStorage.GetVarStoreId (SName, &$Info.mVarStoreId), SN1); + _PCATCH(mCVfrDataStorage.GetNameVarStoreInfo (&$Info, Idx), SN1); + } >> ) | @@ -874,17 +888,21 @@ vfrStorageVarId[EFI_VARSTORE_INFO & Info, CHAR8 *&QuestVarIdStr] : ); VfrReturnCode = mCVfrDataStorage.GetVarStoreType (SName, VarStoreType); } - _PCATCH(VfrReturnCode, SN2); - _PCATCH(mCVfrDataStorage.GetVarStoreId (SName, &$Info.mVarStoreId), SN2); - if (VarStoreType == EFI_VFR_VARSTORE_BUFFER) { - _PCATCH(mCVfrDataStorage.GetBufferVarStoreDataTypeName(SName, &TName), SN2); - _STRCAT(&VarStr, TName); + if (CheckFlag || VfrReturnCode == VFR_RETURN_SUCCESS) { + _PCATCH(VfrReturnCode, SN2); + _PCATCH(mCVfrDataStorage.GetVarStoreId (SName, &$Info.mVarStoreId), SN2); + if (VarStoreType == EFI_VFR_VARSTORE_BUFFER) { + _PCATCH(mCVfrDataStorage.GetBufferVarStoreDataTypeName(SName, &TName), SN2); + _STRCAT(&VarStr, TName); + } } >> ( "." << - _PCATCH(((VarStoreType != EFI_VFR_VARSTORE_BUFFER) ? VFR_RETURN_EFIVARSTORE_USE_ERROR : VFR_RETURN_SUCCESS), SN2); + if (CheckFlag || VfrReturnCode == VFR_RETURN_SUCCESS) { + _PCATCH(((VarStoreType != EFI_VFR_VARSTORE_BUFFER) ? VFR_RETURN_EFIVARSTORE_USE_ERROR : VFR_RETURN_SUCCESS), SN2); + } _STRCAT(&VarIdStr, "."); _STRCAT(&VarStr, "."); >> SF:StringIdentifier << _STRCAT(&VarIdStr, SF->getText()); _STRCAT(&VarStr, SF->getText()); >> @@ -1079,6 +1097,33 @@ vfrFormDefinition : ";" ; +vfrFormMapDefinition : + << + CIfrFormMap *FMapObj = NULL; + UINT32 FormMapMethodNumber = 0; + EFI_GUID Guid; + >> + F:FormMap << FMapObj = new CIfrFormMap(); FMapObj->SetLineNo(F->getLine()); >> + FormId "=" S1:Number "," << _PCATCH(FMapObj->SetFormId (_STOFID(S1->getText())), S1); >> + ( + MapTitle "=" "STRING_TOKEN" "\(" S2:Number "\)" ";" + MapGuid "=" guidDefinition[Guid] ";" << FMapObj->SetFormMapMethod (_STOFID(S2->getText()), &Guid); FormMapMethodNumber ++; >> + )* << if (FormMapMethodNumber == 0) {_PCATCH (VFR_RETURN_INVALID_PARAMETER, F->getLine(), "No MapMethod is set for FormMap!");} delete FMapObj;>> + ( + vfrStatementImage | + vfrStatementLocked | + vfrStatementRules | + vfrStatementDefault | + vfrStatementStat | + vfrStatementQuestions | + vfrStatementConditional | + vfrStatementLabel | + vfrStatementBanner + )* + E:EndForm << CRT_END_OP (E); >> + ";" + ; + vfrStatementRules : << CIfrRule RObj; >> R:Rule << RObj.SetLineNo(R->getLine()); >> @@ -1194,6 +1239,18 @@ vfrStatementValue : "=" vfrStatementExpression[0] << {CIfrEnd EndObj; EndObj.SetLineNo(V->getLine());} >> ; +vfrStatementRead : + << CIfrRead RObj; >> + R:Read << RObj.SetLineNo(R->getLine()); >> + vfrStatementExpression[0] ";" + ; + +vfrStatementWrite : + << CIfrWrite WObj; >> + W:Write << WObj.SetLineNo(W->getLine()); >> + vfrStatementExpression[0] ";" + ; + vfrStatementSubTitle : << CIfrSubtitle SObj; >> L:Subtitle << SObj.SetLineNo(L->getLine()); >> @@ -1268,8 +1325,8 @@ vfrStatementCrossReference : vfrStatementGoto : << UINT8 RefType = 1; - EFI_STRING_ID DevPath; - EFI_GUID FSId; + EFI_STRING_ID DevPath = EFI_STRING_ID_INVALID; + EFI_GUID FSId = {0,}; EFI_FORM_ID FId; EFI_QUESTION_ID QId = EFI_QUESTION_ID_INVALID; UINT32 BitMask; @@ -2046,6 +2103,8 @@ vfrStatementQuestionOptionTag : vfrStatementGrayOutIfQuest | vfrStatementValue | vfrStatementDefault | + vfrStatementRead | + vfrStatementWrite | vfrStatementOptions ; @@ -2479,6 +2538,7 @@ vfrStatementInvalidSaveRestoreDefaults : #token StringRef("stringref") "stringref" #token PushThis("pushthis") "pushthis" #token Security("security") "security" +#token Get("get") "get" #token True("TRUE") "TRUE" #token False("FALSE") "FALSE" #token One("ONE") "ONE" @@ -2490,6 +2550,7 @@ vfrStatementInvalidSaveRestoreDefaults : #token AND("AND") "AND" #token OR("OR") "OR" #token NOT("NOT") "NOT" +#token Set("set") "set" #token BitWiseNot("~") "\~" #token BoolVal("boolval") "boolval" #token StringVal("stringval") "stringval" @@ -2500,12 +2561,13 @@ vfrStatementInvalidSaveRestoreDefaults : #token Catenate("catenate") "catenate" #token QuestionRefVal("questionrefval") "questionrefval" #token StringRefVal("stringrefval") "stringrefval" +#token Map("map") "map" // // Root expression extension function called by other function. // vfrStatementExpression [UINT32 RootLevel, UINT32 ExpOpCount = 0] : - << if ($RootLevel == 0) {_CLEAR_SAVED_OPHDR ();} >> + << if ($RootLevel == 0) {mCIfrOpHdrIndex ++; if (mCIfrOpHdrIndex >= MAX_IFR_EXPRESSION_DEPTH) _PCATCH (VFR_RETURN_INVALID_PARAMETER, 0, "The depth of expression exceeds the max supported level 8!"); _CLEAR_SAVED_OPHDR ();} >> andTerm[$RootLevel, $ExpOpCount] ( L:OR andTerm[$RootLevel, $ExpOpCount] << $ExpOpCount++; CIfrOr OObj(L->getLine()); >> @@ -2517,11 +2579,15 @@ vfrStatementExpression [UINT32 RootLevel, UINT32 ExpOpCount = 0] : if ($ExpOpCount > 1 && $RootLevel == 0) { if (_SET_SAVED_OPHDR_SCOPE()) { CIfrEnd EObj; - if (mCIfrOpHdrLineNo != 0) { - EObj.SetLineNo (mCIfrOpHdrLineNo); + if (mCIfrOpHdrLineNo[mCIfrOpHdrIndex] != 0) { + EObj.SetLineNo (mCIfrOpHdrLineNo[mCIfrOpHdrIndex]); } } } + + if ($RootLevel == 0) { + mCIfrOpHdrIndex --; + } >> ; @@ -2664,6 +2730,7 @@ atomTerm [UINT32 & RootLevel, UINT32 & ExpOpCount]: | vfrExpressionConstant[$RootLevel, $ExpOpCount] | vfrExpressionUnaryOp[$RootLevel, $ExpOpCount] | vfrExpressionTernaryOp[$RootLevel, $ExpOpCount] + | vfrExpressionMap[$RootLevel, $ExpOpCount] | ( L:NOT atomTerm[$RootLevel, $ExpOpCount] << { CIfrNot NObj(L->getLine()); $ExpOpCount++; } >> @@ -2705,6 +2772,7 @@ vfrExpressionBuildInFunction [UINT32 & RootLevel, UINT32 & ExpOpCount] : | stringref1Exp[$RootLevel, $ExpOpCount] | pushthisExp[$RootLevel, $ExpOpCount] | securityExp[$RootLevel, $ExpOpCount] + | getExp[$RootLevel, $ExpOpCount] ; dupExp [UINT32 & RootLevel, UINT32 & ExpOpCount] : @@ -2937,8 +3005,8 @@ ideqvallistExp[UINT32 & RootLevel, UINT32 & ExpOpCount] : questionref13Exp[UINT32 & RootLevel, UINT32 & ExpOpCount] : << UINT8 Type = 0x1; - EFI_STRING_ID DevPath; - EFI_GUID Guid; + EFI_STRING_ID DevPath = EFI_STRING_ID_INVALID; + EFI_GUID Guid = {0,}; EFI_QUESTION_ID QId = EFI_QUESTION_ID_INVALID; UINT32 BitMask; CHAR8 *QName = NULL; @@ -2990,8 +3058,19 @@ rulerefExp[UINT32 & RootLevel, UINT32 & ExpOpCount] : // stringref (STR_FORM_SET_TITLE) // stringref1Exp[UINT32 & RootLevel, UINT32 & ExpOpCount] : + << + EFI_STRING_ID RefStringId = EFI_STRING_ID_INVALID; + >> L:StringRef - "\(" S:Number "\)" << { CIfrStringRef1 SR1Obj(L->getLine()); _SAVE_OPHDR_COND (SR1Obj, ($ExpOpCount == 0), L->getLine()); SR1Obj.SetStringId (_STOSID(S->getText())); $ExpOpCount++; } >> + "\(" + ( + "STRING_TOKEN" + "\(" + S:Number << RefStringId = _STOSID(S->getText()); >> + "\)" + | I:Number << RefStringId = _STOSID(I->getText()); >> + ) + "\)" << { CIfrStringRef1 SR1Obj(L->getLine()); _SAVE_OPHDR_COND (SR1Obj, ($ExpOpCount == 0), L->getLine()); SR1Obj.SetStringId (RefStringId); $ExpOpCount++; } >> ; pushthisExp[UINT32 & RootLevel, UINT32 & ExpOpCount] : @@ -3006,6 +3085,84 @@ securityExp[UINT32 & RootLevel, UINT32 & ExpOpCount] : "\(" guidDefinition[Guid] "\)" << { CIfrSecurity SObj(L->getLine()); _SAVE_OPHDR_COND (SObj, ($ExpOpCount == 0), L->getLine()); SObj.SetPermissions (&Guid); } $ExpOpCount++; >> ; +numericVarStoreType [UINT8 & VarType] : + "NUMERIC_SIZE_1" << $VarType = EFI_IFR_NUMERIC_SIZE_1; >> + | "NUMERIC_SIZE_2" << $VarType = EFI_IFR_NUMERIC_SIZE_2; >> + | "NUMERIC_SIZE_4" << $VarType = EFI_IFR_NUMERIC_SIZE_4; >> + | "NUMERIC_SIZE_8" << $VarType = EFI_IFR_NUMERIC_SIZE_8; >> + ; + +getExp[UINT32 & RootLevel, UINT32 & ExpOpCount] : + << + EFI_VARSTORE_INFO Info; + CHAR8 *VarIdStr = NULL; + EFI_QUESTION_ID QId = EFI_QUESTION_ID_INVALID; + UINT32 Mask = 0; + EFI_QUESION_TYPE QType = QUESTION_NORMAL; + UINT8 VarType = EFI_IFR_TYPE_UNDEFINED; + UINT32 VarSize = 0; + Info.mVarStoreId = 0; + >> + L:Get + "\(" + vfrStorageVarId[Info, VarIdStr, FALSE] + {"\|" FLAGS "=" numericVarStoreType [VarType] } + "\)" << + { + if (Info.mVarStoreId == 0) { + // support Date/Time question + mCVfrQuestionDB.GetQuestionId (NULL, VarIdStr, QId, Mask, &QType); + if (QId == EFI_QUESTION_ID_INVALID || Mask == 0 || QType == QUESTION_NORMAL) { + _PCATCH(VFR_RETURN_UNSUPPORTED, L->getLine(), "Get/Set opcode can't get the enough varstore information"); + } + if (QType == QUESTION_DATE) { + Info.mVarType = EFI_IFR_TYPE_DATE; + } else if (QType == QUESTION_TIME) { + Info.mVarType = EFI_IFR_TYPE_TIME; + } + switch (Mask) { + case DATE_YEAR_BITMASK: + Info.mInfo.mVarOffset = 0; + break; + case DATE_DAY_BITMASK: + Info.mInfo.mVarOffset = 3; + break; + case TIME_HOUR_BITMASK: + Info.mInfo.mVarOffset = 0; + break; + case TIME_MINUTE_BITMASK: + Info.mInfo.mVarOffset = 1; + break; + case TIME_SECOND_BITMASK: + Info.mInfo.mVarOffset = 2; + break; + default: + _PCATCH(VFR_RETURN_UNSUPPORTED, L->getLine(), "Get/Set opcode can't get the enough varstore information"); + break; + } + } else { + if ((mCVfrDataStorage.GetVarStoreType(Info.mVarStoreId) == EFI_VFR_VARSTORE_NAME) && (VarType == EFI_IFR_TYPE_UNDEFINED)) { + _PCATCH(VFR_RETURN_UNSUPPORTED, L->getLine(), "Get/Set opcode don't support name string"); + } + if (VarType != EFI_IFR_TYPE_UNDEFINED) { + Info.mVarType = VarType; + _PCATCH(gCVfrVarDataTypeDB.GetDataTypeSize (Info.mVarType, &VarSize), L->getLine(), "Get/Set opcode can't get var type size"); + Info.mVarTotalSize = VarSize; + } + _PCATCH(gCVfrVarDataTypeDB.GetDataTypeSize (Info.mVarType, &VarSize), L->getLine(), "Get/Set opcode can't get var type size"); + if (VarSize != Info.mVarTotalSize) { + _PCATCH(VFR_RETURN_UNSUPPORTED, L->getLine(), "Get/Set opcode don't support data array"); + } + } + CIfrGet GObj(L->getLine()); + _SAVE_OPHDR_COND (GObj, ($ExpOpCount == 0), L->getLine()); + GObj.SetVarInfo (&Info); + delete VarIdStr; + $ExpOpCount++; + } + >> + ; + vfrExpressionConstant[UINT32 & RootLevel, UINT32 & ExpOpCount] : L1:True << CIfrTrue TObj(L1->getLine()); _SAVE_OPHDR_COND (TObj, ($ExpOpCount == 0), L1->getLine()); $ExpOpCount++; >> | L2:False << CIfrFalse FObj(L2->getLine()); _SAVE_OPHDR_COND (FObj, ($ExpOpCount == 0), L2->getLine()); $ExpOpCount++; >> @@ -3026,6 +3183,7 @@ vfrExpressionUnaryOp[UINT32 & RootLevel, UINT32 & ExpOpCount] : | unintExp[$RootLevel, $ExpOpCount] | toupperExp[$RootLevel, $ExpOpCount] | tolwerExp[$RootLevel, $ExpOpCount] + | setExp[$RootLevel, $ExpOpCount] ; lengthExp[UINT32 & RootLevel, UINT32 & ExpOpCount] : @@ -3086,6 +3244,78 @@ tolwerExp[UINT32 & RootLevel, UINT32 & ExpOpCount] : << { CIfrToLower TLObj(L->getLine()); $ExpOpCount++; } >> ; +setExp[UINT32 & RootLevel, UINT32 & ExpOpCount] : + << + EFI_VARSTORE_INFO Info; + CHAR8 *VarIdStr = NULL; + EFI_QUESTION_ID QId = EFI_QUESTION_ID_INVALID; + UINT32 Mask = 0; + EFI_QUESION_TYPE QType = QUESTION_NORMAL; + UINT8 VarType = EFI_IFR_TYPE_UNDEFINED; + UINT32 VarSize = 0; + Info.mVarStoreId = 0; + >> + L:Set + "\(" + vfrStorageVarId[Info, VarIdStr, FALSE] + {"\|" FLAG "=" numericVarStoreType [VarType] } + "," vfrStatementExpressionSub[$RootLevel + 1, $ExpOpCount] + "\)" + << + { + if (Info.mVarStoreId == 0) { + // support Date/Time question + mCVfrQuestionDB.GetQuestionId (NULL, VarIdStr, QId, Mask, &QType); + if (QId == EFI_QUESTION_ID_INVALID || Mask == 0 || QType == QUESTION_NORMAL) { + _PCATCH(VFR_RETURN_UNSUPPORTED, L->getLine(), "Get/Set opcode can't get the enough varstore information"); + } + if (QType == QUESTION_DATE) { + Info.mVarType = EFI_IFR_TYPE_DATE; + } else if (QType == QUESTION_TIME) { + Info.mVarType = EFI_IFR_TYPE_TIME; + } + switch (Mask) { + case DATE_YEAR_BITMASK: + Info.mInfo.mVarOffset = 0; + break; + case DATE_DAY_BITMASK: + Info.mInfo.mVarOffset = 3; + break; + case TIME_HOUR_BITMASK: + Info.mInfo.mVarOffset = 0; + break; + case TIME_MINUTE_BITMASK: + Info.mInfo.mVarOffset = 1; + break; + case TIME_SECOND_BITMASK: + Info.mInfo.mVarOffset = 2; + break; + default: + _PCATCH(VFR_RETURN_UNSUPPORTED, L->getLine(), "Get/Set opcode can't get the enough varstore information"); + break; + } + } else { + if ((mCVfrDataStorage.GetVarStoreType(Info.mVarStoreId) == EFI_VFR_VARSTORE_NAME) && (VarType == EFI_IFR_TYPE_UNDEFINED)) { + _PCATCH(VFR_RETURN_UNSUPPORTED, L->getLine(), "Get/Set opcode don't support name string"); + } + if (VarType != EFI_IFR_TYPE_UNDEFINED) { + Info.mVarType = VarType; + _PCATCH(gCVfrVarDataTypeDB.GetDataTypeSize (Info.mVarType, &VarSize), L->getLine(), "Get/Set opcode can't get var type size"); + Info.mVarTotalSize = VarSize; + } + _PCATCH(gCVfrVarDataTypeDB.GetDataTypeSize (Info.mVarType, &VarSize), L->getLine(), "Get/Set opcode can't get var type size"); + if (VarSize != Info.mVarTotalSize) { + _PCATCH(VFR_RETURN_UNSUPPORTED, L->getLine(), "Get/Set opcode don't support data array"); + } + } + CIfrSet TSObj(L->getLine()); + TSObj.SetVarInfo (&Info); + delete VarIdStr; + $ExpOpCount++; + } + >> + ; + vfrExpressionTernaryOp[UINT32 & RootLevel, UINT32 & ExpOpCount] : conditionalExp[$RootLevel, $ExpOpCount] | findExp[$RootLevel, $ExpOpCount] @@ -3161,6 +3391,20 @@ spanExp[UINT32 & RootLevel, UINT32 & ExpOpCount] : "\)" << { CIfrSpan SObj(S->getLine()); SObj.SetFlags(Flags); $ExpOpCount++; } >> ; +vfrExpressionMap [UINT32 & RootLevel, UINT32 & ExpOpCount]: + L:Map + "\(" + vfrStatementExpressionSub[$RootLevel + 1, $ExpOpCount] + ":" << { CIfrMap MObj(L->getLine()); } >> + ( + vfrStatementExpression[0] + "," + vfrStatementExpression[0] + ";" + ) * + E:"\)" << { CIfrEnd EObj; EObj.SetLineNo(E->getLine()); $ExpOpCount++; } >> + ; + spanFlags [UINT8 & Flags] : N:Number << $Flags |= _STOU8(N->getText()); >> | "LAST_NON_MATCH" << $Flags |= 0x00; >> @@ -3185,8 +3429,9 @@ private: CVfrQuestionDB mCVfrQuestionDB; CVfrRulesDB mCVfrRulesDB; - CIfrOpHeader *mCIfrOpHdr; - UINT32 mCIfrOpHdrLineNo; + CIfrOpHeader * mCIfrOpHdr[MAX_IFR_EXPRESSION_DEPTH]; + UINT32 mCIfrOpHdrLineNo[MAX_IFR_EXPRESSION_DEPTH]; + UINT8 mCIfrOpHdrIndex; VOID _SAVE_OPHDR_COND (IN CIfrOpHeader &, IN BOOLEAN, UINT32 LineNo = 0); VOID _CLEAR_SAVED_OPHDR (VOID); BOOLEAN _SET_SAVED_OPHDR_SCOPE (VOID); @@ -3210,11 +3455,11 @@ private: UINT32 _GET_CURRQEST_ARRAY_SIZE(); public: - VOID _PCATCH (IN INTN, IN INTN, IN ANTLRTokenPtr, IN CHAR8 *); + VOID _PCATCH (IN INTN, IN INTN, IN ANTLRTokenPtr, IN CONST CHAR8 *); VOID _PCATCH (IN EFI_VFR_RETURN_CODE); VOID _PCATCH (IN EFI_VFR_RETURN_CODE, IN ANTLRTokenPtr); VOID _PCATCH (IN EFI_VFR_RETURN_CODE, IN UINT32); - VOID _PCATCH (IN EFI_VFR_RETURN_CODE, IN UINT32, IN CHAR8 *); + VOID _PCATCH (IN EFI_VFR_RETURN_CODE, IN UINT32, IN CONST CHAR8 *); VOID syn (ANTLRAbstractToken *, ANTLRChar *, SetWordType *, ANTLRTokenType, INT32); @@ -3231,7 +3476,7 @@ public: EFI_FORM_ID _STOFID (IN CHAR8 *); EFI_QUESTION_ID _STOQID (IN CHAR8 *); - VOID _STRCAT (IN OUT CHAR8 **, IN CHAR8 *); + VOID _STRCAT (IN OUT CHAR8 **, IN CONST CHAR8 *); VOID _DeclareDefaultLinearVarStore (IN UINT32); VOID _DeclareStandardDefaultStorage (IN UINT32); @@ -3259,11 +3504,11 @@ EfiVfrParser::_SAVE_OPHDR_COND ( ) { if (Cond == TRUE) { - if (mCIfrOpHdr != NULL) { + if (mCIfrOpHdr[mCIfrOpHdrIndex] != NULL) { return ; } - mCIfrOpHdr = new CIfrOpHeader(OpHdr); - mCIfrOpHdrLineNo = LineNo; + mCIfrOpHdr[mCIfrOpHdrIndex] = new CIfrOpHeader(OpHdr); + mCIfrOpHdrLineNo[mCIfrOpHdrIndex] = LineNo; } } @@ -3272,8 +3517,8 @@ EfiVfrParser::_CLEAR_SAVED_OPHDR ( VOID ) { - mCIfrOpHdr = NULL; - mCIfrOpHdrLineNo = 0; + mCIfrOpHdr[mCIfrOpHdrIndex] = NULL; + mCIfrOpHdrLineNo[mCIfrOpHdrIndex] = 0; } BOOLEAN @@ -3281,10 +3526,11 @@ EfiVfrParser::_SET_SAVED_OPHDR_SCOPE ( VOID ) { - if (mCIfrOpHdr != NULL) { - mCIfrOpHdr->SetScope (1); + if (mCIfrOpHdr[mCIfrOpHdrIndex] != NULL) { + mCIfrOpHdr[mCIfrOpHdrIndex]->SetScope (1); return TRUE; } + // // IfrOpHdr is not set, FALSE is return. // @@ -3367,7 +3613,7 @@ EfiVfrParser::_PCATCH ( IN INTN ReturnCode, IN INTN ExpectCode, IN ANTLRTokenPtr Tok, - IN CHAR8 *ErrorMsg + IN CONST CHAR8 *ErrorMsg ) { if (ReturnCode != ExpectCode) { @@ -3381,7 +3627,7 @@ EfiVfrParser::_PCATCH ( IN EFI_VFR_RETURN_CODE ReturnCode ) { - mParserStatus += gCVfrErrorHandle.HandleError (ReturnCode); + mParserStatus = mParserStatus + gCVfrErrorHandle.HandleError (ReturnCode); } VOID @@ -3390,7 +3636,7 @@ EfiVfrParser::_PCATCH ( IN ANTLRTokenPtr Tok ) { - mParserStatus += gCVfrErrorHandle.HandleError (ReturnCode, Tok->getLine(), Tok->getText()); + mParserStatus = mParserStatus + gCVfrErrorHandle.HandleError (ReturnCode, Tok->getLine(), Tok->getText()); } VOID @@ -3399,17 +3645,17 @@ EfiVfrParser::_PCATCH ( IN UINT32 LineNum ) { - mParserStatus += gCVfrErrorHandle.HandleError (ReturnCode, LineNum); + mParserStatus = mParserStatus + gCVfrErrorHandle.HandleError (ReturnCode, LineNum); } VOID EfiVfrParser::_PCATCH ( IN EFI_VFR_RETURN_CODE ReturnCode, IN UINT32 LineNum, - IN CHAR8 *ErrorMsg + IN CONST CHAR8 *ErrorMsg ) { - mParserStatus += gCVfrErrorHandle.HandleError (ReturnCode, LineNum, ErrorMsg); + mParserStatus = mParserStatus + gCVfrErrorHandle.HandleError (ReturnCode, LineNum, (CHAR8 *) ErrorMsg); } VOID @@ -3638,7 +3884,7 @@ EfiVfrParser::_STOQID ( VOID EfiVfrParser::_STRCAT ( IN OUT CHAR8 **Dest, - IN CHAR8 *Src + IN CONST CHAR8 *Src ) { CHAR8 *NewStr; @@ -3674,6 +3920,7 @@ EfiVfrParser::_DeclareDefaultFrameworkVarStore ( SVfrVarStorageNode *pNode; UINT32 TypeSize; BOOLEAN FirstNode; + CONST CHAR8 VarName[] = "Setup"; FirstNode = TRUE; pNode = mCVfrDataStorage.GetBufferVarStoreList(); @@ -3686,9 +3933,9 @@ EfiVfrParser::_DeclareDefaultFrameworkVarStore ( CIfrVarStore VSObj; VSObj.SetLineNo (LineNo); VSObj.SetVarStoreId (0x1); //the first and only one Buffer Var Store - VSObj.SetSize (TypeSize); + VSObj.SetSize ((UINT16) TypeSize); //VSObj.SetName (gCVfrVarDataTypeDB.mFirstNewDataTypeName); - VSObj.SetName ("Setup"); + VSObj.SetName ((CHAR8 *) VarName); VSObj.SetGuid (&mFormsetGuid); #ifdef VFREXP_DEBUG printf ("Create the default VarStoreName is %s\n", gCVfrVarDataTypeDB.mFirstNewDataTypeName); @@ -3703,9 +3950,9 @@ EfiVfrParser::_DeclareDefaultFrameworkVarStore ( CIfrVarStore VSObj; VSObj.SetLineNo (LineNo); VSObj.SetVarStoreId (pNode->mVarStoreId); - VSObj.SetSize (pNode->mStorageInfo.mDataType->mTotalSize); + VSObj.SetSize ((UINT16) pNode->mStorageInfo.mDataType->mTotalSize); if (FirstNode) { - VSObj.SetName ("Setup"); + VSObj.SetName ((CHAR8 *) VarName); FirstNode = FALSE; } else { VSObj.SetName (pNode->mVarStoreName); @@ -3745,6 +3992,10 @@ EfiVfrParser::_DeclareDefaultLinearVarStore ( UINT32 Index; CHAR8 **TypeNameList; UINT32 ListSize; + CONST CHAR8 DateName[] = "Date"; + CONST CHAR8 TimeName[] = "Time"; + CONST CHAR8 DateType[] = "EFI_HII_DATE"; + CONST CHAR8 TimeType[] = "EFI_HII_TIME"; gCVfrVarDataTypeDB.GetUserDefinedTypeNameList (&TypeNameList, &ListSize); @@ -3764,7 +4015,7 @@ EfiVfrParser::_DeclareDefaultLinearVarStore ( mCVfrDataStorage.GetVarStoreId(TypeNameList[Index], &VarStoreId); VSObj.SetVarStoreId (VarStoreId); gCVfrVarDataTypeDB.GetDataTypeSize(TypeNameList[Index], &Size); - VSObj.SetSize (Size); + VSObj.SetSize ((UINT16) Size); VSObj.SetName (TypeNameList[Index]); VSObj.SetGuid (&mFormsetGuid); } @@ -3773,45 +4024,45 @@ EfiVfrParser::_DeclareDefaultLinearVarStore ( // not required to declare Date and Time VarStore, // because code to support old format Data and Time // - if (gCVfrVarDataTypeDB.IsTypeNameDefined ("Date") == FALSE) { + if (gCVfrVarDataTypeDB.IsTypeNameDefined ((CHAR8 *) DateName) == FALSE) { UINT32 Size; EFI_VARSTORE_ID VarStoreId; CIfrVarStore VSObj; VSObj.SetLineNo (LineNo); mCVfrDataStorage.DeclareBufferVarStore ( - "Date", + (CHAR8 *) DateName, &mFormsetGuid, &gCVfrVarDataTypeDB, - "EFI_HII_DATE", + (CHAR8 *) DateType, EFI_VARSTORE_ID_INVALID ); - mCVfrDataStorage.GetVarStoreId("Date", &VarStoreId); + mCVfrDataStorage.GetVarStoreId((CHAR8 *) DateName, &VarStoreId); VSObj.SetVarStoreId (VarStoreId); - gCVfrVarDataTypeDB.GetDataTypeSize("EFI_HII_DATE", &Size); - VSObj.SetSize (Size); - VSObj.SetName ("Date"); + gCVfrVarDataTypeDB.GetDataTypeSize((CHAR8 *) DateType, &Size); + VSObj.SetSize ((UINT16) Size); + VSObj.SetName ((CHAR8 *) DateName); VSObj.SetGuid (&mFormsetGuid); } - if (gCVfrVarDataTypeDB.IsTypeNameDefined ("Time") == FALSE) { + if (gCVfrVarDataTypeDB.IsTypeNameDefined ((CHAR8 *) TimeName) == FALSE) { UINT32 Size; EFI_VARSTORE_ID VarStoreId; CIfrVarStore VSObj; VSObj.SetLineNo (LineNo); mCVfrDataStorage.DeclareBufferVarStore ( - "Time", + (CHAR8 *) TimeName, &mFormsetGuid, &gCVfrVarDataTypeDB, - "EFI_HII_TIME", + (CHAR8 *) TimeType, EFI_VARSTORE_ID_INVALID ); - mCVfrDataStorage.GetVarStoreId("Time", &VarStoreId); + mCVfrDataStorage.GetVarStoreId((CHAR8 *) TimeName, &VarStoreId); VSObj.SetVarStoreId (VarStoreId); - gCVfrVarDataTypeDB.GetDataTypeSize("EFI_HII_TIME", &Size); - VSObj.SetSize (Size); - VSObj.SetName ("Time"); + gCVfrVarDataTypeDB.GetDataTypeSize((CHAR8 *) TimeType, &Size); + VSObj.SetSize ((UINT16) Size); + VSObj.SetName ((CHAR8 *) TimeName); VSObj.SetGuid (&mFormsetGuid); } } @@ -3826,7 +4077,7 @@ EfiVfrParser::_DeclareStandardDefaultStorage ( // CIfrDefaultStore DSObj; - mCVfrDefaultStore.RegisterDefaultStore (DSObj.GetObjBinAddr(), "Standard Defaults", EFI_STRING_ID_INVALID, EFI_HII_DEFAULT_CLASS_STANDARD); + mCVfrDefaultStore.RegisterDefaultStore (DSObj.GetObjBinAddr(), (CHAR8 *) "Standard Defaults", EFI_STRING_ID_INVALID, EFI_HII_DEFAULT_CLASS_STANDARD); DSObj.SetLineNo (LineNo); DSObj.SetDefaultName (EFI_STRING_ID_INVALID); DSObj.SetDefaultId (EFI_HII_DEFAULT_CLASS_STANDARD); @@ -3836,7 +4087,7 @@ EfiVfrParser::_DeclareStandardDefaultStorage ( // CIfrDefaultStore DSObjMF; - mCVfrDefaultStore.RegisterDefaultStore (DSObjMF.GetObjBinAddr(), "Standard ManuFacturing", EFI_STRING_ID_INVALID, EFI_HII_DEFAULT_CLASS_MANUFACTURING); + mCVfrDefaultStore.RegisterDefaultStore (DSObjMF.GetObjBinAddr(), (CHAR8 *) "Standard ManuFacturing", EFI_STRING_ID_INVALID, EFI_HII_DEFAULT_CLASS_MANUFACTURING); DSObjMF.SetLineNo (LineNo); DSObjMF.SetDefaultName (EFI_STRING_ID_INVALID); DSObjMF.SetDefaultId (EFI_HII_DEFAULT_CLASS_MANUFACTURING); diff --git a/BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp b/BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp index f047b2c471..cae0479ad3 100644 --- a/BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp +++ b/BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp @@ -20,11 +20,11 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. VOID CVfrBinaryOutput::WriteLine ( - IN FILE *pFile, - IN UINT32 LineBytes, - IN CHAR8 *LineHeader, - IN CHAR8 *BlkBuf, - IN UINT32 BlkSize + IN FILE *pFile, + IN UINT32 LineBytes, + IN CONST CHAR8 *LineHeader, + IN CHAR8 *BlkBuf, + IN UINT32 BlkSize ) { UINT32 Index; @@ -43,11 +43,11 @@ CVfrBinaryOutput::WriteLine ( VOID CVfrBinaryOutput::WriteEnd ( - IN FILE *pFile, - IN UINT32 LineBytes, - IN CHAR8 *LineHeader, - IN CHAR8 *BlkBuf, - IN UINT32 BlkSize + IN FILE *pFile, + IN UINT32 LineBytes, + IN CONST CHAR8 *LineHeader, + IN CHAR8 *BlkBuf, + IN UINT32 BlkSize ) { UINT32 Index; @@ -287,7 +287,7 @@ CVfrBufferConfig::Write ( switch (Mode) { case 'a' : // add if (Select (Name, Id) != 0) { - if ((pItem = new SConfigItem (Name, Id, Type, Offset, Width, Value)) == NULL) { + if ((pItem = new SConfigItem (Name, Id, Type, Offset, (UINT16) Width, Value)) == NULL) { return 2; } if (mItemListHead == NULL) { @@ -455,7 +455,7 @@ CVfrBufferConfig::~CVfrBufferConfig ( CVfrBufferConfig gCVfrBufferConfig; static struct { - CHAR8 *mTypeName; + CONST CHAR8 *mTypeName; UINT8 mType; UINT32 mSize; UINT32 mAlign; @@ -744,20 +744,20 @@ CVfrVarDataTypeDB::InternalTypesListInit ( SVfrDataField *pDayField = new SVfrDataField; strcpy (pYearField->mFieldName, "Year"); - GetDataType ("UINT8", &pYearField->mFieldType); + GetDataType ((CHAR8 *)"UINT16", &pYearField->mFieldType); pYearField->mOffset = 0; pYearField->mNext = pMonthField; pYearField->mArrayNum = 0; strcpy (pMonthField->mFieldName, "Month"); - GetDataType ("UINT8", &pMonthField->mFieldType); - pMonthField->mOffset = 1; + GetDataType ((CHAR8 *)"UINT8", &pMonthField->mFieldType); + pMonthField->mOffset = 2; pMonthField->mNext = pDayField; pMonthField->mArrayNum = 0; strcpy (pDayField->mFieldName, "Day"); - GetDataType ("UINT8", &pDayField->mFieldType); - pDayField->mOffset = 2; + GetDataType ((CHAR8 *)"UINT8", &pDayField->mFieldType); + pDayField->mOffset = 3; pDayField->mNext = NULL; pDayField->mArrayNum = 0; @@ -768,19 +768,19 @@ CVfrVarDataTypeDB::InternalTypesListInit ( SVfrDataField *pSecondsField = new SVfrDataField; strcpy (pHoursField->mFieldName, "Hours"); - GetDataType ("UINT8", &pHoursField->mFieldType); + GetDataType ((CHAR8 *)"UINT8", &pHoursField->mFieldType); pHoursField->mOffset = 0; pHoursField->mNext = pMinutesField; pHoursField->mArrayNum = 0; strcpy (pMinutesField->mFieldName, "Minutes"); - GetDataType ("UINT8", &pMinutesField->mFieldType); + GetDataType ((CHAR8 *)"UINT8", &pMinutesField->mFieldType); pMinutesField->mOffset = 1; pMinutesField->mNext = pSecondsField; pMinutesField->mArrayNum = 0; strcpy (pSecondsField->mFieldName, "Seconds"); - GetDataType ("UINT8", &pSecondsField->mFieldType); + GetDataType ((CHAR8 *)"UINT8", &pSecondsField->mFieldType); pSecondsField->mOffset = 2; pSecondsField->mNext = NULL; pSecondsField->mArrayNum = 0; @@ -853,7 +853,7 @@ CVfrVarDataTypeDB::Pack ( if (Action & VFR_PACK_SHOW) { sprintf (Msg, "value of pragma pack(show) == %d", mPackAlign); - gCVfrErrorHandle.PrintMsg (LineNum, "", "Warning", Msg); + gCVfrErrorHandle.PrintMsg (LineNum, NULL, "Warning", Msg); } if (Action & VFR_PACK_PUSH) { @@ -870,7 +870,7 @@ CVfrVarDataTypeDB::Pack ( SVfrPackStackNode *pNode = NULL; if (mPackStack == NULL) { - gCVfrErrorHandle.PrintMsg (LineNum, "", "Error", "#pragma pack(pop...) : more pops than pushes"); + gCVfrErrorHandle.PrintMsg (LineNum, NULL, "Error", "#pragma pack(pop...) : more pops than pushes"); } for (pNode = mPackStack; pNode != NULL; pNode = pNode->mNext) { @@ -884,7 +884,7 @@ CVfrVarDataTypeDB::Pack ( if (Action & VFR_PACK_ASSIGN) { PackAlign = (Number > 1) ? Number + Number % 2 : Number; if ((PackAlign == 0) || (PackAlign > 16)) { - gCVfrErrorHandle.PrintMsg (LineNum, "", "Error", "expected pragma parameter to be '1', '2', '4', '8', or '16'"); + gCVfrErrorHandle.PrintMsg (LineNum, NULL, "Error", "expected pragma parameter to be '1', '2', '4', '8', or '16'"); } else { mPackAlign = PackAlign; } @@ -1127,7 +1127,7 @@ CVfrVarDataTypeDB::GetDataFieldInfo ( CHECK_ERROR_RETURN(GetTypeField (FName, pType, pField), VFR_RETURN_SUCCESS); pType = pField->mFieldType; CHECK_ERROR_RETURN(GetFieldOffset (pField, ArrayIdx, Tmp), VFR_RETURN_SUCCESS); - Offset += Tmp; + Offset = (UINT16) (Offset + Tmp); Type = GetFieldWidth (pField); Size = GetFieldSize (pField, ArrayIdx); } @@ -1386,6 +1386,7 @@ CVfrDataStorage::GetFreeVarStoreId ( // // Assign the different ID range for the different type VarStore to support Framework Vfr // + Index = 0; if ((!VfrCompatibleMode) || (VarType == EFI_VFR_VARSTORE_BUFFER)) { Index = 0; } else if (VarType == EFI_VFR_VARSTORE_EFI) { @@ -1838,13 +1839,11 @@ CVfrDataStorage::BufferVarStoreRequestElementAdd ( IN EFI_VARSTORE_INFO &Info ) { - CHAR8 NewReqElt[128] = {'\0',}; - CHAR8 *OldReqElt = NULL; SVfrVarStorageNode *pNode = NULL; EFI_IFR_TYPE_VALUE Value = gZeroEfiIfrTypeValue; for (pNode = mBufferVarStoreList; pNode != NULL; pNode = pNode->mNext) { - if (strcmp (pNode->mVarStoreName, StoreName) == NULL) { + if (strcmp (pNode->mVarStoreName, StoreName) == 0) { break; } } @@ -2024,85 +2023,6 @@ CVfrDefaultStore::GetDefaultId ( return VFR_RETURN_UNDEFINED; } -STATIC -EFI_VFR_RETURN_CODE -AltCfgItemPrintToBuffer ( - IN CHAR8 *NewAltCfg, - IN EFI_VARSTORE_INFO Info, - IN UINT8 Type, - IN EFI_IFR_TYPE_VALUE Value - ) -{ - UINT32 Index; - UINT8 *BufChar = NULL; - UINT32 Count = 0; - - if (NewAltCfg != NULL) { - Count = sprintf ( - NewAltCfg, - "&OFFSET=%x&WIDTH=%x&VALUE=", - Info.mInfo.mVarOffset, - Info.mVarTotalSize - ); - NewAltCfg += Count; - - switch (Type) { - case EFI_IFR_TYPE_NUM_SIZE_8 : - Count = sprintf (NewAltCfg, "%x", Value.u8); - NewAltCfg += Count; - break; - case EFI_IFR_TYPE_NUM_SIZE_16 : - Count = sprintf (NewAltCfg, "%x", Value.u16); - NewAltCfg += Count; - break; - case EFI_IFR_TYPE_NUM_SIZE_32 : - Count = sprintf (NewAltCfg, "%x", Value.u32); - NewAltCfg += Count; - break; - case EFI_IFR_TYPE_NUM_SIZE_64 : - Count = sprintf (NewAltCfg, "%x", Value.u64); - NewAltCfg += Count; - break; - case EFI_IFR_TYPE_BOOLEAN : - Count = sprintf (NewAltCfg, "%x", Value.b); - NewAltCfg += Count; - break; - case EFI_IFR_TYPE_TIME : -#if 1 - Count = sprintf (NewAltCfg, "%x", *((UINT32 *)(&Value.time))); - NewAltCfg += Count; -#else - BufChar = (UINT8 *)&Value.time; - for (Index = 0; Index < sizeof(EFI_HII_TIME); Index++) { - Count = sprintf (NewAltCfg, "%02x", (UINT8)BufChar[Index]); - NewAltCfg += Count; - } -#endif - break; - case EFI_IFR_TYPE_DATE : -#if 1 - Count = sprintf (NewAltCfg, "%x", *((UINT32 *)(&Value.date))); - NewAltCfg += Count; -#else - BufChar = (UINT8 *)&Value.date; - for (Index = 0; Index < sizeof(EFI_HII_DATE); Index++) { - Count = sprintf (NewAltCfg, "%02x", (UINT8)BufChar[Index]); - NewAltCfg += Count; - } -#endif - break; - case EFI_IFR_TYPE_STRING : - Count = sprintf (NewAltCfg, "%x", Value.string); - NewAltCfg += Count; - break; - case EFI_IFR_TYPE_OTHER : - return VFR_RETURN_UNSUPPORTED; - } - } - - return VFR_RETURN_FATAL_ERROR; -} - EFI_VFR_RETURN_CODE CVfrDefaultStore::BufferVarStoreAltConfigAdd ( IN EFI_VARSTORE_ID DefaultId, @@ -2340,6 +2260,7 @@ SVfrQuestionNode::SVfrQuestionNode ( mQuestionId = EFI_QUESTION_ID_INVALID; mBitMask = BitMask; mNext = NULL; + mQtype = QUESTION_NORMAL; if (Name == NULL) { mName = new CHAR8[strlen ("$DEFAULT") + 1]; @@ -2509,6 +2430,9 @@ CVfrQuestionDB::RegisterOldDateQuestion ( pNode[0]->mQuestionId = QuestionId; pNode[1]->mQuestionId = QuestionId; pNode[2]->mQuestionId = QuestionId; + pNode[0]->mQtype = QUESTION_DATE; + pNode[1]->mQtype = QUESTION_DATE; + pNode[2]->mQtype = QUESTION_DATE; pNode[0]->mNext = pNode[1]; pNode[1]->mNext = pNode[2]; pNode[2]->mNext = mQuestionList; @@ -2585,6 +2509,9 @@ CVfrQuestionDB::RegisterNewDateQuestion ( pNode[0]->mQuestionId = QuestionId; pNode[1]->mQuestionId = QuestionId; pNode[2]->mQuestionId = QuestionId; + pNode[0]->mQtype = QUESTION_DATE; + pNode[1]->mQtype = QUESTION_DATE; + pNode[2]->mQtype = QUESTION_DATE; pNode[0]->mNext = pNode[1]; pNode[1]->mNext = pNode[2]; pNode[2]->mNext = mQuestionList; @@ -2651,6 +2578,9 @@ CVfrQuestionDB::RegisterOldTimeQuestion ( pNode[0]->mQuestionId = QuestionId; pNode[1]->mQuestionId = QuestionId; pNode[2]->mQuestionId = QuestionId; + pNode[0]->mQtype = QUESTION_TIME; + pNode[1]->mQtype = QUESTION_TIME; + pNode[2]->mQtype = QUESTION_TIME; pNode[0]->mNext = pNode[1]; pNode[1]->mNext = pNode[2]; pNode[2]->mNext = mQuestionList; @@ -2727,6 +2657,9 @@ CVfrQuestionDB::RegisterNewTimeQuestion ( pNode[0]->mQuestionId = QuestionId; pNode[1]->mQuestionId = QuestionId; pNode[2]->mQuestionId = QuestionId; + pNode[0]->mQtype = QUESTION_TIME; + pNode[1]->mQtype = QUESTION_TIME; + pNode[2]->mQtype = QUESTION_TIME; pNode[0]->mNext = pNode[1]; pNode[1]->mNext = pNode[2]; pNode[2]->mNext = mQuestionList; @@ -2800,13 +2733,17 @@ CVfrQuestionDB::GetQuestionId ( IN CHAR8 *Name, IN CHAR8 *VarIdStr, OUT EFI_QUESTION_ID &QuestionId, - OUT UINT32 &BitMask + OUT UINT32 &BitMask, + OUT EFI_QUESION_TYPE *QType ) { SVfrQuestionNode *pNode; QuestionId = EFI_QUESTION_ID_INVALID; BitMask = 0x00000000; + if (QType != NULL) { + *QType = QUESTION_NORMAL; + } if ((Name == NULL) && (VarIdStr == NULL)) { return ; @@ -2827,6 +2764,9 @@ CVfrQuestionDB::GetQuestionId ( QuestionId = pNode->mQuestionId; BitMask = pNode->mBitMask; + if (QType != NULL) { + *QType = pNode->mQtype; + } break; } @@ -2877,3 +2817,4 @@ BOOLEAN VfrCompatibleMode = FALSE; CVfrVarDataTypeDB gCVfrVarDataTypeDB; + diff --git a/BaseTools/Source/C/VfrCompile/VfrUtilityLib.h b/BaseTools/Source/C/VfrCompile/VfrUtilityLib.h index cb15f280d0..27ec3d900f 100644 --- a/BaseTools/Source/C/VfrCompile/VfrUtilityLib.h +++ b/BaseTools/Source/C/VfrCompile/VfrUtilityLib.h @@ -2,7 +2,7 @@ Vfr common library functions. -Copyright (c) 2004 - 2009, Intel Corporation +Copyright (c) 2004 - 2010, Intel Corporation All rights reserved. This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this distribution. The full text of the license may be found at @@ -36,8 +36,8 @@ extern BOOLEAN VfrCompatibleMode; class CVfrBinaryOutput { public: - virtual VOID WriteLine (IN FILE *, IN UINT32, IN CHAR8 *, IN CHAR8 *, IN UINT32); - virtual VOID WriteEnd (IN FILE *, IN UINT32, IN CHAR8 *, IN CHAR8 *, IN UINT32); + virtual VOID WriteLine (IN FILE *, IN UINT32, IN CONST CHAR8 *, IN CHAR8 *, IN UINT32); + virtual VOID WriteEnd (IN FILE *, IN UINT32, IN CONST CHAR8 *, IN CHAR8 *, IN UINT32); }; UINT32 @@ -332,6 +332,7 @@ struct SVfrQuestionNode { EFI_QUESTION_ID mQuestionId; UINT32 mBitMask; SVfrQuestionNode *mNext; + EFI_QUESION_TYPE mQtype; SVfrQuestionNode (IN CHAR8 *, IN CHAR8 *, IN UINT32 BitMask = 0); ~SVfrQuestionNode (); @@ -358,7 +359,7 @@ public: VOID RegisterOldTimeQuestion (IN CHAR8 *, IN CHAR8 *, IN CHAR8 *, IN OUT EFI_QUESTION_ID &); VOID RegisterNewTimeQuestion (IN CHAR8 *, IN CHAR8 *, IN OUT EFI_QUESTION_ID &); EFI_VFR_RETURN_CODE UpdateQuestionId (IN EFI_QUESTION_ID, IN EFI_QUESTION_ID); - VOID GetQuestionId (IN CHAR8 *, IN CHAR8 *, OUT EFI_QUESTION_ID &, OUT UINT32 &); + VOID GetQuestionId (IN CHAR8 *, IN CHAR8 *, OUT EFI_QUESTION_ID &, OUT UINT32 &, OUT EFI_QUESION_TYPE *QType = NULL); EFI_VFR_RETURN_CODE FindQuestion (IN EFI_QUESTION_ID); EFI_VFR_RETURN_CODE FindQuestion (IN CHAR8 *); VOID PrintAllQuestion (IN VOID); diff --git a/BaseTools/Source/C/VolInfo/VolInfo.c b/BaseTools/Source/C/VolInfo/VolInfo.c index fc3dd113ac..60a443cced 100644 --- a/BaseTools/Source/C/VolInfo/VolInfo.c +++ b/BaseTools/Source/C/VolInfo/VolInfo.c @@ -1,6 +1,6 @@ /** @file -Copyright (c) 1999 - 2008, Intel Corporation +Copyright (c) 1999 - 2010, Intel Corporation All rights reserved. This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this distribution. The full text of the license may be found at @@ -1801,7 +1801,7 @@ Returns: // // Copyright declaration // - fprintf (stdout, "Copyright (c) 2007, Intel Corporation. All rights reserved.\n\n"); + fprintf (stdout, "Copyright (c) 2007 - 2010, Intel Corporation. All rights reserved.\n\n"); // // Details Option diff --git a/BaseTools/Source/Python/AutoGen/AutoGen.py b/BaseTools/Source/Python/AutoGen/AutoGen.py index ba026a9b26..4755e31e96 100644 --- a/BaseTools/Source/Python/AutoGen/AutoGen.py +++ b/BaseTools/Source/Python/AutoGen/AutoGen.py @@ -1,2331 +1,2047 @@ -## @file -# Generate AutoGen.h, AutoGen.c and *.depex files -# -# Copyright (c) 2007 - 2009, Intel Corporation -# All rights reserved. This program and the accompanying materials -# are licensed and made available under the terms and conditions of the BSD License -# which accompanies this distribution. The full text of the license may be found at -# http://opensource.org/licenses/bsd-license.php -# -# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. -# - -## Import Modules -# -import os -import re -import os.path as path -import copy - -import GenC -import GenMake -import GenDepex -from StringIO import StringIO - -from StrGather import * -from BuildEngine import BuildRule - -from Common.BuildToolError import * -from Common.DataType import * -from Common.Misc import * -from Common.String import * -import Common.GlobalData as GlobalData -from GenFds.FdfParser import * -from CommonDataClass.CommonClass import SkuInfoClass -from Workspace.BuildClassObject import * - -## Regular expression for splitting Dependency Expression stirng into tokens -gDepexTokenPattern = re.compile("(\(|\)|\w+| \S+\.inf)") - -## Mapping Makefile type -gMakeTypeMap = {"MSFT":"nmake", "GCC":"gmake"} - - -## Build rule configuration file -gBuildRuleFile = 'Conf/build_rule.txt' - -## default file name for AutoGen -gAutoGenCodeFileName = "AutoGen.c" -gAutoGenHeaderFileName = "AutoGen.h" -gAutoGenStringFileName = "%(module_name)sStrDefs.h" -gAutoGenStringFormFileName = "%(module_name)sStrDefs.hpk" -gAutoGenDepexFileName = "%(module_name)s.depex" - -## Base class for AutoGen -# -# This class just implements the cache mechanism of AutoGen objects. -# -class AutoGen(object): - # database to maintain the objects of xxxAutoGen - _CACHE_ = {} # (BuildTarget, ToolChain) : {ARCH : {platform file: AutoGen object}}} - - ## Factory method - # - # @param Class class object of real AutoGen class - # (WorkspaceAutoGen, ModuleAutoGen or PlatformAutoGen) - # @param Workspace Workspace directory or WorkspaceAutoGen object - # @param MetaFile The path of meta file - # @param Target Build target - # @param Toolchain Tool chain name - # @param Arch Target arch - # @param *args The specific class related parameters - # @param **kwargs The specific class related dict parameters - # - def __new__(Class, Workspace, MetaFile, Target, Toolchain, Arch, *args, **kwargs): - # check if the object has been created - Key = (Target, Toolchain) - if Key not in Class._CACHE_ or Arch not in Class._CACHE_[Key] \ - or MetaFile not in Class._CACHE_[Key][Arch]: - AutoGenObject = super(AutoGen, Class).__new__(Class) - # call real constructor - if not AutoGenObject._Init(Workspace, MetaFile, Target, Toolchain, Arch, *args, **kwargs): - return None - if Key not in Class._CACHE_: - Class._CACHE_[Key] = {} - if Arch not in Class._CACHE_[Key]: - Class._CACHE_[Key][Arch] = {} - Class._CACHE_[Key][Arch][MetaFile] = AutoGenObject - else: - AutoGenObject = Class._CACHE_[Key][Arch][MetaFile] - - return AutoGenObject - - ## hash() operator - # - # The file path of platform file will be used to represent hash value of this object - # - # @retval int Hash value of the file path of platform file - # - def __hash__(self): - return hash(self.MetaFile) - - ## str() operator - # - # The file path of platform file will be used to represent this object - # - # @retval string String of platform file path - # - def __str__(self): - return str(self.MetaFile) - - ## "==" operator - def __eq__(self, Other): - return Other and self.MetaFile == Other - -## Workspace AutoGen class -# -# This class is used mainly to control the whole platform build for different -# architecture. This class will generate top level makefile. -# -class WorkspaceAutoGen(AutoGen): - ## Real constructor of WorkspaceAutoGen - # - # This method behaves the same as __init__ except that it needs explict invoke - # (in super class's __new__ method) - # - # @param WorkspaceDir Root directory of workspace - # @param ActivePlatform Meta-file of active platform - # @param Target Build target - # @param Toolchain Tool chain name - # @param ArchList List of architecture of current build - # @param MetaFileDb Database containing meta-files - # @param BuildConfig Configuration of build - # @param ToolDefinition Tool chain definitions - # @param FlashDefinitionFile File of flash definition - # @param Fds FD list to be generated - # @param Fvs FV list to be generated - # @param SkuId SKU id from command line - # - def _Init(self, WorkspaceDir, ActivePlatform, Target, Toolchain, ArchList, MetaFileDb, - BuildConfig, ToolDefinition, FlashDefinitionFile='', Fds=[], Fvs=[], SkuId='', - ReportFile=None, ReportType=None): - self.MetaFile = ActivePlatform.MetaFile - self.WorkspaceDir = WorkspaceDir - self.Platform = ActivePlatform - self.BuildTarget = Target - self.ToolChain = Toolchain - self.ArchList = ArchList - self.SkuId = SkuId - self.ReportFile = ReportFile - self.ReportType = ReportType - - self.BuildDatabase = MetaFileDb - self.TargetTxt = BuildConfig - self.ToolDef = ToolDefinition - self.FdfFile = FlashDefinitionFile - self.FdTargetList = Fds - self.FvTargetList = Fvs - self.AutoGenObjectList = [] - - # there's many relative directory operations, so ... - os.chdir(self.WorkspaceDir) - - # parse FDF file to get PCDs in it, if any - if self.FdfFile != None and self.FdfFile != '': - Fdf = FdfParser(self.FdfFile.Path) - Fdf.ParseFile() - PcdSet = Fdf.Profile.PcdDict - ModuleList = Fdf.Profile.InfList - else: - PcdSet = {} - ModuleList = [] - - # apply SKU and inject PCDs from Flash Definition file - for Arch in self.ArchList: - Platform = self.BuildDatabase[self.MetaFile, Arch] - Platform.SkuName = self.SkuId - for Name, Guid in PcdSet: - Platform.AddPcd(Name, Guid, PcdSet[Name, Guid]) - - Pa = PlatformAutoGen(self, self.MetaFile, Target, Toolchain, Arch) - # - # Explicitly collect platform's dynamic PCDs - # - Pa.CollectPlatformDynamicPcds() - self.AutoGenObjectList.append(Pa) - - AllPcds = {} - MaxLen = 0 - for Pcd in Pa._DynaPcdList_ + Pa._NonDynaPcdList_: - if Pcd.TokenSpaceGuidCName not in AllPcds: - AllPcds[Pcd.TokenSpaceGuidCName] = {} - if Pcd.Type not in AllPcds[Pcd.TokenSpaceGuidCName]: - AllPcds[Pcd.TokenSpaceGuidCName][Pcd.Type] = [] - AllPcds[Pcd.TokenSpaceGuidCName][Pcd.Type] += [Pcd] - if len(Pcd.TokenCName) > MaxLen: - MaxLen = len(Pcd.TokenCName) - - if self.ReportFile <> None: - try: - if os.path.exists(self.ReportFile): - os.remove(self.ReportFile) - - Fd = open(self.ReportFile, "w") - - Fd.write ('===============================================================================\n') - Fd.write ('Platform Configuration Database Report\n') - Fd.write ('===============================================================================\n') - Fd.write (' *P - Platform scoped PCD override in DSC file\n') - Fd.write (' *F - Platform scoped PCD override in FDF file\n') - Fd.write (' *M - Module scoped PCD override in DSC file\n') - Fd.write (' *C - Library has a constructor\n') - Fd.write (' *D - Library has a destructor\n') - Fd.write (' *CD - Library has both a constructor and a destructor\n') - Fd.write ('===============================================================================\n') - Fd.write ('\n') - Fd.write ('===============================================================================\n') - Fd.write ('PLATFORM: %s\n' % (ActivePlatform.MetaFile)) - Fd.write ('===============================================================================\n') - for Key in AllPcds: - Fd.write ('%s\n' % (Key)) - for Type in AllPcds[Key]: - TypeName = '' - DecType = Type - if Type == 'FixedAtBuild': - TypeName = 'FIXED' - if Type == 'PatchableInModule': - TypeName = 'PATCH' - if Type == 'FeatureFlag': - TypeName = 'FLAG' - if Type == 'Dynamic': - TypeName = 'DYN' - if Type == 'DynamicHii': - TypeName = 'DYNHII' - DecType = 'Dynamic' - if Type == 'DynamicVpd': - TypeName = 'DYNVPD' - DecType = 'Dynamic' - if Type == 'DynamicEx': - TypeName = 'DEX' - DecType = 'Dynamic' - if Type == 'DynamicExHii': - TypeName = 'DEXHII' - DecType = 'Dynamic' - if Type == 'DynamicExVpd': - TypeName = 'DEXVPD' - DecType = 'Dynamic' - for Pcd in AllPcds[Key][Type]: - - DecDefaultValue = None - for F in Pa.Platform.Modules.keys(): - for Package in Pa.Platform.Modules[F].M.Module.Packages: - if (Pcd.TokenCName, Pcd.TokenSpaceGuidCName, DecType) in Package.Pcds: - if DecDefaultValue == None: - DecDefaultValue = Package.Pcds[Pcd.TokenCName, Pcd.TokenSpaceGuidCName, DecType].DefaultValue - - DscDefaultValue = None - if (Pcd.TokenCName, Pcd.TokenSpaceGuidCName) in self.BuildDatabase.WorkspaceDb.PlatformList[0].Pcds: - DscDefaultValue = self.BuildDatabase.WorkspaceDb.PlatformList[0].Pcds[(Pcd.TokenCName, Pcd.TokenSpaceGuidCName)].DefaultValue - - if Pcd.DatumType in ('UINT8', 'UINT16', 'UINT32', 'UINT64'): - if Pcd.DefaultValue.strip()[0:2].upper() == '0X': - PcdDefaultValueNumber = int(Pcd.DefaultValue.strip(), 16) - else: - PcdDefaultValueNumber = int(Pcd.DefaultValue.strip()) - - if DecDefaultValue == None: - DecMatch = True - else: - if DecDefaultValue.strip()[0:2].upper() == '0X': - DecDefaultValueNumber = int(DecDefaultValue.strip(), 16) - else: - DecDefaultValueNumber = int(DecDefaultValue.strip()) - DecMatch = (DecDefaultValueNumber == PcdDefaultValueNumber) - - if DscDefaultValue == None: - DscMatch = True - else: - if DscDefaultValue.strip()[0:2].upper() == '0X': - DscDefaultValueNumber = int(DscDefaultValue.strip(), 16) - else: - DscDefaultValueNumber = int(DscDefaultValue.strip()) - DscMatch = (DscDefaultValueNumber == PcdDefaultValueNumber) - else: - if DecDefaultValue == None: - DecMatch = True - else: - DecMatch = (DecDefaultValue == Pcd.DefaultValue) - - if DscDefaultValue == None: - DscMatch = True - else: - DscMatch = (DscDefaultValue == Pcd.DefaultValue) - - if DecMatch: - Fd.write (' %-*s: %6s %10s = %-22s\n' % (MaxLen + 2, Pcd.TokenCName, TypeName, '('+Pcd.DatumType+')', Pcd.DefaultValue)) - else: - if DscMatch: - if (Pcd.TokenCName, Key) in PcdSet: - Fd.write (' *F %-*s: %6s %10s = %-22s\n' % (MaxLen + 2, Pcd.TokenCName, TypeName, '('+Pcd.DatumType+')', Pcd.DefaultValue)) - else: - Fd.write (' *P %-*s: %6s %10s = %-22s\n' % (MaxLen + 2, Pcd.TokenCName, TypeName, '('+Pcd.DatumType+')', Pcd.DefaultValue)) - - for F in Pa.Platform.Modules.keys(): - for ModulePcd in Pa.Platform.Modules[F].M.ModulePcdList + Pa.Platform.Modules[F].M.LibraryPcdList: - if ModulePcd.TokenSpaceGuidCName <> Pcd.TokenSpaceGuidCName: - continue - if ModulePcd.TokenCName <> Pcd.TokenCName: - continue - if Pcd.DatumType in ('UINT8', 'UINT16', 'UINT32', 'UINT64'): - if ModulePcd.DefaultValue.strip()[0:2].upper() == '0X': - ModulePcdDefaultValueNumber = int(ModulePcd.DefaultValue.strip(), 16) - else: - ModulePcdDefaultValueNumber = int(ModulePcd.DefaultValue.strip()) - Match = (ModulePcdDefaultValueNumber == PcdDefaultValueNumber) - else: - Match = (ModulePcd.DefaultValue == Pcd.DefaultValue) - if Match: - continue - Fd.write (' *M %*s = %s\n' % (MaxLen + 21, str(F).split('\\')[-1], ModulePcd.DefaultValue)) - - if not DecMatch and DscMatch and DecDefaultValue <> None: - Fd.write (' %*s = %s\n' % (MaxLen + 21, 'DEC DEFAULT', DecDefaultValue)) - - Fd.write ('\n') - - Fd.write ('===============================================================================\n') - Fd.write ('===============================================================================\n') - - for F in Pa.Platform.Modules.keys(): - Fd.write ('\n') - Fd.write ('===============================================================================\n') - Fd.write ('MODULE: %s\n' % (F)) - Fd.write ('===============================================================================\n') - - Fd.write ('PLATFORM CONFIGURATION DATABASE\n') - Fd.write ('-------------------------------------------------------------------------------\n') - ModuleFirst = True - for Key in AllPcds: - First = True - for Type in AllPcds[Key]: - TypeName = '' - DecType = Type - if Type == 'FixedAtBuild': - TypeName = 'FIXED' - if Type == 'PatchableInModule': - TypeName = 'PATCH' - if Type == 'FeatureFlag': - TypeName = 'FLAG' - if Type == 'Dynamic': - TypeName = 'DYN' - if Type == 'DynamicHii': - TypeName = 'DYNHII' - DecType = 'Dynamic' - if Type == 'DynamicVpd': - TypeName = 'DYNVPD' - DecType = 'Dynamic' - if Type == 'DynamicEx': - TypeName = 'DEX' - DecType = 'Dynamic' - if Type == 'DynamicExHii': - TypeName = 'DEXHII' - DecType = 'Dynamic' - if Type == 'DynamicExVpd': - TypeName = 'DEXVPD' - DecType = 'Dynamic' - for Pcd in AllPcds[Key][Type]: - for ModulePcd in Pa.Platform.Modules[F].M.ModulePcdList + Pa.Platform.Modules[F].M.LibraryPcdList: - if ModulePcd.TokenSpaceGuidCName <> Pcd.TokenSpaceGuidCName: - continue - if ModulePcd.TokenCName <> Pcd.TokenCName: - continue - if ModulePcd.Type <> Pcd.Type: - continue - if First: - if ModuleFirst: - ModuleFirst = False - else: - Fd.write ('\n') - Fd.write ('%s\n' % (Key)) - First = False - - InfDefaultValue = ModulePcd.InfDefaultValue - if InfDefaultValue == '': - InfDefaultValue = None - - DecDefaultValue = None - for Package in Pa.Platform.Modules[F].M.Module.Packages: - if (Pcd.TokenCName, Pcd.TokenSpaceGuidCName, DecType) in Package.Pcds: - if DecDefaultValue == None: - DecDefaultValue = Package.Pcds[Pcd.TokenCName, Pcd.TokenSpaceGuidCName, DecType].DefaultValue - - DscDefaultValue = None - if (Pcd.TokenCName, Pcd.TokenSpaceGuidCName) in self.BuildDatabase.WorkspaceDb.PlatformList[0].Pcds: - DscDefaultValue = self.BuildDatabase.WorkspaceDb.PlatformList[0].Pcds[(Pcd.TokenCName, Pcd.TokenSpaceGuidCName)].DefaultValue - - DscModuleOverrideDefaultValue = None - if F in self.BuildDatabase.WorkspaceDb.PlatformList[0].Modules: - if (Pcd.TokenCName, Pcd.TokenSpaceGuidCName) in self.BuildDatabase.WorkspaceDb.PlatformList[0].Modules[F].Pcds: - DscModuleOverrideDefaultValue = self.BuildDatabase.WorkspaceDb.PlatformList[0].Modules[F].Pcds[(Pcd.TokenCName, Pcd.TokenSpaceGuidCName)].DefaultValue - - if Pcd.DatumType in ('UINT8', 'UINT16', 'UINT32', 'UINT64'): - if ModulePcd.DefaultValue.strip()[0:2].upper() == '0X': - ModulePcdDefaultValueNumber = int(ModulePcd.DefaultValue.strip(), 16) - else: - ModulePcdDefaultValueNumber = int(ModulePcd.DefaultValue.strip()) - - if DecDefaultValue == None: - DecMatch = True - else: - if DecDefaultValue.strip()[0:2].upper() == '0X': - DecDefaultValueNumber = int(DecDefaultValue.strip(), 16) - else: - DecDefaultValueNumber = int(DecDefaultValue.strip()) - DecMatch = (DecDefaultValueNumber == ModulePcdDefaultValueNumber) - - if InfDefaultValue == None: - InfMatch = True - else: - if InfDefaultValue.strip()[0:2].upper() == '0X': - InfDefaultValueNumber = int(InfDefaultValue.strip(), 16) - else: - InfDefaultValueNumber = int(InfDefaultValue.strip()) - InfMatch = (InfDefaultValueNumber == ModulePcdDefaultValueNumber) - - if DscDefaultValue == None: - DscMatch = True - else: - if DscDefaultValue.strip()[0:2].upper() == '0X': - DscDefaultValueNumber = int(DscDefaultValue.strip(), 16) - else: - DscDefaultValueNumber = int(DscDefaultValue.strip()) - DscMatch = (DscDefaultValueNumber == ModulePcdDefaultValueNumber) - else: - if DecDefaultValue == None: - DecMatch = True - else: - DecMatch = (DecDefaultValue == ModulePcd.DefaultValue) - - if InfDefaultValue == None: - InfMatch = True - else: - InfMatch = (InfDefaultValue == ModulePcd.DefaultValue) - - if DscDefaultValue == None: - DscMatch = True - else: - DscMatch = (DscDefaultValue == ModulePcd.DefaultValue) - - if DecMatch and InfMatch: - Fd.write (' %-*s: %6s %10s = %-22s\n' % (MaxLen, Pcd.TokenCName, TypeName, '('+Pcd.DatumType+')', ModulePcd.DefaultValue)) - else: - if DscMatch and DscModuleOverrideDefaultValue == None: - if (Pcd.TokenCName, Key) in PcdSet: - Fd.write (' *F %-*s: %6s %10s = %-22s\n' % (MaxLen, Pcd.TokenCName, TypeName, '('+Pcd.DatumType+')', ModulePcd.DefaultValue)) - else: - Fd.write (' *P %-*s: %6s %10s = %-22s\n' % (MaxLen, Pcd.TokenCName, TypeName, '('+Pcd.DatumType+')', ModulePcd.DefaultValue)) - else: - Fd.write (' *M %-*s: %6s %10s = %-22s\n' % (MaxLen, Pcd.TokenCName, TypeName, '('+Pcd.DatumType+')', ModulePcd.DefaultValue)) - if DscDefaultValue <> None: - Fd.write (' %*s = %s\n' % (MaxLen + 19, 'DSC DEFAULT', DscDefaultValue)) - if InfDefaultValue <> None: - Fd.write (' %*s = %s\n' % (MaxLen + 19, 'INF DEFAULT', InfDefaultValue)) - if DecDefaultValue <> None and not DecMatch: - Fd.write (' %*s = %s\n' % (MaxLen + 19, 'DEC DEFAULT', DecDefaultValue)) - Fd.write ('-------------------------------------------------------------------------------\n') - Fd.write ('LIBRARIES\n') - Fd.write ('-------------------------------------------------------------------------------\n') - for Lib in Pa.Platform.Modules[F].M.DependentLibraryList: - if len(Lib.ConstructorList) > 0: - if len(Lib.DestructorList) > 0: - Fd.write (' *CD') - else: - Fd.write (' *C ') - else: - if len(Lib.DestructorList) > 0: - Fd.write (' *D ') - else: - Fd.write (' ') - Fd.write (' %s\n' % (Lib)) - for Depex in Lib.DepexExpression[Pa.Platform.Modules[F].M.Arch, Pa.Platform.Modules[F].M.ModuleType]: - Fd.write (' DEPEX = %s\n' % (Depex)) - Fd.write ('-------------------------------------------------------------------------------\n') - - Fd.write ('MODULE DEPENDENCY EXPRESSION\n') - if len(Pa.Platform.Modules[F].M.Module.DepexExpression[Pa.Platform.Modules[F].M.Arch, Pa.Platform.Modules[F].M.ModuleType]) == 0: - Fd.write (' NONE\n') - else: - for Depex in Pa.Platform.Modules[F].M.Module.DepexExpression[Pa.Platform.Modules[F].M.Arch, Pa.Platform.Modules[F].M.ModuleType]: - Fd.write (' %s\n' % (Depex)) - Fd.write ('-------------------------------------------------------------------------------\n') - - Fd.write ('MODULE + LIBRARY DEPENDENCY EXPRESSION\n') - if Pa.Platform.Modules[F].M.ModuleType in Pa.Platform.Modules[F].M.DepexExpressionList: - if Pa.Platform.Modules[F].M.DepexExpressionList[Pa.Platform.Modules[F].M.ModuleType] == '': - Fd.write (' NONE\n') - else: - Fd.write (' %s\n' % (Pa.Platform.Modules[F].M.DepexExpressionList[Pa.Platform.Modules[F].M.ModuleType])) - else: - Fd.write (' NONE\n') - Fd.write ('-------------------------------------------------------------------------------\n') - - Fd.close() - except: - EdkLogger.error(None, FILE_OPEN_FAILURE, ExtraData=self.ReportFile) - - self._BuildDir = None - self._FvDir = None - self._MakeFileDir = None - self._BuildCommand = None - - return True - - def __repr__(self): - return "%s [%s]" % (self.MetaFile, ", ".join(self.ArchList)) - - ## Return the directory to store FV files - def _GetFvDir(self): - if self._FvDir == None: - self._FvDir = path.join(self.BuildDir, 'FV') - return self._FvDir - - ## Return the directory to store all intermediate and final files built - def _GetBuildDir(self): - return self.AutoGenObjectList[0].BuildDir - - ## Return the build output directory platform specifies - def _GetOutputDir(self): - return self.Platform.OutputDirectory - - ## Return platform name - def _GetName(self): - return self.Platform.PlatformName - - ## Return meta-file GUID - def _GetGuid(self): - return self.Platform.Guid - - ## Return platform version - def _GetVersion(self): - return self.Platform.Version - - ## Return paths of tools - def _GetToolDefinition(self): - return self.AutoGenObjectList[0].ToolDefinition - - ## Return directory of platform makefile - # - # @retval string Makefile directory - # - def _GetMakeFileDir(self): - if self._MakeFileDir == None: - self._MakeFileDir = self.BuildDir - return self._MakeFileDir - - ## Return build command string - # - # @retval string Build command string - # - def _GetBuildCommand(self): - if self._BuildCommand == None: - # BuildCommand should be all the same. So just get one from platform AutoGen - self._BuildCommand = self.AutoGenObjectList[0].BuildCommand - return self._BuildCommand - - ## Create makefile for the platform and mdoules in it - # - # @param CreateDepsMakeFile Flag indicating if the makefile for - # modules will be created as well - # - def CreateMakeFile(self, CreateDepsMakeFile=False): - # create makefile for platform - Makefile = GenMake.TopLevelMakefile(self) - if Makefile.Generate(): - EdkLogger.debug(EdkLogger.DEBUG_9, "Generated makefile for platform [%s] %s\n" % - (self.MetaFile, self.ArchList)) - else: - EdkLogger.debug(EdkLogger.DEBUG_9, "Skipped the generation of makefile for platform [%s] %s\n" % - (self.MetaFile, self.ArchList)) - - if CreateDepsMakeFile: - for Pa in self.AutoGenObjectList: - Pa.CreateMakeFile(CreateDepsMakeFile) - - ## Create autogen code for platform and modules - # - # Since there's no autogen code for platform, this method will do nothing - # if CreateModuleCodeFile is set to False. - # - # @param CreateDepsCodeFile Flag indicating if creating module's - # autogen code file or not - # - def CreateCodeFile(self, CreateDepsCodeFile=False): - if not CreateDepsCodeFile: - return - for Pa in self.AutoGenObjectList: - Pa.CreateCodeFile(CreateDepsCodeFile) - - Name = property(_GetName) - Guid = property(_GetGuid) - Version = property(_GetVersion) - OutputDir = property(_GetOutputDir) - - ToolDefinition = property(_GetToolDefinition) # toolcode : tool path - - BuildDir = property(_GetBuildDir) - FvDir = property(_GetFvDir) - MakeFileDir = property(_GetMakeFileDir) - BuildCommand = property(_GetBuildCommand) - -## AutoGen class for platform -# -# PlatformAutoGen class will process the original information in platform -# file in order to generate makefile for platform. -# -class PlatformAutoGen(AutoGen): - # - # Used to store all PCDs for both PEI and DXE phase, in order to generate - # correct PCD database - # - _DynaPcdList_ = [] - _NonDynaPcdList_ = [] - - ## The real constructor of PlatformAutoGen - # - # This method is not supposed to be called by users of PlatformAutoGen. It's - # only used by factory method __new__() to do real initialization work for an - # object of PlatformAutoGen - # - # @param Workspace WorkspaceAutoGen object - # @param PlatformFile Platform file (DSC file) - # @param Target Build target (DEBUG, RELEASE) - # @param Toolchain Name of tool chain - # @param Arch arch of the platform supports - # - def _Init(self, Workspace, PlatformFile, Target, Toolchain, Arch): - EdkLogger.debug(EdkLogger.DEBUG_9, "AutoGen platform [%s] [%s]" % (PlatformFile, Arch)) - GlobalData.gProcessingFile = "%s [%s, %s, %s]" % (PlatformFile, Arch, Toolchain, Target) - - self.MetaFile = PlatformFile - self.Workspace = Workspace - self.WorkspaceDir = Workspace.WorkspaceDir - self.ToolChain = Toolchain - self.BuildTarget = Target - self.Arch = Arch - self.SourceDir = PlatformFile.SubDir - self.SourceOverrideDir = None - self.FdTargetList = self.Workspace.FdTargetList - self.FvTargetList = self.Workspace.FvTargetList - - # flag indicating if the makefile/C-code file has been created or not - self.IsMakeFileCreated = False - self.IsCodeFileCreated = False - - self._Platform = None - self._Name = None - self._Guid = None - self._Version = None - - self._BuildRule = None - self._SourceDir = None - self._BuildDir = None - self._OutputDir = None - self._FvDir = None - self._MakeFileDir = None - self._FdfFile = None - - self._PcdTokenNumber = None # (TokenCName, TokenSpaceGuidCName) : GeneratedTokenNumber - self._DynamicPcdList = None # [(TokenCName1, TokenSpaceGuidCName1), (TokenCName2, TokenSpaceGuidCName2), ...] - self._NonDynamicPcdList = None # [(TokenCName1, TokenSpaceGuidCName1), (TokenCName2, TokenSpaceGuidCName2), ...] - - self._ToolDefinitions = None - self._ToolDefFile = None # toolcode : tool path - self._ToolChainFamily = None - self._BuildRuleFamily = None - self._BuildOption = None # toolcode : option - self._PackageList = None - self._ModuleAutoGenList = None - self._LibraryAutoGenList = None - self._BuildCommand = None - - # get the original module/package/platform objects - self.BuildDatabase = Workspace.BuildDatabase - return True - - def __repr__(self): - return "%s [%s]" % (self.MetaFile, self.Arch) - - ## Create autogen code for platform and modules - # - # Since there's no autogen code for platform, this method will do nothing - # if CreateModuleCodeFile is set to False. - # - # @param CreateModuleCodeFile Flag indicating if creating module's - # autogen code file or not - # - def CreateCodeFile(self, CreateModuleCodeFile=False): - # only module has code to be greated, so do nothing if CreateModuleCodeFile is False - if self.IsCodeFileCreated or not CreateModuleCodeFile: - return - - for Ma in self.ModuleAutoGenList: - Ma.CreateCodeFile(True) - - # don't do this twice - self.IsCodeFileCreated = True - - ## Create makefile for the platform and mdoules in it - # - # @param CreateModuleMakeFile Flag indicating if the makefile for - # modules will be created as well - # - def CreateMakeFile(self, CreateModuleMakeFile=False): - if CreateModuleMakeFile: - for ModuleFile in self.Platform.Modules: - Ma = ModuleAutoGen(self.Workspace, ModuleFile, self.BuildTarget, - self.ToolChain, self.Arch, self.MetaFile) - Ma.CreateMakeFile(True) - - # no need to create makefile for the platform more than once - if self.IsMakeFileCreated: - return - - # create makefile for platform - Makefile = GenMake.PlatformMakefile(self) - if Makefile.Generate(): - EdkLogger.debug(EdkLogger.DEBUG_9, "Generated makefile for platform [%s] [%s]\n" % - (self.MetaFile, self.Arch)) - else: - EdkLogger.debug(EdkLogger.DEBUG_9, "Skipped the generation of makefile for platform [%s] [%s]\n" % - (self.MetaFile, self.Arch)) - self.IsMakeFileCreated = True - - ## Collect dynamic PCDs - # - # Gather dynamic PCDs list from each module and their settings from platform - # This interface should be invoked explicitly when platform action is created. - # - def CollectPlatformDynamicPcds(self): - # for gathering error information - NoDatumTypePcdList = set() - - self._GuidValue = {} - for F in self.Platform.Modules.keys(): - M = ModuleAutoGen(self.Workspace, F, self.BuildTarget, self.ToolChain, self.Arch, self.MetaFile) - #GuidValue.update(M.Guids) - - self.Platform.Modules[F].M = M - - for PcdFromModule in M.ModulePcdList+M.LibraryPcdList: - # make sure that the "VOID*" kind of datum has MaxDatumSize set - if PcdFromModule.DatumType == "VOID*" and PcdFromModule.MaxDatumSize == None: - NoDatumTypePcdList.add("%s.%s [%s]" % (PcdFromModule.TokenSpaceGuidCName, PcdFromModule.TokenCName, F)) - - if PcdFromModule.Type in GenC.gDynamicPcd or PcdFromModule.Type in GenC.gDynamicExPcd: - # - # If a dynamic PCD used by a PEM module/PEI module & DXE module, - # it should be stored in Pcd PEI database, If a dynamic only - # used by DXE module, it should be stored in DXE PCD database. - # The default Phase is DXE - # - if M.ModuleType in ["PEIM", "PEI_CORE"]: - PcdFromModule.Phase = "PEI" - if PcdFromModule not in self._DynaPcdList_: - self._DynaPcdList_.append(PcdFromModule) - elif PcdFromModule.Phase == 'PEI': - # overwrite any the same PCD existing, if Phase is PEI - Index = self._DynaPcdList_.index(PcdFromModule) - self._DynaPcdList_[Index] = PcdFromModule - elif PcdFromModule not in self._NonDynaPcdList_: - self._NonDynaPcdList_.append(PcdFromModule) - - # print out error information and break the build, if error found - if len(NoDatumTypePcdList) > 0: - NoDatumTypePcdListString = "\n\t\t".join(NoDatumTypePcdList) - EdkLogger.error("build", AUTOGEN_ERROR, "PCD setting error", - File=self.MetaFile, - ExtraData="\n\tPCD(s) without MaxDatumSize:\n\t\t%s\n" - % NoDatumTypePcdListString) - self._NonDynamicPcdList = self._NonDynaPcdList_ - self._DynamicPcdList = self._DynaPcdList_ - - # - # Sort dynamic PCD list to: - # 1) If PCD's datum type is VOID* and value is unicode string which starts with L, the PCD item should - # try to be put header of dynamicd List - # 2) If PCD is HII type, the PCD item should be put after unicode type PCD - # - # The reason of sorting is make sure the unicode string is in double-byte alignment in string table. - # - UnicodePcdArray = [] - HiiPcdArray = [] - OtherPcdArray = [] - for Pcd in self._DynamicPcdList: - # just pick the a value to determine whether is unicode string type - Sku = Pcd.SkuInfoList[Pcd.SkuInfoList.keys()[0]] - PcdValue = Sku.DefaultValue - if Pcd.DatumType == 'VOID*' and PcdValue.startswith("L"): - # if found PCD which datum value is unicode string the insert to left size of UnicodeIndex - UnicodePcdArray.append(Pcd) - elif len(Sku.VariableName) > 0: - # if found HII type PCD then insert to right of UnicodeIndex - HiiPcdArray.append(Pcd) - else: - OtherPcdArray.append(Pcd) - del self._DynamicPcdList[:] - self._DynamicPcdList.extend(UnicodePcdArray) - self._DynamicPcdList.extend(HiiPcdArray) - self._DynamicPcdList.extend(OtherPcdArray) - - - ## Return the platform build data object - def _GetPlatform(self): - if self._Platform == None: - self._Platform = self.BuildDatabase[self.MetaFile, self.Arch] - return self._Platform - - ## Return platform name - def _GetName(self): - return self.Platform.PlatformName - - ## Return the meta file GUID - def _GetGuid(self): - return self.Platform.Guid - - ## Return the platform version - def _GetVersion(self): - return self.Platform.Version - - ## Return the FDF file name - def _GetFdfFile(self): - if self._FdfFile == None: - if self.Workspace.FdfFile != "": - self._FdfFile= path.join(self.WorkspaceDir, self.Workspace.FdfFile) - else: - self._FdfFile = '' - return self._FdfFile - - ## Return the build output directory platform specifies - def _GetOutputDir(self): - return self.Platform.OutputDirectory - - ## Return the directory to store all intermediate and final files built - def _GetBuildDir(self): - if self._BuildDir == None: - if os.path.isabs(self.OutputDir): - self._BuildDir = path.join( - path.abspath(self.OutputDir), - self.BuildTarget + "_" + self.ToolChain, - ) - else: - self._BuildDir = path.join( - self.WorkspaceDir, - self.OutputDir, - self.BuildTarget + "_" + self.ToolChain, - ) - return self._BuildDir - - ## Return directory of platform makefile - # - # @retval string Makefile directory - # - def _GetMakeFileDir(self): - if self._MakeFileDir == None: - self._MakeFileDir = path.join(self.BuildDir, self.Arch) - return self._MakeFileDir - - ## Return build command string - # - # @retval string Build command string - # - def _GetBuildCommand(self): - if self._BuildCommand == None: - self._BuildCommand = [] - if "MAKE" in self.ToolDefinition and "PATH" in self.ToolDefinition["MAKE"]: - self._BuildCommand += SplitOption(self.ToolDefinition["MAKE"]["PATH"]) - if "FLAGS" in self.ToolDefinition["MAKE"]: - NewOption = self.ToolDefinition["MAKE"]["FLAGS"].strip() - if NewOption != '': - self._BuildCommand += SplitOption(NewOption) - return self._BuildCommand - - ## Get tool chain definition - # - # Get each tool defition for given tool chain from tools_def.txt and platform - # - def _GetToolDefinition(self): - if self._ToolDefinitions == None: - ToolDefinition = self.Workspace.ToolDef.ToolsDefTxtDictionary - if TAB_TOD_DEFINES_COMMAND_TYPE not in self.Workspace.ToolDef.ToolsDefTxtDatabase: - EdkLogger.error('build', RESOURCE_NOT_AVAILABLE, "No tools found in configuration", - ExtraData="[%s]" % self.MetaFile) - self._ToolDefinitions = {} - DllPathList = set() - for Def in ToolDefinition: - Target, Tag, Arch, Tool, Attr = Def.split("_") - if Target != self.BuildTarget or Tag != self.ToolChain or Arch != self.Arch: - continue - - Value = ToolDefinition[Def] - # don't record the DLL - if Attr == "DLL": - DllPathList.add(Value) - continue - - if Tool not in self._ToolDefinitions: - self._ToolDefinitions[Tool] = {} - self._ToolDefinitions[Tool][Attr] = Value - - ToolsDef = '' - MakePath = '' - if GlobalData.gOptions.SilentMode and "MAKE" in self._ToolDefinitions: - if "FLAGS" not in self._ToolDefinitions["MAKE"]: - self._ToolDefinitions["MAKE"]["FLAGS"] = "" - self._ToolDefinitions["MAKE"]["FLAGS"] += " -s" - MakeFlags = '' - for Tool in self._ToolDefinitions: - for Attr in self._ToolDefinitions[Tool]: - Value = self._ToolDefinitions[Tool][Attr] - if Tool in self.BuildOption and Attr in self.BuildOption[Tool]: - # check if override is indicated - if self.BuildOption[Tool][Attr].startswith('='): - Value = self.BuildOption[Tool][Attr][1:] - else: - Value += " " + self.BuildOption[Tool][Attr] - - if Attr == "PATH": - # Don't put MAKE definition in the file - if Tool == "MAKE": - MakePath = Value - else: - ToolsDef += "%s = %s\n" % (Tool, Value) - elif Attr != "DLL": - # Don't put MAKE definition in the file - if Tool == "MAKE": - if Attr == "FLAGS": - MakeFlags = Value - else: - ToolsDef += "%s_%s = %s\n" % (Tool, Attr, Value) - ToolsDef += "\n" - - SaveFileOnChange(self.ToolDefinitionFile, ToolsDef) - for DllPath in DllPathList: - os.environ["PATH"] = DllPath + os.pathsep + os.environ["PATH"] - os.environ["MAKE_FLAGS"] = MakeFlags - - return self._ToolDefinitions - - ## Return the paths of tools - def _GetToolDefFile(self): - if self._ToolDefFile == None: - self._ToolDefFile = os.path.join(self.MakeFileDir, "TOOLS_DEF." + self.Arch) - return self._ToolDefFile - - ## Retrieve the toolchain family of given toolchain tag. Default to 'MSFT'. - def _GetToolChainFamily(self): - if self._ToolChainFamily == None: - ToolDefinition = self.Workspace.ToolDef.ToolsDefTxtDatabase - if TAB_TOD_DEFINES_FAMILY not in ToolDefinition \ - or self.ToolChain not in ToolDefinition[TAB_TOD_DEFINES_FAMILY] \ - or not ToolDefinition[TAB_TOD_DEFINES_FAMILY][self.ToolChain]: - EdkLogger.verbose("No tool chain family found in configuration for %s. Default to MSFT." \ - % self.ToolChain) - self._ToolChainFamily = "MSFT" - else: - self._ToolChainFamily = ToolDefinition[TAB_TOD_DEFINES_FAMILY][self.ToolChain] - return self._ToolChainFamily - - def _GetBuildRuleFamily(self): - if self._BuildRuleFamily == None: - ToolDefinition = self.Workspace.ToolDef.ToolsDefTxtDatabase - if TAB_TOD_DEFINES_BUILDRULEFAMILY not in ToolDefinition \ - or self.ToolChain not in ToolDefinition[TAB_TOD_DEFINES_BUILDRULEFAMILY] \ - or not ToolDefinition[TAB_TOD_DEFINES_BUILDRULEFAMILY][self.ToolChain]: - EdkLogger.verbose("No tool chain family found in configuration for %s. Default to MSFT." \ - % self.ToolChain) - self._BuildRuleFamily = "MSFT" - else: - self._BuildRuleFamily = ToolDefinition[TAB_TOD_DEFINES_BUILDRULEFAMILY][self.ToolChain] - return self._BuildRuleFamily - - ## Return the build options specific to this platform - def _GetBuildOptions(self): - if self._BuildOption == None: - self._BuildOption = self._ExpandBuildOption(self.Platform.BuildOptions) - return self._BuildOption - - ## Parse build_rule.txt in $(WORKSPACE)/Conf/build_rule.txt - # - # @retval BuildRule object - # - def _GetBuildRule(self): - if self._BuildRule == None: - BuildRuleFile = None - if TAB_TAT_DEFINES_BUILD_RULE_CONF in self.Workspace.TargetTxt.TargetTxtDictionary: - BuildRuleFile = self.Workspace.TargetTxt.TargetTxtDictionary[TAB_TAT_DEFINES_BUILD_RULE_CONF] - if BuildRuleFile in [None, '']: - BuildRuleFile = gBuildRuleFile - self._BuildRule = BuildRule(BuildRuleFile) - return self._BuildRule - - ## Summarize the packages used by modules in this platform - def _GetPackageList(self): - if self._PackageList == None: - self._PackageList = set() - for La in self.LibraryAutoGenList: - self._PackageList.update(La.DependentPackageList) - for Ma in self.ModuleAutoGenList: - self._PackageList.update(Ma.DependentPackageList) - self._PackageList = list(self._PackageList) - return self._PackageList - - ## Get list of non-dynamic PCDs - def _GetNonDynamicPcdList(self): - return self._NonDynamicPcdList - - ## Get list of dynamic PCDs - def _GetDynamicPcdList(self): - return self._DynamicPcdList - - ## Generate Token Number for all PCD - def _GetPcdTokenNumbers(self): - if self._PcdTokenNumber == None: - self._PcdTokenNumber = sdict() - TokenNumber = 1 - for Pcd in self.DynamicPcdList: - if Pcd.Phase == "PEI": - EdkLogger.debug(EdkLogger.DEBUG_5, "%s %s (%s) -> %d" % (Pcd.TokenCName, Pcd.TokenSpaceGuidCName, Pcd.Phase, TokenNumber)) - self._PcdTokenNumber[Pcd.TokenCName, Pcd.TokenSpaceGuidCName] = TokenNumber - TokenNumber += 1 - - for Pcd in self.DynamicPcdList: - if Pcd.Phase == "DXE": - EdkLogger.debug(EdkLogger.DEBUG_5, "%s %s (%s) -> %d" % (Pcd.TokenCName, Pcd.TokenSpaceGuidCName, Pcd.Phase, TokenNumber)) - self._PcdTokenNumber[Pcd.TokenCName, Pcd.TokenSpaceGuidCName] = TokenNumber - TokenNumber += 1 - - for Pcd in self.NonDynamicPcdList: - self._PcdTokenNumber[Pcd.TokenCName, Pcd.TokenSpaceGuidCName] = TokenNumber - TokenNumber += 1 - return self._PcdTokenNumber - - ## Summarize ModuleAutoGen objects of all modules/libraries to be built for this platform - def _GetAutoGenObjectList(self): - self._ModuleAutoGenList = [] - self._LibraryAutoGenList = [] - for ModuleFile in self.Platform.Modules: - Ma = ModuleAutoGen( - self.Workspace, - ModuleFile, - self.BuildTarget, - self.ToolChain, - self.Arch, - self.MetaFile - ) - if Ma not in self._ModuleAutoGenList: - self._ModuleAutoGenList.append(Ma) - for La in Ma.LibraryAutoGenList: - if La not in self._LibraryAutoGenList: - self._LibraryAutoGenList.append(La) - - ## Summarize ModuleAutoGen objects of all modules to be built for this platform - def _GetModuleAutoGenList(self): - if self._ModuleAutoGenList == None: - self._GetAutoGenObjectList() - return self._ModuleAutoGenList - - ## Summarize ModuleAutoGen objects of all libraries to be built for this platform - def _GetLibraryAutoGenList(self): - if self._LibraryAutoGenList == None: - self._GetAutoGenObjectList() - return self._LibraryAutoGenList - - ## Test if a module is supported by the platform - # - # An error will be raised directly if the module or its arch is not supported - # by the platform or current configuration - # - def ValidModule(self, Module): - return Module in self.Platform.Modules or Module in self.Platform.LibraryInstances - - ## Resolve the library classes in a module to library instances - # - # This method will not only resolve library classes but also sort the library - # instances according to the dependency-ship. - # - # @param Module The module from which the library classes will be resolved - # - # @retval library_list List of library instances sorted - # - def ApplyLibraryInstance(self, Module): - ModuleType = Module.ModuleType - - # for overridding library instances with module specific setting - PlatformModule = self.Platform.Modules[str(Module)] - - # add forced library instances (specified under LibraryClasses sections) - for LibraryClass in self.Platform.LibraryClasses.GetKeys(): - if LibraryClass.startswith("NULL"): - Module.LibraryClasses[LibraryClass] = self.Platform.LibraryClasses[LibraryClass] - - # add forced library instances (specified in module overrides) - for LibraryClass in PlatformModule.LibraryClasses: - if LibraryClass.startswith("NULL"): - Module.LibraryClasses[LibraryClass] = PlatformModule.LibraryClasses[LibraryClass] - - # R9 module - LibraryConsumerList = [Module] - Constructor = [] - ConsumedByList = sdict() - LibraryInstance = sdict() - - EdkLogger.verbose("") - EdkLogger.verbose("Library instances of module [%s] [%s]:" % (str(Module), self.Arch)) - while len(LibraryConsumerList) > 0: - M = LibraryConsumerList.pop() - for LibraryClassName in M.LibraryClasses: - if LibraryClassName not in LibraryInstance: - # override library instance for this module - if LibraryClassName in PlatformModule.LibraryClasses: - LibraryPath = PlatformModule.LibraryClasses[LibraryClassName] - else: - LibraryPath = self.Platform.LibraryClasses[LibraryClassName, ModuleType] - if LibraryPath == None or LibraryPath == "": - LibraryPath = M.LibraryClasses[LibraryClassName] - if LibraryPath == None or LibraryPath == "": - EdkLogger.error("build", RESOURCE_NOT_AVAILABLE, - "Instance of library class [%s] is not found" % LibraryClassName, - File=self.MetaFile, - ExtraData="in [%s] [%s]\n\tconsumed by module [%s]" % (str(M), self.Arch, str(Module))) - - LibraryModule = self.BuildDatabase[LibraryPath, self.Arch] - # for those forced library instance (NULL library), add a fake library class - if LibraryClassName.startswith("NULL"): - LibraryModule.LibraryClass.append(LibraryClassObject(LibraryClassName, [ModuleType])) - elif LibraryModule.LibraryClass == None \ - or len(LibraryModule.LibraryClass) == 0 \ - or (ModuleType != 'USER_DEFINED' - and ModuleType not in LibraryModule.LibraryClass[0].SupModList): - # only USER_DEFINED can link against any library instance despite of its SupModList - EdkLogger.error("build", OPTION_MISSING, - "Module type [%s] is not supported by library instance [%s]" \ - % (ModuleType, LibraryPath), File=self.MetaFile, - ExtraData="consumed by [%s]" % str(Module)) - - LibraryInstance[LibraryClassName] = LibraryModule - LibraryConsumerList.append(LibraryModule) - EdkLogger.verbose("\t" + str(LibraryClassName) + " : " + str(LibraryModule)) - else: - LibraryModule = LibraryInstance[LibraryClassName] - - if LibraryModule == None: - continue - - if LibraryModule.ConstructorList != [] and LibraryModule not in Constructor: - Constructor.append(LibraryModule) - - if LibraryModule not in ConsumedByList: - ConsumedByList[LibraryModule] = [] - # don't add current module itself to consumer list - if M != Module: - if M in ConsumedByList[LibraryModule]: - continue - ConsumedByList[LibraryModule].append(M) - # - # Initialize the sorted output list to the empty set - # - SortedLibraryList = [] - # - # Q <- Set of all nodes with no incoming edges - # - LibraryList = [] #LibraryInstance.values() - Q = [] - for LibraryClassName in LibraryInstance: - M = LibraryInstance[LibraryClassName] - LibraryList.append(M) - if ConsumedByList[M] == []: - Q.append(M) - - # - # start the DAG algorithm - # - while True: - EdgeRemoved = True - while Q == [] and EdgeRemoved: - EdgeRemoved = False - # for each node Item with a Constructor - for Item in LibraryList: - if Item not in Constructor: - continue - # for each Node without a constructor with an edge e from Item to Node - for Node in ConsumedByList[Item]: - if Node in Constructor: - continue - # remove edge e from the graph if Node has no constructor - ConsumedByList[Item].remove(Node) - EdgeRemoved = True - if ConsumedByList[Item] == []: - # insert Item into Q - Q.insert(0, Item) - break - if Q != []: - break - # DAG is done if there's no more incoming edge for all nodes - if Q == []: - break - - # remove node from Q - Node = Q.pop() - # output Node - SortedLibraryList.append(Node) - - # for each node Item with an edge e from Node to Item do - for Item in LibraryList: - if Node not in ConsumedByList[Item]: - continue - # remove edge e from the graph - ConsumedByList[Item].remove(Node) - - if ConsumedByList[Item] != []: - continue - # insert Item into Q, if Item has no other incoming edges - Q.insert(0, Item) - - # - # if any remaining node Item in the graph has a constructor and an incoming edge, then the graph has a cycle - # - for Item in LibraryList: - if ConsumedByList[Item] != [] and Item in Constructor and len(Constructor) > 1: - ErrorMessage = "\tconsumed by " + "\n\tconsumed by ".join([str(L) for L in ConsumedByList[Item]]) - EdkLogger.error("build", BUILD_ERROR, 'Library [%s] with constructors has a cycle' % str(Item), - ExtraData=ErrorMessage, File=self.MetaFile) - if Item not in SortedLibraryList: - SortedLibraryList.append(Item) - - # - # Build the list of constructor and destructir names - # The DAG Topo sort produces the destructor order, so the list of constructors must generated in the reverse order - # - SortedLibraryList.reverse() - return SortedLibraryList - - - ## Override PCD setting (type, value, ...) - # - # @param ToPcd The PCD to be overrided - # @param FromPcd The PCD overrideing from - # - def _OverridePcd(self, ToPcd, FromPcd, Module=""): - # - # in case there's PCDs coming from FDF file, which have no type given. - # at this point, ToPcd.Type has the type found from dependent - # package - # - if FromPcd != None: - if ToPcd.Pending and FromPcd.Type not in [None, '']: - ToPcd.Type = FromPcd.Type - elif ToPcd.Type not in [None, ''] and FromPcd.Type not in [None, ''] \ - and ToPcd.Type != FromPcd.Type: - EdkLogger.error("build", OPTION_CONFLICT, "Mismatched PCD type", - ExtraData="%s.%s is defined as [%s] in module %s, but as [%s] in platform."\ - % (ToPcd.TokenSpaceGuidCName, ToPcd.TokenCName, - ToPcd.Type, Module, FromPcd.Type), - File=self.MetaFile) - - if FromPcd.MaxDatumSize not in [None, '']: - ToPcd.MaxDatumSize = FromPcd.MaxDatumSize - if FromPcd.DefaultValue not in [None, '']: - ToPcd.DefaultValue = FromPcd.DefaultValue - if FromPcd.TokenValue not in [None, '']: - ToPcd.TokenValue = FromPcd.TokenValue - if FromPcd.MaxDatumSize not in [None, '']: - ToPcd.MaxDatumSize = FromPcd.MaxDatumSize - if FromPcd.DatumType not in [None, '']: - ToPcd.DatumType = FromPcd.DatumType - if FromPcd.SkuInfoList not in [None, '', []]: - ToPcd.SkuInfoList = FromPcd.SkuInfoList - - # check the validation of datum - IsValid, Cause = CheckPcdDatum(ToPcd.DatumType, ToPcd.DefaultValue) - if not IsValid: - EdkLogger.error('build', FORMAT_INVALID, Cause, File=self.MetaFile, - ExtraData="%s.%s" % (ToPcd.TokenSpaceGuidCName, ToPcd.TokenCName)) - - if ToPcd.DatumType == "VOID*" and ToPcd.MaxDatumSize in ['', None]: - EdkLogger.debug(EdkLogger.DEBUG_9, "No MaxDatumSize specified for PCD %s.%s" \ - % (ToPcd.TokenSpaceGuidCName, ToPcd.TokenCName)) - Value = ToPcd.DefaultValue - if Value in [None, '']: - ToPcd.MaxDatumSize = 1 - elif Value[0] == 'L': - ToPcd.MaxDatumSize = str(len(Value) * 2) - elif Value[0] == '{': - ToPcd.MaxDatumSize = str(len(Value.split(','))) - else: - ToPcd.MaxDatumSize = str(len(Value)) - - # apply default SKU for dynamic PCDS if specified one is not available - if (ToPcd.Type in PCD_DYNAMIC_TYPE_LIST or ToPcd.Type in PCD_DYNAMIC_EX_TYPE_LIST) \ - and ToPcd.SkuInfoList in [None, {}, '']: - if self.Platform.SkuName in self.Platform.SkuIds: - SkuName = self.Platform.SkuName - else: - SkuName = 'DEFAULT' - ToPcd.SkuInfoList = { - SkuName : SkuInfoClass(SkuName, self.Platform.SkuIds[SkuName], '', '', '', '', '', ToPcd.DefaultValue) - } - - ## Apply PCD setting defined platform to a module - # - # @param Module The module from which the PCD setting will be overrided - # - # @retval PCD_list The list PCDs with settings from platform - # - def ApplyPcdSetting(self, Module, Pcds): - # for each PCD in module - for Name,Guid in Pcds: - PcdInModule = Pcds[Name,Guid] - # find out the PCD setting in platform - if (Name,Guid) in self.Platform.Pcds: - PcdInPlatform = self.Platform.Pcds[Name,Guid] - else: - PcdInPlatform = None - # then override the settings if any - self._OverridePcd(PcdInModule, PcdInPlatform, Module) - # resolve the VariableGuid value - for SkuId in PcdInModule.SkuInfoList: - Sku = PcdInModule.SkuInfoList[SkuId] - if Sku.VariableGuid == '': continue - Sku.VariableGuidValue = GuidValue(Sku.VariableGuid, self.PackageList) - if Sku.VariableGuidValue == None: - PackageList = "\n\t".join([str(P) for P in self.PackageList]) - EdkLogger.error( - 'build', - RESOURCE_NOT_AVAILABLE, - "Value of GUID [%s] is not found in" % Sku.VariableGuid, - ExtraData=PackageList + "\n\t(used with %s.%s from module %s)" \ - % (Guid, Name, str(Module)), - File=self.MetaFile - ) - - # override PCD settings with module specific setting - if Module in self.Platform.Modules: - PlatformModule = self.Platform.Modules[str(Module)] - for Key in PlatformModule.Pcds: - if Key in Pcds: - self._OverridePcd(Pcds[Key], PlatformModule.Pcds[Key], Module) - return Pcds.values() - - ## Resolve library names to library modules - # - # (for R8.x modules) - # - # @param Module The module from which the library names will be resolved - # - # @retval library_list The list of library modules - # - def ResolveLibraryReference(self, Module): - EdkLogger.verbose("") - EdkLogger.verbose("Library instances of module [%s] [%s]:" % (str(Module), self.Arch)) - LibraryConsumerList = [Module] - - # "CompilerStub" is a must for R8 modules - if Module.Libraries: - Module.Libraries.append("CompilerStub") - LibraryList = [] - while len(LibraryConsumerList) > 0: - M = LibraryConsumerList.pop() - for LibraryName in M.Libraries: - Library = self.Platform.LibraryClasses[LibraryName, ':dummy:'] - if Library == None: - for Key in self.Platform.LibraryClasses.data.keys(): - if LibraryName.upper() == Key.upper(): - Library = self.Platform.LibraryClasses[Key, ':dummy:'] - break - if Library == None: - EdkLogger.warn("build", "Library [%s] is not found" % LibraryName, File=str(M), - ExtraData="\t%s [%s]" % (str(Module), self.Arch)) - continue - - if Library not in LibraryList: - LibraryList.append(Library) - LibraryConsumerList.append(Library) - EdkLogger.verbose("\t" + LibraryName + " : " + str(Library) + ' ' + str(type(Library))) - return LibraryList - - ## Expand * in build option key - # - # @param Options Options to be expanded - # - # @retval options Options expanded - # - def _ExpandBuildOption(self, Options): - BuildOptions = {} - FamilyMatch = False - FamilyIsNull = True - for Key in Options: - Family = Key[0] - Target, Tag, Arch, Tool, Attr = Key[1].split("_") - # if tool chain family doesn't match, skip it - if Tool in self.ToolDefinition and Family != "": - FamilyIsNull = False - if self.ToolDefinition[Tool].get(TAB_TOD_DEFINES_BUILDRULEFAMILY, "") != "": - if Family != self.ToolDefinition[Tool][TAB_TOD_DEFINES_BUILDRULEFAMILY]: - continue - elif Family != self.ToolDefinition[Tool][TAB_TOD_DEFINES_FAMILY]: - continue - FamilyMatch = True - # expand any wildcard - if Target == "*" or Target == self.BuildTarget: - if Tag == "*" or Tag == self.ToolChain: - if Arch == "*" or Arch == self.Arch: - if Tool not in BuildOptions: - BuildOptions[Tool] = {} - if Attr != "FLAGS" or Attr not in BuildOptions[Tool]: - BuildOptions[Tool][Attr] = Options[Key] - else: - # append options for the same tool - BuildOptions[Tool][Attr] += " " + Options[Key] - # Build Option Family has been checked, which need't to be checked again for family. - if FamilyMatch or FamilyIsNull: - return BuildOptions - - for Key in Options: - Family = Key[0] - Target, Tag, Arch, Tool, Attr = Key[1].split("_") - # if tool chain family doesn't match, skip it - if Tool not in self.ToolDefinition or Family =="": - continue - # option has been added before - if Family != self.ToolDefinition[Tool][TAB_TOD_DEFINES_FAMILY]: - continue - - # expand any wildcard - if Target == "*" or Target == self.BuildTarget: - if Tag == "*" or Tag == self.ToolChain: - if Arch == "*" or Arch == self.Arch: - if Tool not in BuildOptions: - BuildOptions[Tool] = {} - if Attr != "FLAGS" or Attr not in BuildOptions[Tool]: - BuildOptions[Tool][Attr] = Options[Key] - else: - # append options for the same tool - BuildOptions[Tool][Attr] += " " + Options[Key] - return BuildOptions - - ## Append build options in platform to a module - # - # @param Module The module to which the build options will be appened - # - # @retval options The options appended with build options in platform - # - def ApplyBuildOption(self, Module): - PlatformOptions = self.BuildOption - ModuleOptions = self._ExpandBuildOption(Module.BuildOptions) - if Module in self.Platform.Modules: - PlatformModule = self.Platform.Modules[str(Module)] - PlatformModuleOptions = self._ExpandBuildOption(PlatformModule.BuildOptions) - else: - PlatformModuleOptions = {} - - AllTools = set(ModuleOptions.keys() + PlatformOptions.keys() + PlatformModuleOptions.keys() + self.ToolDefinition.keys()) - BuildOptions = {} - for Tool in AllTools: - if Tool not in BuildOptions: - BuildOptions[Tool] = {} - - for Options in [self.ToolDefinition, ModuleOptions, PlatformOptions, PlatformModuleOptions]: - if Tool not in Options: - continue - for Attr in Options[Tool]: - Value = Options[Tool][Attr] - if Attr not in BuildOptions[Tool]: - BuildOptions[Tool][Attr] = "" - # check if override is indicated - if Value.startswith('='): - BuildOptions[Tool][Attr] = Value[1:] - else: - BuildOptions[Tool][Attr] += " " + Value - return BuildOptions - - Platform = property(_GetPlatform) - Name = property(_GetName) - Guid = property(_GetGuid) - Version = property(_GetVersion) - - OutputDir = property(_GetOutputDir) - BuildDir = property(_GetBuildDir) - MakeFileDir = property(_GetMakeFileDir) - FdfFile = property(_GetFdfFile) - - PcdTokenNumber = property(_GetPcdTokenNumbers) # (TokenCName, TokenSpaceGuidCName) : GeneratedTokenNumber - DynamicPcdList = property(_GetDynamicPcdList) # [(TokenCName1, TokenSpaceGuidCName1), (TokenCName2, TokenSpaceGuidCName2), ...] - NonDynamicPcdList = property(_GetNonDynamicPcdList) # [(TokenCName1, TokenSpaceGuidCName1), (TokenCName2, TokenSpaceGuidCName2), ...] - PackageList = property(_GetPackageList) - - ToolDefinition = property(_GetToolDefinition) # toolcode : tool path - ToolDefinitionFile = property(_GetToolDefFile) # toolcode : lib path - ToolChainFamily = property(_GetToolChainFamily) - BuildRuleFamily = property(_GetBuildRuleFamily) - BuildOption = property(_GetBuildOptions) # toolcode : option - - BuildCommand = property(_GetBuildCommand) - BuildRule = property(_GetBuildRule) - ModuleAutoGenList = property(_GetModuleAutoGenList) - LibraryAutoGenList = property(_GetLibraryAutoGenList) - -## ModuleAutoGen class -# -# This class encapsules the AutoGen behaviors for the build tools. In addition to -# the generation of AutoGen.h and AutoGen.c, it will generate *.depex file according -# to the [depex] section in module's inf file. -# -class ModuleAutoGen(AutoGen): - ## The real constructor of ModuleAutoGen - # - # This method is not supposed to be called by users of ModuleAutoGen. It's - # only used by factory method __new__() to do real initialization work for an - # object of ModuleAutoGen - # - # @param Workspace EdkIIWorkspaceBuild object - # @param ModuleFile The path of module file - # @param Target Build target (DEBUG, RELEASE) - # @param Toolchain Name of tool chain - # @param Arch The arch the module supports - # @param PlatformFile Platform meta-file - # - def _Init(self, Workspace, ModuleFile, Target, Toolchain, Arch, PlatformFile): - EdkLogger.debug(EdkLogger.DEBUG_9, "AutoGen module [%s] [%s]" % (ModuleFile, Arch)) - GlobalData.gProcessingFile = "%s [%s, %s, %s]" % (ModuleFile, Arch, Toolchain, Target) - - self.Workspace = Workspace - self.WorkspaceDir = Workspace.WorkspaceDir - - self.MetaFile = ModuleFile - self.PlatformInfo = PlatformAutoGen(Workspace, PlatformFile, Target, Toolchain, Arch) - # check if this module is employed by active platform - if not self.PlatformInfo.ValidModule(self.MetaFile): - EdkLogger.verbose("Module [%s] for [%s] is not employed by active platform\n" \ - % (self.MetaFile, Arch)) - return False - - self.SourceDir = self.MetaFile.SubDir - self.SourceOverrideDir = None - # use overrided path defined in DSC file - if self.MetaFile.Key in GlobalData.gOverrideDir: - self.SourceOverrideDir = GlobalData.gOverrideDir[self.MetaFile.Key] - - self.ToolChain = Toolchain - self.BuildTarget = Target - self.Arch = Arch - self.ToolChainFamily = self.PlatformInfo.ToolChainFamily - self.BuildRuleFamily = self.PlatformInfo.BuildRuleFamily - - self.IsMakeFileCreated = False - self.IsCodeFileCreated = False - - self.BuildDatabase = self.Workspace.BuildDatabase - - self._Module = None - self._Name = None - self._Guid = None - self._Version = None - self._ModuleType = None - self._ComponentType = None - self._PcdIsDriver = None - self._AutoGenVersion = None - self._LibraryFlag = None - self._CustomMakefile = None - self._Macro = None - - self._BuildDir = None - self._OutputDir = None - self._DebugDir = None - self._MakeFileDir = None - - self._IncludePathList = None - self._AutoGenFileList = None - self._UnicodeFileList = None - self._SourceFileList = None - self._ObjectFileList = None - self._BinaryFileList = None - - self._DependentPackageList = None - self._DependentLibraryList = None - self._LibraryAutoGenList = None - self._DerivedPackageList = None - self._ModulePcdList = None - self._LibraryPcdList = None - self._GuidList = None - self._ProtocolList = None - self._PpiList = None - self._DepexList = None - self._DepexExpressionList = None - self._BuildOption = None - self._BuildTargets = None - self._IntroBuildTargetList = None - self._FinalBuildTargetList = None - self._FileTypes = None - self._BuildRules = None - - return True - - def __repr__(self): - return "%s [%s]" % (self.MetaFile, self.Arch) - - # Macros could be used in build_rule.txt (also Makefile) - def _GetMacros(self): - if self._Macro == None: - self._Macro = sdict() - self._Macro["WORKSPACE" ] = self.WorkspaceDir - self._Macro["MODULE_NAME" ] = self.Name - self._Macro["MODULE_GUID" ] = self.Guid - self._Macro["MODULE_VERSION" ] = self.Version - self._Macro["MODULE_TYPE" ] = self.ModuleType - self._Macro["MODULE_FILE" ] = str(self.MetaFile) - self._Macro["MODULE_FILE_BASE_NAME" ] = self.MetaFile.BaseName - self._Macro["MODULE_RELATIVE_DIR" ] = self.SourceDir - self._Macro["MODULE_DIR" ] = self.SourceDir - - self._Macro["BASE_NAME" ] = self.Name - - self._Macro["ARCH" ] = self.Arch - self._Macro["TOOLCHAIN" ] = self.ToolChain - self._Macro["TOOLCHAIN_TAG" ] = self.ToolChain - self._Macro["TARGET" ] = self.BuildTarget - - self._Macro["BUILD_DIR" ] = self.PlatformInfo.BuildDir - self._Macro["BIN_DIR" ] = os.path.join(self.PlatformInfo.BuildDir, self.Arch) - self._Macro["LIB_DIR" ] = os.path.join(self.PlatformInfo.BuildDir, self.Arch) - self._Macro["MODULE_BUILD_DIR" ] = self.BuildDir - self._Macro["OUTPUT_DIR" ] = self.OutputDir - self._Macro["DEBUG_DIR" ] = self.DebugDir - return self._Macro - - ## Return the module build data object - def _GetModule(self): - if self._Module == None: - self._Module = self.Workspace.BuildDatabase[self.MetaFile, self.Arch] - return self._Module - - ## Return the module name - def _GetBaseName(self): - return self.Module.BaseName - - ## Return the module SourceOverridePath - def _GetSourceOverridePath(self): - return self.Module.SourceOverridePath - - ## Return the module meta-file GUID - def _GetGuid(self): - return self.Module.Guid - - ## Return the module version - def _GetVersion(self): - return self.Module.Version - - ## Return the module type - def _GetModuleType(self): - return self.Module.ModuleType - - ## Return the component type (for R8.x style of module) - def _GetComponentType(self): - return self.Module.ComponentType - - ## Return the build type - def _GetBuildType(self): - return self.Module.BuildType - - ## Return the PCD_IS_DRIVER setting - def _GetPcdIsDriver(self): - return self.Module.PcdIsDriver - - ## Return the autogen version, i.e. module meta-file version - def _GetAutoGenVersion(self): - return self.Module.AutoGenVersion - - ## Check if the module is library or not - def _IsLibrary(self): - if self._LibraryFlag == None: - if self.Module.LibraryClass != None and self.Module.LibraryClass != []: - self._LibraryFlag = True - else: - self._LibraryFlag = False - return self._LibraryFlag - - ## Return the directory to store intermediate files of the module - def _GetBuildDir(self): - if self._BuildDir == None: - self._BuildDir = path.join( - self.PlatformInfo.BuildDir, - self.Arch, - self.SourceDir, - self.MetaFile.BaseName - ) - CreateDirectory(self._BuildDir) - return self._BuildDir - - ## Return the directory to store the intermediate object files of the mdoule - def _GetOutputDir(self): - if self._OutputDir == None: - self._OutputDir = path.join(self.BuildDir, "OUTPUT") - CreateDirectory(self._OutputDir) - return self._OutputDir - - ## Return the directory to store auto-gened source files of the mdoule - def _GetDebugDir(self): - if self._DebugDir == None: - self._DebugDir = path.join(self.BuildDir, "DEBUG") - CreateDirectory(self._DebugDir) - return self._DebugDir - - ## Return the path of custom file - def _GetCustomMakefile(self): - if self._CustomMakefile == None: - self._CustomMakefile = {} - for Type in self.Module.CustomMakefile: - if Type in gMakeTypeMap: - MakeType = gMakeTypeMap[Type] - else: - MakeType = 'nmake' - if self.SourceOverrideDir != None: - File = os.path.join(self.SourceOverrideDir, self.Module.CustomMakefile[Type]) - if not os.path.exists(File): - File = os.path.join(self.SourceDir, self.Module.CustomMakefile[Type]) - else: - File = os.path.join(self.SourceDir, self.Module.CustomMakefile[Type]) - self._CustomMakefile[MakeType] = File - return self._CustomMakefile - - ## Return the directory of the makefile - # - # @retval string The directory string of module's makefile - # - def _GetMakeFileDir(self): - return self.BuildDir - - ## Return build command string - # - # @retval string Build command string - # - def _GetBuildCommand(self): - return self.PlatformInfo.BuildCommand - - ## Get object list of all packages the module and its dependent libraries belong to - # - # @retval list The list of package object - # - def _GetDerivedPackageList(self): - PackageList = [] - for M in [self.Module] + self.DependentLibraryList: - for Package in M.Packages: - if Package in PackageList: - continue - PackageList.append(Package) - return PackageList - - ## Merge dependency expression - # - # @retval list The token list of the dependency expression after parsed - # - def _GetDepexTokenList(self): - if self._DepexList == None: - self._DepexList = {} - if self.IsLibrary or TAB_DEPENDENCY_EXPRESSION_FILE in self.FileTypes: - return self._DepexList - - self._DepexList[self.ModuleType] = [] - - for ModuleType in self._DepexList: - DepexList = self._DepexList[ModuleType] - # - # Append depex from dependent libraries, if not "BEFORE", "AFTER" expresion - # - for M in [self.Module] + self.DependentLibraryList: - Inherited = False - for D in M.Depex[self.Arch, ModuleType]: - if DepexList != []: - DepexList.append('AND') - DepexList.append('(') - DepexList.extend(D) - if DepexList[-1] == 'END': # no need of a END at this time - DepexList.pop() - DepexList.append(')') - Inherited = True - if Inherited: - EdkLogger.verbose("DEPEX[%s] (+%s) = %s" % (self.Name, M.BaseName, DepexList)) - if 'BEFORE' in DepexList or 'AFTER' in DepexList: - break - if len(DepexList) > 0: - EdkLogger.verbose('') - return self._DepexList - - ## Merge dependency expression - # - # @retval list The token list of the dependency expression after parsed - # - def _GetDepexExpressionTokenList(self): - if self._DepexExpressionList == None: - self._DepexExpressionList = {} - if self.IsLibrary or TAB_DEPENDENCY_EXPRESSION_FILE in self.FileTypes: - return self._DepexExpressionList - - self._DepexExpressionList[self.ModuleType] = '' - - for ModuleType in self._DepexExpressionList: - DepexExpressionList = self._DepexExpressionList[ModuleType] - # - # Append depex from dependent libraries, if not "BEFORE", "AFTER" expresion - # - for M in [self.Module] + self.DependentLibraryList: - Inherited = False - for D in M.DepexExpression[self.Arch, ModuleType]: - if DepexExpressionList != '': - DepexExpressionList += ' AND ' - DepexExpressionList += '(' - DepexExpressionList += D - DepexExpressionList = DepexExpressionList.rstrip('END').strip() - DepexExpressionList += ')' - Inherited = True - if Inherited: - EdkLogger.verbose("DEPEX[%s] (+%s) = %s" % (self.Name, M.BaseName, DepexExpressionList)) - if 'BEFORE' in DepexExpressionList or 'AFTER' in DepexExpressionList: - break - if len(DepexExpressionList) > 0: - EdkLogger.verbose('') - self._DepexExpressionList[ModuleType] = DepexExpressionList - return self._DepexExpressionList - - ## Return the list of specification version required for the module - # - # @retval list The list of specification defined in module file - # - def _GetSpecification(self): - return self.Module.Specification - - ## Tool option for the module build - # - # @param PlatformInfo The object of PlatformBuildInfo - # @retval dict The dict containing valid options - # - def _GetModuleBuildOption(self): - if self._BuildOption == None: - self._BuildOption = self.PlatformInfo.ApplyBuildOption(self.Module) - return self._BuildOption - - ## Return a list of files which can be built from source - # - # What kind of files can be built is determined by build rules in - # $(WORKSPACE)/Conf/build_rule.txt and toolchain family. - # - def _GetSourceFileList(self): - if self._SourceFileList == None: - self._SourceFileList = [] - for F in self.Module.Sources: - # match tool chain - if F.TagName != "" and F.TagName != self.ToolChain: - EdkLogger.debug(EdkLogger.DEBUG_9, "The toolchain [%s] for processing file [%s] is found, " - "but [%s] is needed" % (F.TagName, str(F), self.ToolChain)) - continue - # match tool chain family - if F.ToolChainFamily != "" and F.ToolChainFamily != self.ToolChainFamily: - EdkLogger.debug( - EdkLogger.DEBUG_0, - "The file [%s] must be built by tools of [%s], " \ - "but current toolchain family is [%s]" \ - % (str(F), F.ToolChainFamily, self.ToolChainFamily)) - continue - - # add the file path into search path list for file including - if F.Dir not in self.IncludePathList and self.AutoGenVersion >= 0x00010005: - self.IncludePathList.insert(0, F.Dir) - self._SourceFileList.append(F) - self._ApplyBuildRule(F, TAB_UNKNOWN_FILE) - return self._SourceFileList - - ## Return the list of unicode files - def _GetUnicodeFileList(self): - if self._UnicodeFileList == None: - if TAB_UNICODE_FILE in self.FileTypes: - self._UnicodeFileList = self.FileTypes[TAB_UNICODE_FILE] - else: - self._UnicodeFileList = [] - return self._UnicodeFileList - - ## Return a list of files which can be built from binary - # - # "Build" binary files are just to copy them to build directory. - # - # @retval list The list of files which can be built later - # - def _GetBinaryFiles(self): - if self._BinaryFileList == None: - self._BinaryFileList = [] - for F in self.Module.Binaries: - if F.Target not in ['COMMON', '*'] and F.Target != self.BuildTarget: - continue - self._BinaryFileList.append(F) - self._ApplyBuildRule(F, F.Type) - return self._BinaryFileList - - def _GetBuildRules(self): - if self._BuildRules == None: - BuildRules = {} - BuildRuleDatabase = self.PlatformInfo.BuildRule - for Type in BuildRuleDatabase.FileTypeList: - #first try getting build rule by BuildRuleFamily - RuleObject = BuildRuleDatabase[Type, self.BuildType, self.Arch, self.BuildRuleFamily] - if not RuleObject: - # build type is always module type, but ... - if self.ModuleType != self.BuildType: - RuleObject = BuildRuleDatabase[Type, self.ModuleType, self.Arch, self.BuildRuleFamily] - #second try getting build rule by ToolChainFamily - if not RuleObject: - RuleObject = BuildRuleDatabase[Type, self.BuildType, self.Arch, self.ToolChainFamily] - if not RuleObject: - # build type is always module type, but ... - if self.ModuleType != self.BuildType: - RuleObject = BuildRuleDatabase[Type, self.ModuleType, self.Arch, self.ToolChainFamily] - if not RuleObject: - continue - RuleObject = RuleObject.Instantiate(self.Macros) - BuildRules[Type] = RuleObject - for Ext in RuleObject.SourceFileExtList: - BuildRules[Ext] = RuleObject - self._BuildRules = BuildRules - return self._BuildRules - - def _ApplyBuildRule(self, File, FileType): - if self._BuildTargets == None: - self._IntroBuildTargetList = set() - self._FinalBuildTargetList = set() - self._BuildTargets = {} - self._FileTypes = {} - - LastTarget = None - RuleChain = [] - SourceList = [File] - Index = 0 - while Index < len(SourceList): - Source = SourceList[Index] - Index = Index + 1 - - if Source != File: - CreateDirectory(Source.Dir) - - if File.IsBinary and File == Source and self._BinaryFileList != None and File in self._BinaryFileList: - RuleObject = self.BuildRules[TAB_DEFAULT_BINARY_FILE] - elif FileType in self.BuildRules: - RuleObject = self.BuildRules[FileType] - elif Source.Ext in self.BuildRules: - RuleObject = self.BuildRules[Source.Ext] - else: - # stop at no more rules - if LastTarget: - self._FinalBuildTargetList.add(LastTarget) - break - - FileType = RuleObject.SourceFileType - if FileType not in self._FileTypes: - self._FileTypes[FileType] = set() - self._FileTypes[FileType].add(Source) - - # stop at STATIC_LIBRARY for library - if self.IsLibrary and FileType == TAB_STATIC_LIBRARY: - if LastTarget: - self._FinalBuildTargetList.add(LastTarget) - break - - Target = RuleObject.Apply(Source) - if not Target: - if LastTarget: - self._FinalBuildTargetList.add(LastTarget) - break - elif not Target.Outputs: - # Only do build for target with outputs - self._FinalBuildTargetList.add(Target) - - if FileType not in self._BuildTargets: - self._BuildTargets[FileType] = set() - self._BuildTargets[FileType].add(Target) - - if not Source.IsBinary and Source == File: - self._IntroBuildTargetList.add(Target) - - # to avoid cyclic rule - if FileType in RuleChain: - break - - RuleChain.append(FileType) - SourceList.extend(Target.Outputs) - LastTarget = Target - FileType = TAB_UNKNOWN_FILE - - def _GetTargets(self): - if self._BuildTargets == None: - self._IntroBuildTargetList = set() - self._FinalBuildTargetList = set() - self._BuildTargets = {} - self._FileTypes = {} - - #TRICK: call _GetSourceFileList to apply build rule for binary files - if self.SourceFileList: - pass - - #TRICK: call _GetBinaryFileList to apply build rule for binary files - if self.BinaryFileList: - pass - - return self._BuildTargets - - def _GetIntroTargetList(self): - self._GetTargets() - return self._IntroBuildTargetList - - def _GetFinalTargetList(self): - self._GetTargets() - return self._FinalBuildTargetList - - def _GetFileTypes(self): - self._GetTargets() - return self._FileTypes - - ## Get the list of package object the module depends on - # - # @retval list The package object list - # - def _GetDependentPackageList(self): - return self.Module.Packages - - ## Return the list of auto-generated code file - # - # @retval list The list of auto-generated file - # - def _GetAutoGenFileList(self): - UniStringAutoGenC = True - UniStringBinBuffer = None - if self.BuildType == 'UEFI_HII': - UniStringBinBuffer = StringIO() - UniStringAutoGenC = False - if self._AutoGenFileList == None: - self._AutoGenFileList = {} - AutoGenC = TemplateString() - AutoGenH = TemplateString() - StringH = TemplateString() - GenC.CreateCode(self, AutoGenC, AutoGenH, StringH, UniStringAutoGenC, UniStringBinBuffer) - if str(AutoGenC) != "" and TAB_C_CODE_FILE in self.FileTypes: - AutoFile = PathClass(gAutoGenCodeFileName, self.DebugDir) - self._AutoGenFileList[AutoFile] = str(AutoGenC) - self._ApplyBuildRule(AutoFile, TAB_UNKNOWN_FILE) - if str(AutoGenH) != "": - AutoFile = PathClass(gAutoGenHeaderFileName, self.DebugDir) - self._AutoGenFileList[AutoFile] = str(AutoGenH) - self._ApplyBuildRule(AutoFile, TAB_UNKNOWN_FILE) - if str(StringH) != "": - AutoFile = PathClass(gAutoGenStringFileName % {"module_name":self.Name}, self.DebugDir) - self._AutoGenFileList[AutoFile] = str(StringH) - self._ApplyBuildRule(AutoFile, TAB_UNKNOWN_FILE) - if UniStringBinBuffer != None and UniStringBinBuffer.getvalue() != "": - AutoFile = PathClass(gAutoGenStringFormFileName % {"module_name":self.Name}, self.OutputDir) - self._AutoGenFileList[AutoFile] = UniStringBinBuffer.getvalue() - AutoFile.IsBinary = True - self._ApplyBuildRule(AutoFile, TAB_UNKNOWN_FILE) - if UniStringBinBuffer != None: - UniStringBinBuffer.close() - return self._AutoGenFileList - - ## Return the list of library modules explicitly or implicityly used by this module - def _GetLibraryList(self): - if self._DependentLibraryList == None: - # only merge library classes and PCD for non-library module - if self.IsLibrary: - self._DependentLibraryList = [] - else: - if self.AutoGenVersion < 0x00010005: - self._DependentLibraryList = self.PlatformInfo.ResolveLibraryReference(self.Module) - else: - self._DependentLibraryList = self.PlatformInfo.ApplyLibraryInstance(self.Module) - return self._DependentLibraryList - - ## Get the list of PCDs from current module - # - # @retval list The list of PCD - # - def _GetModulePcdList(self): - if self._ModulePcdList == None: - # apply PCD settings from platform - self._ModulePcdList = self.PlatformInfo.ApplyPcdSetting(self.Module, self.Module.Pcds) - return self._ModulePcdList - - ## Get the list of PCDs from dependent libraries - # - # @retval list The list of PCD - # - def _GetLibraryPcdList(self): - if self._LibraryPcdList == None: - Pcds = {} - if not self.IsLibrary: - # get PCDs from dependent libraries - for Library in self.DependentLibraryList: - for Key in Library.Pcds: - # skip duplicated PCDs - if Key in self.Module.Pcds or Key in Pcds: - continue - Pcds[Key] = copy.copy(Library.Pcds[Key]) - # apply PCD settings from platform - self._LibraryPcdList = self.PlatformInfo.ApplyPcdSetting(self.Module, Pcds) - else: - self._LibraryPcdList = [] - return self._LibraryPcdList - - ## Get the GUID value mapping - # - # @retval dict The mapping between GUID cname and its value - # - def _GetGuidList(self): - if self._GuidList == None: - self._GuidList = self.Module.Guids - for Library in self.DependentLibraryList: - self._GuidList.update(Library.Guids) - return self._GuidList - - ## Get the protocol value mapping - # - # @retval dict The mapping between protocol cname and its value - # - def _GetProtocolList(self): - if self._ProtocolList == None: - self._ProtocolList = self.Module.Protocols - for Library in self.DependentLibraryList: - self._ProtocolList.update(Library.Protocols) - return self._ProtocolList - - ## Get the PPI value mapping - # - # @retval dict The mapping between PPI cname and its value - # - def _GetPpiList(self): - if self._PpiList == None: - self._PpiList = self.Module.Ppis - for Library in self.DependentLibraryList: - self._PpiList.update(Library.Ppis) - return self._PpiList - - ## Get the list of include search path - # - # @retval list The list path - # - def _GetIncludePathList(self): - if self._IncludePathList == None: - self._IncludePathList = [] - if self.AutoGenVersion < 0x00010005: - for Inc in self.Module.Includes: - if Inc not in self._IncludePathList: - self._IncludePathList.append(Inc) - # for r8 modules - Inc = path.join(Inc, self.Arch.capitalize()) - if os.path.exists(Inc) and Inc not in self._IncludePathList: - self._IncludePathList.append(Inc) - # r8 module needs to put DEBUG_DIR at the end of search path and not to use SOURCE_DIR all the time - self._IncludePathList.append(self.DebugDir) - else: - self._IncludePathList.append(self.MetaFile.Dir) - self._IncludePathList.append(self.DebugDir) - - for Package in self.Module.Packages: - PackageDir = path.join(self.WorkspaceDir, Package.MetaFile.Dir) - if PackageDir not in self._IncludePathList: - self._IncludePathList.append(PackageDir) - for Inc in Package.Includes: - if Inc not in self._IncludePathList: - self._IncludePathList.append(str(Inc)) - return self._IncludePathList - - ## Create makefile for the module and its dependent libraries - # - # @param CreateLibraryMakeFile Flag indicating if or not the makefiles of - # dependent libraries will be created - # - def CreateMakeFile(self, CreateLibraryMakeFile=True): - if self.IsMakeFileCreated: - return - - if not self.IsLibrary and CreateLibraryMakeFile: - for LibraryAutoGen in self.LibraryAutoGenList: - LibraryAutoGen.CreateMakeFile() - - if len(self.CustomMakefile) == 0: - Makefile = GenMake.ModuleMakefile(self) - else: - Makefile = GenMake.CustomMakefile(self) - if Makefile.Generate(): - EdkLogger.debug(EdkLogger.DEBUG_9, "Generated makefile for module %s [%s]" % - (self.Name, self.Arch)) - else: - EdkLogger.debug(EdkLogger.DEBUG_9, "Skipped the generation of makefile for module %s [%s]" % - (self.Name, self.Arch)) - - self.IsMakeFileCreated = True - - ## Create autogen code for the module and its dependent libraries - # - # @param CreateLibraryCodeFile Flag indicating if or not the code of - # dependent libraries will be created - # - def CreateCodeFile(self, CreateLibraryCodeFile=True): - if self.IsCodeFileCreated: - return - - if not self.IsLibrary and CreateLibraryCodeFile: - for LibraryAutoGen in self.LibraryAutoGenList: - LibraryAutoGen.CreateCodeFile() - - AutoGenList = [] - IgoredAutoGenList = [] - - for File in self.AutoGenFileList: - if GenC.Generate(File.Path, self.AutoGenFileList[File], File.IsBinary): - #Ignore R8 AutoGen.c - if self.AutoGenVersion < 0x00010005 and File.Name == 'AutoGen.c': - continue - - AutoGenList.append(str(File)) - else: - IgoredAutoGenList.append(str(File)) - - # Skip the following code for EDK I inf - if self.AutoGenVersion < 0x00010005: - return - - for ModuleType in self.DepexList: - if len(self.DepexList[ModuleType]) == 0: - continue - Dpx = GenDepex.DependencyExpression(self.DepexList[ModuleType], ModuleType, True) - DpxFile = gAutoGenDepexFileName % {"module_name" : self.Name} - - if Dpx.Generate(path.join(self.OutputDir, DpxFile)): - AutoGenList.append(str(DpxFile)) - else: - IgoredAutoGenList.append(str(DpxFile)) - - if IgoredAutoGenList == []: - EdkLogger.debug(EdkLogger.DEBUG_9, "Generated [%s] files for module %s [%s]" % - (" ".join(AutoGenList), self.Name, self.Arch)) - elif AutoGenList == []: - EdkLogger.debug(EdkLogger.DEBUG_9, "Skipped the generation of [%s] files for module %s [%s]" % - (" ".join(IgoredAutoGenList), self.Name, self.Arch)) - else: - EdkLogger.debug(EdkLogger.DEBUG_9, "Generated [%s] (skipped %s) files for module %s [%s]" % - (" ".join(AutoGenList), " ".join(IgoredAutoGenList), self.Name, self.Arch)) - - self.IsCodeFileCreated = True - return AutoGenList - - ## Summarize the ModuleAutoGen objects of all libraries used by this module - def _GetLibraryAutoGenList(self): - if self._LibraryAutoGenList == None: - self._LibraryAutoGenList = [] - for Library in self.DependentLibraryList: - La = ModuleAutoGen( - self.Workspace, - Library.MetaFile, - self.BuildTarget, - self.ToolChain, - self.Arch, - self.PlatformInfo.MetaFile - ) - if La not in self._LibraryAutoGenList: - self._LibraryAutoGenList.append(La) - for Lib in La.CodaTargetList: - self._ApplyBuildRule(Lib.Target, TAB_UNKNOWN_FILE) - return self._LibraryAutoGenList - - ## Return build command string - # - # @retval string Build command string - # - def _GetBuildCommand(self): - return self.PlatformInfo.BuildCommand - - - Module = property(_GetModule) - Name = property(_GetBaseName) - Guid = property(_GetGuid) - Version = property(_GetVersion) - ModuleType = property(_GetModuleType) - ComponentType = property(_GetComponentType) - BuildType = property(_GetBuildType) - PcdIsDriver = property(_GetPcdIsDriver) - AutoGenVersion = property(_GetAutoGenVersion) - Macros = property(_GetMacros) - Specification = property(_GetSpecification) - - IsLibrary = property(_IsLibrary) - - BuildDir = property(_GetBuildDir) - OutputDir = property(_GetOutputDir) - DebugDir = property(_GetDebugDir) - MakeFileDir = property(_GetMakeFileDir) - CustomMakefile = property(_GetCustomMakefile) - - IncludePathList = property(_GetIncludePathList) - AutoGenFileList = property(_GetAutoGenFileList) - UnicodeFileList = property(_GetUnicodeFileList) - SourceFileList = property(_GetSourceFileList) - BinaryFileList = property(_GetBinaryFiles) # FileType : [File List] - Targets = property(_GetTargets) - IntroTargetList = property(_GetIntroTargetList) - CodaTargetList = property(_GetFinalTargetList) - FileTypes = property(_GetFileTypes) - BuildRules = property(_GetBuildRules) - - DependentPackageList = property(_GetDependentPackageList) - DependentLibraryList = property(_GetLibraryList) - LibraryAutoGenList = property(_GetLibraryAutoGenList) - DerivedPackageList = property(_GetDerivedPackageList) - - ModulePcdList = property(_GetModulePcdList) - LibraryPcdList = property(_GetLibraryPcdList) - GuidList = property(_GetGuidList) - ProtocolList = property(_GetProtocolList) - PpiList = property(_GetPpiList) - DepexList = property(_GetDepexTokenList) - DepexExpressionList = property(_GetDepexExpressionTokenList) - BuildOption = property(_GetModuleBuildOption) - BuildCommand = property(_GetBuildCommand) - -# This acts like the main() function for the script, unless it is 'import'ed into another script. -if __name__ == '__main__': - pass - +## @file +# Generate AutoGen.h, AutoGen.c and *.depex files +# +# Copyright (c) 2007 - 2010, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# + +## Import Modules +# +import os +import re +import os.path as path +import copy + +import GenC +import GenMake +import GenDepex +from StringIO import StringIO + +from StrGather import * +from BuildEngine import BuildRule + +from Common.BuildToolError import * +from Common.DataType import * +from Common.Misc import * +from Common.String import * +import Common.GlobalData as GlobalData +from GenFds.FdfParser import * +from CommonDataClass.CommonClass import SkuInfoClass +from Workspace.BuildClassObject import * + +## Regular expression for splitting Dependency Expression stirng into tokens +gDepexTokenPattern = re.compile("(\(|\)|\w+| \S+\.inf)") + +## Mapping Makefile type +gMakeTypeMap = {"MSFT":"nmake", "GCC":"gmake"} + + +## Build rule configuration file +gBuildRuleFile = 'Conf/build_rule.txt' + +## default file name for AutoGen +gAutoGenCodeFileName = "AutoGen.c" +gAutoGenHeaderFileName = "AutoGen.h" +gAutoGenStringFileName = "%(module_name)sStrDefs.h" +gAutoGenStringFormFileName = "%(module_name)sStrDefs.hpk" +gAutoGenDepexFileName = "%(module_name)s.depex" + +## Base class for AutoGen +# +# This class just implements the cache mechanism of AutoGen objects. +# +class AutoGen(object): + # database to maintain the objects of xxxAutoGen + _CACHE_ = {} # (BuildTarget, ToolChain) : {ARCH : {platform file: AutoGen object}}} + + ## Factory method + # + # @param Class class object of real AutoGen class + # (WorkspaceAutoGen, ModuleAutoGen or PlatformAutoGen) + # @param Workspace Workspace directory or WorkspaceAutoGen object + # @param MetaFile The path of meta file + # @param Target Build target + # @param Toolchain Tool chain name + # @param Arch Target arch + # @param *args The specific class related parameters + # @param **kwargs The specific class related dict parameters + # + def __new__(Class, Workspace, MetaFile, Target, Toolchain, Arch, *args, **kwargs): + # check if the object has been created + Key = (Target, Toolchain) + if Key not in Class._CACHE_ or Arch not in Class._CACHE_[Key] \ + or MetaFile not in Class._CACHE_[Key][Arch]: + AutoGenObject = super(AutoGen, Class).__new__(Class) + # call real constructor + if not AutoGenObject._Init(Workspace, MetaFile, Target, Toolchain, Arch, *args, **kwargs): + return None + if Key not in Class._CACHE_: + Class._CACHE_[Key] = {} + if Arch not in Class._CACHE_[Key]: + Class._CACHE_[Key][Arch] = {} + Class._CACHE_[Key][Arch][MetaFile] = AutoGenObject + else: + AutoGenObject = Class._CACHE_[Key][Arch][MetaFile] + + return AutoGenObject + + ## hash() operator + # + # The file path of platform file will be used to represent hash value of this object + # + # @retval int Hash value of the file path of platform file + # + def __hash__(self): + return hash(self.MetaFile) + + ## str() operator + # + # The file path of platform file will be used to represent this object + # + # @retval string String of platform file path + # + def __str__(self): + return str(self.MetaFile) + + ## "==" operator + def __eq__(self, Other): + return Other and self.MetaFile == Other + +## Workspace AutoGen class +# +# This class is used mainly to control the whole platform build for different +# architecture. This class will generate top level makefile. +# +class WorkspaceAutoGen(AutoGen): + ## Real constructor of WorkspaceAutoGen + # + # This method behaves the same as __init__ except that it needs explict invoke + # (in super class's __new__ method) + # + # @param WorkspaceDir Root directory of workspace + # @param ActivePlatform Meta-file of active platform + # @param Target Build target + # @param Toolchain Tool chain name + # @param ArchList List of architecture of current build + # @param MetaFileDb Database containing meta-files + # @param BuildConfig Configuration of build + # @param ToolDefinition Tool chain definitions + # @param FlashDefinitionFile File of flash definition + # @param Fds FD list to be generated + # @param Fvs FV list to be generated + # @param SkuId SKU id from command line + # + def _Init(self, WorkspaceDir, ActivePlatform, Target, Toolchain, ArchList, MetaFileDb, + BuildConfig, ToolDefinition, FlashDefinitionFile='', Fds=[], Fvs=[], SkuId=''): + self.MetaFile = ActivePlatform.MetaFile + self.WorkspaceDir = WorkspaceDir + self.Platform = ActivePlatform + self.BuildTarget = Target + self.ToolChain = Toolchain + self.ArchList = ArchList + self.SkuId = SkuId + + self.BuildDatabase = MetaFileDb + self.TargetTxt = BuildConfig + self.ToolDef = ToolDefinition + self.FdfFile = FlashDefinitionFile + self.FdTargetList = Fds + self.FvTargetList = Fvs + self.AutoGenObjectList = [] + + # there's many relative directory operations, so ... + os.chdir(self.WorkspaceDir) + + # parse FDF file to get PCDs in it, if any + if self.FdfFile != None and self.FdfFile != '': + Fdf = FdfParser(self.FdfFile.Path) + Fdf.ParseFile() + PcdSet = Fdf.Profile.PcdDict + ModuleList = Fdf.Profile.InfList + self.FdfProfile = Fdf.Profile + else: + PcdSet = {} + ModuleList = [] + self.FdfProfile = None + + # apply SKU and inject PCDs from Flash Definition file + for Arch in self.ArchList: + Platform = self.BuildDatabase[self.MetaFile, Arch] + Platform.SkuName = self.SkuId + for Name, Guid in PcdSet: + Platform.AddPcd(Name, Guid, PcdSet[Name, Guid]) + + Pa = PlatformAutoGen(self, self.MetaFile, Target, Toolchain, Arch) + # + # Explicitly collect platform's dynamic PCDs + # + Pa.CollectPlatformDynamicPcds() + self.AutoGenObjectList.append(Pa) + + self._BuildDir = None + self._FvDir = None + self._MakeFileDir = None + self._BuildCommand = None + + return True + + def __repr__(self): + return "%s [%s]" % (self.MetaFile, ", ".join(self.ArchList)) + + ## Return the directory to store FV files + def _GetFvDir(self): + if self._FvDir == None: + self._FvDir = path.join(self.BuildDir, 'FV') + return self._FvDir + + ## Return the directory to store all intermediate and final files built + def _GetBuildDir(self): + return self.AutoGenObjectList[0].BuildDir + + ## Return the build output directory platform specifies + def _GetOutputDir(self): + return self.Platform.OutputDirectory + + ## Return platform name + def _GetName(self): + return self.Platform.PlatformName + + ## Return meta-file GUID + def _GetGuid(self): + return self.Platform.Guid + + ## Return platform version + def _GetVersion(self): + return self.Platform.Version + + ## Return paths of tools + def _GetToolDefinition(self): + return self.AutoGenObjectList[0].ToolDefinition + + ## Return directory of platform makefile + # + # @retval string Makefile directory + # + def _GetMakeFileDir(self): + if self._MakeFileDir == None: + self._MakeFileDir = self.BuildDir + return self._MakeFileDir + + ## Return build command string + # + # @retval string Build command string + # + def _GetBuildCommand(self): + if self._BuildCommand == None: + # BuildCommand should be all the same. So just get one from platform AutoGen + self._BuildCommand = self.AutoGenObjectList[0].BuildCommand + return self._BuildCommand + + ## Create makefile for the platform and mdoules in it + # + # @param CreateDepsMakeFile Flag indicating if the makefile for + # modules will be created as well + # + def CreateMakeFile(self, CreateDepsMakeFile=False): + # create makefile for platform + Makefile = GenMake.TopLevelMakefile(self) + if Makefile.Generate(): + EdkLogger.debug(EdkLogger.DEBUG_9, "Generated makefile for platform [%s] %s\n" % + (self.MetaFile, self.ArchList)) + else: + EdkLogger.debug(EdkLogger.DEBUG_9, "Skipped the generation of makefile for platform [%s] %s\n" % + (self.MetaFile, self.ArchList)) + + if CreateDepsMakeFile: + for Pa in self.AutoGenObjectList: + Pa.CreateMakeFile(CreateDepsMakeFile) + + ## Create autogen code for platform and modules + # + # Since there's no autogen code for platform, this method will do nothing + # if CreateModuleCodeFile is set to False. + # + # @param CreateDepsCodeFile Flag indicating if creating module's + # autogen code file or not + # + def CreateCodeFile(self, CreateDepsCodeFile=False): + if not CreateDepsCodeFile: + return + for Pa in self.AutoGenObjectList: + Pa.CreateCodeFile(CreateDepsCodeFile) + + Name = property(_GetName) + Guid = property(_GetGuid) + Version = property(_GetVersion) + OutputDir = property(_GetOutputDir) + + ToolDefinition = property(_GetToolDefinition) # toolcode : tool path + + BuildDir = property(_GetBuildDir) + FvDir = property(_GetFvDir) + MakeFileDir = property(_GetMakeFileDir) + BuildCommand = property(_GetBuildCommand) + +## AutoGen class for platform +# +# PlatformAutoGen class will process the original information in platform +# file in order to generate makefile for platform. +# +class PlatformAutoGen(AutoGen): + # + # Used to store all PCDs for both PEI and DXE phase, in order to generate + # correct PCD database + # + _DynaPcdList_ = [] + _NonDynaPcdList_ = [] + + ## The real constructor of PlatformAutoGen + # + # This method is not supposed to be called by users of PlatformAutoGen. It's + # only used by factory method __new__() to do real initialization work for an + # object of PlatformAutoGen + # + # @param Workspace WorkspaceAutoGen object + # @param PlatformFile Platform file (DSC file) + # @param Target Build target (DEBUG, RELEASE) + # @param Toolchain Name of tool chain + # @param Arch arch of the platform supports + # + def _Init(self, Workspace, PlatformFile, Target, Toolchain, Arch): + EdkLogger.debug(EdkLogger.DEBUG_9, "AutoGen platform [%s] [%s]" % (PlatformFile, Arch)) + GlobalData.gProcessingFile = "%s [%s, %s, %s]" % (PlatformFile, Arch, Toolchain, Target) + + self.MetaFile = PlatformFile + self.Workspace = Workspace + self.WorkspaceDir = Workspace.WorkspaceDir + self.ToolChain = Toolchain + self.BuildTarget = Target + self.Arch = Arch + self.SourceDir = PlatformFile.SubDir + self.SourceOverrideDir = None + self.FdTargetList = self.Workspace.FdTargetList + self.FvTargetList = self.Workspace.FvTargetList + self.AllPcdList = [] + + # flag indicating if the makefile/C-code file has been created or not + self.IsMakeFileCreated = False + self.IsCodeFileCreated = False + + self._Platform = None + self._Name = None + self._Guid = None + self._Version = None + + self._BuildRule = None + self._SourceDir = None + self._BuildDir = None + self._OutputDir = None + self._FvDir = None + self._MakeFileDir = None + self._FdfFile = None + + self._PcdTokenNumber = None # (TokenCName, TokenSpaceGuidCName) : GeneratedTokenNumber + self._DynamicPcdList = None # [(TokenCName1, TokenSpaceGuidCName1), (TokenCName2, TokenSpaceGuidCName2), ...] + self._NonDynamicPcdList = None # [(TokenCName1, TokenSpaceGuidCName1), (TokenCName2, TokenSpaceGuidCName2), ...] + + self._ToolDefinitions = None + self._ToolDefFile = None # toolcode : tool path + self._ToolChainFamily = None + self._BuildRuleFamily = None + self._BuildOption = None # toolcode : option + self._EdkBuildOption = None # edktoolcode : option + self._EdkIIBuildOption = None # edkiitoolcode : option + self._PackageList = None + self._ModuleAutoGenList = None + self._LibraryAutoGenList = None + self._BuildCommand = None + + # get the original module/package/platform objects + self.BuildDatabase = Workspace.BuildDatabase + return True + + def __repr__(self): + return "%s [%s]" % (self.MetaFile, self.Arch) + + ## Create autogen code for platform and modules + # + # Since there's no autogen code for platform, this method will do nothing + # if CreateModuleCodeFile is set to False. + # + # @param CreateModuleCodeFile Flag indicating if creating module's + # autogen code file or not + # + def CreateCodeFile(self, CreateModuleCodeFile=False): + # only module has code to be greated, so do nothing if CreateModuleCodeFile is False + if self.IsCodeFileCreated or not CreateModuleCodeFile: + return + + for Ma in self.ModuleAutoGenList: + Ma.CreateCodeFile(True) + + # don't do this twice + self.IsCodeFileCreated = True + + ## Create makefile for the platform and mdoules in it + # + # @param CreateModuleMakeFile Flag indicating if the makefile for + # modules will be created as well + # + def CreateMakeFile(self, CreateModuleMakeFile=False): + if CreateModuleMakeFile: + for ModuleFile in self.Platform.Modules: + Ma = ModuleAutoGen(self.Workspace, ModuleFile, self.BuildTarget, + self.ToolChain, self.Arch, self.MetaFile) + Ma.CreateMakeFile(True) + + # no need to create makefile for the platform more than once + if self.IsMakeFileCreated: + return + + # create makefile for platform + Makefile = GenMake.PlatformMakefile(self) + if Makefile.Generate(): + EdkLogger.debug(EdkLogger.DEBUG_9, "Generated makefile for platform [%s] [%s]\n" % + (self.MetaFile, self.Arch)) + else: + EdkLogger.debug(EdkLogger.DEBUG_9, "Skipped the generation of makefile for platform [%s] [%s]\n" % + (self.MetaFile, self.Arch)) + self.IsMakeFileCreated = True + + ## Collect dynamic PCDs + # + # Gather dynamic PCDs list from each module and their settings from platform + # This interface should be invoked explicitly when platform action is created. + # + def CollectPlatformDynamicPcds(self): + # for gathering error information + NoDatumTypePcdList = set() + + self._GuidValue = {} + for F in self.Platform.Modules.keys(): + M = ModuleAutoGen(self.Workspace, F, self.BuildTarget, self.ToolChain, self.Arch, self.MetaFile) + #GuidValue.update(M.Guids) + + self.Platform.Modules[F].M = M + + for PcdFromModule in M.ModulePcdList+M.LibraryPcdList: + # make sure that the "VOID*" kind of datum has MaxDatumSize set + if PcdFromModule.DatumType == "VOID*" and PcdFromModule.MaxDatumSize == None: + NoDatumTypePcdList.add("%s.%s [%s]" % (PcdFromModule.TokenSpaceGuidCName, PcdFromModule.TokenCName, F)) + + if PcdFromModule.Type in GenC.gDynamicPcd or PcdFromModule.Type in GenC.gDynamicExPcd: + # + # If a dynamic PCD used by a PEM module/PEI module & DXE module, + # it should be stored in Pcd PEI database, If a dynamic only + # used by DXE module, it should be stored in DXE PCD database. + # The default Phase is DXE + # + if M.ModuleType in ["PEIM", "PEI_CORE"]: + PcdFromModule.Phase = "PEI" + if PcdFromModule not in self._DynaPcdList_: + self._DynaPcdList_.append(PcdFromModule) + elif PcdFromModule.Phase == 'PEI': + # overwrite any the same PCD existing, if Phase is PEI + Index = self._DynaPcdList_.index(PcdFromModule) + self._DynaPcdList_[Index] = PcdFromModule + elif PcdFromModule not in self._NonDynaPcdList_: + self._NonDynaPcdList_.append(PcdFromModule) + + # print out error information and break the build, if error found + if len(NoDatumTypePcdList) > 0: + NoDatumTypePcdListString = "\n\t\t".join(NoDatumTypePcdList) + EdkLogger.error("build", AUTOGEN_ERROR, "PCD setting error", + File=self.MetaFile, + ExtraData="\n\tPCD(s) without MaxDatumSize:\n\t\t%s\n" + % NoDatumTypePcdListString) + self._NonDynamicPcdList = self._NonDynaPcdList_ + self._DynamicPcdList = self._DynaPcdList_ + self.AllPcdList = self._NonDynamicPcdList + self._DynamicPcdList + + # + # Sort dynamic PCD list to: + # 1) If PCD's datum type is VOID* and value is unicode string which starts with L, the PCD item should + # try to be put header of dynamicd List + # 2) If PCD is HII type, the PCD item should be put after unicode type PCD + # + # The reason of sorting is make sure the unicode string is in double-byte alignment in string table. + # + UnicodePcdArray = [] + HiiPcdArray = [] + OtherPcdArray = [] + for Pcd in self._DynamicPcdList: + # just pick the a value to determine whether is unicode string type + Sku = Pcd.SkuInfoList[Pcd.SkuInfoList.keys()[0]] + PcdValue = Sku.DefaultValue + if Pcd.DatumType == 'VOID*' and PcdValue.startswith("L"): + # if found PCD which datum value is unicode string the insert to left size of UnicodeIndex + UnicodePcdArray.append(Pcd) + elif len(Sku.VariableName) > 0: + # if found HII type PCD then insert to right of UnicodeIndex + HiiPcdArray.append(Pcd) + else: + OtherPcdArray.append(Pcd) + del self._DynamicPcdList[:] + self._DynamicPcdList.extend(UnicodePcdArray) + self._DynamicPcdList.extend(HiiPcdArray) + self._DynamicPcdList.extend(OtherPcdArray) + + + ## Return the platform build data object + def _GetPlatform(self): + if self._Platform == None: + self._Platform = self.BuildDatabase[self.MetaFile, self.Arch] + return self._Platform + + ## Return platform name + def _GetName(self): + return self.Platform.PlatformName + + ## Return the meta file GUID + def _GetGuid(self): + return self.Platform.Guid + + ## Return the platform version + def _GetVersion(self): + return self.Platform.Version + + ## Return the FDF file name + def _GetFdfFile(self): + if self._FdfFile == None: + if self.Workspace.FdfFile != "": + self._FdfFile= path.join(self.WorkspaceDir, self.Workspace.FdfFile) + else: + self._FdfFile = '' + return self._FdfFile + + ## Return the build output directory platform specifies + def _GetOutputDir(self): + return self.Platform.OutputDirectory + + ## Return the directory to store all intermediate and final files built + def _GetBuildDir(self): + if self._BuildDir == None: + if os.path.isabs(self.OutputDir): + self._BuildDir = path.join( + path.abspath(self.OutputDir), + self.BuildTarget + "_" + self.ToolChain, + ) + else: + self._BuildDir = path.join( + self.WorkspaceDir, + self.OutputDir, + self.BuildTarget + "_" + self.ToolChain, + ) + return self._BuildDir + + ## Return directory of platform makefile + # + # @retval string Makefile directory + # + def _GetMakeFileDir(self): + if self._MakeFileDir == None: + self._MakeFileDir = path.join(self.BuildDir, self.Arch) + return self._MakeFileDir + + ## Return build command string + # + # @retval string Build command string + # + def _GetBuildCommand(self): + if self._BuildCommand == None: + self._BuildCommand = [] + if "MAKE" in self.ToolDefinition and "PATH" in self.ToolDefinition["MAKE"]: + self._BuildCommand += SplitOption(self.ToolDefinition["MAKE"]["PATH"]) + if "FLAGS" in self.ToolDefinition["MAKE"]: + NewOption = self.ToolDefinition["MAKE"]["FLAGS"].strip() + if NewOption != '': + self._BuildCommand += SplitOption(NewOption) + return self._BuildCommand + + ## Get tool chain definition + # + # Get each tool defition for given tool chain from tools_def.txt and platform + # + def _GetToolDefinition(self): + if self._ToolDefinitions == None: + ToolDefinition = self.Workspace.ToolDef.ToolsDefTxtDictionary + if TAB_TOD_DEFINES_COMMAND_TYPE not in self.Workspace.ToolDef.ToolsDefTxtDatabase: + EdkLogger.error('build', RESOURCE_NOT_AVAILABLE, "No tools found in configuration", + ExtraData="[%s]" % self.MetaFile) + self._ToolDefinitions = {} + DllPathList = set() + for Def in ToolDefinition: + Target, Tag, Arch, Tool, Attr = Def.split("_") + if Target != self.BuildTarget or Tag != self.ToolChain or Arch != self.Arch: + continue + + Value = ToolDefinition[Def] + # don't record the DLL + if Attr == "DLL": + DllPathList.add(Value) + continue + + if Tool not in self._ToolDefinitions: + self._ToolDefinitions[Tool] = {} + self._ToolDefinitions[Tool][Attr] = Value + + ToolsDef = '' + MakePath = '' + if GlobalData.gOptions.SilentMode and "MAKE" in self._ToolDefinitions: + if "FLAGS" not in self._ToolDefinitions["MAKE"]: + self._ToolDefinitions["MAKE"]["FLAGS"] = "" + self._ToolDefinitions["MAKE"]["FLAGS"] += " -s" + MakeFlags = '' + for Tool in self._ToolDefinitions: + for Attr in self._ToolDefinitions[Tool]: + Value = self._ToolDefinitions[Tool][Attr] + if Tool in self.BuildOption and Attr in self.BuildOption[Tool]: + # check if override is indicated + if self.BuildOption[Tool][Attr].startswith('='): + Value = self.BuildOption[Tool][Attr][1:] + else: + Value += " " + self.BuildOption[Tool][Attr] + + if Attr == "PATH": + # Don't put MAKE definition in the file + if Tool == "MAKE": + MakePath = Value + else: + ToolsDef += "%s = %s\n" % (Tool, Value) + elif Attr != "DLL": + # Don't put MAKE definition in the file + if Tool == "MAKE": + if Attr == "FLAGS": + MakeFlags = Value + else: + ToolsDef += "%s_%s = %s\n" % (Tool, Attr, Value) + ToolsDef += "\n" + + SaveFileOnChange(self.ToolDefinitionFile, ToolsDef) + for DllPath in DllPathList: + os.environ["PATH"] = DllPath + os.pathsep + os.environ["PATH"] + os.environ["MAKE_FLAGS"] = MakeFlags + + return self._ToolDefinitions + + ## Return the paths of tools + def _GetToolDefFile(self): + if self._ToolDefFile == None: + self._ToolDefFile = os.path.join(self.MakeFileDir, "TOOLS_DEF." + self.Arch) + return self._ToolDefFile + + ## Retrieve the toolchain family of given toolchain tag. Default to 'MSFT'. + def _GetToolChainFamily(self): + if self._ToolChainFamily == None: + ToolDefinition = self.Workspace.ToolDef.ToolsDefTxtDatabase + if TAB_TOD_DEFINES_FAMILY not in ToolDefinition \ + or self.ToolChain not in ToolDefinition[TAB_TOD_DEFINES_FAMILY] \ + or not ToolDefinition[TAB_TOD_DEFINES_FAMILY][self.ToolChain]: + EdkLogger.verbose("No tool chain family found in configuration for %s. Default to MSFT." \ + % self.ToolChain) + self._ToolChainFamily = "MSFT" + else: + self._ToolChainFamily = ToolDefinition[TAB_TOD_DEFINES_FAMILY][self.ToolChain] + return self._ToolChainFamily + + def _GetBuildRuleFamily(self): + if self._BuildRuleFamily == None: + ToolDefinition = self.Workspace.ToolDef.ToolsDefTxtDatabase + if TAB_TOD_DEFINES_BUILDRULEFAMILY not in ToolDefinition \ + or self.ToolChain not in ToolDefinition[TAB_TOD_DEFINES_BUILDRULEFAMILY] \ + or not ToolDefinition[TAB_TOD_DEFINES_BUILDRULEFAMILY][self.ToolChain]: + EdkLogger.verbose("No tool chain family found in configuration for %s. Default to MSFT." \ + % self.ToolChain) + self._BuildRuleFamily = "MSFT" + else: + self._BuildRuleFamily = ToolDefinition[TAB_TOD_DEFINES_BUILDRULEFAMILY][self.ToolChain] + return self._BuildRuleFamily + + ## Return the build options specific for all modules in this platform + def _GetBuildOptions(self): + if self._BuildOption == None: + self._BuildOption = self._ExpandBuildOption(self.Platform.BuildOptions) + return self._BuildOption + + ## Return the build options specific for EDK modules in this platform + def _GetEdkBuildOptions(self): + if self._EdkBuildOption == None: + self._EdkBuildOption = self._ExpandBuildOption(self.Platform.BuildOptions, EDK_NAME) + return self._EdkBuildOption + + ## Return the build options specific for EDKII modules in this platform + def _GetEdkIIBuildOptions(self): + if self._EdkIIBuildOption == None: + self._EdkIIBuildOption = self._ExpandBuildOption(self.Platform.BuildOptions, EDKII_NAME) + return self._EdkIIBuildOption + + ## Parse build_rule.txt in $(WORKSPACE)/Conf/build_rule.txt + # + # @retval BuildRule object + # + def _GetBuildRule(self): + if self._BuildRule == None: + BuildRuleFile = None + if TAB_TAT_DEFINES_BUILD_RULE_CONF in self.Workspace.TargetTxt.TargetTxtDictionary: + BuildRuleFile = self.Workspace.TargetTxt.TargetTxtDictionary[TAB_TAT_DEFINES_BUILD_RULE_CONF] + if BuildRuleFile in [None, '']: + BuildRuleFile = gBuildRuleFile + self._BuildRule = BuildRule(BuildRuleFile) + return self._BuildRule + + ## Summarize the packages used by modules in this platform + def _GetPackageList(self): + if self._PackageList == None: + self._PackageList = set() + for La in self.LibraryAutoGenList: + self._PackageList.update(La.DependentPackageList) + for Ma in self.ModuleAutoGenList: + self._PackageList.update(Ma.DependentPackageList) + self._PackageList = list(self._PackageList) + return self._PackageList + + ## Get list of non-dynamic PCDs + def _GetNonDynamicPcdList(self): + return self._NonDynamicPcdList + + ## Get list of dynamic PCDs + def _GetDynamicPcdList(self): + return self._DynamicPcdList + + ## Generate Token Number for all PCD + def _GetPcdTokenNumbers(self): + if self._PcdTokenNumber == None: + self._PcdTokenNumber = sdict() + TokenNumber = 1 + for Pcd in self.DynamicPcdList: + if Pcd.Phase == "PEI": + EdkLogger.debug(EdkLogger.DEBUG_5, "%s %s (%s) -> %d" % (Pcd.TokenCName, Pcd.TokenSpaceGuidCName, Pcd.Phase, TokenNumber)) + self._PcdTokenNumber[Pcd.TokenCName, Pcd.TokenSpaceGuidCName] = TokenNumber + TokenNumber += 1 + + for Pcd in self.DynamicPcdList: + if Pcd.Phase == "DXE": + EdkLogger.debug(EdkLogger.DEBUG_5, "%s %s (%s) -> %d" % (Pcd.TokenCName, Pcd.TokenSpaceGuidCName, Pcd.Phase, TokenNumber)) + self._PcdTokenNumber[Pcd.TokenCName, Pcd.TokenSpaceGuidCName] = TokenNumber + TokenNumber += 1 + + for Pcd in self.NonDynamicPcdList: + self._PcdTokenNumber[Pcd.TokenCName, Pcd.TokenSpaceGuidCName] = TokenNumber + TokenNumber += 1 + return self._PcdTokenNumber + + ## Summarize ModuleAutoGen objects of all modules/libraries to be built for this platform + def _GetAutoGenObjectList(self): + self._ModuleAutoGenList = [] + self._LibraryAutoGenList = [] + for ModuleFile in self.Platform.Modules: + Ma = ModuleAutoGen( + self.Workspace, + ModuleFile, + self.BuildTarget, + self.ToolChain, + self.Arch, + self.MetaFile + ) + if Ma not in self._ModuleAutoGenList: + self._ModuleAutoGenList.append(Ma) + for La in Ma.LibraryAutoGenList: + if La not in self._LibraryAutoGenList: + self._LibraryAutoGenList.append(La) + + ## Summarize ModuleAutoGen objects of all modules to be built for this platform + def _GetModuleAutoGenList(self): + if self._ModuleAutoGenList == None: + self._GetAutoGenObjectList() + return self._ModuleAutoGenList + + ## Summarize ModuleAutoGen objects of all libraries to be built for this platform + def _GetLibraryAutoGenList(self): + if self._LibraryAutoGenList == None: + self._GetAutoGenObjectList() + return self._LibraryAutoGenList + + ## Test if a module is supported by the platform + # + # An error will be raised directly if the module or its arch is not supported + # by the platform or current configuration + # + def ValidModule(self, Module): + return Module in self.Platform.Modules or Module in self.Platform.LibraryInstances + + ## Resolve the library classes in a module to library instances + # + # This method will not only resolve library classes but also sort the library + # instances according to the dependency-ship. + # + # @param Module The module from which the library classes will be resolved + # + # @retval library_list List of library instances sorted + # + def ApplyLibraryInstance(self, Module): + ModuleType = Module.ModuleType + + # for overridding library instances with module specific setting + PlatformModule = self.Platform.Modules[str(Module)] + + # add forced library instances (specified under LibraryClasses sections) + for LibraryClass in self.Platform.LibraryClasses.GetKeys(): + if LibraryClass.startswith("NULL"): + Module.LibraryClasses[LibraryClass] = self.Platform.LibraryClasses[LibraryClass] + + # add forced library instances (specified in module overrides) + for LibraryClass in PlatformModule.LibraryClasses: + if LibraryClass.startswith("NULL"): + Module.LibraryClasses[LibraryClass] = PlatformModule.LibraryClasses[LibraryClass] + + # R9 module + LibraryConsumerList = [Module] + Constructor = [] + ConsumedByList = sdict() + LibraryInstance = sdict() + + EdkLogger.verbose("") + EdkLogger.verbose("Library instances of module [%s] [%s]:" % (str(Module), self.Arch)) + while len(LibraryConsumerList) > 0: + M = LibraryConsumerList.pop() + for LibraryClassName in M.LibraryClasses: + if LibraryClassName not in LibraryInstance: + # override library instance for this module + if LibraryClassName in PlatformModule.LibraryClasses: + LibraryPath = PlatformModule.LibraryClasses[LibraryClassName] + else: + LibraryPath = self.Platform.LibraryClasses[LibraryClassName, ModuleType] + if LibraryPath == None or LibraryPath == "": + LibraryPath = M.LibraryClasses[LibraryClassName] + if LibraryPath == None or LibraryPath == "": + EdkLogger.error("build", RESOURCE_NOT_AVAILABLE, + "Instance of library class [%s] is not found" % LibraryClassName, + File=self.MetaFile, + ExtraData="in [%s] [%s]\n\tconsumed by module [%s]" % (str(M), self.Arch, str(Module))) + + LibraryModule = self.BuildDatabase[LibraryPath, self.Arch] + # for those forced library instance (NULL library), add a fake library class + if LibraryClassName.startswith("NULL"): + LibraryModule.LibraryClass.append(LibraryClassObject(LibraryClassName, [ModuleType])) + elif LibraryModule.LibraryClass == None \ + or len(LibraryModule.LibraryClass) == 0 \ + or (ModuleType != 'USER_DEFINED' + and ModuleType not in LibraryModule.LibraryClass[0].SupModList): + # only USER_DEFINED can link against any library instance despite of its SupModList + EdkLogger.error("build", OPTION_MISSING, + "Module type [%s] is not supported by library instance [%s]" \ + % (ModuleType, LibraryPath), File=self.MetaFile, + ExtraData="consumed by [%s]" % str(Module)) + + LibraryInstance[LibraryClassName] = LibraryModule + LibraryConsumerList.append(LibraryModule) + EdkLogger.verbose("\t" + str(LibraryClassName) + " : " + str(LibraryModule)) + else: + LibraryModule = LibraryInstance[LibraryClassName] + + if LibraryModule == None: + continue + + if LibraryModule.ConstructorList != [] and LibraryModule not in Constructor: + Constructor.append(LibraryModule) + + if LibraryModule not in ConsumedByList: + ConsumedByList[LibraryModule] = [] + # don't add current module itself to consumer list + if M != Module: + if M in ConsumedByList[LibraryModule]: + continue + ConsumedByList[LibraryModule].append(M) + # + # Initialize the sorted output list to the empty set + # + SortedLibraryList = [] + # + # Q <- Set of all nodes with no incoming edges + # + LibraryList = [] #LibraryInstance.values() + Q = [] + for LibraryClassName in LibraryInstance: + M = LibraryInstance[LibraryClassName] + LibraryList.append(M) + if ConsumedByList[M] == []: + Q.append(M) + + # + # start the DAG algorithm + # + while True: + EdgeRemoved = True + while Q == [] and EdgeRemoved: + EdgeRemoved = False + # for each node Item with a Constructor + for Item in LibraryList: + if Item not in Constructor: + continue + # for each Node without a constructor with an edge e from Item to Node + for Node in ConsumedByList[Item]: + if Node in Constructor: + continue + # remove edge e from the graph if Node has no constructor + ConsumedByList[Item].remove(Node) + EdgeRemoved = True + if ConsumedByList[Item] == []: + # insert Item into Q + Q.insert(0, Item) + break + if Q != []: + break + # DAG is done if there's no more incoming edge for all nodes + if Q == []: + break + + # remove node from Q + Node = Q.pop() + # output Node + SortedLibraryList.append(Node) + + # for each node Item with an edge e from Node to Item do + for Item in LibraryList: + if Node not in ConsumedByList[Item]: + continue + # remove edge e from the graph + ConsumedByList[Item].remove(Node) + + if ConsumedByList[Item] != []: + continue + # insert Item into Q, if Item has no other incoming edges + Q.insert(0, Item) + + # + # if any remaining node Item in the graph has a constructor and an incoming edge, then the graph has a cycle + # + for Item in LibraryList: + if ConsumedByList[Item] != [] and Item in Constructor and len(Constructor) > 1: + ErrorMessage = "\tconsumed by " + "\n\tconsumed by ".join([str(L) for L in ConsumedByList[Item]]) + EdkLogger.error("build", BUILD_ERROR, 'Library [%s] with constructors has a cycle' % str(Item), + ExtraData=ErrorMessage, File=self.MetaFile) + if Item not in SortedLibraryList: + SortedLibraryList.append(Item) + + # + # Build the list of constructor and destructir names + # The DAG Topo sort produces the destructor order, so the list of constructors must generated in the reverse order + # + SortedLibraryList.reverse() + return SortedLibraryList + + + ## Override PCD setting (type, value, ...) + # + # @param ToPcd The PCD to be overrided + # @param FromPcd The PCD overrideing from + # + def _OverridePcd(self, ToPcd, FromPcd, Module=""): + # + # in case there's PCDs coming from FDF file, which have no type given. + # at this point, ToPcd.Type has the type found from dependent + # package + # + if FromPcd != None: + if ToPcd.Pending and FromPcd.Type not in [None, '']: + ToPcd.Type = FromPcd.Type + elif ToPcd.Type not in [None, ''] and FromPcd.Type not in [None, ''] \ + and ToPcd.Type != FromPcd.Type: + EdkLogger.error("build", OPTION_CONFLICT, "Mismatched PCD type", + ExtraData="%s.%s is defined as [%s] in module %s, but as [%s] in platform."\ + % (ToPcd.TokenSpaceGuidCName, ToPcd.TokenCName, + ToPcd.Type, Module, FromPcd.Type), + File=self.MetaFile) + + if FromPcd.MaxDatumSize not in [None, '']: + ToPcd.MaxDatumSize = FromPcd.MaxDatumSize + if FromPcd.DefaultValue not in [None, '']: + ToPcd.DefaultValue = FromPcd.DefaultValue + if FromPcd.TokenValue not in [None, '']: + ToPcd.TokenValue = FromPcd.TokenValue + if FromPcd.MaxDatumSize not in [None, '']: + ToPcd.MaxDatumSize = FromPcd.MaxDatumSize + if FromPcd.DatumType not in [None, '']: + ToPcd.DatumType = FromPcd.DatumType + if FromPcd.SkuInfoList not in [None, '', []]: + ToPcd.SkuInfoList = FromPcd.SkuInfoList + + # check the validation of datum + IsValid, Cause = CheckPcdDatum(ToPcd.DatumType, ToPcd.DefaultValue) + if not IsValid: + EdkLogger.error('build', FORMAT_INVALID, Cause, File=self.MetaFile, + ExtraData="%s.%s" % (ToPcd.TokenSpaceGuidCName, ToPcd.TokenCName)) + + if ToPcd.DatumType == "VOID*" and ToPcd.MaxDatumSize in ['', None]: + EdkLogger.debug(EdkLogger.DEBUG_9, "No MaxDatumSize specified for PCD %s.%s" \ + % (ToPcd.TokenSpaceGuidCName, ToPcd.TokenCName)) + Value = ToPcd.DefaultValue + if Value in [None, '']: + ToPcd.MaxDatumSize = 1 + elif Value[0] == 'L': + ToPcd.MaxDatumSize = str(len(Value) * 2) + elif Value[0] == '{': + ToPcd.MaxDatumSize = str(len(Value.split(','))) + else: + ToPcd.MaxDatumSize = str(len(Value)) + + # apply default SKU for dynamic PCDS if specified one is not available + if (ToPcd.Type in PCD_DYNAMIC_TYPE_LIST or ToPcd.Type in PCD_DYNAMIC_EX_TYPE_LIST) \ + and ToPcd.SkuInfoList in [None, {}, '']: + if self.Platform.SkuName in self.Platform.SkuIds: + SkuName = self.Platform.SkuName + else: + SkuName = 'DEFAULT' + ToPcd.SkuInfoList = { + SkuName : SkuInfoClass(SkuName, self.Platform.SkuIds[SkuName], '', '', '', '', '', ToPcd.DefaultValue) + } + + ## Apply PCD setting defined platform to a module + # + # @param Module The module from which the PCD setting will be overrided + # + # @retval PCD_list The list PCDs with settings from platform + # + def ApplyPcdSetting(self, Module, Pcds): + # for each PCD in module + for Name,Guid in Pcds: + PcdInModule = Pcds[Name,Guid] + # find out the PCD setting in platform + if (Name,Guid) in self.Platform.Pcds: + PcdInPlatform = self.Platform.Pcds[Name,Guid] + else: + PcdInPlatform = None + # then override the settings if any + self._OverridePcd(PcdInModule, PcdInPlatform, Module) + # resolve the VariableGuid value + for SkuId in PcdInModule.SkuInfoList: + Sku = PcdInModule.SkuInfoList[SkuId] + if Sku.VariableGuid == '': continue + Sku.VariableGuidValue = GuidValue(Sku.VariableGuid, self.PackageList) + if Sku.VariableGuidValue == None: + PackageList = "\n\t".join([str(P) for P in self.PackageList]) + EdkLogger.error( + 'build', + RESOURCE_NOT_AVAILABLE, + "Value of GUID [%s] is not found in" % Sku.VariableGuid, + ExtraData=PackageList + "\n\t(used with %s.%s from module %s)" \ + % (Guid, Name, str(Module)), + File=self.MetaFile + ) + + # override PCD settings with module specific setting + if Module in self.Platform.Modules: + PlatformModule = self.Platform.Modules[str(Module)] + for Key in PlatformModule.Pcds: + if Key in Pcds: + self._OverridePcd(Pcds[Key], PlatformModule.Pcds[Key], Module) + return Pcds.values() + + ## Resolve library names to library modules + # + # (for R8.x modules) + # + # @param Module The module from which the library names will be resolved + # + # @retval library_list The list of library modules + # + def ResolveLibraryReference(self, Module): + EdkLogger.verbose("") + EdkLogger.verbose("Library instances of module [%s] [%s]:" % (str(Module), self.Arch)) + LibraryConsumerList = [Module] + + # "CompilerStub" is a must for R8 modules + if Module.Libraries: + Module.Libraries.append("CompilerStub") + LibraryList = [] + while len(LibraryConsumerList) > 0: + M = LibraryConsumerList.pop() + for LibraryName in M.Libraries: + Library = self.Platform.LibraryClasses[LibraryName, ':dummy:'] + if Library == None: + for Key in self.Platform.LibraryClasses.data.keys(): + if LibraryName.upper() == Key.upper(): + Library = self.Platform.LibraryClasses[Key, ':dummy:'] + break + if Library == None: + EdkLogger.warn("build", "Library [%s] is not found" % LibraryName, File=str(M), + ExtraData="\t%s [%s]" % (str(Module), self.Arch)) + continue + + if Library not in LibraryList: + LibraryList.append(Library) + LibraryConsumerList.append(Library) + EdkLogger.verbose("\t" + LibraryName + " : " + str(Library) + ' ' + str(type(Library))) + return LibraryList + + ## Expand * in build option key + # + # @param Options Options to be expanded + # + # @retval options Options expanded + # + def _ExpandBuildOption(self, Options, ModuleStyle=None): + BuildOptions = {} + FamilyMatch = False + FamilyIsNull = True + for Key in Options: + if ModuleStyle != None and len (Key) > 2: + # Check Module style is EDK or EDKII. + # Only append build option for the matched style module. + if ModuleStyle == EDK_NAME and Key[2] != EDK_NAME: + continue + elif ModuleStyle == EDKII_NAME and Key[2] != EDKII_NAME: + continue + Family = Key[0] + Target, Tag, Arch, Tool, Attr = Key[1].split("_") + # if tool chain family doesn't match, skip it + if Tool in self.ToolDefinition and Family != "": + FamilyIsNull = False + if self.ToolDefinition[Tool].get(TAB_TOD_DEFINES_BUILDRULEFAMILY, "") != "": + if Family != self.ToolDefinition[Tool][TAB_TOD_DEFINES_BUILDRULEFAMILY]: + continue + elif Family != self.ToolDefinition[Tool][TAB_TOD_DEFINES_FAMILY]: + continue + FamilyMatch = True + # expand any wildcard + if Target == "*" or Target == self.BuildTarget: + if Tag == "*" or Tag == self.ToolChain: + if Arch == "*" or Arch == self.Arch: + if Tool not in BuildOptions: + BuildOptions[Tool] = {} + if Attr != "FLAGS" or Attr not in BuildOptions[Tool]: + BuildOptions[Tool][Attr] = Options[Key] + else: + # append options for the same tool + BuildOptions[Tool][Attr] += " " + Options[Key] + # Build Option Family has been checked, which need't to be checked again for family. + if FamilyMatch or FamilyIsNull: + return BuildOptions + + for Key in Options: + if ModuleStyle != None and len (Key) > 2: + # Check Module style is EDK or EDKII. + # Only append build option for the matched style module. + if ModuleStyle == EDK_NAME and Key[2] != EDK_NAME: + continue + elif ModuleStyle == EDKII_NAME and Key[2] != EDKII_NAME: + continue + Family = Key[0] + Target, Tag, Arch, Tool, Attr = Key[1].split("_") + # if tool chain family doesn't match, skip it + if Tool not in self.ToolDefinition or Family =="": + continue + # option has been added before + if Family != self.ToolDefinition[Tool][TAB_TOD_DEFINES_FAMILY]: + continue + + # expand any wildcard + if Target == "*" or Target == self.BuildTarget: + if Tag == "*" or Tag == self.ToolChain: + if Arch == "*" or Arch == self.Arch: + if Tool not in BuildOptions: + BuildOptions[Tool] = {} + if Attr != "FLAGS" or Attr not in BuildOptions[Tool]: + BuildOptions[Tool][Attr] = Options[Key] + else: + # append options for the same tool + BuildOptions[Tool][Attr] += " " + Options[Key] + return BuildOptions + + ## Append build options in platform to a module + # + # @param Module The module to which the build options will be appened + # + # @retval options The options appended with build options in platform + # + def ApplyBuildOption(self, Module): + # Get the different options for the different style module + if Module.AutoGenVersion < 0x00010005: + PlatformOptions = self.EdkBuildOption + else: + PlatformOptions = self.EdkIIBuildOption + ModuleOptions = self._ExpandBuildOption(Module.BuildOptions) + if Module in self.Platform.Modules: + PlatformModule = self.Platform.Modules[str(Module)] + PlatformModuleOptions = self._ExpandBuildOption(PlatformModule.BuildOptions) + else: + PlatformModuleOptions = {} + + AllTools = set(ModuleOptions.keys() + PlatformOptions.keys() + PlatformModuleOptions.keys() + self.ToolDefinition.keys()) + BuildOptions = {} + for Tool in AllTools: + if Tool not in BuildOptions: + BuildOptions[Tool] = {} + + for Options in [self.ToolDefinition, ModuleOptions, PlatformOptions, PlatformModuleOptions]: + if Tool not in Options: + continue + for Attr in Options[Tool]: + Value = Options[Tool][Attr] + if Attr not in BuildOptions[Tool]: + BuildOptions[Tool][Attr] = "" + # check if override is indicated + if Value.startswith('='): + BuildOptions[Tool][Attr] = Value[1:] + else: + BuildOptions[Tool][Attr] += " " + Value + return BuildOptions + + Platform = property(_GetPlatform) + Name = property(_GetName) + Guid = property(_GetGuid) + Version = property(_GetVersion) + + OutputDir = property(_GetOutputDir) + BuildDir = property(_GetBuildDir) + MakeFileDir = property(_GetMakeFileDir) + FdfFile = property(_GetFdfFile) + + PcdTokenNumber = property(_GetPcdTokenNumbers) # (TokenCName, TokenSpaceGuidCName) : GeneratedTokenNumber + DynamicPcdList = property(_GetDynamicPcdList) # [(TokenCName1, TokenSpaceGuidCName1), (TokenCName2, TokenSpaceGuidCName2), ...] + NonDynamicPcdList = property(_GetNonDynamicPcdList) # [(TokenCName1, TokenSpaceGuidCName1), (TokenCName2, TokenSpaceGuidCName2), ...] + PackageList = property(_GetPackageList) + + ToolDefinition = property(_GetToolDefinition) # toolcode : tool path + ToolDefinitionFile = property(_GetToolDefFile) # toolcode : lib path + ToolChainFamily = property(_GetToolChainFamily) + BuildRuleFamily = property(_GetBuildRuleFamily) + BuildOption = property(_GetBuildOptions) # toolcode : option + EdkBuildOption = property(_GetEdkBuildOptions) # edktoolcode : option + EdkIIBuildOption = property(_GetEdkIIBuildOptions) # edkiitoolcode : option + + BuildCommand = property(_GetBuildCommand) + BuildRule = property(_GetBuildRule) + ModuleAutoGenList = property(_GetModuleAutoGenList) + LibraryAutoGenList = property(_GetLibraryAutoGenList) + +## ModuleAutoGen class +# +# This class encapsules the AutoGen behaviors for the build tools. In addition to +# the generation of AutoGen.h and AutoGen.c, it will generate *.depex file according +# to the [depex] section in module's inf file. +# +class ModuleAutoGen(AutoGen): + ## The real constructor of ModuleAutoGen + # + # This method is not supposed to be called by users of ModuleAutoGen. It's + # only used by factory method __new__() to do real initialization work for an + # object of ModuleAutoGen + # + # @param Workspace EdkIIWorkspaceBuild object + # @param ModuleFile The path of module file + # @param Target Build target (DEBUG, RELEASE) + # @param Toolchain Name of tool chain + # @param Arch The arch the module supports + # @param PlatformFile Platform meta-file + # + def _Init(self, Workspace, ModuleFile, Target, Toolchain, Arch, PlatformFile): + EdkLogger.debug(EdkLogger.DEBUG_9, "AutoGen module [%s] [%s]" % (ModuleFile, Arch)) + GlobalData.gProcessingFile = "%s [%s, %s, %s]" % (ModuleFile, Arch, Toolchain, Target) + + self.Workspace = Workspace + self.WorkspaceDir = Workspace.WorkspaceDir + + self.MetaFile = ModuleFile + self.PlatformInfo = PlatformAutoGen(Workspace, PlatformFile, Target, Toolchain, Arch) + # check if this module is employed by active platform + if not self.PlatformInfo.ValidModule(self.MetaFile): + EdkLogger.verbose("Module [%s] for [%s] is not employed by active platform\n" \ + % (self.MetaFile, Arch)) + return False + + self.SourceDir = self.MetaFile.SubDir + self.SourceOverrideDir = None + # use overrided path defined in DSC file + if self.MetaFile.Key in GlobalData.gOverrideDir: + self.SourceOverrideDir = GlobalData.gOverrideDir[self.MetaFile.Key] + + self.ToolChain = Toolchain + self.BuildTarget = Target + self.Arch = Arch + self.ToolChainFamily = self.PlatformInfo.ToolChainFamily + self.BuildRuleFamily = self.PlatformInfo.BuildRuleFamily + + self.IsMakeFileCreated = False + self.IsCodeFileCreated = False + + self.BuildDatabase = self.Workspace.BuildDatabase + + self._Module = None + self._Name = None + self._Guid = None + self._Version = None + self._ModuleType = None + self._ComponentType = None + self._PcdIsDriver = None + self._AutoGenVersion = None + self._LibraryFlag = None + self._CustomMakefile = None + self._Macro = None + + self._BuildDir = None + self._OutputDir = None + self._DebugDir = None + self._MakeFileDir = None + + self._IncludePathList = None + self._AutoGenFileList = None + self._UnicodeFileList = None + self._SourceFileList = None + self._ObjectFileList = None + self._BinaryFileList = None + + self._DependentPackageList = None + self._DependentLibraryList = None + self._LibraryAutoGenList = None + self._DerivedPackageList = None + self._ModulePcdList = None + self._LibraryPcdList = None + self._GuidList = None + self._ProtocolList = None + self._PpiList = None + self._DepexList = None + self._DepexExpressionList = None + self._BuildOption = None + self._BuildTargets = None + self._IntroBuildTargetList = None + self._FinalBuildTargetList = None + self._FileTypes = None + self._BuildRules = None + + return True + + def __repr__(self): + return "%s [%s]" % (self.MetaFile, self.Arch) + + # Macros could be used in build_rule.txt (also Makefile) + def _GetMacros(self): + if self._Macro == None: + self._Macro = sdict() + self._Macro["WORKSPACE" ] = self.WorkspaceDir + self._Macro["MODULE_NAME" ] = self.Name + self._Macro["MODULE_GUID" ] = self.Guid + self._Macro["MODULE_VERSION" ] = self.Version + self._Macro["MODULE_TYPE" ] = self.ModuleType + self._Macro["MODULE_FILE" ] = str(self.MetaFile) + self._Macro["MODULE_FILE_BASE_NAME" ] = self.MetaFile.BaseName + self._Macro["MODULE_RELATIVE_DIR" ] = self.SourceDir + self._Macro["MODULE_DIR" ] = self.SourceDir + + self._Macro["BASE_NAME" ] = self.Name + + self._Macro["ARCH" ] = self.Arch + self._Macro["TOOLCHAIN" ] = self.ToolChain + self._Macro["TOOLCHAIN_TAG" ] = self.ToolChain + self._Macro["TARGET" ] = self.BuildTarget + + self._Macro["BUILD_DIR" ] = self.PlatformInfo.BuildDir + self._Macro["BIN_DIR" ] = os.path.join(self.PlatformInfo.BuildDir, self.Arch) + self._Macro["LIB_DIR" ] = os.path.join(self.PlatformInfo.BuildDir, self.Arch) + self._Macro["MODULE_BUILD_DIR" ] = self.BuildDir + self._Macro["OUTPUT_DIR" ] = self.OutputDir + self._Macro["DEBUG_DIR" ] = self.DebugDir + return self._Macro + + ## Return the module build data object + def _GetModule(self): + if self._Module == None: + self._Module = self.Workspace.BuildDatabase[self.MetaFile, self.Arch] + return self._Module + + ## Return the module name + def _GetBaseName(self): + return self.Module.BaseName + + ## Return the module SourceOverridePath + def _GetSourceOverridePath(self): + return self.Module.SourceOverridePath + + ## Return the module meta-file GUID + def _GetGuid(self): + return self.Module.Guid + + ## Return the module version + def _GetVersion(self): + return self.Module.Version + + ## Return the module type + def _GetModuleType(self): + return self.Module.ModuleType + + ## Return the component type (for R8.x style of module) + def _GetComponentType(self): + return self.Module.ComponentType + + ## Return the build type + def _GetBuildType(self): + return self.Module.BuildType + + ## Return the PCD_IS_DRIVER setting + def _GetPcdIsDriver(self): + return self.Module.PcdIsDriver + + ## Return the autogen version, i.e. module meta-file version + def _GetAutoGenVersion(self): + return self.Module.AutoGenVersion + + ## Check if the module is library or not + def _IsLibrary(self): + if self._LibraryFlag == None: + if self.Module.LibraryClass != None and self.Module.LibraryClass != []: + self._LibraryFlag = True + else: + self._LibraryFlag = False + return self._LibraryFlag + + ## Return the directory to store intermediate files of the module + def _GetBuildDir(self): + if self._BuildDir == None: + self._BuildDir = path.join( + self.PlatformInfo.BuildDir, + self.Arch, + self.SourceDir, + self.MetaFile.BaseName + ) + CreateDirectory(self._BuildDir) + return self._BuildDir + + ## Return the directory to store the intermediate object files of the mdoule + def _GetOutputDir(self): + if self._OutputDir == None: + self._OutputDir = path.join(self.BuildDir, "OUTPUT") + CreateDirectory(self._OutputDir) + return self._OutputDir + + ## Return the directory to store auto-gened source files of the mdoule + def _GetDebugDir(self): + if self._DebugDir == None: + self._DebugDir = path.join(self.BuildDir, "DEBUG") + CreateDirectory(self._DebugDir) + return self._DebugDir + + ## Return the path of custom file + def _GetCustomMakefile(self): + if self._CustomMakefile == None: + self._CustomMakefile = {} + for Type in self.Module.CustomMakefile: + if Type in gMakeTypeMap: + MakeType = gMakeTypeMap[Type] + else: + MakeType = 'nmake' + if self.SourceOverrideDir != None: + File = os.path.join(self.SourceOverrideDir, self.Module.CustomMakefile[Type]) + if not os.path.exists(File): + File = os.path.join(self.SourceDir, self.Module.CustomMakefile[Type]) + else: + File = os.path.join(self.SourceDir, self.Module.CustomMakefile[Type]) + self._CustomMakefile[MakeType] = File + return self._CustomMakefile + + ## Return the directory of the makefile + # + # @retval string The directory string of module's makefile + # + def _GetMakeFileDir(self): + return self.BuildDir + + ## Return build command string + # + # @retval string Build command string + # + def _GetBuildCommand(self): + return self.PlatformInfo.BuildCommand + + ## Get object list of all packages the module and its dependent libraries belong to + # + # @retval list The list of package object + # + def _GetDerivedPackageList(self): + PackageList = [] + for M in [self.Module] + self.DependentLibraryList: + for Package in M.Packages: + if Package in PackageList: + continue + PackageList.append(Package) + return PackageList + + ## Merge dependency expression + # + # @retval list The token list of the dependency expression after parsed + # + def _GetDepexTokenList(self): + if self._DepexList == None: + self._DepexList = {} + if self.IsLibrary or TAB_DEPENDENCY_EXPRESSION_FILE in self.FileTypes: + return self._DepexList + + self._DepexList[self.ModuleType] = [] + + for ModuleType in self._DepexList: + DepexList = self._DepexList[ModuleType] + # + # Append depex from dependent libraries, if not "BEFORE", "AFTER" expresion + # + for M in [self.Module] + self.DependentLibraryList: + Inherited = False + for D in M.Depex[self.Arch, ModuleType]: + if DepexList != []: + DepexList.append('AND') + DepexList.append('(') + DepexList.extend(D) + if DepexList[-1] == 'END': # no need of a END at this time + DepexList.pop() + DepexList.append(')') + Inherited = True + if Inherited: + EdkLogger.verbose("DEPEX[%s] (+%s) = %s" % (self.Name, M.BaseName, DepexList)) + if 'BEFORE' in DepexList or 'AFTER' in DepexList: + break + if len(DepexList) > 0: + EdkLogger.verbose('') + return self._DepexList + + ## Merge dependency expression + # + # @retval list The token list of the dependency expression after parsed + # + def _GetDepexExpressionTokenList(self): + if self._DepexExpressionList == None: + self._DepexExpressionList = {} + if self.IsLibrary or TAB_DEPENDENCY_EXPRESSION_FILE in self.FileTypes: + return self._DepexExpressionList + + self._DepexExpressionList[self.ModuleType] = '' + + for ModuleType in self._DepexExpressionList: + DepexExpressionList = self._DepexExpressionList[ModuleType] + # + # Append depex from dependent libraries, if not "BEFORE", "AFTER" expresion + # + for M in [self.Module] + self.DependentLibraryList: + Inherited = False + for D in M.DepexExpression[self.Arch, ModuleType]: + if DepexExpressionList != '': + DepexExpressionList += ' AND ' + DepexExpressionList += '(' + DepexExpressionList += D + DepexExpressionList = DepexExpressionList.rstrip('END').strip() + DepexExpressionList += ')' + Inherited = True + if Inherited: + EdkLogger.verbose("DEPEX[%s] (+%s) = %s" % (self.Name, M.BaseName, DepexExpressionList)) + if 'BEFORE' in DepexExpressionList or 'AFTER' in DepexExpressionList: + break + if len(DepexExpressionList) > 0: + EdkLogger.verbose('') + self._DepexExpressionList[ModuleType] = DepexExpressionList + return self._DepexExpressionList + + ## Return the list of specification version required for the module + # + # @retval list The list of specification defined in module file + # + def _GetSpecification(self): + return self.Module.Specification + + ## Tool option for the module build + # + # @param PlatformInfo The object of PlatformBuildInfo + # @retval dict The dict containing valid options + # + def _GetModuleBuildOption(self): + if self._BuildOption == None: + self._BuildOption = self.PlatformInfo.ApplyBuildOption(self.Module) + return self._BuildOption + + ## Return a list of files which can be built from source + # + # What kind of files can be built is determined by build rules in + # $(WORKSPACE)/Conf/build_rule.txt and toolchain family. + # + def _GetSourceFileList(self): + if self._SourceFileList == None: + self._SourceFileList = [] + for F in self.Module.Sources: + # match tool chain + if F.TagName != "" and F.TagName != self.ToolChain: + EdkLogger.debug(EdkLogger.DEBUG_9, "The toolchain [%s] for processing file [%s] is found, " + "but [%s] is needed" % (F.TagName, str(F), self.ToolChain)) + continue + # match tool chain family + if F.ToolChainFamily != "" and F.ToolChainFamily != self.ToolChainFamily: + EdkLogger.debug( + EdkLogger.DEBUG_0, + "The file [%s] must be built by tools of [%s], " \ + "but current toolchain family is [%s]" \ + % (str(F), F.ToolChainFamily, self.ToolChainFamily)) + continue + + # add the file path into search path list for file including + if F.Dir not in self.IncludePathList and self.AutoGenVersion >= 0x00010005: + self.IncludePathList.insert(0, F.Dir) + self._SourceFileList.append(F) + self._ApplyBuildRule(F, TAB_UNKNOWN_FILE) + return self._SourceFileList + + ## Return the list of unicode files + def _GetUnicodeFileList(self): + if self._UnicodeFileList == None: + if TAB_UNICODE_FILE in self.FileTypes: + self._UnicodeFileList = self.FileTypes[TAB_UNICODE_FILE] + else: + self._UnicodeFileList = [] + return self._UnicodeFileList + + ## Return a list of files which can be built from binary + # + # "Build" binary files are just to copy them to build directory. + # + # @retval list The list of files which can be built later + # + def _GetBinaryFiles(self): + if self._BinaryFileList == None: + self._BinaryFileList = [] + for F in self.Module.Binaries: + if F.Target not in ['COMMON', '*'] and F.Target != self.BuildTarget: + continue + self._BinaryFileList.append(F) + self._ApplyBuildRule(F, F.Type) + return self._BinaryFileList + + def _GetBuildRules(self): + if self._BuildRules == None: + BuildRules = {} + BuildRuleDatabase = self.PlatformInfo.BuildRule + for Type in BuildRuleDatabase.FileTypeList: + #first try getting build rule by BuildRuleFamily + RuleObject = BuildRuleDatabase[Type, self.BuildType, self.Arch, self.BuildRuleFamily] + if not RuleObject: + # build type is always module type, but ... + if self.ModuleType != self.BuildType: + RuleObject = BuildRuleDatabase[Type, self.ModuleType, self.Arch, self.BuildRuleFamily] + #second try getting build rule by ToolChainFamily + if not RuleObject: + RuleObject = BuildRuleDatabase[Type, self.BuildType, self.Arch, self.ToolChainFamily] + if not RuleObject: + # build type is always module type, but ... + if self.ModuleType != self.BuildType: + RuleObject = BuildRuleDatabase[Type, self.ModuleType, self.Arch, self.ToolChainFamily] + if not RuleObject: + continue + RuleObject = RuleObject.Instantiate(self.Macros) + BuildRules[Type] = RuleObject + for Ext in RuleObject.SourceFileExtList: + BuildRules[Ext] = RuleObject + self._BuildRules = BuildRules + return self._BuildRules + + def _ApplyBuildRule(self, File, FileType): + if self._BuildTargets == None: + self._IntroBuildTargetList = set() + self._FinalBuildTargetList = set() + self._BuildTargets = {} + self._FileTypes = {} + + LastTarget = None + RuleChain = [] + SourceList = [File] + Index = 0 + while Index < len(SourceList): + Source = SourceList[Index] + Index = Index + 1 + + if Source != File: + CreateDirectory(Source.Dir) + + if File.IsBinary and File == Source and self._BinaryFileList != None and File in self._BinaryFileList: + RuleObject = self.BuildRules[TAB_DEFAULT_BINARY_FILE] + elif FileType in self.BuildRules: + RuleObject = self.BuildRules[FileType] + elif Source.Ext in self.BuildRules: + RuleObject = self.BuildRules[Source.Ext] + else: + # stop at no more rules + if LastTarget: + self._FinalBuildTargetList.add(LastTarget) + break + + FileType = RuleObject.SourceFileType + if FileType not in self._FileTypes: + self._FileTypes[FileType] = set() + self._FileTypes[FileType].add(Source) + + # stop at STATIC_LIBRARY for library + if self.IsLibrary and FileType == TAB_STATIC_LIBRARY: + if LastTarget: + self._FinalBuildTargetList.add(LastTarget) + break + + Target = RuleObject.Apply(Source) + if not Target: + if LastTarget: + self._FinalBuildTargetList.add(LastTarget) + break + elif not Target.Outputs: + # Only do build for target with outputs + self._FinalBuildTargetList.add(Target) + + if FileType not in self._BuildTargets: + self._BuildTargets[FileType] = set() + self._BuildTargets[FileType].add(Target) + + if not Source.IsBinary and Source == File: + self._IntroBuildTargetList.add(Target) + + # to avoid cyclic rule + if FileType in RuleChain: + break + + RuleChain.append(FileType) + SourceList.extend(Target.Outputs) + LastTarget = Target + FileType = TAB_UNKNOWN_FILE + + def _GetTargets(self): + if self._BuildTargets == None: + self._IntroBuildTargetList = set() + self._FinalBuildTargetList = set() + self._BuildTargets = {} + self._FileTypes = {} + + #TRICK: call _GetSourceFileList to apply build rule for binary files + if self.SourceFileList: + pass + + #TRICK: call _GetBinaryFileList to apply build rule for binary files + if self.BinaryFileList: + pass + + return self._BuildTargets + + def _GetIntroTargetList(self): + self._GetTargets() + return self._IntroBuildTargetList + + def _GetFinalTargetList(self): + self._GetTargets() + return self._FinalBuildTargetList + + def _GetFileTypes(self): + self._GetTargets() + return self._FileTypes + + ## Get the list of package object the module depends on + # + # @retval list The package object list + # + def _GetDependentPackageList(self): + return self.Module.Packages + + ## Return the list of auto-generated code file + # + # @retval list The list of auto-generated file + # + def _GetAutoGenFileList(self): + UniStringAutoGenC = True + UniStringBinBuffer = None + if self.BuildType == 'UEFI_HII': + UniStringBinBuffer = StringIO() + UniStringAutoGenC = False + if self._AutoGenFileList == None: + self._AutoGenFileList = {} + AutoGenC = TemplateString() + AutoGenH = TemplateString() + StringH = TemplateString() + GenC.CreateCode(self, AutoGenC, AutoGenH, StringH, UniStringAutoGenC, UniStringBinBuffer) + if str(AutoGenC) != "" and TAB_C_CODE_FILE in self.FileTypes: + AutoFile = PathClass(gAutoGenCodeFileName, self.DebugDir) + self._AutoGenFileList[AutoFile] = str(AutoGenC) + self._ApplyBuildRule(AutoFile, TAB_UNKNOWN_FILE) + if str(AutoGenH) != "": + AutoFile = PathClass(gAutoGenHeaderFileName, self.DebugDir) + self._AutoGenFileList[AutoFile] = str(AutoGenH) + self._ApplyBuildRule(AutoFile, TAB_UNKNOWN_FILE) + if str(StringH) != "": + AutoFile = PathClass(gAutoGenStringFileName % {"module_name":self.Name}, self.DebugDir) + self._AutoGenFileList[AutoFile] = str(StringH) + self._ApplyBuildRule(AutoFile, TAB_UNKNOWN_FILE) + if UniStringBinBuffer != None and UniStringBinBuffer.getvalue() != "": + AutoFile = PathClass(gAutoGenStringFormFileName % {"module_name":self.Name}, self.OutputDir) + self._AutoGenFileList[AutoFile] = UniStringBinBuffer.getvalue() + AutoFile.IsBinary = True + self._ApplyBuildRule(AutoFile, TAB_UNKNOWN_FILE) + if UniStringBinBuffer != None: + UniStringBinBuffer.close() + return self._AutoGenFileList + + ## Return the list of library modules explicitly or implicityly used by this module + def _GetLibraryList(self): + if self._DependentLibraryList == None: + # only merge library classes and PCD for non-library module + if self.IsLibrary: + self._DependentLibraryList = [] + else: + if self.AutoGenVersion < 0x00010005: + self._DependentLibraryList = self.PlatformInfo.ResolveLibraryReference(self.Module) + else: + self._DependentLibraryList = self.PlatformInfo.ApplyLibraryInstance(self.Module) + return self._DependentLibraryList + + ## Get the list of PCDs from current module + # + # @retval list The list of PCD + # + def _GetModulePcdList(self): + if self._ModulePcdList == None: + # apply PCD settings from platform + self._ModulePcdList = self.PlatformInfo.ApplyPcdSetting(self.Module, self.Module.Pcds) + return self._ModulePcdList + + ## Get the list of PCDs from dependent libraries + # + # @retval list The list of PCD + # + def _GetLibraryPcdList(self): + if self._LibraryPcdList == None: + Pcds = {} + if not self.IsLibrary: + # get PCDs from dependent libraries + for Library in self.DependentLibraryList: + for Key in Library.Pcds: + # skip duplicated PCDs + if Key in self.Module.Pcds or Key in Pcds: + continue + Pcds[Key] = copy.copy(Library.Pcds[Key]) + # apply PCD settings from platform + self._LibraryPcdList = self.PlatformInfo.ApplyPcdSetting(self.Module, Pcds) + else: + self._LibraryPcdList = [] + return self._LibraryPcdList + + ## Get the GUID value mapping + # + # @retval dict The mapping between GUID cname and its value + # + def _GetGuidList(self): + if self._GuidList == None: + self._GuidList = self.Module.Guids + for Library in self.DependentLibraryList: + self._GuidList.update(Library.Guids) + return self._GuidList + + ## Get the protocol value mapping + # + # @retval dict The mapping between protocol cname and its value + # + def _GetProtocolList(self): + if self._ProtocolList == None: + self._ProtocolList = self.Module.Protocols + for Library in self.DependentLibraryList: + self._ProtocolList.update(Library.Protocols) + return self._ProtocolList + + ## Get the PPI value mapping + # + # @retval dict The mapping between PPI cname and its value + # + def _GetPpiList(self): + if self._PpiList == None: + self._PpiList = self.Module.Ppis + for Library in self.DependentLibraryList: + self._PpiList.update(Library.Ppis) + return self._PpiList + + ## Get the list of include search path + # + # @retval list The list path + # + def _GetIncludePathList(self): + if self._IncludePathList == None: + self._IncludePathList = [] + if self.AutoGenVersion < 0x00010005: + for Inc in self.Module.Includes: + if Inc not in self._IncludePathList: + self._IncludePathList.append(Inc) + # for r8 modules + Inc = path.join(Inc, self.Arch.capitalize()) + if os.path.exists(Inc) and Inc not in self._IncludePathList: + self._IncludePathList.append(Inc) + # r8 module needs to put DEBUG_DIR at the end of search path and not to use SOURCE_DIR all the time + self._IncludePathList.append(self.DebugDir) + else: + self._IncludePathList.append(self.MetaFile.Dir) + self._IncludePathList.append(self.DebugDir) + + for Package in self.Module.Packages: + PackageDir = path.join(self.WorkspaceDir, Package.MetaFile.Dir) + if PackageDir not in self._IncludePathList: + self._IncludePathList.append(PackageDir) + for Inc in Package.Includes: + if Inc not in self._IncludePathList: + self._IncludePathList.append(str(Inc)) + return self._IncludePathList + + ## Create makefile for the module and its dependent libraries + # + # @param CreateLibraryMakeFile Flag indicating if or not the makefiles of + # dependent libraries will be created + # + def CreateMakeFile(self, CreateLibraryMakeFile=True): + if self.IsMakeFileCreated: + return + + if not self.IsLibrary and CreateLibraryMakeFile: + for LibraryAutoGen in self.LibraryAutoGenList: + LibraryAutoGen.CreateMakeFile() + + if len(self.CustomMakefile) == 0: + Makefile = GenMake.ModuleMakefile(self) + else: + Makefile = GenMake.CustomMakefile(self) + if Makefile.Generate(): + EdkLogger.debug(EdkLogger.DEBUG_9, "Generated makefile for module %s [%s]" % + (self.Name, self.Arch)) + else: + EdkLogger.debug(EdkLogger.DEBUG_9, "Skipped the generation of makefile for module %s [%s]" % + (self.Name, self.Arch)) + + self.IsMakeFileCreated = True + + ## Create autogen code for the module and its dependent libraries + # + # @param CreateLibraryCodeFile Flag indicating if or not the code of + # dependent libraries will be created + # + def CreateCodeFile(self, CreateLibraryCodeFile=True): + if self.IsCodeFileCreated: + return + + if not self.IsLibrary and CreateLibraryCodeFile: + for LibraryAutoGen in self.LibraryAutoGenList: + LibraryAutoGen.CreateCodeFile() + + AutoGenList = [] + IgoredAutoGenList = [] + + for File in self.AutoGenFileList: + if GenC.Generate(File.Path, self.AutoGenFileList[File], File.IsBinary): + #Ignore R8 AutoGen.c + if self.AutoGenVersion < 0x00010005 and File.Name == 'AutoGen.c': + continue + + AutoGenList.append(str(File)) + else: + IgoredAutoGenList.append(str(File)) + + # Skip the following code for EDK I inf + if self.AutoGenVersion < 0x00010005: + return + + for ModuleType in self.DepexList: + if len(self.DepexList[ModuleType]) == 0: + continue + Dpx = GenDepex.DependencyExpression(self.DepexList[ModuleType], ModuleType, True) + DpxFile = gAutoGenDepexFileName % {"module_name" : self.Name} + + if Dpx.Generate(path.join(self.OutputDir, DpxFile)): + AutoGenList.append(str(DpxFile)) + else: + IgoredAutoGenList.append(str(DpxFile)) + + if IgoredAutoGenList == []: + EdkLogger.debug(EdkLogger.DEBUG_9, "Generated [%s] files for module %s [%s]" % + (" ".join(AutoGenList), self.Name, self.Arch)) + elif AutoGenList == []: + EdkLogger.debug(EdkLogger.DEBUG_9, "Skipped the generation of [%s] files for module %s [%s]" % + (" ".join(IgoredAutoGenList), self.Name, self.Arch)) + else: + EdkLogger.debug(EdkLogger.DEBUG_9, "Generated [%s] (skipped %s) files for module %s [%s]" % + (" ".join(AutoGenList), " ".join(IgoredAutoGenList), self.Name, self.Arch)) + + self.IsCodeFileCreated = True + return AutoGenList + + ## Summarize the ModuleAutoGen objects of all libraries used by this module + def _GetLibraryAutoGenList(self): + if self._LibraryAutoGenList == None: + self._LibraryAutoGenList = [] + for Library in self.DependentLibraryList: + La = ModuleAutoGen( + self.Workspace, + Library.MetaFile, + self.BuildTarget, + self.ToolChain, + self.Arch, + self.PlatformInfo.MetaFile + ) + if La not in self._LibraryAutoGenList: + self._LibraryAutoGenList.append(La) + for Lib in La.CodaTargetList: + self._ApplyBuildRule(Lib.Target, TAB_UNKNOWN_FILE) + return self._LibraryAutoGenList + + ## Return build command string + # + # @retval string Build command string + # + def _GetBuildCommand(self): + return self.PlatformInfo.BuildCommand + + + Module = property(_GetModule) + Name = property(_GetBaseName) + Guid = property(_GetGuid) + Version = property(_GetVersion) + ModuleType = property(_GetModuleType) + ComponentType = property(_GetComponentType) + BuildType = property(_GetBuildType) + PcdIsDriver = property(_GetPcdIsDriver) + AutoGenVersion = property(_GetAutoGenVersion) + Macros = property(_GetMacros) + Specification = property(_GetSpecification) + + IsLibrary = property(_IsLibrary) + + BuildDir = property(_GetBuildDir) + OutputDir = property(_GetOutputDir) + DebugDir = property(_GetDebugDir) + MakeFileDir = property(_GetMakeFileDir) + CustomMakefile = property(_GetCustomMakefile) + + IncludePathList = property(_GetIncludePathList) + AutoGenFileList = property(_GetAutoGenFileList) + UnicodeFileList = property(_GetUnicodeFileList) + SourceFileList = property(_GetSourceFileList) + BinaryFileList = property(_GetBinaryFiles) # FileType : [File List] + Targets = property(_GetTargets) + IntroTargetList = property(_GetIntroTargetList) + CodaTargetList = property(_GetFinalTargetList) + FileTypes = property(_GetFileTypes) + BuildRules = property(_GetBuildRules) + + DependentPackageList = property(_GetDependentPackageList) + DependentLibraryList = property(_GetLibraryList) + LibraryAutoGenList = property(_GetLibraryAutoGenList) + DerivedPackageList = property(_GetDerivedPackageList) + + ModulePcdList = property(_GetModulePcdList) + LibraryPcdList = property(_GetLibraryPcdList) + GuidList = property(_GetGuidList) + ProtocolList = property(_GetProtocolList) + PpiList = property(_GetPpiList) + DepexList = property(_GetDepexTokenList) + DepexExpressionList = property(_GetDepexExpressionTokenList) + BuildOption = property(_GetModuleBuildOption) + BuildCommand = property(_GetBuildCommand) + +# This acts like the main() function for the script, unless it is 'import'ed into another script. +if __name__ == '__main__': + pass + diff --git a/BaseTools/Source/Python/AutoGen/GenC.py b/BaseTools/Source/Python/AutoGen/GenC.py index 0a2bb623d8..a913cf4e5a 100644 --- a/BaseTools/Source/Python/AutoGen/GenC.py +++ b/BaseTools/Source/Python/AutoGen/GenC.py @@ -1,7 +1,7 @@ ## @file # Routines for generating AutoGen.h and AutoGen.c # -# Copyright (c) 2007, Intel Corporation +# Copyright (c) 2007 - 2010, Intel Corporation # All rights reserved. This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License # which accompanies this distribution. The full text of the license may be found at @@ -162,7 +162,7 @@ ${END} GUID GuidTable[${PHASE}_GUID_TABLE_SIZE]; ${BEGIN} STRING_HEAD ${STRING_HEAD_CNAME_DECL}_${STRING_HEAD_GUID_DECL}[${STRING_HEAD_NUMSKUS_DECL}]; ${END} -${BEGIN} VARIABLE_HEAD ${VARIABLE_HEAD_CNAME_DECL}_${VARIABLE_HEAD_GUID_DECL}[${VARIABLE_HEAD_NUMSKUS_DECL}]; +${BEGIN} VARIABLE_HEAD ${VARIABLE_HEAD_CNAME_DECL}_${VARIABLE_HEAD_GUID_DECL}_Variable_Header[${VARIABLE_HEAD_NUMSKUS_DECL}]; ${END} ${BEGIN} UINT8 StringTable${STRING_TABLE_INDEX}[${STRING_TABLE_LENGTH}]; /* ${STRING_TABLE_CNAME}_${STRING_TABLE_GUID} */ ${END} @@ -253,7 +253,7 @@ ${END} }, /* LocalTokenNumberTable */ { -${BEGIN} offsetof(${PHASE}_PCD_DATABASE, ${TOKEN_INIT}.${TOKEN_CNAME}_${TOKEN_GUID}) | ${TOKEN_TYPE}, +${BEGIN} offsetof(${PHASE}_PCD_DATABASE, ${TOKEN_INIT}.${TOKEN_CNAME}_${TOKEN_GUID}${VARDEF_HEADER}) | ${TOKEN_TYPE}, ${END} }, /* GuidTable */ @@ -263,7 +263,7 @@ ${END} }, ${BEGIN} { ${STRING_HEAD_VALUE} }, /* ${STRING_HEAD_CNAME_DECL}_${STRING_HEAD_GUID_DECL}[${STRING_HEAD_NUMSKUS_DECL}] */ ${END} -${BEGIN} /* ${VARIABLE_HEAD_CNAME_DECL}_${VARIABLE_HEAD_GUID_DECL}[${VARIABLE_HEAD_NUMSKUS_DECL}] */ +${BEGIN} /* ${VARIABLE_HEAD_CNAME_DECL}_${VARIABLE_HEAD_GUID_DECL}_Variable_Header[${VARIABLE_HEAD_NUMSKUS_DECL}] */ { ${VARIABLE_HEAD_VALUE} }, @@ -453,7 +453,7 @@ ${END} gSmmCoreEntryPointString = TemplateString(""" ${BEGIN} -const UINT32 _gUefiDriverRevision = ${EfiSpecVersion}; +const UINT32 _gUefiDriverRevision = ${UefiSpecVersion}; const UINT32 _gDxeRevision = ${PiSpecVersion}; EFI_STATUS @@ -482,7 +482,7 @@ ${END} gDxeSmmEntryPointString = [ TemplateString(""" -const UINT32 _gUefiDriverRevision = ${EfiSpecVersion}; +const UINT32 _gUefiDriverRevision = ${UefiSpecVersion}; const UINT32 _gDxeRevision = ${PiSpecVersion}; EFI_STATUS @@ -497,11 +497,11 @@ ProcessModuleEntryPointList ( } """), TemplateString(""" -const UINT32 _gUefiDriverRevision = ${EfiSpecVersion}; +const UINT32 _gUefiDriverRevision = ${UefiSpecVersion}; const UINT32 _gDxeRevision = ${PiSpecVersion}; static BASE_LIBRARY_JUMP_BUFFER mJumpContext; -static EFI_STATUS mDriverEntryPointStatus = EFI_LOAD_ERROR; +static EFI_STATUS mDriverEntryPointStatus; VOID EFIAPI @@ -522,8 +522,9 @@ ProcessModuleEntryPointList ( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable ) - { + mDriverEntryPointStatus = EFI_LOAD_ERROR; + ${BEGIN} if (SetJump (&mJumpContext) == 0) { ExitDriver (${Function} (ImageHandle, SystemTable)); @@ -550,7 +551,7 @@ ${END} gUefiDriverEntryPointString = [ TemplateString(""" -const UINT32 _gUefiDriverRevision = ${EfiSpecVersion}; +const UINT32 _gUefiDriverRevision = ${UefiSpecVersion}; const UINT32 _gDxeRevision = ${PiSpecVersion}; EFI_STATUS @@ -564,7 +565,7 @@ ProcessModuleEntryPointList ( } """), TemplateString(""" -const UINT32 _gUefiDriverRevision = ${EfiSpecVersion}; +const UINT32 _gUefiDriverRevision = ${UefiSpecVersion}; const UINT32 _gDxeRevision = ${PiSpecVersion}; ${BEGIN} @@ -592,17 +593,20 @@ ExitDriver ( } """), TemplateString(""" -const UINT32 _gUefiDriverRevision = ${EfiSpecVersion}; +const UINT32 _gUefiDriverRevision = ${UefiSpecVersion}; const UINT32 _gDxeRevision = ${PiSpecVersion}; +static BASE_LIBRARY_JUMP_BUFFER mJumpContext; +static EFI_STATUS mDriverEntryPointStatus; + EFI_STATUS EFIAPI ProcessModuleEntryPointList ( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable ) - { + mDriverEntryPointStatus = EFI_LOAD_ERROR; ${BEGIN} if (SetJump (&mJumpContext) == 0) { ExitDriver (${Function} (ImageHandle, SystemTable)); @@ -612,9 +616,6 @@ ProcessModuleEntryPointList ( return mDriverEntryPointStatus; } -static BASE_LIBRARY_JUMP_BUFFER mJumpContext; -static EFI_STATUS mDriverEntryPointStatus = EFI_LOAD_ERROR; - VOID EFIAPI ExitDriver ( @@ -645,7 +646,7 @@ ${END} gUefiApplicationEntryPointString = [ TemplateString(""" -const UINT32 _gUefiDriverRevision = ${EfiSpecVersion}; +const UINT32 _gUefiDriverRevision = ${UefiSpecVersion}; EFI_STATUS EFIAPI @@ -658,7 +659,7 @@ ProcessModuleEntryPointList ( } """), TemplateString(""" -const UINT32 _gUefiDriverRevision = ${EfiSpecVersion}; +const UINT32 _gUefiDriverRevision = ${UefiSpecVersion}; ${BEGIN} EFI_STATUS @@ -685,7 +686,7 @@ ExitDriver ( } """), TemplateString(""" -const UINT32 _gUefiDriverRevision = ${EfiSpecVersion}; +const UINT32 _gUefiDriverRevision = ${UefiSpecVersion}; EFI_STATUS EFIAPI @@ -876,13 +877,6 @@ ${FunctionCall}${END} """), } -gSpecificationString = TemplateString(""" -${BEGIN} -#undef ${SpecificationName} -#define ${SpecificationName} ${SpecificationValue} -${END} -""") - gBasicHeaderFile = "Base.h" gModuleTypeHeaderFile = { @@ -959,11 +953,57 @@ def CreateModulePcdCode(Info, AutoGenC, AutoGenH, Pcd): Const = '' Type = '' Array = '' - Value = Pcd.DefaultValue + Value = Pcd.DefaultValue Unicode = False - if Pcd.DatumType == 'UINT64': - if not Value.endswith('ULL'): - Value += 'ULL' + ValueNumber = 0 + if Pcd.DatumType in ['UINT64', 'UINT32', 'UINT16', 'UINT8']: + try: + if Value.upper().startswith('0X'): + ValueNumber = int (Value, 16) + else: + ValueNumber = int (Value) + except: + EdkLogger.error("build", AUTOGEN_ERROR, + "PCD value is not valid dec or hex number for datum type [%s] of PCD %s.%s" % (Pcd.DatumType, Pcd.TokenSpaceGuidCName, Pcd.TokenCName), + ExtraData="[%s]" % str(Info)) + if Pcd.DatumType == 'UINT64': + if ValueNumber < 0: + EdkLogger.error("build", AUTOGEN_ERROR, + "PCD can't be set to negative value for datum type [%s] of PCD %s.%s" % (Pcd.DatumType, Pcd.TokenSpaceGuidCName, Pcd.TokenCName), + ExtraData="[%s]" % str(Info)) + elif ValueNumber >= 0x10000000000000000: + EdkLogger.error("build", AUTOGEN_ERROR, + "Too large PCD value for datum type [%s] of PCD %s.%s" % (Pcd.DatumType, Pcd.TokenSpaceGuidCName, Pcd.TokenCName), + ExtraData="[%s]" % str(Info)) + if not Value.endswith('ULL'): + Value += 'ULL' + elif Pcd.DatumType == 'UINT32': + if ValueNumber < 0: + EdkLogger.error("build", AUTOGEN_ERROR, + "PCD can't be set to negative value for datum type [%s] of PCD %s.%s" % (Pcd.DatumType, Pcd.TokenSpaceGuidCName, Pcd.TokenCName), + ExtraData="[%s]" % str(Info)) + elif ValueNumber >= 0x100000000: + EdkLogger.error("build", AUTOGEN_ERROR, + "Too large PCD value for datum type [%s] of PCD %s.%s" % (Pcd.DatumType, Pcd.TokenSpaceGuidCName, Pcd.TokenCName), + ExtraData="[%s]" % str(Info)) + elif Pcd.DatumType == 'UINT16': + if ValueNumber < 0: + EdkLogger.error("build", AUTOGEN_ERROR, + "PCD can't be set to negative value for datum type [%s] of PCD %s.%s" % (Pcd.DatumType, Pcd.TokenSpaceGuidCName, Pcd.TokenCName), + ExtraData="[%s]" % str(Info)) + elif ValueNumber >= 0x10000: + EdkLogger.error("build", AUTOGEN_ERROR, + "Too large PCD value for datum type [%s] of PCD %s.%s" % (Pcd.DatumType, Pcd.TokenSpaceGuidCName, Pcd.TokenCName), + ExtraData="[%s]" % str(Info)) + elif Pcd.DatumType == 'UINT8': + if ValueNumber < 0: + EdkLogger.error("build", AUTOGEN_ERROR, + "PCD can't be set to negative value for datum type [%s] of PCD %s.%s" % (Pcd.DatumType, Pcd.TokenSpaceGuidCName, Pcd.TokenCName), + ExtraData="[%s]" % str(Info)) + elif ValueNumber >= 0x100: + EdkLogger.error("build", AUTOGEN_ERROR, + "Too large PCD value for datum type [%s] of PCD %s.%s" % (Pcd.DatumType, Pcd.TokenSpaceGuidCName, Pcd.TokenCName), + ExtraData="[%s]" % str(Info)) if Pcd.DatumType == 'VOID*': if Pcd.MaxDatumSize == None or Pcd.MaxDatumSize == '': EdkLogger.error("build", AUTOGEN_ERROR, @@ -973,7 +1013,7 @@ def CreateModulePcdCode(Info, AutoGenC, AutoGenH, Pcd): ArraySize = int(Pcd.MaxDatumSize, 0) if Value[0] == '{': Type = '(VOID *)' - else: + else: if Value[0] == 'L': Unicode = True Value = Value.lstrip('L') #.strip('"') @@ -981,15 +1021,15 @@ def CreateModulePcdCode(Info, AutoGenC, AutoGenH, Pcd): NewValue = '{' for Index in range(0,len(Value)): if Unicode: - NewValue = NewValue + str(ord(Value[Index]) % 0x10000) + ', ' - else: + NewValue = NewValue + str(ord(Value[Index]) % 0x10000) + ', ' + else: NewValue = NewValue + str(ord(Value[Index]) % 0x100) + ', ' - if Unicode: - ArraySize = ArraySize / 2; - + if Unicode: + ArraySize = ArraySize / 2; + if ArraySize < (len(Value) + 1): ArraySize = len(Value) + 1 - Value = NewValue + '0 }' + Value = NewValue + '0 }' Array = '[%d]' % ArraySize # # skip casting for fixed at build since it breaks ARM assembly. @@ -1003,16 +1043,16 @@ def CreateModulePcdCode(Info, AutoGenC, AutoGenH, Pcd): else: PcdValueName = '_PCD_VALUE_' + Pcd.TokenCName - if Pcd.DatumType == 'VOID*': - # - # For unicode, UINT16 array will be generated, so the alignment of unicode is guaranteed. - # - if Unicode: - AutoGenH.Append('#define _PCD_PATCHABLE_%s_SIZE %s\n' % (Pcd.TokenCName, Pcd.MaxDatumSize)) - AutoGenH.Append('#define %s %s%s\n' %(PcdValueName, Type, PcdVariableName)) - AutoGenC.Append('GLOBAL_REMOVE_IF_UNREFERENCED %s UINT16 %s%s = %s;\n' % (Const, PcdVariableName, Array, Value)) - AutoGenH.Append('extern %s UINT16 %s%s;\n' %(Const, PcdVariableName, Array)) - AutoGenH.Append('#define %s %s%s\n' %(GetModeName, Type, PcdVariableName)) + if Pcd.DatumType == 'VOID*': + # + # For unicode, UINT16 array will be generated, so the alignment of unicode is guaranteed. + # + if Unicode: + AutoGenH.Append('#define _PCD_PATCHABLE_%s_SIZE %s\n' % (Pcd.TokenCName, Pcd.MaxDatumSize)) + AutoGenH.Append('#define %s %s%s\n' %(PcdValueName, Type, PcdVariableName)) + AutoGenC.Append('GLOBAL_REMOVE_IF_UNREFERENCED %s UINT16 %s%s = %s;\n' % (Const, PcdVariableName, Array, Value)) + AutoGenH.Append('extern %s UINT16 %s%s;\n' %(Const, PcdVariableName, Array)) + AutoGenH.Append('#define %s %s%s\n' %(GetModeName, Type, PcdVariableName)) else: AutoGenH.Append('#define _PCD_PATCHABLE_%s_SIZE %s\n' % (Pcd.TokenCName, Pcd.MaxDatumSize)) AutoGenH.Append('#define %s %s%s\n' %(PcdValueName, Type, PcdVariableName)) @@ -1021,7 +1061,7 @@ def CreateModulePcdCode(Info, AutoGenC, AutoGenH, Pcd): AutoGenH.Append('#define %s %s%s\n' %(GetModeName, Type, PcdVariableName)) elif Pcd.Type == TAB_PCDS_PATCHABLE_IN_MODULE: AutoGenH.Append('#define %s %s\n' %(PcdValueName, Value)) - AutoGenC.Append('GLOBAL_REMOVE_IF_UNREFERENCED volatile %s %s %s = %s;\n' %(Const, Pcd.DatumType, PcdVariableName, PcdValueName)) + AutoGenC.Append('volatile %s %s %s = %s;\n' %(Const, Pcd.DatumType, PcdVariableName, PcdValueName)) AutoGenH.Append('extern volatile %s %s %s%s;\n' % (Const, Pcd.DatumType, PcdVariableName, Array)) AutoGenH.Append('#define %s %s%s\n' % (GetModeName, Type, PcdVariableName)) else: @@ -1139,7 +1179,7 @@ def CreatePcdDatabasePhaseSpecificAutoGen (Platform, Phase): 'SYSTEM_SKU_ID_VALUE' : '0' } - for DatumType in ['UINT64','UINT32','UINT16','UINT8','BOOLEAN']: + for DatumType in ['UINT64','UINT32','UINT16','UINT8','BOOLEAN', "VOID*"]: Dict['VARDEF_CNAME_' + DatumType] = [] Dict['VARDEF_GUID_' + DatumType] = [] Dict['VARDEF_SKUID_' + DatumType] = [] @@ -1174,7 +1214,7 @@ def CreatePcdDatabasePhaseSpecificAutoGen (Platform, Phase): Dict['GUID_STRUCTURE'] = [] Dict['SKUID_VALUE'] = [] - + Dict['VARDEF_HEADER'] = [] if Phase == 'DXE': Dict['SYSTEM_SKU_ID'] = '' Dict['SYSTEM_SKU_ID_VALUE'] = '' @@ -1223,7 +1263,7 @@ def CreatePcdDatabasePhaseSpecificAutoGen (Platform, Phase): Pcd.InitString = 'UNINIT' if Pcd.DatumType == 'VOID*': - Pcd.TokenTypeList = ['PCD_DATUM_TYPE_POINTER'] + Pcd.TokenTypeList = ['PCD_TYPE_STRING'] elif Pcd.DatumType == 'BOOLEAN': Pcd.TokenTypeList = ['PCD_DATUM_TYPE_UINT8'] else: @@ -1270,53 +1310,65 @@ def CreatePcdDatabasePhaseSpecificAutoGen (Platform, Phase): Dict['GUID_STRUCTURE'].append(VariableGuidStructure) VariableHeadGuidIndex = GuidList.index(VariableGuid) - VariableHeadValueList.append('%d, %d, %s, offsetof(%s_PCD_DATABASE, Init.%s_%s_VariableDefault_%s)' % - (VariableHeadGuidIndex, VariableHeadStringIndex, Sku.VariableOffset, - Phase, CName, TokenSpaceGuid, SkuIdIndex)) + if "PCD_TYPE_STRING" in Pcd.TokenTypeList: + VariableHeadValueList.append('%d, %d, %s, offsetof(%s_PCD_DATABASE, Init.%s_%s)' % + (VariableHeadGuidIndex, VariableHeadStringIndex, Sku.VariableOffset, + Phase, CName, TokenSpaceGuid)) + else: + VariableHeadValueList.append('%d, %d, %s, offsetof(%s_PCD_DATABASE, Init.%s_%s_VariableDefault_%s)' % + (VariableHeadGuidIndex, VariableHeadStringIndex, Sku.VariableOffset, + Phase, CName, TokenSpaceGuid, SkuIdIndex)) Dict['VARDEF_CNAME_'+Pcd.DatumType].append(CName) Dict['VARDEF_GUID_'+Pcd.DatumType].append(TokenSpaceGuid) Dict['VARDEF_SKUID_'+Pcd.DatumType].append(SkuIdIndex) - Dict['VARDEF_VALUE_'+Pcd.DatumType].append(Sku.HiiDefaultValue) + if "PCD_TYPE_STRING" in Pcd.TokenTypeList: + Dict['VARDEF_VALUE_' + Pcd.DatumType].append("%s_%s[%d]" % (Pcd.TokenCName, TokenSpaceGuid, SkuIdIndex)) + else: + Dict['VARDEF_VALUE_'+Pcd.DatumType].append(Sku.HiiDefaultValue) elif Sku.VpdOffset != '': Pcd.TokenTypeList += ['PCD_TYPE_VPD'] Pcd.InitString = 'INIT' VpdHeadOffsetList.append(Sku.VpdOffset) + + + if Pcd.DatumType == 'VOID*': + Pcd.TokenTypeList += ['PCD_TYPE_STRING'] + Pcd.InitString = 'INIT' + if Sku.HiiDefaultValue != '' and Sku.DefaultValue == '': + Sku.DefaultValue = Sku.HiiDefaultValue + if Sku.DefaultValue != '': + NumberOfSizeItems += 1 + Dict['STRING_TABLE_CNAME'].append(CName) + Dict['STRING_TABLE_GUID'].append(TokenSpaceGuid) + + if StringTableIndex == 0: + Dict['STRING_TABLE_INDEX'].append('') + else: + Dict['STRING_TABLE_INDEX'].append('_%d' % StringTableIndex) + if Sku.DefaultValue[0] == 'L': + Size = (len(Sku.DefaultValue) - 3 + 1) * 2 + Dict['STRING_TABLE_VALUE'].append(StringToArray(Sku.DefaultValue)) + elif Sku.DefaultValue[0] == '"': + Size = len(Sku.DefaultValue) - 2 + 1 + Dict['STRING_TABLE_VALUE'].append(StringToArray(Sku.DefaultValue)) + elif Sku.DefaultValue[0] == '{': + Size = len(Sku.DefaultValue.replace(',',' ').split()) + Dict['STRING_TABLE_VALUE'].append(Sku.DefaultValue) + + StringHeadOffsetList.append(str(StringTableSize)) + Dict['SIZE_TABLE_CNAME'].append(CName) + Dict['SIZE_TABLE_GUID'].append(TokenSpaceGuid) + Dict['SIZE_TABLE_CURRENT_LENGTH'].append(Size) + Dict['SIZE_TABLE_MAXIMUM_LENGTH'].append(Pcd.MaxDatumSize) + if Pcd.MaxDatumSize != '': + MaxDatumSize = int(Pcd.MaxDatumSize, 0) + if MaxDatumSize > Size: + Size = MaxDatumSize + Dict['STRING_TABLE_LENGTH'].append(Size) + StringTableIndex += 1 + StringTableSize += (Size) else: - if Pcd.DatumType == 'VOID*': - Pcd.TokenTypeList += ['PCD_TYPE_STRING'] - Pcd.InitString = 'INIT' - if Sku.DefaultValue != '': - NumberOfSizeItems += 1 - Dict['STRING_TABLE_CNAME'].append(CName) - Dict['STRING_TABLE_GUID'].append(TokenSpaceGuid) - - if StringTableIndex == 0: - Dict['STRING_TABLE_INDEX'].append('') - else: - Dict['STRING_TABLE_INDEX'].append('_%d' % StringTableIndex) - if Sku.DefaultValue[0] == 'L': - Size = (len(Sku.DefaultValue) - 3 + 1) * 2 - Dict['STRING_TABLE_VALUE'].append(StringToArray(Sku.DefaultValue)) - elif Sku.DefaultValue[0] == '"': - Size = len(Sku.DefaultValue) - 2 + 1 - Dict['STRING_TABLE_VALUE'].append(StringToArray(Sku.DefaultValue)) - elif Sku.DefaultValue[0] == '{': - Size = len(Sku.DefaultValue.replace(',',' ').split()) - Dict['STRING_TABLE_VALUE'].append(Sku.DefaultValue) - - StringHeadOffsetList.append(str(StringTableSize)) - Dict['SIZE_TABLE_CNAME'].append(CName) - Dict['SIZE_TABLE_GUID'].append(TokenSpaceGuid) - Dict['SIZE_TABLE_CURRENT_LENGTH'].append(Size) - Dict['SIZE_TABLE_MAXIMUM_LENGTH'].append(Pcd.MaxDatumSize) - if Pcd.MaxDatumSize != '': - MaxDatumSize = int(Pcd.MaxDatumSize, 0) - if MaxDatumSize > Size: - Size = MaxDatumSize - Dict['STRING_TABLE_LENGTH'].append(Size) - StringTableIndex += 1 - StringTableSize += (Size) - else: + if "PCD_TYPE_HII" not in Pcd.TokenTypeList: Pcd.TokenTypeList += ['PCD_TYPE_DATA'] if Sku.DefaultValue == 'TRUE': Pcd.InitString = 'INIT' @@ -1326,23 +1378,27 @@ def CreatePcdDatabasePhaseSpecificAutoGen (Platform, Phase): Pcd.InitString = 'INIT' except: pass - - # - # For UNIT64 type PCD's value, ULL should be append to avoid - # warning under linux building environment. - # - if Pcd.DatumType == "UINT64": - ValueList.append(Sku.DefaultValue + "ULL") - else: - ValueList.append(Sku.DefaultValue) + + # + # For UNIT64 type PCD's value, ULL should be append to avoid + # warning under linux building environment. + # + if Pcd.DatumType == "UINT64": + ValueList.append(Sku.DefaultValue + "ULL") + else: + ValueList.append(Sku.DefaultValue) Pcd.TokenTypeList = list(set(Pcd.TokenTypeList)) + if 'PCD_TYPE_HII' in Pcd.TokenTypeList: Dict['VARIABLE_HEAD_CNAME_DECL'].append(CName) Dict['VARIABLE_HEAD_GUID_DECL'].append(TokenSpaceGuid) Dict['VARIABLE_HEAD_NUMSKUS_DECL'].append(len(Pcd.SkuInfoList)) Dict['VARIABLE_HEAD_VALUE'].append('{ %s }\n' % ' },\n { '.join(VariableHeadValueList)) + Dict['VARDEF_HEADER'].append('_Variable_Header') + else: + Dict['VARDEF_HEADER'].append('') if 'PCD_TYPE_VPD' in Pcd.TokenTypeList: Dict['VPD_HEAD_CNAME_DECL'].append(CName) Dict['VPD_HEAD_GUID_DECL'].append(TokenSpaceGuid) @@ -1371,7 +1427,7 @@ def CreatePcdDatabasePhaseSpecificAutoGen (Platform, Phase): Dict['TOKEN_CNAME'] = ['' for x in range(NumberOfLocalTokens)] Dict['TOKEN_GUID'] = ['' for x in range(NumberOfLocalTokens)] Dict['TOKEN_TYPE'] = ['' for x in range(NumberOfLocalTokens)] - + for Pcd in Platform.DynamicPcdList: CName = Pcd.TokenCName TokenSpaceGuidCName = Pcd.TokenSpaceGuidCName @@ -1614,14 +1670,14 @@ def CreateModuleEntryPointCode(Info, AutoGenC, AutoGenH): PiSpecVersion = Info.Module.Specification['PI_SPECIFICATION_VERSION'] else: PiSpecVersion = 0 - if 'EFI_SPECIFICATION_VERSION' in Info.Module.Specification: - EfiSpecVersion = Info.Module.Specification['EFI_SPECIFICATION_VERSION'] + if 'UEFI_SPECIFICATION_VERSION' in Info.Module.Specification: + UefiSpecVersion = Info.Module.Specification['UEFI_SPECIFICATION_VERSION'] else: - EfiSpecVersion = 0 + UefiSpecVersion = 0 Dict = { - 'Function' : Info.Module.ModuleEntryPointList, - 'PiSpecVersion' : PiSpecVersion, - 'EfiSpecVersion': EfiSpecVersion + 'Function' : Info.Module.ModuleEntryPointList, + 'PiSpecVersion' : PiSpecVersion, + 'UefiSpecVersion': UefiSpecVersion } if Info.ModuleType in ['PEI_CORE', 'DXE_CORE', 'SMM_CORE']: @@ -1853,9 +1909,6 @@ def CreateHeaderCode(Info, AutoGenC, AutoGenH): # header file Prologue AutoGenH.Append(gAutoGenHPrologueString.Replace({'File':'AUTOGENH','Guid':Info.Guid.replace('-','_')})) if Info.AutoGenVersion >= 0x00010005: - # specification macros - AutoGenH.Append(gSpecificationString.Replace({'SpecificationName':Info.Specification.keys(), - 'SpecificationValue':Info.Specification.values()})) # header files includes AutoGenH.Append("#include <%s>\n" % gBasicHeaderFile) if Info.ModuleType in gModuleTypeHeaderFile \ diff --git a/BaseTools/Source/Python/AutoGen/GenDepex.py b/BaseTools/Source/Python/AutoGen/GenDepex.py index 9ee615cdc8..f456f0d25e 100644 --- a/BaseTools/Source/Python/AutoGen/GenDepex.py +++ b/BaseTools/Source/Python/AutoGen/GenDepex.py @@ -1,7 +1,7 @@ ## @file # This file is used to generate DEPEX file for module's dependency expression # -# Copyright (c) 2007, Intel Corporation +# Copyright (c) 2007 - 2010, Intel Corporation # All rights reserved. This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License # which accompanies this distribution. The full text of the license may be found at @@ -356,7 +356,7 @@ class DependencyExpression: versionNumber = "0.04" __version__ = "%prog Version " + versionNumber -__copyright__ = "Copyright (c) 2007-2008, Intel Corporation All rights reserved." +__copyright__ = "Copyright (c) 2007-2010, Intel Corporation All rights reserved." __usage__ = "%prog [options] [dependency_expression_file]" ## Parse command line options diff --git a/BaseTools/Source/Python/AutoGen/UniClassObject.py b/BaseTools/Source/Python/AutoGen/UniClassObject.py index dcfa264025..de2f93b8ea 100644 --- a/BaseTools/Source/Python/AutoGen/UniClassObject.py +++ b/BaseTools/Source/Python/AutoGen/UniClassObject.py @@ -406,18 +406,10 @@ class UniFileClassObject(object): # # Load multiple .uni files # - def LoadUniFiles(self, FileList = []): + def LoadUniFiles(self, FileList): if len(FileList) > 0: - if len(FileList) > 1: - NewList = []; - for File in FileList: - NewList.append (File) - NewList.sort() - for File in NewList: - self.LoadUniFile(File) - else: - for File in FileList: - self.LoadUniFile(File) + for File in FileList: + self.LoadUniFile(File) # # Add a string to list @@ -488,7 +480,6 @@ class UniFileClassObject(object): EdkLogger.debug(EdkLogger.DEBUG_5, Name) Token = len(self.OrderedStringList[LangFind]) self.AddStringToList(Name, LangFind, Value, Token, Referenced, LangKey, Index) - # # Retoken # @@ -497,7 +488,17 @@ class UniFileClassObject(object): ReferencedStringList = [] NotReferencedStringList = [] Token = 0 + + # + # Order UNI token by their String Name + # + StringNameList = [] for Item in self.OrderedStringList[LangName]: + StringNameList.append (Item.StringName) + StringNameList.sort() + + for Name in StringNameList: + Item = self.FindStringValue (Name, LangName) if Item.Referenced == True: Item.Token = Token ReferencedStringList.append(Item) diff --git a/BaseTools/Source/Python/AutoGen/__init__.py b/BaseTools/Source/Python/AutoGen/__init__.py index d6fa5ec126..737cb0c9ab 100644 --- a/BaseTools/Source/Python/AutoGen/__init__.py +++ b/BaseTools/Source/Python/AutoGen/__init__.py @@ -1,4 +1,10 @@ -# Copyright (c) 2007, Intel Corporation +## @file +# Python 'AutoGen' package initialization file. +# +# This file is required to make Python interpreter treat the directory +# as containing package. +# +# Copyright (c) 2007 - 2010, Intel Corporation
    # All rights reserved. This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License # which accompanies this distribution. The full text of the license may be found at @@ -6,5 +12,6 @@ # # THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# __all__ = ["AutoGen"] diff --git a/BaseTools/Source/Python/Common/BuildToolError.py b/BaseTools/Source/Python/Common/BuildToolError.py index 982ea93659..a49de46401 100644 --- a/BaseTools/Source/Python/Common/BuildToolError.py +++ b/BaseTools/Source/Python/Common/BuildToolError.py @@ -84,7 +84,7 @@ UNKNOWN_ERROR = 0xFFFF ## Error message of each error code gErrorMessage = { - FILE_NOT_FOUND : "File/directory not found", + FILE_NOT_FOUND : "File/directory not found in workspace", FILE_OPEN_FAILURE : "File open failure", FILE_WRITE_FAILURE : "File write failure", FILE_PARSE_FAILURE : "File parse failure", diff --git a/BaseTools/Source/Python/Common/DataType.py b/BaseTools/Source/Python/Common/DataType.py index c2da992059..dd33380a1e 100644 --- a/BaseTools/Source/Python/Common/DataType.py +++ b/BaseTools/Source/Python/Common/DataType.py @@ -73,6 +73,8 @@ EDK_COMPONENT_TYPE_BS_DRIVER = 'BS_DRIVER' EDK_COMPONENT_TYPE_RT_DRIVER = 'RT_DRIVER' EDK_COMPONENT_TYPE_SAL_RT_DRIVER = 'SAL_RT_DRIVER' EDK_COMPONENT_TYPE_APPLICATION = 'APPLICATION' +EDK_NAME = 'EDK' +EDKII_NAME = 'EDKII' BINARY_FILE_TYPE_FW = 'FW' BINARY_FILE_TYPE_GUID = 'GUID' @@ -230,6 +232,19 @@ TAB_PCDS_DYNAMIC_EBC = TAB_PCDS + TAB_PCDS_DYNAMIC + TAB_SPLIT + TAB_ARCH_EBC TAB_PCD_DYNAMIC_TYPE_LIST = [TAB_PCDS_DYNAMIC_DEFAULT_NULL, TAB_PCDS_DYNAMIC_VPD_NULL, TAB_PCDS_DYNAMIC_HII_NULL] TAB_PCD_DYNAMIC_EX_TYPE_LIST = [TAB_PCDS_DYNAMIC_EX_DEFAULT_NULL, TAB_PCDS_DYNAMIC_EX_VPD_NULL, TAB_PCDS_DYNAMIC_EX_HII_NULL] +TAB_PCDS_PATCHABLE_LOAD_FIX_ADDRESS_PEI_PAGE_SIZE = 'PcdLoadFixAddressPeiCodePageNumber' +TAB_PCDS_PATCHABLE_LOAD_FIX_ADDRESS_PEI_PAGE_SIZE_DATA_TYPE = 'UINT32' +TAB_PCDS_PATCHABLE_LOAD_FIX_ADDRESS_DXE_PAGE_SIZE = 'PcdLoadFixAddressBootTimeCodePageNumber' +TAB_PCDS_PATCHABLE_LOAD_FIX_ADDRESS_DXE_PAGE_SIZE_DATA_TYPE = 'UINT32' +TAB_PCDS_PATCHABLE_LOAD_FIX_ADDRESS_RUNTIME_PAGE_SIZE = 'PcdLoadFixAddressRuntimeCodePageNumber' +TAB_PCDS_PATCHABLE_LOAD_FIX_ADDRESS_RUNTIME_PAGE_SIZE_DATA_TYPE = 'UINT32' +TAB_PCDS_PATCHABLE_LOAD_FIX_ADDRESS_SMM_PAGE_SIZE = 'PcdLoadFixAddressSmmCodePageNumber' +TAB_PCDS_PATCHABLE_LOAD_FIX_ADDRESS_SMM_PAGE_SIZE_DATA_TYPE = 'UINT32' +TAB_PCDS_PATCHABLE_LOAD_FIX_ADDRESS_LIST = [TAB_PCDS_PATCHABLE_LOAD_FIX_ADDRESS_PEI_PAGE_SIZE, \ + TAB_PCDS_PATCHABLE_LOAD_FIX_ADDRESS_DXE_PAGE_SIZE, \ + TAB_PCDS_PATCHABLE_LOAD_FIX_ADDRESS_RUNTIME_PAGE_SIZE, \ + TAB_PCDS_PATCHABLE_LOAD_FIX_ADDRESS_SMM_PAGE_SIZE] + TAB_DEPEX = 'Depex' TAB_DEPEX_COMMON = TAB_DEPEX + TAB_SPLIT + TAB_ARCH_COMMON TAB_DEPEX_IA32 = TAB_DEPEX + TAB_SPLIT + TAB_ARCH_IA32 @@ -338,6 +353,7 @@ TAB_DSC_DEFINES_MAKEFILE_NAME = 'MAKEFILE_NAME' TAB_DSC_DEFINES_BS_BASE_ADDRESS = 'BsBaseAddress' TAB_DSC_DEFINES_RT_BASE_ADDRESS = 'RtBaseAddress' TAB_DSC_DEFINES_DEFINE = 'DEFINE' +TAB_FIX_LOAD_TOP_MEMORY_ADDRESS = 'FIX_LOAD_TOP_MEMORY_ADDRESS' # # TargetTxt Definitions diff --git a/BaseTools/Source/Python/Common/EdkIIWorkspaceBuild.py b/BaseTools/Source/Python/Common/EdkIIWorkspaceBuild.py index 82ab1796ad..c33b9bff0b 100644 --- a/BaseTools/Source/Python/Common/EdkIIWorkspaceBuild.py +++ b/BaseTools/Source/Python/Common/EdkIIWorkspaceBuild.py @@ -1,7 +1,7 @@ ## @file # This file is used to define each component of the build database # -# Copyright (c) 2007 ~ 2008, Intel Corporation +# Copyright (c) 2007 - 2010, Intel Corporation # All rights reserved. This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License # which accompanies this distribution. The full text of the license may be found at @@ -748,7 +748,8 @@ class WorkspaceBuild(object): # Pb.Specification = ModuleHeader.Specification Pb.Specification[TAB_INF_DEFINES_EDK_RELEASE_VERSION] = ModuleHeader.EdkReleaseVersion - Pb.Specification[TAB_INF_DEFINES_EFI_SPECIFICATION_VERSION] = ModuleHeader.EfiSpecificationVersion + Pb.Specification[TAB_INF_DEFINES_EFI_SPECIFICATION_VERSION] = ModuleHeader.UefiSpecificationVersion + Pb.Specification[TAB_INF_DEFINES_UEFI_SPECIFICATION_VERSION] = ModuleHeader.UefiSpecificationVersion Pb.AutoGenVersion = int(ModuleHeader.InfVersion, 0) # diff --git a/BaseTools/Source/Python/Common/FdfParserLite.py b/BaseTools/Source/Python/Common/FdfParserLite.py index b397b16b42..e9b69ff1b9 100644 --- a/BaseTools/Source/Python/Common/FdfParserLite.py +++ b/BaseTools/Source/Python/Common/FdfParserLite.py @@ -1439,10 +1439,17 @@ class FdfParser(object): def __GetBlockStatements(self, Obj): if not self.__GetBlockStatement(Obj): - raise Warning("expected block statement At Line ", self.FileName, self.CurrentLineNumber) - + #set default block size is 1 + Obj.BlockSizeList.append((1, Obj.Size, None)) + return True + while self.__GetBlockStatement(Obj): pass + + for Item in Obj.BlockSizeList: + if Item[0] == None or Item[1] == None: + raise Warning("expected block statement for Fd Section", self.FileName, self.CurrentLineNumber) + return True ## __GetBlockStatement() method @@ -2329,6 +2336,8 @@ class FdfParser(object): AlignValue = None if self.__GetAlignment(): + if self.__Token not in ("Auto", "8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K"): + raise Warning("Incorrect alignment '%s'" % self.__Token, self.FileName, self.CurrentLineNumber) AlignValue = self.__Token BuildNum = None @@ -2342,6 +2351,8 @@ class FdfParser(object): BuildNum = self.__Token if self.__IsKeyword( "VERSION"): + if AlignValue == 'Auto': + raise Warning("Auto alignment can only be used in PE32 or TE section ", self.FileName, self.CurrentLineNumber) if not self.__IsToken( "="): raise Warning("expected '=' At Line ", self.FileName, self.CurrentLineNumber) if not self.__GetNextToken(): @@ -2356,6 +2367,8 @@ class FdfParser(object): Obj.SectionList.append(VerSectionObj) elif self.__IsKeyword( "UI"): + if AlignValue == 'Auto': + raise Warning("Auto alignment can only be used in PE32 or TE section ", self.FileName, self.CurrentLineNumber) if not self.__IsToken( "="): raise Warning("expected '=' At Line ", self.FileName, self.CurrentLineNumber) if not self.__GetNextToken(): @@ -2369,6 +2382,8 @@ class FdfParser(object): Obj.SectionList.append(UiSectionObj) elif self.__IsKeyword( "FV_IMAGE"): + if AlignValue == 'Auto': + raise Warning("Auto alignment can only be used in PE32 or TE section ", self.FileName, self.CurrentLineNumber) if not self.__IsToken( "="): raise Warning("expected '=' At Line ", self.FileName, self.CurrentLineNumber) if not self.__GetNextWord(): @@ -2409,6 +2424,8 @@ class FdfParser(object): Obj.SectionList.append(FvImageSectionObj) elif self.__IsKeyword("PEI_DEPEX_EXP") or self.__IsKeyword("DXE_DEPEX_EXP") or self.__IsKeyword("SMM_DEPEX_EXP"): + if AlignValue == 'Auto': + raise Warning("Auto alignment can only be used in PE32 or TE section ", self.FileName, self.CurrentLineNumber) DepexSectionObj = CommonDataClass.FdfClass.DepexSectionClassObject() DepexSectionObj.Alignment = AlignValue DepexSectionObj.DepexType = self.__Token @@ -2436,6 +2453,8 @@ class FdfParser(object): if self.__Token not in ("COMPAT16", "PE32", "PIC", "TE", "FV_IMAGE", "RAW", "DXE_DEPEX",\ "UI", "VERSION", "PEI_DEPEX", "SUBTYPE_GUID", "SMM_DEPEX"): raise Warning("Unknown section type '%s'" % self.__Token, self.FileName, self.CurrentLineNumber) + if AlignValue == 'Auto'and (not self.__Token == 'PE32') and (not self.__Token == 'TE'): + raise Warning("Auto alignment can only be used in PE32 or TE section ", self.FileName, self.CurrentLineNumber) # DataSection DataSectionObj = CommonDataClass.FdfClass.DataSectionClassObject() DataSectionObj.Alignment = AlignValue @@ -2585,6 +2604,8 @@ class FdfParser(object): AlignValue = None if self.__GetAlignment(): + if self.__Token not in ("8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K"): + raise Warning("Incorrect alignment '%s'" % self.__Token, self.FileName, self.CurrentLineNumber) AlignValue = self.__Token if not self.__GetCglSection(FfsFileObj, AlignValue): @@ -2899,7 +2920,7 @@ class FdfParser(object): AlignValue = "" if self.__GetAlignment(): - if self.__Token not in ("8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K"): + if self.__Token not in ("Auto", "8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K"): raise Warning("Incorrect alignment At Line ", self.FileName, self.CurrentLineNumber) AlignValue = self.__Token @@ -2963,8 +2984,10 @@ class FdfParser(object): CheckSum = True if self.__GetAlignment(): - if self.__Token not in ("8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K"): + if self.__Token not in ("Auto", "8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K"): raise Warning("Incorrect alignment At Line ", self.FileName, self.CurrentLineNumber) + if self.__Token == 'Auto' and (not SectionName == 'PE32') and (not SectionName == 'TE'): + raise Warning("Auto alignment can only be used in PE32 or TE section ", self.FileName, self.CurrentLineNumber) AlignValue = self.__Token if not self.__GetNextToken(): @@ -3039,14 +3062,6 @@ class FdfParser(object): raise Warning("Incorrect alignment At Line ", self.FileName, self.CurrentLineNumber) FvImageSectionObj.Alignment = self.__Token - if self.__IsKeyword("FV"): - FvImageSectionObj.FvFileType = self.__Token - - if self.__GetAlignment(): - if self.__Token not in ("8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K"): - raise Warning("Incorrect alignment At Line ", self.FileName, self.CurrentLineNumber) - FvImageSectionObj.Alignment = self.__Token - if self.__IsToken('|'): FvImageSectionObj.FvFileExtension = self.__GetFileExtension() elif self.__GetNextToken(): @@ -3110,6 +3125,10 @@ class FdfParser(object): EfiSectionObj.BuildNum = self.__Token if self.__GetAlignment(): + if self.__Token not in ("Auto", "8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K"): + raise Warning("Incorrect alignment '%s'" % self.__Token, self.FileName, self.CurrentLineNumber) + if self.__Token == 'Auto' and (not SectionName == 'PE32') and (not SectionName == 'TE'): + raise Warning("Auto alignment can only be used in PE32 or TE section ", self.FileName, self.CurrentLineNumber) EfiSectionObj.Alignment = self.__Token if self.__IsKeyword('RELOCS_STRIPPED') or self.__IsKeyword('RELOCS_RETAINED'): diff --git a/BaseTools/Source/Python/Common/InfClassObject.py b/BaseTools/Source/Python/Common/InfClassObject.py index 27e67f3a1d..7127cc5cff 100644 --- a/BaseTools/Source/Python/Common/InfClassObject.py +++ b/BaseTools/Source/Python/Common/InfClassObject.py @@ -1,7 +1,7 @@ ## @file # This file is used to define each component of INF file # -# Copyright (c) 2007, Intel Corporation +# Copyright (c) 2007 - 2010, Intel Corporation # All rights reserved. This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License # which accompanies this distribution. The full text of the license may be found at @@ -85,7 +85,8 @@ class InfHeader(ModuleHeaderClass): TAB_INF_DEFINES_BASE_NAME : "Name", TAB_INF_DEFINES_FILE_GUID : "Guid", TAB_INF_DEFINES_MODULE_TYPE : "ModuleType", - TAB_INF_DEFINES_EFI_SPECIFICATION_VERSION : "EfiSpecificationVersion", + TAB_INF_DEFINES_EFI_SPECIFICATION_VERSION : "UefiSpecificationVersion", + TAB_INF_DEFINES_UEFI_SPECIFICATION_VERSION : "UefiSpecificationVersion", TAB_INF_DEFINES_EDK_RELEASE_VERSION : "EdkReleaseVersion", # # Optional Fields @@ -452,7 +453,7 @@ class Inf(InfObject): print 'Guid =', M.Header[Arch].Guid print 'Version =', M.Header[Arch].Version print 'InfVersion =', M.Header[Arch].InfVersion - print 'EfiSpecificationVersion =', M.Header[Arch].EfiSpecificationVersion + print 'UefiSpecificationVersion =', M.Header[Arch].UefiSpecificationVersion print 'EdkReleaseVersion =', M.Header[Arch].EdkReleaseVersion print 'ModuleType =', M.Header[Arch].ModuleType print 'BinaryModule =', M.Header[Arch].BinaryModule diff --git a/BaseTools/Source/Python/Common/InfClassObjectLight.py b/BaseTools/Source/Python/Common/InfClassObjectLight.py index a655828e6a..179b75e28a 100644 --- a/BaseTools/Source/Python/Common/InfClassObjectLight.py +++ b/BaseTools/Source/Python/Common/InfClassObjectLight.py @@ -1,7 +1,7 @@ ## @file # This file is used to define each component of INF file # -# Copyright (c) 2007, Intel Corporation +# Copyright (c) 2007 - 2010, Intel Corporation # All rights reserved. This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License # which accompanies this distribution. The full text of the license may be found at @@ -71,7 +71,8 @@ class InfHeader(ModuleHeaderClass): TAB_INF_DEFINES_BASE_NAME : "Name", TAB_INF_DEFINES_FILE_GUID : "Guid", TAB_INF_DEFINES_MODULE_TYPE : "ModuleType", - TAB_INF_DEFINES_EFI_SPECIFICATION_VERSION : "EfiSpecificationVersion", + TAB_INF_DEFINES_EFI_SPECIFICATION_VERSION : "UefiSpecificationVersion", + TAB_INF_DEFINES_UEFI_SPECIFICATION_VERSION : "UefiSpecificationVersion", TAB_INF_DEFINES_EDK_RELEASE_VERSION : "EdkReleaseVersion", # Optional Fields @@ -583,7 +584,7 @@ class Inf(InfObject): ModuleHeader.PcdIsDriver = Value elif Name == TAB_INF_DEFINES_MODULE_TYPE: ModuleHeader.ModuleType = Value - elif Name == TAB_INF_DEFINES_UEFI_SPECIFICATION_VERSION: + elif Name in (TAB_INF_DEFINES_UEFI_SPECIFICATION_VERSION, TAB_INF_DEFINES_UEFI_SPECIFICATION_VERSION): ModuleHeader.UefiSpecificationVersion = Value elif Name == TAB_INF_DEFINES_PI_SPECIFICATION_VERSION: ModuleHeader.PiSpecificationVersion = Value diff --git a/BaseTools/Source/Python/Common/Misc.py b/BaseTools/Source/Python/Common/Misc.py index 2883169f3c..546dd37772 100644 --- a/BaseTools/Source/Python/Common/Misc.py +++ b/BaseTools/Source/Python/Common/Misc.py @@ -22,6 +22,7 @@ import threading import time import re import cPickle +import array from UserDict import IterableUserDict from UserList import UserList @@ -1343,6 +1344,90 @@ class PathClass(object): Key = property(_GetFileKey) +## Parse PE image to get the required PE informaion. +# +class PeImageClass(): + ## Constructor + # + # @param File FilePath of PeImage + # + def __init__(self, PeFile): + self.FileName = PeFile + self.IsValid = False + self.Size = 0 + self.EntryPoint = 0 + self.SectionAlignment = 0 + self.SectionHeaderList = [] + self.ErrorInfo = '' + try: + PeObject = open(PeFile, 'rb') + except: + self.ErrorInfo = self.FileName + ' can not be found\n' + return + # Read DOS header + ByteArray = array.array('B') + ByteArray.fromfile(PeObject, 0x3E) + ByteList = ByteArray.tolist() + # DOS signature should be 'MZ' + if self._ByteListToStr (ByteList[0x0:0x2]) != 'MZ': + self.ErrorInfo = self.FileName + ' has no valid DOS signature MZ' + return + + # Read 4 byte PE Signature + PeOffset = self._ByteListToInt(ByteList[0x3C:0x3E]) + PeObject.seek(PeOffset) + ByteArray = array.array('B') + ByteArray.fromfile(PeObject, 4) + # PE signature should be 'PE\0\0' + if ByteArray.tostring() != 'PE\0\0': + self.ErrorInfo = self.FileName + ' has no valid PE signature PE00' + return + + # Read PE file header + ByteArray = array.array('B') + ByteArray.fromfile(PeObject, 0x14) + ByteList = ByteArray.tolist() + SecNumber = self._ByteListToInt(ByteList[0x2:0x4]) + if SecNumber == 0: + self.ErrorInfo = self.FileName + ' has no section header' + return + + # Read PE optional header + OptionalHeaderSize = self._ByteListToInt(ByteArray[0x10:0x12]) + ByteArray = array.array('B') + ByteArray.fromfile(PeObject, OptionalHeaderSize) + ByteList = ByteArray.tolist() + self.EntryPoint = self._ByteListToInt(ByteList[0x10:0x14]) + self.SectionAlignment = self._ByteListToInt(ByteList[0x20:0x24]) + self.Size = self._ByteListToInt(ByteList[0x38:0x3C]) + + # Read each Section Header + for Index in range(SecNumber): + ByteArray = array.array('B') + ByteArray.fromfile(PeObject, 0x28) + ByteList = ByteArray.tolist() + SecName = self._ByteListToStr(ByteList[0:8]) + SecVirtualSize = self._ByteListToInt(ByteList[8:12]) + SecRawAddress = self._ByteListToInt(ByteList[20:24]) + SecVirtualAddress = self._ByteListToInt(ByteList[12:16]) + self.SectionHeaderList.append((SecName, SecVirtualAddress, SecRawAddress, SecVirtualSize)) + self.IsValid = True + PeObject.close() + + def _ByteListToStr(self, ByteList): + String = '' + for index in range(len(ByteList)): + if ByteList[index] == 0: + break + String += chr(ByteList[index]) + return String + + def _ByteListToInt(self, ByteList): + Value = 0 + for index in range(len(ByteList) - 1, -1, -1): + Value = (Value << 8) | int(ByteList[index]) + return Value + ## # # This acts like the main() function for the script, unless it is 'import'ed into another diff --git a/BaseTools/Source/Python/Common/Parsing.py b/BaseTools/Source/Python/Common/Parsing.py index 755f7901b5..6ab91fbc33 100644 --- a/BaseTools/Source/Python/Common/Parsing.py +++ b/BaseTools/Source/Python/Common/Parsing.py @@ -1,7 +1,7 @@ ## @file -# This file is used to define common parsing related functions used in parsing INF/DEC/DSC process +# This file is used to define common parsing related functions used in parsing INF/DEC/DSC process # -# Copyright (c) 2008, Intel Corporation +# Copyright (c) 2008 ~ 2010, Intel Corporation # All rights reserved. This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License # which accompanies this distribution. The full text of the license may be found at @@ -31,7 +31,7 @@ def ParseContent(Lines, ): Line = CleanString(Line) if Line == '': continue - + # # Find a new section tab # First insert previous section items @@ -48,7 +48,7 @@ def ParseContent(Lines, ): SectionItemList = [] ArchList = [] ThirdList = [] - + LineList = GetSplitValueList(Line[len(TAB_SECTION_START):len(Line) - len(TAB_SECTION_END)], TAB_COMMA_SPLIT) for Item in LineList: ItemList = GetSplitValueList(Item, TAB_SPLIT) @@ -66,7 +66,7 @@ def ParseContent(Lines, ): ThirdList.append(ItemList[2]) continue - + # # Not in any defined section # @@ -97,13 +97,13 @@ def ParseDefineMacro2(Table, RecordSets, GlobalMacro): RecordSet = Table.Exec(SqlCommand) for Record in RecordSet: Macros[Record[0]] = Record[1] - + # # Overrided by Global Macros # for Key in GlobalMacro.keys(): Macros[Key] = GlobalMacro[Key] - + # # Replace the Macros # @@ -111,7 +111,7 @@ def ParseDefineMacro2(Table, RecordSets, GlobalMacro): if RecordSets[Key] != []: for Item in RecordSets[Key]: Item[0] = ReplaceMacro(Item[0], Macros) - + ## ParseDefineMacro # # Search whole table to find all defined Macro and replaced them with the real values @@ -130,22 +130,22 @@ def ParseDefineMacro(Table, GlobalMacro): # The follow SqlCommand (expr replace) is not supported in Sqlite 3.3.4 which is used in Python 2.5 * # Reserved Only * # SqlCommand = """update %s set Value1 = replace(Value1, '%s', '%s') * -# where ID in (select ID from %s * +# where ID in (select ID from %s * # where Model = %s * # and Value1 like '%%%s%%' * # and StartLine > %s * # and Enabled > -1 * -# and Arch = '%s')""" % \ * +# and Arch = '%s')""" % \ * # (self.TblDsc.Table, Record[0], Record[1], self.TblDsc.Table, Record[2], Record[1], Record[3], Record[4]) * #*************************************************************************************************************************************************** Macros[Record[0]] = Record[1] - + # # Overrided by Global Macros # for Key in GlobalMacro.keys(): Macros[Key] = GlobalMacro[Key] - + # # Found all defined macro and replaced # @@ -228,7 +228,7 @@ def QueryDefinesItem2(Table, Arch, BelongsToFile): and BelongsToFile = %s and Enabled > -1""" % (Table.Table, MODEL_META_DATA_HEADER, ConvertToSqlString2(TAB_ARCH_COMMON), BelongsToFile) RecordSet = Table.Exec(SqlCommand) - + return RecordSet ##QueryDscItem @@ -307,7 +307,7 @@ def GetBuildOption(String, File, LineNo = -1): ## Get Library Class # # Get Library of Dsc as | -# +# # @param Item: String as | # @param ContainerFile: The file which describes the library class, used for error report # @@ -329,7 +329,7 @@ def GetLibraryClass(Item, ContainerFile, WorkspaceDir, LineNo = -1): ## Get Library Class # # Get Library of Dsc as [|][|.] -# +# # @param Item: String as | # @param ContainerFile: The file which describes the library class, used for error report # @@ -349,7 +349,7 @@ def GetLibraryClassOfInf(Item, ContainerFile, WorkspaceDir, LineNo = -1): if Item[1] != '': SupMod = Item[1] - return (ItemList[0], ItemList[1], ItemList[2], SupMod) + return (ItemList[0], ItemList[1], ItemList[2], SupMod) ## CheckPcdTokenInfo # @@ -373,7 +373,7 @@ def CheckPcdTokenInfo(TokenInfoString, Section, File, LineNo = -1): ## Get Pcd # # Get Pcd of Dsc as .|[||] -# +# # @param Item: String as .|[||] # @param ContainerFile: The file which describes the pcd, used for error report # @@ -382,23 +382,23 @@ def CheckPcdTokenInfo(TokenInfoString, Section, File, LineNo = -1): def GetPcd(Item, Type, ContainerFile, LineNo = -1): TokenGuid, TokenName, Value, MaximumDatumSize, Token = '', '', '', '', '' List = GetSplitValueList(Item + TAB_VALUE_SPLIT * 2) - + if len(List) < 4 or len(List) > 6: RaiseParserError(Item, 'Pcds' + Type, ContainerFile, '.|[||]', LineNo) else: Value = List[1] MaximumDatumSize = List[2] Token = List[3] - + if CheckPcdTokenInfo(List[0], 'Pcds' + Type, ContainerFile, LineNo): (TokenGuid, TokenName) = GetSplitValueList(List[0], TAB_SPLIT) - + return (TokenName, TokenGuid, Value, MaximumDatumSize, Token, Type) ## Get FeatureFlagPcd # # Get FeatureFlagPcd of Dsc as .|TRUE/FALSE -# +# # @param Item: String as .|TRUE/FALSE # @param ContainerFile: The file which describes the pcd, used for error report # @@ -413,13 +413,13 @@ def GetFeatureFlagPcd(Item, Type, ContainerFile, LineNo = -1): Value = List[1] if CheckPcdTokenInfo(List[0], 'Pcds' + Type, ContainerFile, LineNo): (TokenGuid, TokenName) = GetSplitValueList(List[0], DataType.TAB_SPLIT) - + return (TokenName, TokenGuid, Value, Type) ## Get DynamicDefaultPcd # # Get DynamicDefaultPcd of Dsc as .|[|[|]] -# +# # @param Item: String as .|TRUE/FALSE # @param ContainerFile: The file which describes the pcd, used for error report # @@ -436,13 +436,13 @@ def GetDynamicDefaultPcd(Item, Type, ContainerFile, LineNo = -1): MaxDatumSize = List[3] if CheckPcdTokenInfo(List[0], 'Pcds' + Type, ContainerFile, LineNo): (TokenGuid, TokenName) = GetSplitValueList(List[0], TAB_SPLIT) - + return (TokenName, TokenGuid, Value, DatumTyp, MaxDatumSize, Type) ## Get DynamicHiiPcd # # Get DynamicHiiPcd of Dsc as .|||[|[|]] -# +# # @param Item: String as .|TRUE/FALSE # @param ContainerFile: The file which describes the pcd, used for error report # @@ -457,13 +457,13 @@ def GetDynamicHiiPcd(Item, Type, ContainerFile, LineNo = -1): L1, L2, L3, L4, L5 = List[1], List[2], List[3], List[4], List[5] if CheckPcdTokenInfo(List[0], 'Pcds' + Type, ContainerFile, LineNo): (TokenGuid, TokenName) = GetSplitValueList(List[0], DataType.TAB_SPLIT) - + return (TokenName, TokenGuid, L1, L2, L3, L4, L5, Type) ## Get DynamicVpdPcd # # Get DynamicVpdPcd of Dsc as .|[|] -# +# # @param Item: String as .|TRUE/FALSE # @param ContainerFile: The file which describes the pcd, used for error report # @@ -478,7 +478,7 @@ def GetDynamicVpdPcd(Item, Type, ContainerFile, LineNo = -1): L1, L2 = List[1], List[2] if CheckPcdTokenInfo(List[0], 'Pcds' + Type, ContainerFile, LineNo): (TokenGuid, TokenName) = GetSplitValueList(List[0], DataType.TAB_SPLIT) - + return (TokenName, TokenGuid, L1, L2, Type) ## GetComponent @@ -500,13 +500,13 @@ def GetComponent(Lines, KeyValues): for Line in Lines: Line = Line[0] - + # # Ignore !include statement # if Line.upper().find(TAB_INCLUDE.upper() + ' ') > -1 or Line.upper().find(TAB_DEFINE + ' ') > -1: continue - + if findBlock == False: ListItem = Line # @@ -596,7 +596,7 @@ def GetExec(String): # Set KeyValues as [ ['component name', [lib1, lib2, lib3], [bo1, bo2, bo3], [pcd1, pcd2, pcd3]], ...] # # @param Lines: The content to be parsed -# @param Key: Reserved +# @param Key: Reserved # @param KeyValues: To store data after parsing # @param CommentCharacter: Comment char, used to ignore comment content # @@ -683,7 +683,7 @@ def GetComponents(Lines, Key, KeyValues, CommentCharacter): ## Get Source # # Get Source of Inf as [|[|[|[|]]]] -# +# # @param Item: String as [|[|[|[|]]]] # @param ContainerFile: The file which describes the library class, used for error report # @@ -704,11 +704,12 @@ def GetSource(Item, ContainerFile, FileRelativePath, LineNo = -1): ## Get Binary # # Get Binary of Inf as [|[|[|[|]]]] -# +# # @param Item: String as [|[|[|[|]]]] # @param ContainerFile: The file which describes the library class, used for error report # # @retval (List[0], List[1], List[2], List[3]) +# @retval List # def GetBinary(Item, ContainerFile, FileRelativePath, LineNo = -1): ItemNew = Item + DataType.TAB_VALUE_SPLIT @@ -718,15 +719,22 @@ def GetBinary(Item, ContainerFile, FileRelativePath, LineNo = -1): else: if List[3] != '': CheckPcdTokenInfo(List[3], 'Binaries', ContainerFile, LineNo) - - return (List[0], List[1], List[2], List[3]) + + if len(List) == 4: + return (List[0], List[1], List[2], List[3]) + elif len(List) == 3: + return (List[0], List[1], List[2], '') + elif len(List) == 2: + return (List[0], List[1], '', '') + elif len(List) == 1: + return (List[0], '', '', '') ## Get Guids/Protocols/Ppis # # Get Guids/Protocols/Ppis of Inf as [|] # # @param Item: String as [|] -# @param Type: Type of parsing string +# @param Type: Type of parsing string # @param ContainerFile: The file which describes the library class, used for error report # # @retval (List[0], List[1]) @@ -736,7 +744,7 @@ def GetGuidsProtocolsPpisOfInf(Item, Type, ContainerFile, LineNo = -1): List = GetSplitValueList(ItemNew) if List[1] != '': CheckPcdTokenInfo(List[1], Type, ContainerFile, LineNo) - + return (List[0], List[1]) ## Get Guids/Protocols/Ppis @@ -744,7 +752,7 @@ def GetGuidsProtocolsPpisOfInf(Item, Type, ContainerFile, LineNo = -1): # Get Guids/Protocols/Ppis of Dec as = # # @param Item: String as = -# @param Type: Type of parsing string +# @param Type: Type of parsing string # @param ContainerFile: The file which describes the library class, used for error report # # @retval (List[0], List[1]) @@ -753,7 +761,7 @@ def GetGuidsProtocolsPpisOfDec(Item, Type, ContainerFile, LineNo = -1): List = GetSplitValueList(Item, DataType.TAB_EQUAL_SPLIT) if len(List) != 2: RaiseParserError(Item, Type, ContainerFile, '=', LineNo) - + return (List[0], List[1]) ## GetPackage @@ -761,7 +769,7 @@ def GetGuidsProtocolsPpisOfDec(Item, Type, ContainerFile, LineNo = -1): # Get Package of Inf as [|] # # @param Item: String as [|] -# @param Type: Type of parsing string +# @param Type: Type of parsing string # @param ContainerFile: The file which describes the library class, used for error report # # @retval (List[0], List[1]) @@ -771,10 +779,10 @@ def GetPackage(Item, ContainerFile, FileRelativePath, LineNo = -1): List = GetSplitValueList(ItemNew) CheckFileType(List[0], '.Dec', ContainerFile, 'package', List[0], LineNo) CheckFileExist(FileRelativePath, List[0], ContainerFile, 'Packages', List[0], LineNo) - + if List[1] != '': CheckPcdTokenInfo(List[1], 'Packages', ContainerFile, LineNo) - + return (List[0], List[1]) ## Get Pcd Values of Inf @@ -790,15 +798,15 @@ def GetPackage(Item, ContainerFile, FileRelativePath, LineNo = -1): def GetPcdOfInf(Item, Type, File, LineNo): Format = '.[|]' TokenGuid, TokenName, Value, InfType = '', '', '', '' - + if Type == TAB_PCDS_FIXED_AT_BUILD: InfType = TAB_INF_FIXED_PCD elif Type == TAB_PCDS_PATCHABLE_IN_MODULE: InfType = TAB_INF_PATCH_PCD elif Type == TAB_PCDS_FEATURE_FLAG: - InfType = TAB_INF_FEATURE_PCD + InfType = TAB_INF_FEATURE_PCD elif Type == TAB_PCDS_DYNAMIC_EX: - InfType = TAB_INF_PCD_EX + InfType = TAB_INF_PCD_EX elif Type == TAB_PCDS_DYNAMIC: InfType = TAB_INF_PCD List = GetSplitValueList(Item + DataType.TAB_VALUE_SPLIT) @@ -815,7 +823,7 @@ def GetPcdOfInf(Item, Type, File, LineNo): return (TokenGuid, TokenName, Value, Type) - + ## Get Pcd Values of Dec # # Get Pcd of Dec as .||| @@ -837,7 +845,7 @@ def GetPcdOfDec(Item, Type, File, LineNo = -1): else: TokenGuid = TokenInfo[0] TokenName = TokenInfo[1] - + return (TokenGuid, TokenName, Value, DatumType, Token, Type) ## Parse DEFINE statement @@ -854,7 +862,7 @@ def ParseDefine(LineValue, StartLine, Table, FileID, Filename, SectionName, Sect Table.Insert(MODEL_META_DATA_DEFINE, Define[0], Define[1], '', '', '', Arch, SectionModel, FileID, StartLine, -1, StartLine, -1, 0) ## InsertSectionItems -# +# # Insert item data of a section to a dict # def InsertSectionItems(Model, CurrentSection, SectionItemList, ArchList, ThirdList, RecordSet): @@ -869,23 +877,23 @@ def InsertSectionItems(Model, CurrentSection, SectionItemList, ArchList, ThirdLi for SectionItem in SectionItemList: BelongsToItem, EndLine, EndColumn = -1, -1, -1 LineValue, StartLine, EndLine, Comment = SectionItem[0], SectionItem[1], SectionItem[1], SectionItem[2] - + EdkLogger.debug(4, "Parsing %s ..." %LineValue) # And then parse DEFINE statement if LineValue.upper().find(DataType.TAB_DEFINE.upper() + ' ') > -1: continue - + # At last parse other sections ID = -1 Records.append([LineValue, Arch, StartLine, ID, Third, Comment]) - + if RecordSet != {}: RecordSet[Model] = Records ## Insert records to database -# +# # Insert item data of a section to database -# @param Table: The Table to be inserted +# @param Table: The Table to be inserted # @param FileID: The ID of belonging file # @param Filename: The name of belonging file # @param CurrentSection: The name of currect section @@ -893,7 +901,7 @@ def InsertSectionItems(Model, CurrentSection, SectionItemList, ArchList, ThirdLi # @param ArchList: A list of arches # @param ThirdList: A list of third parameters, ModuleType for LibraryClass and SkuId for Dynamic Pcds # @param IfDefList: A list of all conditional statements -# @param RecordSet: A dict of all parsed records +# @param RecordSet: A dict of all parsed records # def InsertSectionItemsIntoDatabase(Table, FileID, Filename, Model, CurrentSection, SectionItemList, ArchList, ThirdList, IfDefList, RecordSet): # @@ -909,7 +917,7 @@ def InsertSectionItemsIntoDatabase(Table, FileID, Filename, Model, CurrentSectio for SectionItem in SectionItemList: BelongsToItem, EndLine, EndColumn = -1, -1, -1 LineValue, StartLine, EndLine = SectionItem[0], SectionItem[1], SectionItem[1] - + EdkLogger.debug(4, "Parsing %s ..." %LineValue) # # And then parse DEFINE statement @@ -917,13 +925,13 @@ def InsertSectionItemsIntoDatabase(Table, FileID, Filename, Model, CurrentSectio if LineValue.upper().find(DataType.TAB_DEFINE.upper() + ' ') > -1: ParseDefine(LineValue, StartLine, Table, FileID, Filename, CurrentSection, Model, Arch) continue - + # # At last parse other sections # ID = Table.Insert(Model, LineValue, Third, Third, '', '', Arch, -1, FileID, StartLine, -1, StartLine, -1, 0) Records.append([LineValue, Arch, StartLine, ID, Third]) - + if RecordSet != {}: RecordSet[Model] = Records @@ -932,4 +940,4 @@ def GenMetaDatSectionItem(Key, Value, List): if Key not in List: List[Key] = [Value] else: - List[Key].append(Value) \ No newline at end of file + List[Key].append(Value) \ No newline at end of file diff --git a/BaseTools/Source/Python/Common/__init__.py b/BaseTools/Source/Python/Common/__init__.py index e69de29bb2..b289a2b0d8 100644 --- a/BaseTools/Source/Python/Common/__init__.py +++ b/BaseTools/Source/Python/Common/__init__.py @@ -0,0 +1,15 @@ +## @file +# Python 'Common' package initialization file. +# +# This file is required to make Python interpreter treat the directory +# as containing package. +# +# Copyright (c) 2007 - 2010, Intel Corporation
    +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# diff --git a/BaseTools/Source/Python/CommonDataClass/FdfClass.py b/BaseTools/Source/Python/CommonDataClass/FdfClass.py index a9e12ed46d..a6953b8c5a 100644 --- a/BaseTools/Source/Python/CommonDataClass/FdfClass.py +++ b/BaseTools/Source/Python/CommonDataClass/FdfClass.py @@ -1,7 +1,7 @@ ## @file # classes represent data in FDF # -# Copyright (c) 2007, Intel Corporation +# Copyright (c) 2007 - 2010, Intel Corporation # # All rights reserved. This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License @@ -168,6 +168,7 @@ class DepexSectionClassObject (SectionClassObject): def __init__(self): self.DepexType = None self.Expression = None + self.ExpressionProcessed = False ## Compress section data in FDF # @@ -231,6 +232,7 @@ class FvImageSectionClassObject (SectionClassObject): self.FvFileType = None self.FvFileName = None self.FvFileExtension = None + self.FvAddr = None ## GUIDed section data in FDF # @@ -247,6 +249,9 @@ class GuidSectionClassObject (SectionClassObject) : self.SectionType = None self.ProcessRequired = False self.AuthStatusValid = False + self.FvAddr = [] + self.FvParentAddr = None + self.IncludeFvSection = False ## UI section data in FDF # @@ -290,6 +295,7 @@ class RuleClassObject : self.NameGuid = None self.Fixed = False self.Alignment = None + self.SectAlignment = None self.CheckSum = False self.FvFileType = None # for Ffs File Type self.KeyStringList = [] @@ -399,4 +405,4 @@ class OptionRomClassObject: def __init__(self): self.DriverName = None self.FfsList = [] - \ No newline at end of file + diff --git a/BaseTools/Source/Python/CommonDataClass/ModuleClass.py b/BaseTools/Source/Python/CommonDataClass/ModuleClass.py index 49d052dc45..350350bdf4 100644 --- a/BaseTools/Source/Python/CommonDataClass/ModuleClass.py +++ b/BaseTools/Source/Python/CommonDataClass/ModuleClass.py @@ -1,7 +1,7 @@ ## @file # This file is used to define a class object to describe a module # -# Copyright (c) 2007, Intel Corporation +# Copyright (c) 2007 - 2010, Intel Corporation # All rights reserved. This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License # which accompanies this distribution. The full text of the license may be found at @@ -34,7 +34,7 @@ from CommonClass import * # PEI_PCD_DRIVER | DXE_PCD_DRIVER # @var TianoR8FlashMap_h: To store value for TianoR8FlashMap_h # @var InfVersion: To store value for InfVersion -# @var EfiSpecificationVersion: To store value for EfiSpecificationVersion +# @var UefiSpecificationVersion: To store value for UefiSpecificationVersion # @var EdkReleaseVersion: To store value for EdkReleaseVersion # @var LibraryClass: To store value for LibraryClass, it is a set structure as # [ LibraryClassClass, ...] @@ -65,7 +65,6 @@ class ModuleHeaderClass(IdentificationClass, CommonHeaderClass, DefineClass): self.PcdIsDriver = '' self.TianoR8FlashMap_h = False self.InfVersion = '' - self.EfiSpecificationVersion = '' self.PiSpecificationVersion = '' self.UefiSpecificationVersion = '' self.EdkReleaseVersion = '' diff --git a/BaseTools/Source/Python/CommonDataClass/__init__.py b/BaseTools/Source/Python/CommonDataClass/__init__.py index e69de29bb2..8f81773a95 100644 --- a/BaseTools/Source/Python/CommonDataClass/__init__.py +++ b/BaseTools/Source/Python/CommonDataClass/__init__.py @@ -0,0 +1,15 @@ +## @file +# Python 'CommonDataClass' package initialization file. +# +# This file is required to make Python interpreter treat the directory +# as containing package. +# +# Copyright (c) 2007 - 2010, Intel Corporation
    +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# diff --git a/BaseTools/Source/Python/Ecc/C.g b/BaseTools/Source/Python/Ecc/C.g index 6aa50460de..a34f5902bb 100644 --- a/BaseTools/Source/Python/Ecc/C.g +++ b/BaseTools/Source/Python/Ecc/C.g @@ -1,3 +1,15 @@ +/* @file + This file is used to be the grammar file of ECC tool + + Copyright (c) 2009 - 2010, Intel Corporation + All rights reserved. This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +*/ grammar C; options { @@ -7,9 +19,49 @@ options { k=2; } +@lexer::header{ +## @file +# The file defines the Lexer for C source files. +# +# THIS FILE IS AUTO-GENENERATED. PLEASE DON NOT MODIFY THIS FILE. +# This file is generated by running: +# java org.antlr.Tool C.g +# +# Copyright (c) 2009 - 2010, Intel Corporation All rights reserved. +# +# This program and the accompanying materials are licensed and made available +# under the terms and conditions of the BSD License which accompanies this +# distribution. The full text of the license may be found at: +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +## +} + @header { - import CodeFragment - import FileProfile +## @file +# The file defines the parser for C source files. +# +# THIS FILE IS AUTO-GENENERATED. PLEASE DON NOT MODIFY THIS FILE. +# This file is generated by running: +# java org.antlr.Tool C.g +# +# Copyright (c) 2009 - 2010, Intel Corporation All rights reserved. +# +# This program and the accompanying materials are licensed and made available +# under the terms and conditions of the BSD License which accompanies this +# distribution. The full text of the license may be found at: +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +## + +import CodeFragment +import FileProfile } @members { @@ -238,6 +290,7 @@ type_qualifier | 'EFIAPI' | 'EFI_BOOTSERVICE' | 'EFI_RUNTIMESERVICE' + | 'PACKED' ; declarator diff --git a/BaseTools/Source/Python/Ecc/CLexer.py b/BaseTools/Source/Python/Ecc/CLexer.py index cc437e0821..947ac4c8e3 100644 --- a/BaseTools/Source/Python/Ecc/CLexer.py +++ b/BaseTools/Source/Python/Ecc/CLexer.py @@ -1,128 +1,149 @@ -# $ANTLR 3.0.1 C.g 2009-02-16 16:02:51 +# $ANTLR 3.0.1 C.g 2010-02-23 09:58:53 from antlr3 import * from antlr3.compat import set, frozenset + +## @file +# The file defines the Lexer for C source files. +# +# THIS FILE IS AUTO-GENENERATED. PLEASE DON NOT MODIFY THIS FILE. +# This file is generated by running: +# java org.antlr.Tool C.g +# +# Copyright (c) 2009 - 2010, Intel Corporation All rights reserved. +# +# This program and the accompanying materials are licensed and made available +# under the terms and conditions of the BSD License which accompanies this +# distribution. The full text of the license may be found at: +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +## + # for convenience in actions HIDDEN = BaseRecognizer.HIDDEN # token types -T29=29 -HexDigit=13 -T70=70 -T74=74 -T85=85 -T102=102 T114=114 -T103=103 +T115=115 +T116=116 +T117=117 +FloatTypeSuffix=16 +LETTER=11 +T29=29 +T28=28 +T27=27 +T26=26 +T25=25 +EOF=-1 STRING_LITERAL=9 +FLOATING_POINT_LITERAL=10 +T38=38 +T37=37 +T39=39 +T34=34 +COMMENT=22 +T33=33 +T36=36 +T35=35 +T30=30 T32=32 -T81=81 +T31=31 +LINE_COMMENT=23 +IntegerTypeSuffix=14 +CHARACTER_LITERAL=8 +T49=49 +T48=48 +T100=100 +T43=43 +T42=42 +T102=102 T41=41 -FloatTypeSuffix=16 -T113=113 -T62=62 +T101=101 +T40=40 +T47=47 +T46=46 +T45=45 +T44=44 T109=109 +T107=107 +T108=108 +T105=105 +WS=19 +T106=106 +T103=103 +T104=104 +T50=50 +LINE_COMMAND=24 +T59=59 +T113=113 +T52=52 +T112=112 +T51=51 +T111=111 +T54=54 +T110=110 +EscapeSequence=12 DECIMAL_LITERAL=7 -IntegerTypeSuffix=14 -T68=68 +T53=53 +T56=56 +T55=55 +T58=58 +T57=57 +T75=75 +T76=76 T73=73 -T84=84 -T33=33 -UnicodeVocabulary=21 +T74=74 +T79=79 +T77=77 T78=78 -T115=115 -WS=19 -LINE_COMMAND=24 -T42=42 -T96=96 -T71=71 -LINE_COMMENT=23 +Exponent=15 +HexDigit=13 T72=72 -T94=94 -FLOATING_POINT_LITERAL=10 -T76=76 -UnicodeEscape=18 -T75=75 -T89=89 +T71=71 +T70=70 +T62=62 +T63=63 +T64=64 +T65=65 +T66=66 T67=67 -T31=31 -T60=60 -T82=82 -T100=100 -T49=49 +T68=68 +T69=69 IDENTIFIER=4 -T30=30 -CHARACTER_LITERAL=8 -T79=79 -T36=36 -T58=58 -T93=93 -T35=35 -T107=107 -OCTAL_LITERAL=6 -T83=83 -T61=61 +UnicodeVocabulary=21 HEX_LITERAL=5 -T45=45 -T34=34 -T101=101 -T64=64 -T25=25 -T91=91 -T105=105 -T37=37 -T86=86 -T116=116 -EscapeSequence=12 -T26=26 -T51=51 -T111=111 -T46=46 -T77=77 -T38=38 -T106=106 -T112=112 -T69=69 -T39=39 -T44=44 -T55=55 -LETTER=11 -Exponent=15 -T95=95 -T50=50 -T110=110 -T108=108 +T61=61 +T60=60 +T99=99 +T97=97 BS=20 +T98=98 +T95=95 +T96=96 +OCTAL_LITERAL=6 +T94=94 +Tokens=118 +T93=93 T92=92 -T43=43 -T28=28 -T40=40 -T66=66 -COMMENT=22 +T91=91 +T90=90 T88=88 -T63=63 -T57=57 -T65=65 -T98=98 -T56=56 +T89=89 +T84=84 +T85=85 +T86=86 T87=87 +UnicodeEscape=18 +T81=81 T80=80 -T59=59 -T97=97 -T48=48 -T54=54 -EOF=-1 -T104=104 -T47=47 -Tokens=117 -T53=53 +T83=83 OctalEscape=17 -T99=99 -T27=27 -T52=52 -T90=90 +T82=82 class CLexer(Lexer): @@ -162,8 +183,8 @@ class CLexer(Lexer): try: self.type = T25 - # C.g:7:5: ( ';' ) - # C.g:7:7: ';' + # C.g:27:5: ( ';' ) + # C.g:27:7: ';' self.match(u';') @@ -184,8 +205,8 @@ class CLexer(Lexer): try: self.type = T26 - # C.g:8:5: ( 'typedef' ) - # C.g:8:7: 'typedef' + # C.g:28:5: ( 'typedef' ) + # C.g:28:7: 'typedef' self.match("typedef") @@ -207,8 +228,8 @@ class CLexer(Lexer): try: self.type = T27 - # C.g:9:5: ( ',' ) - # C.g:9:7: ',' + # C.g:29:5: ( ',' ) + # C.g:29:7: ',' self.match(u',') @@ -229,8 +250,8 @@ class CLexer(Lexer): try: self.type = T28 - # C.g:10:5: ( '=' ) - # C.g:10:7: '=' + # C.g:30:5: ( '=' ) + # C.g:30:7: '=' self.match(u'=') @@ -251,8 +272,8 @@ class CLexer(Lexer): try: self.type = T29 - # C.g:11:5: ( 'extern' ) - # C.g:11:7: 'extern' + # C.g:31:5: ( 'extern' ) + # C.g:31:7: 'extern' self.match("extern") @@ -274,8 +295,8 @@ class CLexer(Lexer): try: self.type = T30 - # C.g:12:5: ( 'static' ) - # C.g:12:7: 'static' + # C.g:32:5: ( 'static' ) + # C.g:32:7: 'static' self.match("static") @@ -297,8 +318,8 @@ class CLexer(Lexer): try: self.type = T31 - # C.g:13:5: ( 'auto' ) - # C.g:13:7: 'auto' + # C.g:33:5: ( 'auto' ) + # C.g:33:7: 'auto' self.match("auto") @@ -320,8 +341,8 @@ class CLexer(Lexer): try: self.type = T32 - # C.g:14:5: ( 'register' ) - # C.g:14:7: 'register' + # C.g:34:5: ( 'register' ) + # C.g:34:7: 'register' self.match("register") @@ -343,8 +364,8 @@ class CLexer(Lexer): try: self.type = T33 - # C.g:15:5: ( 'STATIC' ) - # C.g:15:7: 'STATIC' + # C.g:35:5: ( 'STATIC' ) + # C.g:35:7: 'STATIC' self.match("STATIC") @@ -366,8 +387,8 @@ class CLexer(Lexer): try: self.type = T34 - # C.g:16:5: ( 'void' ) - # C.g:16:7: 'void' + # C.g:36:5: ( 'void' ) + # C.g:36:7: 'void' self.match("void") @@ -389,8 +410,8 @@ class CLexer(Lexer): try: self.type = T35 - # C.g:17:5: ( 'char' ) - # C.g:17:7: 'char' + # C.g:37:5: ( 'char' ) + # C.g:37:7: 'char' self.match("char") @@ -412,8 +433,8 @@ class CLexer(Lexer): try: self.type = T36 - # C.g:18:5: ( 'short' ) - # C.g:18:7: 'short' + # C.g:38:5: ( 'short' ) + # C.g:38:7: 'short' self.match("short") @@ -435,8 +456,8 @@ class CLexer(Lexer): try: self.type = T37 - # C.g:19:5: ( 'int' ) - # C.g:19:7: 'int' + # C.g:39:5: ( 'int' ) + # C.g:39:7: 'int' self.match("int") @@ -458,8 +479,8 @@ class CLexer(Lexer): try: self.type = T38 - # C.g:20:5: ( 'long' ) - # C.g:20:7: 'long' + # C.g:40:5: ( 'long' ) + # C.g:40:7: 'long' self.match("long") @@ -481,8 +502,8 @@ class CLexer(Lexer): try: self.type = T39 - # C.g:21:5: ( 'float' ) - # C.g:21:7: 'float' + # C.g:41:5: ( 'float' ) + # C.g:41:7: 'float' self.match("float") @@ -504,8 +525,8 @@ class CLexer(Lexer): try: self.type = T40 - # C.g:22:5: ( 'double' ) - # C.g:22:7: 'double' + # C.g:42:5: ( 'double' ) + # C.g:42:7: 'double' self.match("double") @@ -527,8 +548,8 @@ class CLexer(Lexer): try: self.type = T41 - # C.g:23:5: ( 'signed' ) - # C.g:23:7: 'signed' + # C.g:43:5: ( 'signed' ) + # C.g:43:7: 'signed' self.match("signed") @@ -550,8 +571,8 @@ class CLexer(Lexer): try: self.type = T42 - # C.g:24:5: ( 'unsigned' ) - # C.g:24:7: 'unsigned' + # C.g:44:5: ( 'unsigned' ) + # C.g:44:7: 'unsigned' self.match("unsigned") @@ -573,8 +594,8 @@ class CLexer(Lexer): try: self.type = T43 - # C.g:25:5: ( '{' ) - # C.g:25:7: '{' + # C.g:45:5: ( '{' ) + # C.g:45:7: '{' self.match(u'{') @@ -595,8 +616,8 @@ class CLexer(Lexer): try: self.type = T44 - # C.g:26:5: ( '}' ) - # C.g:26:7: '}' + # C.g:46:5: ( '}' ) + # C.g:46:7: '}' self.match(u'}') @@ -617,8 +638,8 @@ class CLexer(Lexer): try: self.type = T45 - # C.g:27:5: ( 'struct' ) - # C.g:27:7: 'struct' + # C.g:47:5: ( 'struct' ) + # C.g:47:7: 'struct' self.match("struct") @@ -640,8 +661,8 @@ class CLexer(Lexer): try: self.type = T46 - # C.g:28:5: ( 'union' ) - # C.g:28:7: 'union' + # C.g:48:5: ( 'union' ) + # C.g:48:7: 'union' self.match("union") @@ -663,8 +684,8 @@ class CLexer(Lexer): try: self.type = T47 - # C.g:29:5: ( ':' ) - # C.g:29:7: ':' + # C.g:49:5: ( ':' ) + # C.g:49:7: ':' self.match(u':') @@ -685,8 +706,8 @@ class CLexer(Lexer): try: self.type = T48 - # C.g:30:5: ( 'enum' ) - # C.g:30:7: 'enum' + # C.g:50:5: ( 'enum' ) + # C.g:50:7: 'enum' self.match("enum") @@ -708,8 +729,8 @@ class CLexer(Lexer): try: self.type = T49 - # C.g:31:5: ( 'const' ) - # C.g:31:7: 'const' + # C.g:51:5: ( 'const' ) + # C.g:51:7: 'const' self.match("const") @@ -731,8 +752,8 @@ class CLexer(Lexer): try: self.type = T50 - # C.g:32:5: ( 'volatile' ) - # C.g:32:7: 'volatile' + # C.g:52:5: ( 'volatile' ) + # C.g:52:7: 'volatile' self.match("volatile") @@ -754,8 +775,8 @@ class CLexer(Lexer): try: self.type = T51 - # C.g:33:5: ( 'IN' ) - # C.g:33:7: 'IN' + # C.g:53:5: ( 'IN' ) + # C.g:53:7: 'IN' self.match("IN") @@ -777,8 +798,8 @@ class CLexer(Lexer): try: self.type = T52 - # C.g:34:5: ( 'OUT' ) - # C.g:34:7: 'OUT' + # C.g:54:5: ( 'OUT' ) + # C.g:54:7: 'OUT' self.match("OUT") @@ -800,8 +821,8 @@ class CLexer(Lexer): try: self.type = T53 - # C.g:35:5: ( 'OPTIONAL' ) - # C.g:35:7: 'OPTIONAL' + # C.g:55:5: ( 'OPTIONAL' ) + # C.g:55:7: 'OPTIONAL' self.match("OPTIONAL") @@ -823,8 +844,8 @@ class CLexer(Lexer): try: self.type = T54 - # C.g:36:5: ( 'CONST' ) - # C.g:36:7: 'CONST' + # C.g:56:5: ( 'CONST' ) + # C.g:56:7: 'CONST' self.match("CONST") @@ -846,8 +867,8 @@ class CLexer(Lexer): try: self.type = T55 - # C.g:37:5: ( 'UNALIGNED' ) - # C.g:37:7: 'UNALIGNED' + # C.g:57:5: ( 'UNALIGNED' ) + # C.g:57:7: 'UNALIGNED' self.match("UNALIGNED") @@ -869,8 +890,8 @@ class CLexer(Lexer): try: self.type = T56 - # C.g:38:5: ( 'VOLATILE' ) - # C.g:38:7: 'VOLATILE' + # C.g:58:5: ( 'VOLATILE' ) + # C.g:58:7: 'VOLATILE' self.match("VOLATILE") @@ -892,8 +913,8 @@ class CLexer(Lexer): try: self.type = T57 - # C.g:39:5: ( 'GLOBAL_REMOVE_IF_UNREFERENCED' ) - # C.g:39:7: 'GLOBAL_REMOVE_IF_UNREFERENCED' + # C.g:59:5: ( 'GLOBAL_REMOVE_IF_UNREFERENCED' ) + # C.g:59:7: 'GLOBAL_REMOVE_IF_UNREFERENCED' self.match("GLOBAL_REMOVE_IF_UNREFERENCED") @@ -915,8 +936,8 @@ class CLexer(Lexer): try: self.type = T58 - # C.g:40:5: ( 'EFIAPI' ) - # C.g:40:7: 'EFIAPI' + # C.g:60:5: ( 'EFIAPI' ) + # C.g:60:7: 'EFIAPI' self.match("EFIAPI") @@ -938,8 +959,8 @@ class CLexer(Lexer): try: self.type = T59 - # C.g:41:5: ( 'EFI_BOOTSERVICE' ) - # C.g:41:7: 'EFI_BOOTSERVICE' + # C.g:61:5: ( 'EFI_BOOTSERVICE' ) + # C.g:61:7: 'EFI_BOOTSERVICE' self.match("EFI_BOOTSERVICE") @@ -961,8 +982,8 @@ class CLexer(Lexer): try: self.type = T60 - # C.g:42:5: ( 'EFI_RUNTIMESERVICE' ) - # C.g:42:7: 'EFI_RUNTIMESERVICE' + # C.g:62:5: ( 'EFI_RUNTIMESERVICE' ) + # C.g:62:7: 'EFI_RUNTIMESERVICE' self.match("EFI_RUNTIMESERVICE") @@ -984,9 +1005,10 @@ class CLexer(Lexer): try: self.type = T61 - # C.g:43:5: ( '(' ) - # C.g:43:7: '(' - self.match(u'(') + # C.g:63:5: ( 'PACKED' ) + # C.g:63:7: 'PACKED' + self.match("PACKED") + @@ -1006,9 +1028,9 @@ class CLexer(Lexer): try: self.type = T62 - # C.g:44:5: ( ')' ) - # C.g:44:7: ')' - self.match(u')') + # C.g:64:5: ( '(' ) + # C.g:64:7: '(' + self.match(u'(') @@ -1028,9 +1050,9 @@ class CLexer(Lexer): try: self.type = T63 - # C.g:45:5: ( '[' ) - # C.g:45:7: '[' - self.match(u'[') + # C.g:65:5: ( ')' ) + # C.g:65:7: ')' + self.match(u')') @@ -1050,9 +1072,9 @@ class CLexer(Lexer): try: self.type = T64 - # C.g:46:5: ( ']' ) - # C.g:46:7: ']' - self.match(u']') + # C.g:66:5: ( '[' ) + # C.g:66:7: '[' + self.match(u'[') @@ -1072,9 +1094,9 @@ class CLexer(Lexer): try: self.type = T65 - # C.g:47:5: ( '*' ) - # C.g:47:7: '*' - self.match(u'*') + # C.g:67:5: ( ']' ) + # C.g:67:7: ']' + self.match(u']') @@ -1094,10 +1116,9 @@ class CLexer(Lexer): try: self.type = T66 - # C.g:48:5: ( '...' ) - # C.g:48:7: '...' - self.match("...") - + # C.g:68:5: ( '*' ) + # C.g:68:7: '*' + self.match(u'*') @@ -1117,9 +1138,10 @@ class CLexer(Lexer): try: self.type = T67 - # C.g:49:5: ( '+' ) - # C.g:49:7: '+' - self.match(u'+') + # C.g:69:5: ( '...' ) + # C.g:69:7: '...' + self.match("...") + @@ -1139,9 +1161,9 @@ class CLexer(Lexer): try: self.type = T68 - # C.g:50:5: ( '-' ) - # C.g:50:7: '-' - self.match(u'-') + # C.g:70:5: ( '+' ) + # C.g:70:7: '+' + self.match(u'+') @@ -1161,9 +1183,9 @@ class CLexer(Lexer): try: self.type = T69 - # C.g:51:5: ( '/' ) - # C.g:51:7: '/' - self.match(u'/') + # C.g:71:5: ( '-' ) + # C.g:71:7: '-' + self.match(u'-') @@ -1183,9 +1205,9 @@ class CLexer(Lexer): try: self.type = T70 - # C.g:52:5: ( '%' ) - # C.g:52:7: '%' - self.match(u'%') + # C.g:72:5: ( '/' ) + # C.g:72:7: '/' + self.match(u'/') @@ -1205,10 +1227,9 @@ class CLexer(Lexer): try: self.type = T71 - # C.g:53:5: ( '++' ) - # C.g:53:7: '++' - self.match("++") - + # C.g:73:5: ( '%' ) + # C.g:73:7: '%' + self.match(u'%') @@ -1228,9 +1249,9 @@ class CLexer(Lexer): try: self.type = T72 - # C.g:54:5: ( '--' ) - # C.g:54:7: '--' - self.match("--") + # C.g:74:5: ( '++' ) + # C.g:74:7: '++' + self.match("++") @@ -1251,9 +1272,9 @@ class CLexer(Lexer): try: self.type = T73 - # C.g:55:5: ( 'sizeof' ) - # C.g:55:7: 'sizeof' - self.match("sizeof") + # C.g:75:5: ( '--' ) + # C.g:75:7: '--' + self.match("--") @@ -1274,9 +1295,10 @@ class CLexer(Lexer): try: self.type = T74 - # C.g:56:5: ( '.' ) - # C.g:56:7: '.' - self.match(u'.') + # C.g:76:5: ( 'sizeof' ) + # C.g:76:7: 'sizeof' + self.match("sizeof") + @@ -1296,10 +1318,9 @@ class CLexer(Lexer): try: self.type = T75 - # C.g:57:5: ( '->' ) - # C.g:57:7: '->' - self.match("->") - + # C.g:77:5: ( '.' ) + # C.g:77:7: '.' + self.match(u'.') @@ -1319,9 +1340,10 @@ class CLexer(Lexer): try: self.type = T76 - # C.g:58:5: ( '&' ) - # C.g:58:7: '&' - self.match(u'&') + # C.g:78:5: ( '->' ) + # C.g:78:7: '->' + self.match("->") + @@ -1341,9 +1363,9 @@ class CLexer(Lexer): try: self.type = T77 - # C.g:59:5: ( '~' ) - # C.g:59:7: '~' - self.match(u'~') + # C.g:79:5: ( '&' ) + # C.g:79:7: '&' + self.match(u'&') @@ -1363,9 +1385,9 @@ class CLexer(Lexer): try: self.type = T78 - # C.g:60:5: ( '!' ) - # C.g:60:7: '!' - self.match(u'!') + # C.g:80:5: ( '~' ) + # C.g:80:7: '~' + self.match(u'~') @@ -1385,10 +1407,9 @@ class CLexer(Lexer): try: self.type = T79 - # C.g:61:5: ( '*=' ) - # C.g:61:7: '*=' - self.match("*=") - + # C.g:81:5: ( '!' ) + # C.g:81:7: '!' + self.match(u'!') @@ -1408,9 +1429,9 @@ class CLexer(Lexer): try: self.type = T80 - # C.g:62:5: ( '/=' ) - # C.g:62:7: '/=' - self.match("/=") + # C.g:82:5: ( '*=' ) + # C.g:82:7: '*=' + self.match("*=") @@ -1431,9 +1452,9 @@ class CLexer(Lexer): try: self.type = T81 - # C.g:63:5: ( '%=' ) - # C.g:63:7: '%=' - self.match("%=") + # C.g:83:5: ( '/=' ) + # C.g:83:7: '/=' + self.match("/=") @@ -1454,9 +1475,9 @@ class CLexer(Lexer): try: self.type = T82 - # C.g:64:5: ( '+=' ) - # C.g:64:7: '+=' - self.match("+=") + # C.g:84:5: ( '%=' ) + # C.g:84:7: '%=' + self.match("%=") @@ -1477,9 +1498,9 @@ class CLexer(Lexer): try: self.type = T83 - # C.g:65:5: ( '-=' ) - # C.g:65:7: '-=' - self.match("-=") + # C.g:85:5: ( '+=' ) + # C.g:85:7: '+=' + self.match("+=") @@ -1500,9 +1521,9 @@ class CLexer(Lexer): try: self.type = T84 - # C.g:66:5: ( '<<=' ) - # C.g:66:7: '<<=' - self.match("<<=") + # C.g:86:5: ( '-=' ) + # C.g:86:7: '-=' + self.match("-=") @@ -1523,9 +1544,9 @@ class CLexer(Lexer): try: self.type = T85 - # C.g:67:5: ( '>>=' ) - # C.g:67:7: '>>=' - self.match(">>=") + # C.g:87:5: ( '<<=' ) + # C.g:87:7: '<<=' + self.match("<<=") @@ -1546,9 +1567,9 @@ class CLexer(Lexer): try: self.type = T86 - # C.g:68:5: ( '&=' ) - # C.g:68:7: '&=' - self.match("&=") + # C.g:88:5: ( '>>=' ) + # C.g:88:7: '>>=' + self.match(">>=") @@ -1569,9 +1590,9 @@ class CLexer(Lexer): try: self.type = T87 - # C.g:69:5: ( '^=' ) - # C.g:69:7: '^=' - self.match("^=") + # C.g:89:5: ( '&=' ) + # C.g:89:7: '&=' + self.match("&=") @@ -1592,9 +1613,9 @@ class CLexer(Lexer): try: self.type = T88 - # C.g:70:5: ( '|=' ) - # C.g:70:7: '|=' - self.match("|=") + # C.g:90:5: ( '^=' ) + # C.g:90:7: '^=' + self.match("^=") @@ -1615,9 +1636,10 @@ class CLexer(Lexer): try: self.type = T89 - # C.g:71:5: ( '?' ) - # C.g:71:7: '?' - self.match(u'?') + # C.g:91:5: ( '|=' ) + # C.g:91:7: '|=' + self.match("|=") + @@ -1637,10 +1659,9 @@ class CLexer(Lexer): try: self.type = T90 - # C.g:72:5: ( '||' ) - # C.g:72:7: '||' - self.match("||") - + # C.g:92:5: ( '?' ) + # C.g:92:7: '?' + self.match(u'?') @@ -1660,9 +1681,9 @@ class CLexer(Lexer): try: self.type = T91 - # C.g:73:5: ( '&&' ) - # C.g:73:7: '&&' - self.match("&&") + # C.g:93:5: ( '||' ) + # C.g:93:7: '||' + self.match("||") @@ -1683,9 +1704,10 @@ class CLexer(Lexer): try: self.type = T92 - # C.g:74:5: ( '|' ) - # C.g:74:7: '|' - self.match(u'|') + # C.g:94:5: ( '&&' ) + # C.g:94:7: '&&' + self.match("&&") + @@ -1705,9 +1727,9 @@ class CLexer(Lexer): try: self.type = T93 - # C.g:75:5: ( '^' ) - # C.g:75:7: '^' - self.match(u'^') + # C.g:95:5: ( '|' ) + # C.g:95:7: '|' + self.match(u'|') @@ -1727,10 +1749,9 @@ class CLexer(Lexer): try: self.type = T94 - # C.g:76:5: ( '==' ) - # C.g:76:7: '==' - self.match("==") - + # C.g:96:5: ( '^' ) + # C.g:96:7: '^' + self.match(u'^') @@ -1750,9 +1771,9 @@ class CLexer(Lexer): try: self.type = T95 - # C.g:77:5: ( '!=' ) - # C.g:77:7: '!=' - self.match("!=") + # C.g:97:5: ( '==' ) + # C.g:97:7: '==' + self.match("==") @@ -1773,9 +1794,10 @@ class CLexer(Lexer): try: self.type = T96 - # C.g:78:5: ( '<' ) - # C.g:78:7: '<' - self.match(u'<') + # C.g:98:5: ( '!=' ) + # C.g:98:7: '!=' + self.match("!=") + @@ -1795,9 +1817,9 @@ class CLexer(Lexer): try: self.type = T97 - # C.g:79:5: ( '>' ) - # C.g:79:7: '>' - self.match(u'>') + # C.g:99:5: ( '<' ) + # C.g:99:7: '<' + self.match(u'<') @@ -1817,10 +1839,9 @@ class CLexer(Lexer): try: self.type = T98 - # C.g:80:5: ( '<=' ) - # C.g:80:7: '<=' - self.match("<=") - + # C.g:100:5: ( '>' ) + # C.g:100:7: '>' + self.match(u'>') @@ -1840,9 +1861,9 @@ class CLexer(Lexer): try: self.type = T99 - # C.g:81:5: ( '>=' ) - # C.g:81:7: '>=' - self.match(">=") + # C.g:101:5: ( '<=' ) + # C.g:101:7: '<=' + self.match("<=") @@ -1863,9 +1884,9 @@ class CLexer(Lexer): try: self.type = T100 - # C.g:82:6: ( '<<' ) - # C.g:82:8: '<<' - self.match("<<") + # C.g:102:6: ( '>=' ) + # C.g:102:8: '>=' + self.match(">=") @@ -1886,9 +1907,9 @@ class CLexer(Lexer): try: self.type = T101 - # C.g:83:6: ( '>>' ) - # C.g:83:8: '>>' - self.match(">>") + # C.g:103:6: ( '<<' ) + # C.g:103:8: '<<' + self.match("<<") @@ -1909,9 +1930,9 @@ class CLexer(Lexer): try: self.type = T102 - # C.g:84:6: ( '__asm__' ) - # C.g:84:8: '__asm__' - self.match("__asm__") + # C.g:104:6: ( '>>' ) + # C.g:104:8: '>>' + self.match(">>") @@ -1932,9 +1953,9 @@ class CLexer(Lexer): try: self.type = T103 - # C.g:85:6: ( '_asm' ) - # C.g:85:8: '_asm' - self.match("_asm") + # C.g:105:6: ( '__asm__' ) + # C.g:105:8: '__asm__' + self.match("__asm__") @@ -1955,9 +1976,9 @@ class CLexer(Lexer): try: self.type = T104 - # C.g:86:6: ( '__asm' ) - # C.g:86:8: '__asm' - self.match("__asm") + # C.g:106:6: ( '_asm' ) + # C.g:106:8: '_asm' + self.match("_asm") @@ -1978,9 +1999,9 @@ class CLexer(Lexer): try: self.type = T105 - # C.g:87:6: ( 'case' ) - # C.g:87:8: 'case' - self.match("case") + # C.g:107:6: ( '__asm' ) + # C.g:107:8: '__asm' + self.match("__asm") @@ -2001,9 +2022,9 @@ class CLexer(Lexer): try: self.type = T106 - # C.g:88:6: ( 'default' ) - # C.g:88:8: 'default' - self.match("default") + # C.g:108:6: ( 'case' ) + # C.g:108:8: 'case' + self.match("case") @@ -2024,9 +2045,9 @@ class CLexer(Lexer): try: self.type = T107 - # C.g:89:6: ( 'if' ) - # C.g:89:8: 'if' - self.match("if") + # C.g:109:6: ( 'default' ) + # C.g:109:8: 'default' + self.match("default") @@ -2047,9 +2068,9 @@ class CLexer(Lexer): try: self.type = T108 - # C.g:90:6: ( 'else' ) - # C.g:90:8: 'else' - self.match("else") + # C.g:110:6: ( 'if' ) + # C.g:110:8: 'if' + self.match("if") @@ -2070,9 +2091,9 @@ class CLexer(Lexer): try: self.type = T109 - # C.g:91:6: ( 'switch' ) - # C.g:91:8: 'switch' - self.match("switch") + # C.g:111:6: ( 'else' ) + # C.g:111:8: 'else' + self.match("else") @@ -2093,9 +2114,9 @@ class CLexer(Lexer): try: self.type = T110 - # C.g:92:6: ( 'while' ) - # C.g:92:8: 'while' - self.match("while") + # C.g:112:6: ( 'switch' ) + # C.g:112:8: 'switch' + self.match("switch") @@ -2116,9 +2137,9 @@ class CLexer(Lexer): try: self.type = T111 - # C.g:93:6: ( 'do' ) - # C.g:93:8: 'do' - self.match("do") + # C.g:113:6: ( 'while' ) + # C.g:113:8: 'while' + self.match("while") @@ -2139,9 +2160,9 @@ class CLexer(Lexer): try: self.type = T112 - # C.g:94:6: ( 'for' ) - # C.g:94:8: 'for' - self.match("for") + # C.g:114:6: ( 'do' ) + # C.g:114:8: 'do' + self.match("do") @@ -2162,9 +2183,9 @@ class CLexer(Lexer): try: self.type = T113 - # C.g:95:6: ( 'goto' ) - # C.g:95:8: 'goto' - self.match("goto") + # C.g:115:6: ( 'for' ) + # C.g:115:8: 'for' + self.match("for") @@ -2185,9 +2206,9 @@ class CLexer(Lexer): try: self.type = T114 - # C.g:96:6: ( 'continue' ) - # C.g:96:8: 'continue' - self.match("continue") + # C.g:116:6: ( 'goto' ) + # C.g:116:8: 'goto' + self.match("goto") @@ -2208,9 +2229,9 @@ class CLexer(Lexer): try: self.type = T115 - # C.g:97:6: ( 'break' ) - # C.g:97:8: 'break' - self.match("break") + # C.g:117:6: ( 'continue' ) + # C.g:117:8: 'continue' + self.match("continue") @@ -2231,9 +2252,9 @@ class CLexer(Lexer): try: self.type = T116 - # C.g:98:6: ( 'return' ) - # C.g:98:8: 'return' - self.match("return") + # C.g:118:6: ( 'break' ) + # C.g:118:8: 'break' + self.match("break") @@ -2248,17 +2269,40 @@ class CLexer(Lexer): + # $ANTLR start T117 + def mT117(self, ): + + try: + self.type = T117 + + # C.g:119:6: ( 'return' ) + # C.g:119:8: 'return' + self.match("return") + + + + + + + finally: + + pass + + # $ANTLR end T117 + + + # $ANTLR start IDENTIFIER def mIDENTIFIER(self, ): try: self.type = IDENTIFIER - # C.g:533:2: ( LETTER ( LETTER | '0' .. '9' )* ) - # C.g:533:4: LETTER ( LETTER | '0' .. '9' )* + # C.g:586:2: ( LETTER ( LETTER | '0' .. '9' )* ) + # C.g:586:4: LETTER ( LETTER | '0' .. '9' )* self.mLETTER() - # C.g:533:11: ( LETTER | '0' .. '9' )* + # C.g:586:11: ( LETTER | '0' .. '9' )* while True: #loop1 alt1 = 2 LA1_0 = self.input.LA(1) @@ -2300,7 +2344,7 @@ class CLexer(Lexer): def mLETTER(self, ): try: - # C.g:538:2: ( '$' | 'A' .. 'Z' | 'a' .. 'z' | '_' ) + # C.g:591:2: ( '$' | 'A' .. 'Z' | 'a' .. 'z' | '_' ) # C.g: if self.input.LA(1) == u'$' or (u'A' <= self.input.LA(1) <= u'Z') or self.input.LA(1) == u'_' or (u'a' <= self.input.LA(1) <= u'z'): self.input.consume(); @@ -2329,16 +2373,16 @@ class CLexer(Lexer): try: self.type = CHARACTER_LITERAL - # C.g:545:5: ( ( 'L' )? '\\'' ( EscapeSequence | ~ ( '\\'' | '\\\\' ) ) '\\'' ) - # C.g:545:9: ( 'L' )? '\\'' ( EscapeSequence | ~ ( '\\'' | '\\\\' ) ) '\\'' - # C.g:545:9: ( 'L' )? + # C.g:598:5: ( ( 'L' )? '\\'' ( EscapeSequence | ~ ( '\\'' | '\\\\' ) ) '\\'' ) + # C.g:598:9: ( 'L' )? '\\'' ( EscapeSequence | ~ ( '\\'' | '\\\\' ) ) '\\'' + # C.g:598:9: ( 'L' )? alt2 = 2 LA2_0 = self.input.LA(1) if (LA2_0 == u'L') : alt2 = 1 if alt2 == 1: - # C.g:545:10: 'L' + # C.g:598:10: 'L' self.match(u'L') @@ -2346,7 +2390,7 @@ class CLexer(Lexer): self.match(u'\'') - # C.g:545:21: ( EscapeSequence | ~ ( '\\'' | '\\\\' ) ) + # C.g:598:21: ( EscapeSequence | ~ ( '\\'' | '\\\\' ) ) alt3 = 2 LA3_0 = self.input.LA(1) @@ -2355,18 +2399,18 @@ class CLexer(Lexer): elif ((u'\u0000' <= LA3_0 <= u'&') or (u'(' <= LA3_0 <= u'[') or (u']' <= LA3_0 <= u'\uFFFE')) : alt3 = 2 else: - nvae = NoViableAltException("545:21: ( EscapeSequence | ~ ( '\\'' | '\\\\' ) )", 3, 0, self.input) + nvae = NoViableAltException("598:21: ( EscapeSequence | ~ ( '\\'' | '\\\\' ) )", 3, 0, self.input) raise nvae if alt3 == 1: - # C.g:545:23: EscapeSequence + # C.g:598:23: EscapeSequence self.mEscapeSequence() elif alt3 == 2: - # C.g:545:40: ~ ( '\\'' | '\\\\' ) + # C.g:598:40: ~ ( '\\'' | '\\\\' ) if (u'\u0000' <= self.input.LA(1) <= u'&') or (u'(' <= self.input.LA(1) <= u'[') or (u']' <= self.input.LA(1) <= u'\uFFFE'): self.input.consume(); @@ -2399,16 +2443,16 @@ class CLexer(Lexer): try: self.type = STRING_LITERAL - # C.g:549:5: ( ( 'L' )? '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' ) - # C.g:549:8: ( 'L' )? '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' - # C.g:549:8: ( 'L' )? + # C.g:602:5: ( ( 'L' )? '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' ) + # C.g:602:8: ( 'L' )? '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' + # C.g:602:8: ( 'L' )? alt4 = 2 LA4_0 = self.input.LA(1) if (LA4_0 == u'L') : alt4 = 1 if alt4 == 1: - # C.g:549:9: 'L' + # C.g:602:9: 'L' self.match(u'L') @@ -2416,7 +2460,7 @@ class CLexer(Lexer): self.match(u'"') - # C.g:549:19: ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* + # C.g:602:19: ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* while True: #loop5 alt5 = 3 LA5_0 = self.input.LA(1) @@ -2428,13 +2472,13 @@ class CLexer(Lexer): if alt5 == 1: - # C.g:549:21: EscapeSequence + # C.g:602:21: EscapeSequence self.mEscapeSequence() elif alt5 == 2: - # C.g:549:38: ~ ( '\\\\' | '\"' ) + # C.g:602:38: ~ ( '\\\\' | '\"' ) if (u'\u0000' <= self.input.LA(1) <= u'!') or (u'#' <= self.input.LA(1) <= u'[') or (u']' <= self.input.LA(1) <= u'\uFFFE'): self.input.consume(); @@ -2470,8 +2514,8 @@ class CLexer(Lexer): try: self.type = HEX_LITERAL - # C.g:552:13: ( '0' ( 'x' | 'X' ) ( HexDigit )+ ( IntegerTypeSuffix )? ) - # C.g:552:15: '0' ( 'x' | 'X' ) ( HexDigit )+ ( IntegerTypeSuffix )? + # C.g:605:13: ( '0' ( 'x' | 'X' ) ( HexDigit )+ ( IntegerTypeSuffix )? ) + # C.g:605:15: '0' ( 'x' | 'X' ) ( HexDigit )+ ( IntegerTypeSuffix )? self.match(u'0') if self.input.LA(1) == u'X' or self.input.LA(1) == u'x': @@ -2483,7 +2527,7 @@ class CLexer(Lexer): raise mse - # C.g:552:29: ( HexDigit )+ + # C.g:605:29: ( HexDigit )+ cnt6 = 0 while True: #loop6 alt6 = 2 @@ -2494,7 +2538,7 @@ class CLexer(Lexer): if alt6 == 1: - # C.g:552:29: HexDigit + # C.g:605:29: HexDigit self.mHexDigit() @@ -2509,14 +2553,14 @@ class CLexer(Lexer): cnt6 += 1 - # C.g:552:39: ( IntegerTypeSuffix )? + # C.g:605:39: ( IntegerTypeSuffix )? alt7 = 2 LA7_0 = self.input.LA(1) if (LA7_0 == u'L' or LA7_0 == u'U' or LA7_0 == u'l' or LA7_0 == u'u') : alt7 = 1 if alt7 == 1: - # C.g:552:39: IntegerTypeSuffix + # C.g:605:39: IntegerTypeSuffix self.mIntegerTypeSuffix() @@ -2540,9 +2584,9 @@ class CLexer(Lexer): try: self.type = DECIMAL_LITERAL - # C.g:554:17: ( ( '0' | '1' .. '9' ( '0' .. '9' )* ) ( IntegerTypeSuffix )? ) - # C.g:554:19: ( '0' | '1' .. '9' ( '0' .. '9' )* ) ( IntegerTypeSuffix )? - # C.g:554:19: ( '0' | '1' .. '9' ( '0' .. '9' )* ) + # C.g:607:17: ( ( '0' | '1' .. '9' ( '0' .. '9' )* ) ( IntegerTypeSuffix )? ) + # C.g:607:19: ( '0' | '1' .. '9' ( '0' .. '9' )* ) ( IntegerTypeSuffix )? + # C.g:607:19: ( '0' | '1' .. '9' ( '0' .. '9' )* ) alt9 = 2 LA9_0 = self.input.LA(1) @@ -2551,21 +2595,21 @@ class CLexer(Lexer): elif ((u'1' <= LA9_0 <= u'9')) : alt9 = 2 else: - nvae = NoViableAltException("554:19: ( '0' | '1' .. '9' ( '0' .. '9' )* )", 9, 0, self.input) + nvae = NoViableAltException("607:19: ( '0' | '1' .. '9' ( '0' .. '9' )* )", 9, 0, self.input) raise nvae if alt9 == 1: - # C.g:554:20: '0' + # C.g:607:20: '0' self.match(u'0') elif alt9 == 2: - # C.g:554:26: '1' .. '9' ( '0' .. '9' )* + # C.g:607:26: '1' .. '9' ( '0' .. '9' )* self.matchRange(u'1', u'9') - # C.g:554:35: ( '0' .. '9' )* + # C.g:607:35: ( '0' .. '9' )* while True: #loop8 alt8 = 2 LA8_0 = self.input.LA(1) @@ -2575,7 +2619,7 @@ class CLexer(Lexer): if alt8 == 1: - # C.g:554:35: '0' .. '9' + # C.g:607:35: '0' .. '9' self.matchRange(u'0', u'9') @@ -2587,14 +2631,14 @@ class CLexer(Lexer): - # C.g:554:46: ( IntegerTypeSuffix )? + # C.g:607:46: ( IntegerTypeSuffix )? alt10 = 2 LA10_0 = self.input.LA(1) if (LA10_0 == u'L' or LA10_0 == u'U' or LA10_0 == u'l' or LA10_0 == u'u') : alt10 = 1 if alt10 == 1: - # C.g:554:46: IntegerTypeSuffix + # C.g:607:46: IntegerTypeSuffix self.mIntegerTypeSuffix() @@ -2618,11 +2662,11 @@ class CLexer(Lexer): try: self.type = OCTAL_LITERAL - # C.g:556:15: ( '0' ( '0' .. '7' )+ ( IntegerTypeSuffix )? ) - # C.g:556:17: '0' ( '0' .. '7' )+ ( IntegerTypeSuffix )? + # C.g:609:15: ( '0' ( '0' .. '7' )+ ( IntegerTypeSuffix )? ) + # C.g:609:17: '0' ( '0' .. '7' )+ ( IntegerTypeSuffix )? self.match(u'0') - # C.g:556:21: ( '0' .. '7' )+ + # C.g:609:21: ( '0' .. '7' )+ cnt11 = 0 while True: #loop11 alt11 = 2 @@ -2633,7 +2677,7 @@ class CLexer(Lexer): if alt11 == 1: - # C.g:556:22: '0' .. '7' + # C.g:609:22: '0' .. '7' self.matchRange(u'0', u'7') @@ -2648,14 +2692,14 @@ class CLexer(Lexer): cnt11 += 1 - # C.g:556:33: ( IntegerTypeSuffix )? + # C.g:609:33: ( IntegerTypeSuffix )? alt12 = 2 LA12_0 = self.input.LA(1) if (LA12_0 == u'L' or LA12_0 == u'U' or LA12_0 == u'l' or LA12_0 == u'u') : alt12 = 1 if alt12 == 1: - # C.g:556:33: IntegerTypeSuffix + # C.g:609:33: IntegerTypeSuffix self.mIntegerTypeSuffix() @@ -2677,8 +2721,8 @@ class CLexer(Lexer): def mHexDigit(self, ): try: - # C.g:559:10: ( ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) ) - # C.g:559:12: ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) + # C.g:612:10: ( ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) ) + # C.g:612:12: ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) if (u'0' <= self.input.LA(1) <= u'9') or (u'A' <= self.input.LA(1) <= u'F') or (u'a' <= self.input.LA(1) <= u'f'): self.input.consume(); @@ -2704,7 +2748,7 @@ class CLexer(Lexer): def mIntegerTypeSuffix(self, ): try: - # C.g:563:2: ( ( 'u' | 'U' ) | ( 'l' | 'L' ) | ( 'u' | 'U' ) ( 'l' | 'L' ) | ( 'u' | 'U' ) ( 'l' | 'L' ) ( 'l' | 'L' ) ) + # C.g:616:2: ( ( 'u' | 'U' ) | ( 'l' | 'L' ) | ( 'u' | 'U' ) ( 'l' | 'L' ) | ( 'u' | 'U' ) ( 'l' | 'L' ) ( 'l' | 'L' ) ) alt13 = 4 LA13_0 = self.input.LA(1) @@ -2723,12 +2767,12 @@ class CLexer(Lexer): elif (LA13_0 == u'L' or LA13_0 == u'l') : alt13 = 2 else: - nvae = NoViableAltException("561:1: fragment IntegerTypeSuffix : ( ( 'u' | 'U' ) | ( 'l' | 'L' ) | ( 'u' | 'U' ) ( 'l' | 'L' ) | ( 'u' | 'U' ) ( 'l' | 'L' ) ( 'l' | 'L' ) );", 13, 0, self.input) + nvae = NoViableAltException("614:1: fragment IntegerTypeSuffix : ( ( 'u' | 'U' ) | ( 'l' | 'L' ) | ( 'u' | 'U' ) ( 'l' | 'L' ) | ( 'u' | 'U' ) ( 'l' | 'L' ) ( 'l' | 'L' ) );", 13, 0, self.input) raise nvae if alt13 == 1: - # C.g:563:4: ( 'u' | 'U' ) + # C.g:616:4: ( 'u' | 'U' ) if self.input.LA(1) == u'U' or self.input.LA(1) == u'u': self.input.consume(); @@ -2741,7 +2785,7 @@ class CLexer(Lexer): elif alt13 == 2: - # C.g:564:4: ( 'l' | 'L' ) + # C.g:617:4: ( 'l' | 'L' ) if self.input.LA(1) == u'L' or self.input.LA(1) == u'l': self.input.consume(); @@ -2754,7 +2798,7 @@ class CLexer(Lexer): elif alt13 == 3: - # C.g:565:4: ( 'u' | 'U' ) ( 'l' | 'L' ) + # C.g:618:4: ( 'u' | 'U' ) ( 'l' | 'L' ) if self.input.LA(1) == u'U' or self.input.LA(1) == u'u': self.input.consume(); @@ -2776,7 +2820,7 @@ class CLexer(Lexer): elif alt13 == 4: - # C.g:566:4: ( 'u' | 'U' ) ( 'l' | 'L' ) ( 'l' | 'L' ) + # C.g:619:4: ( 'u' | 'U' ) ( 'l' | 'L' ) ( 'l' | 'L' ) if self.input.LA(1) == u'U' or self.input.LA(1) == u'u': self.input.consume(); @@ -2821,12 +2865,12 @@ class CLexer(Lexer): try: self.type = FLOATING_POINT_LITERAL - # C.g:570:5: ( ( '0' .. '9' )+ '.' ( '0' .. '9' )* ( Exponent )? ( FloatTypeSuffix )? | '.' ( '0' .. '9' )+ ( Exponent )? ( FloatTypeSuffix )? | ( '0' .. '9' )+ Exponent ( FloatTypeSuffix )? | ( '0' .. '9' )+ ( Exponent )? FloatTypeSuffix ) + # C.g:623:5: ( ( '0' .. '9' )+ '.' ( '0' .. '9' )* ( Exponent )? ( FloatTypeSuffix )? | '.' ( '0' .. '9' )+ ( Exponent )? ( FloatTypeSuffix )? | ( '0' .. '9' )+ Exponent ( FloatTypeSuffix )? | ( '0' .. '9' )+ ( Exponent )? FloatTypeSuffix ) alt25 = 4 alt25 = self.dfa25.predict(self.input) if alt25 == 1: - # C.g:570:9: ( '0' .. '9' )+ '.' ( '0' .. '9' )* ( Exponent )? ( FloatTypeSuffix )? - # C.g:570:9: ( '0' .. '9' )+ + # C.g:623:9: ( '0' .. '9' )+ '.' ( '0' .. '9' )* ( Exponent )? ( FloatTypeSuffix )? + # C.g:623:9: ( '0' .. '9' )+ cnt14 = 0 while True: #loop14 alt14 = 2 @@ -2837,7 +2881,7 @@ class CLexer(Lexer): if alt14 == 1: - # C.g:570:10: '0' .. '9' + # C.g:623:10: '0' .. '9' self.matchRange(u'0', u'9') @@ -2854,7 +2898,7 @@ class CLexer(Lexer): self.match(u'.') - # C.g:570:25: ( '0' .. '9' )* + # C.g:623:25: ( '0' .. '9' )* while True: #loop15 alt15 = 2 LA15_0 = self.input.LA(1) @@ -2864,7 +2908,7 @@ class CLexer(Lexer): if alt15 == 1: - # C.g:570:26: '0' .. '9' + # C.g:623:26: '0' .. '9' self.matchRange(u'0', u'9') @@ -2873,27 +2917,27 @@ class CLexer(Lexer): break #loop15 - # C.g:570:37: ( Exponent )? + # C.g:623:37: ( Exponent )? alt16 = 2 LA16_0 = self.input.LA(1) if (LA16_0 == u'E' or LA16_0 == u'e') : alt16 = 1 if alt16 == 1: - # C.g:570:37: Exponent + # C.g:623:37: Exponent self.mExponent() - # C.g:570:47: ( FloatTypeSuffix )? + # C.g:623:47: ( FloatTypeSuffix )? alt17 = 2 LA17_0 = self.input.LA(1) if (LA17_0 == u'D' or LA17_0 == u'F' or LA17_0 == u'd' or LA17_0 == u'f') : alt17 = 1 if alt17 == 1: - # C.g:570:47: FloatTypeSuffix + # C.g:623:47: FloatTypeSuffix self.mFloatTypeSuffix() @@ -2902,10 +2946,10 @@ class CLexer(Lexer): elif alt25 == 2: - # C.g:571:9: '.' ( '0' .. '9' )+ ( Exponent )? ( FloatTypeSuffix )? + # C.g:624:9: '.' ( '0' .. '9' )+ ( Exponent )? ( FloatTypeSuffix )? self.match(u'.') - # C.g:571:13: ( '0' .. '9' )+ + # C.g:624:13: ( '0' .. '9' )+ cnt18 = 0 while True: #loop18 alt18 = 2 @@ -2916,7 +2960,7 @@ class CLexer(Lexer): if alt18 == 1: - # C.g:571:14: '0' .. '9' + # C.g:624:14: '0' .. '9' self.matchRange(u'0', u'9') @@ -2931,27 +2975,27 @@ class CLexer(Lexer): cnt18 += 1 - # C.g:571:25: ( Exponent )? + # C.g:624:25: ( Exponent )? alt19 = 2 LA19_0 = self.input.LA(1) if (LA19_0 == u'E' or LA19_0 == u'e') : alt19 = 1 if alt19 == 1: - # C.g:571:25: Exponent + # C.g:624:25: Exponent self.mExponent() - # C.g:571:35: ( FloatTypeSuffix )? + # C.g:624:35: ( FloatTypeSuffix )? alt20 = 2 LA20_0 = self.input.LA(1) if (LA20_0 == u'D' or LA20_0 == u'F' or LA20_0 == u'd' or LA20_0 == u'f') : alt20 = 1 if alt20 == 1: - # C.g:571:35: FloatTypeSuffix + # C.g:624:35: FloatTypeSuffix self.mFloatTypeSuffix() @@ -2960,8 +3004,8 @@ class CLexer(Lexer): elif alt25 == 3: - # C.g:572:9: ( '0' .. '9' )+ Exponent ( FloatTypeSuffix )? - # C.g:572:9: ( '0' .. '9' )+ + # C.g:625:9: ( '0' .. '9' )+ Exponent ( FloatTypeSuffix )? + # C.g:625:9: ( '0' .. '9' )+ cnt21 = 0 while True: #loop21 alt21 = 2 @@ -2972,7 +3016,7 @@ class CLexer(Lexer): if alt21 == 1: - # C.g:572:10: '0' .. '9' + # C.g:625:10: '0' .. '9' self.matchRange(u'0', u'9') @@ -2989,14 +3033,14 @@ class CLexer(Lexer): self.mExponent() - # C.g:572:30: ( FloatTypeSuffix )? + # C.g:625:30: ( FloatTypeSuffix )? alt22 = 2 LA22_0 = self.input.LA(1) if (LA22_0 == u'D' or LA22_0 == u'F' or LA22_0 == u'd' or LA22_0 == u'f') : alt22 = 1 if alt22 == 1: - # C.g:572:30: FloatTypeSuffix + # C.g:625:30: FloatTypeSuffix self.mFloatTypeSuffix() @@ -3005,8 +3049,8 @@ class CLexer(Lexer): elif alt25 == 4: - # C.g:573:9: ( '0' .. '9' )+ ( Exponent )? FloatTypeSuffix - # C.g:573:9: ( '0' .. '9' )+ + # C.g:626:9: ( '0' .. '9' )+ ( Exponent )? FloatTypeSuffix + # C.g:626:9: ( '0' .. '9' )+ cnt23 = 0 while True: #loop23 alt23 = 2 @@ -3017,7 +3061,7 @@ class CLexer(Lexer): if alt23 == 1: - # C.g:573:10: '0' .. '9' + # C.g:626:10: '0' .. '9' self.matchRange(u'0', u'9') @@ -3032,14 +3076,14 @@ class CLexer(Lexer): cnt23 += 1 - # C.g:573:21: ( Exponent )? + # C.g:626:21: ( Exponent )? alt24 = 2 LA24_0 = self.input.LA(1) if (LA24_0 == u'E' or LA24_0 == u'e') : alt24 = 1 if alt24 == 1: - # C.g:573:21: Exponent + # C.g:626:21: Exponent self.mExponent() @@ -3062,8 +3106,8 @@ class CLexer(Lexer): def mExponent(self, ): try: - # C.g:577:10: ( ( 'e' | 'E' ) ( '+' | '-' )? ( '0' .. '9' )+ ) - # C.g:577:12: ( 'e' | 'E' ) ( '+' | '-' )? ( '0' .. '9' )+ + # C.g:630:10: ( ( 'e' | 'E' ) ( '+' | '-' )? ( '0' .. '9' )+ ) + # C.g:630:12: ( 'e' | 'E' ) ( '+' | '-' )? ( '0' .. '9' )+ if self.input.LA(1) == u'E' or self.input.LA(1) == u'e': self.input.consume(); @@ -3073,7 +3117,7 @@ class CLexer(Lexer): raise mse - # C.g:577:22: ( '+' | '-' )? + # C.g:630:22: ( '+' | '-' )? alt26 = 2 LA26_0 = self.input.LA(1) @@ -3093,7 +3137,7 @@ class CLexer(Lexer): - # C.g:577:33: ( '0' .. '9' )+ + # C.g:630:33: ( '0' .. '9' )+ cnt27 = 0 while True: #loop27 alt27 = 2 @@ -3104,7 +3148,7 @@ class CLexer(Lexer): if alt27 == 1: - # C.g:577:34: '0' .. '9' + # C.g:630:34: '0' .. '9' self.matchRange(u'0', u'9') @@ -3135,8 +3179,8 @@ class CLexer(Lexer): def mFloatTypeSuffix(self, ): try: - # C.g:580:17: ( ( 'f' | 'F' | 'd' | 'D' ) ) - # C.g:580:19: ( 'f' | 'F' | 'd' | 'D' ) + # C.g:633:17: ( ( 'f' | 'F' | 'd' | 'D' ) ) + # C.g:633:19: ( 'f' | 'F' | 'd' | 'D' ) if self.input.LA(1) == u'D' or self.input.LA(1) == u'F' or self.input.LA(1) == u'd' or self.input.LA(1) == u'f': self.input.consume(); @@ -3162,7 +3206,7 @@ class CLexer(Lexer): def mEscapeSequence(self, ): try: - # C.g:584:5: ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' ) | OctalEscape ) + # C.g:637:5: ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' ) | OctalEscape ) alt28 = 2 LA28_0 = self.input.LA(1) @@ -3174,17 +3218,17 @@ class CLexer(Lexer): elif ((u'0' <= LA28_1 <= u'7')) : alt28 = 2 else: - nvae = NoViableAltException("582:1: fragment EscapeSequence : ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' ) | OctalEscape );", 28, 1, self.input) + nvae = NoViableAltException("635:1: fragment EscapeSequence : ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' ) | OctalEscape );", 28, 1, self.input) raise nvae else: - nvae = NoViableAltException("582:1: fragment EscapeSequence : ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' ) | OctalEscape );", 28, 0, self.input) + nvae = NoViableAltException("635:1: fragment EscapeSequence : ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' ) | OctalEscape );", 28, 0, self.input) raise nvae if alt28 == 1: - # C.g:584:8: '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' ) + # C.g:637:8: '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' ) self.match(u'\\') if self.input.LA(1) == u'"' or self.input.LA(1) == u'\'' or self.input.LA(1) == u'\\' or self.input.LA(1) == u'b' or self.input.LA(1) == u'f' or self.input.LA(1) == u'n' or self.input.LA(1) == u'r' or self.input.LA(1) == u't': @@ -3199,7 +3243,7 @@ class CLexer(Lexer): elif alt28 == 2: - # C.g:585:9: OctalEscape + # C.g:638:9: OctalEscape self.mOctalEscape() @@ -3217,7 +3261,7 @@ class CLexer(Lexer): def mOctalEscape(self, ): try: - # C.g:590:5: ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ) + # C.g:643:5: ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ) alt29 = 3 LA29_0 = self.input.LA(1) @@ -3244,35 +3288,35 @@ class CLexer(Lexer): else: alt29 = 3 else: - nvae = NoViableAltException("588:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 29, 1, self.input) + nvae = NoViableAltException("641:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 29, 1, self.input) raise nvae else: - nvae = NoViableAltException("588:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 29, 0, self.input) + nvae = NoViableAltException("641:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 29, 0, self.input) raise nvae if alt29 == 1: - # C.g:590:9: '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) + # C.g:643:9: '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) self.match(u'\\') - # C.g:590:14: ( '0' .. '3' ) - # C.g:590:15: '0' .. '3' + # C.g:643:14: ( '0' .. '3' ) + # C.g:643:15: '0' .. '3' self.matchRange(u'0', u'3') - # C.g:590:25: ( '0' .. '7' ) - # C.g:590:26: '0' .. '7' + # C.g:643:25: ( '0' .. '7' ) + # C.g:643:26: '0' .. '7' self.matchRange(u'0', u'7') - # C.g:590:36: ( '0' .. '7' ) - # C.g:590:37: '0' .. '7' + # C.g:643:36: ( '0' .. '7' ) + # C.g:643:37: '0' .. '7' self.matchRange(u'0', u'7') @@ -3281,18 +3325,18 @@ class CLexer(Lexer): elif alt29 == 2: - # C.g:591:9: '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) + # C.g:644:9: '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) self.match(u'\\') - # C.g:591:14: ( '0' .. '7' ) - # C.g:591:15: '0' .. '7' + # C.g:644:14: ( '0' .. '7' ) + # C.g:644:15: '0' .. '7' self.matchRange(u'0', u'7') - # C.g:591:25: ( '0' .. '7' ) - # C.g:591:26: '0' .. '7' + # C.g:644:25: ( '0' .. '7' ) + # C.g:644:26: '0' .. '7' self.matchRange(u'0', u'7') @@ -3301,11 +3345,11 @@ class CLexer(Lexer): elif alt29 == 3: - # C.g:592:9: '\\\\' ( '0' .. '7' ) + # C.g:645:9: '\\\\' ( '0' .. '7' ) self.match(u'\\') - # C.g:592:14: ( '0' .. '7' ) - # C.g:592:15: '0' .. '7' + # C.g:645:14: ( '0' .. '7' ) + # C.g:645:15: '0' .. '7' self.matchRange(u'0', u'7') @@ -3326,8 +3370,8 @@ class CLexer(Lexer): def mUnicodeEscape(self, ): try: - # C.g:597:5: ( '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit ) - # C.g:597:9: '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit + # C.g:650:5: ( '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit ) + # C.g:650:9: '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit self.match(u'\\') self.match(u'u') @@ -3358,8 +3402,8 @@ class CLexer(Lexer): try: self.type = WS - # C.g:600:5: ( ( ' ' | '\\r' | '\\t' | '\\u000C' | '\\n' ) ) - # C.g:600:8: ( ' ' | '\\r' | '\\t' | '\\u000C' | '\\n' ) + # C.g:653:5: ( ( ' ' | '\\r' | '\\t' | '\\u000C' | '\\n' ) ) + # C.g:653:8: ( ' ' | '\\r' | '\\t' | '\\u000C' | '\\n' ) if (u'\t' <= self.input.LA(1) <= u'\n') or (u'\f' <= self.input.LA(1) <= u'\r') or self.input.LA(1) == u' ': self.input.consume(); @@ -3390,10 +3434,10 @@ class CLexer(Lexer): try: self.type = BS - # C.g:604:5: ( ( '\\\\' ) ) - # C.g:604:7: ( '\\\\' ) - # C.g:604:7: ( '\\\\' ) - # C.g:604:8: '\\\\' + # C.g:657:5: ( ( '\\\\' ) ) + # C.g:657:7: ( '\\\\' ) + # C.g:657:7: ( '\\\\' ) + # C.g:657:8: '\\\\' self.match(u'\\') @@ -3420,8 +3464,8 @@ class CLexer(Lexer): try: self.type = UnicodeVocabulary - # C.g:612:5: ( '\\u0003' .. '\\uFFFE' ) - # C.g:612:7: '\\u0003' .. '\\uFFFE' + # C.g:665:5: ( '\\u0003' .. '\\uFFFE' ) + # C.g:665:7: '\\u0003' .. '\\uFFFE' self.matchRange(u'\u0003', u'\uFFFE') @@ -3442,12 +3486,12 @@ class CLexer(Lexer): try: self.type = COMMENT - # C.g:615:5: ( '/*' ( options {greedy=false; } : . )* '*/' ) - # C.g:615:9: '/*' ( options {greedy=false; } : . )* '*/' + # C.g:668:5: ( '/*' ( options {greedy=false; } : . )* '*/' ) + # C.g:668:9: '/*' ( options {greedy=false; } : . )* '*/' self.match("/*") - # C.g:615:14: ( options {greedy=false; } : . )* + # C.g:668:14: ( options {greedy=false; } : . )* while True: #loop30 alt30 = 2 LA30_0 = self.input.LA(1) @@ -3466,7 +3510,7 @@ class CLexer(Lexer): if alt30 == 1: - # C.g:615:42: . + # C.g:668:42: . self.matchAny() @@ -3499,12 +3543,12 @@ class CLexer(Lexer): try: self.type = LINE_COMMENT - # C.g:620:5: ( '//' (~ ( '\\n' | '\\r' ) )* ( '\\r' )? '\\n' ) - # C.g:620:7: '//' (~ ( '\\n' | '\\r' ) )* ( '\\r' )? '\\n' + # C.g:673:5: ( '//' (~ ( '\\n' | '\\r' ) )* ( '\\r' )? '\\n' ) + # C.g:673:7: '//' (~ ( '\\n' | '\\r' ) )* ( '\\r' )? '\\n' self.match("//") - # C.g:620:12: (~ ( '\\n' | '\\r' ) )* + # C.g:673:12: (~ ( '\\n' | '\\r' ) )* while True: #loop31 alt31 = 2 LA31_0 = self.input.LA(1) @@ -3514,7 +3558,7 @@ class CLexer(Lexer): if alt31 == 1: - # C.g:620:12: ~ ( '\\n' | '\\r' ) + # C.g:673:12: ~ ( '\\n' | '\\r' ) if (u'\u0000' <= self.input.LA(1) <= u'\t') or (u'\u000B' <= self.input.LA(1) <= u'\f') or (u'\u000E' <= self.input.LA(1) <= u'\uFFFE'): self.input.consume(); @@ -3530,14 +3574,14 @@ class CLexer(Lexer): break #loop31 - # C.g:620:26: ( '\\r' )? + # C.g:673:26: ( '\\r' )? alt32 = 2 LA32_0 = self.input.LA(1) if (LA32_0 == u'\r') : alt32 = 1 if alt32 == 1: - # C.g:620:26: '\\r' + # C.g:673:26: '\\r' self.match(u'\r') @@ -3566,11 +3610,11 @@ class CLexer(Lexer): try: self.type = LINE_COMMAND - # C.g:625:5: ( '#' (~ ( '\\n' | '\\r' ) )* ( '\\r' )? '\\n' ) - # C.g:625:7: '#' (~ ( '\\n' | '\\r' ) )* ( '\\r' )? '\\n' + # C.g:678:5: ( '#' (~ ( '\\n' | '\\r' ) )* ( '\\r' )? '\\n' ) + # C.g:678:7: '#' (~ ( '\\n' | '\\r' ) )* ( '\\r' )? '\\n' self.match(u'#') - # C.g:625:11: (~ ( '\\n' | '\\r' ) )* + # C.g:678:11: (~ ( '\\n' | '\\r' ) )* while True: #loop33 alt33 = 2 LA33_0 = self.input.LA(1) @@ -3580,7 +3624,7 @@ class CLexer(Lexer): if alt33 == 1: - # C.g:625:11: ~ ( '\\n' | '\\r' ) + # C.g:678:11: ~ ( '\\n' | '\\r' ) if (u'\u0000' <= self.input.LA(1) <= u'\t') or (u'\u000B' <= self.input.LA(1) <= u'\f') or (u'\u000E' <= self.input.LA(1) <= u'\uFFFE'): self.input.consume(); @@ -3596,14 +3640,14 @@ class CLexer(Lexer): break #loop33 - # C.g:625:25: ( '\\r' )? + # C.g:678:25: ( '\\r' )? alt34 = 2 LA34_0 = self.input.LA(1) if (LA34_0 == u'\r') : alt34 = 1 if alt34 == 1: - # C.g:625:25: '\\r' + # C.g:678:25: '\\r' self.match(u'\r') @@ -3627,8 +3671,8 @@ class CLexer(Lexer): def mTokens(self): - # C.g:1:8: ( T25 | T26 | T27 | T28 | T29 | T30 | T31 | T32 | T33 | T34 | T35 | T36 | T37 | T38 | T39 | T40 | T41 | T42 | T43 | T44 | T45 | T46 | T47 | T48 | T49 | T50 | T51 | T52 | T53 | T54 | T55 | T56 | T57 | T58 | T59 | T60 | T61 | T62 | T63 | T64 | T65 | T66 | T67 | T68 | T69 | T70 | T71 | T72 | T73 | T74 | T75 | T76 | T77 | T78 | T79 | T80 | T81 | T82 | T83 | T84 | T85 | T86 | T87 | T88 | T89 | T90 | T91 | T92 | T93 | T94 | T95 | T96 | T97 | T98 | T99 | T100 | T101 | T102 | T103 | T104 | T105 | T106 | T107 | T108 | T109 | T110 | T111 | T112 | T113 | T114 | T115 | T116 | IDENTIFIER | CHARACTER_LITERAL | STRING_LITERAL | HEX_LITERAL | DECIMAL_LITERAL | OCTAL_LITERAL | FLOATING_POINT_LITERAL | WS | BS | UnicodeVocabulary | COMMENT | LINE_COMMENT | LINE_COMMAND ) - alt35 = 105 + # C.g:1:8: ( T25 | T26 | T27 | T28 | T29 | T30 | T31 | T32 | T33 | T34 | T35 | T36 | T37 | T38 | T39 | T40 | T41 | T42 | T43 | T44 | T45 | T46 | T47 | T48 | T49 | T50 | T51 | T52 | T53 | T54 | T55 | T56 | T57 | T58 | T59 | T60 | T61 | T62 | T63 | T64 | T65 | T66 | T67 | T68 | T69 | T70 | T71 | T72 | T73 | T74 | T75 | T76 | T77 | T78 | T79 | T80 | T81 | T82 | T83 | T84 | T85 | T86 | T87 | T88 | T89 | T90 | T91 | T92 | T93 | T94 | T95 | T96 | T97 | T98 | T99 | T100 | T101 | T102 | T103 | T104 | T105 | T106 | T107 | T108 | T109 | T110 | T111 | T112 | T113 | T114 | T115 | T116 | T117 | IDENTIFIER | CHARACTER_LITERAL | STRING_LITERAL | HEX_LITERAL | DECIMAL_LITERAL | OCTAL_LITERAL | FLOATING_POINT_LITERAL | WS | BS | UnicodeVocabulary | COMMENT | LINE_COMMENT | LINE_COMMAND ) + alt35 = 106 alt35 = self.dfa35.predict(self.input) if alt35 == 1: # C.g:1:10: T25 @@ -4183,79 +4227,85 @@ class CLexer(Lexer): elif alt35 == 93: - # C.g:1:395: IDENTIFIER - self.mIDENTIFIER() + # C.g:1:395: T117 + self.mT117() elif alt35 == 94: - # C.g:1:406: CHARACTER_LITERAL - self.mCHARACTER_LITERAL() + # C.g:1:400: IDENTIFIER + self.mIDENTIFIER() elif alt35 == 95: - # C.g:1:424: STRING_LITERAL - self.mSTRING_LITERAL() + # C.g:1:411: CHARACTER_LITERAL + self.mCHARACTER_LITERAL() elif alt35 == 96: - # C.g:1:439: HEX_LITERAL - self.mHEX_LITERAL() + # C.g:1:429: STRING_LITERAL + self.mSTRING_LITERAL() elif alt35 == 97: - # C.g:1:451: DECIMAL_LITERAL - self.mDECIMAL_LITERAL() + # C.g:1:444: HEX_LITERAL + self.mHEX_LITERAL() elif alt35 == 98: - # C.g:1:467: OCTAL_LITERAL - self.mOCTAL_LITERAL() + # C.g:1:456: DECIMAL_LITERAL + self.mDECIMAL_LITERAL() elif alt35 == 99: - # C.g:1:481: FLOATING_POINT_LITERAL - self.mFLOATING_POINT_LITERAL() + # C.g:1:472: OCTAL_LITERAL + self.mOCTAL_LITERAL() elif alt35 == 100: - # C.g:1:504: WS - self.mWS() + # C.g:1:486: FLOATING_POINT_LITERAL + self.mFLOATING_POINT_LITERAL() elif alt35 == 101: - # C.g:1:507: BS - self.mBS() + # C.g:1:509: WS + self.mWS() elif alt35 == 102: - # C.g:1:510: UnicodeVocabulary - self.mUnicodeVocabulary() + # C.g:1:512: BS + self.mBS() elif alt35 == 103: - # C.g:1:528: COMMENT - self.mCOMMENT() + # C.g:1:515: UnicodeVocabulary + self.mUnicodeVocabulary() elif alt35 == 104: - # C.g:1:536: LINE_COMMENT - self.mLINE_COMMENT() + # C.g:1:533: COMMENT + self.mCOMMENT() elif alt35 == 105: - # C.g:1:549: LINE_COMMAND + # C.g:1:541: LINE_COMMENT + self.mLINE_COMMENT() + + + + elif alt35 == 106: + # C.g:1:554: LINE_COMMAND self.mLINE_COMMAND() @@ -4276,15 +4326,15 @@ class CLexer(Lexer): ) DFA25_min = DFA.unpack( - u"\2\56\1\uffff\1\53\2\uffff\2\60\2\uffff" + u"\2\56\2\uffff\1\53\1\uffff\2\60\2\uffff" ) DFA25_max = DFA.unpack( - u"\1\71\1\146\1\uffff\1\71\2\uffff\1\71\1\146\2\uffff" + u"\1\71\1\146\2\uffff\1\71\1\uffff\1\71\1\146\2\uffff" ) DFA25_accept = DFA.unpack( - u"\2\uffff\1\2\1\uffff\1\4\1\1\2\uffff\2\3" + u"\2\uffff\1\2\1\1\1\uffff\1\4\2\uffff\2\3" ) DFA25_special = DFA.unpack( @@ -4294,11 +4344,11 @@ class CLexer(Lexer): DFA25_transition = [ DFA.unpack(u"\1\2\1\uffff\12\1"), - DFA.unpack(u"\1\5\1\uffff\12\1\12\uffff\1\4\1\3\1\4\35\uffff\1\4" - u"\1\3\1\4"), + DFA.unpack(u"\1\3\1\uffff\12\1\12\uffff\1\5\1\4\1\5\35\uffff\1\5" + u"\1\4\1\5"), DFA.unpack(u""), - DFA.unpack(u"\1\6\1\uffff\1\6\2\uffff\12\7"), DFA.unpack(u""), + DFA.unpack(u"\1\6\1\uffff\1\6\2\uffff\12\7"), DFA.unpack(u""), DFA.unpack(u"\12\7"), DFA.unpack(u"\12\7\12\uffff\1\11\1\uffff\1\11\35\uffff\1\11\1\uffff" @@ -4313,230 +4363,234 @@ class CLexer(Lexer): # lookup tables for DFA #35 DFA35_eot = DFA.unpack( - u"\2\uffff\1\75\1\uffff\1\100\14\75\3\uffff\7\75\4\uffff\1\147\1" - u"\151\1\155\1\161\1\165\1\167\1\172\1\uffff\1\175\1\u0080\1\u0083" - u"\1\u0085\1\u0088\1\uffff\5\75\1\uffff\2\72\2\u0092\2\uffff\1\72" - u"\2\uffff\1\75\4\uffff\16\75\1\u00ab\4\75\1\u00b1\2\75\3\uffff\1" - u"\u00b5\7\75\35\uffff\1\u00be\1\uffff\1\u00c0\10\uffff\5\75\4\uffff" - u"\1\u00c6\1\u0092\3\uffff\23\75\1\uffff\1\u00db\1\75\1\u00dd\2\75" - u"\1\uffff\3\75\1\uffff\1\u00e3\6\75\4\uffff\5\75\1\uffff\1\75\1" - u"\u00f1\1\u00f2\7\75\1\u00fa\3\75\1\u00fe\3\75\1\u0102\1\u0103\1" - u"\uffff\1\u0104\1\uffff\5\75\1\uffff\10\75\1\u0113\1\75\1\u0115" - u"\2\75\2\uffff\6\75\1\u011e\1\uffff\3\75\1\uffff\2\75\1\u0124\3" - u"\uffff\1\u0125\3\75\1\u0129\1\75\1\u012b\6\75\1\u0133\1\uffff\1" - u"\u0134\1\uffff\1\u0135\1\75\1\u0137\1\u0138\1\u0139\1\u013a\1\u013b" - u"\1\u013c\1\uffff\1\75\1\u013e\1\u013f\2\75\2\uffff\1\u0142\2\75" - u"\1\uffff\1\75\1\uffff\5\75\1\u014b\1\75\3\uffff\1\u014d\6\uffff" - u"\1\75\2\uffff\2\75\1\uffff\1\u0151\7\75\1\uffff\1\u0159\1\uffff" - u"\1\u015a\1\u015b\1\u015c\1\uffff\1\u015d\1\u015e\1\75\1\u0160\3" - u"\75\6\uffff\1\u0164\1\uffff\3\75\1\uffff\20\75\1\u0178\2\75\1\uffff" - u"\4\75\1\u017f\1\75\1\uffff\11\75\1\u018a\1\uffff" + u"\2\uffff\1\76\1\uffff\1\101\14\76\3\uffff\10\76\4\uffff\1\151\1" + u"\153\1\157\1\163\1\167\1\171\1\174\1\uffff\1\177\1\u0082\1\u0085" + u"\1\u0087\1\u008a\1\uffff\5\76\1\uffff\2\73\2\u0095\2\uffff\1\73" + u"\2\uffff\1\76\4\uffff\16\76\1\u00ad\5\76\1\u00b4\1\76\3\uffff\1" + u"\u00b7\10\76\34\uffff\1\u00c1\2\uffff\1\u00c3\10\uffff\5\76\3\uffff" + u"\1\u00c9\1\uffff\1\u0095\3\uffff\23\76\1\uffff\1\u00de\1\76\1\u00e0" + u"\3\76\1\uffff\2\76\1\uffff\1\76\1\u00e7\6\76\4\uffff\5\76\1\uffff" + u"\1\76\1\u00f5\1\76\1\u00f7\6\76\1\u00fe\4\76\1\u0103\1\u0104\2" + u"\76\1\u0107\1\uffff\1\u0108\1\uffff\6\76\1\uffff\10\76\1\u0118" + u"\1\76\1\u011a\2\76\1\uffff\1\76\1\uffff\5\76\1\u0123\1\uffff\4" + u"\76\2\uffff\1\76\1\u0129\2\uffff\1\u012a\3\76\1\u012e\1\76\1\u0130" + u"\7\76\1\u0139\1\uffff\1\u013a\1\uffff\1\u013b\1\76\1\u013d\1\u013e" + u"\1\u013f\1\u0140\1\u0141\1\u0142\1\uffff\1\76\1\u0144\1\u0145\2" + u"\76\2\uffff\1\76\1\u0149\1\76\1\uffff\1\76\1\uffff\5\76\1\u0151" + u"\1\u0152\1\76\3\uffff\1\u0154\6\uffff\1\76\2\uffff\2\76\1\u0158" + u"\1\uffff\7\76\2\uffff\1\u0160\1\uffff\1\u0161\1\u0162\1\u0163\1" + u"\uffff\1\u0164\1\u0165\1\76\1\u0167\3\76\6\uffff\1\u016b\1\uffff" + u"\3\76\1\uffff\21\76\1\u0180\2\76\1\uffff\3\76\1\u0186\1\76\1\uffff" + u"\11\76\1\u0191\1\uffff" ) DFA35_eof = DFA.unpack( - u"\u018b\uffff" + u"\u0192\uffff" ) DFA35_min = DFA.unpack( u"\1\3\1\uffff\1\171\1\uffff\1\75\1\154\1\150\1\165\1\145\1\124\1" u"\157\1\141\1\146\1\157\1\154\1\145\1\156\3\uffff\1\116\1\120\1" - u"\117\1\116\1\117\1\114\1\106\4\uffff\1\75\1\56\1\53\1\55\1\52\1" - u"\75\1\46\1\uffff\1\75\1\74\3\75\1\uffff\1\137\1\150\1\157\1\162" - u"\1\42\1\uffff\2\0\2\56\2\uffff\1\0\2\uffff\1\160\4\uffff\1\165" - u"\1\163\1\164\1\141\1\151\1\147\1\157\1\164\1\147\1\101\1\151\1" - u"\156\1\163\1\141\1\44\1\164\1\156\1\162\1\157\1\44\1\146\1\151" - u"\3\uffff\1\44\2\124\1\116\1\101\1\114\1\117\1\111\35\uffff\1\75" - u"\1\uffff\1\75\10\uffff\1\141\1\163\1\151\1\164\1\145\4\uffff\2" - u"\56\3\uffff\1\145\1\155\2\145\1\165\2\164\1\156\1\145\1\162\1\157" - u"\1\151\1\165\1\124\1\144\1\141\1\163\1\145\1\162\1\uffff\1\44\1" - u"\147\1\44\1\141\1\142\1\uffff\1\141\1\151\1\157\1\uffff\1\44\1" - u"\111\1\123\1\114\1\101\1\102\1\101\4\uffff\1\163\1\155\1\154\1" - u"\157\1\141\1\uffff\1\144\2\44\1\162\1\143\1\151\1\143\1\145\1\157" - u"\1\164\1\44\1\163\1\162\1\111\1\44\1\164\1\151\1\164\2\44\1\uffff" - u"\1\44\1\uffff\1\164\1\154\1\165\1\147\1\156\1\uffff\1\117\1\124" - u"\1\111\1\124\1\101\1\102\1\120\1\155\1\44\1\145\1\44\1\153\1\145" - u"\2\uffff\1\156\1\164\1\143\1\150\1\144\1\146\1\44\1\uffff\1\164" - u"\1\156\1\103\1\uffff\1\151\1\156\1\44\3\uffff\1\44\1\145\1\154" - u"\1\156\1\44\1\116\1\44\1\107\1\111\1\114\1\117\1\125\1\111\1\44" - u"\1\uffff\1\44\1\uffff\1\44\1\146\6\44\1\uffff\1\145\2\44\1\154" - u"\1\165\2\uffff\1\44\1\164\1\145\1\uffff\1\101\1\uffff\1\116\1\114" - u"\1\137\1\117\1\116\1\44\1\137\3\uffff\1\44\6\uffff\1\162\2\uffff" - u"\2\145\1\uffff\1\44\1\144\1\114\2\105\1\122\2\124\1\uffff\1\44" - u"\1\uffff\3\44\1\uffff\2\44\1\104\1\44\1\105\1\123\1\111\6\uffff" - u"\1\44\1\uffff\1\115\1\105\1\115\1\uffff\1\117\1\122\1\105\2\126" - u"\1\123\1\105\1\111\1\105\1\137\1\103\1\122\1\111\1\105\1\126\1" - u"\106\1\44\1\111\1\137\1\uffff\1\103\1\125\1\105\1\116\1\44\1\122" - u"\1\uffff\1\105\1\106\1\105\1\122\1\105\1\116\1\103\1\105\1\104" - u"\1\44\1\uffff" + u"\117\1\116\1\117\1\114\1\106\1\101\4\uffff\1\75\1\56\1\53\1\55" + u"\1\52\1\75\1\46\1\uffff\1\75\1\74\3\75\1\uffff\1\137\1\150\1\157" + u"\1\162\1\42\1\uffff\2\0\2\56\2\uffff\1\0\2\uffff\1\160\4\uffff" + u"\1\163\1\164\1\165\1\151\1\141\1\147\1\157\1\164\1\147\1\101\1" + u"\151\1\163\1\156\1\141\1\44\1\164\1\156\1\162\1\157\1\146\1\44" + u"\1\151\3\uffff\1\44\2\124\1\116\1\101\1\114\1\117\1\111\1\103\34" + u"\uffff\1\75\2\uffff\1\75\10\uffff\1\141\1\163\1\151\1\164\1\145" + u"\3\uffff\1\56\1\uffff\1\56\3\uffff\3\145\1\155\2\164\1\165\1\145" + u"\1\156\1\162\1\157\1\151\1\165\1\124\1\141\1\144\1\145\1\163\1" + u"\162\1\uffff\1\44\1\147\1\44\2\141\1\142\1\uffff\1\151\1\157\1" + u"\uffff\1\111\1\44\1\123\1\114\1\101\1\102\1\101\1\113\4\uffff\1" + u"\163\1\155\1\154\1\157\1\141\1\uffff\1\144\1\44\1\162\1\44\1\143" + u"\1\151\1\143\1\157\1\145\1\164\1\44\1\163\1\162\1\111\1\164\2\44" + u"\1\151\1\164\1\44\1\uffff\1\44\1\uffff\1\164\1\165\1\154\1\147" + u"\1\156\1\117\1\uffff\1\124\1\111\1\124\1\101\1\102\1\120\1\105" + u"\1\155\1\44\1\145\1\44\1\153\1\145\1\uffff\1\156\1\uffff\1\150" + u"\1\143\1\164\1\146\1\144\1\44\1\uffff\1\164\1\156\1\103\1\151\2" + u"\uffff\1\156\1\44\2\uffff\1\44\1\154\1\145\1\156\1\44\1\116\1\44" + u"\1\107\1\111\1\114\1\125\1\117\1\111\1\104\1\44\1\uffff\1\44\1" + u"\uffff\1\44\1\146\6\44\1\uffff\1\145\2\44\1\154\1\165\2\uffff\1" + u"\164\1\44\1\145\1\uffff\1\101\1\uffff\1\116\1\114\1\137\1\116\1" + u"\117\2\44\1\137\3\uffff\1\44\6\uffff\1\162\2\uffff\2\145\1\44\1" + u"\uffff\1\144\1\114\2\105\1\122\2\124\2\uffff\1\44\1\uffff\3\44" + u"\1\uffff\2\44\1\104\1\44\1\105\1\111\1\123\6\uffff\1\44\1\uffff" + u"\2\115\1\105\1\uffff\1\117\1\105\1\122\1\126\1\123\1\126\2\105" + u"\1\111\1\137\1\122\1\103\1\111\1\126\1\105\1\106\1\111\1\44\1\137" + u"\1\103\1\uffff\1\125\1\105\1\116\1\44\1\122\1\uffff\1\105\1\106" + u"\1\105\1\122\1\105\1\116\1\103\1\105\1\104\1\44\1\uffff" ) DFA35_max = DFA.unpack( u"\1\ufffe\1\uffff\1\171\1\uffff\1\75\1\170\1\167\1\165\1\145\1\124" u"\2\157\1\156\3\157\1\156\3\uffff\1\116\1\125\1\117\1\116\1\117" - u"\1\114\1\106\4\uffff\1\75\1\71\1\75\1\76\3\75\1\uffff\2\75\1\76" - u"\1\75\1\174\1\uffff\1\141\1\150\1\157\1\162\1\47\1\uffff\2\ufffe" - u"\1\170\1\146\2\uffff\1\ufffe\2\uffff\1\160\4\uffff\1\165\1\163" - u"\1\164\1\162\1\151\1\172\1\157\2\164\1\101\1\154\1\156\1\163\1" - u"\141\1\172\1\164\1\156\1\162\1\157\1\172\1\146\1\163\3\uffff\1" - u"\172\2\124\1\116\1\101\1\114\1\117\1\111\35\uffff\1\75\1\uffff" - u"\1\75\10\uffff\1\141\1\163\1\151\1\164\1\145\4\uffff\2\146\3\uffff" - u"\1\145\1\155\2\145\1\165\2\164\1\156\1\145\1\162\1\157\1\151\1" - u"\165\1\124\1\144\1\141\1\164\1\145\1\162\1\uffff\1\172\1\147\1" - u"\172\1\141\1\142\1\uffff\1\141\1\151\1\157\1\uffff\1\172\1\111" - u"\1\123\1\114\1\101\1\102\1\137\4\uffff\1\163\1\155\1\154\1\157" - u"\1\141\1\uffff\1\144\2\172\1\162\1\143\1\151\1\143\1\145\1\157" - u"\1\164\1\172\1\163\1\162\1\111\1\172\1\164\1\151\1\164\2\172\1" - u"\uffff\1\172\1\uffff\1\164\1\154\1\165\1\147\1\156\1\uffff\1\117" - u"\1\124\1\111\1\124\1\101\1\122\1\120\1\155\1\172\1\145\1\172\1" - u"\153\1\145\2\uffff\1\156\1\164\1\143\1\150\1\144\1\146\1\172\1" - u"\uffff\1\164\1\156\1\103\1\uffff\1\151\1\156\1\172\3\uffff\1\172" - u"\1\145\1\154\1\156\1\172\1\116\1\172\1\107\1\111\1\114\1\117\1" - u"\125\1\111\1\172\1\uffff\1\172\1\uffff\1\172\1\146\6\172\1\uffff" - u"\1\145\2\172\1\154\1\165\2\uffff\1\172\1\164\1\145\1\uffff\1\101" - u"\1\uffff\1\116\1\114\1\137\1\117\1\116\1\172\1\137\3\uffff\1\172" - u"\6\uffff\1\162\2\uffff\2\145\1\uffff\1\172\1\144\1\114\2\105\1" - u"\122\2\124\1\uffff\1\172\1\uffff\3\172\1\uffff\2\172\1\104\1\172" - u"\1\105\1\123\1\111\6\uffff\1\172\1\uffff\1\115\1\105\1\115\1\uffff" - u"\1\117\1\122\1\105\2\126\1\123\1\105\1\111\1\105\1\137\1\103\1" - u"\122\1\111\1\105\1\126\1\106\1\172\1\111\1\137\1\uffff\1\103\1" - u"\125\1\105\1\116\1\172\1\122\1\uffff\1\105\1\106\1\105\1\122\1" - u"\105\1\116\1\103\1\105\1\104\1\172\1\uffff" + u"\1\114\1\106\1\101\4\uffff\1\75\1\71\1\75\1\76\3\75\1\uffff\2\75" + u"\1\76\1\75\1\174\1\uffff\1\141\1\150\1\157\1\162\1\47\1\uffff\2" + u"\ufffe\1\170\1\146\2\uffff\1\ufffe\2\uffff\1\160\4\uffff\1\163" + u"\1\164\1\165\1\151\1\162\1\172\1\157\2\164\1\101\1\154\1\163\1" + u"\156\1\141\1\172\1\164\1\156\1\162\1\157\1\146\1\172\1\163\3\uffff" + u"\1\172\2\124\1\116\1\101\1\114\1\117\1\111\1\103\34\uffff\1\75" + u"\2\uffff\1\75\10\uffff\1\141\1\163\1\151\1\164\1\145\3\uffff\1" + u"\146\1\uffff\1\146\3\uffff\3\145\1\155\2\164\1\165\1\145\1\156" + u"\1\162\1\157\1\151\1\165\1\124\1\141\1\144\1\145\1\164\1\162\1" + u"\uffff\1\172\1\147\1\172\2\141\1\142\1\uffff\1\151\1\157\1\uffff" + u"\1\111\1\172\1\123\1\114\1\101\1\102\1\137\1\113\4\uffff\1\163" + u"\1\155\1\154\1\157\1\141\1\uffff\1\144\1\172\1\162\1\172\1\143" + u"\1\151\1\143\1\157\1\145\1\164\1\172\1\163\1\162\1\111\1\164\2" + u"\172\1\151\1\164\1\172\1\uffff\1\172\1\uffff\1\164\1\165\1\154" + u"\1\147\1\156\1\117\1\uffff\1\124\1\111\1\124\1\101\1\122\1\120" + u"\1\105\1\155\1\172\1\145\1\172\1\153\1\145\1\uffff\1\156\1\uffff" + u"\1\150\1\143\1\164\1\146\1\144\1\172\1\uffff\1\164\1\156\1\103" + u"\1\151\2\uffff\1\156\1\172\2\uffff\1\172\1\154\1\145\1\156\1\172" + u"\1\116\1\172\1\107\1\111\1\114\1\125\1\117\1\111\1\104\1\172\1" + u"\uffff\1\172\1\uffff\1\172\1\146\6\172\1\uffff\1\145\2\172\1\154" + u"\1\165\2\uffff\1\164\1\172\1\145\1\uffff\1\101\1\uffff\1\116\1" + u"\114\1\137\1\116\1\117\2\172\1\137\3\uffff\1\172\6\uffff\1\162" + u"\2\uffff\2\145\1\172\1\uffff\1\144\1\114\2\105\1\122\2\124\2\uffff" + u"\1\172\1\uffff\3\172\1\uffff\2\172\1\104\1\172\1\105\1\111\1\123" + u"\6\uffff\1\172\1\uffff\2\115\1\105\1\uffff\1\117\1\105\1\122\1" + u"\126\1\123\1\126\2\105\1\111\1\137\1\122\1\103\1\111\1\126\1\105" + u"\1\106\1\111\1\172\1\137\1\103\1\uffff\1\125\1\105\1\116\1\172" + u"\1\122\1\uffff\1\105\1\106\1\105\1\122\1\105\1\116\1\103\1\105" + u"\1\104\1\172\1\uffff" ) DFA35_accept = DFA.unpack( - u"\1\uffff\1\1\1\uffff\1\3\15\uffff\1\23\1\24\1\27\7\uffff\1\45\1" - u"\46\1\47\1\50\7\uffff\1\65\5\uffff\1\101\5\uffff\1\135\4\uffff" - u"\1\144\1\145\1\uffff\1\146\1\1\1\uffff\1\135\1\3\1\106\1\4\26\uffff" - u"\1\23\1\24\1\27\10\uffff\1\45\1\46\1\47\1\50\1\67\1\51\1\52\1\62" - u"\1\143\1\57\1\72\1\53\1\63\1\73\1\60\1\54\1\70\1\150\1\147\1\55" - u"\1\71\1\56\1\76\1\103\1\64\1\65\1\107\1\66\1\112\1\uffff\1\110" - u"\1\uffff\1\113\1\111\1\77\1\105\1\100\1\102\1\104\1\101\5\uffff" - u"\1\136\1\137\1\140\1\141\2\uffff\1\144\1\145\1\151\23\uffff\1\123" - u"\5\uffff\1\127\3\uffff\1\33\7\uffff\1\74\1\114\1\75\1\115\5\uffff" - u"\1\142\24\uffff\1\15\1\uffff\1\130\5\uffff\1\34\15\uffff\1\30\1" - u"\124\7\uffff\1\7\3\uffff\1\12\3\uffff\1\121\1\13\1\16\16\uffff" - u"\1\117\1\uffff\1\131\10\uffff\1\14\5\uffff\1\31\1\17\3\uffff\1" - u"\26\1\uffff\1\36\7\uffff\1\120\1\126\1\133\1\uffff\1\5\1\25\1\6" - u"\1\125\1\21\1\61\1\uffff\1\134\1\11\2\uffff\1\20\10\uffff\1\42" - u"\1\uffff\1\2\3\uffff\1\122\7\uffff\1\116\1\10\1\32\1\132\1\22\1" - u"\35\1\uffff\1\40\3\uffff\1\37\23\uffff\1\43\6\uffff\1\44\12\uffff" - u"\1\41" + u"\1\uffff\1\1\1\uffff\1\3\15\uffff\1\23\1\24\1\27\10\uffff\1\46" + u"\1\47\1\50\1\51\7\uffff\1\66\5\uffff\1\102\5\uffff\1\136\4\uffff" + u"\1\145\1\146\1\uffff\1\147\1\1\1\uffff\1\136\1\3\1\107\1\4\26\uffff" + u"\1\23\1\24\1\27\11\uffff\1\46\1\47\1\50\1\51\1\70\1\52\1\53\1\63" + u"\1\144\1\73\1\60\1\54\1\74\1\64\1\61\1\55\1\150\1\151\1\71\1\56" + u"\1\72\1\57\1\77\1\104\1\65\1\66\1\110\1\67\1\uffff\1\113\1\111" + u"\1\uffff\1\114\1\112\1\100\1\106\1\103\1\101\1\105\1\102\5\uffff" + u"\1\140\1\137\1\141\1\uffff\1\142\1\uffff\1\145\1\146\1\152\23\uffff" + u"\1\124\6\uffff\1\130\2\uffff\1\33\10\uffff\1\75\1\115\1\76\1\116" + u"\5\uffff\1\143\24\uffff\1\15\1\uffff\1\131\6\uffff\1\34\15\uffff" + u"\1\125\1\uffff\1\30\6\uffff\1\7\4\uffff\1\12\1\122\2\uffff\1\13" + u"\1\16\17\uffff\1\120\1\uffff\1\132\10\uffff\1\14\5\uffff\1\31\1" + u"\17\3\uffff\1\26\1\uffff\1\36\10\uffff\1\121\1\127\1\134\1\uffff" + u"\1\5\1\126\1\6\1\25\1\62\1\21\1\uffff\1\135\1\11\3\uffff\1\20\7" + u"\uffff\1\42\1\45\1\uffff\1\2\3\uffff\1\123\7\uffff\1\117\1\10\1" + u"\32\1\133\1\22\1\35\1\uffff\1\40\3\uffff\1\37\24\uffff\1\43\5\uffff" + u"\1\44\12\uffff\1\41" ) DFA35_special = DFA.unpack( - u"\u018b\uffff" + u"\u0192\uffff" ) DFA35_transition = [ - DFA.unpack(u"\6\72\2\67\1\72\2\67\22\72\1\67\1\47\1\64\1\71\1\62" - u"\1\44\1\45\1\63\1\33\1\34\1\37\1\41\1\3\1\42\1\40\1\43\1\65\11" - u"\66\1\23\1\1\1\50\1\4\1\51\1\54\1\72\2\62\1\26\1\62\1\32\1\62\1" - u"\31\1\62\1\24\2\62\1\61\2\62\1\25\3\62\1\11\1\62\1\27\1\30\4\62" - u"\1\35\1\70\1\36\1\52\1\55\1\72\1\7\1\60\1\13\1\17\1\5\1\16\1\57" - u"\1\62\1\14\2\62\1\15\5\62\1\10\1\6\1\2\1\20\1\12\1\56\3\62\1\21" - u"\1\53\1\22\1\46\uff80\72"), + DFA.unpack(u"\6\73\2\70\1\73\2\70\22\73\1\70\1\50\1\65\1\72\1\63" + u"\1\45\1\46\1\64\1\34\1\35\1\40\1\42\1\3\1\43\1\41\1\44\1\66\11" + u"\67\1\23\1\1\1\51\1\4\1\52\1\55\1\73\2\63\1\26\1\63\1\32\1\63\1" + u"\31\1\63\1\24\2\63\1\62\2\63\1\25\1\33\2\63\1\11\1\63\1\27\1\30" + u"\4\63\1\36\1\71\1\37\1\53\1\56\1\73\1\7\1\61\1\13\1\17\1\5\1\16" + u"\1\60\1\63\1\14\2\63\1\15\5\63\1\10\1\6\1\2\1\20\1\12\1\57\3\63" + u"\1\21\1\54\1\22\1\47\uff80\73"), DFA.unpack(u""), - DFA.unpack(u"\1\74"), + DFA.unpack(u"\1\75"), DFA.unpack(u""), - DFA.unpack(u"\1\77"), - DFA.unpack(u"\1\102\1\uffff\1\101\11\uffff\1\103"), - DFA.unpack(u"\1\107\1\106\12\uffff\1\104\2\uffff\1\105"), - DFA.unpack(u"\1\110"), + DFA.unpack(u"\1\100"), + DFA.unpack(u"\1\102\1\uffff\1\104\11\uffff\1\103"), + DFA.unpack(u"\1\110\1\107\12\uffff\1\106\2\uffff\1\105"), DFA.unpack(u"\1\111"), DFA.unpack(u"\1\112"), DFA.unpack(u"\1\113"), - DFA.unpack(u"\1\115\6\uffff\1\116\6\uffff\1\114"), - DFA.unpack(u"\1\117\7\uffff\1\120"), - DFA.unpack(u"\1\121"), - DFA.unpack(u"\1\123\2\uffff\1\122"), - DFA.unpack(u"\1\125\11\uffff\1\124"), - DFA.unpack(u"\1\126"), + DFA.unpack(u"\1\114"), + DFA.unpack(u"\1\115\6\uffff\1\117\6\uffff\1\116"), + DFA.unpack(u"\1\120\7\uffff\1\121"), + DFA.unpack(u"\1\122"), + DFA.unpack(u"\1\124\2\uffff\1\123"), + DFA.unpack(u"\1\125\11\uffff\1\126"), + DFA.unpack(u"\1\127"), DFA.unpack(u""), DFA.unpack(u""), DFA.unpack(u""), - DFA.unpack(u"\1\132"), - DFA.unpack(u"\1\134\4\uffff\1\133"), - DFA.unpack(u"\1\135"), + DFA.unpack(u"\1\133"), + DFA.unpack(u"\1\134\4\uffff\1\135"), DFA.unpack(u"\1\136"), DFA.unpack(u"\1\137"), DFA.unpack(u"\1\140"), DFA.unpack(u"\1\141"), + DFA.unpack(u"\1\142"), + DFA.unpack(u"\1\143"), DFA.unpack(u""), DFA.unpack(u""), DFA.unpack(u""), DFA.unpack(u""), - DFA.unpack(u"\1\146"), - DFA.unpack(u"\1\150\1\uffff\12\152"), - DFA.unpack(u"\1\153\21\uffff\1\154"), - DFA.unpack(u"\1\160\17\uffff\1\157\1\156"), - DFA.unpack(u"\1\164\4\uffff\1\163\15\uffff\1\162"), - DFA.unpack(u"\1\166"), - DFA.unpack(u"\1\171\26\uffff\1\170"), + DFA.unpack(u"\1\150"), + DFA.unpack(u"\1\152\1\uffff\12\154"), + DFA.unpack(u"\1\156\21\uffff\1\155"), + DFA.unpack(u"\1\162\17\uffff\1\160\1\161"), + DFA.unpack(u"\1\164\4\uffff\1\165\15\uffff\1\166"), + DFA.unpack(u"\1\170"), + DFA.unpack(u"\1\173\26\uffff\1\172"), DFA.unpack(u""), - DFA.unpack(u"\1\174"), - DFA.unpack(u"\1\177\1\176"), - DFA.unpack(u"\1\u0082\1\u0081"), - DFA.unpack(u"\1\u0084"), - DFA.unpack(u"\1\u0086\76\uffff\1\u0087"), + DFA.unpack(u"\1\176"), + DFA.unpack(u"\1\u0080\1\u0081"), + DFA.unpack(u"\1\u0084\1\u0083"), + DFA.unpack(u"\1\u0086"), + DFA.unpack(u"\1\u0089\76\uffff\1\u0088"), DFA.unpack(u""), - DFA.unpack(u"\1\u008a\1\uffff\1\u008b"), - DFA.unpack(u"\1\u008c"), - DFA.unpack(u"\1\u008d"), + DFA.unpack(u"\1\u008c\1\uffff\1\u008d"), DFA.unpack(u"\1\u008e"), - DFA.unpack(u"\1\u0090\4\uffff\1\u008f"), + DFA.unpack(u"\1\u008f"), + DFA.unpack(u"\1\u0090"), + DFA.unpack(u"\1\u0091\4\uffff\1\u0092"), DFA.unpack(u""), - DFA.unpack(u"\47\u008f\1\uffff\uffd7\u008f"), - DFA.unpack(u"\uffff\u0090"), - DFA.unpack(u"\1\152\1\uffff\10\u0093\2\152\12\uffff\3\152\21\uffff" - u"\1\u0091\13\uffff\3\152\21\uffff\1\u0091"), - DFA.unpack(u"\1\152\1\uffff\12\u0094\12\uffff\3\152\35\uffff\3\152"), + DFA.unpack(u"\47\u0092\1\uffff\uffd7\u0092"), + DFA.unpack(u"\uffff\u0091"), + DFA.unpack(u"\1\154\1\uffff\10\u0094\2\154\12\uffff\3\154\21\uffff" + u"\1\u0093\13\uffff\3\154\21\uffff\1\u0093"), + DFA.unpack(u"\1\154\1\uffff\12\u0096\12\uffff\3\154\35\uffff\3\154"), DFA.unpack(u""), DFA.unpack(u""), - DFA.unpack(u"\uffff\u0097"), + DFA.unpack(u"\uffff\u0099"), DFA.unpack(u""), DFA.unpack(u""), - DFA.unpack(u"\1\u0098"), + DFA.unpack(u"\1\u009a"), DFA.unpack(u""), DFA.unpack(u""), DFA.unpack(u""), DFA.unpack(u""), - DFA.unpack(u"\1\u0099"), - DFA.unpack(u"\1\u009a"), DFA.unpack(u"\1\u009b"), - DFA.unpack(u"\1\u009d\20\uffff\1\u009c"), + DFA.unpack(u"\1\u009c"), + DFA.unpack(u"\1\u009d"), DFA.unpack(u"\1\u009e"), - DFA.unpack(u"\1\u009f\22\uffff\1\u00a0"), - DFA.unpack(u"\1\u00a1"), - DFA.unpack(u"\1\u00a2"), - DFA.unpack(u"\1\u00a3\14\uffff\1\u00a4"), - DFA.unpack(u"\1\u00a5"), - DFA.unpack(u"\1\u00a6\2\uffff\1\u00a7"), - DFA.unpack(u"\1\u00a8"), - DFA.unpack(u"\1\u00a9"), + DFA.unpack(u"\1\u009f\20\uffff\1\u00a0"), + DFA.unpack(u"\1\u00a2\22\uffff\1\u00a1"), + DFA.unpack(u"\1\u00a3"), + DFA.unpack(u"\1\u00a4"), + DFA.unpack(u"\1\u00a5\14\uffff\1\u00a6"), + DFA.unpack(u"\1\u00a7"), + DFA.unpack(u"\1\u00a9\2\uffff\1\u00a8"), DFA.unpack(u"\1\u00aa"), - DFA.unpack(u"\1\75\13\uffff\12\75\7\uffff\32\75\4\uffff\1\75\1\uffff" - u"\32\75"), + DFA.unpack(u"\1\u00ab"), DFA.unpack(u"\1\u00ac"), - DFA.unpack(u"\1\u00ad"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), DFA.unpack(u"\1\u00ae"), DFA.unpack(u"\1\u00af"), - DFA.unpack(u"\1\75\13\uffff\12\75\7\uffff\32\75\4\uffff\1\75\1\uffff" - u"\24\75\1\u00b0\5\75"), + DFA.unpack(u"\1\u00b0"), + DFA.unpack(u"\1\u00b1"), DFA.unpack(u"\1\u00b2"), - DFA.unpack(u"\1\u00b4\11\uffff\1\u00b3"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\24\76\1\u00b3\5\76"), + DFA.unpack(u"\1\u00b6\11\uffff\1\u00b5"), DFA.unpack(u""), DFA.unpack(u""), DFA.unpack(u""), - DFA.unpack(u"\1\75\13\uffff\12\75\7\uffff\32\75\4\uffff\1\75\1\uffff" - u"\32\75"), - DFA.unpack(u"\1\u00b6"), - DFA.unpack(u"\1\u00b7"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), DFA.unpack(u"\1\u00b8"), DFA.unpack(u"\1\u00b9"), DFA.unpack(u"\1\u00ba"), DFA.unpack(u"\1\u00bb"), DFA.unpack(u"\1\u00bc"), + DFA.unpack(u"\1\u00bd"), + DFA.unpack(u"\1\u00be"), + DFA.unpack(u"\1\u00bf"), DFA.unpack(u""), DFA.unpack(u""), DFA.unpack(u""), @@ -4565,10 +4619,10 @@ class CLexer(Lexer): DFA.unpack(u""), DFA.unpack(u""), DFA.unpack(u""), + DFA.unpack(u"\1\u00c0"), DFA.unpack(u""), - DFA.unpack(u"\1\u00bd"), DFA.unpack(u""), - DFA.unpack(u"\1\u00bf"), + DFA.unpack(u"\1\u00c2"), DFA.unpack(u""), DFA.unpack(u""), DFA.unpack(u""), @@ -4577,24 +4631,21 @@ class CLexer(Lexer): DFA.unpack(u""), DFA.unpack(u""), DFA.unpack(u""), - DFA.unpack(u"\1\u00c1"), - DFA.unpack(u"\1\u00c2"), - DFA.unpack(u"\1\u00c3"), DFA.unpack(u"\1\u00c4"), DFA.unpack(u"\1\u00c5"), + DFA.unpack(u"\1\u00c6"), + DFA.unpack(u"\1\u00c7"), + DFA.unpack(u"\1\u00c8"), DFA.unpack(u""), DFA.unpack(u""), DFA.unpack(u""), + DFA.unpack(u"\1\154\1\uffff\10\u0094\2\154\12\uffff\3\154\35\uffff" + u"\3\154"), DFA.unpack(u""), - DFA.unpack(u"\1\152\1\uffff\10\u0093\2\152\12\uffff\3\152\35\uffff" - u"\3\152"), - DFA.unpack(u"\1\152\1\uffff\12\u0094\12\uffff\3\152\35\uffff\3\152"), + DFA.unpack(u"\1\154\1\uffff\12\u0096\12\uffff\3\154\35\uffff\3\154"), DFA.unpack(u""), DFA.unpack(u""), DFA.unpack(u""), - DFA.unpack(u"\1\u00c7"), - DFA.unpack(u"\1\u00c8"), - DFA.unpack(u"\1\u00c9"), DFA.unpack(u"\1\u00ca"), DFA.unpack(u"\1\u00cb"), DFA.unpack(u"\1\u00cc"), @@ -4608,242 +4659,244 @@ class CLexer(Lexer): DFA.unpack(u"\1\u00d4"), DFA.unpack(u"\1\u00d5"), DFA.unpack(u"\1\u00d6"), - DFA.unpack(u"\1\u00d8\1\u00d7"), + DFA.unpack(u"\1\u00d7"), + DFA.unpack(u"\1\u00d8"), DFA.unpack(u"\1\u00d9"), DFA.unpack(u"\1\u00da"), + DFA.unpack(u"\1\u00dc\1\u00db"), + DFA.unpack(u"\1\u00dd"), DFA.unpack(u""), - DFA.unpack(u"\1\75\13\uffff\12\75\7\uffff\32\75\4\uffff\1\75\1\uffff" - u"\32\75"), - DFA.unpack(u"\1\u00dc"), - DFA.unpack(u"\1\75\13\uffff\12\75\7\uffff\32\75\4\uffff\1\75\1\uffff" - u"\32\75"), - DFA.unpack(u"\1\u00de"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), DFA.unpack(u"\1\u00df"), - DFA.unpack(u""), - DFA.unpack(u"\1\u00e0"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), DFA.unpack(u"\1\u00e1"), DFA.unpack(u"\1\u00e2"), + DFA.unpack(u"\1\u00e3"), DFA.unpack(u""), - DFA.unpack(u"\1\75\13\uffff\12\75\7\uffff\32\75\4\uffff\1\75\1\uffff" - u"\32\75"), DFA.unpack(u"\1\u00e4"), DFA.unpack(u"\1\u00e5"), + DFA.unpack(u""), DFA.unpack(u"\1\u00e6"), - DFA.unpack(u"\1\u00e7"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), DFA.unpack(u"\1\u00e8"), - DFA.unpack(u"\1\u00ea\35\uffff\1\u00e9"), + DFA.unpack(u"\1\u00e9"), + DFA.unpack(u"\1\u00ea"), + DFA.unpack(u"\1\u00eb"), + DFA.unpack(u"\1\u00ed\35\uffff\1\u00ec"), + DFA.unpack(u"\1\u00ee"), DFA.unpack(u""), DFA.unpack(u""), DFA.unpack(u""), DFA.unpack(u""), - DFA.unpack(u"\1\u00eb"), - DFA.unpack(u"\1\u00ec"), - DFA.unpack(u"\1\u00ed"), - DFA.unpack(u"\1\u00ee"), DFA.unpack(u"\1\u00ef"), - DFA.unpack(u""), DFA.unpack(u"\1\u00f0"), - DFA.unpack(u"\1\75\13\uffff\12\75\7\uffff\32\75\4\uffff\1\75\1\uffff" - u"\32\75"), - DFA.unpack(u"\1\75\13\uffff\12\75\7\uffff\32\75\4\uffff\1\75\1\uffff" - u"\32\75"), + DFA.unpack(u"\1\u00f1"), + DFA.unpack(u"\1\u00f2"), DFA.unpack(u"\1\u00f3"), + DFA.unpack(u""), DFA.unpack(u"\1\u00f4"), - DFA.unpack(u"\1\u00f5"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), DFA.unpack(u"\1\u00f6"), - DFA.unpack(u"\1\u00f7"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), DFA.unpack(u"\1\u00f8"), DFA.unpack(u"\1\u00f9"), - DFA.unpack(u"\1\75\13\uffff\12\75\7\uffff\32\75\4\uffff\1\75\1\uffff" - u"\32\75"), + DFA.unpack(u"\1\u00fa"), DFA.unpack(u"\1\u00fb"), DFA.unpack(u"\1\u00fc"), DFA.unpack(u"\1\u00fd"), - DFA.unpack(u"\1\75\13\uffff\12\75\7\uffff\32\75\4\uffff\1\75\1\uffff" - u"\32\75"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), DFA.unpack(u"\1\u00ff"), DFA.unpack(u"\1\u0100"), DFA.unpack(u"\1\u0101"), - DFA.unpack(u"\1\75\13\uffff\12\75\7\uffff\32\75\4\uffff\1\75\1\uffff" - u"\32\75"), - DFA.unpack(u"\1\75\13\uffff\12\75\7\uffff\32\75\4\uffff\1\75\1\uffff" - u"\32\75"), - DFA.unpack(u""), - DFA.unpack(u"\1\75\13\uffff\12\75\7\uffff\32\75\4\uffff\1\75\1\uffff" - u"\32\75"), - DFA.unpack(u""), + DFA.unpack(u"\1\u0102"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), DFA.unpack(u"\1\u0105"), DFA.unpack(u"\1\u0106"), - DFA.unpack(u"\1\u0107"), - DFA.unpack(u"\1\u0108"), - DFA.unpack(u"\1\u0109"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), + DFA.unpack(u""), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), DFA.unpack(u""), + DFA.unpack(u"\1\u0109"), DFA.unpack(u"\1\u010a"), DFA.unpack(u"\1\u010b"), DFA.unpack(u"\1\u010c"), DFA.unpack(u"\1\u010d"), DFA.unpack(u"\1\u010e"), - DFA.unpack(u"\1\u010f\17\uffff\1\u0110"), + DFA.unpack(u""), + DFA.unpack(u"\1\u010f"), + DFA.unpack(u"\1\u0110"), DFA.unpack(u"\1\u0111"), DFA.unpack(u"\1\u0112"), - DFA.unpack(u"\1\75\13\uffff\12\75\7\uffff\32\75\4\uffff\1\75\1\uffff" - u"\32\75"), - DFA.unpack(u"\1\u0114"), - DFA.unpack(u"\1\75\13\uffff\12\75\7\uffff\32\75\4\uffff\1\75\1\uffff" - u"\32\75"), + DFA.unpack(u"\1\u0114\17\uffff\1\u0113"), + DFA.unpack(u"\1\u0115"), DFA.unpack(u"\1\u0116"), DFA.unpack(u"\1\u0117"), - DFA.unpack(u""), - DFA.unpack(u""), - DFA.unpack(u"\1\u0118"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), DFA.unpack(u"\1\u0119"), - DFA.unpack(u"\1\u011a"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), DFA.unpack(u"\1\u011b"), DFA.unpack(u"\1\u011c"), + DFA.unpack(u""), DFA.unpack(u"\1\u011d"), - DFA.unpack(u"\1\75\13\uffff\12\75\7\uffff\32\75\4\uffff\1\75\1\uffff" - u"\32\75"), DFA.unpack(u""), + DFA.unpack(u"\1\u011e"), DFA.unpack(u"\1\u011f"), DFA.unpack(u"\1\u0120"), DFA.unpack(u"\1\u0121"), - DFA.unpack(u""), DFA.unpack(u"\1\u0122"), - DFA.unpack(u"\1\u0123"), - DFA.unpack(u"\1\75\13\uffff\12\75\7\uffff\32\75\4\uffff\1\75\1\uffff" - u"\32\75"), - DFA.unpack(u""), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), DFA.unpack(u""), - DFA.unpack(u""), - DFA.unpack(u"\1\75\13\uffff\12\75\7\uffff\32\75\4\uffff\1\75\1\uffff" - u"\32\75"), + DFA.unpack(u"\1\u0124"), + DFA.unpack(u"\1\u0125"), DFA.unpack(u"\1\u0126"), DFA.unpack(u"\1\u0127"), + DFA.unpack(u""), + DFA.unpack(u""), DFA.unpack(u"\1\u0128"), - DFA.unpack(u"\1\75\13\uffff\12\75\7\uffff\32\75\4\uffff\1\75\1\uffff" - u"\32\75"), - DFA.unpack(u"\1\u012a"), - DFA.unpack(u"\1\75\13\uffff\12\75\7\uffff\32\75\4\uffff\1\75\1\uffff" - u"\32\75"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), + DFA.unpack(u"\1\u012b"), DFA.unpack(u"\1\u012c"), DFA.unpack(u"\1\u012d"), - DFA.unpack(u"\1\u012e"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), DFA.unpack(u"\1\u012f"), - DFA.unpack(u"\1\u0130"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), DFA.unpack(u"\1\u0131"), - DFA.unpack(u"\1\75\13\uffff\12\75\7\uffff\32\75\4\uffff\1\u0132\1" - u"\uffff\32\75"), - DFA.unpack(u""), - DFA.unpack(u"\1\75\13\uffff\12\75\7\uffff\32\75\4\uffff\1\75\1\uffff" - u"\32\75"), - DFA.unpack(u""), - DFA.unpack(u"\1\75\13\uffff\12\75\7\uffff\32\75\4\uffff\1\75\1\uffff" - u"\32\75"), + DFA.unpack(u"\1\u0132"), + DFA.unpack(u"\1\u0133"), + DFA.unpack(u"\1\u0134"), + DFA.unpack(u"\1\u0135"), DFA.unpack(u"\1\u0136"), - DFA.unpack(u"\1\75\13\uffff\12\75\7\uffff\32\75\4\uffff\1\75\1\uffff" - u"\32\75"), - DFA.unpack(u"\1\75\13\uffff\12\75\7\uffff\32\75\4\uffff\1\75\1\uffff" - u"\32\75"), - DFA.unpack(u"\1\75\13\uffff\12\75\7\uffff\32\75\4\uffff\1\75\1\uffff" - u"\32\75"), - DFA.unpack(u"\1\75\13\uffff\12\75\7\uffff\32\75\4\uffff\1\75\1\uffff" - u"\32\75"), - DFA.unpack(u"\1\75\13\uffff\12\75\7\uffff\32\75\4\uffff\1\75\1\uffff" - u"\32\75"), - DFA.unpack(u"\1\75\13\uffff\12\75\7\uffff\32\75\4\uffff\1\75\1\uffff" - u"\32\75"), + DFA.unpack(u"\1\u0137"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\u0138\1" + u"\uffff\32\76"), DFA.unpack(u""), - DFA.unpack(u"\1\u013d"), - DFA.unpack(u"\1\75\13\uffff\12\75\7\uffff\32\75\4\uffff\1\75\1\uffff" - u"\32\75"), - DFA.unpack(u"\1\75\13\uffff\12\75\7\uffff\32\75\4\uffff\1\75\1\uffff" - u"\32\75"), - DFA.unpack(u"\1\u0140"), - DFA.unpack(u"\1\u0141"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), DFA.unpack(u""), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), + DFA.unpack(u"\1\u013c"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), DFA.unpack(u""), - DFA.unpack(u"\1\75\13\uffff\12\75\7\uffff\32\75\4\uffff\1\75\1\uffff" - u"\32\75"), DFA.unpack(u"\1\u0143"), - DFA.unpack(u"\1\u0144"), - DFA.unpack(u""), - DFA.unpack(u"\1\u0145"), - DFA.unpack(u""), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), DFA.unpack(u"\1\u0146"), DFA.unpack(u"\1\u0147"), + DFA.unpack(u""), + DFA.unpack(u""), DFA.unpack(u"\1\u0148"), - DFA.unpack(u"\1\u0149"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), DFA.unpack(u"\1\u014a"), - DFA.unpack(u"\1\75\13\uffff\12\75\7\uffff\32\75\4\uffff\1\75\1\uffff" - u"\32\75"), - DFA.unpack(u"\1\u014c"), - DFA.unpack(u""), DFA.unpack(u""), + DFA.unpack(u"\1\u014b"), DFA.unpack(u""), - DFA.unpack(u"\1\75\13\uffff\12\75\7\uffff\32\75\4\uffff\1\75\1\uffff" - u"\32\75"), + DFA.unpack(u"\1\u014c"), + DFA.unpack(u"\1\u014d"), + DFA.unpack(u"\1\u014e"), + DFA.unpack(u"\1\u014f"), + DFA.unpack(u"\1\u0150"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), + DFA.unpack(u"\1\u0153"), DFA.unpack(u""), DFA.unpack(u""), DFA.unpack(u""), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), DFA.unpack(u""), DFA.unpack(u""), DFA.unpack(u""), - DFA.unpack(u"\1\u014e"), DFA.unpack(u""), DFA.unpack(u""), - DFA.unpack(u"\1\u014f"), - DFA.unpack(u"\1\u0150"), DFA.unpack(u""), - DFA.unpack(u"\1\75\13\uffff\12\75\7\uffff\32\75\4\uffff\1\75\1\uffff" - u"\32\75"), - DFA.unpack(u"\1\u0152"), - DFA.unpack(u"\1\u0153"), - DFA.unpack(u"\1\u0154"), DFA.unpack(u"\1\u0155"), + DFA.unpack(u""), + DFA.unpack(u""), DFA.unpack(u"\1\u0156"), DFA.unpack(u"\1\u0157"), - DFA.unpack(u"\1\u0158"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), DFA.unpack(u""), - DFA.unpack(u"\1\75\13\uffff\12\75\7\uffff\32\75\4\uffff\1\75\1\uffff" - u"\32\75"), + DFA.unpack(u"\1\u0159"), + DFA.unpack(u"\1\u015a"), + DFA.unpack(u"\1\u015b"), + DFA.unpack(u"\1\u015c"), + DFA.unpack(u"\1\u015d"), + DFA.unpack(u"\1\u015e"), + DFA.unpack(u"\1\u015f"), DFA.unpack(u""), - DFA.unpack(u"\1\75\13\uffff\12\75\7\uffff\32\75\4\uffff\1\75\1\uffff" - u"\32\75"), - DFA.unpack(u"\1\75\13\uffff\12\75\7\uffff\32\75\4\uffff\1\75\1\uffff" - u"\32\75"), - DFA.unpack(u"\1\75\13\uffff\12\75\7\uffff\32\75\4\uffff\1\75\1\uffff" - u"\32\75"), DFA.unpack(u""), - DFA.unpack(u"\1\75\13\uffff\12\75\7\uffff\32\75\4\uffff\1\75\1\uffff" - u"\32\75"), - DFA.unpack(u"\1\75\13\uffff\12\75\7\uffff\32\75\4\uffff\1\75\1\uffff" - u"\32\75"), - DFA.unpack(u"\1\u015f"), - DFA.unpack(u"\1\75\13\uffff\12\75\7\uffff\32\75\4\uffff\1\75\1\uffff" - u"\32\75"), - DFA.unpack(u"\1\u0161"), - DFA.unpack(u"\1\u0162"), - DFA.unpack(u"\1\u0163"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), DFA.unpack(u""), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), DFA.unpack(u""), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), + DFA.unpack(u"\1\u0166"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), + DFA.unpack(u"\1\u0168"), + DFA.unpack(u"\1\u0169"), + DFA.unpack(u"\1\u016a"), DFA.unpack(u""), DFA.unpack(u""), DFA.unpack(u""), DFA.unpack(u""), - DFA.unpack(u"\1\75\13\uffff\12\75\7\uffff\32\75\4\uffff\1\75\1\uffff" - u"\32\75"), DFA.unpack(u""), - DFA.unpack(u"\1\u0165"), - DFA.unpack(u"\1\u0166"), - DFA.unpack(u"\1\u0167"), DFA.unpack(u""), - DFA.unpack(u"\1\u0168"), - DFA.unpack(u"\1\u0169"), - DFA.unpack(u"\1\u016a"), - DFA.unpack(u"\1\u016b"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), + DFA.unpack(u""), DFA.unpack(u"\1\u016c"), DFA.unpack(u"\1\u016d"), DFA.unpack(u"\1\u016e"), + DFA.unpack(u""), DFA.unpack(u"\1\u016f"), DFA.unpack(u"\1\u0170"), DFA.unpack(u"\1\u0171"), @@ -4853,30 +4906,37 @@ class CLexer(Lexer): DFA.unpack(u"\1\u0175"), DFA.unpack(u"\1\u0176"), DFA.unpack(u"\1\u0177"), - DFA.unpack(u"\1\75\13\uffff\12\75\7\uffff\32\75\4\uffff\1\75\1\uffff" - u"\32\75"), + DFA.unpack(u"\1\u0178"), DFA.unpack(u"\1\u0179"), DFA.unpack(u"\1\u017a"), - DFA.unpack(u""), DFA.unpack(u"\1\u017b"), DFA.unpack(u"\1\u017c"), DFA.unpack(u"\1\u017d"), DFA.unpack(u"\1\u017e"), - DFA.unpack(u"\1\75\13\uffff\12\75\7\uffff\32\75\4\uffff\1\75\1\uffff" - u"\32\75"), - DFA.unpack(u"\1\u0180"), - DFA.unpack(u""), + DFA.unpack(u"\1\u017f"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), DFA.unpack(u"\1\u0181"), DFA.unpack(u"\1\u0182"), + DFA.unpack(u""), DFA.unpack(u"\1\u0183"), DFA.unpack(u"\1\u0184"), DFA.unpack(u"\1\u0185"), - DFA.unpack(u"\1\u0186"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), DFA.unpack(u"\1\u0187"), + DFA.unpack(u""), DFA.unpack(u"\1\u0188"), DFA.unpack(u"\1\u0189"), - DFA.unpack(u"\1\75\13\uffff\12\75\7\uffff\32\75\4\uffff\1\75\1\uffff" - u"\32\75"), + DFA.unpack(u"\1\u018a"), + DFA.unpack(u"\1\u018b"), + DFA.unpack(u"\1\u018c"), + DFA.unpack(u"\1\u018d"), + DFA.unpack(u"\1\u018e"), + DFA.unpack(u"\1\u018f"), + DFA.unpack(u"\1\u0190"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), DFA.unpack(u"") ] diff --git a/BaseTools/Source/Python/Ecc/CParser.py b/BaseTools/Source/Python/Ecc/CParser.py index 194a6aa451..e56a79a43d 100644 --- a/BaseTools/Source/Python/Ecc/CParser.py +++ b/BaseTools/Source/Python/Ecc/CParser.py @@ -1,8 +1,27 @@ -# $ANTLR 3.0.1 C.g 2009-02-16 16:02:50 +# $ANTLR 3.0.1 C.g 2010-02-23 09:58:53 from antlr3 import * from antlr3.compat import set, frozenset +## @file +# The file defines the parser for C source files. +# +# THIS FILE IS AUTO-GENENERATED. PLEASE DON NOT MODIFY THIS FILE. +# This file is generated by running: +# java org.antlr.Tool C.g +# +# Copyright (c) 2009 - 2010, Intel Corporation All rights reserved. +# +# This program and the accompanying materials are licensed and made available +# under the terms and conditions of the BSD License which accompanies this +# distribution. The full text of the license may be found at: +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +## + import CodeFragment import FileProfile @@ -12,28 +31,28 @@ import FileProfile HIDDEN = BaseRecognizer.HIDDEN # token types -CHARACTER_LITERAL=8 +BS=20 +LINE_COMMENT=23 +FloatTypeSuffix=16 +IntegerTypeSuffix=14 LETTER=11 +OCTAL_LITERAL=6 +CHARACTER_LITERAL=8 Exponent=15 -DECIMAL_LITERAL=7 -IntegerTypeSuffix=14 -UnicodeVocabulary=21 +EOF=-1 HexDigit=13 -BS=20 +STRING_LITERAL=9 WS=19 -LINE_COMMAND=24 -COMMENT=22 -LINE_COMMENT=23 -OCTAL_LITERAL=6 -HEX_LITERAL=5 FLOATING_POINT_LITERAL=10 +IDENTIFIER=4 UnicodeEscape=18 +LINE_COMMAND=24 +UnicodeVocabulary=21 +HEX_LITERAL=5 +COMMENT=22 +DECIMAL_LITERAL=7 EscapeSequence=12 -EOF=-1 -STRING_LITERAL=9 OctalEscape=17 -IDENTIFIER=4 -FloatTypeSuffix=16 # token names tokenNames = [ @@ -47,14 +66,14 @@ tokenNames = [ "'long'", "'float'", "'double'", "'signed'", "'unsigned'", "'{'", "'}'", "'struct'", "'union'", "':'", "'enum'", "'const'", "'volatile'", "'IN'", "'OUT'", "'OPTIONAL'", "'CONST'", "'UNALIGNED'", "'VOLATILE'", "'GLOBAL_REMOVE_IF_UNREFERENCED'", - "'EFIAPI'", "'EFI_BOOTSERVICE'", "'EFI_RUNTIMESERVICE'", "'('", "')'", - "'['", "']'", "'*'", "'...'", "'+'", "'-'", "'/'", "'%'", "'++'", "'--'", - "'sizeof'", "'.'", "'->'", "'&'", "'~'", "'!'", "'*='", "'/='", "'%='", - "'+='", "'-='", "'<<='", "'>>='", "'&='", "'^='", "'|='", "'?'", "'||'", - "'&&'", "'|'", "'^'", "'=='", "'!='", "'<'", "'>'", "'<='", "'>='", - "'<<'", "'>>'", "'__asm__'", "'_asm'", "'__asm'", "'case'", "'default'", - "'if'", "'else'", "'switch'", "'while'", "'do'", "'for'", "'goto'", - "'continue'", "'break'", "'return'" + "'EFIAPI'", "'EFI_BOOTSERVICE'", "'EFI_RUNTIMESERVICE'", "'PACKED'", + "'('", "')'", "'['", "']'", "'*'", "'...'", "'+'", "'-'", "'/'", "'%'", + "'++'", "'--'", "'sizeof'", "'.'", "'->'", "'&'", "'~'", "'!'", "'*='", + "'/='", "'%='", "'+='", "'-='", "'<<='", "'>>='", "'&='", "'^='", "'|='", + "'?'", "'||'", "'&&'", "'|'", "'^'", "'=='", "'!='", "'<'", "'>'", "'<='", + "'>='", "'<<'", "'>>'", "'__asm__'", "'_asm'", "'__asm'", "'case'", + "'default'", "'if'", "'else'", "'switch'", "'while'", "'do'", "'for'", + "'goto'", "'continue'", "'break'", "'return'" ] @@ -124,7 +143,7 @@ class CParser(Parser): # $ANTLR start translation_unit - # C.g:50:1: translation_unit : ( external_declaration )* ; + # C.g:102:1: translation_unit : ( external_declaration )* ; def translation_unit(self, ): translation_unit_StartIndex = self.input.index() @@ -133,20 +152,20 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 1): return - # C.g:51:2: ( ( external_declaration )* ) - # C.g:51:4: ( external_declaration )* - # C.g:51:4: ( external_declaration )* + # C.g:103:2: ( ( external_declaration )* ) + # C.g:103:4: ( external_declaration )* + # C.g:103:4: ( external_declaration )* while True: #loop1 alt1 = 2 LA1_0 = self.input.LA(1) - if (LA1_0 == IDENTIFIER or LA1_0 == 26 or (29 <= LA1_0 <= 42) or (45 <= LA1_0 <= 46) or (48 <= LA1_0 <= 61) or LA1_0 == 65) : + if (LA1_0 == IDENTIFIER or LA1_0 == 26 or (29 <= LA1_0 <= 42) or (45 <= LA1_0 <= 46) or (48 <= LA1_0 <= 62) or LA1_0 == 66) : alt1 = 1 if alt1 == 1: # C.g:0:0: external_declaration - self.following.append(self.FOLLOW_external_declaration_in_translation_unit64) + self.following.append(self.FOLLOW_external_declaration_in_translation_unit74) self.external_declaration() self.following.pop() if self.failed: @@ -176,7 +195,7 @@ class CParser(Parser): # $ANTLR start external_declaration - # C.g:62:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? ); + # C.g:114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? ); def external_declaration(self, ): external_declaration_StartIndex = self.input.index() @@ -185,7 +204,7 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 2): return - # C.g:67:2: ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? ) + # C.g:119:2: ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? ) alt3 = 3 LA3_0 = self.input.LA(1) @@ -201,7 +220,7 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("62:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 1, self.input) + nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 1, self.input) raise nvae @@ -217,7 +236,7 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("62:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 2, self.input) + nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 2, self.input) raise nvae @@ -233,7 +252,7 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("62:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 3, self.input) + nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 3, self.input) raise nvae @@ -249,7 +268,7 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("62:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 4, self.input) + nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 4, self.input) raise nvae @@ -265,7 +284,7 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("62:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 5, self.input) + nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 5, self.input) raise nvae @@ -281,7 +300,7 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("62:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 6, self.input) + nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 6, self.input) raise nvae @@ -297,7 +316,7 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("62:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 7, self.input) + nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 7, self.input) raise nvae @@ -313,7 +332,7 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("62:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 8, self.input) + nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 8, self.input) raise nvae @@ -329,7 +348,7 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("62:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 9, self.input) + nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 9, self.input) raise nvae @@ -345,7 +364,7 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("62:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 10, self.input) + nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 10, self.input) raise nvae @@ -361,7 +380,7 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("62:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 11, self.input) + nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 11, self.input) raise nvae @@ -377,7 +396,7 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("62:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 12, self.input) + nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 12, self.input) raise nvae @@ -395,7 +414,7 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("62:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 13, self.input) + nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 13, self.input) raise nvae @@ -411,11 +430,11 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("62:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 14, self.input) + nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 14, self.input) raise nvae - elif (LA3_0 == 65) and (self.synpred4()): + elif (LA3_0 == 66) and (self.synpred4()): alt3 = 1 elif (LA3_0 == 59) : LA3_16 = self.input.LA(2) @@ -429,7 +448,7 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("62:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 16, self.input) + nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 16, self.input) raise nvae @@ -445,11 +464,11 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("62:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 17, self.input) + nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 17, self.input) raise nvae - elif ((49 <= LA3_0 <= 57)) : + elif ((49 <= LA3_0 <= 57) or LA3_0 == 61) : LA3_18 = self.input.LA(2) if (self.synpred4()) : @@ -461,11 +480,11 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("62:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 18, self.input) + nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 18, self.input) raise nvae - elif (LA3_0 == 61) and (self.synpred4()): + elif (LA3_0 == 62) and (self.synpred4()): alt3 = 1 elif (LA3_0 == 26) : alt3 = 2 @@ -474,13 +493,13 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("62:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 0, self.input) + nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 0, self.input) raise nvae if alt3 == 1: - # C.g:67:4: ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition - self.following.append(self.FOLLOW_function_definition_in_external_declaration103) + # C.g:119:4: ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition + self.following.append(self.FOLLOW_function_definition_in_external_declaration113) self.function_definition() self.following.pop() if self.failed: @@ -488,8 +507,8 @@ class CParser(Parser): elif alt3 == 2: - # C.g:68:4: declaration - self.following.append(self.FOLLOW_declaration_in_external_declaration108) + # C.g:120:4: declaration + self.following.append(self.FOLLOW_declaration_in_external_declaration118) self.declaration() self.following.pop() if self.failed: @@ -497,21 +516,21 @@ class CParser(Parser): elif alt3 == 3: - # C.g:69:4: macro_statement ( ';' )? - self.following.append(self.FOLLOW_macro_statement_in_external_declaration113) + # C.g:121:4: macro_statement ( ';' )? + self.following.append(self.FOLLOW_macro_statement_in_external_declaration123) self.macro_statement() self.following.pop() if self.failed: return - # C.g:69:20: ( ';' )? + # C.g:121:20: ( ';' )? alt2 = 2 LA2_0 = self.input.LA(1) if (LA2_0 == 25) : alt2 = 1 if alt2 == 1: - # C.g:69:21: ';' - self.match(self.input, 25, self.FOLLOW_25_in_external_declaration116) + # C.g:121:21: ';' + self.match(self.input, 25, self.FOLLOW_25_in_external_declaration126) if self.failed: return @@ -541,7 +560,7 @@ class CParser(Parser): # $ANTLR start function_definition - # C.g:74:1: function_definition : (d= declaration_specifiers )? declarator ( ( declaration )+ a= compound_statement | b= compound_statement ) ; + # C.g:126:1: function_definition : (d= declaration_specifiers )? declarator ( ( declaration )+ a= compound_statement | b= compound_statement ) ; def function_definition(self, ): self.function_definition_stack.append(function_definition_scope()) retval = self.function_definition_return() @@ -569,16 +588,16 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 3): return retval - # C.g:94:2: ( (d= declaration_specifiers )? declarator ( ( declaration )+ a= compound_statement | b= compound_statement ) ) - # C.g:94:4: (d= declaration_specifiers )? declarator ( ( declaration )+ a= compound_statement | b= compound_statement ) - # C.g:94:5: (d= declaration_specifiers )? + # C.g:146:2: ( (d= declaration_specifiers )? declarator ( ( declaration )+ a= compound_statement | b= compound_statement ) ) + # C.g:146:4: (d= declaration_specifiers )? declarator ( ( declaration )+ a= compound_statement | b= compound_statement ) + # C.g:146:5: (d= declaration_specifiers )? alt4 = 2 LA4 = self.input.LA(1) - if LA4 == 29 or LA4 == 30 or LA4 == 31 or LA4 == 32 or LA4 == 33 or LA4 == 34 or LA4 == 35 or LA4 == 36 or LA4 == 37 or LA4 == 38 or LA4 == 39 or LA4 == 40 or LA4 == 41 or LA4 == 42 or LA4 == 45 or LA4 == 46 or LA4 == 48 or LA4 == 49 or LA4 == 50 or LA4 == 51 or LA4 == 52 or LA4 == 53 or LA4 == 54 or LA4 == 55 or LA4 == 56 or LA4 == 57: + if LA4 == 29 or LA4 == 30 or LA4 == 31 or LA4 == 32 or LA4 == 33 or LA4 == 34 or LA4 == 35 or LA4 == 36 or LA4 == 37 or LA4 == 38 or LA4 == 39 or LA4 == 40 or LA4 == 41 or LA4 == 42 or LA4 == 45 or LA4 == 46 or LA4 == 48 or LA4 == 49 or LA4 == 50 or LA4 == 51 or LA4 == 52 or LA4 == 53 or LA4 == 54 or LA4 == 55 or LA4 == 56 or LA4 == 57 or LA4 == 61: alt4 = 1 elif LA4 == IDENTIFIER: LA4 = self.input.LA(2) - if LA4 == 65: + if LA4 == 66: alt4 = 1 elif LA4 == 58: LA4_21 = self.input.LA(3) @@ -600,7 +619,7 @@ class CParser(Parser): if (self.synpred7()) : alt4 = 1 - elif LA4 == 61: + elif LA4 == 62: LA4_25 = self.input.LA(3) if (self.synpred7()) : @@ -665,7 +684,7 @@ class CParser(Parser): if (self.synpred7()) : alt4 = 1 - elif LA4 == 49 or LA4 == 50 or LA4 == 51 or LA4 == 52 or LA4 == 53 or LA4 == 54 or LA4 == 55 or LA4 == 56 or LA4 == 57: + elif LA4 == 49 or LA4 == 50 or LA4 == 51 or LA4 == 52 or LA4 == 53 or LA4 == 54 or LA4 == 55 or LA4 == 56 or LA4 == 57 or LA4 == 61: LA4_38 = self.input.LA(3) if (self.synpred7()) : @@ -687,7 +706,7 @@ class CParser(Parser): alt4 = 1 if alt4 == 1: # C.g:0:0: d= declaration_specifiers - self.following.append(self.FOLLOW_declaration_specifiers_in_function_definition147) + self.following.append(self.FOLLOW_declaration_specifiers_in_function_definition157) d = self.declaration_specifiers() self.following.pop() if self.failed: @@ -695,16 +714,16 @@ class CParser(Parser): - self.following.append(self.FOLLOW_declarator_in_function_definition150) + self.following.append(self.FOLLOW_declarator_in_function_definition160) declarator1 = self.declarator() self.following.pop() if self.failed: return retval - # C.g:95:3: ( ( declaration )+ a= compound_statement | b= compound_statement ) + # C.g:147:3: ( ( declaration )+ a= compound_statement | b= compound_statement ) alt6 = 2 LA6_0 = self.input.LA(1) - if (LA6_0 == IDENTIFIER or LA6_0 == 26 or (29 <= LA6_0 <= 42) or (45 <= LA6_0 <= 46) or (48 <= LA6_0 <= 60)) : + if (LA6_0 == IDENTIFIER or LA6_0 == 26 or (29 <= LA6_0 <= 42) or (45 <= LA6_0 <= 46) or (48 <= LA6_0 <= 61)) : alt6 = 1 elif (LA6_0 == 43) : alt6 = 2 @@ -713,25 +732,25 @@ class CParser(Parser): self.failed = True return retval - nvae = NoViableAltException("95:3: ( ( declaration )+ a= compound_statement | b= compound_statement )", 6, 0, self.input) + nvae = NoViableAltException("147:3: ( ( declaration )+ a= compound_statement | b= compound_statement )", 6, 0, self.input) raise nvae if alt6 == 1: - # C.g:95:5: ( declaration )+ a= compound_statement - # C.g:95:5: ( declaration )+ + # C.g:147:5: ( declaration )+ a= compound_statement + # C.g:147:5: ( declaration )+ cnt5 = 0 while True: #loop5 alt5 = 2 LA5_0 = self.input.LA(1) - if (LA5_0 == IDENTIFIER or LA5_0 == 26 or (29 <= LA5_0 <= 42) or (45 <= LA5_0 <= 46) or (48 <= LA5_0 <= 60)) : + if (LA5_0 == IDENTIFIER or LA5_0 == 26 or (29 <= LA5_0 <= 42) or (45 <= LA5_0 <= 46) or (48 <= LA5_0 <= 61)) : alt5 = 1 if alt5 == 1: # C.g:0:0: declaration - self.following.append(self.FOLLOW_declaration_in_function_definition156) + self.following.append(self.FOLLOW_declaration_in_function_definition166) self.declaration() self.following.pop() if self.failed: @@ -752,7 +771,7 @@ class CParser(Parser): cnt5 += 1 - self.following.append(self.FOLLOW_compound_statement_in_function_definition161) + self.following.append(self.FOLLOW_compound_statement_in_function_definition171) a = self.compound_statement() self.following.pop() if self.failed: @@ -760,8 +779,8 @@ class CParser(Parser): elif alt6 == 2: - # C.g:96:5: b= compound_statement - self.following.append(self.FOLLOW_compound_statement_in_function_definition170) + # C.g:148:5: b= compound_statement + self.following.append(self.FOLLOW_compound_statement_in_function_definition180) b = self.compound_statement() self.following.pop() if self.failed: @@ -813,7 +832,7 @@ class CParser(Parser): # $ANTLR start declaration - # C.g:114:1: declaration : (a= 'typedef' (b= declaration_specifiers )? c= init_declarator_list d= ';' | s= declaration_specifiers (t= init_declarator_list )? e= ';' ); + # C.g:166:1: declaration : (a= 'typedef' (b= declaration_specifiers )? c= init_declarator_list d= ';' | s= declaration_specifiers (t= init_declarator_list )? e= ';' ); def declaration(self, ): declaration_StartIndex = self.input.index() @@ -834,44 +853,44 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 4): return - # C.g:115:2: (a= 'typedef' (b= declaration_specifiers )? c= init_declarator_list d= ';' | s= declaration_specifiers (t= init_declarator_list )? e= ';' ) + # C.g:167:2: (a= 'typedef' (b= declaration_specifiers )? c= init_declarator_list d= ';' | s= declaration_specifiers (t= init_declarator_list )? e= ';' ) alt9 = 2 LA9_0 = self.input.LA(1) if (LA9_0 == 26) : alt9 = 1 - elif (LA9_0 == IDENTIFIER or (29 <= LA9_0 <= 42) or (45 <= LA9_0 <= 46) or (48 <= LA9_0 <= 60)) : + elif (LA9_0 == IDENTIFIER or (29 <= LA9_0 <= 42) or (45 <= LA9_0 <= 46) or (48 <= LA9_0 <= 61)) : alt9 = 2 else: if self.backtracking > 0: self.failed = True return - nvae = NoViableAltException("114:1: declaration : (a= 'typedef' (b= declaration_specifiers )? c= init_declarator_list d= ';' | s= declaration_specifiers (t= init_declarator_list )? e= ';' );", 9, 0, self.input) + nvae = NoViableAltException("166:1: declaration : (a= 'typedef' (b= declaration_specifiers )? c= init_declarator_list d= ';' | s= declaration_specifiers (t= init_declarator_list )? e= ';' );", 9, 0, self.input) raise nvae if alt9 == 1: - # C.g:115:4: a= 'typedef' (b= declaration_specifiers )? c= init_declarator_list d= ';' + # C.g:167:4: a= 'typedef' (b= declaration_specifiers )? c= init_declarator_list d= ';' a = self.input.LT(1) - self.match(self.input, 26, self.FOLLOW_26_in_declaration193) + self.match(self.input, 26, self.FOLLOW_26_in_declaration203) if self.failed: return - # C.g:115:17: (b= declaration_specifiers )? + # C.g:167:17: (b= declaration_specifiers )? alt7 = 2 LA7 = self.input.LA(1) - if LA7 == 29 or LA7 == 30 or LA7 == 31 or LA7 == 32 or LA7 == 33 or LA7 == 34 or LA7 == 35 or LA7 == 36 or LA7 == 37 or LA7 == 38 or LA7 == 39 or LA7 == 40 or LA7 == 41 or LA7 == 42 or LA7 == 45 or LA7 == 46 or LA7 == 48 or LA7 == 49 or LA7 == 50 or LA7 == 51 or LA7 == 52 or LA7 == 53 or LA7 == 54 or LA7 == 55 or LA7 == 56 or LA7 == 57: + if LA7 == 29 or LA7 == 30 or LA7 == 31 or LA7 == 32 or LA7 == 33 or LA7 == 34 or LA7 == 35 or LA7 == 36 or LA7 == 37 or LA7 == 38 or LA7 == 39 or LA7 == 40 or LA7 == 41 or LA7 == 42 or LA7 == 45 or LA7 == 46 or LA7 == 48 or LA7 == 49 or LA7 == 50 or LA7 == 51 or LA7 == 52 or LA7 == 53 or LA7 == 54 or LA7 == 55 or LA7 == 56 or LA7 == 57 or LA7 == 61: alt7 = 1 elif LA7 == IDENTIFIER: LA7_13 = self.input.LA(2) - if (LA7_13 == IDENTIFIER or (29 <= LA7_13 <= 42) or (45 <= LA7_13 <= 46) or (48 <= LA7_13 <= 60) or LA7_13 == 65) : - alt7 = 1 - elif (LA7_13 == 61) : - LA7_25 = self.input.LA(3) + if (LA7_13 == 62) : + LA7_21 = self.input.LA(3) if (self.synpred10()) : alt7 = 1 + elif (LA7_13 == IDENTIFIER or (29 <= LA7_13 <= 42) or (45 <= LA7_13 <= 46) or (48 <= LA7_13 <= 61) or LA7_13 == 66) : + alt7 = 1 elif LA7 == 58: LA7_14 = self.input.LA(2) @@ -889,7 +908,7 @@ class CParser(Parser): alt7 = 1 if alt7 == 1: # C.g:0:0: b= declaration_specifiers - self.following.append(self.FOLLOW_declaration_specifiers_in_declaration197) + self.following.append(self.FOLLOW_declaration_specifiers_in_declaration207) b = self.declaration_specifiers() self.following.pop() if self.failed: @@ -897,13 +916,13 @@ class CParser(Parser): - self.following.append(self.FOLLOW_init_declarator_list_in_declaration206) + self.following.append(self.FOLLOW_init_declarator_list_in_declaration216) c = self.init_declarator_list() self.following.pop() if self.failed: return d = self.input.LT(1) - self.match(self.input, 25, self.FOLLOW_25_in_declaration210) + self.match(self.input, 25, self.FOLLOW_25_in_declaration220) if self.failed: return if self.backtracking == 0: @@ -917,21 +936,21 @@ class CParser(Parser): elif alt9 == 2: - # C.g:123:4: s= declaration_specifiers (t= init_declarator_list )? e= ';' - self.following.append(self.FOLLOW_declaration_specifiers_in_declaration224) + # C.g:175:4: s= declaration_specifiers (t= init_declarator_list )? e= ';' + self.following.append(self.FOLLOW_declaration_specifiers_in_declaration234) s = self.declaration_specifiers() self.following.pop() if self.failed: return - # C.g:123:30: (t= init_declarator_list )? + # C.g:175:30: (t= init_declarator_list )? alt8 = 2 LA8_0 = self.input.LA(1) - if (LA8_0 == IDENTIFIER or (58 <= LA8_0 <= 61) or LA8_0 == 65) : + if (LA8_0 == IDENTIFIER or (58 <= LA8_0 <= 60) or LA8_0 == 62 or LA8_0 == 66) : alt8 = 1 if alt8 == 1: # C.g:0:0: t= init_declarator_list - self.following.append(self.FOLLOW_init_declarator_list_in_declaration228) + self.following.append(self.FOLLOW_init_declarator_list_in_declaration238) t = self.init_declarator_list() self.following.pop() if self.failed: @@ -940,7 +959,7 @@ class CParser(Parser): e = self.input.LT(1) - self.match(self.input, 25, self.FOLLOW_25_in_declaration233) + self.match(self.input, 25, self.FOLLOW_25_in_declaration243) if self.failed: return if self.backtracking == 0: @@ -973,7 +992,7 @@ class CParser(Parser): # $ANTLR start declaration_specifiers - # C.g:130:1: declaration_specifiers : ( storage_class_specifier | type_specifier | type_qualifier )+ ; + # C.g:182:1: declaration_specifiers : ( storage_class_specifier | type_specifier | type_qualifier )+ ; def declaration_specifiers(self, ): retval = self.declaration_specifiers_return() @@ -984,9 +1003,9 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 5): return retval - # C.g:131:2: ( ( storage_class_specifier | type_specifier | type_qualifier )+ ) - # C.g:131:6: ( storage_class_specifier | type_specifier | type_qualifier )+ - # C.g:131:6: ( storage_class_specifier | type_specifier | type_qualifier )+ + # C.g:183:2: ( ( storage_class_specifier | type_specifier | type_qualifier )+ ) + # C.g:183:6: ( storage_class_specifier | type_specifier | type_qualifier )+ + # C.g:183:6: ( storage_class_specifier | type_specifier | type_qualifier )+ cnt10 = 0 while True: #loop10 alt10 = 4 @@ -1030,12 +1049,12 @@ class CParser(Parser): alt10 = 1 elif LA10 == 34 or LA10 == 35 or LA10 == 36 or LA10 == 37 or LA10 == 38 or LA10 == 39 or LA10 == 40 or LA10 == 41 or LA10 == 42 or LA10 == 45 or LA10 == 46 or LA10 == 48: alt10 = 2 - elif LA10 == 49 or LA10 == 50 or LA10 == 51 or LA10 == 52 or LA10 == 54 or LA10 == 55 or LA10 == 56 or LA10 == 57: + elif LA10 == 49 or LA10 == 50 or LA10 == 51 or LA10 == 52 or LA10 == 54 or LA10 == 55 or LA10 == 56 or LA10 == 57 or LA10 == 61: alt10 = 3 if alt10 == 1: - # C.g:131:10: storage_class_specifier - self.following.append(self.FOLLOW_storage_class_specifier_in_declaration_specifiers254) + # C.g:183:10: storage_class_specifier + self.following.append(self.FOLLOW_storage_class_specifier_in_declaration_specifiers264) self.storage_class_specifier() self.following.pop() if self.failed: @@ -1043,8 +1062,8 @@ class CParser(Parser): elif alt10 == 2: - # C.g:132:7: type_specifier - self.following.append(self.FOLLOW_type_specifier_in_declaration_specifiers262) + # C.g:184:7: type_specifier + self.following.append(self.FOLLOW_type_specifier_in_declaration_specifiers272) self.type_specifier() self.following.pop() if self.failed: @@ -1052,8 +1071,8 @@ class CParser(Parser): elif alt10 == 3: - # C.g:133:13: type_qualifier - self.following.append(self.FOLLOW_type_qualifier_in_declaration_specifiers276) + # C.g:185:13: type_qualifier + self.following.append(self.FOLLOW_type_qualifier_in_declaration_specifiers286) self.type_qualifier() self.following.pop() if self.failed: @@ -1101,7 +1120,7 @@ class CParser(Parser): # $ANTLR start init_declarator_list - # C.g:137:1: init_declarator_list : init_declarator ( ',' init_declarator )* ; + # C.g:189:1: init_declarator_list : init_declarator ( ',' init_declarator )* ; def init_declarator_list(self, ): retval = self.init_declarator_list_return() @@ -1112,14 +1131,14 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 6): return retval - # C.g:138:2: ( init_declarator ( ',' init_declarator )* ) - # C.g:138:4: init_declarator ( ',' init_declarator )* - self.following.append(self.FOLLOW_init_declarator_in_init_declarator_list298) + # C.g:190:2: ( init_declarator ( ',' init_declarator )* ) + # C.g:190:4: init_declarator ( ',' init_declarator )* + self.following.append(self.FOLLOW_init_declarator_in_init_declarator_list308) self.init_declarator() self.following.pop() if self.failed: return retval - # C.g:138:20: ( ',' init_declarator )* + # C.g:190:20: ( ',' init_declarator )* while True: #loop11 alt11 = 2 LA11_0 = self.input.LA(1) @@ -1129,11 +1148,11 @@ class CParser(Parser): if alt11 == 1: - # C.g:138:21: ',' init_declarator - self.match(self.input, 27, self.FOLLOW_27_in_init_declarator_list301) + # C.g:190:21: ',' init_declarator + self.match(self.input, 27, self.FOLLOW_27_in_init_declarator_list311) if self.failed: return retval - self.following.append(self.FOLLOW_init_declarator_in_init_declarator_list303) + self.following.append(self.FOLLOW_init_declarator_in_init_declarator_list313) self.init_declarator() self.following.pop() if self.failed: @@ -1165,7 +1184,7 @@ class CParser(Parser): # $ANTLR start init_declarator - # C.g:141:1: init_declarator : declarator ( '=' initializer )? ; + # C.g:193:1: init_declarator : declarator ( '=' initializer )? ; def init_declarator(self, ): init_declarator_StartIndex = self.input.index() @@ -1174,25 +1193,25 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 7): return - # C.g:142:2: ( declarator ( '=' initializer )? ) - # C.g:142:4: declarator ( '=' initializer )? - self.following.append(self.FOLLOW_declarator_in_init_declarator316) + # C.g:194:2: ( declarator ( '=' initializer )? ) + # C.g:194:4: declarator ( '=' initializer )? + self.following.append(self.FOLLOW_declarator_in_init_declarator326) self.declarator() self.following.pop() if self.failed: return - # C.g:142:15: ( '=' initializer )? + # C.g:194:15: ( '=' initializer )? alt12 = 2 LA12_0 = self.input.LA(1) if (LA12_0 == 28) : alt12 = 1 if alt12 == 1: - # C.g:142:16: '=' initializer - self.match(self.input, 28, self.FOLLOW_28_in_init_declarator319) + # C.g:194:16: '=' initializer + self.match(self.input, 28, self.FOLLOW_28_in_init_declarator329) if self.failed: return - self.following.append(self.FOLLOW_initializer_in_init_declarator321) + self.following.append(self.FOLLOW_initializer_in_init_declarator331) self.initializer() self.following.pop() if self.failed: @@ -1219,7 +1238,7 @@ class CParser(Parser): # $ANTLR start storage_class_specifier - # C.g:145:1: storage_class_specifier : ( 'extern' | 'static' | 'auto' | 'register' | 'STATIC' ); + # C.g:197:1: storage_class_specifier : ( 'extern' | 'static' | 'auto' | 'register' | 'STATIC' ); def storage_class_specifier(self, ): storage_class_specifier_StartIndex = self.input.index() @@ -1228,7 +1247,7 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 8): return - # C.g:146:2: ( 'extern' | 'static' | 'auto' | 'register' | 'STATIC' ) + # C.g:198:2: ( 'extern' | 'static' | 'auto' | 'register' | 'STATIC' ) # C.g: if (29 <= self.input.LA(1) <= 33): self.input.consume(); @@ -1266,7 +1285,7 @@ class CParser(Parser): # $ANTLR start type_specifier - # C.g:153:1: type_specifier : ( 'void' | 'char' | 'short' | 'int' | 'long' | 'float' | 'double' | 'signed' | 'unsigned' | s= struct_or_union_specifier | e= enum_specifier | ( IDENTIFIER ( type_qualifier )* declarator )=> type_id ); + # C.g:205:1: type_specifier : ( 'void' | 'char' | 'short' | 'int' | 'long' | 'float' | 'double' | 'signed' | 'unsigned' | s= struct_or_union_specifier | e= enum_specifier | ( IDENTIFIER ( type_qualifier )* declarator )=> type_id ); def type_specifier(self, ): type_specifier_StartIndex = self.input.index() @@ -1280,7 +1299,7 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 9): return - # C.g:154:2: ( 'void' | 'char' | 'short' | 'int' | 'long' | 'float' | 'double' | 'signed' | 'unsigned' | s= struct_or_union_specifier | e= enum_specifier | ( IDENTIFIER ( type_qualifier )* declarator )=> type_id ) + # C.g:206:2: ( 'void' | 'char' | 'short' | 'int' | 'long' | 'float' | 'double' | 'signed' | 'unsigned' | s= struct_or_union_specifier | e= enum_specifier | ( IDENTIFIER ( type_qualifier )* declarator )=> type_id ) alt13 = 12 LA13_0 = self.input.LA(1) @@ -1313,76 +1332,76 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("153:1: type_specifier : ( 'void' | 'char' | 'short' | 'int' | 'long' | 'float' | 'double' | 'signed' | 'unsigned' | s= struct_or_union_specifier | e= enum_specifier | ( IDENTIFIER ( type_qualifier )* declarator )=> type_id );", 13, 0, self.input) + nvae = NoViableAltException("205:1: type_specifier : ( 'void' | 'char' | 'short' | 'int' | 'long' | 'float' | 'double' | 'signed' | 'unsigned' | s= struct_or_union_specifier | e= enum_specifier | ( IDENTIFIER ( type_qualifier )* declarator )=> type_id );", 13, 0, self.input) raise nvae if alt13 == 1: - # C.g:154:4: 'void' - self.match(self.input, 34, self.FOLLOW_34_in_type_specifier366) + # C.g:206:4: 'void' + self.match(self.input, 34, self.FOLLOW_34_in_type_specifier376) if self.failed: return elif alt13 == 2: - # C.g:155:4: 'char' - self.match(self.input, 35, self.FOLLOW_35_in_type_specifier371) + # C.g:207:4: 'char' + self.match(self.input, 35, self.FOLLOW_35_in_type_specifier381) if self.failed: return elif alt13 == 3: - # C.g:156:4: 'short' - self.match(self.input, 36, self.FOLLOW_36_in_type_specifier376) + # C.g:208:4: 'short' + self.match(self.input, 36, self.FOLLOW_36_in_type_specifier386) if self.failed: return elif alt13 == 4: - # C.g:157:4: 'int' - self.match(self.input, 37, self.FOLLOW_37_in_type_specifier381) + # C.g:209:4: 'int' + self.match(self.input, 37, self.FOLLOW_37_in_type_specifier391) if self.failed: return elif alt13 == 5: - # C.g:158:4: 'long' - self.match(self.input, 38, self.FOLLOW_38_in_type_specifier386) + # C.g:210:4: 'long' + self.match(self.input, 38, self.FOLLOW_38_in_type_specifier396) if self.failed: return elif alt13 == 6: - # C.g:159:4: 'float' - self.match(self.input, 39, self.FOLLOW_39_in_type_specifier391) + # C.g:211:4: 'float' + self.match(self.input, 39, self.FOLLOW_39_in_type_specifier401) if self.failed: return elif alt13 == 7: - # C.g:160:4: 'double' - self.match(self.input, 40, self.FOLLOW_40_in_type_specifier396) + # C.g:212:4: 'double' + self.match(self.input, 40, self.FOLLOW_40_in_type_specifier406) if self.failed: return elif alt13 == 8: - # C.g:161:4: 'signed' - self.match(self.input, 41, self.FOLLOW_41_in_type_specifier401) + # C.g:213:4: 'signed' + self.match(self.input, 41, self.FOLLOW_41_in_type_specifier411) if self.failed: return elif alt13 == 9: - # C.g:162:4: 'unsigned' - self.match(self.input, 42, self.FOLLOW_42_in_type_specifier406) + # C.g:214:4: 'unsigned' + self.match(self.input, 42, self.FOLLOW_42_in_type_specifier416) if self.failed: return elif alt13 == 10: - # C.g:163:4: s= struct_or_union_specifier - self.following.append(self.FOLLOW_struct_or_union_specifier_in_type_specifier413) + # C.g:215:4: s= struct_or_union_specifier + self.following.append(self.FOLLOW_struct_or_union_specifier_in_type_specifier423) s = self.struct_or_union_specifier() self.following.pop() if self.failed: @@ -1396,8 +1415,8 @@ class CParser(Parser): elif alt13 == 11: - # C.g:168:4: e= enum_specifier - self.following.append(self.FOLLOW_enum_specifier_in_type_specifier423) + # C.g:220:4: e= enum_specifier + self.following.append(self.FOLLOW_enum_specifier_in_type_specifier433) e = self.enum_specifier() self.following.pop() if self.failed: @@ -1411,8 +1430,8 @@ class CParser(Parser): elif alt13 == 12: - # C.g:173:4: ( IDENTIFIER ( type_qualifier )* declarator )=> type_id - self.following.append(self.FOLLOW_type_id_in_type_specifier441) + # C.g:225:4: ( IDENTIFIER ( type_qualifier )* declarator )=> type_id + self.following.append(self.FOLLOW_type_id_in_type_specifier451) self.type_id() self.following.pop() if self.failed: @@ -1435,7 +1454,7 @@ class CParser(Parser): # $ANTLR start type_id - # C.g:176:1: type_id : IDENTIFIER ; + # C.g:228:1: type_id : IDENTIFIER ; def type_id(self, ): type_id_StartIndex = self.input.index() @@ -1444,9 +1463,9 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 10): return - # C.g:177:5: ( IDENTIFIER ) - # C.g:177:9: IDENTIFIER - self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_type_id457) + # C.g:229:5: ( IDENTIFIER ) + # C.g:229:9: IDENTIFIER + self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_type_id467) if self.failed: return @@ -1474,7 +1493,7 @@ class CParser(Parser): # $ANTLR start struct_or_union_specifier - # C.g:181:1: struct_or_union_specifier options {k=3; } : ( struct_or_union ( IDENTIFIER )? '{' struct_declaration_list '}' | struct_or_union IDENTIFIER ); + # C.g:233:1: struct_or_union_specifier options {k=3; } : ( struct_or_union ( IDENTIFIER )? '{' struct_declaration_list '}' | struct_or_union IDENTIFIER ); def struct_or_union_specifier(self, ): retval = self.struct_or_union_specifier_return() @@ -1485,7 +1504,7 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 11): return retval - # C.g:183:2: ( struct_or_union ( IDENTIFIER )? '{' struct_declaration_list '}' | struct_or_union IDENTIFIER ) + # C.g:235:2: ( struct_or_union ( IDENTIFIER )? '{' struct_declaration_list '}' | struct_or_union IDENTIFIER ) alt15 = 2 LA15_0 = self.input.LA(1) @@ -1497,14 +1516,14 @@ class CParser(Parser): if (LA15_2 == 43) : alt15 = 1 - elif (LA15_2 == EOF or LA15_2 == IDENTIFIER or LA15_2 == 25 or LA15_2 == 27 or (29 <= LA15_2 <= 42) or (45 <= LA15_2 <= 63) or LA15_2 == 65) : + elif (LA15_2 == EOF or LA15_2 == IDENTIFIER or LA15_2 == 25 or LA15_2 == 27 or (29 <= LA15_2 <= 42) or (45 <= LA15_2 <= 64) or LA15_2 == 66) : alt15 = 2 else: if self.backtracking > 0: self.failed = True return retval - nvae = NoViableAltException("181:1: struct_or_union_specifier options {k=3; } : ( struct_or_union ( IDENTIFIER )? '{' struct_declaration_list '}' | struct_or_union IDENTIFIER );", 15, 2, self.input) + nvae = NoViableAltException("233:1: struct_or_union_specifier options {k=3; } : ( struct_or_union ( IDENTIFIER )? '{' struct_declaration_list '}' | struct_or_union IDENTIFIER );", 15, 2, self.input) raise nvae @@ -1515,7 +1534,7 @@ class CParser(Parser): self.failed = True return retval - nvae = NoViableAltException("181:1: struct_or_union_specifier options {k=3; } : ( struct_or_union ( IDENTIFIER )? '{' struct_declaration_list '}' | struct_or_union IDENTIFIER );", 15, 1, self.input) + nvae = NoViableAltException("233:1: struct_or_union_specifier options {k=3; } : ( struct_or_union ( IDENTIFIER )? '{' struct_declaration_list '}' | struct_or_union IDENTIFIER );", 15, 1, self.input) raise nvae @@ -1524,18 +1543,18 @@ class CParser(Parser): self.failed = True return retval - nvae = NoViableAltException("181:1: struct_or_union_specifier options {k=3; } : ( struct_or_union ( IDENTIFIER )? '{' struct_declaration_list '}' | struct_or_union IDENTIFIER );", 15, 0, self.input) + nvae = NoViableAltException("233:1: struct_or_union_specifier options {k=3; } : ( struct_or_union ( IDENTIFIER )? '{' struct_declaration_list '}' | struct_or_union IDENTIFIER );", 15, 0, self.input) raise nvae if alt15 == 1: - # C.g:183:4: struct_or_union ( IDENTIFIER )? '{' struct_declaration_list '}' - self.following.append(self.FOLLOW_struct_or_union_in_struct_or_union_specifier484) + # C.g:235:4: struct_or_union ( IDENTIFIER )? '{' struct_declaration_list '}' + self.following.append(self.FOLLOW_struct_or_union_in_struct_or_union_specifier494) self.struct_or_union() self.following.pop() if self.failed: return retval - # C.g:183:20: ( IDENTIFIER )? + # C.g:235:20: ( IDENTIFIER )? alt14 = 2 LA14_0 = self.input.LA(1) @@ -1543,33 +1562,33 @@ class CParser(Parser): alt14 = 1 if alt14 == 1: # C.g:0:0: IDENTIFIER - self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_struct_or_union_specifier486) + self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_struct_or_union_specifier496) if self.failed: return retval - self.match(self.input, 43, self.FOLLOW_43_in_struct_or_union_specifier489) + self.match(self.input, 43, self.FOLLOW_43_in_struct_or_union_specifier499) if self.failed: return retval - self.following.append(self.FOLLOW_struct_declaration_list_in_struct_or_union_specifier491) + self.following.append(self.FOLLOW_struct_declaration_list_in_struct_or_union_specifier501) self.struct_declaration_list() self.following.pop() if self.failed: return retval - self.match(self.input, 44, self.FOLLOW_44_in_struct_or_union_specifier493) + self.match(self.input, 44, self.FOLLOW_44_in_struct_or_union_specifier503) if self.failed: return retval elif alt15 == 2: - # C.g:184:4: struct_or_union IDENTIFIER - self.following.append(self.FOLLOW_struct_or_union_in_struct_or_union_specifier498) + # C.g:236:4: struct_or_union IDENTIFIER + self.following.append(self.FOLLOW_struct_or_union_in_struct_or_union_specifier508) self.struct_or_union() self.following.pop() if self.failed: return retval - self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_struct_or_union_specifier500) + self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_struct_or_union_specifier510) if self.failed: return retval @@ -1592,7 +1611,7 @@ class CParser(Parser): # $ANTLR start struct_or_union - # C.g:187:1: struct_or_union : ( 'struct' | 'union' ); + # C.g:239:1: struct_or_union : ( 'struct' | 'union' ); def struct_or_union(self, ): struct_or_union_StartIndex = self.input.index() @@ -1601,7 +1620,7 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 12): return - # C.g:188:2: ( 'struct' | 'union' ) + # C.g:240:2: ( 'struct' | 'union' ) # C.g: if (45 <= self.input.LA(1) <= 46): self.input.consume(); @@ -1639,7 +1658,7 @@ class CParser(Parser): # $ANTLR start struct_declaration_list - # C.g:192:1: struct_declaration_list : ( struct_declaration )+ ; + # C.g:244:1: struct_declaration_list : ( struct_declaration )+ ; def struct_declaration_list(self, ): struct_declaration_list_StartIndex = self.input.index() @@ -1648,21 +1667,21 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 13): return - # C.g:193:2: ( ( struct_declaration )+ ) - # C.g:193:4: ( struct_declaration )+ - # C.g:193:4: ( struct_declaration )+ + # C.g:245:2: ( ( struct_declaration )+ ) + # C.g:245:4: ( struct_declaration )+ + # C.g:245:4: ( struct_declaration )+ cnt16 = 0 while True: #loop16 alt16 = 2 LA16_0 = self.input.LA(1) - if (LA16_0 == IDENTIFIER or (34 <= LA16_0 <= 42) or (45 <= LA16_0 <= 46) or (48 <= LA16_0 <= 60)) : + if (LA16_0 == IDENTIFIER or (34 <= LA16_0 <= 42) or (45 <= LA16_0 <= 46) or (48 <= LA16_0 <= 61)) : alt16 = 1 if alt16 == 1: # C.g:0:0: struct_declaration - self.following.append(self.FOLLOW_struct_declaration_in_struct_declaration_list527) + self.following.append(self.FOLLOW_struct_declaration_in_struct_declaration_list537) self.struct_declaration() self.following.pop() if self.failed: @@ -1702,7 +1721,7 @@ class CParser(Parser): # $ANTLR start struct_declaration - # C.g:196:1: struct_declaration : specifier_qualifier_list struct_declarator_list ';' ; + # C.g:248:1: struct_declaration : specifier_qualifier_list struct_declarator_list ';' ; def struct_declaration(self, ): struct_declaration_StartIndex = self.input.index() @@ -1711,19 +1730,19 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 14): return - # C.g:197:2: ( specifier_qualifier_list struct_declarator_list ';' ) - # C.g:197:4: specifier_qualifier_list struct_declarator_list ';' - self.following.append(self.FOLLOW_specifier_qualifier_list_in_struct_declaration539) + # C.g:249:2: ( specifier_qualifier_list struct_declarator_list ';' ) + # C.g:249:4: specifier_qualifier_list struct_declarator_list ';' + self.following.append(self.FOLLOW_specifier_qualifier_list_in_struct_declaration549) self.specifier_qualifier_list() self.following.pop() if self.failed: return - self.following.append(self.FOLLOW_struct_declarator_list_in_struct_declaration541) + self.following.append(self.FOLLOW_struct_declarator_list_in_struct_declaration551) self.struct_declarator_list() self.following.pop() if self.failed: return - self.match(self.input, 25, self.FOLLOW_25_in_struct_declaration543) + self.match(self.input, 25, self.FOLLOW_25_in_struct_declaration553) if self.failed: return @@ -1745,7 +1764,7 @@ class CParser(Parser): # $ANTLR start specifier_qualifier_list - # C.g:200:1: specifier_qualifier_list : ( type_qualifier | type_specifier )+ ; + # C.g:252:1: specifier_qualifier_list : ( type_qualifier | type_specifier )+ ; def specifier_qualifier_list(self, ): specifier_qualifier_list_StartIndex = self.input.index() @@ -1754,9 +1773,9 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 15): return - # C.g:201:2: ( ( type_qualifier | type_specifier )+ ) - # C.g:201:4: ( type_qualifier | type_specifier )+ - # C.g:201:4: ( type_qualifier | type_specifier )+ + # C.g:253:2: ( ( type_qualifier | type_specifier )+ ) + # C.g:253:4: ( type_qualifier | type_specifier )+ + # C.g:253:4: ( type_qualifier | type_specifier )+ cnt17 = 0 while True: #loop17 alt17 = 3 @@ -1784,9 +1803,9 @@ class CParser(Parser): elif LA17 == IDENTIFIER: LA17 = self.input.LA(2) - if LA17 == EOF or LA17 == IDENTIFIER or LA17 == 34 or LA17 == 35 or LA17 == 36 or LA17 == 37 or LA17 == 38 or LA17 == 39 or LA17 == 40 or LA17 == 41 or LA17 == 42 or LA17 == 45 or LA17 == 46 or LA17 == 48 or LA17 == 49 or LA17 == 50 or LA17 == 51 or LA17 == 52 or LA17 == 53 or LA17 == 54 or LA17 == 55 or LA17 == 56 or LA17 == 57 or LA17 == 58 or LA17 == 59 or LA17 == 60 or LA17 == 62 or LA17 == 65: + if LA17 == EOF or LA17 == IDENTIFIER or LA17 == 34 or LA17 == 35 or LA17 == 36 or LA17 == 37 or LA17 == 38 or LA17 == 39 or LA17 == 40 or LA17 == 41 or LA17 == 42 or LA17 == 45 or LA17 == 46 or LA17 == 48 or LA17 == 49 or LA17 == 50 or LA17 == 51 or LA17 == 52 or LA17 == 53 or LA17 == 54 or LA17 == 55 or LA17 == 56 or LA17 == 57 or LA17 == 58 or LA17 == 59 or LA17 == 60 or LA17 == 61 or LA17 == 63 or LA17 == 66: alt17 = 2 - elif LA17 == 61: + elif LA17 == 62: LA17_94 = self.input.LA(3) if (self.synpred40()) : @@ -1800,7 +1819,7 @@ class CParser(Parser): alt17 = 2 - elif LA17 == 63: + elif LA17 == 64: LA17_96 = self.input.LA(3) if (self.synpred40()) : @@ -1808,14 +1827,14 @@ class CParser(Parser): - elif LA17 == 49 or LA17 == 50 or LA17 == 51 or LA17 == 52 or LA17 == 53 or LA17 == 54 or LA17 == 55 or LA17 == 56 or LA17 == 57: + elif LA17 == 49 or LA17 == 50 or LA17 == 51 or LA17 == 52 or LA17 == 53 or LA17 == 54 or LA17 == 55 or LA17 == 56 or LA17 == 57 or LA17 == 61: alt17 = 1 elif LA17 == 34 or LA17 == 35 or LA17 == 36 or LA17 == 37 or LA17 == 38 or LA17 == 39 or LA17 == 40 or LA17 == 41 or LA17 == 42 or LA17 == 45 or LA17 == 46 or LA17 == 48: alt17 = 2 if alt17 == 1: - # C.g:201:6: type_qualifier - self.following.append(self.FOLLOW_type_qualifier_in_specifier_qualifier_list556) + # C.g:253:6: type_qualifier + self.following.append(self.FOLLOW_type_qualifier_in_specifier_qualifier_list566) self.type_qualifier() self.following.pop() if self.failed: @@ -1823,8 +1842,8 @@ class CParser(Parser): elif alt17 == 2: - # C.g:201:23: type_specifier - self.following.append(self.FOLLOW_type_specifier_in_specifier_qualifier_list560) + # C.g:253:23: type_specifier + self.following.append(self.FOLLOW_type_specifier_in_specifier_qualifier_list570) self.type_specifier() self.following.pop() if self.failed: @@ -1864,7 +1883,7 @@ class CParser(Parser): # $ANTLR start struct_declarator_list - # C.g:204:1: struct_declarator_list : struct_declarator ( ',' struct_declarator )* ; + # C.g:256:1: struct_declarator_list : struct_declarator ( ',' struct_declarator )* ; def struct_declarator_list(self, ): struct_declarator_list_StartIndex = self.input.index() @@ -1873,14 +1892,14 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 16): return - # C.g:205:2: ( struct_declarator ( ',' struct_declarator )* ) - # C.g:205:4: struct_declarator ( ',' struct_declarator )* - self.following.append(self.FOLLOW_struct_declarator_in_struct_declarator_list574) + # C.g:257:2: ( struct_declarator ( ',' struct_declarator )* ) + # C.g:257:4: struct_declarator ( ',' struct_declarator )* + self.following.append(self.FOLLOW_struct_declarator_in_struct_declarator_list584) self.struct_declarator() self.following.pop() if self.failed: return - # C.g:205:22: ( ',' struct_declarator )* + # C.g:257:22: ( ',' struct_declarator )* while True: #loop18 alt18 = 2 LA18_0 = self.input.LA(1) @@ -1890,11 +1909,11 @@ class CParser(Parser): if alt18 == 1: - # C.g:205:23: ',' struct_declarator - self.match(self.input, 27, self.FOLLOW_27_in_struct_declarator_list577) + # C.g:257:23: ',' struct_declarator + self.match(self.input, 27, self.FOLLOW_27_in_struct_declarator_list587) if self.failed: return - self.following.append(self.FOLLOW_struct_declarator_in_struct_declarator_list579) + self.following.append(self.FOLLOW_struct_declarator_in_struct_declarator_list589) self.struct_declarator() self.following.pop() if self.failed: @@ -1924,7 +1943,7 @@ class CParser(Parser): # $ANTLR start struct_declarator - # C.g:208:1: struct_declarator : ( declarator ( ':' constant_expression )? | ':' constant_expression ); + # C.g:260:1: struct_declarator : ( declarator ( ':' constant_expression )? | ':' constant_expression ); def struct_declarator(self, ): struct_declarator_StartIndex = self.input.index() @@ -1933,11 +1952,11 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 17): return - # C.g:209:2: ( declarator ( ':' constant_expression )? | ':' constant_expression ) + # C.g:261:2: ( declarator ( ':' constant_expression )? | ':' constant_expression ) alt20 = 2 LA20_0 = self.input.LA(1) - if (LA20_0 == IDENTIFIER or (58 <= LA20_0 <= 61) or LA20_0 == 65) : + if (LA20_0 == IDENTIFIER or (58 <= LA20_0 <= 60) or LA20_0 == 62 or LA20_0 == 66) : alt20 = 1 elif (LA20_0 == 47) : alt20 = 2 @@ -1946,29 +1965,29 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("208:1: struct_declarator : ( declarator ( ':' constant_expression )? | ':' constant_expression );", 20, 0, self.input) + nvae = NoViableAltException("260:1: struct_declarator : ( declarator ( ':' constant_expression )? | ':' constant_expression );", 20, 0, self.input) raise nvae if alt20 == 1: - # C.g:209:4: declarator ( ':' constant_expression )? - self.following.append(self.FOLLOW_declarator_in_struct_declarator592) + # C.g:261:4: declarator ( ':' constant_expression )? + self.following.append(self.FOLLOW_declarator_in_struct_declarator602) self.declarator() self.following.pop() if self.failed: return - # C.g:209:15: ( ':' constant_expression )? + # C.g:261:15: ( ':' constant_expression )? alt19 = 2 LA19_0 = self.input.LA(1) if (LA19_0 == 47) : alt19 = 1 if alt19 == 1: - # C.g:209:16: ':' constant_expression - self.match(self.input, 47, self.FOLLOW_47_in_struct_declarator595) + # C.g:261:16: ':' constant_expression + self.match(self.input, 47, self.FOLLOW_47_in_struct_declarator605) if self.failed: return - self.following.append(self.FOLLOW_constant_expression_in_struct_declarator597) + self.following.append(self.FOLLOW_constant_expression_in_struct_declarator607) self.constant_expression() self.following.pop() if self.failed: @@ -1979,11 +1998,11 @@ class CParser(Parser): elif alt20 == 2: - # C.g:210:4: ':' constant_expression - self.match(self.input, 47, self.FOLLOW_47_in_struct_declarator604) + # C.g:262:4: ':' constant_expression + self.match(self.input, 47, self.FOLLOW_47_in_struct_declarator614) if self.failed: return - self.following.append(self.FOLLOW_constant_expression_in_struct_declarator606) + self.following.append(self.FOLLOW_constant_expression_in_struct_declarator616) self.constant_expression() self.following.pop() if self.failed: @@ -2012,7 +2031,7 @@ class CParser(Parser): # $ANTLR start enum_specifier - # C.g:213:1: enum_specifier options {k=3; } : ( 'enum' '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER ); + # C.g:265:1: enum_specifier options {k=3; } : ( 'enum' '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER ); def enum_specifier(self, ): retval = self.enum_specifier_return() @@ -2023,7 +2042,7 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 18): return retval - # C.g:215:2: ( 'enum' '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER ) + # C.g:267:2: ( 'enum' '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER ) alt23 = 3 LA23_0 = self.input.LA(1) @@ -2035,14 +2054,14 @@ class CParser(Parser): if (LA23_2 == 43) : alt23 = 2 - elif (LA23_2 == EOF or LA23_2 == IDENTIFIER or LA23_2 == 25 or LA23_2 == 27 or (29 <= LA23_2 <= 42) or (45 <= LA23_2 <= 63) or LA23_2 == 65) : + elif (LA23_2 == EOF or LA23_2 == IDENTIFIER or LA23_2 == 25 or LA23_2 == 27 or (29 <= LA23_2 <= 42) or (45 <= LA23_2 <= 64) or LA23_2 == 66) : alt23 = 3 else: if self.backtracking > 0: self.failed = True return retval - nvae = NoViableAltException("213:1: enum_specifier options {k=3; } : ( 'enum' '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER );", 23, 2, self.input) + nvae = NoViableAltException("265:1: enum_specifier options {k=3; } : ( 'enum' '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER );", 23, 2, self.input) raise nvae @@ -2053,7 +2072,7 @@ class CParser(Parser): self.failed = True return retval - nvae = NoViableAltException("213:1: enum_specifier options {k=3; } : ( 'enum' '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER );", 23, 1, self.input) + nvae = NoViableAltException("265:1: enum_specifier options {k=3; } : ( 'enum' '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER );", 23, 1, self.input) raise nvae @@ -2062,24 +2081,24 @@ class CParser(Parser): self.failed = True return retval - nvae = NoViableAltException("213:1: enum_specifier options {k=3; } : ( 'enum' '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER );", 23, 0, self.input) + nvae = NoViableAltException("265:1: enum_specifier options {k=3; } : ( 'enum' '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER );", 23, 0, self.input) raise nvae if alt23 == 1: - # C.g:215:4: 'enum' '{' enumerator_list ( ',' )? '}' - self.match(self.input, 48, self.FOLLOW_48_in_enum_specifier624) + # C.g:267:4: 'enum' '{' enumerator_list ( ',' )? '}' + self.match(self.input, 48, self.FOLLOW_48_in_enum_specifier634) if self.failed: return retval - self.match(self.input, 43, self.FOLLOW_43_in_enum_specifier626) + self.match(self.input, 43, self.FOLLOW_43_in_enum_specifier636) if self.failed: return retval - self.following.append(self.FOLLOW_enumerator_list_in_enum_specifier628) + self.following.append(self.FOLLOW_enumerator_list_in_enum_specifier638) self.enumerator_list() self.following.pop() if self.failed: return retval - # C.g:215:31: ( ',' )? + # C.g:267:31: ( ',' )? alt21 = 2 LA21_0 = self.input.LA(1) @@ -2087,34 +2106,34 @@ class CParser(Parser): alt21 = 1 if alt21 == 1: # C.g:0:0: ',' - self.match(self.input, 27, self.FOLLOW_27_in_enum_specifier630) + self.match(self.input, 27, self.FOLLOW_27_in_enum_specifier640) if self.failed: return retval - self.match(self.input, 44, self.FOLLOW_44_in_enum_specifier633) + self.match(self.input, 44, self.FOLLOW_44_in_enum_specifier643) if self.failed: return retval elif alt23 == 2: - # C.g:216:4: 'enum' IDENTIFIER '{' enumerator_list ( ',' )? '}' - self.match(self.input, 48, self.FOLLOW_48_in_enum_specifier638) + # C.g:268:4: 'enum' IDENTIFIER '{' enumerator_list ( ',' )? '}' + self.match(self.input, 48, self.FOLLOW_48_in_enum_specifier648) if self.failed: return retval - self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_enum_specifier640) + self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_enum_specifier650) if self.failed: return retval - self.match(self.input, 43, self.FOLLOW_43_in_enum_specifier642) + self.match(self.input, 43, self.FOLLOW_43_in_enum_specifier652) if self.failed: return retval - self.following.append(self.FOLLOW_enumerator_list_in_enum_specifier644) + self.following.append(self.FOLLOW_enumerator_list_in_enum_specifier654) self.enumerator_list() self.following.pop() if self.failed: return retval - # C.g:216:42: ( ',' )? + # C.g:268:42: ( ',' )? alt22 = 2 LA22_0 = self.input.LA(1) @@ -2122,23 +2141,23 @@ class CParser(Parser): alt22 = 1 if alt22 == 1: # C.g:0:0: ',' - self.match(self.input, 27, self.FOLLOW_27_in_enum_specifier646) + self.match(self.input, 27, self.FOLLOW_27_in_enum_specifier656) if self.failed: return retval - self.match(self.input, 44, self.FOLLOW_44_in_enum_specifier649) + self.match(self.input, 44, self.FOLLOW_44_in_enum_specifier659) if self.failed: return retval elif alt23 == 3: - # C.g:217:4: 'enum' IDENTIFIER - self.match(self.input, 48, self.FOLLOW_48_in_enum_specifier654) + # C.g:269:4: 'enum' IDENTIFIER + self.match(self.input, 48, self.FOLLOW_48_in_enum_specifier664) if self.failed: return retval - self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_enum_specifier656) + self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_enum_specifier666) if self.failed: return retval @@ -2161,7 +2180,7 @@ class CParser(Parser): # $ANTLR start enumerator_list - # C.g:220:1: enumerator_list : enumerator ( ',' enumerator )* ; + # C.g:272:1: enumerator_list : enumerator ( ',' enumerator )* ; def enumerator_list(self, ): enumerator_list_StartIndex = self.input.index() @@ -2170,14 +2189,14 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 19): return - # C.g:221:2: ( enumerator ( ',' enumerator )* ) - # C.g:221:4: enumerator ( ',' enumerator )* - self.following.append(self.FOLLOW_enumerator_in_enumerator_list667) + # C.g:273:2: ( enumerator ( ',' enumerator )* ) + # C.g:273:4: enumerator ( ',' enumerator )* + self.following.append(self.FOLLOW_enumerator_in_enumerator_list677) self.enumerator() self.following.pop() if self.failed: return - # C.g:221:15: ( ',' enumerator )* + # C.g:273:15: ( ',' enumerator )* while True: #loop24 alt24 = 2 LA24_0 = self.input.LA(1) @@ -2192,11 +2211,11 @@ class CParser(Parser): if alt24 == 1: - # C.g:221:16: ',' enumerator - self.match(self.input, 27, self.FOLLOW_27_in_enumerator_list670) + # C.g:273:16: ',' enumerator + self.match(self.input, 27, self.FOLLOW_27_in_enumerator_list680) if self.failed: return - self.following.append(self.FOLLOW_enumerator_in_enumerator_list672) + self.following.append(self.FOLLOW_enumerator_in_enumerator_list682) self.enumerator() self.following.pop() if self.failed: @@ -2226,7 +2245,7 @@ class CParser(Parser): # $ANTLR start enumerator - # C.g:224:1: enumerator : IDENTIFIER ( '=' constant_expression )? ; + # C.g:276:1: enumerator : IDENTIFIER ( '=' constant_expression )? ; def enumerator(self, ): enumerator_StartIndex = self.input.index() @@ -2235,23 +2254,23 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 20): return - # C.g:225:2: ( IDENTIFIER ( '=' constant_expression )? ) - # C.g:225:4: IDENTIFIER ( '=' constant_expression )? - self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_enumerator685) + # C.g:277:2: ( IDENTIFIER ( '=' constant_expression )? ) + # C.g:277:4: IDENTIFIER ( '=' constant_expression )? + self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_enumerator695) if self.failed: return - # C.g:225:15: ( '=' constant_expression )? + # C.g:277:15: ( '=' constant_expression )? alt25 = 2 LA25_0 = self.input.LA(1) if (LA25_0 == 28) : alt25 = 1 if alt25 == 1: - # C.g:225:16: '=' constant_expression - self.match(self.input, 28, self.FOLLOW_28_in_enumerator688) + # C.g:277:16: '=' constant_expression + self.match(self.input, 28, self.FOLLOW_28_in_enumerator698) if self.failed: return - self.following.append(self.FOLLOW_constant_expression_in_enumerator690) + self.following.append(self.FOLLOW_constant_expression_in_enumerator700) self.constant_expression() self.following.pop() if self.failed: @@ -2278,7 +2297,7 @@ class CParser(Parser): # $ANTLR start type_qualifier - # C.g:228:1: type_qualifier : ( 'const' | 'volatile' | 'IN' | 'OUT' | 'OPTIONAL' | 'CONST' | 'UNALIGNED' | 'VOLATILE' | 'GLOBAL_REMOVE_IF_UNREFERENCED' | 'EFIAPI' | 'EFI_BOOTSERVICE' | 'EFI_RUNTIMESERVICE' ); + # C.g:280:1: type_qualifier : ( 'const' | 'volatile' | 'IN' | 'OUT' | 'OPTIONAL' | 'CONST' | 'UNALIGNED' | 'VOLATILE' | 'GLOBAL_REMOVE_IF_UNREFERENCED' | 'EFIAPI' | 'EFI_BOOTSERVICE' | 'EFI_RUNTIMESERVICE' | 'PACKED' ); def type_qualifier(self, ): type_qualifier_StartIndex = self.input.index() @@ -2287,9 +2306,9 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 21): return - # C.g:229:2: ( 'const' | 'volatile' | 'IN' | 'OUT' | 'OPTIONAL' | 'CONST' | 'UNALIGNED' | 'VOLATILE' | 'GLOBAL_REMOVE_IF_UNREFERENCED' | 'EFIAPI' | 'EFI_BOOTSERVICE' | 'EFI_RUNTIMESERVICE' ) + # C.g:281:2: ( 'const' | 'volatile' | 'IN' | 'OUT' | 'OPTIONAL' | 'CONST' | 'UNALIGNED' | 'VOLATILE' | 'GLOBAL_REMOVE_IF_UNREFERENCED' | 'EFIAPI' | 'EFI_BOOTSERVICE' | 'EFI_RUNTIMESERVICE' | 'PACKED' ) # C.g: - if (49 <= self.input.LA(1) <= 60): + if (49 <= self.input.LA(1) <= 61): self.input.consume(); self.errorRecovery = False self.failed = False @@ -2331,7 +2350,7 @@ class CParser(Parser): # $ANTLR start declarator - # C.g:243:1: declarator : ( ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator | pointer ); + # C.g:296:1: declarator : ( ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator | pointer ); def declarator(self, ): retval = self.declarator_return() @@ -2342,14 +2361,14 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 22): return retval - # C.g:244:2: ( ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator | pointer ) + # C.g:297:2: ( ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator | pointer ) alt30 = 2 LA30_0 = self.input.LA(1) - if (LA30_0 == 65) : + if (LA30_0 == 66) : LA30_1 = self.input.LA(2) - if (self.synpred65()) : + if (self.synpred66()) : alt30 = 1 elif (True) : alt30 = 2 @@ -2358,32 +2377,32 @@ class CParser(Parser): self.failed = True return retval - nvae = NoViableAltException("243:1: declarator : ( ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator | pointer );", 30, 1, self.input) + nvae = NoViableAltException("296:1: declarator : ( ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator | pointer );", 30, 1, self.input) raise nvae - elif (LA30_0 == IDENTIFIER or (58 <= LA30_0 <= 61)) : + elif (LA30_0 == IDENTIFIER or (58 <= LA30_0 <= 60) or LA30_0 == 62) : alt30 = 1 else: if self.backtracking > 0: self.failed = True return retval - nvae = NoViableAltException("243:1: declarator : ( ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator | pointer );", 30, 0, self.input) + nvae = NoViableAltException("296:1: declarator : ( ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator | pointer );", 30, 0, self.input) raise nvae if alt30 == 1: - # C.g:244:4: ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator - # C.g:244:4: ( pointer )? + # C.g:297:4: ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator + # C.g:297:4: ( pointer )? alt26 = 2 LA26_0 = self.input.LA(1) - if (LA26_0 == 65) : + if (LA26_0 == 66) : alt26 = 1 if alt26 == 1: # C.g:0:0: pointer - self.following.append(self.FOLLOW_pointer_in_declarator769) + self.following.append(self.FOLLOW_pointer_in_declarator784) self.pointer() self.following.pop() if self.failed: @@ -2391,49 +2410,49 @@ class CParser(Parser): - # C.g:244:13: ( 'EFIAPI' )? + # C.g:297:13: ( 'EFIAPI' )? alt27 = 2 LA27_0 = self.input.LA(1) if (LA27_0 == 58) : alt27 = 1 if alt27 == 1: - # C.g:244:14: 'EFIAPI' - self.match(self.input, 58, self.FOLLOW_58_in_declarator773) + # C.g:297:14: 'EFIAPI' + self.match(self.input, 58, self.FOLLOW_58_in_declarator788) if self.failed: return retval - # C.g:244:25: ( 'EFI_BOOTSERVICE' )? + # C.g:297:25: ( 'EFI_BOOTSERVICE' )? alt28 = 2 LA28_0 = self.input.LA(1) if (LA28_0 == 59) : alt28 = 1 if alt28 == 1: - # C.g:244:26: 'EFI_BOOTSERVICE' - self.match(self.input, 59, self.FOLLOW_59_in_declarator778) + # C.g:297:26: 'EFI_BOOTSERVICE' + self.match(self.input, 59, self.FOLLOW_59_in_declarator793) if self.failed: return retval - # C.g:244:46: ( 'EFI_RUNTIMESERVICE' )? + # C.g:297:46: ( 'EFI_RUNTIMESERVICE' )? alt29 = 2 LA29_0 = self.input.LA(1) if (LA29_0 == 60) : alt29 = 1 if alt29 == 1: - # C.g:244:47: 'EFI_RUNTIMESERVICE' - self.match(self.input, 60, self.FOLLOW_60_in_declarator783) + # C.g:297:47: 'EFI_RUNTIMESERVICE' + self.match(self.input, 60, self.FOLLOW_60_in_declarator798) if self.failed: return retval - self.following.append(self.FOLLOW_direct_declarator_in_declarator787) + self.following.append(self.FOLLOW_direct_declarator_in_declarator802) self.direct_declarator() self.following.pop() if self.failed: @@ -2441,8 +2460,8 @@ class CParser(Parser): elif alt30 == 2: - # C.g:246:4: pointer - self.following.append(self.FOLLOW_pointer_in_declarator793) + # C.g:299:4: pointer + self.following.append(self.FOLLOW_pointer_in_declarator808) self.pointer() self.following.pop() if self.failed: @@ -2467,7 +2486,7 @@ class CParser(Parser): # $ANTLR start direct_declarator - # C.g:249:1: direct_declarator : ( IDENTIFIER ( declarator_suffix )* | '(' ( 'EFIAPI' )? declarator ')' ( declarator_suffix )+ ); + # C.g:302:1: direct_declarator : ( IDENTIFIER ( declarator_suffix )* | '(' ( 'EFIAPI' )? declarator ')' ( declarator_suffix )+ ); def direct_declarator(self, ): direct_declarator_StartIndex = self.input.index() @@ -2476,259 +2495,259 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 23): return - # C.g:250:2: ( IDENTIFIER ( declarator_suffix )* | '(' ( 'EFIAPI' )? declarator ')' ( declarator_suffix )+ ) + # C.g:303:2: ( IDENTIFIER ( declarator_suffix )* | '(' ( 'EFIAPI' )? declarator ')' ( declarator_suffix )+ ) alt34 = 2 LA34_0 = self.input.LA(1) if (LA34_0 == IDENTIFIER) : alt34 = 1 - elif (LA34_0 == 61) : + elif (LA34_0 == 62) : alt34 = 2 else: if self.backtracking > 0: self.failed = True return - nvae = NoViableAltException("249:1: direct_declarator : ( IDENTIFIER ( declarator_suffix )* | '(' ( 'EFIAPI' )? declarator ')' ( declarator_suffix )+ );", 34, 0, self.input) + nvae = NoViableAltException("302:1: direct_declarator : ( IDENTIFIER ( declarator_suffix )* | '(' ( 'EFIAPI' )? declarator ')' ( declarator_suffix )+ );", 34, 0, self.input) raise nvae if alt34 == 1: - # C.g:250:4: IDENTIFIER ( declarator_suffix )* - self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_direct_declarator804) + # C.g:303:4: IDENTIFIER ( declarator_suffix )* + self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_direct_declarator819) if self.failed: return - # C.g:250:15: ( declarator_suffix )* + # C.g:303:15: ( declarator_suffix )* while True: #loop31 alt31 = 2 LA31_0 = self.input.LA(1) - if (LA31_0 == 61) : + if (LA31_0 == 62) : LA31 = self.input.LA(2) - if LA31 == 62: + if LA31 == 63: LA31_30 = self.input.LA(3) - if (self.synpred66()) : + if (self.synpred67()) : alt31 = 1 elif LA31 == 58: LA31_31 = self.input.LA(3) - if (self.synpred66()) : + if (self.synpred67()) : alt31 = 1 - elif LA31 == 65: + elif LA31 == 66: LA31_32 = self.input.LA(3) - if (self.synpred66()) : + if (self.synpred67()) : alt31 = 1 elif LA31 == 59: LA31_33 = self.input.LA(3) - if (self.synpred66()) : + if (self.synpred67()) : alt31 = 1 elif LA31 == 60: LA31_34 = self.input.LA(3) - if (self.synpred66()) : + if (self.synpred67()) : alt31 = 1 elif LA31 == IDENTIFIER: LA31_35 = self.input.LA(3) - if (self.synpred66()) : + if (self.synpred67()) : alt31 = 1 elif LA31 == 29 or LA31 == 30 or LA31 == 31 or LA31 == 32 or LA31 == 33: LA31_37 = self.input.LA(3) - if (self.synpred66()) : + if (self.synpred67()) : alt31 = 1 elif LA31 == 34: LA31_38 = self.input.LA(3) - if (self.synpred66()) : + if (self.synpred67()) : alt31 = 1 elif LA31 == 35: LA31_39 = self.input.LA(3) - if (self.synpred66()) : + if (self.synpred67()) : alt31 = 1 elif LA31 == 36: LA31_40 = self.input.LA(3) - if (self.synpred66()) : + if (self.synpred67()) : alt31 = 1 elif LA31 == 37: LA31_41 = self.input.LA(3) - if (self.synpred66()) : + if (self.synpred67()) : alt31 = 1 elif LA31 == 38: LA31_42 = self.input.LA(3) - if (self.synpred66()) : + if (self.synpred67()) : alt31 = 1 elif LA31 == 39: LA31_43 = self.input.LA(3) - if (self.synpred66()) : + if (self.synpred67()) : alt31 = 1 elif LA31 == 40: LA31_44 = self.input.LA(3) - if (self.synpred66()) : + if (self.synpred67()) : alt31 = 1 elif LA31 == 41: LA31_45 = self.input.LA(3) - if (self.synpred66()) : + if (self.synpred67()) : alt31 = 1 elif LA31 == 42: LA31_46 = self.input.LA(3) - if (self.synpred66()) : + if (self.synpred67()) : alt31 = 1 elif LA31 == 45 or LA31 == 46: LA31_47 = self.input.LA(3) - if (self.synpred66()) : + if (self.synpred67()) : alt31 = 1 elif LA31 == 48: LA31_48 = self.input.LA(3) - if (self.synpred66()) : + if (self.synpred67()) : alt31 = 1 - elif LA31 == 49 or LA31 == 50 or LA31 == 51 or LA31 == 52 or LA31 == 53 or LA31 == 54 or LA31 == 55 or LA31 == 56 or LA31 == 57: + elif LA31 == 49 or LA31 == 50 or LA31 == 51 or LA31 == 52 or LA31 == 53 or LA31 == 54 or LA31 == 55 or LA31 == 56 or LA31 == 57 or LA31 == 61: LA31_49 = self.input.LA(3) - if (self.synpred66()) : + if (self.synpred67()) : alt31 = 1 - elif (LA31_0 == 63) : + elif (LA31_0 == 64) : LA31 = self.input.LA(2) - if LA31 == 64: + if LA31 == 65: LA31_51 = self.input.LA(3) - if (self.synpred66()) : + if (self.synpred67()) : alt31 = 1 - elif LA31 == 61: + elif LA31 == 62: LA31_52 = self.input.LA(3) - if (self.synpred66()) : + if (self.synpred67()) : alt31 = 1 elif LA31 == IDENTIFIER: LA31_53 = self.input.LA(3) - if (self.synpred66()) : + if (self.synpred67()) : alt31 = 1 elif LA31 == HEX_LITERAL: LA31_54 = self.input.LA(3) - if (self.synpred66()) : + if (self.synpred67()) : alt31 = 1 elif LA31 == OCTAL_LITERAL: LA31_55 = self.input.LA(3) - if (self.synpred66()) : + if (self.synpred67()) : alt31 = 1 elif LA31 == DECIMAL_LITERAL: LA31_56 = self.input.LA(3) - if (self.synpred66()) : + if (self.synpred67()) : alt31 = 1 elif LA31 == CHARACTER_LITERAL: LA31_57 = self.input.LA(3) - if (self.synpred66()) : + if (self.synpred67()) : alt31 = 1 elif LA31 == STRING_LITERAL: LA31_58 = self.input.LA(3) - if (self.synpred66()) : + if (self.synpred67()) : alt31 = 1 elif LA31 == FLOATING_POINT_LITERAL: LA31_59 = self.input.LA(3) - if (self.synpred66()) : + if (self.synpred67()) : alt31 = 1 - elif LA31 == 71: + elif LA31 == 72: LA31_60 = self.input.LA(3) - if (self.synpred66()) : + if (self.synpred67()) : alt31 = 1 - elif LA31 == 72: + elif LA31 == 73: LA31_61 = self.input.LA(3) - if (self.synpred66()) : + if (self.synpred67()) : alt31 = 1 - elif LA31 == 65 or LA31 == 67 or LA31 == 68 or LA31 == 76 or LA31 == 77 or LA31 == 78: + elif LA31 == 66 or LA31 == 68 or LA31 == 69 or LA31 == 77 or LA31 == 78 or LA31 == 79: LA31_62 = self.input.LA(3) - if (self.synpred66()) : + if (self.synpred67()) : alt31 = 1 - elif LA31 == 73: + elif LA31 == 74: LA31_63 = self.input.LA(3) - if (self.synpred66()) : + if (self.synpred67()) : alt31 = 1 @@ -2737,7 +2756,7 @@ class CParser(Parser): if alt31 == 1: # C.g:0:0: declarator_suffix - self.following.append(self.FOLLOW_declarator_suffix_in_direct_declarator806) + self.following.append(self.FOLLOW_declarator_suffix_in_direct_declarator821) self.declarator_suffix() self.following.pop() if self.failed: @@ -2751,267 +2770,267 @@ class CParser(Parser): elif alt34 == 2: - # C.g:251:4: '(' ( 'EFIAPI' )? declarator ')' ( declarator_suffix )+ - self.match(self.input, 61, self.FOLLOW_61_in_direct_declarator812) + # C.g:304:4: '(' ( 'EFIAPI' )? declarator ')' ( declarator_suffix )+ + self.match(self.input, 62, self.FOLLOW_62_in_direct_declarator827) if self.failed: return - # C.g:251:8: ( 'EFIAPI' )? + # C.g:304:8: ( 'EFIAPI' )? alt32 = 2 LA32_0 = self.input.LA(1) if (LA32_0 == 58) : LA32_1 = self.input.LA(2) - if (self.synpred68()) : + if (self.synpred69()) : alt32 = 1 if alt32 == 1: - # C.g:251:9: 'EFIAPI' - self.match(self.input, 58, self.FOLLOW_58_in_direct_declarator815) + # C.g:304:9: 'EFIAPI' + self.match(self.input, 58, self.FOLLOW_58_in_direct_declarator830) if self.failed: return - self.following.append(self.FOLLOW_declarator_in_direct_declarator819) + self.following.append(self.FOLLOW_declarator_in_direct_declarator834) self.declarator() self.following.pop() if self.failed: return - self.match(self.input, 62, self.FOLLOW_62_in_direct_declarator821) + self.match(self.input, 63, self.FOLLOW_63_in_direct_declarator836) if self.failed: return - # C.g:251:35: ( declarator_suffix )+ + # C.g:304:35: ( declarator_suffix )+ cnt33 = 0 while True: #loop33 alt33 = 2 LA33_0 = self.input.LA(1) - if (LA33_0 == 61) : + if (LA33_0 == 62) : LA33 = self.input.LA(2) - if LA33 == 62: + if LA33 == 63: LA33_30 = self.input.LA(3) - if (self.synpred69()) : + if (self.synpred70()) : alt33 = 1 elif LA33 == 58: LA33_31 = self.input.LA(3) - if (self.synpred69()) : + if (self.synpred70()) : alt33 = 1 - elif LA33 == 65: + elif LA33 == 66: LA33_32 = self.input.LA(3) - if (self.synpred69()) : + if (self.synpred70()) : alt33 = 1 elif LA33 == 59: LA33_33 = self.input.LA(3) - if (self.synpred69()) : + if (self.synpred70()) : alt33 = 1 elif LA33 == 60: LA33_34 = self.input.LA(3) - if (self.synpred69()) : + if (self.synpred70()) : alt33 = 1 elif LA33 == IDENTIFIER: LA33_35 = self.input.LA(3) - if (self.synpred69()) : + if (self.synpred70()) : alt33 = 1 elif LA33 == 29 or LA33 == 30 or LA33 == 31 or LA33 == 32 or LA33 == 33: LA33_37 = self.input.LA(3) - if (self.synpred69()) : + if (self.synpred70()) : alt33 = 1 elif LA33 == 34: LA33_38 = self.input.LA(3) - if (self.synpred69()) : + if (self.synpred70()) : alt33 = 1 elif LA33 == 35: LA33_39 = self.input.LA(3) - if (self.synpred69()) : + if (self.synpred70()) : alt33 = 1 elif LA33 == 36: LA33_40 = self.input.LA(3) - if (self.synpred69()) : + if (self.synpred70()) : alt33 = 1 elif LA33 == 37: LA33_41 = self.input.LA(3) - if (self.synpred69()) : + if (self.synpred70()) : alt33 = 1 elif LA33 == 38: LA33_42 = self.input.LA(3) - if (self.synpred69()) : + if (self.synpred70()) : alt33 = 1 elif LA33 == 39: LA33_43 = self.input.LA(3) - if (self.synpred69()) : + if (self.synpred70()) : alt33 = 1 elif LA33 == 40: LA33_44 = self.input.LA(3) - if (self.synpred69()) : + if (self.synpred70()) : alt33 = 1 elif LA33 == 41: LA33_45 = self.input.LA(3) - if (self.synpred69()) : + if (self.synpred70()) : alt33 = 1 elif LA33 == 42: LA33_46 = self.input.LA(3) - if (self.synpred69()) : + if (self.synpred70()) : alt33 = 1 elif LA33 == 45 or LA33 == 46: LA33_47 = self.input.LA(3) - if (self.synpred69()) : + if (self.synpred70()) : alt33 = 1 elif LA33 == 48: LA33_48 = self.input.LA(3) - if (self.synpred69()) : + if (self.synpred70()) : alt33 = 1 - elif LA33 == 49 or LA33 == 50 or LA33 == 51 or LA33 == 52 or LA33 == 53 or LA33 == 54 or LA33 == 55 or LA33 == 56 or LA33 == 57: + elif LA33 == 49 or LA33 == 50 or LA33 == 51 or LA33 == 52 or LA33 == 53 or LA33 == 54 or LA33 == 55 or LA33 == 56 or LA33 == 57 or LA33 == 61: LA33_49 = self.input.LA(3) - if (self.synpred69()) : + if (self.synpred70()) : alt33 = 1 - elif (LA33_0 == 63) : + elif (LA33_0 == 64) : LA33 = self.input.LA(2) - if LA33 == 64: + if LA33 == 65: LA33_51 = self.input.LA(3) - if (self.synpred69()) : + if (self.synpred70()) : alt33 = 1 - elif LA33 == 61: + elif LA33 == 62: LA33_52 = self.input.LA(3) - if (self.synpred69()) : + if (self.synpred70()) : alt33 = 1 elif LA33 == IDENTIFIER: LA33_53 = self.input.LA(3) - if (self.synpred69()) : + if (self.synpred70()) : alt33 = 1 elif LA33 == HEX_LITERAL: LA33_54 = self.input.LA(3) - if (self.synpred69()) : + if (self.synpred70()) : alt33 = 1 elif LA33 == OCTAL_LITERAL: LA33_55 = self.input.LA(3) - if (self.synpred69()) : + if (self.synpred70()) : alt33 = 1 elif LA33 == DECIMAL_LITERAL: LA33_56 = self.input.LA(3) - if (self.synpred69()) : + if (self.synpred70()) : alt33 = 1 elif LA33 == CHARACTER_LITERAL: LA33_57 = self.input.LA(3) - if (self.synpred69()) : + if (self.synpred70()) : alt33 = 1 elif LA33 == STRING_LITERAL: LA33_58 = self.input.LA(3) - if (self.synpred69()) : + if (self.synpred70()) : alt33 = 1 elif LA33 == FLOATING_POINT_LITERAL: LA33_59 = self.input.LA(3) - if (self.synpred69()) : + if (self.synpred70()) : alt33 = 1 - elif LA33 == 71: + elif LA33 == 72: LA33_60 = self.input.LA(3) - if (self.synpred69()) : + if (self.synpred70()) : alt33 = 1 - elif LA33 == 72: + elif LA33 == 73: LA33_61 = self.input.LA(3) - if (self.synpred69()) : + if (self.synpred70()) : alt33 = 1 - elif LA33 == 65 or LA33 == 67 or LA33 == 68 or LA33 == 76 or LA33 == 77 or LA33 == 78: + elif LA33 == 66 or LA33 == 68 or LA33 == 69 or LA33 == 77 or LA33 == 78 or LA33 == 79: LA33_62 = self.input.LA(3) - if (self.synpred69()) : + if (self.synpred70()) : alt33 = 1 - elif LA33 == 73: + elif LA33 == 74: LA33_63 = self.input.LA(3) - if (self.synpred69()) : + if (self.synpred70()) : alt33 = 1 @@ -3020,7 +3039,7 @@ class CParser(Parser): if alt33 == 1: # C.g:0:0: declarator_suffix - self.following.append(self.FOLLOW_declarator_suffix_in_direct_declarator823) + self.following.append(self.FOLLOW_declarator_suffix_in_direct_declarator838) self.declarator_suffix() self.following.pop() if self.failed: @@ -3059,7 +3078,7 @@ class CParser(Parser): # $ANTLR start declarator_suffix - # C.g:254:1: declarator_suffix : ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' ); + # C.g:307:1: declarator_suffix : ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' ); def declarator_suffix(self, ): declarator_suffix_StartIndex = self.input.index() @@ -3068,54 +3087,54 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 24): return - # C.g:255:2: ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' ) + # C.g:308:2: ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' ) alt35 = 5 LA35_0 = self.input.LA(1) - if (LA35_0 == 63) : + if (LA35_0 == 64) : LA35_1 = self.input.LA(2) - if (LA35_1 == 64) : + if (LA35_1 == 65) : alt35 = 2 - elif ((IDENTIFIER <= LA35_1 <= FLOATING_POINT_LITERAL) or LA35_1 == 61 or LA35_1 == 65 or (67 <= LA35_1 <= 68) or (71 <= LA35_1 <= 73) or (76 <= LA35_1 <= 78)) : + elif ((IDENTIFIER <= LA35_1 <= FLOATING_POINT_LITERAL) or LA35_1 == 62 or LA35_1 == 66 or (68 <= LA35_1 <= 69) or (72 <= LA35_1 <= 74) or (77 <= LA35_1 <= 79)) : alt35 = 1 else: if self.backtracking > 0: self.failed = True return - nvae = NoViableAltException("254:1: declarator_suffix : ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' );", 35, 1, self.input) + nvae = NoViableAltException("307:1: declarator_suffix : ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' );", 35, 1, self.input) raise nvae - elif (LA35_0 == 61) : + elif (LA35_0 == 62) : LA35 = self.input.LA(2) - if LA35 == 62: + if LA35 == 63: alt35 = 5 + elif LA35 == 29 or LA35 == 30 or LA35 == 31 or LA35 == 32 or LA35 == 33 or LA35 == 34 or LA35 == 35 or LA35 == 36 or LA35 == 37 or LA35 == 38 or LA35 == 39 or LA35 == 40 or LA35 == 41 or LA35 == 42 or LA35 == 45 or LA35 == 46 or LA35 == 48 or LA35 == 49 or LA35 == 50 or LA35 == 51 or LA35 == 52 or LA35 == 53 or LA35 == 54 or LA35 == 55 or LA35 == 56 or LA35 == 57 or LA35 == 58 or LA35 == 59 or LA35 == 60 or LA35 == 61 or LA35 == 66: + alt35 = 3 elif LA35 == IDENTIFIER: - LA35_17 = self.input.LA(3) + LA35_29 = self.input.LA(3) - if (self.synpred72()) : + if (self.synpred73()) : alt35 = 3 - elif (self.synpred73()) : + elif (self.synpred74()) : alt35 = 4 else: if self.backtracking > 0: self.failed = True return - nvae = NoViableAltException("254:1: declarator_suffix : ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' );", 35, 17, self.input) + nvae = NoViableAltException("307:1: declarator_suffix : ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' );", 35, 29, self.input) raise nvae - elif LA35 == 29 or LA35 == 30 or LA35 == 31 or LA35 == 32 or LA35 == 33 or LA35 == 34 or LA35 == 35 or LA35 == 36 or LA35 == 37 or LA35 == 38 or LA35 == 39 or LA35 == 40 or LA35 == 41 or LA35 == 42 or LA35 == 45 or LA35 == 46 or LA35 == 48 or LA35 == 49 or LA35 == 50 or LA35 == 51 or LA35 == 52 or LA35 == 53 or LA35 == 54 or LA35 == 55 or LA35 == 56 or LA35 == 57 or LA35 == 58 or LA35 == 59 or LA35 == 60 or LA35 == 65: - alt35 = 3 else: if self.backtracking > 0: self.failed = True return - nvae = NoViableAltException("254:1: declarator_suffix : ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' );", 35, 2, self.input) + nvae = NoViableAltException("307:1: declarator_suffix : ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' );", 35, 2, self.input) raise nvae @@ -3124,71 +3143,71 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("254:1: declarator_suffix : ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' );", 35, 0, self.input) + nvae = NoViableAltException("307:1: declarator_suffix : ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' );", 35, 0, self.input) raise nvae if alt35 == 1: - # C.g:255:6: '[' constant_expression ']' - self.match(self.input, 63, self.FOLLOW_63_in_declarator_suffix837) + # C.g:308:6: '[' constant_expression ']' + self.match(self.input, 64, self.FOLLOW_64_in_declarator_suffix852) if self.failed: return - self.following.append(self.FOLLOW_constant_expression_in_declarator_suffix839) + self.following.append(self.FOLLOW_constant_expression_in_declarator_suffix854) self.constant_expression() self.following.pop() if self.failed: return - self.match(self.input, 64, self.FOLLOW_64_in_declarator_suffix841) + self.match(self.input, 65, self.FOLLOW_65_in_declarator_suffix856) if self.failed: return elif alt35 == 2: - # C.g:256:9: '[' ']' - self.match(self.input, 63, self.FOLLOW_63_in_declarator_suffix851) + # C.g:309:9: '[' ']' + self.match(self.input, 64, self.FOLLOW_64_in_declarator_suffix866) if self.failed: return - self.match(self.input, 64, self.FOLLOW_64_in_declarator_suffix853) + self.match(self.input, 65, self.FOLLOW_65_in_declarator_suffix868) if self.failed: return elif alt35 == 3: - # C.g:257:9: '(' parameter_type_list ')' - self.match(self.input, 61, self.FOLLOW_61_in_declarator_suffix863) + # C.g:310:9: '(' parameter_type_list ')' + self.match(self.input, 62, self.FOLLOW_62_in_declarator_suffix878) if self.failed: return - self.following.append(self.FOLLOW_parameter_type_list_in_declarator_suffix865) + self.following.append(self.FOLLOW_parameter_type_list_in_declarator_suffix880) self.parameter_type_list() self.following.pop() if self.failed: return - self.match(self.input, 62, self.FOLLOW_62_in_declarator_suffix867) + self.match(self.input, 63, self.FOLLOW_63_in_declarator_suffix882) if self.failed: return elif alt35 == 4: - # C.g:258:9: '(' identifier_list ')' - self.match(self.input, 61, self.FOLLOW_61_in_declarator_suffix877) + # C.g:311:9: '(' identifier_list ')' + self.match(self.input, 62, self.FOLLOW_62_in_declarator_suffix892) if self.failed: return - self.following.append(self.FOLLOW_identifier_list_in_declarator_suffix879) + self.following.append(self.FOLLOW_identifier_list_in_declarator_suffix894) self.identifier_list() self.following.pop() if self.failed: return - self.match(self.input, 62, self.FOLLOW_62_in_declarator_suffix881) + self.match(self.input, 63, self.FOLLOW_63_in_declarator_suffix896) if self.failed: return elif alt35 == 5: - # C.g:259:9: '(' ')' - self.match(self.input, 61, self.FOLLOW_61_in_declarator_suffix891) + # C.g:312:9: '(' ')' + self.match(self.input, 62, self.FOLLOW_62_in_declarator_suffix906) if self.failed: return - self.match(self.input, 62, self.FOLLOW_62_in_declarator_suffix893) + self.match(self.input, 63, self.FOLLOW_63_in_declarator_suffix908) if self.failed: return @@ -3209,7 +3228,7 @@ class CParser(Parser): # $ANTLR start pointer - # C.g:262:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' ); + # C.g:315:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' ); def pointer(self, ): pointer_StartIndex = self.input.index() @@ -3218,17 +3237,17 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 25): return - # C.g:263:2: ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' ) + # C.g:316:2: ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' ) alt38 = 3 LA38_0 = self.input.LA(1) - if (LA38_0 == 65) : + if (LA38_0 == 66) : LA38 = self.input.LA(2) - if LA38 == 58: + if LA38 == 66: LA38_2 = self.input.LA(3) - if (self.synpred76()) : - alt38 = 1 + if (self.synpred78()) : + alt38 = 2 elif (True) : alt38 = 3 else: @@ -3236,14 +3255,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("262:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 38, 2, self.input) + nvae = NoViableAltException("315:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 38, 2, self.input) raise nvae - elif LA38 == 59: + elif LA38 == 58: LA38_3 = self.input.LA(3) - if (self.synpred76()) : + if (self.synpred77()) : alt38 = 1 elif (True) : alt38 = 3 @@ -3252,14 +3271,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("262:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 38, 3, self.input) + nvae = NoViableAltException("315:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 38, 3, self.input) raise nvae - elif LA38 == 60: + elif LA38 == 59: LA38_4 = self.input.LA(3) - if (self.synpred76()) : + if (self.synpred77()) : alt38 = 1 elif (True) : alt38 = 3 @@ -3268,16 +3287,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("262:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 38, 4, self.input) + nvae = NoViableAltException("315:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 38, 4, self.input) raise nvae - elif LA38 == EOF or LA38 == IDENTIFIER or LA38 == 25 or LA38 == 26 or LA38 == 27 or LA38 == 28 or LA38 == 29 or LA38 == 30 or LA38 == 31 or LA38 == 32 or LA38 == 33 or LA38 == 34 or LA38 == 35 or LA38 == 36 or LA38 == 37 or LA38 == 38 or LA38 == 39 or LA38 == 40 or LA38 == 41 or LA38 == 42 or LA38 == 43 or LA38 == 45 or LA38 == 46 or LA38 == 47 or LA38 == 48 or LA38 == 61 or LA38 == 62 or LA38 == 63: - alt38 = 3 - elif LA38 == 53: - LA38_20 = self.input.LA(3) + elif LA38 == 60: + LA38_5 = self.input.LA(3) - if (self.synpred76()) : + if (self.synpred77()) : alt38 = 1 elif (True) : alt38 = 3 @@ -3286,14 +3303,16 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("262:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 38, 20, self.input) + nvae = NoViableAltException("315:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 38, 5, self.input) raise nvae - elif LA38 == 49 or LA38 == 50 or LA38 == 51 or LA38 == 52 or LA38 == 54 or LA38 == 55 or LA38 == 56 or LA38 == 57: - LA38_28 = self.input.LA(3) + elif LA38 == EOF or LA38 == IDENTIFIER or LA38 == 25 or LA38 == 26 or LA38 == 27 or LA38 == 28 or LA38 == 29 or LA38 == 30 or LA38 == 31 or LA38 == 32 or LA38 == 33 or LA38 == 34 or LA38 == 35 or LA38 == 36 or LA38 == 37 or LA38 == 38 or LA38 == 39 or LA38 == 40 or LA38 == 41 or LA38 == 42 or LA38 == 43 or LA38 == 45 or LA38 == 46 or LA38 == 47 or LA38 == 48 or LA38 == 62 or LA38 == 63 or LA38 == 64: + alt38 = 3 + elif LA38 == 53: + LA38_21 = self.input.LA(3) - if (self.synpred76()) : + if (self.synpred77()) : alt38 = 1 elif (True) : alt38 = 3 @@ -3302,15 +3321,15 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("262:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 38, 28, self.input) + nvae = NoViableAltException("315:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 38, 21, self.input) raise nvae - elif LA38 == 65: + elif LA38 == 49 or LA38 == 50 or LA38 == 51 or LA38 == 52 or LA38 == 54 or LA38 == 55 or LA38 == 56 or LA38 == 57 or LA38 == 61: LA38_29 = self.input.LA(3) if (self.synpred77()) : - alt38 = 2 + alt38 = 1 elif (True) : alt38 = 3 else: @@ -3318,7 +3337,7 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("262:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 38, 29, self.input) + nvae = NoViableAltException("315:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 38, 29, self.input) raise nvae @@ -3327,7 +3346,7 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("262:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 38, 1, self.input) + nvae = NoViableAltException("315:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 38, 1, self.input) raise nvae @@ -3336,16 +3355,16 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("262:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 38, 0, self.input) + nvae = NoViableAltException("315:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 38, 0, self.input) raise nvae if alt38 == 1: - # C.g:263:4: '*' ( type_qualifier )+ ( pointer )? - self.match(self.input, 65, self.FOLLOW_65_in_pointer904) + # C.g:316:4: '*' ( type_qualifier )+ ( pointer )? + self.match(self.input, 66, self.FOLLOW_66_in_pointer919) if self.failed: return - # C.g:263:8: ( type_qualifier )+ + # C.g:316:8: ( type_qualifier )+ cnt36 = 0 while True: #loop36 alt36 = 2 @@ -3353,42 +3372,42 @@ class CParser(Parser): if LA36 == 58: LA36_2 = self.input.LA(2) - if (self.synpred74()) : + if (self.synpred75()) : alt36 = 1 elif LA36 == 59: LA36_3 = self.input.LA(2) - if (self.synpred74()) : + if (self.synpred75()) : alt36 = 1 elif LA36 == 60: LA36_4 = self.input.LA(2) - if (self.synpred74()) : + if (self.synpred75()) : alt36 = 1 elif LA36 == 53: LA36_20 = self.input.LA(2) - if (self.synpred74()) : + if (self.synpred75()) : alt36 = 1 - elif LA36 == 49 or LA36 == 50 or LA36 == 51 or LA36 == 52 or LA36 == 54 or LA36 == 55 or LA36 == 56 or LA36 == 57: + elif LA36 == 49 or LA36 == 50 or LA36 == 51 or LA36 == 52 or LA36 == 54 or LA36 == 55 or LA36 == 56 or LA36 == 57 or LA36 == 61: LA36_28 = self.input.LA(2) - if (self.synpred74()) : + if (self.synpred75()) : alt36 = 1 if alt36 == 1: # C.g:0:0: type_qualifier - self.following.append(self.FOLLOW_type_qualifier_in_pointer906) + self.following.append(self.FOLLOW_type_qualifier_in_pointer921) self.type_qualifier() self.following.pop() if self.failed: @@ -3409,18 +3428,18 @@ class CParser(Parser): cnt36 += 1 - # C.g:263:24: ( pointer )? + # C.g:316:24: ( pointer )? alt37 = 2 LA37_0 = self.input.LA(1) - if (LA37_0 == 65) : + if (LA37_0 == 66) : LA37_1 = self.input.LA(2) - if (self.synpred75()) : + if (self.synpred76()) : alt37 = 1 if alt37 == 1: # C.g:0:0: pointer - self.following.append(self.FOLLOW_pointer_in_pointer909) + self.following.append(self.FOLLOW_pointer_in_pointer924) self.pointer() self.following.pop() if self.failed: @@ -3431,11 +3450,11 @@ class CParser(Parser): elif alt38 == 2: - # C.g:264:4: '*' pointer - self.match(self.input, 65, self.FOLLOW_65_in_pointer915) + # C.g:317:4: '*' pointer + self.match(self.input, 66, self.FOLLOW_66_in_pointer930) if self.failed: return - self.following.append(self.FOLLOW_pointer_in_pointer917) + self.following.append(self.FOLLOW_pointer_in_pointer932) self.pointer() self.following.pop() if self.failed: @@ -3443,8 +3462,8 @@ class CParser(Parser): elif alt38 == 3: - # C.g:265:4: '*' - self.match(self.input, 65, self.FOLLOW_65_in_pointer922) + # C.g:318:4: '*' + self.match(self.input, 66, self.FOLLOW_66_in_pointer937) if self.failed: return @@ -3465,7 +3484,7 @@ class CParser(Parser): # $ANTLR start parameter_type_list - # C.g:268:1: parameter_type_list : parameter_list ( ',' ( 'OPTIONAL' )? '...' )? ; + # C.g:321:1: parameter_type_list : parameter_list ( ',' ( 'OPTIONAL' )? '...' )? ; def parameter_type_list(self, ): parameter_type_list_StartIndex = self.input.index() @@ -3474,39 +3493,39 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 26): return - # C.g:269:2: ( parameter_list ( ',' ( 'OPTIONAL' )? '...' )? ) - # C.g:269:4: parameter_list ( ',' ( 'OPTIONAL' )? '...' )? - self.following.append(self.FOLLOW_parameter_list_in_parameter_type_list933) + # C.g:322:2: ( parameter_list ( ',' ( 'OPTIONAL' )? '...' )? ) + # C.g:322:4: parameter_list ( ',' ( 'OPTIONAL' )? '...' )? + self.following.append(self.FOLLOW_parameter_list_in_parameter_type_list948) self.parameter_list() self.following.pop() if self.failed: return - # C.g:269:19: ( ',' ( 'OPTIONAL' )? '...' )? + # C.g:322:19: ( ',' ( 'OPTIONAL' )? '...' )? alt40 = 2 LA40_0 = self.input.LA(1) if (LA40_0 == 27) : alt40 = 1 if alt40 == 1: - # C.g:269:20: ',' ( 'OPTIONAL' )? '...' - self.match(self.input, 27, self.FOLLOW_27_in_parameter_type_list936) + # C.g:322:20: ',' ( 'OPTIONAL' )? '...' + self.match(self.input, 27, self.FOLLOW_27_in_parameter_type_list951) if self.failed: return - # C.g:269:24: ( 'OPTIONAL' )? + # C.g:322:24: ( 'OPTIONAL' )? alt39 = 2 LA39_0 = self.input.LA(1) if (LA39_0 == 53) : alt39 = 1 if alt39 == 1: - # C.g:269:25: 'OPTIONAL' - self.match(self.input, 53, self.FOLLOW_53_in_parameter_type_list939) + # C.g:322:25: 'OPTIONAL' + self.match(self.input, 53, self.FOLLOW_53_in_parameter_type_list954) if self.failed: return - self.match(self.input, 66, self.FOLLOW_66_in_parameter_type_list943) + self.match(self.input, 67, self.FOLLOW_67_in_parameter_type_list958) if self.failed: return @@ -3531,7 +3550,7 @@ class CParser(Parser): # $ANTLR start parameter_list - # C.g:272:1: parameter_list : parameter_declaration ( ',' ( 'OPTIONAL' )? parameter_declaration )* ; + # C.g:325:1: parameter_list : parameter_declaration ( ',' ( 'OPTIONAL' )? parameter_declaration )* ; def parameter_list(self, ): parameter_list_StartIndex = self.input.index() @@ -3540,14 +3559,14 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 27): return - # C.g:273:2: ( parameter_declaration ( ',' ( 'OPTIONAL' )? parameter_declaration )* ) - # C.g:273:4: parameter_declaration ( ',' ( 'OPTIONAL' )? parameter_declaration )* - self.following.append(self.FOLLOW_parameter_declaration_in_parameter_list956) + # C.g:326:2: ( parameter_declaration ( ',' ( 'OPTIONAL' )? parameter_declaration )* ) + # C.g:326:4: parameter_declaration ( ',' ( 'OPTIONAL' )? parameter_declaration )* + self.following.append(self.FOLLOW_parameter_declaration_in_parameter_list971) self.parameter_declaration() self.following.pop() if self.failed: return - # C.g:273:26: ( ',' ( 'OPTIONAL' )? parameter_declaration )* + # C.g:326:26: ( ',' ( 'OPTIONAL' )? parameter_declaration )* while True: #loop42 alt42 = 2 LA42_0 = self.input.LA(1) @@ -3558,39 +3577,39 @@ class CParser(Parser): if (LA42_1 == 53) : LA42_3 = self.input.LA(3) - if (self.synpred81()) : + if (self.synpred82()) : alt42 = 1 - elif (LA42_1 == IDENTIFIER or (29 <= LA42_1 <= 42) or (45 <= LA42_1 <= 46) or (48 <= LA42_1 <= 52) or (54 <= LA42_1 <= 60) or LA42_1 == 65) : + elif (LA42_1 == IDENTIFIER or (29 <= LA42_1 <= 42) or (45 <= LA42_1 <= 46) or (48 <= LA42_1 <= 52) or (54 <= LA42_1 <= 61) or LA42_1 == 66) : alt42 = 1 if alt42 == 1: - # C.g:273:27: ',' ( 'OPTIONAL' )? parameter_declaration - self.match(self.input, 27, self.FOLLOW_27_in_parameter_list959) + # C.g:326:27: ',' ( 'OPTIONAL' )? parameter_declaration + self.match(self.input, 27, self.FOLLOW_27_in_parameter_list974) if self.failed: return - # C.g:273:31: ( 'OPTIONAL' )? + # C.g:326:31: ( 'OPTIONAL' )? alt41 = 2 LA41_0 = self.input.LA(1) if (LA41_0 == 53) : LA41_1 = self.input.LA(2) - if (self.synpred80()) : + if (self.synpred81()) : alt41 = 1 if alt41 == 1: - # C.g:273:32: 'OPTIONAL' - self.match(self.input, 53, self.FOLLOW_53_in_parameter_list962) + # C.g:326:32: 'OPTIONAL' + self.match(self.input, 53, self.FOLLOW_53_in_parameter_list977) if self.failed: return - self.following.append(self.FOLLOW_parameter_declaration_in_parameter_list966) + self.following.append(self.FOLLOW_parameter_declaration_in_parameter_list981) self.parameter_declaration() self.following.pop() if self.failed: @@ -3620,7 +3639,7 @@ class CParser(Parser): # $ANTLR start parameter_declaration - # C.g:276:1: parameter_declaration : ( declaration_specifiers ( declarator | abstract_declarator )* ( 'OPTIONAL' )? | ( pointer )* IDENTIFIER ); + # C.g:329:1: parameter_declaration : ( declaration_specifiers ( declarator | abstract_declarator )* ( 'OPTIONAL' )? | ( pointer )* IDENTIFIER ); def parameter_declaration(self, ): parameter_declaration_StartIndex = self.input.index() @@ -3629,15 +3648,15 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 28): return - # C.g:277:2: ( declaration_specifiers ( declarator | abstract_declarator )* ( 'OPTIONAL' )? | ( pointer )* IDENTIFIER ) + # C.g:330:2: ( declaration_specifiers ( declarator | abstract_declarator )* ( 'OPTIONAL' )? | ( pointer )* IDENTIFIER ) alt46 = 2 LA46 = self.input.LA(1) - if LA46 == 29 or LA46 == 30 or LA46 == 31 or LA46 == 32 or LA46 == 33 or LA46 == 34 or LA46 == 35 or LA46 == 36 or LA46 == 37 or LA46 == 38 or LA46 == 39 or LA46 == 40 or LA46 == 41 or LA46 == 42 or LA46 == 45 or LA46 == 46 or LA46 == 48 or LA46 == 49 or LA46 == 50 or LA46 == 51 or LA46 == 52 or LA46 == 53 or LA46 == 54 or LA46 == 55 or LA46 == 56 or LA46 == 57 or LA46 == 58 or LA46 == 59 or LA46 == 60: + if LA46 == 29 or LA46 == 30 or LA46 == 31 or LA46 == 32 or LA46 == 33 or LA46 == 34 or LA46 == 35 or LA46 == 36 or LA46 == 37 or LA46 == 38 or LA46 == 39 or LA46 == 40 or LA46 == 41 or LA46 == 42 or LA46 == 45 or LA46 == 46 or LA46 == 48 or LA46 == 49 or LA46 == 50 or LA46 == 51 or LA46 == 52 or LA46 == 53 or LA46 == 54 or LA46 == 55 or LA46 == 56 or LA46 == 57 or LA46 == 58 or LA46 == 59 or LA46 == 60 or LA46 == 61: alt46 = 1 elif LA46 == IDENTIFIER: LA46_13 = self.input.LA(2) - if (self.synpred85()) : + if (self.synpred86()) : alt46 = 1 elif (True) : alt46 = 2 @@ -3646,108 +3665,108 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("276:1: parameter_declaration : ( declaration_specifiers ( declarator | abstract_declarator )* ( 'OPTIONAL' )? | ( pointer )* IDENTIFIER );", 46, 13, self.input) + nvae = NoViableAltException("329:1: parameter_declaration : ( declaration_specifiers ( declarator | abstract_declarator )* ( 'OPTIONAL' )? | ( pointer )* IDENTIFIER );", 46, 13, self.input) raise nvae - elif LA46 == 65: + elif LA46 == 66: alt46 = 2 else: if self.backtracking > 0: self.failed = True return - nvae = NoViableAltException("276:1: parameter_declaration : ( declaration_specifiers ( declarator | abstract_declarator )* ( 'OPTIONAL' )? | ( pointer )* IDENTIFIER );", 46, 0, self.input) + nvae = NoViableAltException("329:1: parameter_declaration : ( declaration_specifiers ( declarator | abstract_declarator )* ( 'OPTIONAL' )? | ( pointer )* IDENTIFIER );", 46, 0, self.input) raise nvae if alt46 == 1: - # C.g:277:4: declaration_specifiers ( declarator | abstract_declarator )* ( 'OPTIONAL' )? - self.following.append(self.FOLLOW_declaration_specifiers_in_parameter_declaration979) + # C.g:330:4: declaration_specifiers ( declarator | abstract_declarator )* ( 'OPTIONAL' )? + self.following.append(self.FOLLOW_declaration_specifiers_in_parameter_declaration994) self.declaration_specifiers() self.following.pop() if self.failed: return - # C.g:277:27: ( declarator | abstract_declarator )* + # C.g:330:27: ( declarator | abstract_declarator )* while True: #loop43 alt43 = 3 LA43 = self.input.LA(1) - if LA43 == 65: + if LA43 == 66: LA43_5 = self.input.LA(2) - if (self.synpred82()) : + if (self.synpred83()) : alt43 = 1 - elif (self.synpred83()) : + elif (self.synpred84()) : alt43 = 2 elif LA43 == IDENTIFIER or LA43 == 58 or LA43 == 59 or LA43 == 60: alt43 = 1 - elif LA43 == 61: + elif LA43 == 62: LA43 = self.input.LA(2) - if LA43 == 29 or LA43 == 30 or LA43 == 31 or LA43 == 32 or LA43 == 33 or LA43 == 34 or LA43 == 35 or LA43 == 36 or LA43 == 37 or LA43 == 38 or LA43 == 39 or LA43 == 40 or LA43 == 41 or LA43 == 42 or LA43 == 45 or LA43 == 46 or LA43 == 48 or LA43 == 49 or LA43 == 50 or LA43 == 51 or LA43 == 52 or LA43 == 53 or LA43 == 54 or LA43 == 55 or LA43 == 56 or LA43 == 57 or LA43 == 62 or LA43 == 63: + if LA43 == 29 or LA43 == 30 or LA43 == 31 or LA43 == 32 or LA43 == 33 or LA43 == 34 or LA43 == 35 or LA43 == 36 or LA43 == 37 or LA43 == 38 or LA43 == 39 or LA43 == 40 or LA43 == 41 or LA43 == 42 or LA43 == 45 or LA43 == 46 or LA43 == 48 or LA43 == 49 or LA43 == 50 or LA43 == 51 or LA43 == 52 or LA43 == 53 or LA43 == 54 or LA43 == 55 or LA43 == 56 or LA43 == 57 or LA43 == 61 or LA43 == 63 or LA43 == 64: alt43 = 2 elif LA43 == IDENTIFIER: LA43_37 = self.input.LA(3) - if (self.synpred82()) : + if (self.synpred83()) : alt43 = 1 - elif (self.synpred83()) : + elif (self.synpred84()) : alt43 = 2 elif LA43 == 58: LA43_38 = self.input.LA(3) - if (self.synpred82()) : + if (self.synpred83()) : alt43 = 1 - elif (self.synpred83()) : + elif (self.synpred84()) : alt43 = 2 - elif LA43 == 65: + elif LA43 == 66: LA43_39 = self.input.LA(3) - if (self.synpred82()) : + if (self.synpred83()) : alt43 = 1 - elif (self.synpred83()) : + elif (self.synpred84()) : alt43 = 2 elif LA43 == 59: LA43_40 = self.input.LA(3) - if (self.synpred82()) : + if (self.synpred83()) : alt43 = 1 - elif (self.synpred83()) : + elif (self.synpred84()) : alt43 = 2 elif LA43 == 60: LA43_41 = self.input.LA(3) - if (self.synpred82()) : + if (self.synpred83()) : alt43 = 1 - elif (self.synpred83()) : + elif (self.synpred84()) : alt43 = 2 - elif LA43 == 61: + elif LA43 == 62: LA43_43 = self.input.LA(3) - if (self.synpred82()) : + if (self.synpred83()) : alt43 = 1 - elif (self.synpred83()) : + elif (self.synpred84()) : alt43 = 2 - elif LA43 == 63: + elif LA43 == 64: alt43 = 2 if alt43 == 1: - # C.g:277:28: declarator - self.following.append(self.FOLLOW_declarator_in_parameter_declaration982) + # C.g:330:28: declarator + self.following.append(self.FOLLOW_declarator_in_parameter_declaration997) self.declarator() self.following.pop() if self.failed: @@ -3755,8 +3774,8 @@ class CParser(Parser): elif alt43 == 2: - # C.g:277:39: abstract_declarator - self.following.append(self.FOLLOW_abstract_declarator_in_parameter_declaration984) + # C.g:330:39: abstract_declarator + self.following.append(self.FOLLOW_abstract_declarator_in_parameter_declaration999) self.abstract_declarator() self.following.pop() if self.failed: @@ -3767,15 +3786,15 @@ class CParser(Parser): break #loop43 - # C.g:277:61: ( 'OPTIONAL' )? + # C.g:330:61: ( 'OPTIONAL' )? alt44 = 2 LA44_0 = self.input.LA(1) if (LA44_0 == 53) : alt44 = 1 if alt44 == 1: - # C.g:277:62: 'OPTIONAL' - self.match(self.input, 53, self.FOLLOW_53_in_parameter_declaration989) + # C.g:330:62: 'OPTIONAL' + self.match(self.input, 53, self.FOLLOW_53_in_parameter_declaration1004) if self.failed: return @@ -3784,19 +3803,19 @@ class CParser(Parser): elif alt46 == 2: - # C.g:279:4: ( pointer )* IDENTIFIER - # C.g:279:4: ( pointer )* + # C.g:332:4: ( pointer )* IDENTIFIER + # C.g:332:4: ( pointer )* while True: #loop45 alt45 = 2 LA45_0 = self.input.LA(1) - if (LA45_0 == 65) : + if (LA45_0 == 66) : alt45 = 1 if alt45 == 1: # C.g:0:0: pointer - self.following.append(self.FOLLOW_pointer_in_parameter_declaration998) + self.following.append(self.FOLLOW_pointer_in_parameter_declaration1013) self.pointer() self.following.pop() if self.failed: @@ -3807,7 +3826,7 @@ class CParser(Parser): break #loop45 - self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_parameter_declaration1001) + self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_parameter_declaration1016) if self.failed: return @@ -3828,7 +3847,7 @@ class CParser(Parser): # $ANTLR start identifier_list - # C.g:282:1: identifier_list : IDENTIFIER ( ',' IDENTIFIER )* ; + # C.g:335:1: identifier_list : IDENTIFIER ( ',' IDENTIFIER )* ; def identifier_list(self, ): identifier_list_StartIndex = self.input.index() @@ -3837,12 +3856,12 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 29): return - # C.g:283:2: ( IDENTIFIER ( ',' IDENTIFIER )* ) - # C.g:283:4: IDENTIFIER ( ',' IDENTIFIER )* - self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_identifier_list1012) + # C.g:336:2: ( IDENTIFIER ( ',' IDENTIFIER )* ) + # C.g:336:4: IDENTIFIER ( ',' IDENTIFIER )* + self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_identifier_list1027) if self.failed: return - # C.g:284:2: ( ',' IDENTIFIER )* + # C.g:337:2: ( ',' IDENTIFIER )* while True: #loop47 alt47 = 2 LA47_0 = self.input.LA(1) @@ -3852,11 +3871,11 @@ class CParser(Parser): if alt47 == 1: - # C.g:284:3: ',' IDENTIFIER - self.match(self.input, 27, self.FOLLOW_27_in_identifier_list1016) + # C.g:337:3: ',' IDENTIFIER + self.match(self.input, 27, self.FOLLOW_27_in_identifier_list1031) if self.failed: return - self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_identifier_list1018) + self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_identifier_list1033) if self.failed: return @@ -3884,7 +3903,7 @@ class CParser(Parser): # $ANTLR start type_name - # C.g:287:1: type_name : ( specifier_qualifier_list ( abstract_declarator )? | type_id ); + # C.g:340:1: type_name : ( specifier_qualifier_list ( abstract_declarator )? | type_id ); def type_name(self, ): type_name_StartIndex = self.input.index() @@ -3893,16 +3912,16 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 30): return - # C.g:288:2: ( specifier_qualifier_list ( abstract_declarator )? | type_id ) + # C.g:341:2: ( specifier_qualifier_list ( abstract_declarator )? | type_id ) alt49 = 2 LA49_0 = self.input.LA(1) - if ((34 <= LA49_0 <= 42) or (45 <= LA49_0 <= 46) or (48 <= LA49_0 <= 60)) : + if ((34 <= LA49_0 <= 42) or (45 <= LA49_0 <= 46) or (48 <= LA49_0 <= 61)) : alt49 = 1 elif (LA49_0 == IDENTIFIER) : LA49_13 = self.input.LA(2) - if (self.synpred89()) : + if (self.synpred90()) : alt49 = 1 elif (True) : alt49 = 2 @@ -3911,7 +3930,7 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("287:1: type_name : ( specifier_qualifier_list ( abstract_declarator )? | type_id );", 49, 13, self.input) + nvae = NoViableAltException("340:1: type_name : ( specifier_qualifier_list ( abstract_declarator )? | type_id );", 49, 13, self.input) raise nvae @@ -3920,26 +3939,26 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("287:1: type_name : ( specifier_qualifier_list ( abstract_declarator )? | type_id );", 49, 0, self.input) + nvae = NoViableAltException("340:1: type_name : ( specifier_qualifier_list ( abstract_declarator )? | type_id );", 49, 0, self.input) raise nvae if alt49 == 1: - # C.g:288:4: specifier_qualifier_list ( abstract_declarator )? - self.following.append(self.FOLLOW_specifier_qualifier_list_in_type_name1031) + # C.g:341:4: specifier_qualifier_list ( abstract_declarator )? + self.following.append(self.FOLLOW_specifier_qualifier_list_in_type_name1046) self.specifier_qualifier_list() self.following.pop() if self.failed: return - # C.g:288:29: ( abstract_declarator )? + # C.g:341:29: ( abstract_declarator )? alt48 = 2 LA48_0 = self.input.LA(1) - if (LA48_0 == 61 or LA48_0 == 63 or LA48_0 == 65) : + if (LA48_0 == 62 or LA48_0 == 64 or LA48_0 == 66) : alt48 = 1 if alt48 == 1: # C.g:0:0: abstract_declarator - self.following.append(self.FOLLOW_abstract_declarator_in_type_name1033) + self.following.append(self.FOLLOW_abstract_declarator_in_type_name1048) self.abstract_declarator() self.following.pop() if self.failed: @@ -3950,8 +3969,8 @@ class CParser(Parser): elif alt49 == 2: - # C.g:289:4: type_id - self.following.append(self.FOLLOW_type_id_in_type_name1039) + # C.g:342:4: type_id + self.following.append(self.FOLLOW_type_id_in_type_name1054) self.type_id() self.following.pop() if self.failed: @@ -3974,7 +3993,7 @@ class CParser(Parser): # $ANTLR start abstract_declarator - # C.g:292:1: abstract_declarator : ( pointer ( direct_abstract_declarator )? | direct_abstract_declarator ); + # C.g:345:1: abstract_declarator : ( pointer ( direct_abstract_declarator )? | direct_abstract_declarator ); def abstract_declarator(self, ): abstract_declarator_StartIndex = self.input.index() @@ -3983,211 +4002,211 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 31): return - # C.g:293:2: ( pointer ( direct_abstract_declarator )? | direct_abstract_declarator ) + # C.g:346:2: ( pointer ( direct_abstract_declarator )? | direct_abstract_declarator ) alt51 = 2 LA51_0 = self.input.LA(1) - if (LA51_0 == 65) : + if (LA51_0 == 66) : alt51 = 1 - elif (LA51_0 == 61 or LA51_0 == 63) : + elif (LA51_0 == 62 or LA51_0 == 64) : alt51 = 2 else: if self.backtracking > 0: self.failed = True return - nvae = NoViableAltException("292:1: abstract_declarator : ( pointer ( direct_abstract_declarator )? | direct_abstract_declarator );", 51, 0, self.input) + nvae = NoViableAltException("345:1: abstract_declarator : ( pointer ( direct_abstract_declarator )? | direct_abstract_declarator );", 51, 0, self.input) raise nvae if alt51 == 1: - # C.g:293:4: pointer ( direct_abstract_declarator )? - self.following.append(self.FOLLOW_pointer_in_abstract_declarator1050) + # C.g:346:4: pointer ( direct_abstract_declarator )? + self.following.append(self.FOLLOW_pointer_in_abstract_declarator1065) self.pointer() self.following.pop() if self.failed: return - # C.g:293:12: ( direct_abstract_declarator )? + # C.g:346:12: ( direct_abstract_declarator )? alt50 = 2 LA50_0 = self.input.LA(1) - if (LA50_0 == 61) : + if (LA50_0 == 62) : LA50 = self.input.LA(2) - if LA50 == 62: + if LA50 == 63: LA50_12 = self.input.LA(3) - if (self.synpred90()) : + if (self.synpred91()) : alt50 = 1 elif LA50 == 58: LA50_13 = self.input.LA(3) - if (self.synpred90()) : + if (self.synpred91()) : alt50 = 1 - elif LA50 == 65: + elif LA50 == 66: LA50_14 = self.input.LA(3) - if (self.synpred90()) : + if (self.synpred91()) : alt50 = 1 elif LA50 == 59: LA50_15 = self.input.LA(3) - if (self.synpred90()) : + if (self.synpred91()) : alt50 = 1 elif LA50 == 60: LA50_16 = self.input.LA(3) - if (self.synpred90()) : + if (self.synpred91()) : alt50 = 1 elif LA50 == IDENTIFIER: LA50_17 = self.input.LA(3) - if (self.synpred90()) : + if (self.synpred91()) : alt50 = 1 - elif LA50 == 61: + elif LA50 == 62: LA50_18 = self.input.LA(3) - if (self.synpred90()) : + if (self.synpred91()) : alt50 = 1 - elif LA50 == 29 or LA50 == 30 or LA50 == 31 or LA50 == 32 or LA50 == 33: + elif LA50 == 64: LA50_19 = self.input.LA(3) - if (self.synpred90()) : + if (self.synpred91()) : alt50 = 1 - elif LA50 == 34: + elif LA50 == 29 or LA50 == 30 or LA50 == 31 or LA50 == 32 or LA50 == 33: LA50_20 = self.input.LA(3) - if (self.synpred90()) : + if (self.synpred91()) : alt50 = 1 - elif LA50 == 35: + elif LA50 == 34: LA50_21 = self.input.LA(3) - if (self.synpred90()) : + if (self.synpred91()) : alt50 = 1 - elif LA50 == 36: + elif LA50 == 35: LA50_22 = self.input.LA(3) - if (self.synpred90()) : + if (self.synpred91()) : alt50 = 1 - elif LA50 == 37: + elif LA50 == 36: LA50_23 = self.input.LA(3) - if (self.synpred90()) : + if (self.synpred91()) : alt50 = 1 - elif LA50 == 38: + elif LA50 == 37: LA50_24 = self.input.LA(3) - if (self.synpred90()) : + if (self.synpred91()) : alt50 = 1 - elif LA50 == 39: + elif LA50 == 38: LA50_25 = self.input.LA(3) - if (self.synpred90()) : + if (self.synpred91()) : alt50 = 1 - elif LA50 == 40: + elif LA50 == 39: LA50_26 = self.input.LA(3) - if (self.synpred90()) : + if (self.synpred91()) : alt50 = 1 - elif LA50 == 41: + elif LA50 == 40: LA50_27 = self.input.LA(3) - if (self.synpred90()) : + if (self.synpred91()) : alt50 = 1 - elif LA50 == 42: + elif LA50 == 41: LA50_28 = self.input.LA(3) - if (self.synpred90()) : + if (self.synpred91()) : alt50 = 1 - elif LA50 == 45 or LA50 == 46: + elif LA50 == 42: LA50_29 = self.input.LA(3) - if (self.synpred90()) : + if (self.synpred91()) : alt50 = 1 - elif LA50 == 48: + elif LA50 == 45 or LA50 == 46: LA50_30 = self.input.LA(3) - if (self.synpred90()) : + if (self.synpred91()) : alt50 = 1 - elif LA50 == 49 or LA50 == 50 or LA50 == 51 or LA50 == 52 or LA50 == 53 or LA50 == 54 or LA50 == 55 or LA50 == 56 or LA50 == 57: + elif LA50 == 48: LA50_31 = self.input.LA(3) - if (self.synpred90()) : + if (self.synpred91()) : alt50 = 1 - elif LA50 == 63: + elif LA50 == 49 or LA50 == 50 or LA50 == 51 or LA50 == 52 or LA50 == 53 or LA50 == 54 or LA50 == 55 or LA50 == 56 or LA50 == 57 or LA50 == 61: LA50_32 = self.input.LA(3) - if (self.synpred90()) : + if (self.synpred91()) : alt50 = 1 - elif (LA50_0 == 63) : + elif (LA50_0 == 64) : LA50 = self.input.LA(2) - if LA50 == 64: + if LA50 == 65: LA50_33 = self.input.LA(3) - if (self.synpred90()) : + if (self.synpred91()) : alt50 = 1 - elif LA50 == 61: + elif LA50 == 62: LA50_34 = self.input.LA(3) - if (self.synpred90()) : + if (self.synpred91()) : alt50 = 1 elif LA50 == IDENTIFIER: LA50_35 = self.input.LA(3) - if (self.synpred90()) : + if (self.synpred91()) : alt50 = 1 elif LA50 == HEX_LITERAL: LA50_36 = self.input.LA(3) - if (self.synpred90()) : + if (self.synpred91()) : alt50 = 1 elif LA50 == OCTAL_LITERAL: LA50_37 = self.input.LA(3) - if (self.synpred90()) : + if (self.synpred91()) : alt50 = 1 elif LA50 == DECIMAL_LITERAL: LA50_38 = self.input.LA(3) - if (self.synpred90()) : + if (self.synpred91()) : alt50 = 1 elif LA50 == CHARACTER_LITERAL: LA50_39 = self.input.LA(3) - if (self.synpred90()) : + if (self.synpred91()) : alt50 = 1 elif LA50 == STRING_LITERAL: LA50_40 = self.input.LA(3) - if (self.synpred90()) : + if (self.synpred91()) : alt50 = 1 elif LA50 == FLOATING_POINT_LITERAL: LA50_41 = self.input.LA(3) - if (self.synpred90()) : + if (self.synpred91()) : alt50 = 1 - elif LA50 == 71: + elif LA50 == 72: LA50_42 = self.input.LA(3) - if (self.synpred90()) : + if (self.synpred91()) : alt50 = 1 - elif LA50 == 72: + elif LA50 == 73: LA50_43 = self.input.LA(3) - if (self.synpred90()) : + if (self.synpred91()) : alt50 = 1 - elif LA50 == 65 or LA50 == 67 or LA50 == 68 or LA50 == 76 or LA50 == 77 or LA50 == 78: + elif LA50 == 66 or LA50 == 68 or LA50 == 69 or LA50 == 77 or LA50 == 78 or LA50 == 79: LA50_44 = self.input.LA(3) - if (self.synpred90()) : + if (self.synpred91()) : alt50 = 1 - elif LA50 == 73: + elif LA50 == 74: LA50_45 = self.input.LA(3) - if (self.synpred90()) : + if (self.synpred91()) : alt50 = 1 if alt50 == 1: # C.g:0:0: direct_abstract_declarator - self.following.append(self.FOLLOW_direct_abstract_declarator_in_abstract_declarator1052) + self.following.append(self.FOLLOW_direct_abstract_declarator_in_abstract_declarator1067) self.direct_abstract_declarator() self.following.pop() if self.failed: @@ -4198,8 +4217,8 @@ class CParser(Parser): elif alt51 == 2: - # C.g:294:4: direct_abstract_declarator - self.following.append(self.FOLLOW_direct_abstract_declarator_in_abstract_declarator1058) + # C.g:347:4: direct_abstract_declarator + self.following.append(self.FOLLOW_direct_abstract_declarator_in_abstract_declarator1073) self.direct_abstract_declarator() self.following.pop() if self.failed: @@ -4222,7 +4241,7 @@ class CParser(Parser): # $ANTLR start direct_abstract_declarator - # C.g:297:1: direct_abstract_declarator : ( '(' abstract_declarator ')' | abstract_declarator_suffix ) ( abstract_declarator_suffix )* ; + # C.g:350:1: direct_abstract_declarator : ( '(' abstract_declarator ')' | abstract_declarator_suffix ) ( abstract_declarator_suffix )* ; def direct_abstract_declarator(self, ): direct_abstract_declarator_StartIndex = self.input.index() @@ -4231,20 +4250,20 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 32): return - # C.g:298:2: ( ( '(' abstract_declarator ')' | abstract_declarator_suffix ) ( abstract_declarator_suffix )* ) - # C.g:298:4: ( '(' abstract_declarator ')' | abstract_declarator_suffix ) ( abstract_declarator_suffix )* - # C.g:298:4: ( '(' abstract_declarator ')' | abstract_declarator_suffix ) + # C.g:351:2: ( ( '(' abstract_declarator ')' | abstract_declarator_suffix ) ( abstract_declarator_suffix )* ) + # C.g:351:4: ( '(' abstract_declarator ')' | abstract_declarator_suffix ) ( abstract_declarator_suffix )* + # C.g:351:4: ( '(' abstract_declarator ')' | abstract_declarator_suffix ) alt52 = 2 LA52_0 = self.input.LA(1) - if (LA52_0 == 61) : + if (LA52_0 == 62) : LA52 = self.input.LA(2) - if LA52 == IDENTIFIER or LA52 == 29 or LA52 == 30 or LA52 == 31 or LA52 == 32 or LA52 == 33 or LA52 == 34 or LA52 == 35 or LA52 == 36 or LA52 == 37 or LA52 == 38 or LA52 == 39 or LA52 == 40 or LA52 == 41 or LA52 == 42 or LA52 == 45 or LA52 == 46 or LA52 == 48 or LA52 == 49 or LA52 == 50 or LA52 == 51 or LA52 == 52 or LA52 == 53 or LA52 == 54 or LA52 == 55 or LA52 == 56 or LA52 == 57 or LA52 == 58 or LA52 == 59 or LA52 == 60 or LA52 == 62: + if LA52 == IDENTIFIER or LA52 == 29 or LA52 == 30 or LA52 == 31 or LA52 == 32 or LA52 == 33 or LA52 == 34 or LA52 == 35 or LA52 == 36 or LA52 == 37 or LA52 == 38 or LA52 == 39 or LA52 == 40 or LA52 == 41 or LA52 == 42 or LA52 == 45 or LA52 == 46 or LA52 == 48 or LA52 == 49 or LA52 == 50 or LA52 == 51 or LA52 == 52 or LA52 == 53 or LA52 == 54 or LA52 == 55 or LA52 == 56 or LA52 == 57 or LA52 == 58 or LA52 == 59 or LA52 == 60 or LA52 == 61 or LA52 == 63: alt52 = 2 - elif LA52 == 65: + elif LA52 == 66: LA52_18 = self.input.LA(3) - if (self.synpred92()) : + if (self.synpred93()) : alt52 = 1 elif (True) : alt52 = 2 @@ -4253,50 +4272,50 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("298:4: ( '(' abstract_declarator ')' | abstract_declarator_suffix )", 52, 18, self.input) + nvae = NoViableAltException("351:4: ( '(' abstract_declarator ')' | abstract_declarator_suffix )", 52, 18, self.input) raise nvae - elif LA52 == 61 or LA52 == 63: + elif LA52 == 62 or LA52 == 64: alt52 = 1 else: if self.backtracking > 0: self.failed = True return - nvae = NoViableAltException("298:4: ( '(' abstract_declarator ')' | abstract_declarator_suffix )", 52, 1, self.input) + nvae = NoViableAltException("351:4: ( '(' abstract_declarator ')' | abstract_declarator_suffix )", 52, 1, self.input) raise nvae - elif (LA52_0 == 63) : + elif (LA52_0 == 64) : alt52 = 2 else: if self.backtracking > 0: self.failed = True return - nvae = NoViableAltException("298:4: ( '(' abstract_declarator ')' | abstract_declarator_suffix )", 52, 0, self.input) + nvae = NoViableAltException("351:4: ( '(' abstract_declarator ')' | abstract_declarator_suffix )", 52, 0, self.input) raise nvae if alt52 == 1: - # C.g:298:6: '(' abstract_declarator ')' - self.match(self.input, 61, self.FOLLOW_61_in_direct_abstract_declarator1071) + # C.g:351:6: '(' abstract_declarator ')' + self.match(self.input, 62, self.FOLLOW_62_in_direct_abstract_declarator1086) if self.failed: return - self.following.append(self.FOLLOW_abstract_declarator_in_direct_abstract_declarator1073) + self.following.append(self.FOLLOW_abstract_declarator_in_direct_abstract_declarator1088) self.abstract_declarator() self.following.pop() if self.failed: return - self.match(self.input, 62, self.FOLLOW_62_in_direct_abstract_declarator1075) + self.match(self.input, 63, self.FOLLOW_63_in_direct_abstract_declarator1090) if self.failed: return elif alt52 == 2: - # C.g:298:36: abstract_declarator_suffix - self.following.append(self.FOLLOW_abstract_declarator_suffix_in_direct_abstract_declarator1079) + # C.g:351:36: abstract_declarator_suffix + self.following.append(self.FOLLOW_abstract_declarator_suffix_in_direct_abstract_declarator1094) self.abstract_declarator_suffix() self.following.pop() if self.failed: @@ -4304,237 +4323,237 @@ class CParser(Parser): - # C.g:298:65: ( abstract_declarator_suffix )* + # C.g:351:65: ( abstract_declarator_suffix )* while True: #loop53 alt53 = 2 LA53_0 = self.input.LA(1) - if (LA53_0 == 61) : + if (LA53_0 == 62) : LA53 = self.input.LA(2) - if LA53 == 62: + if LA53 == 63: LA53_12 = self.input.LA(3) - if (self.synpred93()) : + if (self.synpred94()) : alt53 = 1 elif LA53 == 58: LA53_13 = self.input.LA(3) - if (self.synpred93()) : + if (self.synpred94()) : alt53 = 1 - elif LA53 == 65: + elif LA53 == 66: LA53_14 = self.input.LA(3) - if (self.synpred93()) : + if (self.synpred94()) : alt53 = 1 elif LA53 == 59: LA53_15 = self.input.LA(3) - if (self.synpred93()) : + if (self.synpred94()) : alt53 = 1 elif LA53 == 60: LA53_16 = self.input.LA(3) - if (self.synpred93()) : + if (self.synpred94()) : alt53 = 1 elif LA53 == IDENTIFIER: LA53_17 = self.input.LA(3) - if (self.synpred93()) : + if (self.synpred94()) : alt53 = 1 elif LA53 == 29 or LA53 == 30 or LA53 == 31 or LA53 == 32 or LA53 == 33: LA53_19 = self.input.LA(3) - if (self.synpred93()) : + if (self.synpred94()) : alt53 = 1 elif LA53 == 34: LA53_20 = self.input.LA(3) - if (self.synpred93()) : + if (self.synpred94()) : alt53 = 1 elif LA53 == 35: LA53_21 = self.input.LA(3) - if (self.synpred93()) : + if (self.synpred94()) : alt53 = 1 elif LA53 == 36: LA53_22 = self.input.LA(3) - if (self.synpred93()) : + if (self.synpred94()) : alt53 = 1 elif LA53 == 37: LA53_23 = self.input.LA(3) - if (self.synpred93()) : + if (self.synpred94()) : alt53 = 1 elif LA53 == 38: LA53_24 = self.input.LA(3) - if (self.synpred93()) : + if (self.synpred94()) : alt53 = 1 elif LA53 == 39: LA53_25 = self.input.LA(3) - if (self.synpred93()) : + if (self.synpred94()) : alt53 = 1 elif LA53 == 40: LA53_26 = self.input.LA(3) - if (self.synpred93()) : + if (self.synpred94()) : alt53 = 1 elif LA53 == 41: LA53_27 = self.input.LA(3) - if (self.synpred93()) : + if (self.synpred94()) : alt53 = 1 elif LA53 == 42: LA53_28 = self.input.LA(3) - if (self.synpred93()) : + if (self.synpred94()) : alt53 = 1 elif LA53 == 45 or LA53 == 46: LA53_29 = self.input.LA(3) - if (self.synpred93()) : + if (self.synpred94()) : alt53 = 1 elif LA53 == 48: LA53_30 = self.input.LA(3) - if (self.synpred93()) : + if (self.synpred94()) : alt53 = 1 - elif LA53 == 49 or LA53 == 50 or LA53 == 51 or LA53 == 52 or LA53 == 53 or LA53 == 54 or LA53 == 55 or LA53 == 56 or LA53 == 57: + elif LA53 == 49 or LA53 == 50 or LA53 == 51 or LA53 == 52 or LA53 == 53 or LA53 == 54 or LA53 == 55 or LA53 == 56 or LA53 == 57 or LA53 == 61: LA53_31 = self.input.LA(3) - if (self.synpred93()) : + if (self.synpred94()) : alt53 = 1 - elif (LA53_0 == 63) : + elif (LA53_0 == 64) : LA53 = self.input.LA(2) - if LA53 == 64: + if LA53 == 65: LA53_33 = self.input.LA(3) - if (self.synpred93()) : + if (self.synpred94()) : alt53 = 1 - elif LA53 == 61: + elif LA53 == 62: LA53_34 = self.input.LA(3) - if (self.synpred93()) : + if (self.synpred94()) : alt53 = 1 elif LA53 == IDENTIFIER: LA53_35 = self.input.LA(3) - if (self.synpred93()) : + if (self.synpred94()) : alt53 = 1 elif LA53 == HEX_LITERAL: LA53_36 = self.input.LA(3) - if (self.synpred93()) : + if (self.synpred94()) : alt53 = 1 elif LA53 == OCTAL_LITERAL: LA53_37 = self.input.LA(3) - if (self.synpred93()) : + if (self.synpred94()) : alt53 = 1 elif LA53 == DECIMAL_LITERAL: LA53_38 = self.input.LA(3) - if (self.synpred93()) : + if (self.synpred94()) : alt53 = 1 elif LA53 == CHARACTER_LITERAL: LA53_39 = self.input.LA(3) - if (self.synpred93()) : + if (self.synpred94()) : alt53 = 1 elif LA53 == STRING_LITERAL: LA53_40 = self.input.LA(3) - if (self.synpred93()) : + if (self.synpred94()) : alt53 = 1 elif LA53 == FLOATING_POINT_LITERAL: LA53_41 = self.input.LA(3) - if (self.synpred93()) : + if (self.synpred94()) : alt53 = 1 - elif LA53 == 71: + elif LA53 == 72: LA53_42 = self.input.LA(3) - if (self.synpred93()) : + if (self.synpred94()) : alt53 = 1 - elif LA53 == 72: + elif LA53 == 73: LA53_43 = self.input.LA(3) - if (self.synpred93()) : + if (self.synpred94()) : alt53 = 1 - elif LA53 == 65 or LA53 == 67 or LA53 == 68 or LA53 == 76 or LA53 == 77 or LA53 == 78: + elif LA53 == 66 or LA53 == 68 or LA53 == 69 or LA53 == 77 or LA53 == 78 or LA53 == 79: LA53_44 = self.input.LA(3) - if (self.synpred93()) : + if (self.synpred94()) : alt53 = 1 - elif LA53 == 73: + elif LA53 == 74: LA53_45 = self.input.LA(3) - if (self.synpred93()) : + if (self.synpred94()) : alt53 = 1 @@ -4543,7 +4562,7 @@ class CParser(Parser): if alt53 == 1: # C.g:0:0: abstract_declarator_suffix - self.following.append(self.FOLLOW_abstract_declarator_suffix_in_direct_abstract_declarator1083) + self.following.append(self.FOLLOW_abstract_declarator_suffix_in_direct_abstract_declarator1098) self.abstract_declarator_suffix() self.following.pop() if self.failed: @@ -4573,7 +4592,7 @@ class CParser(Parser): # $ANTLR start abstract_declarator_suffix - # C.g:301:1: abstract_declarator_suffix : ( '[' ']' | '[' constant_expression ']' | '(' ')' | '(' parameter_type_list ')' ); + # C.g:354:1: abstract_declarator_suffix : ( '[' ']' | '[' constant_expression ']' | '(' ')' | '(' parameter_type_list ')' ); def abstract_declarator_suffix(self, ): abstract_declarator_suffix_StartIndex = self.input.index() @@ -4582,39 +4601,39 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 33): return - # C.g:302:2: ( '[' ']' | '[' constant_expression ']' | '(' ')' | '(' parameter_type_list ')' ) + # C.g:355:2: ( '[' ']' | '[' constant_expression ']' | '(' ')' | '(' parameter_type_list ')' ) alt54 = 4 LA54_0 = self.input.LA(1) - if (LA54_0 == 63) : + if (LA54_0 == 64) : LA54_1 = self.input.LA(2) - if (LA54_1 == 64) : + if (LA54_1 == 65) : alt54 = 1 - elif ((IDENTIFIER <= LA54_1 <= FLOATING_POINT_LITERAL) or LA54_1 == 61 or LA54_1 == 65 or (67 <= LA54_1 <= 68) or (71 <= LA54_1 <= 73) or (76 <= LA54_1 <= 78)) : + elif ((IDENTIFIER <= LA54_1 <= FLOATING_POINT_LITERAL) or LA54_1 == 62 or LA54_1 == 66 or (68 <= LA54_1 <= 69) or (72 <= LA54_1 <= 74) or (77 <= LA54_1 <= 79)) : alt54 = 2 else: if self.backtracking > 0: self.failed = True return - nvae = NoViableAltException("301:1: abstract_declarator_suffix : ( '[' ']' | '[' constant_expression ']' | '(' ')' | '(' parameter_type_list ')' );", 54, 1, self.input) + nvae = NoViableAltException("354:1: abstract_declarator_suffix : ( '[' ']' | '[' constant_expression ']' | '(' ')' | '(' parameter_type_list ')' );", 54, 1, self.input) raise nvae - elif (LA54_0 == 61) : + elif (LA54_0 == 62) : LA54_2 = self.input.LA(2) - if (LA54_2 == 62) : + if (LA54_2 == 63) : alt54 = 3 - elif (LA54_2 == IDENTIFIER or (29 <= LA54_2 <= 42) or (45 <= LA54_2 <= 46) or (48 <= LA54_2 <= 60) or LA54_2 == 65) : + elif (LA54_2 == IDENTIFIER or (29 <= LA54_2 <= 42) or (45 <= LA54_2 <= 46) or (48 <= LA54_2 <= 61) or LA54_2 == 66) : alt54 = 4 else: if self.backtracking > 0: self.failed = True return - nvae = NoViableAltException("301:1: abstract_declarator_suffix : ( '[' ']' | '[' constant_expression ']' | '(' ')' | '(' parameter_type_list ')' );", 54, 2, self.input) + nvae = NoViableAltException("354:1: abstract_declarator_suffix : ( '[' ']' | '[' constant_expression ']' | '(' ')' | '(' parameter_type_list ')' );", 54, 2, self.input) raise nvae @@ -4623,56 +4642,56 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("301:1: abstract_declarator_suffix : ( '[' ']' | '[' constant_expression ']' | '(' ')' | '(' parameter_type_list ')' );", 54, 0, self.input) + nvae = NoViableAltException("354:1: abstract_declarator_suffix : ( '[' ']' | '[' constant_expression ']' | '(' ')' | '(' parameter_type_list ')' );", 54, 0, self.input) raise nvae if alt54 == 1: - # C.g:302:4: '[' ']' - self.match(self.input, 63, self.FOLLOW_63_in_abstract_declarator_suffix1095) + # C.g:355:4: '[' ']' + self.match(self.input, 64, self.FOLLOW_64_in_abstract_declarator_suffix1110) if self.failed: return - self.match(self.input, 64, self.FOLLOW_64_in_abstract_declarator_suffix1097) + self.match(self.input, 65, self.FOLLOW_65_in_abstract_declarator_suffix1112) if self.failed: return elif alt54 == 2: - # C.g:303:4: '[' constant_expression ']' - self.match(self.input, 63, self.FOLLOW_63_in_abstract_declarator_suffix1102) + # C.g:356:4: '[' constant_expression ']' + self.match(self.input, 64, self.FOLLOW_64_in_abstract_declarator_suffix1117) if self.failed: return - self.following.append(self.FOLLOW_constant_expression_in_abstract_declarator_suffix1104) + self.following.append(self.FOLLOW_constant_expression_in_abstract_declarator_suffix1119) self.constant_expression() self.following.pop() if self.failed: return - self.match(self.input, 64, self.FOLLOW_64_in_abstract_declarator_suffix1106) + self.match(self.input, 65, self.FOLLOW_65_in_abstract_declarator_suffix1121) if self.failed: return elif alt54 == 3: - # C.g:304:4: '(' ')' - self.match(self.input, 61, self.FOLLOW_61_in_abstract_declarator_suffix1111) + # C.g:357:4: '(' ')' + self.match(self.input, 62, self.FOLLOW_62_in_abstract_declarator_suffix1126) if self.failed: return - self.match(self.input, 62, self.FOLLOW_62_in_abstract_declarator_suffix1113) + self.match(self.input, 63, self.FOLLOW_63_in_abstract_declarator_suffix1128) if self.failed: return elif alt54 == 4: - # C.g:305:4: '(' parameter_type_list ')' - self.match(self.input, 61, self.FOLLOW_61_in_abstract_declarator_suffix1118) + # C.g:358:4: '(' parameter_type_list ')' + self.match(self.input, 62, self.FOLLOW_62_in_abstract_declarator_suffix1133) if self.failed: return - self.following.append(self.FOLLOW_parameter_type_list_in_abstract_declarator_suffix1120) + self.following.append(self.FOLLOW_parameter_type_list_in_abstract_declarator_suffix1135) self.parameter_type_list() self.following.pop() if self.failed: return - self.match(self.input, 62, self.FOLLOW_62_in_abstract_declarator_suffix1122) + self.match(self.input, 63, self.FOLLOW_63_in_abstract_declarator_suffix1137) if self.failed: return @@ -4693,7 +4712,7 @@ class CParser(Parser): # $ANTLR start initializer - # C.g:308:1: initializer : ( assignment_expression | '{' initializer_list ( ',' )? '}' ); + # C.g:361:1: initializer : ( assignment_expression | '{' initializer_list ( ',' )? '}' ); def initializer(self, ): initializer_StartIndex = self.input.index() @@ -4702,11 +4721,11 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 34): return - # C.g:310:2: ( assignment_expression | '{' initializer_list ( ',' )? '}' ) + # C.g:363:2: ( assignment_expression | '{' initializer_list ( ',' )? '}' ) alt56 = 2 LA56_0 = self.input.LA(1) - if ((IDENTIFIER <= LA56_0 <= FLOATING_POINT_LITERAL) or LA56_0 == 61 or LA56_0 == 65 or (67 <= LA56_0 <= 68) or (71 <= LA56_0 <= 73) or (76 <= LA56_0 <= 78)) : + if ((IDENTIFIER <= LA56_0 <= FLOATING_POINT_LITERAL) or LA56_0 == 62 or LA56_0 == 66 or (68 <= LA56_0 <= 69) or (72 <= LA56_0 <= 74) or (77 <= LA56_0 <= 79)) : alt56 = 1 elif (LA56_0 == 43) : alt56 = 2 @@ -4715,13 +4734,13 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("308:1: initializer : ( assignment_expression | '{' initializer_list ( ',' )? '}' );", 56, 0, self.input) + nvae = NoViableAltException("361:1: initializer : ( assignment_expression | '{' initializer_list ( ',' )? '}' );", 56, 0, self.input) raise nvae if alt56 == 1: - # C.g:310:4: assignment_expression - self.following.append(self.FOLLOW_assignment_expression_in_initializer1135) + # C.g:363:4: assignment_expression + self.following.append(self.FOLLOW_assignment_expression_in_initializer1150) self.assignment_expression() self.following.pop() if self.failed: @@ -4729,16 +4748,16 @@ class CParser(Parser): elif alt56 == 2: - # C.g:311:4: '{' initializer_list ( ',' )? '}' - self.match(self.input, 43, self.FOLLOW_43_in_initializer1140) + # C.g:364:4: '{' initializer_list ( ',' )? '}' + self.match(self.input, 43, self.FOLLOW_43_in_initializer1155) if self.failed: return - self.following.append(self.FOLLOW_initializer_list_in_initializer1142) + self.following.append(self.FOLLOW_initializer_list_in_initializer1157) self.initializer_list() self.following.pop() if self.failed: return - # C.g:311:25: ( ',' )? + # C.g:364:25: ( ',' )? alt55 = 2 LA55_0 = self.input.LA(1) @@ -4746,13 +4765,13 @@ class CParser(Parser): alt55 = 1 if alt55 == 1: # C.g:0:0: ',' - self.match(self.input, 27, self.FOLLOW_27_in_initializer1144) + self.match(self.input, 27, self.FOLLOW_27_in_initializer1159) if self.failed: return - self.match(self.input, 44, self.FOLLOW_44_in_initializer1147) + self.match(self.input, 44, self.FOLLOW_44_in_initializer1162) if self.failed: return @@ -4773,7 +4792,7 @@ class CParser(Parser): # $ANTLR start initializer_list - # C.g:314:1: initializer_list : initializer ( ',' initializer )* ; + # C.g:367:1: initializer_list : initializer ( ',' initializer )* ; def initializer_list(self, ): initializer_list_StartIndex = self.input.index() @@ -4782,14 +4801,14 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 35): return - # C.g:315:2: ( initializer ( ',' initializer )* ) - # C.g:315:4: initializer ( ',' initializer )* - self.following.append(self.FOLLOW_initializer_in_initializer_list1158) + # C.g:368:2: ( initializer ( ',' initializer )* ) + # C.g:368:4: initializer ( ',' initializer )* + self.following.append(self.FOLLOW_initializer_in_initializer_list1173) self.initializer() self.following.pop() if self.failed: return - # C.g:315:16: ( ',' initializer )* + # C.g:368:16: ( ',' initializer )* while True: #loop57 alt57 = 2 LA57_0 = self.input.LA(1) @@ -4797,18 +4816,18 @@ class CParser(Parser): if (LA57_0 == 27) : LA57_1 = self.input.LA(2) - if ((IDENTIFIER <= LA57_1 <= FLOATING_POINT_LITERAL) or LA57_1 == 43 or LA57_1 == 61 or LA57_1 == 65 or (67 <= LA57_1 <= 68) or (71 <= LA57_1 <= 73) or (76 <= LA57_1 <= 78)) : + if ((IDENTIFIER <= LA57_1 <= FLOATING_POINT_LITERAL) or LA57_1 == 43 or LA57_1 == 62 or LA57_1 == 66 or (68 <= LA57_1 <= 69) or (72 <= LA57_1 <= 74) or (77 <= LA57_1 <= 79)) : alt57 = 1 if alt57 == 1: - # C.g:315:17: ',' initializer - self.match(self.input, 27, self.FOLLOW_27_in_initializer_list1161) + # C.g:368:17: ',' initializer + self.match(self.input, 27, self.FOLLOW_27_in_initializer_list1176) if self.failed: return - self.following.append(self.FOLLOW_initializer_in_initializer_list1163) + self.following.append(self.FOLLOW_initializer_in_initializer_list1178) self.initializer() self.following.pop() if self.failed: @@ -4844,7 +4863,7 @@ class CParser(Parser): # $ANTLR start argument_expression_list - # C.g:320:1: argument_expression_list : assignment_expression ( 'OPTIONAL' )? ( ',' assignment_expression ( 'OPTIONAL' )? )* ; + # C.g:373:1: argument_expression_list : assignment_expression ( 'OPTIONAL' )? ( ',' assignment_expression ( 'OPTIONAL' )? )* ; def argument_expression_list(self, ): retval = self.argument_expression_list_return() @@ -4855,28 +4874,28 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 36): return retval - # C.g:321:2: ( assignment_expression ( 'OPTIONAL' )? ( ',' assignment_expression ( 'OPTIONAL' )? )* ) - # C.g:321:6: assignment_expression ( 'OPTIONAL' )? ( ',' assignment_expression ( 'OPTIONAL' )? )* - self.following.append(self.FOLLOW_assignment_expression_in_argument_expression_list1181) + # C.g:374:2: ( assignment_expression ( 'OPTIONAL' )? ( ',' assignment_expression ( 'OPTIONAL' )? )* ) + # C.g:374:6: assignment_expression ( 'OPTIONAL' )? ( ',' assignment_expression ( 'OPTIONAL' )? )* + self.following.append(self.FOLLOW_assignment_expression_in_argument_expression_list1196) self.assignment_expression() self.following.pop() if self.failed: return retval - # C.g:321:28: ( 'OPTIONAL' )? + # C.g:374:28: ( 'OPTIONAL' )? alt58 = 2 LA58_0 = self.input.LA(1) if (LA58_0 == 53) : alt58 = 1 if alt58 == 1: - # C.g:321:29: 'OPTIONAL' - self.match(self.input, 53, self.FOLLOW_53_in_argument_expression_list1184) + # C.g:374:29: 'OPTIONAL' + self.match(self.input, 53, self.FOLLOW_53_in_argument_expression_list1199) if self.failed: return retval - # C.g:321:42: ( ',' assignment_expression ( 'OPTIONAL' )? )* + # C.g:374:42: ( ',' assignment_expression ( 'OPTIONAL' )? )* while True: #loop60 alt60 = 2 LA60_0 = self.input.LA(1) @@ -4886,24 +4905,24 @@ class CParser(Parser): if alt60 == 1: - # C.g:321:43: ',' assignment_expression ( 'OPTIONAL' )? - self.match(self.input, 27, self.FOLLOW_27_in_argument_expression_list1189) + # C.g:374:43: ',' assignment_expression ( 'OPTIONAL' )? + self.match(self.input, 27, self.FOLLOW_27_in_argument_expression_list1204) if self.failed: return retval - self.following.append(self.FOLLOW_assignment_expression_in_argument_expression_list1191) + self.following.append(self.FOLLOW_assignment_expression_in_argument_expression_list1206) self.assignment_expression() self.following.pop() if self.failed: return retval - # C.g:321:69: ( 'OPTIONAL' )? + # C.g:374:69: ( 'OPTIONAL' )? alt59 = 2 LA59_0 = self.input.LA(1) if (LA59_0 == 53) : alt59 = 1 if alt59 == 1: - # C.g:321:70: 'OPTIONAL' - self.match(self.input, 53, self.FOLLOW_53_in_argument_expression_list1194) + # C.g:374:70: 'OPTIONAL' + self.match(self.input, 53, self.FOLLOW_53_in_argument_expression_list1209) if self.failed: return retval @@ -4936,7 +4955,7 @@ class CParser(Parser): # $ANTLR start additive_expression - # C.g:324:1: additive_expression : ( multiplicative_expression ) ( '+' multiplicative_expression | '-' multiplicative_expression )* ; + # C.g:377:1: additive_expression : ( multiplicative_expression ) ( '+' multiplicative_expression | '-' multiplicative_expression )* ; def additive_expression(self, ): additive_expression_StartIndex = self.input.index() @@ -4945,11 +4964,11 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 37): return - # C.g:325:2: ( ( multiplicative_expression ) ( '+' multiplicative_expression | '-' multiplicative_expression )* ) - # C.g:325:4: ( multiplicative_expression ) ( '+' multiplicative_expression | '-' multiplicative_expression )* - # C.g:325:4: ( multiplicative_expression ) - # C.g:325:5: multiplicative_expression - self.following.append(self.FOLLOW_multiplicative_expression_in_additive_expression1210) + # C.g:378:2: ( ( multiplicative_expression ) ( '+' multiplicative_expression | '-' multiplicative_expression )* ) + # C.g:378:4: ( multiplicative_expression ) ( '+' multiplicative_expression | '-' multiplicative_expression )* + # C.g:378:4: ( multiplicative_expression ) + # C.g:378:5: multiplicative_expression + self.following.append(self.FOLLOW_multiplicative_expression_in_additive_expression1225) self.multiplicative_expression() self.following.pop() if self.failed: @@ -4957,23 +4976,23 @@ class CParser(Parser): - # C.g:325:32: ( '+' multiplicative_expression | '-' multiplicative_expression )* + # C.g:378:32: ( '+' multiplicative_expression | '-' multiplicative_expression )* while True: #loop61 alt61 = 3 LA61_0 = self.input.LA(1) - if (LA61_0 == 67) : + if (LA61_0 == 68) : alt61 = 1 - elif (LA61_0 == 68) : + elif (LA61_0 == 69) : alt61 = 2 if alt61 == 1: - # C.g:325:33: '+' multiplicative_expression - self.match(self.input, 67, self.FOLLOW_67_in_additive_expression1214) + # C.g:378:33: '+' multiplicative_expression + self.match(self.input, 68, self.FOLLOW_68_in_additive_expression1229) if self.failed: return - self.following.append(self.FOLLOW_multiplicative_expression_in_additive_expression1216) + self.following.append(self.FOLLOW_multiplicative_expression_in_additive_expression1231) self.multiplicative_expression() self.following.pop() if self.failed: @@ -4981,11 +5000,11 @@ class CParser(Parser): elif alt61 == 2: - # C.g:325:65: '-' multiplicative_expression - self.match(self.input, 68, self.FOLLOW_68_in_additive_expression1220) + # C.g:378:65: '-' multiplicative_expression + self.match(self.input, 69, self.FOLLOW_69_in_additive_expression1235) if self.failed: return - self.following.append(self.FOLLOW_multiplicative_expression_in_additive_expression1222) + self.following.append(self.FOLLOW_multiplicative_expression_in_additive_expression1237) self.multiplicative_expression() self.following.pop() if self.failed: @@ -5015,7 +5034,7 @@ class CParser(Parser): # $ANTLR start multiplicative_expression - # C.g:328:1: multiplicative_expression : ( cast_expression ) ( '*' cast_expression | '/' cast_expression | '%' cast_expression )* ; + # C.g:381:1: multiplicative_expression : ( cast_expression ) ( '*' cast_expression | '/' cast_expression | '%' cast_expression )* ; def multiplicative_expression(self, ): multiplicative_expression_StartIndex = self.input.index() @@ -5024,11 +5043,11 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 38): return - # C.g:329:2: ( ( cast_expression ) ( '*' cast_expression | '/' cast_expression | '%' cast_expression )* ) - # C.g:329:4: ( cast_expression ) ( '*' cast_expression | '/' cast_expression | '%' cast_expression )* - # C.g:329:4: ( cast_expression ) - # C.g:329:5: cast_expression - self.following.append(self.FOLLOW_cast_expression_in_multiplicative_expression1236) + # C.g:382:2: ( ( cast_expression ) ( '*' cast_expression | '/' cast_expression | '%' cast_expression )* ) + # C.g:382:4: ( cast_expression ) ( '*' cast_expression | '/' cast_expression | '%' cast_expression )* + # C.g:382:4: ( cast_expression ) + # C.g:382:5: cast_expression + self.following.append(self.FOLLOW_cast_expression_in_multiplicative_expression1251) self.cast_expression() self.following.pop() if self.failed: @@ -5036,23 +5055,23 @@ class CParser(Parser): - # C.g:329:22: ( '*' cast_expression | '/' cast_expression | '%' cast_expression )* + # C.g:382:22: ( '*' cast_expression | '/' cast_expression | '%' cast_expression )* while True: #loop62 alt62 = 4 LA62 = self.input.LA(1) - if LA62 == 65: + if LA62 == 66: alt62 = 1 - elif LA62 == 69: - alt62 = 2 elif LA62 == 70: + alt62 = 2 + elif LA62 == 71: alt62 = 3 if alt62 == 1: - # C.g:329:23: '*' cast_expression - self.match(self.input, 65, self.FOLLOW_65_in_multiplicative_expression1240) + # C.g:382:23: '*' cast_expression + self.match(self.input, 66, self.FOLLOW_66_in_multiplicative_expression1255) if self.failed: return - self.following.append(self.FOLLOW_cast_expression_in_multiplicative_expression1242) + self.following.append(self.FOLLOW_cast_expression_in_multiplicative_expression1257) self.cast_expression() self.following.pop() if self.failed: @@ -5060,11 +5079,11 @@ class CParser(Parser): elif alt62 == 2: - # C.g:329:45: '/' cast_expression - self.match(self.input, 69, self.FOLLOW_69_in_multiplicative_expression1246) + # C.g:382:45: '/' cast_expression + self.match(self.input, 70, self.FOLLOW_70_in_multiplicative_expression1261) if self.failed: return - self.following.append(self.FOLLOW_cast_expression_in_multiplicative_expression1248) + self.following.append(self.FOLLOW_cast_expression_in_multiplicative_expression1263) self.cast_expression() self.following.pop() if self.failed: @@ -5072,11 +5091,11 @@ class CParser(Parser): elif alt62 == 3: - # C.g:329:67: '%' cast_expression - self.match(self.input, 70, self.FOLLOW_70_in_multiplicative_expression1252) + # C.g:382:67: '%' cast_expression + self.match(self.input, 71, self.FOLLOW_71_in_multiplicative_expression1267) if self.failed: return - self.following.append(self.FOLLOW_cast_expression_in_multiplicative_expression1254) + self.following.append(self.FOLLOW_cast_expression_in_multiplicative_expression1269) self.cast_expression() self.following.pop() if self.failed: @@ -5106,7 +5125,7 @@ class CParser(Parser): # $ANTLR start cast_expression - # C.g:332:1: cast_expression : ( '(' type_name ')' cast_expression | unary_expression ); + # C.g:385:1: cast_expression : ( '(' type_name ')' cast_expression | unary_expression ); def cast_expression(self, ): cast_expression_StartIndex = self.input.index() @@ -5115,16 +5134,18 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 39): return - # C.g:333:2: ( '(' type_name ')' cast_expression | unary_expression ) + # C.g:386:2: ( '(' type_name ')' cast_expression | unary_expression ) alt63 = 2 LA63_0 = self.input.LA(1) - if (LA63_0 == 61) : + if (LA63_0 == 62) : LA63 = self.input.LA(2) - if LA63 == IDENTIFIER: - LA63_13 = self.input.LA(3) + if LA63 == 34 or LA63 == 35 or LA63 == 36 or LA63 == 37 or LA63 == 38 or LA63 == 39 or LA63 == 40 or LA63 == 41 or LA63 == 42 or LA63 == 45 or LA63 == 46 or LA63 == 48 or LA63 == 49 or LA63 == 50 or LA63 == 51 or LA63 == 52 or LA63 == 53 or LA63 == 54 or LA63 == 55 or LA63 == 56 or LA63 == 57 or LA63 == 58 or LA63 == 59 or LA63 == 60 or LA63 == 61: + alt63 = 1 + elif LA63 == IDENTIFIER: + LA63_25 = self.input.LA(3) - if (self.synpred108()) : + if (self.synpred109()) : alt63 = 1 elif (True) : alt63 = 2 @@ -5133,48 +5154,46 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("332:1: cast_expression : ( '(' type_name ')' cast_expression | unary_expression );", 63, 13, self.input) + nvae = NoViableAltException("385:1: cast_expression : ( '(' type_name ')' cast_expression | unary_expression );", 63, 25, self.input) raise nvae - elif LA63 == HEX_LITERAL or LA63 == OCTAL_LITERAL or LA63 == DECIMAL_LITERAL or LA63 == CHARACTER_LITERAL or LA63 == STRING_LITERAL or LA63 == FLOATING_POINT_LITERAL or LA63 == 61 or LA63 == 65 or LA63 == 67 or LA63 == 68 or LA63 == 71 or LA63 == 72 or LA63 == 73 or LA63 == 76 or LA63 == 77 or LA63 == 78: + elif LA63 == HEX_LITERAL or LA63 == OCTAL_LITERAL or LA63 == DECIMAL_LITERAL or LA63 == CHARACTER_LITERAL or LA63 == STRING_LITERAL or LA63 == FLOATING_POINT_LITERAL or LA63 == 62 or LA63 == 66 or LA63 == 68 or LA63 == 69 or LA63 == 72 or LA63 == 73 or LA63 == 74 or LA63 == 77 or LA63 == 78 or LA63 == 79: alt63 = 2 - elif LA63 == 34 or LA63 == 35 or LA63 == 36 or LA63 == 37 or LA63 == 38 or LA63 == 39 or LA63 == 40 or LA63 == 41 or LA63 == 42 or LA63 == 45 or LA63 == 46 or LA63 == 48 or LA63 == 49 or LA63 == 50 or LA63 == 51 or LA63 == 52 or LA63 == 53 or LA63 == 54 or LA63 == 55 or LA63 == 56 or LA63 == 57 or LA63 == 58 or LA63 == 59 or LA63 == 60: - alt63 = 1 else: if self.backtracking > 0: self.failed = True return - nvae = NoViableAltException("332:1: cast_expression : ( '(' type_name ')' cast_expression | unary_expression );", 63, 1, self.input) + nvae = NoViableAltException("385:1: cast_expression : ( '(' type_name ')' cast_expression | unary_expression );", 63, 1, self.input) raise nvae - elif ((IDENTIFIER <= LA63_0 <= FLOATING_POINT_LITERAL) or LA63_0 == 65 or (67 <= LA63_0 <= 68) or (71 <= LA63_0 <= 73) or (76 <= LA63_0 <= 78)) : + elif ((IDENTIFIER <= LA63_0 <= FLOATING_POINT_LITERAL) or LA63_0 == 66 or (68 <= LA63_0 <= 69) or (72 <= LA63_0 <= 74) or (77 <= LA63_0 <= 79)) : alt63 = 2 else: if self.backtracking > 0: self.failed = True return - nvae = NoViableAltException("332:1: cast_expression : ( '(' type_name ')' cast_expression | unary_expression );", 63, 0, self.input) + nvae = NoViableAltException("385:1: cast_expression : ( '(' type_name ')' cast_expression | unary_expression );", 63, 0, self.input) raise nvae if alt63 == 1: - # C.g:333:4: '(' type_name ')' cast_expression - self.match(self.input, 61, self.FOLLOW_61_in_cast_expression1267) + # C.g:386:4: '(' type_name ')' cast_expression + self.match(self.input, 62, self.FOLLOW_62_in_cast_expression1282) if self.failed: return - self.following.append(self.FOLLOW_type_name_in_cast_expression1269) + self.following.append(self.FOLLOW_type_name_in_cast_expression1284) self.type_name() self.following.pop() if self.failed: return - self.match(self.input, 62, self.FOLLOW_62_in_cast_expression1271) + self.match(self.input, 63, self.FOLLOW_63_in_cast_expression1286) if self.failed: return - self.following.append(self.FOLLOW_cast_expression_in_cast_expression1273) + self.following.append(self.FOLLOW_cast_expression_in_cast_expression1288) self.cast_expression() self.following.pop() if self.failed: @@ -5182,8 +5201,8 @@ class CParser(Parser): elif alt63 == 2: - # C.g:334:4: unary_expression - self.following.append(self.FOLLOW_unary_expression_in_cast_expression1278) + # C.g:387:4: unary_expression + self.following.append(self.FOLLOW_unary_expression_in_cast_expression1293) self.unary_expression() self.following.pop() if self.failed: @@ -5206,7 +5225,7 @@ class CParser(Parser): # $ANTLR start unary_expression - # C.g:337:1: unary_expression : ( postfix_expression | '++' unary_expression | '--' unary_expression | unary_operator cast_expression | 'sizeof' unary_expression | 'sizeof' '(' type_name ')' ); + # C.g:390:1: unary_expression : ( postfix_expression | '++' unary_expression | '--' unary_expression | unary_operator cast_expression | 'sizeof' unary_expression | 'sizeof' '(' type_name ')' ); def unary_expression(self, ): unary_expression_StartIndex = self.input.index() @@ -5215,24 +5234,24 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 40): return - # C.g:338:2: ( postfix_expression | '++' unary_expression | '--' unary_expression | unary_operator cast_expression | 'sizeof' unary_expression | 'sizeof' '(' type_name ')' ) + # C.g:391:2: ( postfix_expression | '++' unary_expression | '--' unary_expression | unary_operator cast_expression | 'sizeof' unary_expression | 'sizeof' '(' type_name ')' ) alt64 = 6 LA64 = self.input.LA(1) - if LA64 == IDENTIFIER or LA64 == HEX_LITERAL or LA64 == OCTAL_LITERAL or LA64 == DECIMAL_LITERAL or LA64 == CHARACTER_LITERAL or LA64 == STRING_LITERAL or LA64 == FLOATING_POINT_LITERAL or LA64 == 61: + if LA64 == IDENTIFIER or LA64 == HEX_LITERAL or LA64 == OCTAL_LITERAL or LA64 == DECIMAL_LITERAL or LA64 == CHARACTER_LITERAL or LA64 == STRING_LITERAL or LA64 == FLOATING_POINT_LITERAL or LA64 == 62: alt64 = 1 - elif LA64 == 71: - alt64 = 2 elif LA64 == 72: + alt64 = 2 + elif LA64 == 73: alt64 = 3 - elif LA64 == 65 or LA64 == 67 or LA64 == 68 or LA64 == 76 or LA64 == 77 or LA64 == 78: + elif LA64 == 66 or LA64 == 68 or LA64 == 69 or LA64 == 77 or LA64 == 78 or LA64 == 79: alt64 = 4 - elif LA64 == 73: + elif LA64 == 74: LA64_12 = self.input.LA(2) - if (LA64_12 == 61) : + if (LA64_12 == 62) : LA64_13 = self.input.LA(3) - if (self.synpred113()) : + if (self.synpred114()) : alt64 = 5 elif (True) : alt64 = 6 @@ -5241,18 +5260,18 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("337:1: unary_expression : ( postfix_expression | '++' unary_expression | '--' unary_expression | unary_operator cast_expression | 'sizeof' unary_expression | 'sizeof' '(' type_name ')' );", 64, 13, self.input) + nvae = NoViableAltException("390:1: unary_expression : ( postfix_expression | '++' unary_expression | '--' unary_expression | unary_operator cast_expression | 'sizeof' unary_expression | 'sizeof' '(' type_name ')' );", 64, 13, self.input) raise nvae - elif ((IDENTIFIER <= LA64_12 <= FLOATING_POINT_LITERAL) or LA64_12 == 65 or (67 <= LA64_12 <= 68) or (71 <= LA64_12 <= 73) or (76 <= LA64_12 <= 78)) : + elif ((IDENTIFIER <= LA64_12 <= FLOATING_POINT_LITERAL) or LA64_12 == 66 or (68 <= LA64_12 <= 69) or (72 <= LA64_12 <= 74) or (77 <= LA64_12 <= 79)) : alt64 = 5 else: if self.backtracking > 0: self.failed = True return - nvae = NoViableAltException("337:1: unary_expression : ( postfix_expression | '++' unary_expression | '--' unary_expression | unary_operator cast_expression | 'sizeof' unary_expression | 'sizeof' '(' type_name ')' );", 64, 12, self.input) + nvae = NoViableAltException("390:1: unary_expression : ( postfix_expression | '++' unary_expression | '--' unary_expression | unary_operator cast_expression | 'sizeof' unary_expression | 'sizeof' '(' type_name ')' );", 64, 12, self.input) raise nvae @@ -5261,13 +5280,13 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("337:1: unary_expression : ( postfix_expression | '++' unary_expression | '--' unary_expression | unary_operator cast_expression | 'sizeof' unary_expression | 'sizeof' '(' type_name ')' );", 64, 0, self.input) + nvae = NoViableAltException("390:1: unary_expression : ( postfix_expression | '++' unary_expression | '--' unary_expression | unary_operator cast_expression | 'sizeof' unary_expression | 'sizeof' '(' type_name ')' );", 64, 0, self.input) raise nvae if alt64 == 1: - # C.g:338:4: postfix_expression - self.following.append(self.FOLLOW_postfix_expression_in_unary_expression1289) + # C.g:391:4: postfix_expression + self.following.append(self.FOLLOW_postfix_expression_in_unary_expression1304) self.postfix_expression() self.following.pop() if self.failed: @@ -5275,11 +5294,11 @@ class CParser(Parser): elif alt64 == 2: - # C.g:339:4: '++' unary_expression - self.match(self.input, 71, self.FOLLOW_71_in_unary_expression1294) + # C.g:392:4: '++' unary_expression + self.match(self.input, 72, self.FOLLOW_72_in_unary_expression1309) if self.failed: return - self.following.append(self.FOLLOW_unary_expression_in_unary_expression1296) + self.following.append(self.FOLLOW_unary_expression_in_unary_expression1311) self.unary_expression() self.following.pop() if self.failed: @@ -5287,11 +5306,11 @@ class CParser(Parser): elif alt64 == 3: - # C.g:340:4: '--' unary_expression - self.match(self.input, 72, self.FOLLOW_72_in_unary_expression1301) + # C.g:393:4: '--' unary_expression + self.match(self.input, 73, self.FOLLOW_73_in_unary_expression1316) if self.failed: return - self.following.append(self.FOLLOW_unary_expression_in_unary_expression1303) + self.following.append(self.FOLLOW_unary_expression_in_unary_expression1318) self.unary_expression() self.following.pop() if self.failed: @@ -5299,13 +5318,13 @@ class CParser(Parser): elif alt64 == 4: - # C.g:341:4: unary_operator cast_expression - self.following.append(self.FOLLOW_unary_operator_in_unary_expression1308) + # C.g:394:4: unary_operator cast_expression + self.following.append(self.FOLLOW_unary_operator_in_unary_expression1323) self.unary_operator() self.following.pop() if self.failed: return - self.following.append(self.FOLLOW_cast_expression_in_unary_expression1310) + self.following.append(self.FOLLOW_cast_expression_in_unary_expression1325) self.cast_expression() self.following.pop() if self.failed: @@ -5313,11 +5332,11 @@ class CParser(Parser): elif alt64 == 5: - # C.g:342:4: 'sizeof' unary_expression - self.match(self.input, 73, self.FOLLOW_73_in_unary_expression1315) + # C.g:395:4: 'sizeof' unary_expression + self.match(self.input, 74, self.FOLLOW_74_in_unary_expression1330) if self.failed: return - self.following.append(self.FOLLOW_unary_expression_in_unary_expression1317) + self.following.append(self.FOLLOW_unary_expression_in_unary_expression1332) self.unary_expression() self.following.pop() if self.failed: @@ -5325,19 +5344,19 @@ class CParser(Parser): elif alt64 == 6: - # C.g:343:4: 'sizeof' '(' type_name ')' - self.match(self.input, 73, self.FOLLOW_73_in_unary_expression1322) + # C.g:396:4: 'sizeof' '(' type_name ')' + self.match(self.input, 74, self.FOLLOW_74_in_unary_expression1337) if self.failed: return - self.match(self.input, 61, self.FOLLOW_61_in_unary_expression1324) + self.match(self.input, 62, self.FOLLOW_62_in_unary_expression1339) if self.failed: return - self.following.append(self.FOLLOW_type_name_in_unary_expression1326) + self.following.append(self.FOLLOW_type_name_in_unary_expression1341) self.type_name() self.following.pop() if self.failed: return - self.match(self.input, 62, self.FOLLOW_62_in_unary_expression1328) + self.match(self.input, 63, self.FOLLOW_63_in_unary_expression1343) if self.failed: return @@ -5358,7 +5377,7 @@ class CParser(Parser): # $ANTLR start postfix_expression - # C.g:346:1: postfix_expression : p= primary_expression ( '[' expression ']' | '(' a= ')' | '(' c= argument_expression_list b= ')' | '(' macro_parameter_list ')' | '.' x= IDENTIFIER | '*' y= IDENTIFIER | '->' z= IDENTIFIER | '++' | '--' )* ; + # C.g:399:1: postfix_expression : p= primary_expression ( '[' expression ']' | '(' a= ')' | '(' c= argument_expression_list b= ')' | '(' macro_parameter_list ')' | '.' x= IDENTIFIER | '*' y= IDENTIFIER | '->' z= IDENTIFIER | '++' | '--' )* ; def postfix_expression(self, ): self.postfix_expression_stack.append(postfix_expression_scope()) postfix_expression_StartIndex = self.input.index() @@ -5380,9 +5399,9 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 41): return - # C.g:353:2: (p= primary_expression ( '[' expression ']' | '(' a= ')' | '(' c= argument_expression_list b= ')' | '(' macro_parameter_list ')' | '.' x= IDENTIFIER | '*' y= IDENTIFIER | '->' z= IDENTIFIER | '++' | '--' )* ) - # C.g:353:6: p= primary_expression ( '[' expression ']' | '(' a= ')' | '(' c= argument_expression_list b= ')' | '(' macro_parameter_list ')' | '.' x= IDENTIFIER | '*' y= IDENTIFIER | '->' z= IDENTIFIER | '++' | '--' )* - self.following.append(self.FOLLOW_primary_expression_in_postfix_expression1352) + # C.g:406:2: (p= primary_expression ( '[' expression ']' | '(' a= ')' | '(' c= argument_expression_list b= ')' | '(' macro_parameter_list ')' | '.' x= IDENTIFIER | '*' y= IDENTIFIER | '->' z= IDENTIFIER | '++' | '--' )* ) + # C.g:406:6: p= primary_expression ( '[' expression ']' | '(' a= ')' | '(' c= argument_expression_list b= ')' | '(' macro_parameter_list ')' | '.' x= IDENTIFIER | '*' y= IDENTIFIER | '->' z= IDENTIFIER | '++' | '--' )* + self.following.append(self.FOLLOW_primary_expression_in_postfix_expression1367) p = self.primary_expression() self.following.pop() if self.failed: @@ -5390,82 +5409,82 @@ class CParser(Parser): if self.backtracking == 0: self.postfix_expression_stack[-1].FuncCallText += self.input.toString(p.start,p.stop) - # C.g:354:9: ( '[' expression ']' | '(' a= ')' | '(' c= argument_expression_list b= ')' | '(' macro_parameter_list ')' | '.' x= IDENTIFIER | '*' y= IDENTIFIER | '->' z= IDENTIFIER | '++' | '--' )* + # C.g:407:9: ( '[' expression ']' | '(' a= ')' | '(' c= argument_expression_list b= ')' | '(' macro_parameter_list ')' | '.' x= IDENTIFIER | '*' y= IDENTIFIER | '->' z= IDENTIFIER | '++' | '--' )* while True: #loop65 alt65 = 10 LA65 = self.input.LA(1) - if LA65 == 65: + if LA65 == 66: LA65_1 = self.input.LA(2) if (LA65_1 == IDENTIFIER) : LA65_30 = self.input.LA(3) - if (self.synpred119()) : + if (self.synpred120()) : alt65 = 6 - elif LA65 == 63: + elif LA65 == 64: alt65 = 1 - elif LA65 == 61: + elif LA65 == 62: LA65 = self.input.LA(2) - if LA65 == 62: + if LA65 == 63: alt65 = 2 + elif LA65 == 29 or LA65 == 30 or LA65 == 31 or LA65 == 32 or LA65 == 33 or LA65 == 34 or LA65 == 35 or LA65 == 36 or LA65 == 37 or LA65 == 38 or LA65 == 39 or LA65 == 40 or LA65 == 41 or LA65 == 42 or LA65 == 45 or LA65 == 46 or LA65 == 48 or LA65 == 49 or LA65 == 50 or LA65 == 51 or LA65 == 52 or LA65 == 53 or LA65 == 54 or LA65 == 55 or LA65 == 56 or LA65 == 57 or LA65 == 58 or LA65 == 59 or LA65 == 60 or LA65 == 61: + alt65 = 4 elif LA65 == IDENTIFIER: - LA65_43 = self.input.LA(3) + LA65_55 = self.input.LA(3) - if (self.synpred116()) : + if (self.synpred117()) : alt65 = 3 - elif (self.synpred117()) : + elif (self.synpred118()) : alt65 = 4 - elif LA65 == HEX_LITERAL or LA65 == OCTAL_LITERAL or LA65 == DECIMAL_LITERAL or LA65 == CHARACTER_LITERAL or LA65 == STRING_LITERAL or LA65 == FLOATING_POINT_LITERAL or LA65 == 61 or LA65 == 67 or LA65 == 68 or LA65 == 71 or LA65 == 72 or LA65 == 73 or LA65 == 76 or LA65 == 77 or LA65 == 78: - alt65 = 3 - elif LA65 == 65: - LA65_53 = self.input.LA(3) + elif LA65 == 66: + LA65_57 = self.input.LA(3) - if (self.synpred116()) : + if (self.synpred117()) : alt65 = 3 - elif (self.synpred117()) : + elif (self.synpred118()) : alt65 = 4 - elif LA65 == 29 or LA65 == 30 or LA65 == 31 or LA65 == 32 or LA65 == 33 or LA65 == 34 or LA65 == 35 or LA65 == 36 or LA65 == 37 or LA65 == 38 or LA65 == 39 or LA65 == 40 or LA65 == 41 or LA65 == 42 or LA65 == 45 or LA65 == 46 or LA65 == 48 or LA65 == 49 or LA65 == 50 or LA65 == 51 or LA65 == 52 or LA65 == 53 or LA65 == 54 or LA65 == 55 or LA65 == 56 or LA65 == 57 or LA65 == 58 or LA65 == 59 or LA65 == 60: - alt65 = 4 + elif LA65 == HEX_LITERAL or LA65 == OCTAL_LITERAL or LA65 == DECIMAL_LITERAL or LA65 == CHARACTER_LITERAL or LA65 == STRING_LITERAL or LA65 == FLOATING_POINT_LITERAL or LA65 == 62 or LA65 == 68 or LA65 == 69 or LA65 == 72 or LA65 == 73 or LA65 == 74 or LA65 == 77 or LA65 == 78 or LA65 == 79: + alt65 = 3 - elif LA65 == 74: - alt65 = 5 elif LA65 == 75: + alt65 = 5 + elif LA65 == 76: alt65 = 7 - elif LA65 == 71: - alt65 = 8 elif LA65 == 72: + alt65 = 8 + elif LA65 == 73: alt65 = 9 if alt65 == 1: - # C.g:354:13: '[' expression ']' - self.match(self.input, 63, self.FOLLOW_63_in_postfix_expression1368) + # C.g:407:13: '[' expression ']' + self.match(self.input, 64, self.FOLLOW_64_in_postfix_expression1383) if self.failed: return - self.following.append(self.FOLLOW_expression_in_postfix_expression1370) + self.following.append(self.FOLLOW_expression_in_postfix_expression1385) self.expression() self.following.pop() if self.failed: return - self.match(self.input, 64, self.FOLLOW_64_in_postfix_expression1372) + self.match(self.input, 65, self.FOLLOW_65_in_postfix_expression1387) if self.failed: return elif alt65 == 2: - # C.g:355:13: '(' a= ')' - self.match(self.input, 61, self.FOLLOW_61_in_postfix_expression1386) + # C.g:408:13: '(' a= ')' + self.match(self.input, 62, self.FOLLOW_62_in_postfix_expression1401) if self.failed: return a = self.input.LT(1) - self.match(self.input, 62, self.FOLLOW_62_in_postfix_expression1390) + self.match(self.input, 63, self.FOLLOW_63_in_postfix_expression1405) if self.failed: return if self.backtracking == 0: @@ -5474,17 +5493,17 @@ class CParser(Parser): elif alt65 == 3: - # C.g:356:13: '(' c= argument_expression_list b= ')' - self.match(self.input, 61, self.FOLLOW_61_in_postfix_expression1405) + # C.g:409:13: '(' c= argument_expression_list b= ')' + self.match(self.input, 62, self.FOLLOW_62_in_postfix_expression1420) if self.failed: return - self.following.append(self.FOLLOW_argument_expression_list_in_postfix_expression1409) + self.following.append(self.FOLLOW_argument_expression_list_in_postfix_expression1424) c = self.argument_expression_list() self.following.pop() if self.failed: return b = self.input.LT(1) - self.match(self.input, 62, self.FOLLOW_62_in_postfix_expression1413) + self.match(self.input, 63, self.FOLLOW_63_in_postfix_expression1428) if self.failed: return if self.backtracking == 0: @@ -5493,27 +5512,27 @@ class CParser(Parser): elif alt65 == 4: - # C.g:357:13: '(' macro_parameter_list ')' - self.match(self.input, 61, self.FOLLOW_61_in_postfix_expression1429) + # C.g:410:13: '(' macro_parameter_list ')' + self.match(self.input, 62, self.FOLLOW_62_in_postfix_expression1444) if self.failed: return - self.following.append(self.FOLLOW_macro_parameter_list_in_postfix_expression1431) + self.following.append(self.FOLLOW_macro_parameter_list_in_postfix_expression1446) self.macro_parameter_list() self.following.pop() if self.failed: return - self.match(self.input, 62, self.FOLLOW_62_in_postfix_expression1433) + self.match(self.input, 63, self.FOLLOW_63_in_postfix_expression1448) if self.failed: return elif alt65 == 5: - # C.g:358:13: '.' x= IDENTIFIER - self.match(self.input, 74, self.FOLLOW_74_in_postfix_expression1447) + # C.g:411:13: '.' x= IDENTIFIER + self.match(self.input, 75, self.FOLLOW_75_in_postfix_expression1462) if self.failed: return x = self.input.LT(1) - self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_postfix_expression1451) + self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_postfix_expression1466) if self.failed: return if self.backtracking == 0: @@ -5522,12 +5541,12 @@ class CParser(Parser): elif alt65 == 6: - # C.g:359:13: '*' y= IDENTIFIER - self.match(self.input, 65, self.FOLLOW_65_in_postfix_expression1467) + # C.g:412:13: '*' y= IDENTIFIER + self.match(self.input, 66, self.FOLLOW_66_in_postfix_expression1482) if self.failed: return y = self.input.LT(1) - self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_postfix_expression1471) + self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_postfix_expression1486) if self.failed: return if self.backtracking == 0: @@ -5536,12 +5555,12 @@ class CParser(Parser): elif alt65 == 7: - # C.g:360:13: '->' z= IDENTIFIER - self.match(self.input, 75, self.FOLLOW_75_in_postfix_expression1487) + # C.g:413:13: '->' z= IDENTIFIER + self.match(self.input, 76, self.FOLLOW_76_in_postfix_expression1502) if self.failed: return z = self.input.LT(1) - self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_postfix_expression1491) + self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_postfix_expression1506) if self.failed: return if self.backtracking == 0: @@ -5550,15 +5569,15 @@ class CParser(Parser): elif alt65 == 8: - # C.g:361:13: '++' - self.match(self.input, 71, self.FOLLOW_71_in_postfix_expression1507) + # C.g:414:13: '++' + self.match(self.input, 72, self.FOLLOW_72_in_postfix_expression1522) if self.failed: return elif alt65 == 9: - # C.g:362:13: '--' - self.match(self.input, 72, self.FOLLOW_72_in_postfix_expression1521) + # C.g:415:13: '--' + self.match(self.input, 73, self.FOLLOW_73_in_postfix_expression1536) if self.failed: return @@ -5587,7 +5606,7 @@ class CParser(Parser): # $ANTLR start macro_parameter_list - # C.g:366:1: macro_parameter_list : parameter_declaration ( ',' parameter_declaration )* ; + # C.g:419:1: macro_parameter_list : parameter_declaration ( ',' parameter_declaration )* ; def macro_parameter_list(self, ): macro_parameter_list_StartIndex = self.input.index() @@ -5596,14 +5615,14 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 42): return - # C.g:367:2: ( parameter_declaration ( ',' parameter_declaration )* ) - # C.g:367:4: parameter_declaration ( ',' parameter_declaration )* - self.following.append(self.FOLLOW_parameter_declaration_in_macro_parameter_list1544) + # C.g:420:2: ( parameter_declaration ( ',' parameter_declaration )* ) + # C.g:420:4: parameter_declaration ( ',' parameter_declaration )* + self.following.append(self.FOLLOW_parameter_declaration_in_macro_parameter_list1559) self.parameter_declaration() self.following.pop() if self.failed: return - # C.g:367:26: ( ',' parameter_declaration )* + # C.g:420:26: ( ',' parameter_declaration )* while True: #loop66 alt66 = 2 LA66_0 = self.input.LA(1) @@ -5613,11 +5632,11 @@ class CParser(Parser): if alt66 == 1: - # C.g:367:27: ',' parameter_declaration - self.match(self.input, 27, self.FOLLOW_27_in_macro_parameter_list1547) + # C.g:420:27: ',' parameter_declaration + self.match(self.input, 27, self.FOLLOW_27_in_macro_parameter_list1562) if self.failed: return - self.following.append(self.FOLLOW_parameter_declaration_in_macro_parameter_list1549) + self.following.append(self.FOLLOW_parameter_declaration_in_macro_parameter_list1564) self.parameter_declaration() self.following.pop() if self.failed: @@ -5647,7 +5666,7 @@ class CParser(Parser): # $ANTLR start unary_operator - # C.g:370:1: unary_operator : ( '&' | '*' | '+' | '-' | '~' | '!' ); + # C.g:423:1: unary_operator : ( '&' | '*' | '+' | '-' | '~' | '!' ); def unary_operator(self, ): unary_operator_StartIndex = self.input.index() @@ -5656,9 +5675,9 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 43): return - # C.g:371:2: ( '&' | '*' | '+' | '-' | '~' | '!' ) + # C.g:424:2: ( '&' | '*' | '+' | '-' | '~' | '!' ) # C.g: - if self.input.LA(1) == 65 or (67 <= self.input.LA(1) <= 68) or (76 <= self.input.LA(1) <= 78): + if self.input.LA(1) == 66 or (68 <= self.input.LA(1) <= 69) or (77 <= self.input.LA(1) <= 79): self.input.consume(); self.errorRecovery = False self.failed = False @@ -5700,7 +5719,7 @@ class CParser(Parser): # $ANTLR start primary_expression - # C.g:379:1: primary_expression : ( IDENTIFIER | constant | '(' expression ')' ); + # C.g:432:1: primary_expression : ( IDENTIFIER | constant | '(' expression ')' ); def primary_expression(self, ): retval = self.primary_expression_return() @@ -5711,48 +5730,48 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 44): return retval - # C.g:380:2: ( IDENTIFIER | constant | '(' expression ')' ) + # C.g:433:2: ( IDENTIFIER | constant | '(' expression ')' ) alt67 = 3 LA67 = self.input.LA(1) if LA67 == IDENTIFIER: LA67_1 = self.input.LA(2) - if (LA67_1 == IDENTIFIER or LA67_1 == STRING_LITERAL) : - alt67 = 2 - elif (LA67_1 == EOF or LA67_1 == 25 or (27 <= LA67_1 <= 28) or LA67_1 == 44 or LA67_1 == 47 or LA67_1 == 53 or (61 <= LA67_1 <= 65) or (67 <= LA67_1 <= 72) or (74 <= LA67_1 <= 76) or (79 <= LA67_1 <= 101)) : + if (LA67_1 == EOF or LA67_1 == 25 or (27 <= LA67_1 <= 28) or LA67_1 == 44 or LA67_1 == 47 or LA67_1 == 53 or (62 <= LA67_1 <= 66) or (68 <= LA67_1 <= 73) or (75 <= LA67_1 <= 77) or (80 <= LA67_1 <= 102)) : alt67 = 1 + elif (LA67_1 == IDENTIFIER or LA67_1 == STRING_LITERAL) : + alt67 = 2 else: if self.backtracking > 0: self.failed = True return retval - nvae = NoViableAltException("379:1: primary_expression : ( IDENTIFIER | constant | '(' expression ')' );", 67, 1, self.input) + nvae = NoViableAltException("432:1: primary_expression : ( IDENTIFIER | constant | '(' expression ')' );", 67, 1, self.input) raise nvae elif LA67 == HEX_LITERAL or LA67 == OCTAL_LITERAL or LA67 == DECIMAL_LITERAL or LA67 == CHARACTER_LITERAL or LA67 == STRING_LITERAL or LA67 == FLOATING_POINT_LITERAL: alt67 = 2 - elif LA67 == 61: + elif LA67 == 62: alt67 = 3 else: if self.backtracking > 0: self.failed = True return retval - nvae = NoViableAltException("379:1: primary_expression : ( IDENTIFIER | constant | '(' expression ')' );", 67, 0, self.input) + nvae = NoViableAltException("432:1: primary_expression : ( IDENTIFIER | constant | '(' expression ')' );", 67, 0, self.input) raise nvae if alt67 == 1: - # C.g:380:4: IDENTIFIER - self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_primary_expression1598) + # C.g:433:4: IDENTIFIER + self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_primary_expression1613) if self.failed: return retval elif alt67 == 2: - # C.g:381:4: constant - self.following.append(self.FOLLOW_constant_in_primary_expression1603) + # C.g:434:4: constant + self.following.append(self.FOLLOW_constant_in_primary_expression1618) self.constant() self.following.pop() if self.failed: @@ -5760,16 +5779,16 @@ class CParser(Parser): elif alt67 == 3: - # C.g:382:4: '(' expression ')' - self.match(self.input, 61, self.FOLLOW_61_in_primary_expression1608) + # C.g:435:4: '(' expression ')' + self.match(self.input, 62, self.FOLLOW_62_in_primary_expression1623) if self.failed: return retval - self.following.append(self.FOLLOW_expression_in_primary_expression1610) + self.following.append(self.FOLLOW_expression_in_primary_expression1625) self.expression() self.following.pop() if self.failed: return retval - self.match(self.input, 62, self.FOLLOW_62_in_primary_expression1612) + self.match(self.input, 63, self.FOLLOW_63_in_primary_expression1627) if self.failed: return retval @@ -5792,7 +5811,7 @@ class CParser(Parser): # $ANTLR start constant - # C.g:385:1: constant : ( HEX_LITERAL | OCTAL_LITERAL | DECIMAL_LITERAL | CHARACTER_LITERAL | ( ( IDENTIFIER )* ( STRING_LITERAL )+ )+ ( IDENTIFIER )* | FLOATING_POINT_LITERAL ); + # C.g:438:1: constant : ( HEX_LITERAL | OCTAL_LITERAL | DECIMAL_LITERAL | CHARACTER_LITERAL | ( ( IDENTIFIER )* ( STRING_LITERAL )+ )+ ( IDENTIFIER )* | FLOATING_POINT_LITERAL ); def constant(self, ): constant_StartIndex = self.input.index() @@ -5801,7 +5820,7 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 45): return - # C.g:386:5: ( HEX_LITERAL | OCTAL_LITERAL | DECIMAL_LITERAL | CHARACTER_LITERAL | ( ( IDENTIFIER )* ( STRING_LITERAL )+ )+ ( IDENTIFIER )* | FLOATING_POINT_LITERAL ) + # C.g:439:5: ( HEX_LITERAL | OCTAL_LITERAL | DECIMAL_LITERAL | CHARACTER_LITERAL | ( ( IDENTIFIER )* ( STRING_LITERAL )+ )+ ( IDENTIFIER )* | FLOATING_POINT_LITERAL ) alt72 = 6 LA72 = self.input.LA(1) if LA72 == HEX_LITERAL: @@ -5821,41 +5840,41 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("385:1: constant : ( HEX_LITERAL | OCTAL_LITERAL | DECIMAL_LITERAL | CHARACTER_LITERAL | ( ( IDENTIFIER )* ( STRING_LITERAL )+ )+ ( IDENTIFIER )* | FLOATING_POINT_LITERAL );", 72, 0, self.input) + nvae = NoViableAltException("438:1: constant : ( HEX_LITERAL | OCTAL_LITERAL | DECIMAL_LITERAL | CHARACTER_LITERAL | ( ( IDENTIFIER )* ( STRING_LITERAL )+ )+ ( IDENTIFIER )* | FLOATING_POINT_LITERAL );", 72, 0, self.input) raise nvae if alt72 == 1: - # C.g:386:9: HEX_LITERAL - self.match(self.input, HEX_LITERAL, self.FOLLOW_HEX_LITERAL_in_constant1628) + # C.g:439:9: HEX_LITERAL + self.match(self.input, HEX_LITERAL, self.FOLLOW_HEX_LITERAL_in_constant1643) if self.failed: return elif alt72 == 2: - # C.g:387:9: OCTAL_LITERAL - self.match(self.input, OCTAL_LITERAL, self.FOLLOW_OCTAL_LITERAL_in_constant1638) + # C.g:440:9: OCTAL_LITERAL + self.match(self.input, OCTAL_LITERAL, self.FOLLOW_OCTAL_LITERAL_in_constant1653) if self.failed: return elif alt72 == 3: - # C.g:388:9: DECIMAL_LITERAL - self.match(self.input, DECIMAL_LITERAL, self.FOLLOW_DECIMAL_LITERAL_in_constant1648) + # C.g:441:9: DECIMAL_LITERAL + self.match(self.input, DECIMAL_LITERAL, self.FOLLOW_DECIMAL_LITERAL_in_constant1663) if self.failed: return elif alt72 == 4: - # C.g:389:7: CHARACTER_LITERAL - self.match(self.input, CHARACTER_LITERAL, self.FOLLOW_CHARACTER_LITERAL_in_constant1656) + # C.g:442:7: CHARACTER_LITERAL + self.match(self.input, CHARACTER_LITERAL, self.FOLLOW_CHARACTER_LITERAL_in_constant1671) if self.failed: return elif alt72 == 5: - # C.g:390:7: ( ( IDENTIFIER )* ( STRING_LITERAL )+ )+ ( IDENTIFIER )* - # C.g:390:7: ( ( IDENTIFIER )* ( STRING_LITERAL )+ )+ + # C.g:443:7: ( ( IDENTIFIER )* ( STRING_LITERAL )+ )+ ( IDENTIFIER )* + # C.g:443:7: ( ( IDENTIFIER )* ( STRING_LITERAL )+ )+ cnt70 = 0 while True: #loop70 alt70 = 2 @@ -5864,15 +5883,15 @@ class CParser(Parser): if (LA70_0 == IDENTIFIER) : LA70_1 = self.input.LA(2) - if (LA70_1 == IDENTIFIER) : - LA70_61 = self.input.LA(3) + if (LA70_1 == STRING_LITERAL) : + alt70 = 1 + elif (LA70_1 == IDENTIFIER) : + LA70_33 = self.input.LA(3) - if (self.synpred137()) : + if (self.synpred138()) : alt70 = 1 - elif (LA70_1 == STRING_LITERAL) : - alt70 = 1 elif (LA70_0 == STRING_LITERAL) : @@ -5880,8 +5899,8 @@ class CParser(Parser): if alt70 == 1: - # C.g:390:8: ( IDENTIFIER )* ( STRING_LITERAL )+ - # C.g:390:8: ( IDENTIFIER )* + # C.g:443:8: ( IDENTIFIER )* ( STRING_LITERAL )+ + # C.g:443:8: ( IDENTIFIER )* while True: #loop68 alt68 = 2 LA68_0 = self.input.LA(1) @@ -5892,7 +5911,7 @@ class CParser(Parser): if alt68 == 1: # C.g:0:0: IDENTIFIER - self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_constant1665) + self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_constant1680) if self.failed: return @@ -5901,7 +5920,7 @@ class CParser(Parser): break #loop68 - # C.g:390:20: ( STRING_LITERAL )+ + # C.g:443:20: ( STRING_LITERAL )+ cnt69 = 0 while True: #loop69 alt69 = 2 @@ -5910,7 +5929,7 @@ class CParser(Parser): if (LA69_0 == STRING_LITERAL) : LA69_31 = self.input.LA(2) - if (self.synpred136()) : + if (self.synpred137()) : alt69 = 1 @@ -5918,7 +5937,7 @@ class CParser(Parser): if alt69 == 1: # C.g:0:0: STRING_LITERAL - self.match(self.input, STRING_LITERAL, self.FOLLOW_STRING_LITERAL_in_constant1668) + self.match(self.input, STRING_LITERAL, self.FOLLOW_STRING_LITERAL_in_constant1683) if self.failed: return @@ -5953,7 +5972,7 @@ class CParser(Parser): cnt70 += 1 - # C.g:390:38: ( IDENTIFIER )* + # C.g:443:38: ( IDENTIFIER )* while True: #loop71 alt71 = 2 LA71_0 = self.input.LA(1) @@ -5964,7 +5983,7 @@ class CParser(Parser): if alt71 == 1: # C.g:0:0: IDENTIFIER - self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_constant1673) + self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_constant1688) if self.failed: return @@ -5976,8 +5995,8 @@ class CParser(Parser): elif alt72 == 6: - # C.g:391:9: FLOATING_POINT_LITERAL - self.match(self.input, FLOATING_POINT_LITERAL, self.FOLLOW_FLOATING_POINT_LITERAL_in_constant1684) + # C.g:444:9: FLOATING_POINT_LITERAL + self.match(self.input, FLOATING_POINT_LITERAL, self.FOLLOW_FLOATING_POINT_LITERAL_in_constant1699) if self.failed: return @@ -6004,7 +6023,7 @@ class CParser(Parser): # $ANTLR start expression - # C.g:396:1: expression : assignment_expression ( ',' assignment_expression )* ; + # C.g:449:1: expression : assignment_expression ( ',' assignment_expression )* ; def expression(self, ): retval = self.expression_return() @@ -6015,14 +6034,14 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 46): return retval - # C.g:397:2: ( assignment_expression ( ',' assignment_expression )* ) - # C.g:397:4: assignment_expression ( ',' assignment_expression )* - self.following.append(self.FOLLOW_assignment_expression_in_expression1700) + # C.g:450:2: ( assignment_expression ( ',' assignment_expression )* ) + # C.g:450:4: assignment_expression ( ',' assignment_expression )* + self.following.append(self.FOLLOW_assignment_expression_in_expression1715) self.assignment_expression() self.following.pop() if self.failed: return retval - # C.g:397:26: ( ',' assignment_expression )* + # C.g:450:26: ( ',' assignment_expression )* while True: #loop73 alt73 = 2 LA73_0 = self.input.LA(1) @@ -6032,11 +6051,11 @@ class CParser(Parser): if alt73 == 1: - # C.g:397:27: ',' assignment_expression - self.match(self.input, 27, self.FOLLOW_27_in_expression1703) + # C.g:450:27: ',' assignment_expression + self.match(self.input, 27, self.FOLLOW_27_in_expression1718) if self.failed: return retval - self.following.append(self.FOLLOW_assignment_expression_in_expression1705) + self.following.append(self.FOLLOW_assignment_expression_in_expression1720) self.assignment_expression() self.following.pop() if self.failed: @@ -6068,7 +6087,7 @@ class CParser(Parser): # $ANTLR start constant_expression - # C.g:400:1: constant_expression : conditional_expression ; + # C.g:453:1: constant_expression : conditional_expression ; def constant_expression(self, ): constant_expression_StartIndex = self.input.index() @@ -6077,9 +6096,9 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 47): return - # C.g:401:2: ( conditional_expression ) - # C.g:401:4: conditional_expression - self.following.append(self.FOLLOW_conditional_expression_in_constant_expression1718) + # C.g:454:2: ( conditional_expression ) + # C.g:454:4: conditional_expression + self.following.append(self.FOLLOW_conditional_expression_in_constant_expression1733) self.conditional_expression() self.following.pop() if self.failed: @@ -6103,7 +6122,7 @@ class CParser(Parser): # $ANTLR start assignment_expression - # C.g:404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression ); + # C.g:457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression ); def assignment_expression(self, ): assignment_expression_StartIndex = self.input.index() @@ -6112,15 +6131,15 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 48): return - # C.g:405:2: ( lvalue assignment_operator assignment_expression | conditional_expression ) + # C.g:458:2: ( lvalue assignment_operator assignment_expression | conditional_expression ) alt74 = 2 LA74 = self.input.LA(1) if LA74 == IDENTIFIER: LA74 = self.input.LA(2) - if LA74 == STRING_LITERAL: + if LA74 == 64: LA74_13 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -6129,14 +6148,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 13, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 13, self.input) raise nvae - elif LA74 == IDENTIFIER: + elif LA74 == 62: LA74_14 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -6145,14 +6164,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 14, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 14, self.input) raise nvae - elif LA74 == 63: + elif LA74 == 75: LA74_15 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -6161,14 +6180,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 15, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 15, self.input) raise nvae - elif LA74 == 61: + elif LA74 == 66: LA74_16 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -6177,14 +6196,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 16, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 16, self.input) raise nvae - elif LA74 == 74: + elif LA74 == 76: LA74_17 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -6193,14 +6212,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 17, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 17, self.input) raise nvae - elif LA74 == 65: + elif LA74 == 72: LA74_18 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -6209,14 +6228,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 18, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 18, self.input) raise nvae - elif LA74 == 75: + elif LA74 == 73: LA74_19 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -6225,14 +6244,16 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 19, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 19, self.input) raise nvae - elif LA74 == 71: - LA74_20 = self.input.LA(3) + elif LA74 == 28 or LA74 == 80 or LA74 == 81 or LA74 == 82 or LA74 == 83 or LA74 == 84 or LA74 == 85 or LA74 == 86 or LA74 == 87 or LA74 == 88 or LA74 == 89: + alt74 = 1 + elif LA74 == STRING_LITERAL: + LA74_21 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -6241,14 +6262,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 20, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 21, self.input) raise nvae - elif LA74 == 72: - LA74_21 = self.input.LA(3) + elif LA74 == IDENTIFIER: + LA74_22 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -6257,29 +6278,27 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 21, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 22, self.input) raise nvae - elif LA74 == EOF or LA74 == 25 or LA74 == 27 or LA74 == 44 or LA74 == 47 or LA74 == 53 or LA74 == 62 or LA74 == 64 or LA74 == 67 or LA74 == 68 or LA74 == 69 or LA74 == 70 or LA74 == 76 or LA74 == 89 or LA74 == 90 or LA74 == 91 or LA74 == 92 or LA74 == 93 or LA74 == 94 or LA74 == 95 or LA74 == 96 or LA74 == 97 or LA74 == 98 or LA74 == 99 or LA74 == 100 or LA74 == 101: + elif LA74 == EOF or LA74 == 25 or LA74 == 27 or LA74 == 44 or LA74 == 47 or LA74 == 53 or LA74 == 63 or LA74 == 65 or LA74 == 68 or LA74 == 69 or LA74 == 70 or LA74 == 71 or LA74 == 77 or LA74 == 90 or LA74 == 91 or LA74 == 92 or LA74 == 93 or LA74 == 94 or LA74 == 95 or LA74 == 96 or LA74 == 97 or LA74 == 98 or LA74 == 99 or LA74 == 100 or LA74 == 101 or LA74 == 102: alt74 = 2 - elif LA74 == 28 or LA74 == 79 or LA74 == 80 or LA74 == 81 or LA74 == 82 or LA74 == 83 or LA74 == 84 or LA74 == 85 or LA74 == 86 or LA74 == 87 or LA74 == 88: - alt74 = 1 else: if self.backtracking > 0: self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 1, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 1, self.input) raise nvae elif LA74 == HEX_LITERAL: LA74 = self.input.LA(2) - if LA74 == 63: + if LA74 == 64: LA74_44 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -6288,14 +6307,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 44, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 44, self.input) raise nvae - elif LA74 == 61: + elif LA74 == 62: LA74_45 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -6304,14 +6323,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 45, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 45, self.input) raise nvae - elif LA74 == 74: + elif LA74 == 75: LA74_46 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -6320,14 +6339,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 46, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 46, self.input) raise nvae - elif LA74 == 65: + elif LA74 == 66: LA74_47 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -6336,14 +6355,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 47, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 47, self.input) raise nvae - elif LA74 == 75: + elif LA74 == 76: LA74_48 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -6352,14 +6371,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 48, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 48, self.input) raise nvae - elif LA74 == 71: + elif LA74 == 72: LA74_49 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -6368,14 +6387,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 49, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 49, self.input) raise nvae - elif LA74 == 72: + elif LA74 == 73: LA74_50 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -6384,29 +6403,29 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 50, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 50, self.input) raise nvae - elif LA74 == 28 or LA74 == 79 or LA74 == 80 or LA74 == 81 or LA74 == 82 or LA74 == 83 or LA74 == 84 or LA74 == 85 or LA74 == 86 or LA74 == 87 or LA74 == 88: - alt74 = 1 - elif LA74 == EOF or LA74 == 25 or LA74 == 27 or LA74 == 44 or LA74 == 47 or LA74 == 53 or LA74 == 62 or LA74 == 64 or LA74 == 67 or LA74 == 68 or LA74 == 69 or LA74 == 70 or LA74 == 76 or LA74 == 89 or LA74 == 90 or LA74 == 91 or LA74 == 92 or LA74 == 93 or LA74 == 94 or LA74 == 95 or LA74 == 96 or LA74 == 97 or LA74 == 98 or LA74 == 99 or LA74 == 100 or LA74 == 101: + elif LA74 == EOF or LA74 == 25 or LA74 == 27 or LA74 == 44 or LA74 == 47 or LA74 == 53 or LA74 == 63 or LA74 == 65 or LA74 == 68 or LA74 == 69 or LA74 == 70 or LA74 == 71 or LA74 == 77 or LA74 == 90 or LA74 == 91 or LA74 == 92 or LA74 == 93 or LA74 == 94 or LA74 == 95 or LA74 == 96 or LA74 == 97 or LA74 == 98 or LA74 == 99 or LA74 == 100 or LA74 == 101 or LA74 == 102: alt74 = 2 + elif LA74 == 28 or LA74 == 80 or LA74 == 81 or LA74 == 82 or LA74 == 83 or LA74 == 84 or LA74 == 85 or LA74 == 86 or LA74 == 87 or LA74 == 88 or LA74 == 89: + alt74 = 1 else: if self.backtracking > 0: self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 2, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 2, self.input) raise nvae elif LA74 == OCTAL_LITERAL: LA74 = self.input.LA(2) - if LA74 == 63: + if LA74 == 64: LA74_73 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -6415,14 +6434,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 73, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 73, self.input) raise nvae - elif LA74 == 61: + elif LA74 == 62: LA74_74 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -6431,14 +6450,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 74, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 74, self.input) raise nvae - elif LA74 == 74: + elif LA74 == 75: LA74_75 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -6447,14 +6466,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 75, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 75, self.input) raise nvae - elif LA74 == 65: + elif LA74 == 66: LA74_76 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -6463,14 +6482,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 76, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 76, self.input) raise nvae - elif LA74 == 75: + elif LA74 == 76: LA74_77 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -6479,14 +6498,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 77, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 77, self.input) raise nvae - elif LA74 == 71: + elif LA74 == 72: LA74_78 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -6495,14 +6514,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 78, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 78, self.input) raise nvae - elif LA74 == 72: + elif LA74 == 73: LA74_79 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -6511,29 +6530,29 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 79, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 79, self.input) raise nvae - elif LA74 == 28 or LA74 == 79 or LA74 == 80 or LA74 == 81 or LA74 == 82 or LA74 == 83 or LA74 == 84 or LA74 == 85 or LA74 == 86 or LA74 == 87 or LA74 == 88: + elif LA74 == 28 or LA74 == 80 or LA74 == 81 or LA74 == 82 or LA74 == 83 or LA74 == 84 or LA74 == 85 or LA74 == 86 or LA74 == 87 or LA74 == 88 or LA74 == 89: alt74 = 1 - elif LA74 == EOF or LA74 == 25 or LA74 == 27 or LA74 == 44 or LA74 == 47 or LA74 == 53 or LA74 == 62 or LA74 == 64 or LA74 == 67 or LA74 == 68 or LA74 == 69 or LA74 == 70 or LA74 == 76 or LA74 == 89 or LA74 == 90 or LA74 == 91 or LA74 == 92 or LA74 == 93 or LA74 == 94 or LA74 == 95 or LA74 == 96 or LA74 == 97 or LA74 == 98 or LA74 == 99 or LA74 == 100 or LA74 == 101: + elif LA74 == EOF or LA74 == 25 or LA74 == 27 or LA74 == 44 or LA74 == 47 or LA74 == 53 or LA74 == 63 or LA74 == 65 or LA74 == 68 or LA74 == 69 or LA74 == 70 or LA74 == 71 or LA74 == 77 or LA74 == 90 or LA74 == 91 or LA74 == 92 or LA74 == 93 or LA74 == 94 or LA74 == 95 or LA74 == 96 or LA74 == 97 or LA74 == 98 or LA74 == 99 or LA74 == 100 or LA74 == 101 or LA74 == 102: alt74 = 2 else: if self.backtracking > 0: self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 3, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 3, self.input) raise nvae elif LA74 == DECIMAL_LITERAL: LA74 = self.input.LA(2) - if LA74 == 63: + if LA74 == 64: LA74_102 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -6542,14 +6561,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 102, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 102, self.input) raise nvae - elif LA74 == 61: + elif LA74 == 62: LA74_103 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -6558,14 +6577,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 103, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 103, self.input) raise nvae - elif LA74 == 74: + elif LA74 == 75: LA74_104 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -6574,14 +6593,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 104, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 104, self.input) raise nvae - elif LA74 == 65: + elif LA74 == 66: LA74_105 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -6590,14 +6609,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 105, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 105, self.input) raise nvae - elif LA74 == 75: + elif LA74 == 76: LA74_106 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -6606,14 +6625,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 106, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 106, self.input) raise nvae - elif LA74 == 71: + elif LA74 == 72: LA74_107 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -6622,14 +6641,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 107, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 107, self.input) raise nvae - elif LA74 == 72: + elif LA74 == 73: LA74_108 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -6638,29 +6657,29 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 108, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 108, self.input) raise nvae - elif LA74 == EOF or LA74 == 25 or LA74 == 27 or LA74 == 44 or LA74 == 47 or LA74 == 53 or LA74 == 62 or LA74 == 64 or LA74 == 67 or LA74 == 68 or LA74 == 69 or LA74 == 70 or LA74 == 76 or LA74 == 89 or LA74 == 90 or LA74 == 91 or LA74 == 92 or LA74 == 93 or LA74 == 94 or LA74 == 95 or LA74 == 96 or LA74 == 97 or LA74 == 98 or LA74 == 99 or LA74 == 100 or LA74 == 101: + elif LA74 == EOF or LA74 == 25 or LA74 == 27 or LA74 == 44 or LA74 == 47 or LA74 == 53 or LA74 == 63 or LA74 == 65 or LA74 == 68 or LA74 == 69 or LA74 == 70 or LA74 == 71 or LA74 == 77 or LA74 == 90 or LA74 == 91 or LA74 == 92 or LA74 == 93 or LA74 == 94 or LA74 == 95 or LA74 == 96 or LA74 == 97 or LA74 == 98 or LA74 == 99 or LA74 == 100 or LA74 == 101 or LA74 == 102: alt74 = 2 - elif LA74 == 28 or LA74 == 79 or LA74 == 80 or LA74 == 81 or LA74 == 82 or LA74 == 83 or LA74 == 84 or LA74 == 85 or LA74 == 86 or LA74 == 87 or LA74 == 88: + elif LA74 == 28 or LA74 == 80 or LA74 == 81 or LA74 == 82 or LA74 == 83 or LA74 == 84 or LA74 == 85 or LA74 == 86 or LA74 == 87 or LA74 == 88 or LA74 == 89: alt74 = 1 else: if self.backtracking > 0: self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 4, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 4, self.input) raise nvae elif LA74 == CHARACTER_LITERAL: LA74 = self.input.LA(2) - if LA74 == 63: + if LA74 == 64: LA74_131 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -6669,14 +6688,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 131, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 131, self.input) raise nvae - elif LA74 == 61: + elif LA74 == 62: LA74_132 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -6685,14 +6704,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 132, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 132, self.input) raise nvae - elif LA74 == 74: + elif LA74 == 75: LA74_133 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -6701,14 +6720,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 133, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 133, self.input) raise nvae - elif LA74 == 65: + elif LA74 == 66: LA74_134 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -6717,14 +6736,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 134, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 134, self.input) raise nvae - elif LA74 == 75: + elif LA74 == 76: LA74_135 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -6733,14 +6752,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 135, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 135, self.input) raise nvae - elif LA74 == 71: + elif LA74 == 72: LA74_136 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -6749,14 +6768,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 136, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 136, self.input) raise nvae - elif LA74 == 72: + elif LA74 == 73: LA74_137 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -6765,20 +6784,20 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 137, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 137, self.input) raise nvae - elif LA74 == 28 or LA74 == 79 or LA74 == 80 or LA74 == 81 or LA74 == 82 or LA74 == 83 or LA74 == 84 or LA74 == 85 or LA74 == 86 or LA74 == 87 or LA74 == 88: - alt74 = 1 - elif LA74 == EOF or LA74 == 25 or LA74 == 27 or LA74 == 44 or LA74 == 47 or LA74 == 53 or LA74 == 62 or LA74 == 64 or LA74 == 67 or LA74 == 68 or LA74 == 69 or LA74 == 70 or LA74 == 76 or LA74 == 89 or LA74 == 90 or LA74 == 91 or LA74 == 92 or LA74 == 93 or LA74 == 94 or LA74 == 95 or LA74 == 96 or LA74 == 97 or LA74 == 98 or LA74 == 99 or LA74 == 100 or LA74 == 101: + elif LA74 == EOF or LA74 == 25 or LA74 == 27 or LA74 == 44 or LA74 == 47 or LA74 == 53 or LA74 == 63 or LA74 == 65 or LA74 == 68 or LA74 == 69 or LA74 == 70 or LA74 == 71 or LA74 == 77 or LA74 == 90 or LA74 == 91 or LA74 == 92 or LA74 == 93 or LA74 == 94 or LA74 == 95 or LA74 == 96 or LA74 == 97 or LA74 == 98 or LA74 == 99 or LA74 == 100 or LA74 == 101 or LA74 == 102: alt74 = 2 + elif LA74 == 28 or LA74 == 80 or LA74 == 81 or LA74 == 82 or LA74 == 83 or LA74 == 84 or LA74 == 85 or LA74 == 86 or LA74 == 87 or LA74 == 88 or LA74 == 89: + alt74 = 1 else: if self.backtracking > 0: self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 5, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 5, self.input) raise nvae @@ -6787,7 +6806,7 @@ class CParser(Parser): if LA74 == IDENTIFIER: LA74_160 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -6796,14 +6815,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 160, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 160, self.input) raise nvae - elif LA74 == 63: + elif LA74 == 64: LA74_161 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -6812,14 +6831,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 161, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 161, self.input) raise nvae - elif LA74 == 61: + elif LA74 == 62: LA74_162 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -6828,14 +6847,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 162, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 162, self.input) raise nvae - elif LA74 == 74: + elif LA74 == 75: LA74_163 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -6844,14 +6863,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 163, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 163, self.input) raise nvae - elif LA74 == 65: + elif LA74 == 66: LA74_164 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -6860,14 +6879,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 164, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 164, self.input) raise nvae - elif LA74 == 75: + elif LA74 == 76: LA74_165 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -6876,14 +6895,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 165, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 165, self.input) raise nvae - elif LA74 == 71: + elif LA74 == 72: LA74_166 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -6892,14 +6911,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 166, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 166, self.input) raise nvae - elif LA74 == 72: + elif LA74 == 73: LA74_167 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -6908,16 +6927,16 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 167, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 167, self.input) raise nvae - elif LA74 == 28 or LA74 == 79 or LA74 == 80 or LA74 == 81 or LA74 == 82 or LA74 == 83 or LA74 == 84 or LA74 == 85 or LA74 == 86 or LA74 == 87 or LA74 == 88: - alt74 = 1 + elif LA74 == EOF or LA74 == 25 or LA74 == 27 or LA74 == 44 or LA74 == 47 or LA74 == 53 or LA74 == 63 or LA74 == 65 or LA74 == 68 or LA74 == 69 or LA74 == 70 or LA74 == 71 or LA74 == 77 or LA74 == 90 or LA74 == 91 or LA74 == 92 or LA74 == 93 or LA74 == 94 or LA74 == 95 or LA74 == 96 or LA74 == 97 or LA74 == 98 or LA74 == 99 or LA74 == 100 or LA74 == 101 or LA74 == 102: + alt74 = 2 elif LA74 == STRING_LITERAL: - LA74_169 = self.input.LA(3) + LA74_189 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -6926,27 +6945,27 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 169, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 189, self.input) raise nvae - elif LA74 == EOF or LA74 == 25 or LA74 == 27 or LA74 == 44 or LA74 == 47 or LA74 == 53 or LA74 == 62 or LA74 == 64 or LA74 == 67 or LA74 == 68 or LA74 == 69 or LA74 == 70 or LA74 == 76 or LA74 == 89 or LA74 == 90 or LA74 == 91 or LA74 == 92 or LA74 == 93 or LA74 == 94 or LA74 == 95 or LA74 == 96 or LA74 == 97 or LA74 == 98 or LA74 == 99 or LA74 == 100 or LA74 == 101: - alt74 = 2 + elif LA74 == 28 or LA74 == 80 or LA74 == 81 or LA74 == 82 or LA74 == 83 or LA74 == 84 or LA74 == 85 or LA74 == 86 or LA74 == 87 or LA74 == 88 or LA74 == 89: + alt74 = 1 else: if self.backtracking > 0: self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 6, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 6, self.input) raise nvae elif LA74 == FLOATING_POINT_LITERAL: LA74 = self.input.LA(2) - if LA74 == 63: + if LA74 == 64: LA74_191 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -6955,14 +6974,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 191, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 191, self.input) raise nvae - elif LA74 == 61: + elif LA74 == 62: LA74_192 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -6971,14 +6990,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 192, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 192, self.input) raise nvae - elif LA74 == 74: + elif LA74 == 75: LA74_193 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -6987,14 +7006,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 193, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 193, self.input) raise nvae - elif LA74 == 65: + elif LA74 == 66: LA74_194 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -7003,14 +7022,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 194, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 194, self.input) raise nvae - elif LA74 == 75: + elif LA74 == 76: LA74_195 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -7019,14 +7038,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 195, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 195, self.input) raise nvae - elif LA74 == 71: + elif LA74 == 72: LA74_196 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -7035,14 +7054,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 196, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 196, self.input) raise nvae - elif LA74 == 72: + elif LA74 == 73: LA74_197 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -7051,29 +7070,29 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 197, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 197, self.input) raise nvae - elif LA74 == EOF or LA74 == 25 or LA74 == 27 or LA74 == 44 or LA74 == 47 or LA74 == 53 or LA74 == 62 or LA74 == 64 or LA74 == 67 or LA74 == 68 or LA74 == 69 or LA74 == 70 or LA74 == 76 or LA74 == 89 or LA74 == 90 or LA74 == 91 or LA74 == 92 or LA74 == 93 or LA74 == 94 or LA74 == 95 or LA74 == 96 or LA74 == 97 or LA74 == 98 or LA74 == 99 or LA74 == 100 or LA74 == 101: + elif LA74 == EOF or LA74 == 25 or LA74 == 27 or LA74 == 44 or LA74 == 47 or LA74 == 53 or LA74 == 63 or LA74 == 65 or LA74 == 68 or LA74 == 69 or LA74 == 70 or LA74 == 71 or LA74 == 77 or LA74 == 90 or LA74 == 91 or LA74 == 92 or LA74 == 93 or LA74 == 94 or LA74 == 95 or LA74 == 96 or LA74 == 97 or LA74 == 98 or LA74 == 99 or LA74 == 100 or LA74 == 101 or LA74 == 102: alt74 = 2 - elif LA74 == 28 or LA74 == 79 or LA74 == 80 or LA74 == 81 or LA74 == 82 or LA74 == 83 or LA74 == 84 or LA74 == 85 or LA74 == 86 or LA74 == 87 or LA74 == 88: + elif LA74 == 28 or LA74 == 80 or LA74 == 81 or LA74 == 82 or LA74 == 83 or LA74 == 84 or LA74 == 85 or LA74 == 86 or LA74 == 87 or LA74 == 88 or LA74 == 89: alt74 = 1 else: if self.backtracking > 0: self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 7, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 7, self.input) raise nvae - elif LA74 == 61: + elif LA74 == 62: LA74 = self.input.LA(2) if LA74 == IDENTIFIER: LA74_220 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -7082,14 +7101,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 220, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 220, self.input) raise nvae elif LA74 == HEX_LITERAL: LA74_221 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -7098,14 +7117,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 221, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 221, self.input) raise nvae elif LA74 == OCTAL_LITERAL: LA74_222 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -7114,14 +7133,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 222, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 222, self.input) raise nvae elif LA74 == DECIMAL_LITERAL: LA74_223 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -7130,14 +7149,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 223, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 223, self.input) raise nvae elif LA74 == CHARACTER_LITERAL: LA74_224 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -7146,14 +7165,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 224, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 224, self.input) raise nvae elif LA74 == STRING_LITERAL: LA74_225 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -7162,14 +7181,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 225, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 225, self.input) raise nvae elif LA74 == FLOATING_POINT_LITERAL: LA74_226 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -7178,14 +7197,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 226, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 226, self.input) raise nvae - elif LA74 == 61: + elif LA74 == 62: LA74_227 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -7194,14 +7213,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 227, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 227, self.input) raise nvae - elif LA74 == 71: + elif LA74 == 72: LA74_228 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -7210,14 +7229,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 228, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 228, self.input) raise nvae - elif LA74 == 72: + elif LA74 == 73: LA74_229 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -7226,14 +7245,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 229, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 229, self.input) raise nvae - elif LA74 == 65 or LA74 == 67 or LA74 == 68 or LA74 == 76 or LA74 == 77 or LA74 == 78: + elif LA74 == 66 or LA74 == 68 or LA74 == 69 or LA74 == 77 or LA74 == 78 or LA74 == 79: LA74_230 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -7242,14 +7261,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 230, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 230, self.input) raise nvae - elif LA74 == 73: + elif LA74 == 74: LA74_231 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -7258,27 +7277,27 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 231, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 231, self.input) raise nvae - elif LA74 == 34 or LA74 == 35 or LA74 == 36 or LA74 == 37 or LA74 == 38 or LA74 == 39 or LA74 == 40 or LA74 == 41 or LA74 == 42 or LA74 == 45 or LA74 == 46 or LA74 == 48 or LA74 == 49 or LA74 == 50 or LA74 == 51 or LA74 == 52 or LA74 == 53 or LA74 == 54 or LA74 == 55 or LA74 == 56 or LA74 == 57 or LA74 == 58 or LA74 == 59 or LA74 == 60: + elif LA74 == 34 or LA74 == 35 or LA74 == 36 or LA74 == 37 or LA74 == 38 or LA74 == 39 or LA74 == 40 or LA74 == 41 or LA74 == 42 or LA74 == 45 or LA74 == 46 or LA74 == 48 or LA74 == 49 or LA74 == 50 or LA74 == 51 or LA74 == 52 or LA74 == 53 or LA74 == 54 or LA74 == 55 or LA74 == 56 or LA74 == 57 or LA74 == 58 or LA74 == 59 or LA74 == 60 or LA74 == 61: alt74 = 2 else: if self.backtracking > 0: self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 8, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 8, self.input) raise nvae - elif LA74 == 71: + elif LA74 == 72: LA74 = self.input.LA(2) if LA74 == IDENTIFIER: LA74_244 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -7287,14 +7306,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 244, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 244, self.input) raise nvae elif LA74 == HEX_LITERAL: LA74_245 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -7303,14 +7322,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 245, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 245, self.input) raise nvae elif LA74 == OCTAL_LITERAL: LA74_246 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -7319,14 +7338,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 246, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 246, self.input) raise nvae elif LA74 == DECIMAL_LITERAL: LA74_247 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -7335,14 +7354,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 247, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 247, self.input) raise nvae elif LA74 == CHARACTER_LITERAL: LA74_248 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -7351,14 +7370,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 248, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 248, self.input) raise nvae elif LA74 == STRING_LITERAL: LA74_249 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -7367,14 +7386,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 249, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 249, self.input) raise nvae elif LA74 == FLOATING_POINT_LITERAL: LA74_250 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -7383,14 +7402,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 250, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 250, self.input) raise nvae - elif LA74 == 61: + elif LA74 == 62: LA74_251 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -7399,14 +7418,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 251, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 251, self.input) raise nvae - elif LA74 == 71: + elif LA74 == 72: LA74_252 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -7415,14 +7434,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 252, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 252, self.input) raise nvae - elif LA74 == 72: + elif LA74 == 73: LA74_253 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -7431,14 +7450,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 253, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 253, self.input) raise nvae - elif LA74 == 65 or LA74 == 67 or LA74 == 68 or LA74 == 76 or LA74 == 77 or LA74 == 78: + elif LA74 == 66 or LA74 == 68 or LA74 == 69 or LA74 == 77 or LA74 == 78 or LA74 == 79: LA74_254 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -7447,14 +7466,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 254, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 254, self.input) raise nvae - elif LA74 == 73: + elif LA74 == 74: LA74_255 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -7463,7 +7482,7 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 255, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 255, self.input) raise nvae @@ -7472,16 +7491,16 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 9, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 9, self.input) raise nvae - elif LA74 == 72: + elif LA74 == 73: LA74 = self.input.LA(2) if LA74 == IDENTIFIER: LA74_256 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -7490,14 +7509,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 256, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 256, self.input) raise nvae elif LA74 == HEX_LITERAL: LA74_257 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -7506,14 +7525,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 257, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 257, self.input) raise nvae elif LA74 == OCTAL_LITERAL: LA74_258 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -7522,14 +7541,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 258, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 258, self.input) raise nvae elif LA74 == DECIMAL_LITERAL: LA74_259 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -7538,14 +7557,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 259, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 259, self.input) raise nvae elif LA74 == CHARACTER_LITERAL: LA74_260 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -7554,14 +7573,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 260, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 260, self.input) raise nvae elif LA74 == STRING_LITERAL: LA74_261 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -7570,14 +7589,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 261, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 261, self.input) raise nvae elif LA74 == FLOATING_POINT_LITERAL: LA74_262 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -7586,14 +7605,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 262, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 262, self.input) raise nvae - elif LA74 == 61: + elif LA74 == 62: LA74_263 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -7602,14 +7621,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 263, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 263, self.input) raise nvae - elif LA74 == 71: + elif LA74 == 72: LA74_264 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -7618,14 +7637,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 264, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 264, self.input) raise nvae - elif LA74 == 72: + elif LA74 == 73: LA74_265 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -7634,14 +7653,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 265, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 265, self.input) raise nvae - elif LA74 == 65 or LA74 == 67 or LA74 == 68 or LA74 == 76 or LA74 == 77 or LA74 == 78: + elif LA74 == 66 or LA74 == 68 or LA74 == 69 or LA74 == 77 or LA74 == 78 or LA74 == 79: LA74_266 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -7650,14 +7669,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 266, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 266, self.input) raise nvae - elif LA74 == 73: + elif LA74 == 74: LA74_267 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -7666,7 +7685,7 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 267, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 267, self.input) raise nvae @@ -7675,16 +7694,16 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 10, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 10, self.input) raise nvae - elif LA74 == 65 or LA74 == 67 or LA74 == 68 or LA74 == 76 or LA74 == 77 or LA74 == 78: + elif LA74 == 66 or LA74 == 68 or LA74 == 69 or LA74 == 77 or LA74 == 78 or LA74 == 79: LA74 = self.input.LA(2) - if LA74 == 61: + if LA74 == 62: LA74_268 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -7693,14 +7712,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 268, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 268, self.input) raise nvae elif LA74 == IDENTIFIER: LA74_269 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -7709,14 +7728,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 269, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 269, self.input) raise nvae elif LA74 == HEX_LITERAL: LA74_270 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -7725,14 +7744,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 270, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 270, self.input) raise nvae elif LA74 == OCTAL_LITERAL: LA74_271 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -7741,14 +7760,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 271, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 271, self.input) raise nvae elif LA74 == DECIMAL_LITERAL: LA74_272 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -7757,14 +7776,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 272, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 272, self.input) raise nvae elif LA74 == CHARACTER_LITERAL: LA74_273 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -7773,14 +7792,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 273, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 273, self.input) raise nvae elif LA74 == STRING_LITERAL: LA74_274 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -7789,14 +7808,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 274, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 274, self.input) raise nvae elif LA74 == FLOATING_POINT_LITERAL: LA74_275 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -7805,14 +7824,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 275, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 275, self.input) raise nvae - elif LA74 == 71: + elif LA74 == 72: LA74_276 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -7821,14 +7840,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 276, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 276, self.input) raise nvae - elif LA74 == 72: + elif LA74 == 73: LA74_277 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -7837,14 +7856,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 277, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 277, self.input) raise nvae - elif LA74 == 65 or LA74 == 67 or LA74 == 68 or LA74 == 76 or LA74 == 77 or LA74 == 78: + elif LA74 == 66 or LA74 == 68 or LA74 == 69 or LA74 == 77 or LA74 == 78 or LA74 == 79: LA74_278 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -7853,14 +7872,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 278, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 278, self.input) raise nvae - elif LA74 == 73: + elif LA74 == 74: LA74_279 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -7869,7 +7888,7 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 279, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 279, self.input) raise nvae @@ -7878,16 +7897,16 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 11, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 11, self.input) raise nvae - elif LA74 == 73: + elif LA74 == 74: LA74 = self.input.LA(2) - if LA74 == 61: + if LA74 == 62: LA74_280 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -7896,14 +7915,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 280, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 280, self.input) raise nvae elif LA74 == IDENTIFIER: LA74_281 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -7912,14 +7931,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 281, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 281, self.input) raise nvae elif LA74 == HEX_LITERAL: LA74_282 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -7928,14 +7947,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 282, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 282, self.input) raise nvae elif LA74 == OCTAL_LITERAL: LA74_283 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -7944,14 +7963,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 283, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 283, self.input) raise nvae elif LA74 == DECIMAL_LITERAL: LA74_284 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -7960,14 +7979,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 284, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 284, self.input) raise nvae elif LA74 == CHARACTER_LITERAL: LA74_285 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -7976,14 +7995,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 285, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 285, self.input) raise nvae elif LA74 == STRING_LITERAL: LA74_286 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -7992,14 +8011,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 286, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 286, self.input) raise nvae elif LA74 == FLOATING_POINT_LITERAL: LA74_287 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -8008,14 +8027,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 287, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 287, self.input) raise nvae - elif LA74 == 71: + elif LA74 == 72: LA74_288 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -8024,14 +8043,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 288, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 288, self.input) raise nvae - elif LA74 == 72: + elif LA74 == 73: LA74_289 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -8040,14 +8059,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 289, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 289, self.input) raise nvae - elif LA74 == 65 or LA74 == 67 or LA74 == 68 or LA74 == 76 or LA74 == 77 or LA74 == 78: + elif LA74 == 66 or LA74 == 68 or LA74 == 69 or LA74 == 77 or LA74 == 78 or LA74 == 79: LA74_290 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -8056,14 +8075,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 290, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 290, self.input) raise nvae - elif LA74 == 73: + elif LA74 == 74: LA74_291 = self.input.LA(3) - if (self.synpred141()) : + if (self.synpred142()) : alt74 = 1 elif (True) : alt74 = 2 @@ -8072,7 +8091,7 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 291, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 291, self.input) raise nvae @@ -8081,7 +8100,7 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 12, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 12, self.input) raise nvae @@ -8090,23 +8109,23 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 0, self.input) + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 0, self.input) raise nvae if alt74 == 1: - # C.g:405:4: lvalue assignment_operator assignment_expression - self.following.append(self.FOLLOW_lvalue_in_assignment_expression1729) + # C.g:458:4: lvalue assignment_operator assignment_expression + self.following.append(self.FOLLOW_lvalue_in_assignment_expression1744) self.lvalue() self.following.pop() if self.failed: return - self.following.append(self.FOLLOW_assignment_operator_in_assignment_expression1731) + self.following.append(self.FOLLOW_assignment_operator_in_assignment_expression1746) self.assignment_operator() self.following.pop() if self.failed: return - self.following.append(self.FOLLOW_assignment_expression_in_assignment_expression1733) + self.following.append(self.FOLLOW_assignment_expression_in_assignment_expression1748) self.assignment_expression() self.following.pop() if self.failed: @@ -8114,8 +8133,8 @@ class CParser(Parser): elif alt74 == 2: - # C.g:406:4: conditional_expression - self.following.append(self.FOLLOW_conditional_expression_in_assignment_expression1738) + # C.g:459:4: conditional_expression + self.following.append(self.FOLLOW_conditional_expression_in_assignment_expression1753) self.conditional_expression() self.following.pop() if self.failed: @@ -8138,7 +8157,7 @@ class CParser(Parser): # $ANTLR start lvalue - # C.g:409:1: lvalue : unary_expression ; + # C.g:462:1: lvalue : unary_expression ; def lvalue(self, ): lvalue_StartIndex = self.input.index() @@ -8147,9 +8166,9 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 49): return - # C.g:410:2: ( unary_expression ) - # C.g:410:4: unary_expression - self.following.append(self.FOLLOW_unary_expression_in_lvalue1750) + # C.g:463:2: ( unary_expression ) + # C.g:463:4: unary_expression + self.following.append(self.FOLLOW_unary_expression_in_lvalue1765) self.unary_expression() self.following.pop() if self.failed: @@ -8173,7 +8192,7 @@ class CParser(Parser): # $ANTLR start assignment_operator - # C.g:413:1: assignment_operator : ( '=' | '*=' | '/=' | '%=' | '+=' | '-=' | '<<=' | '>>=' | '&=' | '^=' | '|=' ); + # C.g:466:1: assignment_operator : ( '=' | '*=' | '/=' | '%=' | '+=' | '-=' | '<<=' | '>>=' | '&=' | '^=' | '|=' ); def assignment_operator(self, ): assignment_operator_StartIndex = self.input.index() @@ -8182,9 +8201,9 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 50): return - # C.g:414:2: ( '=' | '*=' | '/=' | '%=' | '+=' | '-=' | '<<=' | '>>=' | '&=' | '^=' | '|=' ) + # C.g:467:2: ( '=' | '*=' | '/=' | '%=' | '+=' | '-=' | '<<=' | '>>=' | '&=' | '^=' | '|=' ) # C.g: - if self.input.LA(1) == 28 or (79 <= self.input.LA(1) <= 88): + if self.input.LA(1) == 28 or (80 <= self.input.LA(1) <= 89): self.input.consume(); self.errorRecovery = False self.failed = False @@ -8220,7 +8239,7 @@ class CParser(Parser): # $ANTLR start conditional_expression - # C.g:427:1: conditional_expression : e= logical_or_expression ( '?' expression ':' conditional_expression )? ; + # C.g:480:1: conditional_expression : e= logical_or_expression ( '?' expression ':' conditional_expression )? ; def conditional_expression(self, ): conditional_expression_StartIndex = self.input.index() @@ -8232,33 +8251,33 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 51): return - # C.g:428:2: (e= logical_or_expression ( '?' expression ':' conditional_expression )? ) - # C.g:428:4: e= logical_or_expression ( '?' expression ':' conditional_expression )? - self.following.append(self.FOLLOW_logical_or_expression_in_conditional_expression1824) + # C.g:481:2: (e= logical_or_expression ( '?' expression ':' conditional_expression )? ) + # C.g:481:4: e= logical_or_expression ( '?' expression ':' conditional_expression )? + self.following.append(self.FOLLOW_logical_or_expression_in_conditional_expression1839) e = self.logical_or_expression() self.following.pop() if self.failed: return - # C.g:428:28: ( '?' expression ':' conditional_expression )? + # C.g:481:28: ( '?' expression ':' conditional_expression )? alt75 = 2 LA75_0 = self.input.LA(1) - if (LA75_0 == 89) : + if (LA75_0 == 90) : alt75 = 1 if alt75 == 1: - # C.g:428:29: '?' expression ':' conditional_expression - self.match(self.input, 89, self.FOLLOW_89_in_conditional_expression1827) + # C.g:481:29: '?' expression ':' conditional_expression + self.match(self.input, 90, self.FOLLOW_90_in_conditional_expression1842) if self.failed: return - self.following.append(self.FOLLOW_expression_in_conditional_expression1829) + self.following.append(self.FOLLOW_expression_in_conditional_expression1844) self.expression() self.following.pop() if self.failed: return - self.match(self.input, 47, self.FOLLOW_47_in_conditional_expression1831) + self.match(self.input, 47, self.FOLLOW_47_in_conditional_expression1846) if self.failed: return - self.following.append(self.FOLLOW_conditional_expression_in_conditional_expression1833) + self.following.append(self.FOLLOW_conditional_expression_in_conditional_expression1848) self.conditional_expression() self.following.pop() if self.failed: @@ -8294,7 +8313,7 @@ class CParser(Parser): # $ANTLR start logical_or_expression - # C.g:431:1: logical_or_expression : logical_and_expression ( '||' logical_and_expression )* ; + # C.g:484:1: logical_or_expression : logical_and_expression ( '||' logical_and_expression )* ; def logical_or_expression(self, ): retval = self.logical_or_expression_return() @@ -8305,28 +8324,28 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 52): return retval - # C.g:432:2: ( logical_and_expression ( '||' logical_and_expression )* ) - # C.g:432:4: logical_and_expression ( '||' logical_and_expression )* - self.following.append(self.FOLLOW_logical_and_expression_in_logical_or_expression1848) + # C.g:485:2: ( logical_and_expression ( '||' logical_and_expression )* ) + # C.g:485:4: logical_and_expression ( '||' logical_and_expression )* + self.following.append(self.FOLLOW_logical_and_expression_in_logical_or_expression1863) self.logical_and_expression() self.following.pop() if self.failed: return retval - # C.g:432:27: ( '||' logical_and_expression )* + # C.g:485:27: ( '||' logical_and_expression )* while True: #loop76 alt76 = 2 LA76_0 = self.input.LA(1) - if (LA76_0 == 90) : + if (LA76_0 == 91) : alt76 = 1 if alt76 == 1: - # C.g:432:28: '||' logical_and_expression - self.match(self.input, 90, self.FOLLOW_90_in_logical_or_expression1851) + # C.g:485:28: '||' logical_and_expression + self.match(self.input, 91, self.FOLLOW_91_in_logical_or_expression1866) if self.failed: return retval - self.following.append(self.FOLLOW_logical_and_expression_in_logical_or_expression1853) + self.following.append(self.FOLLOW_logical_and_expression_in_logical_or_expression1868) self.logical_and_expression() self.following.pop() if self.failed: @@ -8358,7 +8377,7 @@ class CParser(Parser): # $ANTLR start logical_and_expression - # C.g:435:1: logical_and_expression : inclusive_or_expression ( '&&' inclusive_or_expression )* ; + # C.g:488:1: logical_and_expression : inclusive_or_expression ( '&&' inclusive_or_expression )* ; def logical_and_expression(self, ): logical_and_expression_StartIndex = self.input.index() @@ -8367,28 +8386,28 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 53): return - # C.g:436:2: ( inclusive_or_expression ( '&&' inclusive_or_expression )* ) - # C.g:436:4: inclusive_or_expression ( '&&' inclusive_or_expression )* - self.following.append(self.FOLLOW_inclusive_or_expression_in_logical_and_expression1866) + # C.g:489:2: ( inclusive_or_expression ( '&&' inclusive_or_expression )* ) + # C.g:489:4: inclusive_or_expression ( '&&' inclusive_or_expression )* + self.following.append(self.FOLLOW_inclusive_or_expression_in_logical_and_expression1881) self.inclusive_or_expression() self.following.pop() if self.failed: return - # C.g:436:28: ( '&&' inclusive_or_expression )* + # C.g:489:28: ( '&&' inclusive_or_expression )* while True: #loop77 alt77 = 2 LA77_0 = self.input.LA(1) - if (LA77_0 == 91) : + if (LA77_0 == 92) : alt77 = 1 if alt77 == 1: - # C.g:436:29: '&&' inclusive_or_expression - self.match(self.input, 91, self.FOLLOW_91_in_logical_and_expression1869) + # C.g:489:29: '&&' inclusive_or_expression + self.match(self.input, 92, self.FOLLOW_92_in_logical_and_expression1884) if self.failed: return - self.following.append(self.FOLLOW_inclusive_or_expression_in_logical_and_expression1871) + self.following.append(self.FOLLOW_inclusive_or_expression_in_logical_and_expression1886) self.inclusive_or_expression() self.following.pop() if self.failed: @@ -8418,7 +8437,7 @@ class CParser(Parser): # $ANTLR start inclusive_or_expression - # C.g:439:1: inclusive_or_expression : exclusive_or_expression ( '|' exclusive_or_expression )* ; + # C.g:492:1: inclusive_or_expression : exclusive_or_expression ( '|' exclusive_or_expression )* ; def inclusive_or_expression(self, ): inclusive_or_expression_StartIndex = self.input.index() @@ -8427,28 +8446,28 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 54): return - # C.g:440:2: ( exclusive_or_expression ( '|' exclusive_or_expression )* ) - # C.g:440:4: exclusive_or_expression ( '|' exclusive_or_expression )* - self.following.append(self.FOLLOW_exclusive_or_expression_in_inclusive_or_expression1884) + # C.g:493:2: ( exclusive_or_expression ( '|' exclusive_or_expression )* ) + # C.g:493:4: exclusive_or_expression ( '|' exclusive_or_expression )* + self.following.append(self.FOLLOW_exclusive_or_expression_in_inclusive_or_expression1899) self.exclusive_or_expression() self.following.pop() if self.failed: return - # C.g:440:28: ( '|' exclusive_or_expression )* + # C.g:493:28: ( '|' exclusive_or_expression )* while True: #loop78 alt78 = 2 LA78_0 = self.input.LA(1) - if (LA78_0 == 92) : + if (LA78_0 == 93) : alt78 = 1 if alt78 == 1: - # C.g:440:29: '|' exclusive_or_expression - self.match(self.input, 92, self.FOLLOW_92_in_inclusive_or_expression1887) + # C.g:493:29: '|' exclusive_or_expression + self.match(self.input, 93, self.FOLLOW_93_in_inclusive_or_expression1902) if self.failed: return - self.following.append(self.FOLLOW_exclusive_or_expression_in_inclusive_or_expression1889) + self.following.append(self.FOLLOW_exclusive_or_expression_in_inclusive_or_expression1904) self.exclusive_or_expression() self.following.pop() if self.failed: @@ -8478,7 +8497,7 @@ class CParser(Parser): # $ANTLR start exclusive_or_expression - # C.g:443:1: exclusive_or_expression : and_expression ( '^' and_expression )* ; + # C.g:496:1: exclusive_or_expression : and_expression ( '^' and_expression )* ; def exclusive_or_expression(self, ): exclusive_or_expression_StartIndex = self.input.index() @@ -8487,28 +8506,28 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 55): return - # C.g:444:2: ( and_expression ( '^' and_expression )* ) - # C.g:444:4: and_expression ( '^' and_expression )* - self.following.append(self.FOLLOW_and_expression_in_exclusive_or_expression1902) + # C.g:497:2: ( and_expression ( '^' and_expression )* ) + # C.g:497:4: and_expression ( '^' and_expression )* + self.following.append(self.FOLLOW_and_expression_in_exclusive_or_expression1917) self.and_expression() self.following.pop() if self.failed: return - # C.g:444:19: ( '^' and_expression )* + # C.g:497:19: ( '^' and_expression )* while True: #loop79 alt79 = 2 LA79_0 = self.input.LA(1) - if (LA79_0 == 93) : + if (LA79_0 == 94) : alt79 = 1 if alt79 == 1: - # C.g:444:20: '^' and_expression - self.match(self.input, 93, self.FOLLOW_93_in_exclusive_or_expression1905) + # C.g:497:20: '^' and_expression + self.match(self.input, 94, self.FOLLOW_94_in_exclusive_or_expression1920) if self.failed: return - self.following.append(self.FOLLOW_and_expression_in_exclusive_or_expression1907) + self.following.append(self.FOLLOW_and_expression_in_exclusive_or_expression1922) self.and_expression() self.following.pop() if self.failed: @@ -8538,7 +8557,7 @@ class CParser(Parser): # $ANTLR start and_expression - # C.g:447:1: and_expression : equality_expression ( '&' equality_expression )* ; + # C.g:500:1: and_expression : equality_expression ( '&' equality_expression )* ; def and_expression(self, ): and_expression_StartIndex = self.input.index() @@ -8547,28 +8566,28 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 56): return - # C.g:448:2: ( equality_expression ( '&' equality_expression )* ) - # C.g:448:4: equality_expression ( '&' equality_expression )* - self.following.append(self.FOLLOW_equality_expression_in_and_expression1920) + # C.g:501:2: ( equality_expression ( '&' equality_expression )* ) + # C.g:501:4: equality_expression ( '&' equality_expression )* + self.following.append(self.FOLLOW_equality_expression_in_and_expression1935) self.equality_expression() self.following.pop() if self.failed: return - # C.g:448:24: ( '&' equality_expression )* + # C.g:501:24: ( '&' equality_expression )* while True: #loop80 alt80 = 2 LA80_0 = self.input.LA(1) - if (LA80_0 == 76) : + if (LA80_0 == 77) : alt80 = 1 if alt80 == 1: - # C.g:448:25: '&' equality_expression - self.match(self.input, 76, self.FOLLOW_76_in_and_expression1923) + # C.g:501:25: '&' equality_expression + self.match(self.input, 77, self.FOLLOW_77_in_and_expression1938) if self.failed: return - self.following.append(self.FOLLOW_equality_expression_in_and_expression1925) + self.following.append(self.FOLLOW_equality_expression_in_and_expression1940) self.equality_expression() self.following.pop() if self.failed: @@ -8598,7 +8617,7 @@ class CParser(Parser): # $ANTLR start equality_expression - # C.g:450:1: equality_expression : relational_expression ( ( '==' | '!=' ) relational_expression )* ; + # C.g:503:1: equality_expression : relational_expression ( ( '==' | '!=' ) relational_expression )* ; def equality_expression(self, ): equality_expression_StartIndex = self.input.index() @@ -8607,25 +8626,25 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 57): return - # C.g:451:2: ( relational_expression ( ( '==' | '!=' ) relational_expression )* ) - # C.g:451:4: relational_expression ( ( '==' | '!=' ) relational_expression )* - self.following.append(self.FOLLOW_relational_expression_in_equality_expression1937) + # C.g:504:2: ( relational_expression ( ( '==' | '!=' ) relational_expression )* ) + # C.g:504:4: relational_expression ( ( '==' | '!=' ) relational_expression )* + self.following.append(self.FOLLOW_relational_expression_in_equality_expression1952) self.relational_expression() self.following.pop() if self.failed: return - # C.g:451:26: ( ( '==' | '!=' ) relational_expression )* + # C.g:504:26: ( ( '==' | '!=' ) relational_expression )* while True: #loop81 alt81 = 2 LA81_0 = self.input.LA(1) - if ((94 <= LA81_0 <= 95)) : + if ((95 <= LA81_0 <= 96)) : alt81 = 1 if alt81 == 1: - # C.g:451:27: ( '==' | '!=' ) relational_expression - if (94 <= self.input.LA(1) <= 95): + # C.g:504:27: ( '==' | '!=' ) relational_expression + if (95 <= self.input.LA(1) <= 96): self.input.consume(); self.errorRecovery = False self.failed = False @@ -8637,12 +8656,12 @@ class CParser(Parser): mse = MismatchedSetException(None, self.input) self.recoverFromMismatchedSet( - self.input, mse, self.FOLLOW_set_in_equality_expression1940 + self.input, mse, self.FOLLOW_set_in_equality_expression1955 ) raise mse - self.following.append(self.FOLLOW_relational_expression_in_equality_expression1946) + self.following.append(self.FOLLOW_relational_expression_in_equality_expression1961) self.relational_expression() self.following.pop() if self.failed: @@ -8672,7 +8691,7 @@ class CParser(Parser): # $ANTLR start relational_expression - # C.g:454:1: relational_expression : shift_expression ( ( '<' | '>' | '<=' | '>=' ) shift_expression )* ; + # C.g:507:1: relational_expression : shift_expression ( ( '<' | '>' | '<=' | '>=' ) shift_expression )* ; def relational_expression(self, ): relational_expression_StartIndex = self.input.index() @@ -8681,25 +8700,25 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 58): return - # C.g:455:2: ( shift_expression ( ( '<' | '>' | '<=' | '>=' ) shift_expression )* ) - # C.g:455:4: shift_expression ( ( '<' | '>' | '<=' | '>=' ) shift_expression )* - self.following.append(self.FOLLOW_shift_expression_in_relational_expression1960) + # C.g:508:2: ( shift_expression ( ( '<' | '>' | '<=' | '>=' ) shift_expression )* ) + # C.g:508:4: shift_expression ( ( '<' | '>' | '<=' | '>=' ) shift_expression )* + self.following.append(self.FOLLOW_shift_expression_in_relational_expression1975) self.shift_expression() self.following.pop() if self.failed: return - # C.g:455:21: ( ( '<' | '>' | '<=' | '>=' ) shift_expression )* + # C.g:508:21: ( ( '<' | '>' | '<=' | '>=' ) shift_expression )* while True: #loop82 alt82 = 2 LA82_0 = self.input.LA(1) - if ((96 <= LA82_0 <= 99)) : + if ((97 <= LA82_0 <= 100)) : alt82 = 1 if alt82 == 1: - # C.g:455:22: ( '<' | '>' | '<=' | '>=' ) shift_expression - if (96 <= self.input.LA(1) <= 99): + # C.g:508:22: ( '<' | '>' | '<=' | '>=' ) shift_expression + if (97 <= self.input.LA(1) <= 100): self.input.consume(); self.errorRecovery = False self.failed = False @@ -8711,12 +8730,12 @@ class CParser(Parser): mse = MismatchedSetException(None, self.input) self.recoverFromMismatchedSet( - self.input, mse, self.FOLLOW_set_in_relational_expression1963 + self.input, mse, self.FOLLOW_set_in_relational_expression1978 ) raise mse - self.following.append(self.FOLLOW_shift_expression_in_relational_expression1973) + self.following.append(self.FOLLOW_shift_expression_in_relational_expression1988) self.shift_expression() self.following.pop() if self.failed: @@ -8746,7 +8765,7 @@ class CParser(Parser): # $ANTLR start shift_expression - # C.g:458:1: shift_expression : additive_expression ( ( '<<' | '>>' ) additive_expression )* ; + # C.g:511:1: shift_expression : additive_expression ( ( '<<' | '>>' ) additive_expression )* ; def shift_expression(self, ): shift_expression_StartIndex = self.input.index() @@ -8755,25 +8774,25 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 59): return - # C.g:459:2: ( additive_expression ( ( '<<' | '>>' ) additive_expression )* ) - # C.g:459:4: additive_expression ( ( '<<' | '>>' ) additive_expression )* - self.following.append(self.FOLLOW_additive_expression_in_shift_expression1986) + # C.g:512:2: ( additive_expression ( ( '<<' | '>>' ) additive_expression )* ) + # C.g:512:4: additive_expression ( ( '<<' | '>>' ) additive_expression )* + self.following.append(self.FOLLOW_additive_expression_in_shift_expression2001) self.additive_expression() self.following.pop() if self.failed: return - # C.g:459:24: ( ( '<<' | '>>' ) additive_expression )* + # C.g:512:24: ( ( '<<' | '>>' ) additive_expression )* while True: #loop83 alt83 = 2 LA83_0 = self.input.LA(1) - if ((100 <= LA83_0 <= 101)) : + if ((101 <= LA83_0 <= 102)) : alt83 = 1 if alt83 == 1: - # C.g:459:25: ( '<<' | '>>' ) additive_expression - if (100 <= self.input.LA(1) <= 101): + # C.g:512:25: ( '<<' | '>>' ) additive_expression + if (101 <= self.input.LA(1) <= 102): self.input.consume(); self.errorRecovery = False self.failed = False @@ -8785,12 +8804,12 @@ class CParser(Parser): mse = MismatchedSetException(None, self.input) self.recoverFromMismatchedSet( - self.input, mse, self.FOLLOW_set_in_shift_expression1989 + self.input, mse, self.FOLLOW_set_in_shift_expression2004 ) raise mse - self.following.append(self.FOLLOW_additive_expression_in_shift_expression1995) + self.following.append(self.FOLLOW_additive_expression_in_shift_expression2010) self.additive_expression() self.following.pop() if self.failed: @@ -8820,7 +8839,7 @@ class CParser(Parser): # $ANTLR start statement - # C.g:464:1: statement : ( labeled_statement | compound_statement | expression_statement | selection_statement | iteration_statement | jump_statement | macro_statement | asm2_statement | asm1_statement | asm_statement | declaration ); + # C.g:517:1: statement : ( labeled_statement | compound_statement | expression_statement | selection_statement | iteration_statement | jump_statement | macro_statement | asm2_statement | asm1_statement | asm_statement | declaration ); def statement(self, ): statement_StartIndex = self.input.index() @@ -8829,21 +8848,19 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 60): return - # C.g:465:2: ( labeled_statement | compound_statement | expression_statement | selection_statement | iteration_statement | jump_statement | macro_statement | asm2_statement | asm1_statement | asm_statement | declaration ) + # C.g:518:2: ( labeled_statement | compound_statement | expression_statement | selection_statement | iteration_statement | jump_statement | macro_statement | asm2_statement | asm1_statement | asm_statement | declaration ) alt84 = 11 LA84 = self.input.LA(1) if LA84 == IDENTIFIER: LA84 = self.input.LA(2) - if LA84 == 47: - alt84 = 1 - elif LA84 == 61: - LA84_44 = self.input.LA(3) + if LA84 == 62: + LA84_43 = self.input.LA(3) - if (self.synpred168()) : + if (self.synpred169()) : alt84 = 3 - elif (self.synpred172()) : - alt84 = 7 elif (self.synpred173()) : + alt84 = 7 + elif (self.synpred174()) : alt84 = 8 elif (True) : alt84 = 11 @@ -8852,16 +8869,18 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("464:1: statement : ( labeled_statement | compound_statement | expression_statement | selection_statement | iteration_statement | jump_statement | macro_statement | asm2_statement | asm1_statement | asm_statement | declaration );", 84, 44, self.input) + nvae = NoViableAltException("517:1: statement : ( labeled_statement | compound_statement | expression_statement | selection_statement | iteration_statement | jump_statement | macro_statement | asm2_statement | asm1_statement | asm_statement | declaration );", 84, 43, self.input) raise nvae - elif LA84 == STRING_LITERAL or LA84 == 27 or LA84 == 28 or LA84 == 63 or LA84 == 67 or LA84 == 68 or LA84 == 69 or LA84 == 70 or LA84 == 71 or LA84 == 72 or LA84 == 74 or LA84 == 75 or LA84 == 76 or LA84 == 79 or LA84 == 80 or LA84 == 81 or LA84 == 82 or LA84 == 83 or LA84 == 84 or LA84 == 85 or LA84 == 86 or LA84 == 87 or LA84 == 88 or LA84 == 89 or LA84 == 90 or LA84 == 91 or LA84 == 92 or LA84 == 93 or LA84 == 94 or LA84 == 95 or LA84 == 96 or LA84 == 97 or LA84 == 98 or LA84 == 99 or LA84 == 100 or LA84 == 101: + elif LA84 == 47: + alt84 = 1 + elif LA84 == STRING_LITERAL or LA84 == 27 or LA84 == 28 or LA84 == 64 or LA84 == 68 or LA84 == 69 or LA84 == 70 or LA84 == 71 or LA84 == 72 or LA84 == 73 or LA84 == 75 or LA84 == 76 or LA84 == 77 or LA84 == 80 or LA84 == 81 or LA84 == 82 or LA84 == 83 or LA84 == 84 or LA84 == 85 or LA84 == 86 or LA84 == 87 or LA84 == 88 or LA84 == 89 or LA84 == 90 or LA84 == 91 or LA84 == 92 or LA84 == 93 or LA84 == 94 or LA84 == 95 or LA84 == 96 or LA84 == 97 or LA84 == 98 or LA84 == 99 or LA84 == 100 or LA84 == 101 or LA84 == 102: alt84 = 3 - elif LA84 == 65: + elif LA84 == 66: LA84_47 = self.input.LA(3) - if (self.synpred168()) : + if (self.synpred169()) : alt84 = 3 elif (True) : alt84 = 11 @@ -8870,14 +8889,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("464:1: statement : ( labeled_statement | compound_statement | expression_statement | selection_statement | iteration_statement | jump_statement | macro_statement | asm2_statement | asm1_statement | asm_statement | declaration );", 84, 47, self.input) + nvae = NoViableAltException("517:1: statement : ( labeled_statement | compound_statement | expression_statement | selection_statement | iteration_statement | jump_statement | macro_statement | asm2_statement | asm1_statement | asm_statement | declaration );", 84, 47, self.input) raise nvae - elif LA84 == 25: - LA84_65 = self.input.LA(3) + elif LA84 == IDENTIFIER: + LA84_53 = self.input.LA(3) - if (self.synpred168()) : + if (self.synpred169()) : alt84 = 3 elif (True) : alt84 = 11 @@ -8886,14 +8905,14 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("464:1: statement : ( labeled_statement | compound_statement | expression_statement | selection_statement | iteration_statement | jump_statement | macro_statement | asm2_statement | asm1_statement | asm_statement | declaration );", 84, 65, self.input) + nvae = NoViableAltException("517:1: statement : ( labeled_statement | compound_statement | expression_statement | selection_statement | iteration_statement | jump_statement | macro_statement | asm2_statement | asm1_statement | asm_statement | declaration );", 84, 53, self.input) raise nvae - elif LA84 == IDENTIFIER: - LA84_67 = self.input.LA(3) + elif LA84 == 25: + LA84_68 = self.input.LA(3) - if (self.synpred168()) : + if (self.synpred169()) : alt84 = 3 elif (True) : alt84 = 11 @@ -8902,53 +8921,53 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("464:1: statement : ( labeled_statement | compound_statement | expression_statement | selection_statement | iteration_statement | jump_statement | macro_statement | asm2_statement | asm1_statement | asm_statement | declaration );", 84, 67, self.input) + nvae = NoViableAltException("517:1: statement : ( labeled_statement | compound_statement | expression_statement | selection_statement | iteration_statement | jump_statement | macro_statement | asm2_statement | asm1_statement | asm_statement | declaration );", 84, 68, self.input) raise nvae - elif LA84 == 29 or LA84 == 30 or LA84 == 31 or LA84 == 32 or LA84 == 33 or LA84 == 34 or LA84 == 35 or LA84 == 36 or LA84 == 37 or LA84 == 38 or LA84 == 39 or LA84 == 40 or LA84 == 41 or LA84 == 42 or LA84 == 45 or LA84 == 46 or LA84 == 48 or LA84 == 49 or LA84 == 50 or LA84 == 51 or LA84 == 52 or LA84 == 53 or LA84 == 54 or LA84 == 55 or LA84 == 56 or LA84 == 57 or LA84 == 58 or LA84 == 59 or LA84 == 60: + elif LA84 == 29 or LA84 == 30 or LA84 == 31 or LA84 == 32 or LA84 == 33 or LA84 == 34 or LA84 == 35 or LA84 == 36 or LA84 == 37 or LA84 == 38 or LA84 == 39 or LA84 == 40 or LA84 == 41 or LA84 == 42 or LA84 == 45 or LA84 == 46 or LA84 == 48 or LA84 == 49 or LA84 == 50 or LA84 == 51 or LA84 == 52 or LA84 == 53 or LA84 == 54 or LA84 == 55 or LA84 == 56 or LA84 == 57 or LA84 == 58 or LA84 == 59 or LA84 == 60 or LA84 == 61: alt84 = 11 else: if self.backtracking > 0: self.failed = True return - nvae = NoViableAltException("464:1: statement : ( labeled_statement | compound_statement | expression_statement | selection_statement | iteration_statement | jump_statement | macro_statement | asm2_statement | asm1_statement | asm_statement | declaration );", 84, 1, self.input) + nvae = NoViableAltException("517:1: statement : ( labeled_statement | compound_statement | expression_statement | selection_statement | iteration_statement | jump_statement | macro_statement | asm2_statement | asm1_statement | asm_statement | declaration );", 84, 1, self.input) raise nvae - elif LA84 == 105 or LA84 == 106: + elif LA84 == 106 or LA84 == 107: alt84 = 1 elif LA84 == 43: alt84 = 2 - elif LA84 == HEX_LITERAL or LA84 == OCTAL_LITERAL or LA84 == DECIMAL_LITERAL or LA84 == CHARACTER_LITERAL or LA84 == STRING_LITERAL or LA84 == FLOATING_POINT_LITERAL or LA84 == 25 or LA84 == 61 or LA84 == 65 or LA84 == 67 or LA84 == 68 or LA84 == 71 or LA84 == 72 or LA84 == 73 or LA84 == 76 or LA84 == 77 or LA84 == 78: + elif LA84 == HEX_LITERAL or LA84 == OCTAL_LITERAL or LA84 == DECIMAL_LITERAL or LA84 == CHARACTER_LITERAL or LA84 == STRING_LITERAL or LA84 == FLOATING_POINT_LITERAL or LA84 == 25 or LA84 == 62 or LA84 == 66 or LA84 == 68 or LA84 == 69 or LA84 == 72 or LA84 == 73 or LA84 == 74 or LA84 == 77 or LA84 == 78 or LA84 == 79: alt84 = 3 - elif LA84 == 107 or LA84 == 109: + elif LA84 == 108 or LA84 == 110: alt84 = 4 - elif LA84 == 110 or LA84 == 111 or LA84 == 112: + elif LA84 == 111 or LA84 == 112 or LA84 == 113: alt84 = 5 - elif LA84 == 113 or LA84 == 114 or LA84 == 115 or LA84 == 116: + elif LA84 == 114 or LA84 == 115 or LA84 == 116 or LA84 == 117: alt84 = 6 - elif LA84 == 102: - alt84 = 8 elif LA84 == 103: - alt84 = 9 + alt84 = 8 elif LA84 == 104: + alt84 = 9 + elif LA84 == 105: alt84 = 10 - elif LA84 == 26 or LA84 == 29 or LA84 == 30 or LA84 == 31 or LA84 == 32 or LA84 == 33 or LA84 == 34 or LA84 == 35 or LA84 == 36 or LA84 == 37 or LA84 == 38 or LA84 == 39 or LA84 == 40 or LA84 == 41 or LA84 == 42 or LA84 == 45 or LA84 == 46 or LA84 == 48 or LA84 == 49 or LA84 == 50 or LA84 == 51 or LA84 == 52 or LA84 == 53 or LA84 == 54 or LA84 == 55 or LA84 == 56 or LA84 == 57 or LA84 == 58 or LA84 == 59 or LA84 == 60: + elif LA84 == 26 or LA84 == 29 or LA84 == 30 or LA84 == 31 or LA84 == 32 or LA84 == 33 or LA84 == 34 or LA84 == 35 or LA84 == 36 or LA84 == 37 or LA84 == 38 or LA84 == 39 or LA84 == 40 or LA84 == 41 or LA84 == 42 or LA84 == 45 or LA84 == 46 or LA84 == 48 or LA84 == 49 or LA84 == 50 or LA84 == 51 or LA84 == 52 or LA84 == 53 or LA84 == 54 or LA84 == 55 or LA84 == 56 or LA84 == 57 or LA84 == 58 or LA84 == 59 or LA84 == 60 or LA84 == 61: alt84 = 11 else: if self.backtracking > 0: self.failed = True return - nvae = NoViableAltException("464:1: statement : ( labeled_statement | compound_statement | expression_statement | selection_statement | iteration_statement | jump_statement | macro_statement | asm2_statement | asm1_statement | asm_statement | declaration );", 84, 0, self.input) + nvae = NoViableAltException("517:1: statement : ( labeled_statement | compound_statement | expression_statement | selection_statement | iteration_statement | jump_statement | macro_statement | asm2_statement | asm1_statement | asm_statement | declaration );", 84, 0, self.input) raise nvae if alt84 == 1: - # C.g:465:4: labeled_statement - self.following.append(self.FOLLOW_labeled_statement_in_statement2010) + # C.g:518:4: labeled_statement + self.following.append(self.FOLLOW_labeled_statement_in_statement2025) self.labeled_statement() self.following.pop() if self.failed: @@ -8956,8 +8975,8 @@ class CParser(Parser): elif alt84 == 2: - # C.g:466:4: compound_statement - self.following.append(self.FOLLOW_compound_statement_in_statement2015) + # C.g:519:4: compound_statement + self.following.append(self.FOLLOW_compound_statement_in_statement2030) self.compound_statement() self.following.pop() if self.failed: @@ -8965,8 +8984,8 @@ class CParser(Parser): elif alt84 == 3: - # C.g:467:4: expression_statement - self.following.append(self.FOLLOW_expression_statement_in_statement2020) + # C.g:520:4: expression_statement + self.following.append(self.FOLLOW_expression_statement_in_statement2035) self.expression_statement() self.following.pop() if self.failed: @@ -8974,8 +8993,8 @@ class CParser(Parser): elif alt84 == 4: - # C.g:468:4: selection_statement - self.following.append(self.FOLLOW_selection_statement_in_statement2025) + # C.g:521:4: selection_statement + self.following.append(self.FOLLOW_selection_statement_in_statement2040) self.selection_statement() self.following.pop() if self.failed: @@ -8983,8 +9002,8 @@ class CParser(Parser): elif alt84 == 5: - # C.g:469:4: iteration_statement - self.following.append(self.FOLLOW_iteration_statement_in_statement2030) + # C.g:522:4: iteration_statement + self.following.append(self.FOLLOW_iteration_statement_in_statement2045) self.iteration_statement() self.following.pop() if self.failed: @@ -8992,8 +9011,8 @@ class CParser(Parser): elif alt84 == 6: - # C.g:470:4: jump_statement - self.following.append(self.FOLLOW_jump_statement_in_statement2035) + # C.g:523:4: jump_statement + self.following.append(self.FOLLOW_jump_statement_in_statement2050) self.jump_statement() self.following.pop() if self.failed: @@ -9001,8 +9020,8 @@ class CParser(Parser): elif alt84 == 7: - # C.g:471:4: macro_statement - self.following.append(self.FOLLOW_macro_statement_in_statement2040) + # C.g:524:4: macro_statement + self.following.append(self.FOLLOW_macro_statement_in_statement2055) self.macro_statement() self.following.pop() if self.failed: @@ -9010,8 +9029,8 @@ class CParser(Parser): elif alt84 == 8: - # C.g:472:4: asm2_statement - self.following.append(self.FOLLOW_asm2_statement_in_statement2045) + # C.g:525:4: asm2_statement + self.following.append(self.FOLLOW_asm2_statement_in_statement2060) self.asm2_statement() self.following.pop() if self.failed: @@ -9019,8 +9038,8 @@ class CParser(Parser): elif alt84 == 9: - # C.g:473:4: asm1_statement - self.following.append(self.FOLLOW_asm1_statement_in_statement2050) + # C.g:526:4: asm1_statement + self.following.append(self.FOLLOW_asm1_statement_in_statement2065) self.asm1_statement() self.following.pop() if self.failed: @@ -9028,8 +9047,8 @@ class CParser(Parser): elif alt84 == 10: - # C.g:474:4: asm_statement - self.following.append(self.FOLLOW_asm_statement_in_statement2055) + # C.g:527:4: asm_statement + self.following.append(self.FOLLOW_asm_statement_in_statement2070) self.asm_statement() self.following.pop() if self.failed: @@ -9037,8 +9056,8 @@ class CParser(Parser): elif alt84 == 11: - # C.g:475:4: declaration - self.following.append(self.FOLLOW_declaration_in_statement2060) + # C.g:528:4: declaration + self.following.append(self.FOLLOW_declaration_in_statement2075) self.declaration() self.following.pop() if self.failed: @@ -9061,7 +9080,7 @@ class CParser(Parser): # $ANTLR start asm2_statement - # C.g:478:1: asm2_statement : ( '__asm__' )? IDENTIFIER '(' (~ ( ';' ) )* ')' ';' ; + # C.g:531:1: asm2_statement : ( '__asm__' )? IDENTIFIER '(' (~ ( ';' ) )* ')' ';' ; def asm2_statement(self, ): asm2_statement_StartIndex = self.input.index() @@ -9070,47 +9089,47 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 61): return - # C.g:479:2: ( ( '__asm__' )? IDENTIFIER '(' (~ ( ';' ) )* ')' ';' ) - # C.g:479:4: ( '__asm__' )? IDENTIFIER '(' (~ ( ';' ) )* ')' ';' - # C.g:479:4: ( '__asm__' )? + # C.g:532:2: ( ( '__asm__' )? IDENTIFIER '(' (~ ( ';' ) )* ')' ';' ) + # C.g:532:4: ( '__asm__' )? IDENTIFIER '(' (~ ( ';' ) )* ')' ';' + # C.g:532:4: ( '__asm__' )? alt85 = 2 LA85_0 = self.input.LA(1) - if (LA85_0 == 102) : + if (LA85_0 == 103) : alt85 = 1 if alt85 == 1: # C.g:0:0: '__asm__' - self.match(self.input, 102, self.FOLLOW_102_in_asm2_statement2071) + self.match(self.input, 103, self.FOLLOW_103_in_asm2_statement2086) if self.failed: return - self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_asm2_statement2074) + self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_asm2_statement2089) if self.failed: return - self.match(self.input, 61, self.FOLLOW_61_in_asm2_statement2076) + self.match(self.input, 62, self.FOLLOW_62_in_asm2_statement2091) if self.failed: return - # C.g:479:30: (~ ( ';' ) )* + # C.g:532:30: (~ ( ';' ) )* while True: #loop86 alt86 = 2 LA86_0 = self.input.LA(1) - if (LA86_0 == 62) : + if (LA86_0 == 63) : LA86_1 = self.input.LA(2) - if ((IDENTIFIER <= LA86_1 <= LINE_COMMAND) or (26 <= LA86_1 <= 116)) : + if ((IDENTIFIER <= LA86_1 <= LINE_COMMAND) or (26 <= LA86_1 <= 117)) : alt86 = 1 - elif ((IDENTIFIER <= LA86_0 <= LINE_COMMAND) or (26 <= LA86_0 <= 61) or (63 <= LA86_0 <= 116)) : + elif ((IDENTIFIER <= LA86_0 <= LINE_COMMAND) or (26 <= LA86_0 <= 62) or (64 <= LA86_0 <= 117)) : alt86 = 1 if alt86 == 1: - # C.g:479:31: ~ ( ';' ) - if (IDENTIFIER <= self.input.LA(1) <= LINE_COMMAND) or (26 <= self.input.LA(1) <= 116): + # C.g:532:31: ~ ( ';' ) + if (IDENTIFIER <= self.input.LA(1) <= LINE_COMMAND) or (26 <= self.input.LA(1) <= 117): self.input.consume(); self.errorRecovery = False self.failed = False @@ -9122,7 +9141,7 @@ class CParser(Parser): mse = MismatchedSetException(None, self.input) self.recoverFromMismatchedSet( - self.input, mse, self.FOLLOW_set_in_asm2_statement2079 + self.input, mse, self.FOLLOW_set_in_asm2_statement2094 ) raise mse @@ -9133,10 +9152,10 @@ class CParser(Parser): break #loop86 - self.match(self.input, 62, self.FOLLOW_62_in_asm2_statement2086) + self.match(self.input, 63, self.FOLLOW_63_in_asm2_statement2101) if self.failed: return - self.match(self.input, 25, self.FOLLOW_25_in_asm2_statement2088) + self.match(self.input, 25, self.FOLLOW_25_in_asm2_statement2103) if self.failed: return @@ -9158,7 +9177,7 @@ class CParser(Parser): # $ANTLR start asm1_statement - # C.g:482:1: asm1_statement : '_asm' '{' (~ ( '}' ) )* '}' ; + # C.g:535:1: asm1_statement : '_asm' '{' (~ ( '}' ) )* '}' ; def asm1_statement(self, ): asm1_statement_StartIndex = self.input.index() @@ -9167,26 +9186,26 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 62): return - # C.g:483:2: ( '_asm' '{' (~ ( '}' ) )* '}' ) - # C.g:483:4: '_asm' '{' (~ ( '}' ) )* '}' - self.match(self.input, 103, self.FOLLOW_103_in_asm1_statement2100) + # C.g:536:2: ( '_asm' '{' (~ ( '}' ) )* '}' ) + # C.g:536:4: '_asm' '{' (~ ( '}' ) )* '}' + self.match(self.input, 104, self.FOLLOW_104_in_asm1_statement2115) if self.failed: return - self.match(self.input, 43, self.FOLLOW_43_in_asm1_statement2102) + self.match(self.input, 43, self.FOLLOW_43_in_asm1_statement2117) if self.failed: return - # C.g:483:15: (~ ( '}' ) )* + # C.g:536:15: (~ ( '}' ) )* while True: #loop87 alt87 = 2 LA87_0 = self.input.LA(1) - if ((IDENTIFIER <= LA87_0 <= 43) or (45 <= LA87_0 <= 116)) : + if ((IDENTIFIER <= LA87_0 <= 43) or (45 <= LA87_0 <= 117)) : alt87 = 1 if alt87 == 1: - # C.g:483:16: ~ ( '}' ) - if (IDENTIFIER <= self.input.LA(1) <= 43) or (45 <= self.input.LA(1) <= 116): + # C.g:536:16: ~ ( '}' ) + if (IDENTIFIER <= self.input.LA(1) <= 43) or (45 <= self.input.LA(1) <= 117): self.input.consume(); self.errorRecovery = False self.failed = False @@ -9198,7 +9217,7 @@ class CParser(Parser): mse = MismatchedSetException(None, self.input) self.recoverFromMismatchedSet( - self.input, mse, self.FOLLOW_set_in_asm1_statement2105 + self.input, mse, self.FOLLOW_set_in_asm1_statement2120 ) raise mse @@ -9209,7 +9228,7 @@ class CParser(Parser): break #loop87 - self.match(self.input, 44, self.FOLLOW_44_in_asm1_statement2112) + self.match(self.input, 44, self.FOLLOW_44_in_asm1_statement2127) if self.failed: return @@ -9231,7 +9250,7 @@ class CParser(Parser): # $ANTLR start asm_statement - # C.g:486:1: asm_statement : '__asm' '{' (~ ( '}' ) )* '}' ; + # C.g:539:1: asm_statement : '__asm' '{' (~ ( '}' ) )* '}' ; def asm_statement(self, ): asm_statement_StartIndex = self.input.index() @@ -9240,26 +9259,26 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 63): return - # C.g:487:2: ( '__asm' '{' (~ ( '}' ) )* '}' ) - # C.g:487:4: '__asm' '{' (~ ( '}' ) )* '}' - self.match(self.input, 104, self.FOLLOW_104_in_asm_statement2123) + # C.g:540:2: ( '__asm' '{' (~ ( '}' ) )* '}' ) + # C.g:540:4: '__asm' '{' (~ ( '}' ) )* '}' + self.match(self.input, 105, self.FOLLOW_105_in_asm_statement2138) if self.failed: return - self.match(self.input, 43, self.FOLLOW_43_in_asm_statement2125) + self.match(self.input, 43, self.FOLLOW_43_in_asm_statement2140) if self.failed: return - # C.g:487:16: (~ ( '}' ) )* + # C.g:540:16: (~ ( '}' ) )* while True: #loop88 alt88 = 2 LA88_0 = self.input.LA(1) - if ((IDENTIFIER <= LA88_0 <= 43) or (45 <= LA88_0 <= 116)) : + if ((IDENTIFIER <= LA88_0 <= 43) or (45 <= LA88_0 <= 117)) : alt88 = 1 if alt88 == 1: - # C.g:487:17: ~ ( '}' ) - if (IDENTIFIER <= self.input.LA(1) <= 43) or (45 <= self.input.LA(1) <= 116): + # C.g:540:17: ~ ( '}' ) + if (IDENTIFIER <= self.input.LA(1) <= 43) or (45 <= self.input.LA(1) <= 117): self.input.consume(); self.errorRecovery = False self.failed = False @@ -9271,7 +9290,7 @@ class CParser(Parser): mse = MismatchedSetException(None, self.input) self.recoverFromMismatchedSet( - self.input, mse, self.FOLLOW_set_in_asm_statement2128 + self.input, mse, self.FOLLOW_set_in_asm_statement2143 ) raise mse @@ -9282,7 +9301,7 @@ class CParser(Parser): break #loop88 - self.match(self.input, 44, self.FOLLOW_44_in_asm_statement2135) + self.match(self.input, 44, self.FOLLOW_44_in_asm_statement2150) if self.failed: return @@ -9304,7 +9323,7 @@ class CParser(Parser): # $ANTLR start macro_statement - # C.g:490:1: macro_statement : IDENTIFIER '(' ( declaration )* ( statement_list )? ( expression )? ')' ; + # C.g:543:1: macro_statement : IDENTIFIER '(' ( declaration )* ( statement_list )? ( expression )? ')' ; def macro_statement(self, ): macro_statement_StartIndex = self.input.index() @@ -9313,157 +9332,157 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 64): return - # C.g:491:2: ( IDENTIFIER '(' ( declaration )* ( statement_list )? ( expression )? ')' ) - # C.g:491:4: IDENTIFIER '(' ( declaration )* ( statement_list )? ( expression )? ')' - self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_macro_statement2147) + # C.g:544:2: ( IDENTIFIER '(' ( declaration )* ( statement_list )? ( expression )? ')' ) + # C.g:544:4: IDENTIFIER '(' ( declaration )* ( statement_list )? ( expression )? ')' + self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_macro_statement2162) if self.failed: return - self.match(self.input, 61, self.FOLLOW_61_in_macro_statement2149) + self.match(self.input, 62, self.FOLLOW_62_in_macro_statement2164) if self.failed: return - # C.g:491:19: ( declaration )* + # C.g:544:19: ( declaration )* while True: #loop89 alt89 = 2 LA89 = self.input.LA(1) if LA89 == IDENTIFIER: LA89 = self.input.LA(2) - if LA89 == 61: + if LA89 == 62: LA89_45 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 - elif LA89 == 65: - LA89_48 = self.input.LA(3) + elif LA89 == IDENTIFIER: + LA89_47 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 - elif LA89 == 25: - LA89_66 = self.input.LA(3) + elif LA89 == 66: + LA89_50 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 - elif LA89 == IDENTIFIER: - LA89_69 = self.input.LA(3) + elif LA89 == 25: + LA89_68 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 58: - LA89_70 = self.input.LA(3) + LA89_71 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 59: - LA89_71 = self.input.LA(3) + LA89_72 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 60: - LA89_72 = self.input.LA(3) + LA89_73 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 29 or LA89 == 30 or LA89 == 31 or LA89 == 32 or LA89 == 33: - LA89_73 = self.input.LA(3) + LA89_74 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 34: - LA89_74 = self.input.LA(3) + LA89_75 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 35: - LA89_75 = self.input.LA(3) + LA89_76 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 36: - LA89_76 = self.input.LA(3) + LA89_77 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 37: - LA89_77 = self.input.LA(3) + LA89_78 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 38: - LA89_78 = self.input.LA(3) + LA89_79 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 39: - LA89_79 = self.input.LA(3) + LA89_80 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 40: - LA89_80 = self.input.LA(3) + LA89_81 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 41: - LA89_81 = self.input.LA(3) + LA89_82 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 42: - LA89_82 = self.input.LA(3) + LA89_83 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 45 or LA89 == 46: - LA89_83 = self.input.LA(3) + LA89_84 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 48: - LA89_84 = self.input.LA(3) + LA89_85 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 - elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57: - LA89_85 = self.input.LA(3) + elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57 or LA89 == 61: + LA89_86 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 @@ -9473,1563 +9492,1563 @@ class CParser(Parser): if LA89 == 29 or LA89 == 30 or LA89 == 31 or LA89 == 32 or LA89 == 33: LA89_87 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 34: LA89_88 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 35: LA89_89 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 36: LA89_90 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 37: LA89_91 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 38: LA89_92 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 39: LA89_93 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 40: LA89_94 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 41: LA89_95 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 42: LA89_96 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 45 or LA89 == 46: LA89_97 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 48: LA89_98 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == IDENTIFIER: LA89_99 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 58: LA89_100 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 - elif LA89 == 65: + elif LA89 == 66: LA89_101 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 59: LA89_102 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 60: LA89_103 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 - elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57: + elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57 or LA89 == 61: LA89_104 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 - elif LA89 == 61: + elif LA89 == 62: LA89_105 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 29 or LA89 == 30 or LA89 == 31 or LA89 == 32 or LA89 == 33: LA89 = self.input.LA(2) - if LA89 == 65: + if LA89 == 66: LA89_106 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 58: LA89_107 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 59: LA89_108 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 60: LA89_109 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == IDENTIFIER: LA89_110 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 - elif LA89 == 61: + elif LA89 == 62: LA89_111 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 25: LA89_112 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 29 or LA89 == 30 or LA89 == 31 or LA89 == 32 or LA89 == 33: LA89_113 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 34: LA89_114 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 35: LA89_115 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 36: LA89_116 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 37: LA89_117 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 38: LA89_118 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 39: LA89_119 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 40: LA89_120 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 41: LA89_121 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 42: LA89_122 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 45 or LA89 == 46: LA89_123 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 48: LA89_124 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 - elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57: + elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57 or LA89 == 61: LA89_125 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 34: LA89 = self.input.LA(2) - if LA89 == 65: + if LA89 == 66: LA89_126 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 58: LA89_127 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 59: LA89_128 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 60: LA89_129 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == IDENTIFIER: LA89_130 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 - elif LA89 == 61: + elif LA89 == 62: LA89_131 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 25: LA89_132 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 29 or LA89 == 30 or LA89 == 31 or LA89 == 32 or LA89 == 33: LA89_133 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 34: LA89_134 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 35: LA89_135 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 36: LA89_136 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 37: LA89_137 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 38: LA89_138 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 39: LA89_139 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 40: LA89_140 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 41: LA89_141 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 42: LA89_142 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 45 or LA89 == 46: LA89_143 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 48: LA89_144 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 - elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57: + elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57 or LA89 == 61: LA89_145 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 35: LA89 = self.input.LA(2) - if LA89 == 65: + if LA89 == 66: LA89_146 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 58: LA89_147 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 59: LA89_148 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 60: LA89_149 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == IDENTIFIER: LA89_150 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 - elif LA89 == 61: + elif LA89 == 62: LA89_151 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 25: LA89_152 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 29 or LA89 == 30 or LA89 == 31 or LA89 == 32 or LA89 == 33: LA89_153 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 34: LA89_154 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 35: LA89_155 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 36: LA89_156 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 37: LA89_157 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 38: LA89_158 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 39: LA89_159 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 40: LA89_160 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 41: LA89_161 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 42: LA89_162 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 45 or LA89 == 46: LA89_163 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 48: LA89_164 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 - elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57: + elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57 or LA89 == 61: LA89_165 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 36: LA89 = self.input.LA(2) - if LA89 == 65: + if LA89 == 66: LA89_166 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 58: LA89_167 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 59: LA89_168 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 60: LA89_169 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == IDENTIFIER: LA89_170 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 - elif LA89 == 61: + elif LA89 == 62: LA89_171 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 25: LA89_172 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 29 or LA89 == 30 or LA89 == 31 or LA89 == 32 or LA89 == 33: LA89_173 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 34: LA89_174 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 35: LA89_175 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 36: LA89_176 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 37: LA89_177 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 38: LA89_178 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 39: LA89_179 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 40: LA89_180 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 41: LA89_181 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 42: LA89_182 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 45 or LA89 == 46: LA89_183 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 48: LA89_184 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 - elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57: + elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57 or LA89 == 61: LA89_185 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 37: LA89 = self.input.LA(2) - if LA89 == 65: + if LA89 == 66: LA89_186 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 58: LA89_187 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 59: LA89_188 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 60: LA89_189 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == IDENTIFIER: LA89_190 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 - elif LA89 == 61: + elif LA89 == 62: LA89_191 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 25: LA89_192 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 29 or LA89 == 30 or LA89 == 31 or LA89 == 32 or LA89 == 33: LA89_193 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 34: LA89_194 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 35: LA89_195 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 36: LA89_196 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 37: LA89_197 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 38: LA89_198 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 39: LA89_199 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 40: LA89_200 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 41: LA89_201 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 42: LA89_202 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 45 or LA89 == 46: LA89_203 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 48: LA89_204 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 - elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57: + elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57 or LA89 == 61: LA89_205 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 38: LA89 = self.input.LA(2) - if LA89 == 65: + if LA89 == 66: LA89_206 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 58: LA89_207 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 59: LA89_208 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 60: LA89_209 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == IDENTIFIER: LA89_210 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 - elif LA89 == 61: + elif LA89 == 62: LA89_211 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 25: LA89_212 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 29 or LA89 == 30 or LA89 == 31 or LA89 == 32 or LA89 == 33: LA89_213 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 34: LA89_214 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 35: LA89_215 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 36: LA89_216 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 37: LA89_217 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 38: LA89_218 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 39: LA89_219 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 40: LA89_220 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 41: LA89_221 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 42: LA89_222 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 45 or LA89 == 46: LA89_223 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 48: LA89_224 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 - elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57: + elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57 or LA89 == 61: LA89_225 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 39: LA89 = self.input.LA(2) - if LA89 == 65: + if LA89 == 66: LA89_226 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 58: LA89_227 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 59: LA89_228 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 60: LA89_229 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == IDENTIFIER: LA89_230 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 - elif LA89 == 61: + elif LA89 == 62: LA89_231 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 25: LA89_232 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 29 or LA89 == 30 or LA89 == 31 or LA89 == 32 or LA89 == 33: LA89_233 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 34: LA89_234 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 35: LA89_235 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 36: LA89_236 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 37: LA89_237 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 38: LA89_238 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 39: LA89_239 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 40: LA89_240 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 41: LA89_241 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 42: LA89_242 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 45 or LA89 == 46: LA89_243 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 48: LA89_244 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 - elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57: + elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57 or LA89 == 61: LA89_245 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 40: LA89 = self.input.LA(2) - if LA89 == 65: + if LA89 == 66: LA89_246 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 58: LA89_247 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 59: LA89_248 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 60: LA89_249 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == IDENTIFIER: LA89_250 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 - elif LA89 == 61: + elif LA89 == 62: LA89_251 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 25: LA89_252 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 29 or LA89 == 30 or LA89 == 31 or LA89 == 32 or LA89 == 33: LA89_253 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 34: LA89_254 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 35: LA89_255 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 36: LA89_256 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 37: LA89_257 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 38: LA89_258 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 39: LA89_259 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 40: LA89_260 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 41: LA89_261 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 42: LA89_262 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 45 or LA89 == 46: LA89_263 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 48: LA89_264 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 - elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57: + elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57 or LA89 == 61: LA89_265 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 41: LA89 = self.input.LA(2) - if LA89 == 65: + if LA89 == 66: LA89_266 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 58: LA89_267 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 59: LA89_268 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 60: LA89_269 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == IDENTIFIER: LA89_270 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 - elif LA89 == 61: + elif LA89 == 62: LA89_271 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 25: LA89_272 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 29 or LA89 == 30 or LA89 == 31 or LA89 == 32 or LA89 == 33: LA89_273 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 34: LA89_274 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 35: LA89_275 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 36: LA89_276 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 37: LA89_277 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 38: LA89_278 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 39: LA89_279 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 40: LA89_280 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 41: LA89_281 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 42: LA89_282 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 45 or LA89 == 46: LA89_283 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 48: LA89_284 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 - elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57: + elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57 or LA89 == 61: LA89_285 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 42: LA89 = self.input.LA(2) - if LA89 == 65: + if LA89 == 66: LA89_286 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 58: LA89_287 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 59: LA89_288 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 60: LA89_289 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == IDENTIFIER: LA89_290 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 - elif LA89 == 61: + elif LA89 == 62: LA89_291 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 25: LA89_292 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 29 or LA89 == 30 or LA89 == 31 or LA89 == 32 or LA89 == 33: LA89_293 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 34: LA89_294 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 35: LA89_295 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 36: LA89_296 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 37: LA89_297 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 38: LA89_298 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 39: LA89_299 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 40: LA89_300 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 41: LA89_301 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 42: LA89_302 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 45 or LA89 == 46: LA89_303 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 48: LA89_304 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 - elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57: + elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57 or LA89 == 61: LA89_305 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 @@ -11040,14 +11059,14 @@ class CParser(Parser): if (LA89_40 == IDENTIFIER) : LA89_306 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif (LA89_40 == 43) : LA89_307 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 @@ -11056,161 +11075,161 @@ class CParser(Parser): elif LA89 == 48: LA89_41 = self.input.LA(2) - if (LA89_41 == IDENTIFIER) : + if (LA89_41 == 43) : LA89_308 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 - elif (LA89_41 == 43) : + elif (LA89_41 == IDENTIFIER) : LA89_309 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 - elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57 or LA89 == 58 or LA89 == 59 or LA89 == 60: + elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57 or LA89 == 58 or LA89 == 59 or LA89 == 60 or LA89 == 61: LA89 = self.input.LA(2) - if LA89 == 65: + if LA89 == 66: LA89_310 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 58: LA89_311 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 59: LA89_312 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 60: LA89_313 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == IDENTIFIER: LA89_314 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 - elif LA89 == 61: + elif LA89 == 62: LA89_315 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 25: LA89_316 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 29 or LA89 == 30 or LA89 == 31 or LA89 == 32 or LA89 == 33: LA89_317 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 34: LA89_318 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 35: LA89_319 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 36: LA89_320 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 37: LA89_321 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 38: LA89_322 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 39: LA89_323 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 40: LA89_324 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 41: LA89_325 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 42: LA89_326 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 45 or LA89 == 46: LA89_327 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 elif LA89 == 48: LA89_328 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 - elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57: + elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57 or LA89 == 61: LA89_329 = self.input.LA(3) - if (self.synpred180()) : + if (self.synpred181()) : alt89 = 1 @@ -11218,7 +11237,7 @@ class CParser(Parser): if alt89 == 1: # C.g:0:0: declaration - self.following.append(self.FOLLOW_declaration_in_macro_statement2151) + self.following.append(self.FOLLOW_declaration_in_macro_statement2166) self.declaration() self.following.pop() if self.failed: @@ -11229,1202 +11248,1202 @@ class CParser(Parser): break #loop89 - # C.g:491:33: ( statement_list )? + # C.g:544:33: ( statement_list )? alt90 = 2 LA90 = self.input.LA(1) if LA90 == IDENTIFIER: LA90 = self.input.LA(2) - if LA90 == 61: - LA90_44 = self.input.LA(3) + if LA90 == 25 or LA90 == 29 or LA90 == 30 or LA90 == 31 or LA90 == 32 or LA90 == 33 or LA90 == 34 or LA90 == 35 or LA90 == 36 or LA90 == 37 or LA90 == 38 or LA90 == 39 or LA90 == 40 or LA90 == 41 or LA90 == 42 or LA90 == 45 or LA90 == 46 or LA90 == 47 or LA90 == 48 or LA90 == 49 or LA90 == 50 or LA90 == 51 or LA90 == 52 or LA90 == 53 or LA90 == 54 or LA90 == 55 or LA90 == 56 or LA90 == 57 or LA90 == 58 or LA90 == 59 or LA90 == 60 or LA90 == 61: + alt90 = 1 + elif LA90 == 62: + LA90_45 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 25 or LA90 == 29 or LA90 == 30 or LA90 == 31 or LA90 == 32 or LA90 == 33 or LA90 == 34 or LA90 == 35 or LA90 == 36 or LA90 == 37 or LA90 == 38 or LA90 == 39 or LA90 == 40 or LA90 == 41 or LA90 == 42 or LA90 == 45 or LA90 == 46 or LA90 == 47 or LA90 == 48 or LA90 == 49 or LA90 == 50 or LA90 == 51 or LA90 == 52 or LA90 == 53 or LA90 == 54 or LA90 == 55 or LA90 == 56 or LA90 == 57 or LA90 == 58 or LA90 == 59 or LA90 == 60: - alt90 = 1 elif LA90 == STRING_LITERAL: LA90_46 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 elif LA90 == IDENTIFIER: LA90_47 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 63: + elif LA90 == 64: LA90_48 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 74: + elif LA90 == 75: LA90_49 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 65: + elif LA90 == 66: LA90_50 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 75: + elif LA90 == 76: LA90_51 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 71: + elif LA90 == 72: LA90_52 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 72: + elif LA90 == 73: LA90_53 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 28 or LA90 == 79 or LA90 == 80 or LA90 == 81 or LA90 == 82 or LA90 == 83 or LA90 == 84 or LA90 == 85 or LA90 == 86 or LA90 == 87 or LA90 == 88: + elif LA90 == 70: LA90_54 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 69: - LA90_72 = self.input.LA(3) + elif LA90 == 71: + LA90_55 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 70: - LA90_73 = self.input.LA(3) + elif LA90 == 68: + LA90_56 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 67: - LA90_74 = self.input.LA(3) + elif LA90 == 69: + LA90_57 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 68: - LA90_75 = self.input.LA(3) + elif LA90 == 101 or LA90 == 102: + LA90_58 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 100 or LA90 == 101: - LA90_76 = self.input.LA(3) + elif LA90 == 97 or LA90 == 98 or LA90 == 99 or LA90 == 100: + LA90_59 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 96 or LA90 == 97 or LA90 == 98 or LA90 == 99: - LA90_77 = self.input.LA(3) + elif LA90 == 95 or LA90 == 96: + LA90_60 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 94 or LA90 == 95: - LA90_78 = self.input.LA(3) + elif LA90 == 77: + LA90_61 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 76: - LA90_79 = self.input.LA(3) + elif LA90 == 94: + LA90_62 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 elif LA90 == 93: - LA90_80 = self.input.LA(3) + LA90_63 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 elif LA90 == 92: - LA90_81 = self.input.LA(3) + LA90_64 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 elif LA90 == 91: - LA90_82 = self.input.LA(3) + LA90_65 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 elif LA90 == 90: - LA90_83 = self.input.LA(3) + LA90_66 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 89: - LA90_84 = self.input.LA(3) + elif LA90 == 27: + LA90_67 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 27: - LA90_85 = self.input.LA(3) + elif LA90 == 28 or LA90 == 80 or LA90 == 81 or LA90 == 82 or LA90 == 83 or LA90 == 84 or LA90 == 85 or LA90 == 86 or LA90 == 87 or LA90 == 88 or LA90 == 89: + LA90_70 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 25 or LA90 == 26 or LA90 == 29 or LA90 == 30 or LA90 == 31 or LA90 == 32 or LA90 == 33 or LA90 == 34 or LA90 == 35 or LA90 == 36 or LA90 == 37 or LA90 == 38 or LA90 == 39 or LA90 == 40 or LA90 == 41 or LA90 == 42 or LA90 == 43 or LA90 == 45 or LA90 == 46 or LA90 == 48 or LA90 == 49 or LA90 == 50 or LA90 == 51 or LA90 == 52 or LA90 == 53 or LA90 == 54 or LA90 == 55 or LA90 == 56 or LA90 == 57 or LA90 == 58 or LA90 == 59 or LA90 == 60 or LA90 == 102 or LA90 == 103 or LA90 == 104 or LA90 == 105 or LA90 == 106 or LA90 == 107 or LA90 == 109 or LA90 == 110 or LA90 == 111 or LA90 == 112 or LA90 == 113 or LA90 == 114 or LA90 == 115 or LA90 == 116: + elif LA90 == 25 or LA90 == 26 or LA90 == 29 or LA90 == 30 or LA90 == 31 or LA90 == 32 or LA90 == 33 or LA90 == 34 or LA90 == 35 or LA90 == 36 or LA90 == 37 or LA90 == 38 or LA90 == 39 or LA90 == 40 or LA90 == 41 or LA90 == 42 or LA90 == 43 or LA90 == 45 or LA90 == 46 or LA90 == 48 or LA90 == 49 or LA90 == 50 or LA90 == 51 or LA90 == 52 or LA90 == 53 or LA90 == 54 or LA90 == 55 or LA90 == 56 or LA90 == 57 or LA90 == 58 or LA90 == 59 or LA90 == 60 or LA90 == 61 or LA90 == 103 or LA90 == 104 or LA90 == 105 or LA90 == 106 or LA90 == 107 or LA90 == 108 or LA90 == 110 or LA90 == 111 or LA90 == 112 or LA90 == 113 or LA90 == 114 or LA90 == 115 or LA90 == 116 or LA90 == 117: alt90 = 1 elif LA90 == HEX_LITERAL: LA90 = self.input.LA(2) - if LA90 == 63: + if LA90 == 64: LA90_87 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 61: + elif LA90 == 62: LA90_88 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 74: + elif LA90 == 75: LA90_89 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 65: + elif LA90 == 66: LA90_90 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 75: + elif LA90 == 76: LA90_91 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 71: + elif LA90 == 72: LA90_92 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 72: + elif LA90 == 73: LA90_93 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 69: + elif LA90 == 28 or LA90 == 80 or LA90 == 81 or LA90 == 82 or LA90 == 83 or LA90 == 84 or LA90 == 85 or LA90 == 86 or LA90 == 87 or LA90 == 88 or LA90 == 89: LA90_94 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 elif LA90 == 70: LA90_95 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 67: + elif LA90 == 71: LA90_96 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 elif LA90 == 68: LA90_97 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 100 or LA90 == 101: + elif LA90 == 69: LA90_98 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 96 or LA90 == 97 or LA90 == 98 or LA90 == 99: + elif LA90 == 101 or LA90 == 102: LA90_99 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 94 or LA90 == 95: + elif LA90 == 97 or LA90 == 98 or LA90 == 99 or LA90 == 100: LA90_100 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 76: + elif LA90 == 95 or LA90 == 96: LA90_101 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 93: + elif LA90 == 77: LA90_102 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 92: + elif LA90 == 94: LA90_103 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 91: + elif LA90 == 93: LA90_104 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 90: + elif LA90 == 92: LA90_105 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 89: + elif LA90 == 91: LA90_106 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 27: + elif LA90 == 90: LA90_107 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 25: - alt90 = 1 - elif LA90 == 28 or LA90 == 79 or LA90 == 80 or LA90 == 81 or LA90 == 82 or LA90 == 83 or LA90 == 84 or LA90 == 85 or LA90 == 86 or LA90 == 87 or LA90 == 88: - LA90_110 = self.input.LA(3) + elif LA90 == 27: + LA90_108 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 + elif LA90 == 25: + alt90 = 1 elif LA90 == OCTAL_LITERAL: LA90 = self.input.LA(2) - if LA90 == 63: + if LA90 == 64: LA90_111 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 61: + elif LA90 == 62: LA90_112 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 74: + elif LA90 == 75: LA90_113 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 65: + elif LA90 == 66: LA90_114 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 75: + elif LA90 == 76: LA90_115 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 71: + elif LA90 == 72: LA90_116 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 72: + elif LA90 == 73: LA90_117 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 28 or LA90 == 79 or LA90 == 80 or LA90 == 81 or LA90 == 82 or LA90 == 83 or LA90 == 84 or LA90 == 85 or LA90 == 86 or LA90 == 87 or LA90 == 88: + elif LA90 == 70: LA90_118 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 69: + elif LA90 == 71: LA90_119 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 70: + elif LA90 == 68: LA90_120 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 67: + elif LA90 == 69: LA90_121 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 68: + elif LA90 == 101 or LA90 == 102: LA90_122 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 100 or LA90 == 101: + elif LA90 == 97 or LA90 == 98 or LA90 == 99 or LA90 == 100: LA90_123 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 96 or LA90 == 97 or LA90 == 98 or LA90 == 99: + elif LA90 == 95 or LA90 == 96: LA90_124 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 94 or LA90 == 95: + elif LA90 == 77: LA90_125 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 76: + elif LA90 == 94: LA90_126 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 elif LA90 == 93: LA90_127 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 elif LA90 == 92: LA90_128 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 elif LA90 == 91: LA90_129 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 elif LA90 == 90: LA90_130 = self.input.LA(3) - if (self.synpred181()) : - alt90 = 1 - elif LA90 == 89: - LA90_131 = self.input.LA(3) - - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 elif LA90 == 27: - LA90_132 = self.input.LA(3) + LA90_131 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 elif LA90 == 25: alt90 = 1 + elif LA90 == 28 or LA90 == 80 or LA90 == 81 or LA90 == 82 or LA90 == 83 or LA90 == 84 or LA90 == 85 or LA90 == 86 or LA90 == 87 or LA90 == 88 or LA90 == 89: + LA90_134 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 elif LA90 == DECIMAL_LITERAL: LA90 = self.input.LA(2) - if LA90 == 63: + if LA90 == 64: LA90_135 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 61: + elif LA90 == 62: LA90_136 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 74: + elif LA90 == 75: LA90_137 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 65: + elif LA90 == 66: LA90_138 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 75: + elif LA90 == 76: LA90_139 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 71: + elif LA90 == 72: LA90_140 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 72: + elif LA90 == 73: LA90_141 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 28 or LA90 == 79 or LA90 == 80 or LA90 == 81 or LA90 == 82 or LA90 == 83 or LA90 == 84 or LA90 == 85 or LA90 == 86 or LA90 == 87 or LA90 == 88: + elif LA90 == 28 or LA90 == 80 or LA90 == 81 or LA90 == 82 or LA90 == 83 or LA90 == 84 or LA90 == 85 or LA90 == 86 or LA90 == 87 or LA90 == 88 or LA90 == 89: LA90_142 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 69: + elif LA90 == 70: LA90_143 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 70: + elif LA90 == 71: LA90_144 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 67: + elif LA90 == 68: LA90_145 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 68: + elif LA90 == 69: LA90_146 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 100 or LA90 == 101: + elif LA90 == 101 or LA90 == 102: LA90_147 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 96 or LA90 == 97 or LA90 == 98 or LA90 == 99: + elif LA90 == 97 or LA90 == 98 or LA90 == 99 or LA90 == 100: LA90_148 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 94 or LA90 == 95: + elif LA90 == 95 or LA90 == 96: LA90_149 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 76: + elif LA90 == 77: LA90_150 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 93: + elif LA90 == 94: LA90_151 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 92: + elif LA90 == 93: LA90_152 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 91: + elif LA90 == 92: LA90_153 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 90: + elif LA90 == 91: LA90_154 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 89: + elif LA90 == 90: LA90_155 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 elif LA90 == 27: LA90_156 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 elif LA90 == 25: alt90 = 1 elif LA90 == CHARACTER_LITERAL: LA90 = self.input.LA(2) - if LA90 == 63: + if LA90 == 64: LA90_159 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 61: + elif LA90 == 62: LA90_160 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 74: + elif LA90 == 75: LA90_161 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 65: + elif LA90 == 66: LA90_162 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 75: + elif LA90 == 76: LA90_163 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 71: + elif LA90 == 72: LA90_164 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 72: + elif LA90 == 73: LA90_165 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 28 or LA90 == 79 or LA90 == 80 or LA90 == 81 or LA90 == 82 or LA90 == 83 or LA90 == 84 or LA90 == 85 or LA90 == 86 or LA90 == 87 or LA90 == 88: + elif LA90 == 70: LA90_166 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 69: + elif LA90 == 71: LA90_167 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 70: + elif LA90 == 68: LA90_168 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 67: + elif LA90 == 69: LA90_169 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 68: + elif LA90 == 101 or LA90 == 102: LA90_170 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 100 or LA90 == 101: + elif LA90 == 97 or LA90 == 98 or LA90 == 99 or LA90 == 100: LA90_171 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 96 or LA90 == 97 or LA90 == 98 or LA90 == 99: + elif LA90 == 95 or LA90 == 96: LA90_172 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 94 or LA90 == 95: + elif LA90 == 77: LA90_173 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 76: + elif LA90 == 94: LA90_174 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 elif LA90 == 93: LA90_175 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 elif LA90 == 92: LA90_176 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 elif LA90 == 91: LA90_177 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 elif LA90 == 90: LA90_178 = self.input.LA(3) - if (self.synpred181()) : - alt90 = 1 - elif LA90 == 89: - LA90_179 = self.input.LA(3) - - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 elif LA90 == 27: - LA90_180 = self.input.LA(3) + LA90_179 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 elif LA90 == 25: alt90 = 1 + elif LA90 == 28 or LA90 == 80 or LA90 == 81 or LA90 == 82 or LA90 == 83 or LA90 == 84 or LA90 == 85 or LA90 == 86 or LA90 == 87 or LA90 == 88 or LA90 == 89: + LA90_181 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 elif LA90 == STRING_LITERAL: LA90 = self.input.LA(2) if LA90 == IDENTIFIER: LA90_183 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 63: + elif LA90 == 64: LA90_184 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 61: + elif LA90 == 62: LA90_185 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 74: + elif LA90 == 75: LA90_186 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 65: + elif LA90 == 66: LA90_187 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 75: + elif LA90 == 76: LA90_188 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 71: + elif LA90 == 72: LA90_189 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 72: + elif LA90 == 73: LA90_190 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 69: + elif LA90 == 28 or LA90 == 80 or LA90 == 81 or LA90 == 82 or LA90 == 83 or LA90 == 84 or LA90 == 85 or LA90 == 86 or LA90 == 87 or LA90 == 88 or LA90 == 89: LA90_191 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 70: + elif LA90 == STRING_LITERAL: LA90_192 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 67: + elif LA90 == 70: LA90_193 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 68: + elif LA90 == 71: LA90_194 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 100 or LA90 == 101: + elif LA90 == 68: LA90_195 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 96 or LA90 == 97 or LA90 == 98 or LA90 == 99: + elif LA90 == 69: LA90_196 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 94 or LA90 == 95: + elif LA90 == 101 or LA90 == 102: LA90_197 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 76: + elif LA90 == 97 or LA90 == 98 or LA90 == 99 or LA90 == 100: LA90_198 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 93: + elif LA90 == 95 or LA90 == 96: LA90_199 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 92: + elif LA90 == 77: LA90_200 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 91: + elif LA90 == 94: LA90_201 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 90: + elif LA90 == 93: LA90_202 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 89: + elif LA90 == 92: LA90_203 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 27: + elif LA90 == 91: LA90_204 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 25: - alt90 = 1 - elif LA90 == STRING_LITERAL: - LA90_206 = self.input.LA(3) + elif LA90 == 90: + LA90_205 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 28 or LA90 == 79 or LA90 == 80 or LA90 == 81 or LA90 == 82 or LA90 == 83 or LA90 == 84 or LA90 == 85 or LA90 == 86 or LA90 == 87 or LA90 == 88: - LA90_207 = self.input.LA(3) + elif LA90 == 27: + LA90_206 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 + elif LA90 == 25: + alt90 = 1 elif LA90 == FLOATING_POINT_LITERAL: LA90 = self.input.LA(2) - if LA90 == 63: + if LA90 == 64: LA90_209 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 61: + elif LA90 == 62: LA90_210 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 74: + elif LA90 == 75: LA90_211 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 65: + elif LA90 == 66: LA90_212 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 75: + elif LA90 == 76: LA90_213 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 71: + elif LA90 == 72: LA90_214 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 72: + elif LA90 == 73: LA90_215 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 69: + elif LA90 == 28 or LA90 == 80 or LA90 == 81 or LA90 == 82 or LA90 == 83 or LA90 == 84 or LA90 == 85 or LA90 == 86 or LA90 == 87 or LA90 == 88 or LA90 == 89: LA90_216 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 elif LA90 == 70: LA90_217 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 67: + elif LA90 == 71: LA90_218 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 elif LA90 == 68: LA90_219 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 100 or LA90 == 101: + elif LA90 == 69: LA90_220 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 96 or LA90 == 97 or LA90 == 98 or LA90 == 99: + elif LA90 == 101 or LA90 == 102: LA90_221 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 94 or LA90 == 95: + elif LA90 == 97 or LA90 == 98 or LA90 == 99 or LA90 == 100: LA90_222 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 76: + elif LA90 == 95 or LA90 == 96: LA90_223 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 93: + elif LA90 == 77: LA90_224 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 92: + elif LA90 == 94: LA90_225 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 91: + elif LA90 == 93: LA90_226 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 90: + elif LA90 == 92: LA90_227 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 89: + elif LA90 == 91: LA90_228 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 27: + elif LA90 == 90: LA90_229 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 25: - alt90 = 1 - elif LA90 == 28 or LA90 == 79 or LA90 == 80 or LA90 == 81 or LA90 == 82 or LA90 == 83 or LA90 == 84 or LA90 == 85 or LA90 == 86 or LA90 == 87 or LA90 == 88: - LA90_231 = self.input.LA(3) + elif LA90 == 27: + LA90_230 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 61: + elif LA90 == 25: + alt90 = 1 + elif LA90 == 62: LA90 = self.input.LA(2) if LA90 == IDENTIFIER: LA90_233 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 elif LA90 == HEX_LITERAL: LA90_234 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 elif LA90 == OCTAL_LITERAL: LA90_235 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 elif LA90 == DECIMAL_LITERAL: LA90_236 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 elif LA90 == CHARACTER_LITERAL: LA90_237 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 elif LA90 == STRING_LITERAL: LA90_238 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 elif LA90 == FLOATING_POINT_LITERAL: LA90_239 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 61: + elif LA90 == 62: LA90_240 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 71: + elif LA90 == 72: LA90_241 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 72: + elif LA90 == 73: LA90_242 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 65 or LA90 == 67 or LA90 == 68 or LA90 == 76 or LA90 == 77 or LA90 == 78: + elif LA90 == 66 or LA90 == 68 or LA90 == 69 or LA90 == 77 or LA90 == 78 or LA90 == 79: LA90_243 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 73: + elif LA90 == 74: LA90_244 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 49 or LA90 == 50 or LA90 == 51 or LA90 == 52 or LA90 == 53 or LA90 == 54 or LA90 == 55 or LA90 == 56 or LA90 == 57 or LA90 == 58 or LA90 == 59 or LA90 == 60: + elif LA90 == 49 or LA90 == 50 or LA90 == 51 or LA90 == 52 or LA90 == 53 or LA90 == 54 or LA90 == 55 or LA90 == 56 or LA90 == 57 or LA90 == 58 or LA90 == 59 or LA90 == 60 or LA90 == 61: LA90_245 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 elif LA90 == 34: LA90_246 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 elif LA90 == 35: LA90_247 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 elif LA90 == 36: LA90_248 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 elif LA90 == 37: LA90_249 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 elif LA90 == 38: LA90_250 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 elif LA90 == 39: LA90_251 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 elif LA90 == 40: LA90_252 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 elif LA90 == 41: LA90_253 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 elif LA90 == 42: LA90_254 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 elif LA90 == 45 or LA90 == 46: LA90_255 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 elif LA90 == 48: LA90_256 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 71: + elif LA90 == 72: LA90 = self.input.LA(2) if LA90 == IDENTIFIER: LA90_257 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 elif LA90 == HEX_LITERAL: LA90_258 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 elif LA90 == OCTAL_LITERAL: LA90_259 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 elif LA90 == DECIMAL_LITERAL: LA90_260 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 elif LA90 == CHARACTER_LITERAL: LA90_261 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 elif LA90 == STRING_LITERAL: LA90_262 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 elif LA90 == FLOATING_POINT_LITERAL: LA90_263 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 61: + elif LA90 == 62: LA90_264 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 71: + elif LA90 == 72: LA90_265 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 72: + elif LA90 == 73: LA90_266 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 65 or LA90 == 67 or LA90 == 68 or LA90 == 76 or LA90 == 77 or LA90 == 78: + elif LA90 == 66 or LA90 == 68 or LA90 == 69 or LA90 == 77 or LA90 == 78 or LA90 == 79: LA90_267 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 73: + elif LA90 == 74: LA90_268 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 72: + elif LA90 == 73: LA90 = self.input.LA(2) if LA90 == IDENTIFIER: LA90_269 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 elif LA90 == HEX_LITERAL: LA90_270 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 elif LA90 == OCTAL_LITERAL: LA90_271 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 elif LA90 == DECIMAL_LITERAL: LA90_272 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 elif LA90 == CHARACTER_LITERAL: LA90_273 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 elif LA90 == STRING_LITERAL: LA90_274 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 elif LA90 == FLOATING_POINT_LITERAL: LA90_275 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 61: + elif LA90 == 62: LA90_276 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 71: + elif LA90 == 72: LA90_277 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 72: + elif LA90 == 73: LA90_278 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 65 or LA90 == 67 or LA90 == 68 or LA90 == 76 or LA90 == 77 or LA90 == 78: + elif LA90 == 66 or LA90 == 68 or LA90 == 69 or LA90 == 77 or LA90 == 78 or LA90 == 79: LA90_279 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 73: + elif LA90 == 74: LA90_280 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 65 or LA90 == 67 or LA90 == 68 or LA90 == 76 or LA90 == 77 or LA90 == 78: + elif LA90 == 66 or LA90 == 68 or LA90 == 69 or LA90 == 77 or LA90 == 78 or LA90 == 79: LA90 = self.input.LA(2) - if LA90 == 61: + if LA90 == 62: LA90_281 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 elif LA90 == IDENTIFIER: LA90_282 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 elif LA90 == HEX_LITERAL: LA90_283 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 elif LA90 == OCTAL_LITERAL: LA90_284 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 elif LA90 == DECIMAL_LITERAL: LA90_285 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 elif LA90 == CHARACTER_LITERAL: LA90_286 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 elif LA90 == STRING_LITERAL: LA90_287 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 elif LA90 == FLOATING_POINT_LITERAL: LA90_288 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 71: + elif LA90 == 72: LA90_289 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 72: + elif LA90 == 73: LA90_290 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 65 or LA90 == 67 or LA90 == 68 or LA90 == 76 or LA90 == 77 or LA90 == 78: + elif LA90 == 66 or LA90 == 68 or LA90 == 69 or LA90 == 77 or LA90 == 78 or LA90 == 79: LA90_291 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 73: + elif LA90 == 74: LA90_292 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 73: + elif LA90 == 74: LA90 = self.input.LA(2) - if LA90 == 61: + if LA90 == 62: LA90_293 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 elif LA90 == IDENTIFIER: LA90_294 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 elif LA90 == HEX_LITERAL: LA90_295 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 elif LA90 == OCTAL_LITERAL: LA90_296 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 elif LA90 == DECIMAL_LITERAL: LA90_297 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 elif LA90 == CHARACTER_LITERAL: LA90_298 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 elif LA90 == STRING_LITERAL: LA90_299 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 elif LA90 == FLOATING_POINT_LITERAL: LA90_300 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 71: + elif LA90 == 72: LA90_301 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 72: + elif LA90 == 73: LA90_302 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 65 or LA90 == 67 or LA90 == 68 or LA90 == 76 or LA90 == 77 or LA90 == 78: + elif LA90 == 66 or LA90 == 68 or LA90 == 69 or LA90 == 77 or LA90 == 78 or LA90 == 79: LA90_303 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 - elif LA90 == 73: + elif LA90 == 74: LA90_304 = self.input.LA(3) - if (self.synpred181()) : + if (self.synpred182()) : alt90 = 1 if alt90 == 1: # C.g:0:0: statement_list - self.following.append(self.FOLLOW_statement_list_in_macro_statement2155) + self.following.append(self.FOLLOW_statement_list_in_macro_statement2170) self.statement_list() self.following.pop() if self.failed: @@ -12432,15 +12451,15 @@ class CParser(Parser): - # C.g:491:49: ( expression )? + # C.g:544:49: ( expression )? alt91 = 2 LA91_0 = self.input.LA(1) - if ((IDENTIFIER <= LA91_0 <= FLOATING_POINT_LITERAL) or LA91_0 == 61 or LA91_0 == 65 or (67 <= LA91_0 <= 68) or (71 <= LA91_0 <= 73) or (76 <= LA91_0 <= 78)) : + if ((IDENTIFIER <= LA91_0 <= FLOATING_POINT_LITERAL) or LA91_0 == 62 or LA91_0 == 66 or (68 <= LA91_0 <= 69) or (72 <= LA91_0 <= 74) or (77 <= LA91_0 <= 79)) : alt91 = 1 if alt91 == 1: # C.g:0:0: expression - self.following.append(self.FOLLOW_expression_in_macro_statement2158) + self.following.append(self.FOLLOW_expression_in_macro_statement2173) self.expression() self.following.pop() if self.failed: @@ -12448,7 +12467,7 @@ class CParser(Parser): - self.match(self.input, 62, self.FOLLOW_62_in_macro_statement2161) + self.match(self.input, 63, self.FOLLOW_63_in_macro_statement2176) if self.failed: return @@ -12470,7 +12489,7 @@ class CParser(Parser): # $ANTLR start labeled_statement - # C.g:494:1: labeled_statement : ( IDENTIFIER ':' statement | 'case' constant_expression ':' statement | 'default' ':' statement ); + # C.g:547:1: labeled_statement : ( IDENTIFIER ':' statement | 'case' constant_expression ':' statement | 'default' ':' statement ); def labeled_statement(self, ): labeled_statement_StartIndex = self.input.index() @@ -12479,33 +12498,33 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 65): return - # C.g:495:2: ( IDENTIFIER ':' statement | 'case' constant_expression ':' statement | 'default' ':' statement ) + # C.g:548:2: ( IDENTIFIER ':' statement | 'case' constant_expression ':' statement | 'default' ':' statement ) alt92 = 3 LA92 = self.input.LA(1) if LA92 == IDENTIFIER: alt92 = 1 - elif LA92 == 105: - alt92 = 2 elif LA92 == 106: + alt92 = 2 + elif LA92 == 107: alt92 = 3 else: if self.backtracking > 0: self.failed = True return - nvae = NoViableAltException("494:1: labeled_statement : ( IDENTIFIER ':' statement | 'case' constant_expression ':' statement | 'default' ':' statement );", 92, 0, self.input) + nvae = NoViableAltException("547:1: labeled_statement : ( IDENTIFIER ':' statement | 'case' constant_expression ':' statement | 'default' ':' statement );", 92, 0, self.input) raise nvae if alt92 == 1: - # C.g:495:4: IDENTIFIER ':' statement - self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_labeled_statement2173) + # C.g:548:4: IDENTIFIER ':' statement + self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_labeled_statement2188) if self.failed: return - self.match(self.input, 47, self.FOLLOW_47_in_labeled_statement2175) + self.match(self.input, 47, self.FOLLOW_47_in_labeled_statement2190) if self.failed: return - self.following.append(self.FOLLOW_statement_in_labeled_statement2177) + self.following.append(self.FOLLOW_statement_in_labeled_statement2192) self.statement() self.following.pop() if self.failed: @@ -12513,19 +12532,19 @@ class CParser(Parser): elif alt92 == 2: - # C.g:496:4: 'case' constant_expression ':' statement - self.match(self.input, 105, self.FOLLOW_105_in_labeled_statement2182) + # C.g:549:4: 'case' constant_expression ':' statement + self.match(self.input, 106, self.FOLLOW_106_in_labeled_statement2197) if self.failed: return - self.following.append(self.FOLLOW_constant_expression_in_labeled_statement2184) + self.following.append(self.FOLLOW_constant_expression_in_labeled_statement2199) self.constant_expression() self.following.pop() if self.failed: return - self.match(self.input, 47, self.FOLLOW_47_in_labeled_statement2186) + self.match(self.input, 47, self.FOLLOW_47_in_labeled_statement2201) if self.failed: return - self.following.append(self.FOLLOW_statement_in_labeled_statement2188) + self.following.append(self.FOLLOW_statement_in_labeled_statement2203) self.statement() self.following.pop() if self.failed: @@ -12533,14 +12552,14 @@ class CParser(Parser): elif alt92 == 3: - # C.g:497:4: 'default' ':' statement - self.match(self.input, 106, self.FOLLOW_106_in_labeled_statement2193) + # C.g:550:4: 'default' ':' statement + self.match(self.input, 107, self.FOLLOW_107_in_labeled_statement2208) if self.failed: return - self.match(self.input, 47, self.FOLLOW_47_in_labeled_statement2195) + self.match(self.input, 47, self.FOLLOW_47_in_labeled_statement2210) if self.failed: return - self.following.append(self.FOLLOW_statement_in_labeled_statement2197) + self.following.append(self.FOLLOW_statement_in_labeled_statement2212) self.statement() self.following.pop() if self.failed: @@ -12569,7 +12588,7 @@ class CParser(Parser): # $ANTLR start compound_statement - # C.g:500:1: compound_statement : '{' ( declaration )* ( statement_list )? '}' ; + # C.g:553:1: compound_statement : '{' ( declaration )* ( statement_list )? '}' ; def compound_statement(self, ): retval = self.compound_statement_return() @@ -12580,154 +12599,154 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 66): return retval - # C.g:501:2: ( '{' ( declaration )* ( statement_list )? '}' ) - # C.g:501:4: '{' ( declaration )* ( statement_list )? '}' - self.match(self.input, 43, self.FOLLOW_43_in_compound_statement2208) + # C.g:554:2: ( '{' ( declaration )* ( statement_list )? '}' ) + # C.g:554:4: '{' ( declaration )* ( statement_list )? '}' + self.match(self.input, 43, self.FOLLOW_43_in_compound_statement2223) if self.failed: return retval - # C.g:501:8: ( declaration )* + # C.g:554:8: ( declaration )* while True: #loop93 alt93 = 2 LA93 = self.input.LA(1) if LA93 == IDENTIFIER: LA93 = self.input.LA(2) - if LA93 == 61: + if LA93 == 62: LA93_44 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 - elif LA93 == 65: - LA93_48 = self.input.LA(3) + elif LA93 == IDENTIFIER: + LA93_47 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 - elif LA93 == 25: - LA93_67 = self.input.LA(3) + elif LA93 == 66: + LA93_48 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 - elif LA93 == IDENTIFIER: - LA93_69 = self.input.LA(3) + elif LA93 == 58: + LA93_49 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 - elif LA93 == 58: - LA93_70 = self.input.LA(3) + elif LA93 == 59: + LA93_50 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 - elif LA93 == 59: - LA93_71 = self.input.LA(3) + elif LA93 == 60: + LA93_51 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 - elif LA93 == 60: - LA93_72 = self.input.LA(3) + elif LA93 == 25: + LA93_52 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 29 or LA93 == 30 or LA93 == 31 or LA93 == 32 or LA93 == 33: - LA93_73 = self.input.LA(3) + LA93_53 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 34: - LA93_74 = self.input.LA(3) + LA93_54 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 35: - LA93_75 = self.input.LA(3) + LA93_55 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 36: - LA93_76 = self.input.LA(3) + LA93_56 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 37: - LA93_77 = self.input.LA(3) + LA93_57 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 38: - LA93_78 = self.input.LA(3) + LA93_58 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 39: - LA93_79 = self.input.LA(3) + LA93_59 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 40: - LA93_80 = self.input.LA(3) + LA93_60 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 41: - LA93_81 = self.input.LA(3) + LA93_61 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 42: - LA93_82 = self.input.LA(3) + LA93_62 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 45 or LA93 == 46: - LA93_83 = self.input.LA(3) + LA93_63 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 48: - LA93_84 = self.input.LA(3) + LA93_64 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 - elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57: - LA93_85 = self.input.LA(3) + elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57 or LA93 == 61: + LA93_65 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 @@ -12737,1563 +12756,1563 @@ class CParser(Parser): if LA93 == 29 or LA93 == 30 or LA93 == 31 or LA93 == 32 or LA93 == 33: LA93_86 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 34: LA93_87 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 35: LA93_88 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 36: LA93_89 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 37: LA93_90 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 38: LA93_91 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 39: LA93_92 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 40: LA93_93 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 41: LA93_94 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 42: LA93_95 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 45 or LA93 == 46: LA93_96 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 48: LA93_97 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == IDENTIFIER: LA93_98 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 58: LA93_99 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 - elif LA93 == 65: + elif LA93 == 66: LA93_100 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 59: LA93_101 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 60: LA93_102 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 - elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57: + elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57 or LA93 == 61: LA93_103 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 - elif LA93 == 61: + elif LA93 == 62: LA93_104 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 29 or LA93 == 30 or LA93 == 31 or LA93 == 32 or LA93 == 33: LA93 = self.input.LA(2) - if LA93 == 65: + if LA93 == 66: LA93_105 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 58: LA93_106 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 59: LA93_107 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 60: LA93_108 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == IDENTIFIER: LA93_109 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 - elif LA93 == 61: + elif LA93 == 62: LA93_110 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 25: LA93_111 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 29 or LA93 == 30 or LA93 == 31 or LA93 == 32 or LA93 == 33: LA93_112 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 34: LA93_113 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 35: LA93_114 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 36: LA93_115 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 37: LA93_116 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 38: LA93_117 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 39: LA93_118 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 40: LA93_119 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 41: LA93_120 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 42: LA93_121 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 45 or LA93 == 46: LA93_122 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 48: LA93_123 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 - elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57: + elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57 or LA93 == 61: LA93_124 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 34: LA93 = self.input.LA(2) - if LA93 == 65: + if LA93 == 66: LA93_125 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 58: LA93_126 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 59: LA93_127 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 60: LA93_128 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == IDENTIFIER: LA93_129 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 - elif LA93 == 61: + elif LA93 == 62: LA93_130 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 25: LA93_131 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 29 or LA93 == 30 or LA93 == 31 or LA93 == 32 or LA93 == 33: LA93_132 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 34: LA93_133 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 35: LA93_134 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 36: LA93_135 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 37: LA93_136 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 38: LA93_137 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 39: LA93_138 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 40: LA93_139 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 41: LA93_140 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 42: LA93_141 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 45 or LA93 == 46: LA93_142 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 48: LA93_143 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 - elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57: + elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57 or LA93 == 61: LA93_144 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 35: LA93 = self.input.LA(2) - if LA93 == 65: + if LA93 == 66: LA93_145 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 58: LA93_146 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 59: LA93_147 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 60: LA93_148 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == IDENTIFIER: LA93_149 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 - elif LA93 == 61: + elif LA93 == 62: LA93_150 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 25: LA93_151 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 29 or LA93 == 30 or LA93 == 31 or LA93 == 32 or LA93 == 33: LA93_152 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 34: LA93_153 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 35: LA93_154 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 36: LA93_155 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 37: LA93_156 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 38: LA93_157 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 39: LA93_158 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 40: LA93_159 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 41: LA93_160 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 42: LA93_161 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 45 or LA93 == 46: LA93_162 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 48: LA93_163 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 - elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57: + elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57 or LA93 == 61: LA93_164 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 36: LA93 = self.input.LA(2) - if LA93 == 65: + if LA93 == 66: LA93_165 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 58: LA93_166 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 59: LA93_167 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 60: LA93_168 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == IDENTIFIER: LA93_169 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 - elif LA93 == 61: + elif LA93 == 62: LA93_170 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 25: LA93_171 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 29 or LA93 == 30 or LA93 == 31 or LA93 == 32 or LA93 == 33: LA93_172 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 34: LA93_173 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 35: LA93_174 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 36: LA93_175 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 37: LA93_176 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 38: LA93_177 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 39: LA93_178 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 40: LA93_179 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 41: LA93_180 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 42: LA93_181 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 45 or LA93 == 46: LA93_182 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 48: LA93_183 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 - elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57: + elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57 or LA93 == 61: LA93_184 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 37: LA93 = self.input.LA(2) - if LA93 == 65: + if LA93 == 66: LA93_185 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 58: LA93_186 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 59: LA93_187 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 60: LA93_188 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == IDENTIFIER: LA93_189 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 - elif LA93 == 61: + elif LA93 == 62: LA93_190 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 25: LA93_191 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 29 or LA93 == 30 or LA93 == 31 or LA93 == 32 or LA93 == 33: LA93_192 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 34: LA93_193 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 35: LA93_194 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 36: LA93_195 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 37: LA93_196 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 38: LA93_197 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 39: LA93_198 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 40: LA93_199 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 41: LA93_200 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 42: LA93_201 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 45 or LA93 == 46: LA93_202 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 48: LA93_203 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 - elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57: + elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57 or LA93 == 61: LA93_204 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 38: LA93 = self.input.LA(2) - if LA93 == 65: + if LA93 == 66: LA93_205 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 58: LA93_206 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 59: LA93_207 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 60: LA93_208 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == IDENTIFIER: LA93_209 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 - elif LA93 == 61: + elif LA93 == 62: LA93_210 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 25: LA93_211 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 29 or LA93 == 30 or LA93 == 31 or LA93 == 32 or LA93 == 33: LA93_212 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 34: LA93_213 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 35: LA93_214 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 36: LA93_215 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 37: LA93_216 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 38: LA93_217 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 39: LA93_218 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 40: LA93_219 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 41: LA93_220 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 42: LA93_221 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 45 or LA93 == 46: LA93_222 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 48: LA93_223 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 - elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57: + elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57 or LA93 == 61: LA93_224 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 39: LA93 = self.input.LA(2) - if LA93 == 65: + if LA93 == 66: LA93_225 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 58: LA93_226 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 59: LA93_227 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 60: LA93_228 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == IDENTIFIER: LA93_229 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 - elif LA93 == 61: + elif LA93 == 62: LA93_230 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 25: LA93_231 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 29 or LA93 == 30 or LA93 == 31 or LA93 == 32 or LA93 == 33: LA93_232 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 34: LA93_233 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 35: LA93_234 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 36: LA93_235 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 37: LA93_236 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 38: LA93_237 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 39: LA93_238 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 40: LA93_239 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 41: LA93_240 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 42: LA93_241 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 45 or LA93 == 46: LA93_242 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 48: LA93_243 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 - elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57: + elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57 or LA93 == 61: LA93_244 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 40: LA93 = self.input.LA(2) - if LA93 == 65: + if LA93 == 66: LA93_245 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 58: LA93_246 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 59: LA93_247 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 60: LA93_248 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == IDENTIFIER: LA93_249 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 - elif LA93 == 61: + elif LA93 == 62: LA93_250 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 25: LA93_251 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 29 or LA93 == 30 or LA93 == 31 or LA93 == 32 or LA93 == 33: LA93_252 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 34: LA93_253 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 35: LA93_254 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 36: LA93_255 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 37: LA93_256 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 38: LA93_257 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 39: LA93_258 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 40: LA93_259 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 41: LA93_260 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 42: LA93_261 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 45 or LA93 == 46: LA93_262 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 48: LA93_263 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 - elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57: + elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57 or LA93 == 61: LA93_264 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 41: LA93 = self.input.LA(2) - if LA93 == 65: + if LA93 == 66: LA93_265 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 58: LA93_266 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 59: LA93_267 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 60: LA93_268 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == IDENTIFIER: LA93_269 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 - elif LA93 == 61: + elif LA93 == 62: LA93_270 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 25: LA93_271 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 29 or LA93 == 30 or LA93 == 31 or LA93 == 32 or LA93 == 33: LA93_272 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 34: LA93_273 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 35: LA93_274 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 36: LA93_275 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 37: LA93_276 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 38: LA93_277 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 39: LA93_278 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 40: LA93_279 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 41: LA93_280 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 42: LA93_281 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 45 or LA93 == 46: LA93_282 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 48: LA93_283 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 - elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57: + elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57 or LA93 == 61: LA93_284 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 42: LA93 = self.input.LA(2) - if LA93 == 65: + if LA93 == 66: LA93_285 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 58: LA93_286 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 59: LA93_287 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 60: LA93_288 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == IDENTIFIER: LA93_289 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 - elif LA93 == 61: + elif LA93 == 62: LA93_290 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 25: LA93_291 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 29 or LA93 == 30 or LA93 == 31 or LA93 == 32 or LA93 == 33: LA93_292 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 34: LA93_293 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 35: LA93_294 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 36: LA93_295 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 37: LA93_296 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 38: LA93_297 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 39: LA93_298 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 40: LA93_299 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 41: LA93_300 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 42: LA93_301 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 45 or LA93 == 46: LA93_302 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 48: LA93_303 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 - elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57: + elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57 or LA93 == 61: LA93_304 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 @@ -14304,14 +14323,14 @@ class CParser(Parser): if (LA93_40 == IDENTIFIER) : LA93_305 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif (LA93_40 == 43) : LA93_306 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 @@ -14320,161 +14339,161 @@ class CParser(Parser): elif LA93 == 48: LA93_41 = self.input.LA(2) - if (LA93_41 == IDENTIFIER) : + if (LA93_41 == 43) : LA93_307 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 - elif (LA93_41 == 43) : + elif (LA93_41 == IDENTIFIER) : LA93_308 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 - elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57 or LA93 == 58 or LA93 == 59 or LA93 == 60: + elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57 or LA93 == 58 or LA93 == 59 or LA93 == 60 or LA93 == 61: LA93 = self.input.LA(2) - if LA93 == 65: + if LA93 == 66: LA93_309 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 58: LA93_310 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 59: LA93_311 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 60: LA93_312 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == IDENTIFIER: LA93_313 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 - elif LA93 == 61: + elif LA93 == 62: LA93_314 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 25: LA93_315 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 29 or LA93 == 30 or LA93 == 31 or LA93 == 32 or LA93 == 33: LA93_316 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 34: LA93_317 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 35: LA93_318 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 36: LA93_319 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 37: LA93_320 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 38: LA93_321 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 39: LA93_322 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 40: LA93_323 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 41: LA93_324 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 42: LA93_325 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 45 or LA93 == 46: LA93_326 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 elif LA93 == 48: LA93_327 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 - elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57: + elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57 or LA93 == 61: LA93_328 = self.input.LA(3) - if (self.synpred185()) : + if (self.synpred186()) : alt93 = 1 @@ -14482,7 +14501,7 @@ class CParser(Parser): if alt93 == 1: # C.g:0:0: declaration - self.following.append(self.FOLLOW_declaration_in_compound_statement2210) + self.following.append(self.FOLLOW_declaration_in_compound_statement2225) self.declaration() self.following.pop() if self.failed: @@ -14493,15 +14512,15 @@ class CParser(Parser): break #loop93 - # C.g:501:21: ( statement_list )? + # C.g:554:21: ( statement_list )? alt94 = 2 LA94_0 = self.input.LA(1) - if ((IDENTIFIER <= LA94_0 <= FLOATING_POINT_LITERAL) or (25 <= LA94_0 <= 26) or (29 <= LA94_0 <= 43) or (45 <= LA94_0 <= 46) or (48 <= LA94_0 <= 61) or LA94_0 == 65 or (67 <= LA94_0 <= 68) or (71 <= LA94_0 <= 73) or (76 <= LA94_0 <= 78) or (102 <= LA94_0 <= 107) or (109 <= LA94_0 <= 116)) : + if ((IDENTIFIER <= LA94_0 <= FLOATING_POINT_LITERAL) or (25 <= LA94_0 <= 26) or (29 <= LA94_0 <= 43) or (45 <= LA94_0 <= 46) or (48 <= LA94_0 <= 62) or LA94_0 == 66 or (68 <= LA94_0 <= 69) or (72 <= LA94_0 <= 74) or (77 <= LA94_0 <= 79) or (103 <= LA94_0 <= 108) or (110 <= LA94_0 <= 117)) : alt94 = 1 if alt94 == 1: # C.g:0:0: statement_list - self.following.append(self.FOLLOW_statement_list_in_compound_statement2213) + self.following.append(self.FOLLOW_statement_list_in_compound_statement2228) self.statement_list() self.following.pop() if self.failed: @@ -14509,7 +14528,7 @@ class CParser(Parser): - self.match(self.input, 44, self.FOLLOW_44_in_compound_statement2216) + self.match(self.input, 44, self.FOLLOW_44_in_compound_statement2231) if self.failed: return retval @@ -14533,7 +14552,7 @@ class CParser(Parser): # $ANTLR start statement_list - # C.g:504:1: statement_list : ( statement )+ ; + # C.g:557:1: statement_list : ( statement )+ ; def statement_list(self, ): statement_list_StartIndex = self.input.index() @@ -14542,498 +14561,498 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 67): return - # C.g:505:2: ( ( statement )+ ) - # C.g:505:4: ( statement )+ - # C.g:505:4: ( statement )+ + # C.g:558:2: ( ( statement )+ ) + # C.g:558:4: ( statement )+ + # C.g:558:4: ( statement )+ cnt95 = 0 while True: #loop95 alt95 = 2 LA95 = self.input.LA(1) if LA95 == IDENTIFIER: LA95 = self.input.LA(2) - if LA95 == 25 or LA95 == 29 or LA95 == 30 or LA95 == 31 or LA95 == 32 or LA95 == 33 or LA95 == 34 or LA95 == 35 or LA95 == 36 or LA95 == 37 or LA95 == 38 or LA95 == 39 or LA95 == 40 or LA95 == 41 or LA95 == 42 or LA95 == 45 or LA95 == 46 or LA95 == 47 or LA95 == 48 or LA95 == 49 or LA95 == 50 or LA95 == 51 or LA95 == 52 or LA95 == 53 or LA95 == 54 or LA95 == 55 or LA95 == 56 or LA95 == 57 or LA95 == 58 or LA95 == 59 or LA95 == 60: - alt95 = 1 - elif LA95 == 61: - LA95_47 = self.input.LA(3) + if LA95 == 62: + LA95_46 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 63: + elif LA95 == 25 or LA95 == 29 or LA95 == 30 or LA95 == 31 or LA95 == 32 or LA95 == 33 or LA95 == 34 or LA95 == 35 or LA95 == 36 or LA95 == 37 or LA95 == 38 or LA95 == 39 or LA95 == 40 or LA95 == 41 or LA95 == 42 or LA95 == 45 or LA95 == 46 or LA95 == 47 or LA95 == 48 or LA95 == 49 or LA95 == 50 or LA95 == 51 or LA95 == 52 or LA95 == 53 or LA95 == 54 or LA95 == 55 or LA95 == 56 or LA95 == 57 or LA95 == 58 or LA95 == 59 or LA95 == 60 or LA95 == 61: + alt95 = 1 + elif LA95 == STRING_LITERAL: LA95_48 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 74: + elif LA95 == IDENTIFIER: LA95_49 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 65: + elif LA95 == 64: LA95_50 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 elif LA95 == 75: LA95_51 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 71: + elif LA95 == 66: LA95_52 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 72: + elif LA95 == 76: LA95_53 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 28 or LA95 == 79 or LA95 == 80 or LA95 == 81 or LA95 == 82 or LA95 == 83 or LA95 == 84 or LA95 == 85 or LA95 == 86 or LA95 == 87 or LA95 == 88: + elif LA95 == 72: LA95_54 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == STRING_LITERAL: + elif LA95 == 73: LA95_55 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == IDENTIFIER: + elif LA95 == 70: LA95_56 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 69: + elif LA95 == 71: LA95_57 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 70: + elif LA95 == 68: LA95_58 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 67: + elif LA95 == 69: LA95_59 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 68: + elif LA95 == 101 or LA95 == 102: LA95_60 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 100 or LA95 == 101: + elif LA95 == 97 or LA95 == 98 or LA95 == 99 or LA95 == 100: LA95_61 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 96 or LA95 == 97 or LA95 == 98 or LA95 == 99: + elif LA95 == 95 or LA95 == 96: LA95_62 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 94 or LA95 == 95: + elif LA95 == 77: LA95_63 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 76: + elif LA95 == 94: LA95_64 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 elif LA95 == 93: LA95_65 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 elif LA95 == 92: LA95_66 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 elif LA95 == 91: LA95_67 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 elif LA95 == 90: LA95_68 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 89: + elif LA95 == 27: LA95_69 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 27: - LA95_70 = self.input.LA(3) + elif LA95 == 28 or LA95 == 80 or LA95 == 81 or LA95 == 82 or LA95 == 83 or LA95 == 84 or LA95 == 85 or LA95 == 86 or LA95 == 87 or LA95 == 88 or LA95 == 89: + LA95_88 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 elif LA95 == HEX_LITERAL: LA95 = self.input.LA(2) - if LA95 == 63: + if LA95 == 64: LA95_89 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 61: + elif LA95 == 62: LA95_90 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 74: + elif LA95 == 75: LA95_91 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 65: + elif LA95 == 66: LA95_92 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 75: + elif LA95 == 76: LA95_93 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 71: + elif LA95 == 72: LA95_94 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 72: + elif LA95 == 73: LA95_95 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 69: + elif LA95 == 28 or LA95 == 80 or LA95 == 81 or LA95 == 82 or LA95 == 83 or LA95 == 84 or LA95 == 85 or LA95 == 86 or LA95 == 87 or LA95 == 88 or LA95 == 89: LA95_96 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 elif LA95 == 70: LA95_97 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 67: + elif LA95 == 71: LA95_98 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 elif LA95 == 68: LA95_99 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 100 or LA95 == 101: + elif LA95 == 69: LA95_100 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 96 or LA95 == 97 or LA95 == 98 or LA95 == 99: + elif LA95 == 101 or LA95 == 102: LA95_101 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 94 or LA95 == 95: + elif LA95 == 97 or LA95 == 98 or LA95 == 99 or LA95 == 100: LA95_102 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 76: + elif LA95 == 95 or LA95 == 96: LA95_103 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 93: + elif LA95 == 77: LA95_104 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 92: + elif LA95 == 94: LA95_105 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 91: + elif LA95 == 93: LA95_106 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 90: + elif LA95 == 92: LA95_107 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 89: + elif LA95 == 91: LA95_108 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 27: + elif LA95 == 90: LA95_109 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 25: - alt95 = 1 - elif LA95 == 28 or LA95 == 79 or LA95 == 80 or LA95 == 81 or LA95 == 82 or LA95 == 83 or LA95 == 84 or LA95 == 85 or LA95 == 86 or LA95 == 87 or LA95 == 88: - LA95_112 = self.input.LA(3) + elif LA95 == 27: + LA95_110 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 + elif LA95 == 25: + alt95 = 1 elif LA95 == OCTAL_LITERAL: LA95 = self.input.LA(2) - if LA95 == 63: + if LA95 == 64: LA95_113 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 61: + elif LA95 == 62: LA95_114 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 74: + elif LA95 == 75: LA95_115 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 65: + elif LA95 == 66: LA95_116 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 75: + elif LA95 == 76: LA95_117 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 71: + elif LA95 == 72: LA95_118 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 72: + elif LA95 == 73: LA95_119 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 28 or LA95 == 79 or LA95 == 80 or LA95 == 81 or LA95 == 82 or LA95 == 83 or LA95 == 84 or LA95 == 85 or LA95 == 86 or LA95 == 87 or LA95 == 88: + elif LA95 == 70: LA95_120 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 69: + elif LA95 == 71: LA95_121 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 70: + elif LA95 == 68: LA95_122 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 67: + elif LA95 == 69: LA95_123 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 68: + elif LA95 == 101 or LA95 == 102: LA95_124 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 100 or LA95 == 101: + elif LA95 == 97 or LA95 == 98 or LA95 == 99 or LA95 == 100: LA95_125 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 96 or LA95 == 97 or LA95 == 98 or LA95 == 99: + elif LA95 == 95 or LA95 == 96: LA95_126 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 94 or LA95 == 95: + elif LA95 == 77: LA95_127 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 76: + elif LA95 == 94: LA95_128 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 elif LA95 == 93: LA95_129 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 elif LA95 == 92: LA95_130 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 elif LA95 == 91: LA95_131 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 elif LA95 == 90: LA95_132 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 89: + elif LA95 == 27: LA95_133 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 27: - LA95_134 = self.input.LA(3) + elif LA95 == 28 or LA95 == 80 or LA95 == 81 or LA95 == 82 or LA95 == 83 or LA95 == 84 or LA95 == 85 or LA95 == 86 or LA95 == 87 or LA95 == 88 or LA95 == 89: + LA95_135 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 @@ -15042,157 +15061,157 @@ class CParser(Parser): elif LA95 == DECIMAL_LITERAL: LA95 = self.input.LA(2) - if LA95 == 63: + if LA95 == 64: LA95_137 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 61: + elif LA95 == 62: LA95_138 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 74: + elif LA95 == 75: LA95_139 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 65: + elif LA95 == 66: LA95_140 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 75: + elif LA95 == 76: LA95_141 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 71: + elif LA95 == 72: LA95_142 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 72: + elif LA95 == 73: LA95_143 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 28 or LA95 == 79 or LA95 == 80 or LA95 == 81 or LA95 == 82 or LA95 == 83 or LA95 == 84 or LA95 == 85 or LA95 == 86 or LA95 == 87 or LA95 == 88: + elif LA95 == 28 or LA95 == 80 or LA95 == 81 or LA95 == 82 or LA95 == 83 or LA95 == 84 or LA95 == 85 or LA95 == 86 or LA95 == 87 or LA95 == 88 or LA95 == 89: LA95_144 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 69: + elif LA95 == 70: LA95_145 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 70: + elif LA95 == 71: LA95_146 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 67: + elif LA95 == 68: LA95_147 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 68: + elif LA95 == 69: LA95_148 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 100 or LA95 == 101: + elif LA95 == 101 or LA95 == 102: LA95_149 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 96 or LA95 == 97 or LA95 == 98 or LA95 == 99: + elif LA95 == 97 or LA95 == 98 or LA95 == 99 or LA95 == 100: LA95_150 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 94 or LA95 == 95: + elif LA95 == 95 or LA95 == 96: LA95_151 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 76: + elif LA95 == 77: LA95_152 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 93: + elif LA95 == 94: LA95_153 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 92: + elif LA95 == 93: LA95_154 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 91: + elif LA95 == 92: LA95_155 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 90: + elif LA95 == 91: LA95_156 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 89: + elif LA95 == 90: LA95_157 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 elif LA95 == 27: LA95_158 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 @@ -15201,157 +15220,157 @@ class CParser(Parser): elif LA95 == CHARACTER_LITERAL: LA95 = self.input.LA(2) - if LA95 == 63: + if LA95 == 64: LA95_161 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 61: + elif LA95 == 62: LA95_162 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 74: + elif LA95 == 75: LA95_163 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 65: + elif LA95 == 66: LA95_164 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 75: + elif LA95 == 76: LA95_165 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 71: + elif LA95 == 72: LA95_166 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 72: + elif LA95 == 73: LA95_167 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 28 or LA95 == 79 or LA95 == 80 or LA95 == 81 or LA95 == 82 or LA95 == 83 or LA95 == 84 or LA95 == 85 or LA95 == 86 or LA95 == 87 or LA95 == 88: + elif LA95 == 28 or LA95 == 80 or LA95 == 81 or LA95 == 82 or LA95 == 83 or LA95 == 84 or LA95 == 85 or LA95 == 86 or LA95 == 87 or LA95 == 88 or LA95 == 89: LA95_168 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 69: + elif LA95 == 70: LA95_169 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 70: + elif LA95 == 71: LA95_170 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 67: + elif LA95 == 68: LA95_171 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 68: + elif LA95 == 69: LA95_172 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 100 or LA95 == 101: + elif LA95 == 101 or LA95 == 102: LA95_173 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 96 or LA95 == 97 or LA95 == 98 or LA95 == 99: + elif LA95 == 97 or LA95 == 98 or LA95 == 99 or LA95 == 100: LA95_174 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 94 or LA95 == 95: + elif LA95 == 95 or LA95 == 96: LA95_175 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 76: + elif LA95 == 77: LA95_176 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 93: + elif LA95 == 94: LA95_177 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 92: + elif LA95 == 93: LA95_178 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 91: + elif LA95 == 92: LA95_179 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 90: + elif LA95 == 91: LA95_180 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 89: + elif LA95 == 90: LA95_181 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 elif LA95 == 27: LA95_182 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 @@ -15363,154 +15382,154 @@ class CParser(Parser): if LA95 == IDENTIFIER: LA95_185 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 63: + elif LA95 == 64: LA95_186 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 61: + elif LA95 == 62: LA95_187 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 74: + elif LA95 == 75: LA95_188 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 65: + elif LA95 == 66: LA95_189 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 75: + elif LA95 == 76: LA95_190 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 71: + elif LA95 == 72: LA95_191 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 72: + elif LA95 == 73: LA95_192 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 69: + elif LA95 == 70: LA95_193 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 70: + elif LA95 == 71: LA95_194 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 67: + elif LA95 == 68: LA95_195 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 68: + elif LA95 == 69: LA95_196 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 100 or LA95 == 101: + elif LA95 == 101 or LA95 == 102: LA95_197 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 96 or LA95 == 97 or LA95 == 98 or LA95 == 99: + elif LA95 == 97 or LA95 == 98 or LA95 == 99 or LA95 == 100: LA95_198 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 94 or LA95 == 95: + elif LA95 == 95 or LA95 == 96: LA95_199 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 76: + elif LA95 == 77: LA95_200 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 93: + elif LA95 == 94: LA95_201 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 92: + elif LA95 == 93: LA95_202 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 91: + elif LA95 == 92: LA95_203 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 90: + elif LA95 == 91: LA95_204 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 89: + elif LA95 == 90: LA95_205 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 elif LA95 == 27: LA95_206 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 @@ -15519,702 +15538,702 @@ class CParser(Parser): elif LA95 == STRING_LITERAL: LA95_208 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 28 or LA95 == 79 or LA95 == 80 or LA95 == 81 or LA95 == 82 or LA95 == 83 or LA95 == 84 or LA95 == 85 or LA95 == 86 or LA95 == 87 or LA95 == 88: - LA95_210 = self.input.LA(3) + elif LA95 == 28 or LA95 == 80 or LA95 == 81 or LA95 == 82 or LA95 == 83 or LA95 == 84 or LA95 == 85 or LA95 == 86 or LA95 == 87 or LA95 == 88 or LA95 == 89: + LA95_209 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 elif LA95 == FLOATING_POINT_LITERAL: LA95 = self.input.LA(2) - if LA95 == 63: + if LA95 == 64: LA95_211 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 61: + elif LA95 == 62: LA95_212 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 74: + elif LA95 == 75: LA95_213 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 65: + elif LA95 == 66: LA95_214 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 75: + elif LA95 == 76: LA95_215 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 71: + elif LA95 == 72: LA95_216 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 72: + elif LA95 == 73: LA95_217 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 69: + elif LA95 == 70: LA95_218 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 70: + elif LA95 == 71: LA95_219 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 67: + elif LA95 == 68: LA95_220 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 68: + elif LA95 == 69: LA95_221 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 100 or LA95 == 101: + elif LA95 == 101 or LA95 == 102: LA95_222 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 96 or LA95 == 97 or LA95 == 98 or LA95 == 99: + elif LA95 == 97 or LA95 == 98 or LA95 == 99 or LA95 == 100: LA95_223 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 94 or LA95 == 95: + elif LA95 == 95 or LA95 == 96: LA95_224 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 76: + elif LA95 == 77: LA95_225 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 93: + elif LA95 == 94: LA95_226 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 92: + elif LA95 == 93: LA95_227 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 91: + elif LA95 == 92: LA95_228 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 90: + elif LA95 == 91: LA95_229 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 89: + elif LA95 == 90: LA95_230 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 elif LA95 == 27: LA95_231 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 28 or LA95 == 79 or LA95 == 80 or LA95 == 81 or LA95 == 82 or LA95 == 83 or LA95 == 84 or LA95 == 85 or LA95 == 86 or LA95 == 87 or LA95 == 88: - LA95_233 = self.input.LA(3) + elif LA95 == 25: + alt95 = 1 + elif LA95 == 28 or LA95 == 80 or LA95 == 81 or LA95 == 82 or LA95 == 83 or LA95 == 84 or LA95 == 85 or LA95 == 86 or LA95 == 87 or LA95 == 88 or LA95 == 89: + LA95_234 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 25: - alt95 = 1 - elif LA95 == 61: + elif LA95 == 62: LA95 = self.input.LA(2) if LA95 == IDENTIFIER: LA95_235 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 elif LA95 == HEX_LITERAL: LA95_236 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 elif LA95 == OCTAL_LITERAL: LA95_237 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 elif LA95 == DECIMAL_LITERAL: LA95_238 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 elif LA95 == CHARACTER_LITERAL: LA95_239 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 elif LA95 == STRING_LITERAL: LA95_240 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 elif LA95 == FLOATING_POINT_LITERAL: LA95_241 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 61: + elif LA95 == 62: LA95_242 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 71: + elif LA95 == 72: LA95_243 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 72: + elif LA95 == 73: LA95_244 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 65 or LA95 == 67 or LA95 == 68 or LA95 == 76 or LA95 == 77 or LA95 == 78: + elif LA95 == 66 or LA95 == 68 or LA95 == 69 or LA95 == 77 or LA95 == 78 or LA95 == 79: LA95_245 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 73: + elif LA95 == 74: LA95_246 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 49 or LA95 == 50 or LA95 == 51 or LA95 == 52 or LA95 == 53 or LA95 == 54 or LA95 == 55 or LA95 == 56 or LA95 == 57 or LA95 == 58 or LA95 == 59 or LA95 == 60: + elif LA95 == 49 or LA95 == 50 or LA95 == 51 or LA95 == 52 or LA95 == 53 or LA95 == 54 or LA95 == 55 or LA95 == 56 or LA95 == 57 or LA95 == 58 or LA95 == 59 or LA95 == 60 or LA95 == 61: LA95_247 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 elif LA95 == 34: LA95_248 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 elif LA95 == 35: LA95_249 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 elif LA95 == 36: LA95_250 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 elif LA95 == 37: LA95_251 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 elif LA95 == 38: LA95_252 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 elif LA95 == 39: LA95_253 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 elif LA95 == 40: LA95_254 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 elif LA95 == 41: LA95_255 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 elif LA95 == 42: LA95_256 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 elif LA95 == 45 or LA95 == 46: LA95_257 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 elif LA95 == 48: LA95_258 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 71: + elif LA95 == 72: LA95 = self.input.LA(2) if LA95 == IDENTIFIER: LA95_259 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 elif LA95 == HEX_LITERAL: LA95_260 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 elif LA95 == OCTAL_LITERAL: LA95_261 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 elif LA95 == DECIMAL_LITERAL: LA95_262 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 elif LA95 == CHARACTER_LITERAL: LA95_263 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 elif LA95 == STRING_LITERAL: LA95_264 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 elif LA95 == FLOATING_POINT_LITERAL: LA95_265 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 61: + elif LA95 == 62: LA95_266 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 71: + elif LA95 == 72: LA95_267 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 72: + elif LA95 == 73: LA95_268 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 65 or LA95 == 67 or LA95 == 68 or LA95 == 76 or LA95 == 77 or LA95 == 78: + elif LA95 == 66 or LA95 == 68 or LA95 == 69 or LA95 == 77 or LA95 == 78 or LA95 == 79: LA95_269 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 73: + elif LA95 == 74: LA95_270 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 72: + elif LA95 == 73: LA95 = self.input.LA(2) if LA95 == IDENTIFIER: LA95_271 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 elif LA95 == HEX_LITERAL: LA95_272 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 elif LA95 == OCTAL_LITERAL: LA95_273 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 elif LA95 == DECIMAL_LITERAL: LA95_274 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 elif LA95 == CHARACTER_LITERAL: LA95_275 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 elif LA95 == STRING_LITERAL: LA95_276 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 elif LA95 == FLOATING_POINT_LITERAL: LA95_277 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 61: + elif LA95 == 62: LA95_278 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 71: + elif LA95 == 72: LA95_279 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 72: + elif LA95 == 73: LA95_280 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 65 or LA95 == 67 or LA95 == 68 or LA95 == 76 or LA95 == 77 or LA95 == 78: + elif LA95 == 66 or LA95 == 68 or LA95 == 69 or LA95 == 77 or LA95 == 78 or LA95 == 79: LA95_281 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 73: + elif LA95 == 74: LA95_282 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 65 or LA95 == 67 or LA95 == 68 or LA95 == 76 or LA95 == 77 or LA95 == 78: + elif LA95 == 66 or LA95 == 68 or LA95 == 69 or LA95 == 77 or LA95 == 78 or LA95 == 79: LA95 = self.input.LA(2) - if LA95 == 61: + if LA95 == 62: LA95_283 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 elif LA95 == IDENTIFIER: LA95_284 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 elif LA95 == HEX_LITERAL: LA95_285 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 elif LA95 == OCTAL_LITERAL: LA95_286 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 elif LA95 == DECIMAL_LITERAL: LA95_287 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 elif LA95 == CHARACTER_LITERAL: LA95_288 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 elif LA95 == STRING_LITERAL: LA95_289 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 elif LA95 == FLOATING_POINT_LITERAL: LA95_290 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 71: + elif LA95 == 72: LA95_291 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 72: + elif LA95 == 73: LA95_292 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 65 or LA95 == 67 or LA95 == 68 or LA95 == 76 or LA95 == 77 or LA95 == 78: + elif LA95 == 66 or LA95 == 68 or LA95 == 69 or LA95 == 77 or LA95 == 78 or LA95 == 79: LA95_293 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 73: + elif LA95 == 74: LA95_294 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 73: + elif LA95 == 74: LA95 = self.input.LA(2) - if LA95 == 61: + if LA95 == 62: LA95_295 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 elif LA95 == IDENTIFIER: LA95_296 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 elif LA95 == HEX_LITERAL: LA95_297 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 elif LA95 == OCTAL_LITERAL: LA95_298 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 elif LA95 == DECIMAL_LITERAL: LA95_299 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 elif LA95 == CHARACTER_LITERAL: LA95_300 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 elif LA95 == STRING_LITERAL: LA95_301 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 elif LA95 == FLOATING_POINT_LITERAL: LA95_302 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 71: + elif LA95 == 72: LA95_303 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 72: + elif LA95 == 73: LA95_304 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 65 or LA95 == 67 or LA95 == 68 or LA95 == 76 or LA95 == 77 or LA95 == 78: + elif LA95 == 66 or LA95 == 68 or LA95 == 69 or LA95 == 77 or LA95 == 78 or LA95 == 79: LA95_305 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 73: + elif LA95 == 74: LA95_306 = self.input.LA(3) - if (self.synpred187()) : + if (self.synpred188()) : alt95 = 1 - elif LA95 == 25 or LA95 == 26 or LA95 == 29 or LA95 == 30 or LA95 == 31 or LA95 == 32 or LA95 == 33 or LA95 == 34 or LA95 == 35 or LA95 == 36 or LA95 == 37 or LA95 == 38 or LA95 == 39 or LA95 == 40 or LA95 == 41 or LA95 == 42 or LA95 == 43 or LA95 == 45 or LA95 == 46 or LA95 == 48 or LA95 == 49 or LA95 == 50 or LA95 == 51 or LA95 == 52 or LA95 == 53 or LA95 == 54 or LA95 == 55 or LA95 == 56 or LA95 == 57 or LA95 == 58 or LA95 == 59 or LA95 == 60 or LA95 == 102 or LA95 == 103 or LA95 == 104 or LA95 == 105 or LA95 == 106 or LA95 == 107 or LA95 == 109 or LA95 == 110 or LA95 == 111 or LA95 == 112 or LA95 == 113 or LA95 == 114 or LA95 == 115 or LA95 == 116: + elif LA95 == 25 or LA95 == 26 or LA95 == 29 or LA95 == 30 or LA95 == 31 or LA95 == 32 or LA95 == 33 or LA95 == 34 or LA95 == 35 or LA95 == 36 or LA95 == 37 or LA95 == 38 or LA95 == 39 or LA95 == 40 or LA95 == 41 or LA95 == 42 or LA95 == 43 or LA95 == 45 or LA95 == 46 or LA95 == 48 or LA95 == 49 or LA95 == 50 or LA95 == 51 or LA95 == 52 or LA95 == 53 or LA95 == 54 or LA95 == 55 or LA95 == 56 or LA95 == 57 or LA95 == 58 or LA95 == 59 or LA95 == 60 or LA95 == 61 or LA95 == 103 or LA95 == 104 or LA95 == 105 or LA95 == 106 or LA95 == 107 or LA95 == 108 or LA95 == 110 or LA95 == 111 or LA95 == 112 or LA95 == 113 or LA95 == 114 or LA95 == 115 or LA95 == 116 or LA95 == 117: alt95 = 1 if alt95 == 1: # C.g:0:0: statement - self.following.append(self.FOLLOW_statement_in_statement_list2227) + self.following.append(self.FOLLOW_statement_in_statement_list2242) self.statement() self.following.pop() if self.failed: @@ -16260,7 +16279,7 @@ class CParser(Parser): # $ANTLR start expression_statement - # C.g:508:1: expression_statement : ( ';' | expression ';' ); + # C.g:561:1: expression_statement : ( ';' | expression ';' ); def expression_statement(self, ): retval = self.expression_statement_return() @@ -16271,38 +16290,38 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 68): return retval - # C.g:509:2: ( ';' | expression ';' ) + # C.g:562:2: ( ';' | expression ';' ) alt96 = 2 LA96_0 = self.input.LA(1) if (LA96_0 == 25) : alt96 = 1 - elif ((IDENTIFIER <= LA96_0 <= FLOATING_POINT_LITERAL) or LA96_0 == 61 or LA96_0 == 65 or (67 <= LA96_0 <= 68) or (71 <= LA96_0 <= 73) or (76 <= LA96_0 <= 78)) : + elif ((IDENTIFIER <= LA96_0 <= FLOATING_POINT_LITERAL) or LA96_0 == 62 or LA96_0 == 66 or (68 <= LA96_0 <= 69) or (72 <= LA96_0 <= 74) or (77 <= LA96_0 <= 79)) : alt96 = 2 else: if self.backtracking > 0: self.failed = True return retval - nvae = NoViableAltException("508:1: expression_statement : ( ';' | expression ';' );", 96, 0, self.input) + nvae = NoViableAltException("561:1: expression_statement : ( ';' | expression ';' );", 96, 0, self.input) raise nvae if alt96 == 1: - # C.g:509:4: ';' - self.match(self.input, 25, self.FOLLOW_25_in_expression_statement2239) + # C.g:562:4: ';' + self.match(self.input, 25, self.FOLLOW_25_in_expression_statement2254) if self.failed: return retval elif alt96 == 2: - # C.g:510:4: expression ';' - self.following.append(self.FOLLOW_expression_in_expression_statement2244) + # C.g:563:4: expression ';' + self.following.append(self.FOLLOW_expression_in_expression_statement2259) self.expression() self.following.pop() if self.failed: return retval - self.match(self.input, 25, self.FOLLOW_25_in_expression_statement2246) + self.match(self.input, 25, self.FOLLOW_25_in_expression_statement2261) if self.failed: return retval @@ -16325,7 +16344,7 @@ class CParser(Parser): # $ANTLR start selection_statement - # C.g:513:1: selection_statement : ( 'if' '(' e= expression ')' statement ( options {k=1; backtrack=false; } : 'else' statement )? | 'switch' '(' expression ')' statement ); + # C.g:566:1: selection_statement : ( 'if' '(' e= expression ')' statement ( options {k=1; backtrack=false; } : 'else' statement )? | 'switch' '(' expression ')' statement ); def selection_statement(self, ): selection_statement_StartIndex = self.input.index() @@ -16337,59 +16356,59 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 69): return - # C.g:514:2: ( 'if' '(' e= expression ')' statement ( options {k=1; backtrack=false; } : 'else' statement )? | 'switch' '(' expression ')' statement ) + # C.g:567:2: ( 'if' '(' e= expression ')' statement ( options {k=1; backtrack=false; } : 'else' statement )? | 'switch' '(' expression ')' statement ) alt98 = 2 LA98_0 = self.input.LA(1) - if (LA98_0 == 107) : + if (LA98_0 == 108) : alt98 = 1 - elif (LA98_0 == 109) : + elif (LA98_0 == 110) : alt98 = 2 else: if self.backtracking > 0: self.failed = True return - nvae = NoViableAltException("513:1: selection_statement : ( 'if' '(' e= expression ')' statement ( options {k=1; backtrack=false; } : 'else' statement )? | 'switch' '(' expression ')' statement );", 98, 0, self.input) + nvae = NoViableAltException("566:1: selection_statement : ( 'if' '(' e= expression ')' statement ( options {k=1; backtrack=false; } : 'else' statement )? | 'switch' '(' expression ')' statement );", 98, 0, self.input) raise nvae if alt98 == 1: - # C.g:514:4: 'if' '(' e= expression ')' statement ( options {k=1; backtrack=false; } : 'else' statement )? - self.match(self.input, 107, self.FOLLOW_107_in_selection_statement2257) + # C.g:567:4: 'if' '(' e= expression ')' statement ( options {k=1; backtrack=false; } : 'else' statement )? + self.match(self.input, 108, self.FOLLOW_108_in_selection_statement2272) if self.failed: return - self.match(self.input, 61, self.FOLLOW_61_in_selection_statement2259) + self.match(self.input, 62, self.FOLLOW_62_in_selection_statement2274) if self.failed: return - self.following.append(self.FOLLOW_expression_in_selection_statement2263) + self.following.append(self.FOLLOW_expression_in_selection_statement2278) e = self.expression() self.following.pop() if self.failed: return - self.match(self.input, 62, self.FOLLOW_62_in_selection_statement2265) + self.match(self.input, 63, self.FOLLOW_63_in_selection_statement2280) if self.failed: return if self.backtracking == 0: self.StorePredicateExpression(e.start.line, e.start.charPositionInLine, e.stop.line, e.stop.charPositionInLine, self.input.toString(e.start,e.stop)) - self.following.append(self.FOLLOW_statement_in_selection_statement2269) + self.following.append(self.FOLLOW_statement_in_selection_statement2284) self.statement() self.following.pop() if self.failed: return - # C.g:514:167: ( options {k=1; backtrack=false; } : 'else' statement )? + # C.g:567:167: ( options {k=1; backtrack=false; } : 'else' statement )? alt97 = 2 LA97_0 = self.input.LA(1) - if (LA97_0 == 108) : + if (LA97_0 == 109) : alt97 = 1 if alt97 == 1: - # C.g:514:200: 'else' statement - self.match(self.input, 108, self.FOLLOW_108_in_selection_statement2284) + # C.g:567:200: 'else' statement + self.match(self.input, 109, self.FOLLOW_109_in_selection_statement2299) if self.failed: return - self.following.append(self.FOLLOW_statement_in_selection_statement2286) + self.following.append(self.FOLLOW_statement_in_selection_statement2301) self.statement() self.following.pop() if self.failed: @@ -16400,22 +16419,22 @@ class CParser(Parser): elif alt98 == 2: - # C.g:515:4: 'switch' '(' expression ')' statement - self.match(self.input, 109, self.FOLLOW_109_in_selection_statement2293) + # C.g:568:4: 'switch' '(' expression ')' statement + self.match(self.input, 110, self.FOLLOW_110_in_selection_statement2308) if self.failed: return - self.match(self.input, 61, self.FOLLOW_61_in_selection_statement2295) + self.match(self.input, 62, self.FOLLOW_62_in_selection_statement2310) if self.failed: return - self.following.append(self.FOLLOW_expression_in_selection_statement2297) + self.following.append(self.FOLLOW_expression_in_selection_statement2312) self.expression() self.following.pop() if self.failed: return - self.match(self.input, 62, self.FOLLOW_62_in_selection_statement2299) + self.match(self.input, 63, self.FOLLOW_63_in_selection_statement2314) if self.failed: return - self.following.append(self.FOLLOW_statement_in_selection_statement2301) + self.following.append(self.FOLLOW_statement_in_selection_statement2316) self.statement() self.following.pop() if self.failed: @@ -16438,7 +16457,7 @@ class CParser(Parser): # $ANTLR start iteration_statement - # C.g:518:1: iteration_statement : ( 'while' '(' e= expression ')' statement | 'do' statement 'while' '(' e= expression ')' ';' | 'for' '(' expression_statement e= expression_statement ( expression )? ')' statement ); + # C.g:571:1: iteration_statement : ( 'while' '(' e= expression ')' statement | 'do' statement 'while' '(' e= expression ')' ';' | 'for' '(' expression_statement e= expression_statement ( expression )? ')' statement ); def iteration_statement(self, ): iteration_statement_StartIndex = self.input.index() @@ -16450,41 +16469,41 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 70): return - # C.g:519:2: ( 'while' '(' e= expression ')' statement | 'do' statement 'while' '(' e= expression ')' ';' | 'for' '(' expression_statement e= expression_statement ( expression )? ')' statement ) + # C.g:572:2: ( 'while' '(' e= expression ')' statement | 'do' statement 'while' '(' e= expression ')' ';' | 'for' '(' expression_statement e= expression_statement ( expression )? ')' statement ) alt100 = 3 LA100 = self.input.LA(1) - if LA100 == 110: + if LA100 == 111: alt100 = 1 - elif LA100 == 111: - alt100 = 2 elif LA100 == 112: + alt100 = 2 + elif LA100 == 113: alt100 = 3 else: if self.backtracking > 0: self.failed = True return - nvae = NoViableAltException("518:1: iteration_statement : ( 'while' '(' e= expression ')' statement | 'do' statement 'while' '(' e= expression ')' ';' | 'for' '(' expression_statement e= expression_statement ( expression )? ')' statement );", 100, 0, self.input) + nvae = NoViableAltException("571:1: iteration_statement : ( 'while' '(' e= expression ')' statement | 'do' statement 'while' '(' e= expression ')' ';' | 'for' '(' expression_statement e= expression_statement ( expression )? ')' statement );", 100, 0, self.input) raise nvae if alt100 == 1: - # C.g:519:4: 'while' '(' e= expression ')' statement - self.match(self.input, 110, self.FOLLOW_110_in_iteration_statement2312) + # C.g:572:4: 'while' '(' e= expression ')' statement + self.match(self.input, 111, self.FOLLOW_111_in_iteration_statement2327) if self.failed: return - self.match(self.input, 61, self.FOLLOW_61_in_iteration_statement2314) + self.match(self.input, 62, self.FOLLOW_62_in_iteration_statement2329) if self.failed: return - self.following.append(self.FOLLOW_expression_in_iteration_statement2318) + self.following.append(self.FOLLOW_expression_in_iteration_statement2333) e = self.expression() self.following.pop() if self.failed: return - self.match(self.input, 62, self.FOLLOW_62_in_iteration_statement2320) + self.match(self.input, 63, self.FOLLOW_63_in_iteration_statement2335) if self.failed: return - self.following.append(self.FOLLOW_statement_in_iteration_statement2322) + self.following.append(self.FOLLOW_statement_in_iteration_statement2337) self.statement() self.following.pop() if self.failed: @@ -16495,30 +16514,30 @@ class CParser(Parser): elif alt100 == 2: - # C.g:520:4: 'do' statement 'while' '(' e= expression ')' ';' - self.match(self.input, 111, self.FOLLOW_111_in_iteration_statement2329) + # C.g:573:4: 'do' statement 'while' '(' e= expression ')' ';' + self.match(self.input, 112, self.FOLLOW_112_in_iteration_statement2344) if self.failed: return - self.following.append(self.FOLLOW_statement_in_iteration_statement2331) + self.following.append(self.FOLLOW_statement_in_iteration_statement2346) self.statement() self.following.pop() if self.failed: return - self.match(self.input, 110, self.FOLLOW_110_in_iteration_statement2333) + self.match(self.input, 111, self.FOLLOW_111_in_iteration_statement2348) if self.failed: return - self.match(self.input, 61, self.FOLLOW_61_in_iteration_statement2335) + self.match(self.input, 62, self.FOLLOW_62_in_iteration_statement2350) if self.failed: return - self.following.append(self.FOLLOW_expression_in_iteration_statement2339) + self.following.append(self.FOLLOW_expression_in_iteration_statement2354) e = self.expression() self.following.pop() if self.failed: return - self.match(self.input, 62, self.FOLLOW_62_in_iteration_statement2341) + self.match(self.input, 63, self.FOLLOW_63_in_iteration_statement2356) if self.failed: return - self.match(self.input, 25, self.FOLLOW_25_in_iteration_statement2343) + self.match(self.input, 25, self.FOLLOW_25_in_iteration_statement2358) if self.failed: return if self.backtracking == 0: @@ -16527,32 +16546,32 @@ class CParser(Parser): elif alt100 == 3: - # C.g:521:4: 'for' '(' expression_statement e= expression_statement ( expression )? ')' statement - self.match(self.input, 112, self.FOLLOW_112_in_iteration_statement2350) + # C.g:574:4: 'for' '(' expression_statement e= expression_statement ( expression )? ')' statement + self.match(self.input, 113, self.FOLLOW_113_in_iteration_statement2365) if self.failed: return - self.match(self.input, 61, self.FOLLOW_61_in_iteration_statement2352) + self.match(self.input, 62, self.FOLLOW_62_in_iteration_statement2367) if self.failed: return - self.following.append(self.FOLLOW_expression_statement_in_iteration_statement2354) + self.following.append(self.FOLLOW_expression_statement_in_iteration_statement2369) self.expression_statement() self.following.pop() if self.failed: return - self.following.append(self.FOLLOW_expression_statement_in_iteration_statement2358) + self.following.append(self.FOLLOW_expression_statement_in_iteration_statement2373) e = self.expression_statement() self.following.pop() if self.failed: return - # C.g:521:58: ( expression )? + # C.g:574:58: ( expression )? alt99 = 2 LA99_0 = self.input.LA(1) - if ((IDENTIFIER <= LA99_0 <= FLOATING_POINT_LITERAL) or LA99_0 == 61 or LA99_0 == 65 or (67 <= LA99_0 <= 68) or (71 <= LA99_0 <= 73) or (76 <= LA99_0 <= 78)) : + if ((IDENTIFIER <= LA99_0 <= FLOATING_POINT_LITERAL) or LA99_0 == 62 or LA99_0 == 66 or (68 <= LA99_0 <= 69) or (72 <= LA99_0 <= 74) or (77 <= LA99_0 <= 79)) : alt99 = 1 if alt99 == 1: # C.g:0:0: expression - self.following.append(self.FOLLOW_expression_in_iteration_statement2360) + self.following.append(self.FOLLOW_expression_in_iteration_statement2375) self.expression() self.following.pop() if self.failed: @@ -16560,10 +16579,10 @@ class CParser(Parser): - self.match(self.input, 62, self.FOLLOW_62_in_iteration_statement2363) + self.match(self.input, 63, self.FOLLOW_63_in_iteration_statement2378) if self.failed: return - self.following.append(self.FOLLOW_statement_in_iteration_statement2365) + self.following.append(self.FOLLOW_statement_in_iteration_statement2380) self.statement() self.following.pop() if self.failed: @@ -16589,7 +16608,7 @@ class CParser(Parser): # $ANTLR start jump_statement - # C.g:524:1: jump_statement : ( 'goto' IDENTIFIER ';' | 'continue' ';' | 'break' ';' | 'return' ';' | 'return' expression ';' ); + # C.g:577:1: jump_statement : ( 'goto' IDENTIFIER ';' | 'continue' ';' | 'break' ';' | 'return' ';' | 'return' expression ';' ); def jump_statement(self, ): jump_statement_StartIndex = self.input.index() @@ -16598,28 +16617,28 @@ class CParser(Parser): if self.backtracking > 0 and self.alreadyParsedRule(self.input, 71): return - # C.g:525:2: ( 'goto' IDENTIFIER ';' | 'continue' ';' | 'break' ';' | 'return' ';' | 'return' expression ';' ) + # C.g:578:2: ( 'goto' IDENTIFIER ';' | 'continue' ';' | 'break' ';' | 'return' ';' | 'return' expression ';' ) alt101 = 5 LA101 = self.input.LA(1) - if LA101 == 113: + if LA101 == 114: alt101 = 1 - elif LA101 == 114: - alt101 = 2 elif LA101 == 115: - alt101 = 3 + alt101 = 2 elif LA101 == 116: + alt101 = 3 + elif LA101 == 117: LA101_4 = self.input.LA(2) if (LA101_4 == 25) : alt101 = 4 - elif ((IDENTIFIER <= LA101_4 <= FLOATING_POINT_LITERAL) or LA101_4 == 61 or LA101_4 == 65 or (67 <= LA101_4 <= 68) or (71 <= LA101_4 <= 73) or (76 <= LA101_4 <= 78)) : + elif ((IDENTIFIER <= LA101_4 <= FLOATING_POINT_LITERAL) or LA101_4 == 62 or LA101_4 == 66 or (68 <= LA101_4 <= 69) or (72 <= LA101_4 <= 74) or (77 <= LA101_4 <= 79)) : alt101 = 5 else: if self.backtracking > 0: self.failed = True return - nvae = NoViableAltException("524:1: jump_statement : ( 'goto' IDENTIFIER ';' | 'continue' ';' | 'break' ';' | 'return' ';' | 'return' expression ';' );", 101, 4, self.input) + nvae = NoViableAltException("577:1: jump_statement : ( 'goto' IDENTIFIER ';' | 'continue' ';' | 'break' ';' | 'return' ';' | 'return' expression ';' );", 101, 4, self.input) raise nvae @@ -16628,64 +16647,64 @@ class CParser(Parser): self.failed = True return - nvae = NoViableAltException("524:1: jump_statement : ( 'goto' IDENTIFIER ';' | 'continue' ';' | 'break' ';' | 'return' ';' | 'return' expression ';' );", 101, 0, self.input) + nvae = NoViableAltException("577:1: jump_statement : ( 'goto' IDENTIFIER ';' | 'continue' ';' | 'break' ';' | 'return' ';' | 'return' expression ';' );", 101, 0, self.input) raise nvae if alt101 == 1: - # C.g:525:4: 'goto' IDENTIFIER ';' - self.match(self.input, 113, self.FOLLOW_113_in_jump_statement2378) + # C.g:578:4: 'goto' IDENTIFIER ';' + self.match(self.input, 114, self.FOLLOW_114_in_jump_statement2393) if self.failed: return - self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_jump_statement2380) + self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_jump_statement2395) if self.failed: return - self.match(self.input, 25, self.FOLLOW_25_in_jump_statement2382) + self.match(self.input, 25, self.FOLLOW_25_in_jump_statement2397) if self.failed: return elif alt101 == 2: - # C.g:526:4: 'continue' ';' - self.match(self.input, 114, self.FOLLOW_114_in_jump_statement2387) + # C.g:579:4: 'continue' ';' + self.match(self.input, 115, self.FOLLOW_115_in_jump_statement2402) if self.failed: return - self.match(self.input, 25, self.FOLLOW_25_in_jump_statement2389) + self.match(self.input, 25, self.FOLLOW_25_in_jump_statement2404) if self.failed: return elif alt101 == 3: - # C.g:527:4: 'break' ';' - self.match(self.input, 115, self.FOLLOW_115_in_jump_statement2394) + # C.g:580:4: 'break' ';' + self.match(self.input, 116, self.FOLLOW_116_in_jump_statement2409) if self.failed: return - self.match(self.input, 25, self.FOLLOW_25_in_jump_statement2396) + self.match(self.input, 25, self.FOLLOW_25_in_jump_statement2411) if self.failed: return elif alt101 == 4: - # C.g:528:4: 'return' ';' - self.match(self.input, 116, self.FOLLOW_116_in_jump_statement2401) + # C.g:581:4: 'return' ';' + self.match(self.input, 117, self.FOLLOW_117_in_jump_statement2416) if self.failed: return - self.match(self.input, 25, self.FOLLOW_25_in_jump_statement2403) + self.match(self.input, 25, self.FOLLOW_25_in_jump_statement2418) if self.failed: return elif alt101 == 5: - # C.g:529:4: 'return' expression ';' - self.match(self.input, 116, self.FOLLOW_116_in_jump_statement2408) + # C.g:582:4: 'return' expression ';' + self.match(self.input, 117, self.FOLLOW_117_in_jump_statement2423) if self.failed: return - self.following.append(self.FOLLOW_expression_in_jump_statement2410) + self.following.append(self.FOLLOW_expression_in_jump_statement2425) self.expression() self.following.pop() if self.failed: return - self.match(self.input, 25, self.FOLLOW_25_in_jump_statement2412) + self.match(self.input, 25, self.FOLLOW_25_in_jump_statement2427) if self.failed: return @@ -16706,9 +16725,9 @@ class CParser(Parser): # $ANTLR start synpred2 def synpred2_fragment(self, ): - # C.g:67:6: ( declaration_specifiers ) - # C.g:67:6: declaration_specifiers - self.following.append(self.FOLLOW_declaration_specifiers_in_synpred290) + # C.g:119:6: ( declaration_specifiers ) + # C.g:119:6: declaration_specifiers + self.following.append(self.FOLLOW_declaration_specifiers_in_synpred2100) self.declaration_specifiers() self.following.pop() if self.failed: @@ -16721,104 +16740,104 @@ class CParser(Parser): # $ANTLR start synpred4 def synpred4_fragment(self, ): - # C.g:67:4: ( ( declaration_specifiers )? declarator ( declaration )* '{' ) - # C.g:67:6: ( declaration_specifiers )? declarator ( declaration )* '{' - # C.g:67:6: ( declaration_specifiers )? + # C.g:119:4: ( ( declaration_specifiers )? declarator ( declaration )* '{' ) + # C.g:119:6: ( declaration_specifiers )? declarator ( declaration )* '{' + # C.g:119:6: ( declaration_specifiers )? alt102 = 2 LA102 = self.input.LA(1) - if LA102 == 29 or LA102 == 30 or LA102 == 31 or LA102 == 32 or LA102 == 33 or LA102 == 34 or LA102 == 35 or LA102 == 36 or LA102 == 37 or LA102 == 38 or LA102 == 39 or LA102 == 40 or LA102 == 41 or LA102 == 42 or LA102 == 45 or LA102 == 46 or LA102 == 48 or LA102 == 49 or LA102 == 50 or LA102 == 51 or LA102 == 52 or LA102 == 53 or LA102 == 54 or LA102 == 55 or LA102 == 56 or LA102 == 57: + if LA102 == 29 or LA102 == 30 or LA102 == 31 or LA102 == 32 or LA102 == 33 or LA102 == 34 or LA102 == 35 or LA102 == 36 or LA102 == 37 or LA102 == 38 or LA102 == 39 or LA102 == 40 or LA102 == 41 or LA102 == 42 or LA102 == 45 or LA102 == 46 or LA102 == 48 or LA102 == 49 or LA102 == 50 or LA102 == 51 or LA102 == 52 or LA102 == 53 or LA102 == 54 or LA102 == 55 or LA102 == 56 or LA102 == 57 or LA102 == 61: alt102 = 1 elif LA102 == IDENTIFIER: LA102 = self.input.LA(2) - if LA102 == 65: - alt102 = 1 - elif LA102 == 58: + if LA102 == 62: LA102_21 = self.input.LA(3) if (self.synpred2()) : alt102 = 1 - elif LA102 == 59: - LA102_22 = self.input.LA(3) - - if (self.synpred2()) : - alt102 = 1 - elif LA102 == 60: + elif LA102 == 29 or LA102 == 30 or LA102 == 31 or LA102 == 32 or LA102 == 33: LA102_23 = self.input.LA(3) if (self.synpred2()) : alt102 = 1 - elif LA102 == IDENTIFIER: + elif LA102 == 34: LA102_24 = self.input.LA(3) if (self.synpred2()) : alt102 = 1 - elif LA102 == 61: + elif LA102 == 35: LA102_25 = self.input.LA(3) if (self.synpred2()) : alt102 = 1 - elif LA102 == 29 or LA102 == 30 or LA102 == 31 or LA102 == 32 or LA102 == 33: + elif LA102 == 36: LA102_26 = self.input.LA(3) if (self.synpred2()) : alt102 = 1 - elif LA102 == 34: + elif LA102 == 37: LA102_27 = self.input.LA(3) if (self.synpred2()) : alt102 = 1 - elif LA102 == 35: + elif LA102 == 38: LA102_28 = self.input.LA(3) if (self.synpred2()) : alt102 = 1 - elif LA102 == 36: + elif LA102 == 39: LA102_29 = self.input.LA(3) if (self.synpred2()) : alt102 = 1 - elif LA102 == 37: + elif LA102 == 40: LA102_30 = self.input.LA(3) if (self.synpred2()) : alt102 = 1 - elif LA102 == 38: + elif LA102 == 41: LA102_31 = self.input.LA(3) if (self.synpred2()) : alt102 = 1 - elif LA102 == 39: + elif LA102 == 42: LA102_32 = self.input.LA(3) if (self.synpred2()) : alt102 = 1 - elif LA102 == 40: + elif LA102 == 45 or LA102 == 46: LA102_33 = self.input.LA(3) if (self.synpred2()) : alt102 = 1 - elif LA102 == 41: + elif LA102 == 48: LA102_34 = self.input.LA(3) if (self.synpred2()) : alt102 = 1 - elif LA102 == 42: + elif LA102 == IDENTIFIER: LA102_35 = self.input.LA(3) if (self.synpred2()) : alt102 = 1 - elif LA102 == 45 or LA102 == 46: + elif LA102 == 58: LA102_36 = self.input.LA(3) if (self.synpred2()) : alt102 = 1 - elif LA102 == 48: - LA102_37 = self.input.LA(3) + elif LA102 == 66: + alt102 = 1 + elif LA102 == 59: + LA102_39 = self.input.LA(3) + + if (self.synpred2()) : + alt102 = 1 + elif LA102 == 60: + LA102_40 = self.input.LA(3) if (self.synpred2()) : alt102 = 1 - elif LA102 == 49 or LA102 == 50 or LA102 == 51 or LA102 == 52 or LA102 == 53 or LA102 == 54 or LA102 == 55 or LA102 == 56 or LA102 == 57: - LA102_38 = self.input.LA(3) + elif LA102 == 49 or LA102 == 50 or LA102 == 51 or LA102 == 52 or LA102 == 53 or LA102 == 54 or LA102 == 55 or LA102 == 56 or LA102 == 57 or LA102 == 61: + LA102_41 = self.input.LA(3) if (self.synpred2()) : alt102 = 1 @@ -16839,7 +16858,7 @@ class CParser(Parser): alt102 = 1 if alt102 == 1: # C.g:0:0: declaration_specifiers - self.following.append(self.FOLLOW_declaration_specifiers_in_synpred490) + self.following.append(self.FOLLOW_declaration_specifiers_in_synpred4100) self.declaration_specifiers() self.following.pop() if self.failed: @@ -16847,23 +16866,23 @@ class CParser(Parser): - self.following.append(self.FOLLOW_declarator_in_synpred493) + self.following.append(self.FOLLOW_declarator_in_synpred4103) self.declarator() self.following.pop() if self.failed: return - # C.g:67:41: ( declaration )* + # C.g:119:41: ( declaration )* while True: #loop103 alt103 = 2 LA103_0 = self.input.LA(1) - if (LA103_0 == IDENTIFIER or LA103_0 == 26 or (29 <= LA103_0 <= 42) or (45 <= LA103_0 <= 46) or (48 <= LA103_0 <= 60)) : + if (LA103_0 == IDENTIFIER or LA103_0 == 26 or (29 <= LA103_0 <= 42) or (45 <= LA103_0 <= 46) or (48 <= LA103_0 <= 61)) : alt103 = 1 if alt103 == 1: # C.g:0:0: declaration - self.following.append(self.FOLLOW_declaration_in_synpred495) + self.following.append(self.FOLLOW_declaration_in_synpred4105) self.declaration() self.following.pop() if self.failed: @@ -16874,7 +16893,7 @@ class CParser(Parser): break #loop103 - self.match(self.input, 43, self.FOLLOW_43_in_synpred498) + self.match(self.input, 43, self.FOLLOW_43_in_synpred4108) if self.failed: return @@ -16885,9 +16904,9 @@ class CParser(Parser): # $ANTLR start synpred5 def synpred5_fragment(self, ): - # C.g:68:4: ( declaration ) - # C.g:68:4: declaration - self.following.append(self.FOLLOW_declaration_in_synpred5108) + # C.g:120:4: ( declaration ) + # C.g:120:4: declaration + self.following.append(self.FOLLOW_declaration_in_synpred5118) self.declaration() self.following.pop() if self.failed: @@ -16900,9 +16919,9 @@ class CParser(Parser): # $ANTLR start synpred7 def synpred7_fragment(self, ): - # C.g:94:6: ( declaration_specifiers ) - # C.g:94:6: declaration_specifiers - self.following.append(self.FOLLOW_declaration_specifiers_in_synpred7147) + # C.g:146:6: ( declaration_specifiers ) + # C.g:146:6: declaration_specifiers + self.following.append(self.FOLLOW_declaration_specifiers_in_synpred7157) self.declaration_specifiers() self.following.pop() if self.failed: @@ -16915,9 +16934,9 @@ class CParser(Parser): # $ANTLR start synpred10 def synpred10_fragment(self, ): - # C.g:115:18: ( declaration_specifiers ) - # C.g:115:18: declaration_specifiers - self.following.append(self.FOLLOW_declaration_specifiers_in_synpred10197) + # C.g:167:18: ( declaration_specifiers ) + # C.g:167:18: declaration_specifiers + self.following.append(self.FOLLOW_declaration_specifiers_in_synpred10207) self.declaration_specifiers() self.following.pop() if self.failed: @@ -16930,9 +16949,9 @@ class CParser(Parser): # $ANTLR start synpred14 def synpred14_fragment(self, ): - # C.g:132:7: ( type_specifier ) - # C.g:132:7: type_specifier - self.following.append(self.FOLLOW_type_specifier_in_synpred14262) + # C.g:184:7: ( type_specifier ) + # C.g:184:7: type_specifier + self.following.append(self.FOLLOW_type_specifier_in_synpred14272) self.type_specifier() self.following.pop() if self.failed: @@ -16945,9 +16964,9 @@ class CParser(Parser): # $ANTLR start synpred15 def synpred15_fragment(self, ): - # C.g:133:13: ( type_qualifier ) - # C.g:133:13: type_qualifier - self.following.append(self.FOLLOW_type_qualifier_in_synpred15276) + # C.g:185:13: ( type_qualifier ) + # C.g:185:13: type_qualifier + self.following.append(self.FOLLOW_type_qualifier_in_synpred15286) self.type_qualifier() self.following.pop() if self.failed: @@ -16960,9 +16979,9 @@ class CParser(Parser): # $ANTLR start synpred33 def synpred33_fragment(self, ): - # C.g:173:16: ( type_qualifier ) - # C.g:173:16: type_qualifier - self.following.append(self.FOLLOW_type_qualifier_in_synpred33434) + # C.g:225:16: ( type_qualifier ) + # C.g:225:16: type_qualifier + self.following.append(self.FOLLOW_type_qualifier_in_synpred33444) self.type_qualifier() self.following.pop() if self.failed: @@ -16975,12 +16994,12 @@ class CParser(Parser): # $ANTLR start synpred34 def synpred34_fragment(self, ): - # C.g:173:4: ( IDENTIFIER ( type_qualifier )* declarator ) - # C.g:173:5: IDENTIFIER ( type_qualifier )* declarator - self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_synpred34432) + # C.g:225:4: ( IDENTIFIER ( type_qualifier )* declarator ) + # C.g:225:5: IDENTIFIER ( type_qualifier )* declarator + self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_synpred34442) if self.failed: return - # C.g:173:16: ( type_qualifier )* + # C.g:225:16: ( type_qualifier )* while True: #loop106 alt106 = 2 LA106 = self.input.LA(1) @@ -17005,12 +17024,12 @@ class CParser(Parser): alt106 = 1 - elif LA106 == 49 or LA106 == 50 or LA106 == 51 or LA106 == 52 or LA106 == 53 or LA106 == 54 or LA106 == 55 or LA106 == 56 or LA106 == 57: + elif LA106 == 49 or LA106 == 50 or LA106 == 51 or LA106 == 52 or LA106 == 53 or LA106 == 54 or LA106 == 55 or LA106 == 56 or LA106 == 57 or LA106 == 61: alt106 = 1 if alt106 == 1: # C.g:0:0: type_qualifier - self.following.append(self.FOLLOW_type_qualifier_in_synpred34434) + self.following.append(self.FOLLOW_type_qualifier_in_synpred34444) self.type_qualifier() self.following.pop() if self.failed: @@ -17021,7 +17040,7 @@ class CParser(Parser): break #loop106 - self.following.append(self.FOLLOW_declarator_in_synpred34437) + self.following.append(self.FOLLOW_declarator_in_synpred34447) self.declarator() self.following.pop() if self.failed: @@ -17034,9 +17053,9 @@ class CParser(Parser): # $ANTLR start synpred39 def synpred39_fragment(self, ): - # C.g:201:6: ( type_qualifier ) - # C.g:201:6: type_qualifier - self.following.append(self.FOLLOW_type_qualifier_in_synpred39556) + # C.g:253:6: ( type_qualifier ) + # C.g:253:6: type_qualifier + self.following.append(self.FOLLOW_type_qualifier_in_synpred39566) self.type_qualifier() self.following.pop() if self.failed: @@ -17049,9 +17068,9 @@ class CParser(Parser): # $ANTLR start synpred40 def synpred40_fragment(self, ): - # C.g:201:23: ( type_specifier ) - # C.g:201:23: type_specifier - self.following.append(self.FOLLOW_type_specifier_in_synpred40560) + # C.g:253:23: ( type_specifier ) + # C.g:253:23: type_specifier + self.following.append(self.FOLLOW_type_specifier_in_synpred40570) self.type_specifier() self.following.pop() if self.failed: @@ -17062,19 +17081,19 @@ class CParser(Parser): - # $ANTLR start synpred65 - def synpred65_fragment(self, ): - # C.g:244:4: ( ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator ) - # C.g:244:4: ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator - # C.g:244:4: ( pointer )? + # $ANTLR start synpred66 + def synpred66_fragment(self, ): + # C.g:297:4: ( ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator ) + # C.g:297:4: ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator + # C.g:297:4: ( pointer )? alt111 = 2 LA111_0 = self.input.LA(1) - if (LA111_0 == 65) : + if (LA111_0 == 66) : alt111 = 1 if alt111 == 1: # C.g:0:0: pointer - self.following.append(self.FOLLOW_pointer_in_synpred65769) + self.following.append(self.FOLLOW_pointer_in_synpred66784) self.pointer() self.following.pop() if self.failed: @@ -17082,194 +17101,194 @@ class CParser(Parser): - # C.g:244:13: ( 'EFIAPI' )? + # C.g:297:13: ( 'EFIAPI' )? alt112 = 2 LA112_0 = self.input.LA(1) if (LA112_0 == 58) : alt112 = 1 if alt112 == 1: - # C.g:244:14: 'EFIAPI' - self.match(self.input, 58, self.FOLLOW_58_in_synpred65773) + # C.g:297:14: 'EFIAPI' + self.match(self.input, 58, self.FOLLOW_58_in_synpred66788) if self.failed: return - # C.g:244:25: ( 'EFI_BOOTSERVICE' )? + # C.g:297:25: ( 'EFI_BOOTSERVICE' )? alt113 = 2 LA113_0 = self.input.LA(1) if (LA113_0 == 59) : alt113 = 1 if alt113 == 1: - # C.g:244:26: 'EFI_BOOTSERVICE' - self.match(self.input, 59, self.FOLLOW_59_in_synpred65778) + # C.g:297:26: 'EFI_BOOTSERVICE' + self.match(self.input, 59, self.FOLLOW_59_in_synpred66793) if self.failed: return - # C.g:244:46: ( 'EFI_RUNTIMESERVICE' )? + # C.g:297:46: ( 'EFI_RUNTIMESERVICE' )? alt114 = 2 LA114_0 = self.input.LA(1) if (LA114_0 == 60) : alt114 = 1 if alt114 == 1: - # C.g:244:47: 'EFI_RUNTIMESERVICE' - self.match(self.input, 60, self.FOLLOW_60_in_synpred65783) + # C.g:297:47: 'EFI_RUNTIMESERVICE' + self.match(self.input, 60, self.FOLLOW_60_in_synpred66798) if self.failed: return - self.following.append(self.FOLLOW_direct_declarator_in_synpred65787) + self.following.append(self.FOLLOW_direct_declarator_in_synpred66802) self.direct_declarator() self.following.pop() if self.failed: return - # $ANTLR end synpred65 + # $ANTLR end synpred66 - # $ANTLR start synpred66 - def synpred66_fragment(self, ): - # C.g:250:15: ( declarator_suffix ) - # C.g:250:15: declarator_suffix - self.following.append(self.FOLLOW_declarator_suffix_in_synpred66806) + # $ANTLR start synpred67 + def synpred67_fragment(self, ): + # C.g:303:15: ( declarator_suffix ) + # C.g:303:15: declarator_suffix + self.following.append(self.FOLLOW_declarator_suffix_in_synpred67821) self.declarator_suffix() self.following.pop() if self.failed: return - # $ANTLR end synpred66 + # $ANTLR end synpred67 - # $ANTLR start synpred68 - def synpred68_fragment(self, ): - # C.g:251:9: ( 'EFIAPI' ) - # C.g:251:9: 'EFIAPI' - self.match(self.input, 58, self.FOLLOW_58_in_synpred68815) + # $ANTLR start synpred69 + def synpred69_fragment(self, ): + # C.g:304:9: ( 'EFIAPI' ) + # C.g:304:9: 'EFIAPI' + self.match(self.input, 58, self.FOLLOW_58_in_synpred69830) if self.failed: return - # $ANTLR end synpred68 + # $ANTLR end synpred69 - # $ANTLR start synpred69 - def synpred69_fragment(self, ): - # C.g:251:35: ( declarator_suffix ) - # C.g:251:35: declarator_suffix - self.following.append(self.FOLLOW_declarator_suffix_in_synpred69823) + # $ANTLR start synpred70 + def synpred70_fragment(self, ): + # C.g:304:35: ( declarator_suffix ) + # C.g:304:35: declarator_suffix + self.following.append(self.FOLLOW_declarator_suffix_in_synpred70838) self.declarator_suffix() self.following.pop() if self.failed: return - # $ANTLR end synpred69 + # $ANTLR end synpred70 - # $ANTLR start synpred72 - def synpred72_fragment(self, ): - # C.g:257:9: ( '(' parameter_type_list ')' ) - # C.g:257:9: '(' parameter_type_list ')' - self.match(self.input, 61, self.FOLLOW_61_in_synpred72863) + # $ANTLR start synpred73 + def synpred73_fragment(self, ): + # C.g:310:9: ( '(' parameter_type_list ')' ) + # C.g:310:9: '(' parameter_type_list ')' + self.match(self.input, 62, self.FOLLOW_62_in_synpred73878) if self.failed: return - self.following.append(self.FOLLOW_parameter_type_list_in_synpred72865) + self.following.append(self.FOLLOW_parameter_type_list_in_synpred73880) self.parameter_type_list() self.following.pop() if self.failed: return - self.match(self.input, 62, self.FOLLOW_62_in_synpred72867) + self.match(self.input, 63, self.FOLLOW_63_in_synpred73882) if self.failed: return - # $ANTLR end synpred72 + # $ANTLR end synpred73 - # $ANTLR start synpred73 - def synpred73_fragment(self, ): - # C.g:258:9: ( '(' identifier_list ')' ) - # C.g:258:9: '(' identifier_list ')' - self.match(self.input, 61, self.FOLLOW_61_in_synpred73877) + # $ANTLR start synpred74 + def synpred74_fragment(self, ): + # C.g:311:9: ( '(' identifier_list ')' ) + # C.g:311:9: '(' identifier_list ')' + self.match(self.input, 62, self.FOLLOW_62_in_synpred74892) if self.failed: return - self.following.append(self.FOLLOW_identifier_list_in_synpred73879) + self.following.append(self.FOLLOW_identifier_list_in_synpred74894) self.identifier_list() self.following.pop() if self.failed: return - self.match(self.input, 62, self.FOLLOW_62_in_synpred73881) + self.match(self.input, 63, self.FOLLOW_63_in_synpred74896) if self.failed: return - # $ANTLR end synpred73 + # $ANTLR end synpred74 - # $ANTLR start synpred74 - def synpred74_fragment(self, ): - # C.g:263:8: ( type_qualifier ) - # C.g:263:8: type_qualifier - self.following.append(self.FOLLOW_type_qualifier_in_synpred74906) + # $ANTLR start synpred75 + def synpred75_fragment(self, ): + # C.g:316:8: ( type_qualifier ) + # C.g:316:8: type_qualifier + self.following.append(self.FOLLOW_type_qualifier_in_synpred75921) self.type_qualifier() self.following.pop() if self.failed: return - # $ANTLR end synpred74 + # $ANTLR end synpred75 - # $ANTLR start synpred75 - def synpred75_fragment(self, ): - # C.g:263:24: ( pointer ) - # C.g:263:24: pointer - self.following.append(self.FOLLOW_pointer_in_synpred75909) + # $ANTLR start synpred76 + def synpred76_fragment(self, ): + # C.g:316:24: ( pointer ) + # C.g:316:24: pointer + self.following.append(self.FOLLOW_pointer_in_synpred76924) self.pointer() self.following.pop() if self.failed: return - # $ANTLR end synpred75 + # $ANTLR end synpred76 - # $ANTLR start synpred76 - def synpred76_fragment(self, ): - # C.g:263:4: ( '*' ( type_qualifier )+ ( pointer )? ) - # C.g:263:4: '*' ( type_qualifier )+ ( pointer )? - self.match(self.input, 65, self.FOLLOW_65_in_synpred76904) + # $ANTLR start synpred77 + def synpred77_fragment(self, ): + # C.g:316:4: ( '*' ( type_qualifier )+ ( pointer )? ) + # C.g:316:4: '*' ( type_qualifier )+ ( pointer )? + self.match(self.input, 66, self.FOLLOW_66_in_synpred77919) if self.failed: return - # C.g:263:8: ( type_qualifier )+ + # C.g:316:8: ( type_qualifier )+ cnt116 = 0 while True: #loop116 alt116 = 2 LA116_0 = self.input.LA(1) - if ((49 <= LA116_0 <= 60)) : + if ((49 <= LA116_0 <= 61)) : alt116 = 1 if alt116 == 1: # C.g:0:0: type_qualifier - self.following.append(self.FOLLOW_type_qualifier_in_synpred76906) + self.following.append(self.FOLLOW_type_qualifier_in_synpred77921) self.type_qualifier() self.following.pop() if self.failed: @@ -17290,15 +17309,15 @@ class CParser(Parser): cnt116 += 1 - # C.g:263:24: ( pointer )? + # C.g:316:24: ( pointer )? alt117 = 2 LA117_0 = self.input.LA(1) - if (LA117_0 == 65) : + if (LA117_0 == 66) : alt117 = 1 if alt117 == 1: # C.g:0:0: pointer - self.following.append(self.FOLLOW_pointer_in_synpred76909) + self.following.append(self.FOLLOW_pointer_in_synpred77924) self.pointer() self.following.pop() if self.failed: @@ -17308,195 +17327,195 @@ class CParser(Parser): - # $ANTLR end synpred76 + # $ANTLR end synpred77 - # $ANTLR start synpred77 - def synpred77_fragment(self, ): - # C.g:264:4: ( '*' pointer ) - # C.g:264:4: '*' pointer - self.match(self.input, 65, self.FOLLOW_65_in_synpred77915) + # $ANTLR start synpred78 + def synpred78_fragment(self, ): + # C.g:317:4: ( '*' pointer ) + # C.g:317:4: '*' pointer + self.match(self.input, 66, self.FOLLOW_66_in_synpred78930) if self.failed: return - self.following.append(self.FOLLOW_pointer_in_synpred77917) + self.following.append(self.FOLLOW_pointer_in_synpred78932) self.pointer() self.following.pop() if self.failed: return - # $ANTLR end synpred77 + # $ANTLR end synpred78 - # $ANTLR start synpred80 - def synpred80_fragment(self, ): - # C.g:273:32: ( 'OPTIONAL' ) - # C.g:273:32: 'OPTIONAL' - self.match(self.input, 53, self.FOLLOW_53_in_synpred80962) + # $ANTLR start synpred81 + def synpred81_fragment(self, ): + # C.g:326:32: ( 'OPTIONAL' ) + # C.g:326:32: 'OPTIONAL' + self.match(self.input, 53, self.FOLLOW_53_in_synpred81977) if self.failed: return - # $ANTLR end synpred80 + # $ANTLR end synpred81 - # $ANTLR start synpred81 - def synpred81_fragment(self, ): - # C.g:273:27: ( ',' ( 'OPTIONAL' )? parameter_declaration ) - # C.g:273:27: ',' ( 'OPTIONAL' )? parameter_declaration - self.match(self.input, 27, self.FOLLOW_27_in_synpred81959) + # $ANTLR start synpred82 + def synpred82_fragment(self, ): + # C.g:326:27: ( ',' ( 'OPTIONAL' )? parameter_declaration ) + # C.g:326:27: ',' ( 'OPTIONAL' )? parameter_declaration + self.match(self.input, 27, self.FOLLOW_27_in_synpred82974) if self.failed: return - # C.g:273:31: ( 'OPTIONAL' )? + # C.g:326:31: ( 'OPTIONAL' )? alt119 = 2 LA119_0 = self.input.LA(1) if (LA119_0 == 53) : LA119_1 = self.input.LA(2) - if (self.synpred80()) : + if (self.synpred81()) : alt119 = 1 if alt119 == 1: - # C.g:273:32: 'OPTIONAL' - self.match(self.input, 53, self.FOLLOW_53_in_synpred81962) + # C.g:326:32: 'OPTIONAL' + self.match(self.input, 53, self.FOLLOW_53_in_synpred82977) if self.failed: return - self.following.append(self.FOLLOW_parameter_declaration_in_synpred81966) + self.following.append(self.FOLLOW_parameter_declaration_in_synpred82981) self.parameter_declaration() self.following.pop() if self.failed: return - # $ANTLR end synpred81 + # $ANTLR end synpred82 - # $ANTLR start synpred82 - def synpred82_fragment(self, ): - # C.g:277:28: ( declarator ) - # C.g:277:28: declarator - self.following.append(self.FOLLOW_declarator_in_synpred82982) + # $ANTLR start synpred83 + def synpred83_fragment(self, ): + # C.g:330:28: ( declarator ) + # C.g:330:28: declarator + self.following.append(self.FOLLOW_declarator_in_synpred83997) self.declarator() self.following.pop() if self.failed: return - # $ANTLR end synpred82 + # $ANTLR end synpred83 - # $ANTLR start synpred83 - def synpred83_fragment(self, ): - # C.g:277:39: ( abstract_declarator ) - # C.g:277:39: abstract_declarator - self.following.append(self.FOLLOW_abstract_declarator_in_synpred83984) + # $ANTLR start synpred84 + def synpred84_fragment(self, ): + # C.g:330:39: ( abstract_declarator ) + # C.g:330:39: abstract_declarator + self.following.append(self.FOLLOW_abstract_declarator_in_synpred84999) self.abstract_declarator() self.following.pop() if self.failed: return - # $ANTLR end synpred83 + # $ANTLR end synpred84 - # $ANTLR start synpred85 - def synpred85_fragment(self, ): - # C.g:277:4: ( declaration_specifiers ( declarator | abstract_declarator )* ( 'OPTIONAL' )? ) - # C.g:277:4: declaration_specifiers ( declarator | abstract_declarator )* ( 'OPTIONAL' )? - self.following.append(self.FOLLOW_declaration_specifiers_in_synpred85979) + # $ANTLR start synpred86 + def synpred86_fragment(self, ): + # C.g:330:4: ( declaration_specifiers ( declarator | abstract_declarator )* ( 'OPTIONAL' )? ) + # C.g:330:4: declaration_specifiers ( declarator | abstract_declarator )* ( 'OPTIONAL' )? + self.following.append(self.FOLLOW_declaration_specifiers_in_synpred86994) self.declaration_specifiers() self.following.pop() if self.failed: return - # C.g:277:27: ( declarator | abstract_declarator )* + # C.g:330:27: ( declarator | abstract_declarator )* while True: #loop120 alt120 = 3 LA120 = self.input.LA(1) - if LA120 == 65: + if LA120 == 66: LA120_3 = self.input.LA(2) - if (self.synpred82()) : + if (self.synpred83()) : alt120 = 1 - elif (self.synpred83()) : + elif (self.synpred84()) : alt120 = 2 elif LA120 == IDENTIFIER or LA120 == 58 or LA120 == 59 or LA120 == 60: alt120 = 1 - elif LA120 == 61: + elif LA120 == 62: LA120 = self.input.LA(2) - if LA120 == 29 or LA120 == 30 or LA120 == 31 or LA120 == 32 or LA120 == 33 or LA120 == 34 or LA120 == 35 or LA120 == 36 or LA120 == 37 or LA120 == 38 or LA120 == 39 or LA120 == 40 or LA120 == 41 or LA120 == 42 or LA120 == 45 or LA120 == 46 or LA120 == 48 or LA120 == 49 or LA120 == 50 or LA120 == 51 or LA120 == 52 or LA120 == 53 or LA120 == 54 or LA120 == 55 or LA120 == 56 or LA120 == 57 or LA120 == 62 or LA120 == 63: + if LA120 == 29 or LA120 == 30 or LA120 == 31 or LA120 == 32 or LA120 == 33 or LA120 == 34 or LA120 == 35 or LA120 == 36 or LA120 == 37 or LA120 == 38 or LA120 == 39 or LA120 == 40 or LA120 == 41 or LA120 == 42 or LA120 == 45 or LA120 == 46 or LA120 == 48 or LA120 == 49 or LA120 == 50 or LA120 == 51 or LA120 == 52 or LA120 == 53 or LA120 == 54 or LA120 == 55 or LA120 == 56 or LA120 == 57 or LA120 == 61 or LA120 == 63 or LA120 == 64: alt120 = 2 elif LA120 == 58: LA120_21 = self.input.LA(3) - if (self.synpred82()) : + if (self.synpred83()) : alt120 = 1 - elif (self.synpred83()) : + elif (self.synpred84()) : alt120 = 2 - elif LA120 == 65: + elif LA120 == 66: LA120_22 = self.input.LA(3) - if (self.synpred82()) : + if (self.synpred83()) : alt120 = 1 - elif (self.synpred83()) : + elif (self.synpred84()) : alt120 = 2 elif LA120 == 59: LA120_23 = self.input.LA(3) - if (self.synpred82()) : + if (self.synpred83()) : alt120 = 1 - elif (self.synpred83()) : + elif (self.synpred84()) : alt120 = 2 elif LA120 == 60: LA120_24 = self.input.LA(3) - if (self.synpred82()) : + if (self.synpred83()) : alt120 = 1 - elif (self.synpred83()) : + elif (self.synpred84()) : alt120 = 2 elif LA120 == IDENTIFIER: LA120_25 = self.input.LA(3) - if (self.synpred82()) : + if (self.synpred83()) : alt120 = 1 - elif (self.synpred83()) : + elif (self.synpred84()) : alt120 = 2 - elif LA120 == 61: + elif LA120 == 62: LA120_26 = self.input.LA(3) - if (self.synpred82()) : + if (self.synpred83()) : alt120 = 1 - elif (self.synpred83()) : + elif (self.synpred84()) : alt120 = 2 - elif LA120 == 63: + elif LA120 == 64: alt120 = 2 if alt120 == 1: - # C.g:277:28: declarator - self.following.append(self.FOLLOW_declarator_in_synpred85982) + # C.g:330:28: declarator + self.following.append(self.FOLLOW_declarator_in_synpred86997) self.declarator() self.following.pop() if self.failed: @@ -17504,8 +17523,8 @@ class CParser(Parser): elif alt120 == 2: - # C.g:277:39: abstract_declarator - self.following.append(self.FOLLOW_abstract_declarator_in_synpred85984) + # C.g:330:39: abstract_declarator + self.following.append(self.FOLLOW_abstract_declarator_in_synpred86999) self.abstract_declarator() self.following.pop() if self.failed: @@ -17516,15 +17535,15 @@ class CParser(Parser): break #loop120 - # C.g:277:61: ( 'OPTIONAL' )? + # C.g:330:61: ( 'OPTIONAL' )? alt121 = 2 LA121_0 = self.input.LA(1) if (LA121_0 == 53) : alt121 = 1 if alt121 == 1: - # C.g:277:62: 'OPTIONAL' - self.match(self.input, 53, self.FOLLOW_53_in_synpred85989) + # C.g:330:62: 'OPTIONAL' + self.match(self.input, 53, self.FOLLOW_53_in_synpred861004) if self.failed: return @@ -17532,28 +17551,28 @@ class CParser(Parser): - # $ANTLR end synpred85 + # $ANTLR end synpred86 - # $ANTLR start synpred89 - def synpred89_fragment(self, ): - # C.g:288:4: ( specifier_qualifier_list ( abstract_declarator )? ) - # C.g:288:4: specifier_qualifier_list ( abstract_declarator )? - self.following.append(self.FOLLOW_specifier_qualifier_list_in_synpred891031) + # $ANTLR start synpred90 + def synpred90_fragment(self, ): + # C.g:341:4: ( specifier_qualifier_list ( abstract_declarator )? ) + # C.g:341:4: specifier_qualifier_list ( abstract_declarator )? + self.following.append(self.FOLLOW_specifier_qualifier_list_in_synpred901046) self.specifier_qualifier_list() self.following.pop() if self.failed: return - # C.g:288:29: ( abstract_declarator )? + # C.g:341:29: ( abstract_declarator )? alt122 = 2 LA122_0 = self.input.LA(1) - if (LA122_0 == 61 or LA122_0 == 63 or LA122_0 == 65) : + if (LA122_0 == 62 or LA122_0 == 64 or LA122_0 == 66) : alt122 = 1 if alt122 == 1: # C.g:0:0: abstract_declarator - self.following.append(self.FOLLOW_abstract_declarator_in_synpred891033) + self.following.append(self.FOLLOW_abstract_declarator_in_synpred901048) self.abstract_declarator() self.following.pop() if self.failed: @@ -17563,181 +17582,181 @@ class CParser(Parser): - # $ANTLR end synpred89 + # $ANTLR end synpred90 - # $ANTLR start synpred90 - def synpred90_fragment(self, ): - # C.g:293:12: ( direct_abstract_declarator ) - # C.g:293:12: direct_abstract_declarator - self.following.append(self.FOLLOW_direct_abstract_declarator_in_synpred901052) + # $ANTLR start synpred91 + def synpred91_fragment(self, ): + # C.g:346:12: ( direct_abstract_declarator ) + # C.g:346:12: direct_abstract_declarator + self.following.append(self.FOLLOW_direct_abstract_declarator_in_synpred911067) self.direct_abstract_declarator() self.following.pop() if self.failed: return - # $ANTLR end synpred90 + # $ANTLR end synpred91 - # $ANTLR start synpred92 - def synpred92_fragment(self, ): - # C.g:298:6: ( '(' abstract_declarator ')' ) - # C.g:298:6: '(' abstract_declarator ')' - self.match(self.input, 61, self.FOLLOW_61_in_synpred921071) + # $ANTLR start synpred93 + def synpred93_fragment(self, ): + # C.g:351:6: ( '(' abstract_declarator ')' ) + # C.g:351:6: '(' abstract_declarator ')' + self.match(self.input, 62, self.FOLLOW_62_in_synpred931086) if self.failed: return - self.following.append(self.FOLLOW_abstract_declarator_in_synpred921073) + self.following.append(self.FOLLOW_abstract_declarator_in_synpred931088) self.abstract_declarator() self.following.pop() if self.failed: return - self.match(self.input, 62, self.FOLLOW_62_in_synpred921075) + self.match(self.input, 63, self.FOLLOW_63_in_synpred931090) if self.failed: return - # $ANTLR end synpred92 + # $ANTLR end synpred93 - # $ANTLR start synpred93 - def synpred93_fragment(self, ): - # C.g:298:65: ( abstract_declarator_suffix ) - # C.g:298:65: abstract_declarator_suffix - self.following.append(self.FOLLOW_abstract_declarator_suffix_in_synpred931083) + # $ANTLR start synpred94 + def synpred94_fragment(self, ): + # C.g:351:65: ( abstract_declarator_suffix ) + # C.g:351:65: abstract_declarator_suffix + self.following.append(self.FOLLOW_abstract_declarator_suffix_in_synpred941098) self.abstract_declarator_suffix() self.following.pop() if self.failed: return - # $ANTLR end synpred93 + # $ANTLR end synpred94 - # $ANTLR start synpred108 - def synpred108_fragment(self, ): - # C.g:333:4: ( '(' type_name ')' cast_expression ) - # C.g:333:4: '(' type_name ')' cast_expression - self.match(self.input, 61, self.FOLLOW_61_in_synpred1081267) + # $ANTLR start synpred109 + def synpred109_fragment(self, ): + # C.g:386:4: ( '(' type_name ')' cast_expression ) + # C.g:386:4: '(' type_name ')' cast_expression + self.match(self.input, 62, self.FOLLOW_62_in_synpred1091282) if self.failed: return - self.following.append(self.FOLLOW_type_name_in_synpred1081269) + self.following.append(self.FOLLOW_type_name_in_synpred1091284) self.type_name() self.following.pop() if self.failed: return - self.match(self.input, 62, self.FOLLOW_62_in_synpred1081271) + self.match(self.input, 63, self.FOLLOW_63_in_synpred1091286) if self.failed: return - self.following.append(self.FOLLOW_cast_expression_in_synpred1081273) + self.following.append(self.FOLLOW_cast_expression_in_synpred1091288) self.cast_expression() self.following.pop() if self.failed: return - # $ANTLR end synpred108 + # $ANTLR end synpred109 - # $ANTLR start synpred113 - def synpred113_fragment(self, ): - # C.g:342:4: ( 'sizeof' unary_expression ) - # C.g:342:4: 'sizeof' unary_expression - self.match(self.input, 73, self.FOLLOW_73_in_synpred1131315) + # $ANTLR start synpred114 + def synpred114_fragment(self, ): + # C.g:395:4: ( 'sizeof' unary_expression ) + # C.g:395:4: 'sizeof' unary_expression + self.match(self.input, 74, self.FOLLOW_74_in_synpred1141330) if self.failed: return - self.following.append(self.FOLLOW_unary_expression_in_synpred1131317) + self.following.append(self.FOLLOW_unary_expression_in_synpred1141332) self.unary_expression() self.following.pop() if self.failed: return - # $ANTLR end synpred113 + # $ANTLR end synpred114 - # $ANTLR start synpred116 - def synpred116_fragment(self, ): - # C.g:356:13: ( '(' argument_expression_list ')' ) - # C.g:356:13: '(' argument_expression_list ')' - self.match(self.input, 61, self.FOLLOW_61_in_synpred1161405) + # $ANTLR start synpred117 + def synpred117_fragment(self, ): + # C.g:409:13: ( '(' argument_expression_list ')' ) + # C.g:409:13: '(' argument_expression_list ')' + self.match(self.input, 62, self.FOLLOW_62_in_synpred1171420) if self.failed: return - self.following.append(self.FOLLOW_argument_expression_list_in_synpred1161409) + self.following.append(self.FOLLOW_argument_expression_list_in_synpred1171424) self.argument_expression_list() self.following.pop() if self.failed: return - self.match(self.input, 62, self.FOLLOW_62_in_synpred1161413) + self.match(self.input, 63, self.FOLLOW_63_in_synpred1171428) if self.failed: return - # $ANTLR end synpred116 + # $ANTLR end synpred117 - # $ANTLR start synpred117 - def synpred117_fragment(self, ): - # C.g:357:13: ( '(' macro_parameter_list ')' ) - # C.g:357:13: '(' macro_parameter_list ')' - self.match(self.input, 61, self.FOLLOW_61_in_synpred1171429) + # $ANTLR start synpred118 + def synpred118_fragment(self, ): + # C.g:410:13: ( '(' macro_parameter_list ')' ) + # C.g:410:13: '(' macro_parameter_list ')' + self.match(self.input, 62, self.FOLLOW_62_in_synpred1181444) if self.failed: return - self.following.append(self.FOLLOW_macro_parameter_list_in_synpred1171431) + self.following.append(self.FOLLOW_macro_parameter_list_in_synpred1181446) self.macro_parameter_list() self.following.pop() if self.failed: return - self.match(self.input, 62, self.FOLLOW_62_in_synpred1171433) + self.match(self.input, 63, self.FOLLOW_63_in_synpred1181448) if self.failed: return - # $ANTLR end synpred117 + # $ANTLR end synpred118 - # $ANTLR start synpred119 - def synpred119_fragment(self, ): - # C.g:359:13: ( '*' IDENTIFIER ) - # C.g:359:13: '*' IDENTIFIER - self.match(self.input, 65, self.FOLLOW_65_in_synpred1191467) + # $ANTLR start synpred120 + def synpred120_fragment(self, ): + # C.g:412:13: ( '*' IDENTIFIER ) + # C.g:412:13: '*' IDENTIFIER + self.match(self.input, 66, self.FOLLOW_66_in_synpred1201482) if self.failed: return - self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_synpred1191471) + self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_synpred1201486) if self.failed: return - # $ANTLR end synpred119 + # $ANTLR end synpred120 - # $ANTLR start synpred136 - def synpred136_fragment(self, ): - # C.g:390:20: ( STRING_LITERAL ) - # C.g:390:20: STRING_LITERAL - self.match(self.input, STRING_LITERAL, self.FOLLOW_STRING_LITERAL_in_synpred1361668) + # $ANTLR start synpred137 + def synpred137_fragment(self, ): + # C.g:443:20: ( STRING_LITERAL ) + # C.g:443:20: STRING_LITERAL + self.match(self.input, STRING_LITERAL, self.FOLLOW_STRING_LITERAL_in_synpred1371683) if self.failed: return - # $ANTLR end synpred136 + # $ANTLR end synpred137 - # $ANTLR start synpred137 - def synpred137_fragment(self, ): - # C.g:390:8: ( ( IDENTIFIER )* ( STRING_LITERAL )+ ) - # C.g:390:8: ( IDENTIFIER )* ( STRING_LITERAL )+ - # C.g:390:8: ( IDENTIFIER )* + # $ANTLR start synpred138 + def synpred138_fragment(self, ): + # C.g:443:8: ( ( IDENTIFIER )* ( STRING_LITERAL )+ ) + # C.g:443:8: ( IDENTIFIER )* ( STRING_LITERAL )+ + # C.g:443:8: ( IDENTIFIER )* while True: #loop125 alt125 = 2 LA125_0 = self.input.LA(1) @@ -17748,7 +17767,7 @@ class CParser(Parser): if alt125 == 1: # C.g:0:0: IDENTIFIER - self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_synpred1371665) + self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_synpred1381680) if self.failed: return @@ -17757,7 +17776,7 @@ class CParser(Parser): break #loop125 - # C.g:390:20: ( STRING_LITERAL )+ + # C.g:443:20: ( STRING_LITERAL )+ cnt126 = 0 while True: #loop126 alt126 = 2 @@ -17769,7 +17788,7 @@ class CParser(Parser): if alt126 == 1: # C.g:0:0: STRING_LITERAL - self.match(self.input, STRING_LITERAL, self.FOLLOW_STRING_LITERAL_in_synpred1371668) + self.match(self.input, STRING_LITERAL, self.FOLLOW_STRING_LITERAL_in_synpred1381683) if self.failed: return @@ -17790,584 +17809,584 @@ class CParser(Parser): - # $ANTLR end synpred137 + # $ANTLR end synpred138 - # $ANTLR start synpred141 - def synpred141_fragment(self, ): - # C.g:405:4: ( lvalue assignment_operator assignment_expression ) - # C.g:405:4: lvalue assignment_operator assignment_expression - self.following.append(self.FOLLOW_lvalue_in_synpred1411729) + # $ANTLR start synpred142 + def synpred142_fragment(self, ): + # C.g:458:4: ( lvalue assignment_operator assignment_expression ) + # C.g:458:4: lvalue assignment_operator assignment_expression + self.following.append(self.FOLLOW_lvalue_in_synpred1421744) self.lvalue() self.following.pop() if self.failed: return - self.following.append(self.FOLLOW_assignment_operator_in_synpred1411731) + self.following.append(self.FOLLOW_assignment_operator_in_synpred1421746) self.assignment_operator() self.following.pop() if self.failed: return - self.following.append(self.FOLLOW_assignment_expression_in_synpred1411733) + self.following.append(self.FOLLOW_assignment_expression_in_synpred1421748) self.assignment_expression() self.following.pop() if self.failed: return - # $ANTLR end synpred141 + # $ANTLR end synpred142 - # $ANTLR start synpred168 - def synpred168_fragment(self, ): - # C.g:467:4: ( expression_statement ) - # C.g:467:4: expression_statement - self.following.append(self.FOLLOW_expression_statement_in_synpred1682020) + # $ANTLR start synpred169 + def synpred169_fragment(self, ): + # C.g:520:4: ( expression_statement ) + # C.g:520:4: expression_statement + self.following.append(self.FOLLOW_expression_statement_in_synpred1692035) self.expression_statement() self.following.pop() if self.failed: return - # $ANTLR end synpred168 + # $ANTLR end synpred169 - # $ANTLR start synpred172 - def synpred172_fragment(self, ): - # C.g:471:4: ( macro_statement ) - # C.g:471:4: macro_statement - self.following.append(self.FOLLOW_macro_statement_in_synpred1722040) + # $ANTLR start synpred173 + def synpred173_fragment(self, ): + # C.g:524:4: ( macro_statement ) + # C.g:524:4: macro_statement + self.following.append(self.FOLLOW_macro_statement_in_synpred1732055) self.macro_statement() self.following.pop() if self.failed: return - # $ANTLR end synpred172 + # $ANTLR end synpred173 - # $ANTLR start synpred173 - def synpred173_fragment(self, ): - # C.g:472:4: ( asm2_statement ) - # C.g:472:4: asm2_statement - self.following.append(self.FOLLOW_asm2_statement_in_synpred1732045) + # $ANTLR start synpred174 + def synpred174_fragment(self, ): + # C.g:525:4: ( asm2_statement ) + # C.g:525:4: asm2_statement + self.following.append(self.FOLLOW_asm2_statement_in_synpred1742060) self.asm2_statement() self.following.pop() if self.failed: return - # $ANTLR end synpred173 + # $ANTLR end synpred174 - # $ANTLR start synpred180 - def synpred180_fragment(self, ): - # C.g:491:19: ( declaration ) - # C.g:491:19: declaration - self.following.append(self.FOLLOW_declaration_in_synpred1802151) + # $ANTLR start synpred181 + def synpred181_fragment(self, ): + # C.g:544:19: ( declaration ) + # C.g:544:19: declaration + self.following.append(self.FOLLOW_declaration_in_synpred1812166) self.declaration() self.following.pop() if self.failed: return - # $ANTLR end synpred180 + # $ANTLR end synpred181 - # $ANTLR start synpred181 - def synpred181_fragment(self, ): - # C.g:491:33: ( statement_list ) - # C.g:491:33: statement_list - self.following.append(self.FOLLOW_statement_list_in_synpred1812155) + # $ANTLR start synpred182 + def synpred182_fragment(self, ): + # C.g:544:33: ( statement_list ) + # C.g:544:33: statement_list + self.following.append(self.FOLLOW_statement_list_in_synpred1822170) self.statement_list() self.following.pop() if self.failed: return - # $ANTLR end synpred181 + # $ANTLR end synpred182 - # $ANTLR start synpred185 - def synpred185_fragment(self, ): - # C.g:501:8: ( declaration ) - # C.g:501:8: declaration - self.following.append(self.FOLLOW_declaration_in_synpred1852210) + # $ANTLR start synpred186 + def synpred186_fragment(self, ): + # C.g:554:8: ( declaration ) + # C.g:554:8: declaration + self.following.append(self.FOLLOW_declaration_in_synpred1862225) self.declaration() self.following.pop() if self.failed: return - # $ANTLR end synpred185 + # $ANTLR end synpred186 - # $ANTLR start synpred187 - def synpred187_fragment(self, ): - # C.g:505:4: ( statement ) - # C.g:505:4: statement - self.following.append(self.FOLLOW_statement_in_synpred1872227) + # $ANTLR start synpred188 + def synpred188_fragment(self, ): + # C.g:558:4: ( statement ) + # C.g:558:4: statement + self.following.append(self.FOLLOW_statement_in_synpred1882242) self.statement() self.following.pop() if self.failed: return - # $ANTLR end synpred187 + # $ANTLR end synpred188 - def synpred185(self): + def synpred69(self): self.backtracking += 1 start = self.input.mark() - self.synpred185_fragment() + self.synpred69_fragment() success = not self.failed self.input.rewind(start) self.backtracking -= 1 self.failed = False return success - def synpred7(self): + def synpred81(self): self.backtracking += 1 start = self.input.mark() - self.synpred7_fragment() + self.synpred81_fragment() success = not self.failed self.input.rewind(start) self.backtracking -= 1 self.failed = False return success - def synpred14(self): + def synpred82(self): self.backtracking += 1 start = self.input.mark() - self.synpred14_fragment() + self.synpred82_fragment() success = not self.failed self.input.rewind(start) self.backtracking -= 1 self.failed = False return success - def synpred65(self): + def synpred66(self): self.backtracking += 1 start = self.input.mark() - self.synpred65_fragment() + self.synpred66_fragment() success = not self.failed self.input.rewind(start) self.backtracking -= 1 self.failed = False return success - def synpred15(self): + def synpred83(self): self.backtracking += 1 start = self.input.mark() - self.synpred15_fragment() + self.synpred83_fragment() success = not self.failed self.input.rewind(start) self.backtracking -= 1 self.failed = False return success - def synpred117(self): + def synpred84(self): self.backtracking += 1 start = self.input.mark() - self.synpred117_fragment() + self.synpred84_fragment() success = not self.failed self.input.rewind(start) self.backtracking -= 1 self.failed = False return success - def synpred173(self): + def synpred67(self): self.backtracking += 1 start = self.input.mark() - self.synpred173_fragment() + self.synpred67_fragment() success = not self.failed self.input.rewind(start) self.backtracking -= 1 self.failed = False return success - def synpred68(self): + def synpred86(self): self.backtracking += 1 start = self.input.mark() - self.synpred68_fragment() + self.synpred86_fragment() success = not self.failed self.input.rewind(start) self.backtracking -= 1 self.failed = False return success - def synpred40(self): + def synpred120(self): self.backtracking += 1 start = self.input.mark() - self.synpred40_fragment() + self.synpred120_fragment() success = not self.failed self.input.rewind(start) self.backtracking -= 1 self.failed = False return success - def synpred141(self): + def synpred40(self): self.backtracking += 1 start = self.input.mark() - self.synpred141_fragment() + self.synpred40_fragment() success = not self.failed self.input.rewind(start) self.backtracking -= 1 self.failed = False return success - def synpred75(self): + def synpred142(self): self.backtracking += 1 start = self.input.mark() - self.synpred75_fragment() + self.synpred142_fragment() success = not self.failed self.input.rewind(start) self.backtracking -= 1 self.failed = False return success - def synpred92(self): + def synpred182(self): self.backtracking += 1 start = self.input.mark() - self.synpred92_fragment() + self.synpred182_fragment() success = not self.failed self.input.rewind(start) self.backtracking -= 1 self.failed = False return success - def synpred4(self): + def synpred109(self): self.backtracking += 1 start = self.input.mark() - self.synpred4_fragment() + self.synpred109_fragment() success = not self.failed self.input.rewind(start) self.backtracking -= 1 self.failed = False return success - def synpred85(self): + def synpred181(self): self.backtracking += 1 start = self.input.mark() - self.synpred85_fragment() + self.synpred181_fragment() success = not self.failed self.input.rewind(start) self.backtracking -= 1 self.failed = False return success - def synpred39(self): + def synpred186(self): self.backtracking += 1 start = self.input.mark() - self.synpred39_fragment() + self.synpred186_fragment() success = not self.failed self.input.rewind(start) self.backtracking -= 1 self.failed = False return success - def synpred76(self): + def synpred188(self): self.backtracking += 1 start = self.input.mark() - self.synpred76_fragment() + self.synpred188_fragment() success = not self.failed self.input.rewind(start) self.backtracking -= 1 self.failed = False return success - def synpred119(self): + def synpred169(self): self.backtracking += 1 start = self.input.mark() - self.synpred119_fragment() + self.synpred169_fragment() success = not self.failed self.input.rewind(start) self.backtracking -= 1 self.failed = False return success - def synpred90(self): + def synpred117(self): self.backtracking += 1 start = self.input.mark() - self.synpred90_fragment() + self.synpred117_fragment() success = not self.failed self.input.rewind(start) self.backtracking -= 1 self.failed = False return success - def synpred187(self): + def synpred70(self): self.backtracking += 1 start = self.input.mark() - self.synpred187_fragment() + self.synpred70_fragment() success = not self.failed self.input.rewind(start) self.backtracking -= 1 self.failed = False return success - def synpred33(self): + def synpred118(self): self.backtracking += 1 start = self.input.mark() - self.synpred33_fragment() + self.synpred118_fragment() success = not self.failed self.input.rewind(start) self.backtracking -= 1 self.failed = False return success - def synpred2(self): + def synpred34(self): self.backtracking += 1 start = self.input.mark() - self.synpred2_fragment() + self.synpred34_fragment() success = not self.failed self.input.rewind(start) self.backtracking -= 1 self.failed = False return success - def synpred83(self): + def synpred33(self): self.backtracking += 1 start = self.input.mark() - self.synpred83_fragment() + self.synpred33_fragment() success = not self.failed self.input.rewind(start) self.backtracking -= 1 self.failed = False return success - def synpred69(self): + def synpred94(self): self.backtracking += 1 start = self.input.mark() - self.synpred69_fragment() + self.synpred94_fragment() success = not self.failed self.input.rewind(start) self.backtracking -= 1 self.failed = False return success - def synpred72(self): + def synpred39(self): self.backtracking += 1 start = self.input.mark() - self.synpred72_fragment() + self.synpred39_fragment() success = not self.failed self.input.rewind(start) self.backtracking -= 1 self.failed = False return success - def synpred168(self): + def synpred74(self): self.backtracking += 1 start = self.input.mark() - self.synpred168_fragment() + self.synpred74_fragment() success = not self.failed self.input.rewind(start) self.backtracking -= 1 self.failed = False return success - def synpred34(self): + def synpred114(self): self.backtracking += 1 start = self.input.mark() - self.synpred34_fragment() + self.synpred114_fragment() success = not self.failed self.input.rewind(start) self.backtracking -= 1 self.failed = False return success - def synpred181(self): + def synpred93(self): self.backtracking += 1 start = self.input.mark() - self.synpred181_fragment() + self.synpred93_fragment() success = not self.failed self.input.rewind(start) self.backtracking -= 1 self.failed = False return success - def synpred116(self): + def synpred75(self): self.backtracking += 1 start = self.input.mark() - self.synpred116_fragment() + self.synpred75_fragment() success = not self.failed self.input.rewind(start) self.backtracking -= 1 self.failed = False return success - def synpred113(self): + def synpred137(self): self.backtracking += 1 start = self.input.mark() - self.synpred113_fragment() + self.synpred137_fragment() success = not self.failed self.input.rewind(start) self.backtracking -= 1 self.failed = False return success - def synpred80(self): + def synpred90(self): self.backtracking += 1 start = self.input.mark() - self.synpred80_fragment() + self.synpred90_fragment() success = not self.failed self.input.rewind(start) self.backtracking -= 1 self.failed = False return success - def synpred73(self): + def synpred138(self): self.backtracking += 1 start = self.input.mark() - self.synpred73_fragment() + self.synpred138_fragment() success = not self.failed self.input.rewind(start) self.backtracking -= 1 self.failed = False return success - def synpred89(self): + def synpred91(self): self.backtracking += 1 start = self.input.mark() - self.synpred89_fragment() + self.synpred91_fragment() success = not self.failed self.input.rewind(start) self.backtracking -= 1 self.failed = False return success - def synpred10(self): + def synpred73(self): self.backtracking += 1 start = self.input.mark() - self.synpred10_fragment() + self.synpred73_fragment() success = not self.failed self.input.rewind(start) self.backtracking -= 1 self.failed = False return success - def synpred81(self): + def synpred5(self): self.backtracking += 1 start = self.input.mark() - self.synpred81_fragment() + self.synpred5_fragment() success = not self.failed self.input.rewind(start) self.backtracking -= 1 self.failed = False return success - def synpred180(self): + def synpred78(self): self.backtracking += 1 start = self.input.mark() - self.synpred180_fragment() + self.synpred78_fragment() success = not self.failed self.input.rewind(start) self.backtracking -= 1 self.failed = False return success - def synpred136(self): + def synpred7(self): self.backtracking += 1 start = self.input.mark() - self.synpred136_fragment() + self.synpred7_fragment() success = not self.failed self.input.rewind(start) self.backtracking -= 1 self.failed = False return success - def synpred77(self): + def synpred76(self): self.backtracking += 1 start = self.input.mark() - self.synpred77_fragment() + self.synpred76_fragment() success = not self.failed self.input.rewind(start) self.backtracking -= 1 self.failed = False return success - def synpred172(self): + def synpred77(self): self.backtracking += 1 start = self.input.mark() - self.synpred172_fragment() + self.synpred77_fragment() success = not self.failed self.input.rewind(start) self.backtracking -= 1 self.failed = False return success - def synpred137(self): + def synpred2(self): self.backtracking += 1 start = self.input.mark() - self.synpred137_fragment() + self.synpred2_fragment() success = not self.failed self.input.rewind(start) self.backtracking -= 1 self.failed = False return success - def synpred74(self): + def synpred4(self): self.backtracking += 1 start = self.input.mark() - self.synpred74_fragment() + self.synpred4_fragment() success = not self.failed self.input.rewind(start) self.backtracking -= 1 self.failed = False return success - def synpred5(self): + def synpred174(self): self.backtracking += 1 start = self.input.mark() - self.synpred5_fragment() + self.synpred174_fragment() success = not self.failed self.input.rewind(start) self.backtracking -= 1 self.failed = False return success - def synpred108(self): + def synpred173(self): self.backtracking += 1 start = self.input.mark() - self.synpred108_fragment() + self.synpred173_fragment() success = not self.failed self.input.rewind(start) self.backtracking -= 1 self.failed = False return success - def synpred82(self): + def synpred14(self): self.backtracking += 1 start = self.input.mark() - self.synpred82_fragment() + self.synpred14_fragment() success = not self.failed self.input.rewind(start) self.backtracking -= 1 self.failed = False return success - def synpred93(self): + def synpred15(self): self.backtracking += 1 start = self.input.mark() - self.synpred93_fragment() + self.synpred15_fragment() success = not self.failed self.input.rewind(start) self.backtracking -= 1 self.failed = False return success - def synpred66(self): + def synpred10(self): self.backtracking += 1 start = self.input.mark() - self.synpred66_fragment() + self.synpred10_fragment() success = not self.failed self.input.rewind(start) self.backtracking -= 1 @@ -18378,448 +18397,448 @@ class CParser(Parser): - FOLLOW_external_declaration_in_translation_unit64 = frozenset([1, 4, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 65]) - FOLLOW_function_definition_in_external_declaration103 = frozenset([1]) - FOLLOW_declaration_in_external_declaration108 = frozenset([1]) - FOLLOW_macro_statement_in_external_declaration113 = frozenset([1, 25]) - FOLLOW_25_in_external_declaration116 = frozenset([1]) - FOLLOW_declaration_specifiers_in_function_definition147 = frozenset([4, 58, 59, 60, 61, 65]) - FOLLOW_declarator_in_function_definition150 = frozenset([4, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60]) - FOLLOW_declaration_in_function_definition156 = frozenset([4, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60]) - FOLLOW_compound_statement_in_function_definition161 = frozenset([1]) - FOLLOW_compound_statement_in_function_definition170 = frozenset([1]) - FOLLOW_26_in_declaration193 = frozenset([4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 65]) - FOLLOW_declaration_specifiers_in_declaration197 = frozenset([4, 58, 59, 60, 61, 65]) - FOLLOW_init_declarator_list_in_declaration206 = frozenset([25]) - FOLLOW_25_in_declaration210 = frozenset([1]) - FOLLOW_declaration_specifiers_in_declaration224 = frozenset([4, 25, 58, 59, 60, 61, 65]) - FOLLOW_init_declarator_list_in_declaration228 = frozenset([25]) - FOLLOW_25_in_declaration233 = frozenset([1]) - FOLLOW_storage_class_specifier_in_declaration_specifiers254 = frozenset([1, 4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60]) - FOLLOW_type_specifier_in_declaration_specifiers262 = frozenset([1, 4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60]) - FOLLOW_type_qualifier_in_declaration_specifiers276 = frozenset([1, 4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60]) - FOLLOW_init_declarator_in_init_declarator_list298 = frozenset([1, 27]) - FOLLOW_27_in_init_declarator_list301 = frozenset([4, 58, 59, 60, 61, 65]) - FOLLOW_init_declarator_in_init_declarator_list303 = frozenset([1, 27]) - FOLLOW_declarator_in_init_declarator316 = frozenset([1, 28]) - FOLLOW_28_in_init_declarator319 = frozenset([4, 5, 6, 7, 8, 9, 10, 43, 61, 65, 67, 68, 71, 72, 73, 76, 77, 78]) - FOLLOW_initializer_in_init_declarator321 = frozenset([1]) + FOLLOW_external_declaration_in_translation_unit74 = frozenset([1, 4, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66]) + FOLLOW_function_definition_in_external_declaration113 = frozenset([1]) + FOLLOW_declaration_in_external_declaration118 = frozenset([1]) + FOLLOW_macro_statement_in_external_declaration123 = frozenset([1, 25]) + FOLLOW_25_in_external_declaration126 = frozenset([1]) + FOLLOW_declaration_specifiers_in_function_definition157 = frozenset([4, 58, 59, 60, 62, 66]) + FOLLOW_declarator_in_function_definition160 = frozenset([4, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61]) + FOLLOW_declaration_in_function_definition166 = frozenset([4, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61]) + FOLLOW_compound_statement_in_function_definition171 = frozenset([1]) + FOLLOW_compound_statement_in_function_definition180 = frozenset([1]) + FOLLOW_26_in_declaration203 = frozenset([4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66]) + FOLLOW_declaration_specifiers_in_declaration207 = frozenset([4, 58, 59, 60, 62, 66]) + FOLLOW_init_declarator_list_in_declaration216 = frozenset([25]) + FOLLOW_25_in_declaration220 = frozenset([1]) + FOLLOW_declaration_specifiers_in_declaration234 = frozenset([4, 25, 58, 59, 60, 62, 66]) + FOLLOW_init_declarator_list_in_declaration238 = frozenset([25]) + FOLLOW_25_in_declaration243 = frozenset([1]) + FOLLOW_storage_class_specifier_in_declaration_specifiers264 = frozenset([1, 4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61]) + FOLLOW_type_specifier_in_declaration_specifiers272 = frozenset([1, 4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61]) + FOLLOW_type_qualifier_in_declaration_specifiers286 = frozenset([1, 4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61]) + FOLLOW_init_declarator_in_init_declarator_list308 = frozenset([1, 27]) + FOLLOW_27_in_init_declarator_list311 = frozenset([4, 58, 59, 60, 62, 66]) + FOLLOW_init_declarator_in_init_declarator_list313 = frozenset([1, 27]) + FOLLOW_declarator_in_init_declarator326 = frozenset([1, 28]) + FOLLOW_28_in_init_declarator329 = frozenset([4, 5, 6, 7, 8, 9, 10, 43, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_initializer_in_init_declarator331 = frozenset([1]) FOLLOW_set_in_storage_class_specifier0 = frozenset([1]) - FOLLOW_34_in_type_specifier366 = frozenset([1]) - FOLLOW_35_in_type_specifier371 = frozenset([1]) - FOLLOW_36_in_type_specifier376 = frozenset([1]) - FOLLOW_37_in_type_specifier381 = frozenset([1]) - FOLLOW_38_in_type_specifier386 = frozenset([1]) - FOLLOW_39_in_type_specifier391 = frozenset([1]) - FOLLOW_40_in_type_specifier396 = frozenset([1]) - FOLLOW_41_in_type_specifier401 = frozenset([1]) - FOLLOW_42_in_type_specifier406 = frozenset([1]) - FOLLOW_struct_or_union_specifier_in_type_specifier413 = frozenset([1]) - FOLLOW_enum_specifier_in_type_specifier423 = frozenset([1]) - FOLLOW_type_id_in_type_specifier441 = frozenset([1]) - FOLLOW_IDENTIFIER_in_type_id457 = frozenset([1]) - FOLLOW_struct_or_union_in_struct_or_union_specifier484 = frozenset([4, 43]) - FOLLOW_IDENTIFIER_in_struct_or_union_specifier486 = frozenset([43]) - FOLLOW_43_in_struct_or_union_specifier489 = frozenset([4, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60]) - FOLLOW_struct_declaration_list_in_struct_or_union_specifier491 = frozenset([44]) - FOLLOW_44_in_struct_or_union_specifier493 = frozenset([1]) - FOLLOW_struct_or_union_in_struct_or_union_specifier498 = frozenset([4]) - FOLLOW_IDENTIFIER_in_struct_or_union_specifier500 = frozenset([1]) + FOLLOW_34_in_type_specifier376 = frozenset([1]) + FOLLOW_35_in_type_specifier381 = frozenset([1]) + FOLLOW_36_in_type_specifier386 = frozenset([1]) + FOLLOW_37_in_type_specifier391 = frozenset([1]) + FOLLOW_38_in_type_specifier396 = frozenset([1]) + FOLLOW_39_in_type_specifier401 = frozenset([1]) + FOLLOW_40_in_type_specifier406 = frozenset([1]) + FOLLOW_41_in_type_specifier411 = frozenset([1]) + FOLLOW_42_in_type_specifier416 = frozenset([1]) + FOLLOW_struct_or_union_specifier_in_type_specifier423 = frozenset([1]) + FOLLOW_enum_specifier_in_type_specifier433 = frozenset([1]) + FOLLOW_type_id_in_type_specifier451 = frozenset([1]) + FOLLOW_IDENTIFIER_in_type_id467 = frozenset([1]) + FOLLOW_struct_or_union_in_struct_or_union_specifier494 = frozenset([4, 43]) + FOLLOW_IDENTIFIER_in_struct_or_union_specifier496 = frozenset([43]) + FOLLOW_43_in_struct_or_union_specifier499 = frozenset([4, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61]) + FOLLOW_struct_declaration_list_in_struct_or_union_specifier501 = frozenset([44]) + FOLLOW_44_in_struct_or_union_specifier503 = frozenset([1]) + FOLLOW_struct_or_union_in_struct_or_union_specifier508 = frozenset([4]) + FOLLOW_IDENTIFIER_in_struct_or_union_specifier510 = frozenset([1]) FOLLOW_set_in_struct_or_union0 = frozenset([1]) - FOLLOW_struct_declaration_in_struct_declaration_list527 = frozenset([1, 4, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60]) - FOLLOW_specifier_qualifier_list_in_struct_declaration539 = frozenset([4, 47, 58, 59, 60, 61, 65]) - FOLLOW_struct_declarator_list_in_struct_declaration541 = frozenset([25]) - FOLLOW_25_in_struct_declaration543 = frozenset([1]) - FOLLOW_type_qualifier_in_specifier_qualifier_list556 = frozenset([1, 4, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60]) - FOLLOW_type_specifier_in_specifier_qualifier_list560 = frozenset([1, 4, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60]) - FOLLOW_struct_declarator_in_struct_declarator_list574 = frozenset([1, 27]) - FOLLOW_27_in_struct_declarator_list577 = frozenset([4, 47, 58, 59, 60, 61, 65]) - FOLLOW_struct_declarator_in_struct_declarator_list579 = frozenset([1, 27]) - FOLLOW_declarator_in_struct_declarator592 = frozenset([1, 47]) - FOLLOW_47_in_struct_declarator595 = frozenset([4, 5, 6, 7, 8, 9, 10, 61, 65, 67, 68, 71, 72, 73, 76, 77, 78]) - FOLLOW_constant_expression_in_struct_declarator597 = frozenset([1]) - FOLLOW_47_in_struct_declarator604 = frozenset([4, 5, 6, 7, 8, 9, 10, 61, 65, 67, 68, 71, 72, 73, 76, 77, 78]) - FOLLOW_constant_expression_in_struct_declarator606 = frozenset([1]) - FOLLOW_48_in_enum_specifier624 = frozenset([43]) - FOLLOW_43_in_enum_specifier626 = frozenset([4]) - FOLLOW_enumerator_list_in_enum_specifier628 = frozenset([27, 44]) - FOLLOW_27_in_enum_specifier630 = frozenset([44]) - FOLLOW_44_in_enum_specifier633 = frozenset([1]) - FOLLOW_48_in_enum_specifier638 = frozenset([4]) - FOLLOW_IDENTIFIER_in_enum_specifier640 = frozenset([43]) - FOLLOW_43_in_enum_specifier642 = frozenset([4]) - FOLLOW_enumerator_list_in_enum_specifier644 = frozenset([27, 44]) - FOLLOW_27_in_enum_specifier646 = frozenset([44]) - FOLLOW_44_in_enum_specifier649 = frozenset([1]) - FOLLOW_48_in_enum_specifier654 = frozenset([4]) - FOLLOW_IDENTIFIER_in_enum_specifier656 = frozenset([1]) - FOLLOW_enumerator_in_enumerator_list667 = frozenset([1, 27]) - FOLLOW_27_in_enumerator_list670 = frozenset([4]) - FOLLOW_enumerator_in_enumerator_list672 = frozenset([1, 27]) - FOLLOW_IDENTIFIER_in_enumerator685 = frozenset([1, 28]) - FOLLOW_28_in_enumerator688 = frozenset([4, 5, 6, 7, 8, 9, 10, 61, 65, 67, 68, 71, 72, 73, 76, 77, 78]) - FOLLOW_constant_expression_in_enumerator690 = frozenset([1]) + FOLLOW_struct_declaration_in_struct_declaration_list537 = frozenset([1, 4, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61]) + FOLLOW_specifier_qualifier_list_in_struct_declaration549 = frozenset([4, 47, 58, 59, 60, 62, 66]) + FOLLOW_struct_declarator_list_in_struct_declaration551 = frozenset([25]) + FOLLOW_25_in_struct_declaration553 = frozenset([1]) + FOLLOW_type_qualifier_in_specifier_qualifier_list566 = frozenset([1, 4, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61]) + FOLLOW_type_specifier_in_specifier_qualifier_list570 = frozenset([1, 4, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61]) + FOLLOW_struct_declarator_in_struct_declarator_list584 = frozenset([1, 27]) + FOLLOW_27_in_struct_declarator_list587 = frozenset([4, 47, 58, 59, 60, 62, 66]) + FOLLOW_struct_declarator_in_struct_declarator_list589 = frozenset([1, 27]) + FOLLOW_declarator_in_struct_declarator602 = frozenset([1, 47]) + FOLLOW_47_in_struct_declarator605 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_constant_expression_in_struct_declarator607 = frozenset([1]) + FOLLOW_47_in_struct_declarator614 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_constant_expression_in_struct_declarator616 = frozenset([1]) + FOLLOW_48_in_enum_specifier634 = frozenset([43]) + FOLLOW_43_in_enum_specifier636 = frozenset([4]) + FOLLOW_enumerator_list_in_enum_specifier638 = frozenset([27, 44]) + FOLLOW_27_in_enum_specifier640 = frozenset([44]) + FOLLOW_44_in_enum_specifier643 = frozenset([1]) + FOLLOW_48_in_enum_specifier648 = frozenset([4]) + FOLLOW_IDENTIFIER_in_enum_specifier650 = frozenset([43]) + FOLLOW_43_in_enum_specifier652 = frozenset([4]) + FOLLOW_enumerator_list_in_enum_specifier654 = frozenset([27, 44]) + FOLLOW_27_in_enum_specifier656 = frozenset([44]) + FOLLOW_44_in_enum_specifier659 = frozenset([1]) + FOLLOW_48_in_enum_specifier664 = frozenset([4]) + FOLLOW_IDENTIFIER_in_enum_specifier666 = frozenset([1]) + FOLLOW_enumerator_in_enumerator_list677 = frozenset([1, 27]) + FOLLOW_27_in_enumerator_list680 = frozenset([4]) + FOLLOW_enumerator_in_enumerator_list682 = frozenset([1, 27]) + FOLLOW_IDENTIFIER_in_enumerator695 = frozenset([1, 28]) + FOLLOW_28_in_enumerator698 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_constant_expression_in_enumerator700 = frozenset([1]) FOLLOW_set_in_type_qualifier0 = frozenset([1]) - FOLLOW_pointer_in_declarator769 = frozenset([4, 58, 59, 60, 61]) - FOLLOW_58_in_declarator773 = frozenset([4, 59, 60, 61]) - FOLLOW_59_in_declarator778 = frozenset([4, 60, 61]) - FOLLOW_60_in_declarator783 = frozenset([4, 61]) - FOLLOW_direct_declarator_in_declarator787 = frozenset([1]) - FOLLOW_pointer_in_declarator793 = frozenset([1]) - FOLLOW_IDENTIFIER_in_direct_declarator804 = frozenset([1, 61, 63]) - FOLLOW_declarator_suffix_in_direct_declarator806 = frozenset([1, 61, 63]) - FOLLOW_61_in_direct_declarator812 = frozenset([4, 58, 59, 60, 61, 65]) - FOLLOW_58_in_direct_declarator815 = frozenset([4, 58, 59, 60, 61, 65]) - FOLLOW_declarator_in_direct_declarator819 = frozenset([62]) - FOLLOW_62_in_direct_declarator821 = frozenset([61, 63]) - FOLLOW_declarator_suffix_in_direct_declarator823 = frozenset([1, 61, 63]) - FOLLOW_63_in_declarator_suffix837 = frozenset([4, 5, 6, 7, 8, 9, 10, 61, 65, 67, 68, 71, 72, 73, 76, 77, 78]) - FOLLOW_constant_expression_in_declarator_suffix839 = frozenset([64]) - FOLLOW_64_in_declarator_suffix841 = frozenset([1]) - FOLLOW_63_in_declarator_suffix851 = frozenset([64]) - FOLLOW_64_in_declarator_suffix853 = frozenset([1]) - FOLLOW_61_in_declarator_suffix863 = frozenset([4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 65]) - FOLLOW_parameter_type_list_in_declarator_suffix865 = frozenset([62]) - FOLLOW_62_in_declarator_suffix867 = frozenset([1]) - FOLLOW_61_in_declarator_suffix877 = frozenset([4]) - FOLLOW_identifier_list_in_declarator_suffix879 = frozenset([62]) - FOLLOW_62_in_declarator_suffix881 = frozenset([1]) - FOLLOW_61_in_declarator_suffix891 = frozenset([62]) - FOLLOW_62_in_declarator_suffix893 = frozenset([1]) - FOLLOW_65_in_pointer904 = frozenset([49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60]) - FOLLOW_type_qualifier_in_pointer906 = frozenset([1, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 65]) - FOLLOW_pointer_in_pointer909 = frozenset([1]) - FOLLOW_65_in_pointer915 = frozenset([65]) - FOLLOW_pointer_in_pointer917 = frozenset([1]) - FOLLOW_65_in_pointer922 = frozenset([1]) - FOLLOW_parameter_list_in_parameter_type_list933 = frozenset([1, 27]) - FOLLOW_27_in_parameter_type_list936 = frozenset([53, 66]) - FOLLOW_53_in_parameter_type_list939 = frozenset([66]) - FOLLOW_66_in_parameter_type_list943 = frozenset([1]) - FOLLOW_parameter_declaration_in_parameter_list956 = frozenset([1, 27]) - FOLLOW_27_in_parameter_list959 = frozenset([4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 65]) - FOLLOW_53_in_parameter_list962 = frozenset([4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 65]) - FOLLOW_parameter_declaration_in_parameter_list966 = frozenset([1, 27]) - FOLLOW_declaration_specifiers_in_parameter_declaration979 = frozenset([1, 4, 53, 58, 59, 60, 61, 63, 65]) - FOLLOW_declarator_in_parameter_declaration982 = frozenset([1, 4, 53, 58, 59, 60, 61, 63, 65]) - FOLLOW_abstract_declarator_in_parameter_declaration984 = frozenset([1, 4, 53, 58, 59, 60, 61, 63, 65]) - FOLLOW_53_in_parameter_declaration989 = frozenset([1]) - FOLLOW_pointer_in_parameter_declaration998 = frozenset([4, 65]) - FOLLOW_IDENTIFIER_in_parameter_declaration1001 = frozenset([1]) - FOLLOW_IDENTIFIER_in_identifier_list1012 = frozenset([1, 27]) - FOLLOW_27_in_identifier_list1016 = frozenset([4]) - FOLLOW_IDENTIFIER_in_identifier_list1018 = frozenset([1, 27]) - FOLLOW_specifier_qualifier_list_in_type_name1031 = frozenset([1, 61, 63, 65]) - FOLLOW_abstract_declarator_in_type_name1033 = frozenset([1]) - FOLLOW_type_id_in_type_name1039 = frozenset([1]) - FOLLOW_pointer_in_abstract_declarator1050 = frozenset([1, 61, 63]) - FOLLOW_direct_abstract_declarator_in_abstract_declarator1052 = frozenset([1]) - FOLLOW_direct_abstract_declarator_in_abstract_declarator1058 = frozenset([1]) - FOLLOW_61_in_direct_abstract_declarator1071 = frozenset([61, 63, 65]) - FOLLOW_abstract_declarator_in_direct_abstract_declarator1073 = frozenset([62]) - FOLLOW_62_in_direct_abstract_declarator1075 = frozenset([1, 61, 63]) - FOLLOW_abstract_declarator_suffix_in_direct_abstract_declarator1079 = frozenset([1, 61, 63]) - FOLLOW_abstract_declarator_suffix_in_direct_abstract_declarator1083 = frozenset([1, 61, 63]) - FOLLOW_63_in_abstract_declarator_suffix1095 = frozenset([64]) - FOLLOW_64_in_abstract_declarator_suffix1097 = frozenset([1]) - FOLLOW_63_in_abstract_declarator_suffix1102 = frozenset([4, 5, 6, 7, 8, 9, 10, 61, 65, 67, 68, 71, 72, 73, 76, 77, 78]) - FOLLOW_constant_expression_in_abstract_declarator_suffix1104 = frozenset([64]) - FOLLOW_64_in_abstract_declarator_suffix1106 = frozenset([1]) - FOLLOW_61_in_abstract_declarator_suffix1111 = frozenset([62]) - FOLLOW_62_in_abstract_declarator_suffix1113 = frozenset([1]) - FOLLOW_61_in_abstract_declarator_suffix1118 = frozenset([4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 65]) - FOLLOW_parameter_type_list_in_abstract_declarator_suffix1120 = frozenset([62]) - FOLLOW_62_in_abstract_declarator_suffix1122 = frozenset([1]) - FOLLOW_assignment_expression_in_initializer1135 = frozenset([1]) - FOLLOW_43_in_initializer1140 = frozenset([4, 5, 6, 7, 8, 9, 10, 43, 61, 65, 67, 68, 71, 72, 73, 76, 77, 78]) - FOLLOW_initializer_list_in_initializer1142 = frozenset([27, 44]) - FOLLOW_27_in_initializer1144 = frozenset([44]) - FOLLOW_44_in_initializer1147 = frozenset([1]) - FOLLOW_initializer_in_initializer_list1158 = frozenset([1, 27]) - FOLLOW_27_in_initializer_list1161 = frozenset([4, 5, 6, 7, 8, 9, 10, 43, 61, 65, 67, 68, 71, 72, 73, 76, 77, 78]) - FOLLOW_initializer_in_initializer_list1163 = frozenset([1, 27]) - FOLLOW_assignment_expression_in_argument_expression_list1181 = frozenset([1, 27, 53]) - FOLLOW_53_in_argument_expression_list1184 = frozenset([1, 27]) - FOLLOW_27_in_argument_expression_list1189 = frozenset([4, 5, 6, 7, 8, 9, 10, 61, 65, 67, 68, 71, 72, 73, 76, 77, 78]) - FOLLOW_assignment_expression_in_argument_expression_list1191 = frozenset([1, 27, 53]) - FOLLOW_53_in_argument_expression_list1194 = frozenset([1, 27]) - FOLLOW_multiplicative_expression_in_additive_expression1210 = frozenset([1, 67, 68]) - FOLLOW_67_in_additive_expression1214 = frozenset([4, 5, 6, 7, 8, 9, 10, 61, 65, 67, 68, 71, 72, 73, 76, 77, 78]) - FOLLOW_multiplicative_expression_in_additive_expression1216 = frozenset([1, 67, 68]) - FOLLOW_68_in_additive_expression1220 = frozenset([4, 5, 6, 7, 8, 9, 10, 61, 65, 67, 68, 71, 72, 73, 76, 77, 78]) - FOLLOW_multiplicative_expression_in_additive_expression1222 = frozenset([1, 67, 68]) - FOLLOW_cast_expression_in_multiplicative_expression1236 = frozenset([1, 65, 69, 70]) - FOLLOW_65_in_multiplicative_expression1240 = frozenset([4, 5, 6, 7, 8, 9, 10, 61, 65, 67, 68, 71, 72, 73, 76, 77, 78]) - FOLLOW_cast_expression_in_multiplicative_expression1242 = frozenset([1, 65, 69, 70]) - FOLLOW_69_in_multiplicative_expression1246 = frozenset([4, 5, 6, 7, 8, 9, 10, 61, 65, 67, 68, 71, 72, 73, 76, 77, 78]) - FOLLOW_cast_expression_in_multiplicative_expression1248 = frozenset([1, 65, 69, 70]) - FOLLOW_70_in_multiplicative_expression1252 = frozenset([4, 5, 6, 7, 8, 9, 10, 61, 65, 67, 68, 71, 72, 73, 76, 77, 78]) - FOLLOW_cast_expression_in_multiplicative_expression1254 = frozenset([1, 65, 69, 70]) - FOLLOW_61_in_cast_expression1267 = frozenset([4, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60]) - FOLLOW_type_name_in_cast_expression1269 = frozenset([62]) - FOLLOW_62_in_cast_expression1271 = frozenset([4, 5, 6, 7, 8, 9, 10, 61, 65, 67, 68, 71, 72, 73, 76, 77, 78]) - FOLLOW_cast_expression_in_cast_expression1273 = frozenset([1]) - FOLLOW_unary_expression_in_cast_expression1278 = frozenset([1]) - FOLLOW_postfix_expression_in_unary_expression1289 = frozenset([1]) - FOLLOW_71_in_unary_expression1294 = frozenset([4, 5, 6, 7, 8, 9, 10, 61, 65, 67, 68, 71, 72, 73, 76, 77, 78]) - FOLLOW_unary_expression_in_unary_expression1296 = frozenset([1]) - FOLLOW_72_in_unary_expression1301 = frozenset([4, 5, 6, 7, 8, 9, 10, 61, 65, 67, 68, 71, 72, 73, 76, 77, 78]) - FOLLOW_unary_expression_in_unary_expression1303 = frozenset([1]) - FOLLOW_unary_operator_in_unary_expression1308 = frozenset([4, 5, 6, 7, 8, 9, 10, 61, 65, 67, 68, 71, 72, 73, 76, 77, 78]) - FOLLOW_cast_expression_in_unary_expression1310 = frozenset([1]) - FOLLOW_73_in_unary_expression1315 = frozenset([4, 5, 6, 7, 8, 9, 10, 61, 65, 67, 68, 71, 72, 73, 76, 77, 78]) - FOLLOW_unary_expression_in_unary_expression1317 = frozenset([1]) - FOLLOW_73_in_unary_expression1322 = frozenset([61]) - FOLLOW_61_in_unary_expression1324 = frozenset([4, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60]) - FOLLOW_type_name_in_unary_expression1326 = frozenset([62]) - FOLLOW_62_in_unary_expression1328 = frozenset([1]) - FOLLOW_primary_expression_in_postfix_expression1352 = frozenset([1, 61, 63, 65, 71, 72, 74, 75]) - FOLLOW_63_in_postfix_expression1368 = frozenset([4, 5, 6, 7, 8, 9, 10, 61, 65, 67, 68, 71, 72, 73, 76, 77, 78]) - FOLLOW_expression_in_postfix_expression1370 = frozenset([64]) - FOLLOW_64_in_postfix_expression1372 = frozenset([1, 61, 63, 65, 71, 72, 74, 75]) - FOLLOW_61_in_postfix_expression1386 = frozenset([62]) - FOLLOW_62_in_postfix_expression1390 = frozenset([1, 61, 63, 65, 71, 72, 74, 75]) - FOLLOW_61_in_postfix_expression1405 = frozenset([4, 5, 6, 7, 8, 9, 10, 61, 65, 67, 68, 71, 72, 73, 76, 77, 78]) - FOLLOW_argument_expression_list_in_postfix_expression1409 = frozenset([62]) - FOLLOW_62_in_postfix_expression1413 = frozenset([1, 61, 63, 65, 71, 72, 74, 75]) - FOLLOW_61_in_postfix_expression1429 = frozenset([4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 65]) - FOLLOW_macro_parameter_list_in_postfix_expression1431 = frozenset([62]) - FOLLOW_62_in_postfix_expression1433 = frozenset([1, 61, 63, 65, 71, 72, 74, 75]) - FOLLOW_74_in_postfix_expression1447 = frozenset([4]) - FOLLOW_IDENTIFIER_in_postfix_expression1451 = frozenset([1, 61, 63, 65, 71, 72, 74, 75]) - FOLLOW_65_in_postfix_expression1467 = frozenset([4]) - FOLLOW_IDENTIFIER_in_postfix_expression1471 = frozenset([1, 61, 63, 65, 71, 72, 74, 75]) - FOLLOW_75_in_postfix_expression1487 = frozenset([4]) - FOLLOW_IDENTIFIER_in_postfix_expression1491 = frozenset([1, 61, 63, 65, 71, 72, 74, 75]) - FOLLOW_71_in_postfix_expression1507 = frozenset([1, 61, 63, 65, 71, 72, 74, 75]) - FOLLOW_72_in_postfix_expression1521 = frozenset([1, 61, 63, 65, 71, 72, 74, 75]) - FOLLOW_parameter_declaration_in_macro_parameter_list1544 = frozenset([1, 27]) - FOLLOW_27_in_macro_parameter_list1547 = frozenset([4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 65]) - FOLLOW_parameter_declaration_in_macro_parameter_list1549 = frozenset([1, 27]) + FOLLOW_pointer_in_declarator784 = frozenset([4, 58, 59, 60, 62]) + FOLLOW_58_in_declarator788 = frozenset([4, 59, 60, 62]) + FOLLOW_59_in_declarator793 = frozenset([4, 60, 62]) + FOLLOW_60_in_declarator798 = frozenset([4, 62]) + FOLLOW_direct_declarator_in_declarator802 = frozenset([1]) + FOLLOW_pointer_in_declarator808 = frozenset([1]) + FOLLOW_IDENTIFIER_in_direct_declarator819 = frozenset([1, 62, 64]) + FOLLOW_declarator_suffix_in_direct_declarator821 = frozenset([1, 62, 64]) + FOLLOW_62_in_direct_declarator827 = frozenset([4, 58, 59, 60, 62, 66]) + FOLLOW_58_in_direct_declarator830 = frozenset([4, 58, 59, 60, 62, 66]) + FOLLOW_declarator_in_direct_declarator834 = frozenset([63]) + FOLLOW_63_in_direct_declarator836 = frozenset([62, 64]) + FOLLOW_declarator_suffix_in_direct_declarator838 = frozenset([1, 62, 64]) + FOLLOW_64_in_declarator_suffix852 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_constant_expression_in_declarator_suffix854 = frozenset([65]) + FOLLOW_65_in_declarator_suffix856 = frozenset([1]) + FOLLOW_64_in_declarator_suffix866 = frozenset([65]) + FOLLOW_65_in_declarator_suffix868 = frozenset([1]) + FOLLOW_62_in_declarator_suffix878 = frozenset([4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 66]) + FOLLOW_parameter_type_list_in_declarator_suffix880 = frozenset([63]) + FOLLOW_63_in_declarator_suffix882 = frozenset([1]) + FOLLOW_62_in_declarator_suffix892 = frozenset([4]) + FOLLOW_identifier_list_in_declarator_suffix894 = frozenset([63]) + FOLLOW_63_in_declarator_suffix896 = frozenset([1]) + FOLLOW_62_in_declarator_suffix906 = frozenset([63]) + FOLLOW_63_in_declarator_suffix908 = frozenset([1]) + FOLLOW_66_in_pointer919 = frozenset([49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61]) + FOLLOW_type_qualifier_in_pointer921 = frozenset([1, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 66]) + FOLLOW_pointer_in_pointer924 = frozenset([1]) + FOLLOW_66_in_pointer930 = frozenset([66]) + FOLLOW_pointer_in_pointer932 = frozenset([1]) + FOLLOW_66_in_pointer937 = frozenset([1]) + FOLLOW_parameter_list_in_parameter_type_list948 = frozenset([1, 27]) + FOLLOW_27_in_parameter_type_list951 = frozenset([53, 67]) + FOLLOW_53_in_parameter_type_list954 = frozenset([67]) + FOLLOW_67_in_parameter_type_list958 = frozenset([1]) + FOLLOW_parameter_declaration_in_parameter_list971 = frozenset([1, 27]) + FOLLOW_27_in_parameter_list974 = frozenset([4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 66]) + FOLLOW_53_in_parameter_list977 = frozenset([4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 66]) + FOLLOW_parameter_declaration_in_parameter_list981 = frozenset([1, 27]) + FOLLOW_declaration_specifiers_in_parameter_declaration994 = frozenset([1, 4, 53, 58, 59, 60, 62, 64, 66]) + FOLLOW_declarator_in_parameter_declaration997 = frozenset([1, 4, 53, 58, 59, 60, 62, 64, 66]) + FOLLOW_abstract_declarator_in_parameter_declaration999 = frozenset([1, 4, 53, 58, 59, 60, 62, 64, 66]) + FOLLOW_53_in_parameter_declaration1004 = frozenset([1]) + FOLLOW_pointer_in_parameter_declaration1013 = frozenset([4, 66]) + FOLLOW_IDENTIFIER_in_parameter_declaration1016 = frozenset([1]) + FOLLOW_IDENTIFIER_in_identifier_list1027 = frozenset([1, 27]) + FOLLOW_27_in_identifier_list1031 = frozenset([4]) + FOLLOW_IDENTIFIER_in_identifier_list1033 = frozenset([1, 27]) + FOLLOW_specifier_qualifier_list_in_type_name1046 = frozenset([1, 62, 64, 66]) + FOLLOW_abstract_declarator_in_type_name1048 = frozenset([1]) + FOLLOW_type_id_in_type_name1054 = frozenset([1]) + FOLLOW_pointer_in_abstract_declarator1065 = frozenset([1, 62, 64]) + FOLLOW_direct_abstract_declarator_in_abstract_declarator1067 = frozenset([1]) + FOLLOW_direct_abstract_declarator_in_abstract_declarator1073 = frozenset([1]) + FOLLOW_62_in_direct_abstract_declarator1086 = frozenset([62, 64, 66]) + FOLLOW_abstract_declarator_in_direct_abstract_declarator1088 = frozenset([63]) + FOLLOW_63_in_direct_abstract_declarator1090 = frozenset([1, 62, 64]) + FOLLOW_abstract_declarator_suffix_in_direct_abstract_declarator1094 = frozenset([1, 62, 64]) + FOLLOW_abstract_declarator_suffix_in_direct_abstract_declarator1098 = frozenset([1, 62, 64]) + FOLLOW_64_in_abstract_declarator_suffix1110 = frozenset([65]) + FOLLOW_65_in_abstract_declarator_suffix1112 = frozenset([1]) + FOLLOW_64_in_abstract_declarator_suffix1117 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_constant_expression_in_abstract_declarator_suffix1119 = frozenset([65]) + FOLLOW_65_in_abstract_declarator_suffix1121 = frozenset([1]) + FOLLOW_62_in_abstract_declarator_suffix1126 = frozenset([63]) + FOLLOW_63_in_abstract_declarator_suffix1128 = frozenset([1]) + FOLLOW_62_in_abstract_declarator_suffix1133 = frozenset([4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 66]) + FOLLOW_parameter_type_list_in_abstract_declarator_suffix1135 = frozenset([63]) + FOLLOW_63_in_abstract_declarator_suffix1137 = frozenset([1]) + FOLLOW_assignment_expression_in_initializer1150 = frozenset([1]) + FOLLOW_43_in_initializer1155 = frozenset([4, 5, 6, 7, 8, 9, 10, 43, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_initializer_list_in_initializer1157 = frozenset([27, 44]) + FOLLOW_27_in_initializer1159 = frozenset([44]) + FOLLOW_44_in_initializer1162 = frozenset([1]) + FOLLOW_initializer_in_initializer_list1173 = frozenset([1, 27]) + FOLLOW_27_in_initializer_list1176 = frozenset([4, 5, 6, 7, 8, 9, 10, 43, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_initializer_in_initializer_list1178 = frozenset([1, 27]) + FOLLOW_assignment_expression_in_argument_expression_list1196 = frozenset([1, 27, 53]) + FOLLOW_53_in_argument_expression_list1199 = frozenset([1, 27]) + FOLLOW_27_in_argument_expression_list1204 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_assignment_expression_in_argument_expression_list1206 = frozenset([1, 27, 53]) + FOLLOW_53_in_argument_expression_list1209 = frozenset([1, 27]) + FOLLOW_multiplicative_expression_in_additive_expression1225 = frozenset([1, 68, 69]) + FOLLOW_68_in_additive_expression1229 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_multiplicative_expression_in_additive_expression1231 = frozenset([1, 68, 69]) + FOLLOW_69_in_additive_expression1235 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_multiplicative_expression_in_additive_expression1237 = frozenset([1, 68, 69]) + FOLLOW_cast_expression_in_multiplicative_expression1251 = frozenset([1, 66, 70, 71]) + FOLLOW_66_in_multiplicative_expression1255 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_cast_expression_in_multiplicative_expression1257 = frozenset([1, 66, 70, 71]) + FOLLOW_70_in_multiplicative_expression1261 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_cast_expression_in_multiplicative_expression1263 = frozenset([1, 66, 70, 71]) + FOLLOW_71_in_multiplicative_expression1267 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_cast_expression_in_multiplicative_expression1269 = frozenset([1, 66, 70, 71]) + FOLLOW_62_in_cast_expression1282 = frozenset([4, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61]) + FOLLOW_type_name_in_cast_expression1284 = frozenset([63]) + FOLLOW_63_in_cast_expression1286 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_cast_expression_in_cast_expression1288 = frozenset([1]) + FOLLOW_unary_expression_in_cast_expression1293 = frozenset([1]) + FOLLOW_postfix_expression_in_unary_expression1304 = frozenset([1]) + FOLLOW_72_in_unary_expression1309 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_unary_expression_in_unary_expression1311 = frozenset([1]) + FOLLOW_73_in_unary_expression1316 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_unary_expression_in_unary_expression1318 = frozenset([1]) + FOLLOW_unary_operator_in_unary_expression1323 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_cast_expression_in_unary_expression1325 = frozenset([1]) + FOLLOW_74_in_unary_expression1330 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_unary_expression_in_unary_expression1332 = frozenset([1]) + FOLLOW_74_in_unary_expression1337 = frozenset([62]) + FOLLOW_62_in_unary_expression1339 = frozenset([4, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61]) + FOLLOW_type_name_in_unary_expression1341 = frozenset([63]) + FOLLOW_63_in_unary_expression1343 = frozenset([1]) + FOLLOW_primary_expression_in_postfix_expression1367 = frozenset([1, 62, 64, 66, 72, 73, 75, 76]) + FOLLOW_64_in_postfix_expression1383 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_expression_in_postfix_expression1385 = frozenset([65]) + FOLLOW_65_in_postfix_expression1387 = frozenset([1, 62, 64, 66, 72, 73, 75, 76]) + FOLLOW_62_in_postfix_expression1401 = frozenset([63]) + FOLLOW_63_in_postfix_expression1405 = frozenset([1, 62, 64, 66, 72, 73, 75, 76]) + FOLLOW_62_in_postfix_expression1420 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_argument_expression_list_in_postfix_expression1424 = frozenset([63]) + FOLLOW_63_in_postfix_expression1428 = frozenset([1, 62, 64, 66, 72, 73, 75, 76]) + FOLLOW_62_in_postfix_expression1444 = frozenset([4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 66]) + FOLLOW_macro_parameter_list_in_postfix_expression1446 = frozenset([63]) + FOLLOW_63_in_postfix_expression1448 = frozenset([1, 62, 64, 66, 72, 73, 75, 76]) + FOLLOW_75_in_postfix_expression1462 = frozenset([4]) + FOLLOW_IDENTIFIER_in_postfix_expression1466 = frozenset([1, 62, 64, 66, 72, 73, 75, 76]) + FOLLOW_66_in_postfix_expression1482 = frozenset([4]) + FOLLOW_IDENTIFIER_in_postfix_expression1486 = frozenset([1, 62, 64, 66, 72, 73, 75, 76]) + FOLLOW_76_in_postfix_expression1502 = frozenset([4]) + FOLLOW_IDENTIFIER_in_postfix_expression1506 = frozenset([1, 62, 64, 66, 72, 73, 75, 76]) + FOLLOW_72_in_postfix_expression1522 = frozenset([1, 62, 64, 66, 72, 73, 75, 76]) + FOLLOW_73_in_postfix_expression1536 = frozenset([1, 62, 64, 66, 72, 73, 75, 76]) + FOLLOW_parameter_declaration_in_macro_parameter_list1559 = frozenset([1, 27]) + FOLLOW_27_in_macro_parameter_list1562 = frozenset([4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 66]) + FOLLOW_parameter_declaration_in_macro_parameter_list1564 = frozenset([1, 27]) FOLLOW_set_in_unary_operator0 = frozenset([1]) - FOLLOW_IDENTIFIER_in_primary_expression1598 = frozenset([1]) - FOLLOW_constant_in_primary_expression1603 = frozenset([1]) - FOLLOW_61_in_primary_expression1608 = frozenset([4, 5, 6, 7, 8, 9, 10, 61, 65, 67, 68, 71, 72, 73, 76, 77, 78]) - FOLLOW_expression_in_primary_expression1610 = frozenset([62]) - FOLLOW_62_in_primary_expression1612 = frozenset([1]) - FOLLOW_HEX_LITERAL_in_constant1628 = frozenset([1]) - FOLLOW_OCTAL_LITERAL_in_constant1638 = frozenset([1]) - FOLLOW_DECIMAL_LITERAL_in_constant1648 = frozenset([1]) - FOLLOW_CHARACTER_LITERAL_in_constant1656 = frozenset([1]) - FOLLOW_IDENTIFIER_in_constant1665 = frozenset([4, 9]) - FOLLOW_STRING_LITERAL_in_constant1668 = frozenset([1, 4, 9]) - FOLLOW_IDENTIFIER_in_constant1673 = frozenset([1, 4]) - FOLLOW_FLOATING_POINT_LITERAL_in_constant1684 = frozenset([1]) - FOLLOW_assignment_expression_in_expression1700 = frozenset([1, 27]) - FOLLOW_27_in_expression1703 = frozenset([4, 5, 6, 7, 8, 9, 10, 61, 65, 67, 68, 71, 72, 73, 76, 77, 78]) - FOLLOW_assignment_expression_in_expression1705 = frozenset([1, 27]) - FOLLOW_conditional_expression_in_constant_expression1718 = frozenset([1]) - FOLLOW_lvalue_in_assignment_expression1729 = frozenset([28, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88]) - FOLLOW_assignment_operator_in_assignment_expression1731 = frozenset([4, 5, 6, 7, 8, 9, 10, 61, 65, 67, 68, 71, 72, 73, 76, 77, 78]) - FOLLOW_assignment_expression_in_assignment_expression1733 = frozenset([1]) - FOLLOW_conditional_expression_in_assignment_expression1738 = frozenset([1]) - FOLLOW_unary_expression_in_lvalue1750 = frozenset([1]) + FOLLOW_IDENTIFIER_in_primary_expression1613 = frozenset([1]) + FOLLOW_constant_in_primary_expression1618 = frozenset([1]) + FOLLOW_62_in_primary_expression1623 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_expression_in_primary_expression1625 = frozenset([63]) + FOLLOW_63_in_primary_expression1627 = frozenset([1]) + FOLLOW_HEX_LITERAL_in_constant1643 = frozenset([1]) + FOLLOW_OCTAL_LITERAL_in_constant1653 = frozenset([1]) + FOLLOW_DECIMAL_LITERAL_in_constant1663 = frozenset([1]) + FOLLOW_CHARACTER_LITERAL_in_constant1671 = frozenset([1]) + FOLLOW_IDENTIFIER_in_constant1680 = frozenset([4, 9]) + FOLLOW_STRING_LITERAL_in_constant1683 = frozenset([1, 4, 9]) + FOLLOW_IDENTIFIER_in_constant1688 = frozenset([1, 4]) + FOLLOW_FLOATING_POINT_LITERAL_in_constant1699 = frozenset([1]) + FOLLOW_assignment_expression_in_expression1715 = frozenset([1, 27]) + FOLLOW_27_in_expression1718 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_assignment_expression_in_expression1720 = frozenset([1, 27]) + FOLLOW_conditional_expression_in_constant_expression1733 = frozenset([1]) + FOLLOW_lvalue_in_assignment_expression1744 = frozenset([28, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89]) + FOLLOW_assignment_operator_in_assignment_expression1746 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_assignment_expression_in_assignment_expression1748 = frozenset([1]) + FOLLOW_conditional_expression_in_assignment_expression1753 = frozenset([1]) + FOLLOW_unary_expression_in_lvalue1765 = frozenset([1]) FOLLOW_set_in_assignment_operator0 = frozenset([1]) - FOLLOW_logical_or_expression_in_conditional_expression1824 = frozenset([1, 89]) - FOLLOW_89_in_conditional_expression1827 = frozenset([4, 5, 6, 7, 8, 9, 10, 61, 65, 67, 68, 71, 72, 73, 76, 77, 78]) - FOLLOW_expression_in_conditional_expression1829 = frozenset([47]) - FOLLOW_47_in_conditional_expression1831 = frozenset([4, 5, 6, 7, 8, 9, 10, 61, 65, 67, 68, 71, 72, 73, 76, 77, 78]) - FOLLOW_conditional_expression_in_conditional_expression1833 = frozenset([1]) - FOLLOW_logical_and_expression_in_logical_or_expression1848 = frozenset([1, 90]) - FOLLOW_90_in_logical_or_expression1851 = frozenset([4, 5, 6, 7, 8, 9, 10, 61, 65, 67, 68, 71, 72, 73, 76, 77, 78]) - FOLLOW_logical_and_expression_in_logical_or_expression1853 = frozenset([1, 90]) - FOLLOW_inclusive_or_expression_in_logical_and_expression1866 = frozenset([1, 91]) - FOLLOW_91_in_logical_and_expression1869 = frozenset([4, 5, 6, 7, 8, 9, 10, 61, 65, 67, 68, 71, 72, 73, 76, 77, 78]) - FOLLOW_inclusive_or_expression_in_logical_and_expression1871 = frozenset([1, 91]) - FOLLOW_exclusive_or_expression_in_inclusive_or_expression1884 = frozenset([1, 92]) - FOLLOW_92_in_inclusive_or_expression1887 = frozenset([4, 5, 6, 7, 8, 9, 10, 61, 65, 67, 68, 71, 72, 73, 76, 77, 78]) - FOLLOW_exclusive_or_expression_in_inclusive_or_expression1889 = frozenset([1, 92]) - FOLLOW_and_expression_in_exclusive_or_expression1902 = frozenset([1, 93]) - FOLLOW_93_in_exclusive_or_expression1905 = frozenset([4, 5, 6, 7, 8, 9, 10, 61, 65, 67, 68, 71, 72, 73, 76, 77, 78]) - FOLLOW_and_expression_in_exclusive_or_expression1907 = frozenset([1, 93]) - FOLLOW_equality_expression_in_and_expression1920 = frozenset([1, 76]) - FOLLOW_76_in_and_expression1923 = frozenset([4, 5, 6, 7, 8, 9, 10, 61, 65, 67, 68, 71, 72, 73, 76, 77, 78]) - FOLLOW_equality_expression_in_and_expression1925 = frozenset([1, 76]) - FOLLOW_relational_expression_in_equality_expression1937 = frozenset([1, 94, 95]) - FOLLOW_set_in_equality_expression1940 = frozenset([4, 5, 6, 7, 8, 9, 10, 61, 65, 67, 68, 71, 72, 73, 76, 77, 78]) - FOLLOW_relational_expression_in_equality_expression1946 = frozenset([1, 94, 95]) - FOLLOW_shift_expression_in_relational_expression1960 = frozenset([1, 96, 97, 98, 99]) - FOLLOW_set_in_relational_expression1963 = frozenset([4, 5, 6, 7, 8, 9, 10, 61, 65, 67, 68, 71, 72, 73, 76, 77, 78]) - FOLLOW_shift_expression_in_relational_expression1973 = frozenset([1, 96, 97, 98, 99]) - FOLLOW_additive_expression_in_shift_expression1986 = frozenset([1, 100, 101]) - FOLLOW_set_in_shift_expression1989 = frozenset([4, 5, 6, 7, 8, 9, 10, 61, 65, 67, 68, 71, 72, 73, 76, 77, 78]) - FOLLOW_additive_expression_in_shift_expression1995 = frozenset([1, 100, 101]) - FOLLOW_labeled_statement_in_statement2010 = frozenset([1]) - FOLLOW_compound_statement_in_statement2015 = frozenset([1]) - FOLLOW_expression_statement_in_statement2020 = frozenset([1]) - FOLLOW_selection_statement_in_statement2025 = frozenset([1]) - FOLLOW_iteration_statement_in_statement2030 = frozenset([1]) - FOLLOW_jump_statement_in_statement2035 = frozenset([1]) - FOLLOW_macro_statement_in_statement2040 = frozenset([1]) - FOLLOW_asm2_statement_in_statement2045 = frozenset([1]) - FOLLOW_asm1_statement_in_statement2050 = frozenset([1]) - FOLLOW_asm_statement_in_statement2055 = frozenset([1]) - FOLLOW_declaration_in_statement2060 = frozenset([1]) - FOLLOW_102_in_asm2_statement2071 = frozenset([4]) - FOLLOW_IDENTIFIER_in_asm2_statement2074 = frozenset([61]) - FOLLOW_61_in_asm2_statement2076 = frozenset([4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116]) - FOLLOW_set_in_asm2_statement2079 = frozenset([4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116]) - FOLLOW_62_in_asm2_statement2086 = frozenset([25]) - FOLLOW_25_in_asm2_statement2088 = frozenset([1]) - FOLLOW_103_in_asm1_statement2100 = frozenset([43]) - FOLLOW_43_in_asm1_statement2102 = frozenset([4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116]) - FOLLOW_set_in_asm1_statement2105 = frozenset([4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116]) - FOLLOW_44_in_asm1_statement2112 = frozenset([1]) - FOLLOW_104_in_asm_statement2123 = frozenset([43]) - FOLLOW_43_in_asm_statement2125 = frozenset([4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116]) - FOLLOW_set_in_asm_statement2128 = frozenset([4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116]) - FOLLOW_44_in_asm_statement2135 = frozenset([1]) - FOLLOW_IDENTIFIER_in_macro_statement2147 = frozenset([61]) - FOLLOW_61_in_macro_statement2149 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 65, 67, 68, 71, 72, 73, 76, 77, 78, 102, 103, 104, 105, 106, 107, 109, 110, 111, 112, 113, 114, 115, 116]) - FOLLOW_declaration_in_macro_statement2151 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 65, 67, 68, 71, 72, 73, 76, 77, 78, 102, 103, 104, 105, 106, 107, 109, 110, 111, 112, 113, 114, 115, 116]) - FOLLOW_statement_list_in_macro_statement2155 = frozenset([4, 5, 6, 7, 8, 9, 10, 61, 62, 65, 67, 68, 71, 72, 73, 76, 77, 78]) - FOLLOW_expression_in_macro_statement2158 = frozenset([62]) - FOLLOW_62_in_macro_statement2161 = frozenset([1]) - FOLLOW_IDENTIFIER_in_labeled_statement2173 = frozenset([47]) - FOLLOW_47_in_labeled_statement2175 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 65, 67, 68, 71, 72, 73, 76, 77, 78, 102, 103, 104, 105, 106, 107, 109, 110, 111, 112, 113, 114, 115, 116]) - FOLLOW_statement_in_labeled_statement2177 = frozenset([1]) - FOLLOW_105_in_labeled_statement2182 = frozenset([4, 5, 6, 7, 8, 9, 10, 61, 65, 67, 68, 71, 72, 73, 76, 77, 78]) - FOLLOW_constant_expression_in_labeled_statement2184 = frozenset([47]) - FOLLOW_47_in_labeled_statement2186 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 65, 67, 68, 71, 72, 73, 76, 77, 78, 102, 103, 104, 105, 106, 107, 109, 110, 111, 112, 113, 114, 115, 116]) - FOLLOW_statement_in_labeled_statement2188 = frozenset([1]) - FOLLOW_106_in_labeled_statement2193 = frozenset([47]) - FOLLOW_47_in_labeled_statement2195 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 65, 67, 68, 71, 72, 73, 76, 77, 78, 102, 103, 104, 105, 106, 107, 109, 110, 111, 112, 113, 114, 115, 116]) - FOLLOW_statement_in_labeled_statement2197 = frozenset([1]) - FOLLOW_43_in_compound_statement2208 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 65, 67, 68, 71, 72, 73, 76, 77, 78, 102, 103, 104, 105, 106, 107, 109, 110, 111, 112, 113, 114, 115, 116]) - FOLLOW_declaration_in_compound_statement2210 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 65, 67, 68, 71, 72, 73, 76, 77, 78, 102, 103, 104, 105, 106, 107, 109, 110, 111, 112, 113, 114, 115, 116]) - FOLLOW_statement_list_in_compound_statement2213 = frozenset([44]) - FOLLOW_44_in_compound_statement2216 = frozenset([1]) - FOLLOW_statement_in_statement_list2227 = frozenset([1, 4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 65, 67, 68, 71, 72, 73, 76, 77, 78, 102, 103, 104, 105, 106, 107, 109, 110, 111, 112, 113, 114, 115, 116]) - FOLLOW_25_in_expression_statement2239 = frozenset([1]) - FOLLOW_expression_in_expression_statement2244 = frozenset([25]) - FOLLOW_25_in_expression_statement2246 = frozenset([1]) - FOLLOW_107_in_selection_statement2257 = frozenset([61]) - FOLLOW_61_in_selection_statement2259 = frozenset([4, 5, 6, 7, 8, 9, 10, 61, 65, 67, 68, 71, 72, 73, 76, 77, 78]) - FOLLOW_expression_in_selection_statement2263 = frozenset([62]) - FOLLOW_62_in_selection_statement2265 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 65, 67, 68, 71, 72, 73, 76, 77, 78, 102, 103, 104, 105, 106, 107, 109, 110, 111, 112, 113, 114, 115, 116]) - FOLLOW_statement_in_selection_statement2269 = frozenset([1, 108]) - FOLLOW_108_in_selection_statement2284 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 65, 67, 68, 71, 72, 73, 76, 77, 78, 102, 103, 104, 105, 106, 107, 109, 110, 111, 112, 113, 114, 115, 116]) - FOLLOW_statement_in_selection_statement2286 = frozenset([1]) - FOLLOW_109_in_selection_statement2293 = frozenset([61]) - FOLLOW_61_in_selection_statement2295 = frozenset([4, 5, 6, 7, 8, 9, 10, 61, 65, 67, 68, 71, 72, 73, 76, 77, 78]) - FOLLOW_expression_in_selection_statement2297 = frozenset([62]) - FOLLOW_62_in_selection_statement2299 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 65, 67, 68, 71, 72, 73, 76, 77, 78, 102, 103, 104, 105, 106, 107, 109, 110, 111, 112, 113, 114, 115, 116]) + FOLLOW_logical_or_expression_in_conditional_expression1839 = frozenset([1, 90]) + FOLLOW_90_in_conditional_expression1842 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_expression_in_conditional_expression1844 = frozenset([47]) + FOLLOW_47_in_conditional_expression1846 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_conditional_expression_in_conditional_expression1848 = frozenset([1]) + FOLLOW_logical_and_expression_in_logical_or_expression1863 = frozenset([1, 91]) + FOLLOW_91_in_logical_or_expression1866 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_logical_and_expression_in_logical_or_expression1868 = frozenset([1, 91]) + FOLLOW_inclusive_or_expression_in_logical_and_expression1881 = frozenset([1, 92]) + FOLLOW_92_in_logical_and_expression1884 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_inclusive_or_expression_in_logical_and_expression1886 = frozenset([1, 92]) + FOLLOW_exclusive_or_expression_in_inclusive_or_expression1899 = frozenset([1, 93]) + FOLLOW_93_in_inclusive_or_expression1902 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_exclusive_or_expression_in_inclusive_or_expression1904 = frozenset([1, 93]) + FOLLOW_and_expression_in_exclusive_or_expression1917 = frozenset([1, 94]) + FOLLOW_94_in_exclusive_or_expression1920 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_and_expression_in_exclusive_or_expression1922 = frozenset([1, 94]) + FOLLOW_equality_expression_in_and_expression1935 = frozenset([1, 77]) + FOLLOW_77_in_and_expression1938 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_equality_expression_in_and_expression1940 = frozenset([1, 77]) + FOLLOW_relational_expression_in_equality_expression1952 = frozenset([1, 95, 96]) + FOLLOW_set_in_equality_expression1955 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_relational_expression_in_equality_expression1961 = frozenset([1, 95, 96]) + FOLLOW_shift_expression_in_relational_expression1975 = frozenset([1, 97, 98, 99, 100]) + FOLLOW_set_in_relational_expression1978 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_shift_expression_in_relational_expression1988 = frozenset([1, 97, 98, 99, 100]) + FOLLOW_additive_expression_in_shift_expression2001 = frozenset([1, 101, 102]) + FOLLOW_set_in_shift_expression2004 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_additive_expression_in_shift_expression2010 = frozenset([1, 101, 102]) + FOLLOW_labeled_statement_in_statement2025 = frozenset([1]) + FOLLOW_compound_statement_in_statement2030 = frozenset([1]) + FOLLOW_expression_statement_in_statement2035 = frozenset([1]) + FOLLOW_selection_statement_in_statement2040 = frozenset([1]) + FOLLOW_iteration_statement_in_statement2045 = frozenset([1]) + FOLLOW_jump_statement_in_statement2050 = frozenset([1]) + FOLLOW_macro_statement_in_statement2055 = frozenset([1]) + FOLLOW_asm2_statement_in_statement2060 = frozenset([1]) + FOLLOW_asm1_statement_in_statement2065 = frozenset([1]) + FOLLOW_asm_statement_in_statement2070 = frozenset([1]) + FOLLOW_declaration_in_statement2075 = frozenset([1]) + FOLLOW_103_in_asm2_statement2086 = frozenset([4]) + FOLLOW_IDENTIFIER_in_asm2_statement2089 = frozenset([62]) + FOLLOW_62_in_asm2_statement2091 = frozenset([4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117]) + FOLLOW_set_in_asm2_statement2094 = frozenset([4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117]) + FOLLOW_63_in_asm2_statement2101 = frozenset([25]) + FOLLOW_25_in_asm2_statement2103 = frozenset([1]) + FOLLOW_104_in_asm1_statement2115 = frozenset([43]) + FOLLOW_43_in_asm1_statement2117 = frozenset([4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117]) + FOLLOW_set_in_asm1_statement2120 = frozenset([4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117]) + FOLLOW_44_in_asm1_statement2127 = frozenset([1]) + FOLLOW_105_in_asm_statement2138 = frozenset([43]) + FOLLOW_43_in_asm_statement2140 = frozenset([4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117]) + FOLLOW_set_in_asm_statement2143 = frozenset([4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117]) + FOLLOW_44_in_asm_statement2150 = frozenset([1]) + FOLLOW_IDENTIFIER_in_macro_statement2162 = frozenset([62]) + FOLLOW_62_in_macro_statement2164 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 66, 68, 69, 72, 73, 74, 77, 78, 79, 103, 104, 105, 106, 107, 108, 110, 111, 112, 113, 114, 115, 116, 117]) + FOLLOW_declaration_in_macro_statement2166 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 66, 68, 69, 72, 73, 74, 77, 78, 79, 103, 104, 105, 106, 107, 108, 110, 111, 112, 113, 114, 115, 116, 117]) + FOLLOW_statement_list_in_macro_statement2170 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 63, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_expression_in_macro_statement2173 = frozenset([63]) + FOLLOW_63_in_macro_statement2176 = frozenset([1]) + FOLLOW_IDENTIFIER_in_labeled_statement2188 = frozenset([47]) + FOLLOW_47_in_labeled_statement2190 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79, 103, 104, 105, 106, 107, 108, 110, 111, 112, 113, 114, 115, 116, 117]) + FOLLOW_statement_in_labeled_statement2192 = frozenset([1]) + FOLLOW_106_in_labeled_statement2197 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_constant_expression_in_labeled_statement2199 = frozenset([47]) + FOLLOW_47_in_labeled_statement2201 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79, 103, 104, 105, 106, 107, 108, 110, 111, 112, 113, 114, 115, 116, 117]) + FOLLOW_statement_in_labeled_statement2203 = frozenset([1]) + FOLLOW_107_in_labeled_statement2208 = frozenset([47]) + FOLLOW_47_in_labeled_statement2210 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79, 103, 104, 105, 106, 107, 108, 110, 111, 112, 113, 114, 115, 116, 117]) + FOLLOW_statement_in_labeled_statement2212 = frozenset([1]) + FOLLOW_43_in_compound_statement2223 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79, 103, 104, 105, 106, 107, 108, 110, 111, 112, 113, 114, 115, 116, 117]) + FOLLOW_declaration_in_compound_statement2225 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79, 103, 104, 105, 106, 107, 108, 110, 111, 112, 113, 114, 115, 116, 117]) + FOLLOW_statement_list_in_compound_statement2228 = frozenset([44]) + FOLLOW_44_in_compound_statement2231 = frozenset([1]) + FOLLOW_statement_in_statement_list2242 = frozenset([1, 4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79, 103, 104, 105, 106, 107, 108, 110, 111, 112, 113, 114, 115, 116, 117]) + FOLLOW_25_in_expression_statement2254 = frozenset([1]) + FOLLOW_expression_in_expression_statement2259 = frozenset([25]) + FOLLOW_25_in_expression_statement2261 = frozenset([1]) + FOLLOW_108_in_selection_statement2272 = frozenset([62]) + FOLLOW_62_in_selection_statement2274 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_expression_in_selection_statement2278 = frozenset([63]) + FOLLOW_63_in_selection_statement2280 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79, 103, 104, 105, 106, 107, 108, 110, 111, 112, 113, 114, 115, 116, 117]) + FOLLOW_statement_in_selection_statement2284 = frozenset([1, 109]) + FOLLOW_109_in_selection_statement2299 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79, 103, 104, 105, 106, 107, 108, 110, 111, 112, 113, 114, 115, 116, 117]) FOLLOW_statement_in_selection_statement2301 = frozenset([1]) - FOLLOW_110_in_iteration_statement2312 = frozenset([61]) - FOLLOW_61_in_iteration_statement2314 = frozenset([4, 5, 6, 7, 8, 9, 10, 61, 65, 67, 68, 71, 72, 73, 76, 77, 78]) - FOLLOW_expression_in_iteration_statement2318 = frozenset([62]) - FOLLOW_62_in_iteration_statement2320 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 65, 67, 68, 71, 72, 73, 76, 77, 78, 102, 103, 104, 105, 106, 107, 109, 110, 111, 112, 113, 114, 115, 116]) - FOLLOW_statement_in_iteration_statement2322 = frozenset([1]) - FOLLOW_111_in_iteration_statement2329 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 65, 67, 68, 71, 72, 73, 76, 77, 78, 102, 103, 104, 105, 106, 107, 109, 110, 111, 112, 113, 114, 115, 116]) - FOLLOW_statement_in_iteration_statement2331 = frozenset([110]) - FOLLOW_110_in_iteration_statement2333 = frozenset([61]) - FOLLOW_61_in_iteration_statement2335 = frozenset([4, 5, 6, 7, 8, 9, 10, 61, 65, 67, 68, 71, 72, 73, 76, 77, 78]) - FOLLOW_expression_in_iteration_statement2339 = frozenset([62]) - FOLLOW_62_in_iteration_statement2341 = frozenset([25]) - FOLLOW_25_in_iteration_statement2343 = frozenset([1]) - FOLLOW_112_in_iteration_statement2350 = frozenset([61]) - FOLLOW_61_in_iteration_statement2352 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 61, 65, 67, 68, 71, 72, 73, 76, 77, 78]) - FOLLOW_expression_statement_in_iteration_statement2354 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 61, 65, 67, 68, 71, 72, 73, 76, 77, 78]) - FOLLOW_expression_statement_in_iteration_statement2358 = frozenset([4, 5, 6, 7, 8, 9, 10, 61, 62, 65, 67, 68, 71, 72, 73, 76, 77, 78]) - FOLLOW_expression_in_iteration_statement2360 = frozenset([62]) - FOLLOW_62_in_iteration_statement2363 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 65, 67, 68, 71, 72, 73, 76, 77, 78, 102, 103, 104, 105, 106, 107, 109, 110, 111, 112, 113, 114, 115, 116]) - FOLLOW_statement_in_iteration_statement2365 = frozenset([1]) - FOLLOW_113_in_jump_statement2378 = frozenset([4]) - FOLLOW_IDENTIFIER_in_jump_statement2380 = frozenset([25]) - FOLLOW_25_in_jump_statement2382 = frozenset([1]) - FOLLOW_114_in_jump_statement2387 = frozenset([25]) - FOLLOW_25_in_jump_statement2389 = frozenset([1]) - FOLLOW_115_in_jump_statement2394 = frozenset([25]) - FOLLOW_25_in_jump_statement2396 = frozenset([1]) - FOLLOW_116_in_jump_statement2401 = frozenset([25]) - FOLLOW_25_in_jump_statement2403 = frozenset([1]) - FOLLOW_116_in_jump_statement2408 = frozenset([4, 5, 6, 7, 8, 9, 10, 61, 65, 67, 68, 71, 72, 73, 76, 77, 78]) - FOLLOW_expression_in_jump_statement2410 = frozenset([25]) - FOLLOW_25_in_jump_statement2412 = frozenset([1]) - FOLLOW_declaration_specifiers_in_synpred290 = frozenset([1]) - FOLLOW_declaration_specifiers_in_synpred490 = frozenset([4, 58, 59, 60, 61, 65]) - FOLLOW_declarator_in_synpred493 = frozenset([4, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60]) - FOLLOW_declaration_in_synpred495 = frozenset([4, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60]) - FOLLOW_43_in_synpred498 = frozenset([1]) - FOLLOW_declaration_in_synpred5108 = frozenset([1]) - FOLLOW_declaration_specifiers_in_synpred7147 = frozenset([1]) - FOLLOW_declaration_specifiers_in_synpred10197 = frozenset([1]) - FOLLOW_type_specifier_in_synpred14262 = frozenset([1]) - FOLLOW_type_qualifier_in_synpred15276 = frozenset([1]) - FOLLOW_type_qualifier_in_synpred33434 = frozenset([1]) - FOLLOW_IDENTIFIER_in_synpred34432 = frozenset([4, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 65]) - FOLLOW_type_qualifier_in_synpred34434 = frozenset([4, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 65]) - FOLLOW_declarator_in_synpred34437 = frozenset([1]) - FOLLOW_type_qualifier_in_synpred39556 = frozenset([1]) - FOLLOW_type_specifier_in_synpred40560 = frozenset([1]) - FOLLOW_pointer_in_synpred65769 = frozenset([4, 58, 59, 60, 61]) - FOLLOW_58_in_synpred65773 = frozenset([4, 59, 60, 61]) - FOLLOW_59_in_synpred65778 = frozenset([4, 60, 61]) - FOLLOW_60_in_synpred65783 = frozenset([4, 61]) - FOLLOW_direct_declarator_in_synpred65787 = frozenset([1]) - FOLLOW_declarator_suffix_in_synpred66806 = frozenset([1]) - FOLLOW_58_in_synpred68815 = frozenset([1]) - FOLLOW_declarator_suffix_in_synpred69823 = frozenset([1]) - FOLLOW_61_in_synpred72863 = frozenset([4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 65]) - FOLLOW_parameter_type_list_in_synpred72865 = frozenset([62]) - FOLLOW_62_in_synpred72867 = frozenset([1]) - FOLLOW_61_in_synpred73877 = frozenset([4]) - FOLLOW_identifier_list_in_synpred73879 = frozenset([62]) - FOLLOW_62_in_synpred73881 = frozenset([1]) - FOLLOW_type_qualifier_in_synpred74906 = frozenset([1]) - FOLLOW_pointer_in_synpred75909 = frozenset([1]) - FOLLOW_65_in_synpred76904 = frozenset([49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60]) - FOLLOW_type_qualifier_in_synpred76906 = frozenset([1, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 65]) - FOLLOW_pointer_in_synpred76909 = frozenset([1]) - FOLLOW_65_in_synpred77915 = frozenset([65]) - FOLLOW_pointer_in_synpred77917 = frozenset([1]) - FOLLOW_53_in_synpred80962 = frozenset([1]) - FOLLOW_27_in_synpred81959 = frozenset([4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 65]) - FOLLOW_53_in_synpred81962 = frozenset([4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 65]) - FOLLOW_parameter_declaration_in_synpred81966 = frozenset([1]) - FOLLOW_declarator_in_synpred82982 = frozenset([1]) - FOLLOW_abstract_declarator_in_synpred83984 = frozenset([1]) - FOLLOW_declaration_specifiers_in_synpred85979 = frozenset([1, 4, 53, 58, 59, 60, 61, 63, 65]) - FOLLOW_declarator_in_synpred85982 = frozenset([1, 4, 53, 58, 59, 60, 61, 63, 65]) - FOLLOW_abstract_declarator_in_synpred85984 = frozenset([1, 4, 53, 58, 59, 60, 61, 63, 65]) - FOLLOW_53_in_synpred85989 = frozenset([1]) - FOLLOW_specifier_qualifier_list_in_synpred891031 = frozenset([1, 61, 63, 65]) - FOLLOW_abstract_declarator_in_synpred891033 = frozenset([1]) - FOLLOW_direct_abstract_declarator_in_synpred901052 = frozenset([1]) - FOLLOW_61_in_synpred921071 = frozenset([61, 63, 65]) - FOLLOW_abstract_declarator_in_synpred921073 = frozenset([62]) - FOLLOW_62_in_synpred921075 = frozenset([1]) - FOLLOW_abstract_declarator_suffix_in_synpred931083 = frozenset([1]) - FOLLOW_61_in_synpred1081267 = frozenset([4, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60]) - FOLLOW_type_name_in_synpred1081269 = frozenset([62]) - FOLLOW_62_in_synpred1081271 = frozenset([4, 5, 6, 7, 8, 9, 10, 61, 65, 67, 68, 71, 72, 73, 76, 77, 78]) - FOLLOW_cast_expression_in_synpred1081273 = frozenset([1]) - FOLLOW_73_in_synpred1131315 = frozenset([4, 5, 6, 7, 8, 9, 10, 61, 65, 67, 68, 71, 72, 73, 76, 77, 78]) - FOLLOW_unary_expression_in_synpred1131317 = frozenset([1]) - FOLLOW_61_in_synpred1161405 = frozenset([4, 5, 6, 7, 8, 9, 10, 61, 65, 67, 68, 71, 72, 73, 76, 77, 78]) - FOLLOW_argument_expression_list_in_synpred1161409 = frozenset([62]) - FOLLOW_62_in_synpred1161413 = frozenset([1]) - FOLLOW_61_in_synpred1171429 = frozenset([4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 65]) - FOLLOW_macro_parameter_list_in_synpred1171431 = frozenset([62]) - FOLLOW_62_in_synpred1171433 = frozenset([1]) - FOLLOW_65_in_synpred1191467 = frozenset([4]) - FOLLOW_IDENTIFIER_in_synpred1191471 = frozenset([1]) - FOLLOW_STRING_LITERAL_in_synpred1361668 = frozenset([1]) - FOLLOW_IDENTIFIER_in_synpred1371665 = frozenset([4, 9]) - FOLLOW_STRING_LITERAL_in_synpred1371668 = frozenset([1, 9]) - FOLLOW_lvalue_in_synpred1411729 = frozenset([28, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88]) - FOLLOW_assignment_operator_in_synpred1411731 = frozenset([4, 5, 6, 7, 8, 9, 10, 61, 65, 67, 68, 71, 72, 73, 76, 77, 78]) - FOLLOW_assignment_expression_in_synpred1411733 = frozenset([1]) - FOLLOW_expression_statement_in_synpred1682020 = frozenset([1]) - FOLLOW_macro_statement_in_synpred1722040 = frozenset([1]) - FOLLOW_asm2_statement_in_synpred1732045 = frozenset([1]) - FOLLOW_declaration_in_synpred1802151 = frozenset([1]) - FOLLOW_statement_list_in_synpred1812155 = frozenset([1]) - FOLLOW_declaration_in_synpred1852210 = frozenset([1]) - FOLLOW_statement_in_synpred1872227 = frozenset([1]) + FOLLOW_110_in_selection_statement2308 = frozenset([62]) + FOLLOW_62_in_selection_statement2310 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_expression_in_selection_statement2312 = frozenset([63]) + FOLLOW_63_in_selection_statement2314 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79, 103, 104, 105, 106, 107, 108, 110, 111, 112, 113, 114, 115, 116, 117]) + FOLLOW_statement_in_selection_statement2316 = frozenset([1]) + FOLLOW_111_in_iteration_statement2327 = frozenset([62]) + FOLLOW_62_in_iteration_statement2329 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_expression_in_iteration_statement2333 = frozenset([63]) + FOLLOW_63_in_iteration_statement2335 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79, 103, 104, 105, 106, 107, 108, 110, 111, 112, 113, 114, 115, 116, 117]) + FOLLOW_statement_in_iteration_statement2337 = frozenset([1]) + FOLLOW_112_in_iteration_statement2344 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79, 103, 104, 105, 106, 107, 108, 110, 111, 112, 113, 114, 115, 116, 117]) + FOLLOW_statement_in_iteration_statement2346 = frozenset([111]) + FOLLOW_111_in_iteration_statement2348 = frozenset([62]) + FOLLOW_62_in_iteration_statement2350 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_expression_in_iteration_statement2354 = frozenset([63]) + FOLLOW_63_in_iteration_statement2356 = frozenset([25]) + FOLLOW_25_in_iteration_statement2358 = frozenset([1]) + FOLLOW_113_in_iteration_statement2365 = frozenset([62]) + FOLLOW_62_in_iteration_statement2367 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_expression_statement_in_iteration_statement2369 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_expression_statement_in_iteration_statement2373 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 63, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_expression_in_iteration_statement2375 = frozenset([63]) + FOLLOW_63_in_iteration_statement2378 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79, 103, 104, 105, 106, 107, 108, 110, 111, 112, 113, 114, 115, 116, 117]) + FOLLOW_statement_in_iteration_statement2380 = frozenset([1]) + FOLLOW_114_in_jump_statement2393 = frozenset([4]) + FOLLOW_IDENTIFIER_in_jump_statement2395 = frozenset([25]) + FOLLOW_25_in_jump_statement2397 = frozenset([1]) + FOLLOW_115_in_jump_statement2402 = frozenset([25]) + FOLLOW_25_in_jump_statement2404 = frozenset([1]) + FOLLOW_116_in_jump_statement2409 = frozenset([25]) + FOLLOW_25_in_jump_statement2411 = frozenset([1]) + FOLLOW_117_in_jump_statement2416 = frozenset([25]) + FOLLOW_25_in_jump_statement2418 = frozenset([1]) + FOLLOW_117_in_jump_statement2423 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_expression_in_jump_statement2425 = frozenset([25]) + FOLLOW_25_in_jump_statement2427 = frozenset([1]) + FOLLOW_declaration_specifiers_in_synpred2100 = frozenset([1]) + FOLLOW_declaration_specifiers_in_synpred4100 = frozenset([4, 58, 59, 60, 62, 66]) + FOLLOW_declarator_in_synpred4103 = frozenset([4, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61]) + FOLLOW_declaration_in_synpred4105 = frozenset([4, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61]) + FOLLOW_43_in_synpred4108 = frozenset([1]) + FOLLOW_declaration_in_synpred5118 = frozenset([1]) + FOLLOW_declaration_specifiers_in_synpred7157 = frozenset([1]) + FOLLOW_declaration_specifiers_in_synpred10207 = frozenset([1]) + FOLLOW_type_specifier_in_synpred14272 = frozenset([1]) + FOLLOW_type_qualifier_in_synpred15286 = frozenset([1]) + FOLLOW_type_qualifier_in_synpred33444 = frozenset([1]) + FOLLOW_IDENTIFIER_in_synpred34442 = frozenset([4, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66]) + FOLLOW_type_qualifier_in_synpred34444 = frozenset([4, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66]) + FOLLOW_declarator_in_synpred34447 = frozenset([1]) + FOLLOW_type_qualifier_in_synpred39566 = frozenset([1]) + FOLLOW_type_specifier_in_synpred40570 = frozenset([1]) + FOLLOW_pointer_in_synpred66784 = frozenset([4, 58, 59, 60, 62]) + FOLLOW_58_in_synpred66788 = frozenset([4, 59, 60, 62]) + FOLLOW_59_in_synpred66793 = frozenset([4, 60, 62]) + FOLLOW_60_in_synpred66798 = frozenset([4, 62]) + FOLLOW_direct_declarator_in_synpred66802 = frozenset([1]) + FOLLOW_declarator_suffix_in_synpred67821 = frozenset([1]) + FOLLOW_58_in_synpred69830 = frozenset([1]) + FOLLOW_declarator_suffix_in_synpred70838 = frozenset([1]) + FOLLOW_62_in_synpred73878 = frozenset([4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 66]) + FOLLOW_parameter_type_list_in_synpred73880 = frozenset([63]) + FOLLOW_63_in_synpred73882 = frozenset([1]) + FOLLOW_62_in_synpred74892 = frozenset([4]) + FOLLOW_identifier_list_in_synpred74894 = frozenset([63]) + FOLLOW_63_in_synpred74896 = frozenset([1]) + FOLLOW_type_qualifier_in_synpred75921 = frozenset([1]) + FOLLOW_pointer_in_synpred76924 = frozenset([1]) + FOLLOW_66_in_synpred77919 = frozenset([49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61]) + FOLLOW_type_qualifier_in_synpred77921 = frozenset([1, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 66]) + FOLLOW_pointer_in_synpred77924 = frozenset([1]) + FOLLOW_66_in_synpred78930 = frozenset([66]) + FOLLOW_pointer_in_synpred78932 = frozenset([1]) + FOLLOW_53_in_synpred81977 = frozenset([1]) + FOLLOW_27_in_synpred82974 = frozenset([4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 66]) + FOLLOW_53_in_synpred82977 = frozenset([4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 66]) + FOLLOW_parameter_declaration_in_synpred82981 = frozenset([1]) + FOLLOW_declarator_in_synpred83997 = frozenset([1]) + FOLLOW_abstract_declarator_in_synpred84999 = frozenset([1]) + FOLLOW_declaration_specifiers_in_synpred86994 = frozenset([1, 4, 53, 58, 59, 60, 62, 64, 66]) + FOLLOW_declarator_in_synpred86997 = frozenset([1, 4, 53, 58, 59, 60, 62, 64, 66]) + FOLLOW_abstract_declarator_in_synpred86999 = frozenset([1, 4, 53, 58, 59, 60, 62, 64, 66]) + FOLLOW_53_in_synpred861004 = frozenset([1]) + FOLLOW_specifier_qualifier_list_in_synpred901046 = frozenset([1, 62, 64, 66]) + FOLLOW_abstract_declarator_in_synpred901048 = frozenset([1]) + FOLLOW_direct_abstract_declarator_in_synpred911067 = frozenset([1]) + FOLLOW_62_in_synpred931086 = frozenset([62, 64, 66]) + FOLLOW_abstract_declarator_in_synpred931088 = frozenset([63]) + FOLLOW_63_in_synpred931090 = frozenset([1]) + FOLLOW_abstract_declarator_suffix_in_synpred941098 = frozenset([1]) + FOLLOW_62_in_synpred1091282 = frozenset([4, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61]) + FOLLOW_type_name_in_synpred1091284 = frozenset([63]) + FOLLOW_63_in_synpred1091286 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_cast_expression_in_synpred1091288 = frozenset([1]) + FOLLOW_74_in_synpred1141330 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_unary_expression_in_synpred1141332 = frozenset([1]) + FOLLOW_62_in_synpred1171420 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_argument_expression_list_in_synpred1171424 = frozenset([63]) + FOLLOW_63_in_synpred1171428 = frozenset([1]) + FOLLOW_62_in_synpred1181444 = frozenset([4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 66]) + FOLLOW_macro_parameter_list_in_synpred1181446 = frozenset([63]) + FOLLOW_63_in_synpred1181448 = frozenset([1]) + FOLLOW_66_in_synpred1201482 = frozenset([4]) + FOLLOW_IDENTIFIER_in_synpred1201486 = frozenset([1]) + FOLLOW_STRING_LITERAL_in_synpred1371683 = frozenset([1]) + FOLLOW_IDENTIFIER_in_synpred1381680 = frozenset([4, 9]) + FOLLOW_STRING_LITERAL_in_synpred1381683 = frozenset([1, 9]) + FOLLOW_lvalue_in_synpred1421744 = frozenset([28, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89]) + FOLLOW_assignment_operator_in_synpred1421746 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_assignment_expression_in_synpred1421748 = frozenset([1]) + FOLLOW_expression_statement_in_synpred1692035 = frozenset([1]) + FOLLOW_macro_statement_in_synpred1732055 = frozenset([1]) + FOLLOW_asm2_statement_in_synpred1742060 = frozenset([1]) + FOLLOW_declaration_in_synpred1812166 = frozenset([1]) + FOLLOW_statement_list_in_synpred1822170 = frozenset([1]) + FOLLOW_declaration_in_synpred1862225 = frozenset([1]) + FOLLOW_statement_in_synpred1882242 = frozenset([1]) diff --git a/BaseTools/Source/Python/Ecc/Check.py b/BaseTools/Source/Python/Ecc/Check.py index c8bc54de3e..a8ec638fce 100644 --- a/BaseTools/Source/Python/Ecc/Check.py +++ b/BaseTools/Source/Python/Ecc/Check.py @@ -1,7 +1,7 @@ ## @file # This file is used to define checkpoints used by ECC tool # -# Copyright (c) 2008, Intel Corporation +# Copyright (c) 2008 - 2010, Intel Corporation # All rights reserved. This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License # which accompanies this distribution. The full text of the license may be found at @@ -298,7 +298,11 @@ class Check(object): for Key in RecordDict: if len(RecordDict[Key]) > 1: for Item in RecordDict[Key]: - EccGlobalData.gDb.TblReport.Insert(ERROR_INCLUDE_FILE_CHECK_NAME, OtherMsg = "The file name for '%s' is duplicate" % (Item[1]), BelongsToTable = 'File', BelongsToItem = Item[0]) + Path = Item[1].replace(EccGlobalData.gWorkspace, '') + if Path.startswith('\\') or Path.startswith('/'): + Path = Path[1:] + if not EccGlobalData.gException.IsException(ERROR_INCLUDE_FILE_CHECK_NAME, Path): + EccGlobalData.gDb.TblReport.Insert(ERROR_INCLUDE_FILE_CHECK_NAME, OtherMsg = "The file name for [%s] is duplicate" % Path, BelongsToTable = 'File', BelongsToItem = Item[0]) # Check whether all include file contents is guarded by a #ifndef statement. def IncludeFileCheckIfndef(self): @@ -527,7 +531,7 @@ class Check(object): if EccGlobalData.gConfig.MetaDataFileCheckPcdDuplicate == '1' or EccGlobalData.gConfig.MetaDataFileCheckAll == '1' or EccGlobalData.gConfig.CheckAll == '1': EdkLogger.quiet("Checking for duplicate PCDs defined in both DSC and FDF files ...") SqlCommand = """ - select A.ID, A.Value2, B.ID, B.Value2 from Dsc as A, Fdf as B + select A.ID, A.Value2, A.BelongsToFile, B.ID, B.Value2, B.BelongsToFile from Dsc as A, Fdf as B where A.Model >= %s and A.Model < %s and B.Model >= %s and B.Model < %s and A.Value2 = B.Value2 @@ -537,10 +541,17 @@ class Check(object): """% (MODEL_PCD, MODEL_META_DATA_HEADER, MODEL_PCD, MODEL_META_DATA_HEADER) RecordSet = EccGlobalData.gDb.TblDsc.Exec(SqlCommand) for Record in RecordSet: + SqlCommand1 = """select Name from File where ID = %s""" %Record[2] + SqlCommand2 = """select Name from File where ID = %s""" %Record[5] + DscFileName = os.path.splitext(EccGlobalData.gDb.TblDsc.Exec(SqlCommand1)[0][0])[0] + FdfFileName = os.path.splitext(EccGlobalData.gDb.TblDsc.Exec(SqlCommand2)[0][0])[0] + print DscFileName, 111, FdfFileName + if DscFileName != FdfFileName: + continue if not EccGlobalData.gException.IsException(ERROR_META_DATA_FILE_CHECK_PCD_DUPLICATE, Record[1]): EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_PCD_DUPLICATE, OtherMsg = "The PCD [%s] is defined in both FDF file and DSC file" % (Record[1]), BelongsToTable = 'Dsc', BelongsToItem = Record[0]) if not EccGlobalData.gException.IsException(ERROR_META_DATA_FILE_CHECK_PCD_DUPLICATE, Record[3]): - EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_PCD_DUPLICATE, OtherMsg = "The PCD [%s] is defined in both FDF file and DSC file" % (Record[3]), BelongsToTable = 'Fdf', BelongsToItem = Record[2]) + EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_PCD_DUPLICATE, OtherMsg = "The PCD [%s] is defined in both FDF file and DSC file" % (Record[4]), BelongsToTable = 'Fdf', BelongsToItem = Record[3]) EdkLogger.quiet("Checking for duplicate PCDs defined in DEC files ...") SqlCommand = """ @@ -664,7 +675,7 @@ class Check(object): for Tbl in TableSet: TblName = 'Identifier' + str(Tbl[0]) SqlCommand = """ - select Name, ID from %s where value like '%%%s%%' and Model = %s + select Name, ID from %s where value like '%s' and Model = %s """ % (TblName, PcdName, MODEL_IDENTIFIER_FUNCTION_CALLING) RecordSet = EccGlobalData.gDb.TblInf.Exec(SqlCommand) TblNumber = TblName.replace('Identifier', '') @@ -726,29 +737,35 @@ class Check(object): # Naming Convention Check def NamingConventionCheck(self): - - for Dirpath, Dirnames, Filenames in self.WalkTree(): - for F in Filenames: - if os.path.splitext(F)[1] in ('.h', '.c'): - FullName = os.path.join(Dirpath, F) - Id = c.GetTableID(FullName) - if Id < 0: - continue - FileTable = 'Identifier' + str(Id) - self.NamingConventionCheckDefineStatement(FileTable) - self.NamingConventionCheckTypedefStatement(FileTable) - self.NamingConventionCheckIfndefStatement(FileTable) - self.NamingConventionCheckVariableName(FileTable) - self.NamingConventionCheckSingleCharacterVariable(FileTable) + if EccGlobalData.gConfig.NamingConventionCheckDefineStatement == '1' \ + or EccGlobalData.gConfig.NamingConventionCheckTypedefStatement == '1' \ + or EccGlobalData.gConfig.NamingConventionCheckIfndefStatement == '1' \ + or EccGlobalData.gConfig.NamingConventionCheckVariableName == '1' \ + or EccGlobalData.gConfig.NamingConventionCheckSingleCharacterVariable == '1' \ + or EccGlobalData.gConfig.NamingConventionCheckAll == '1'\ + or EccGlobalData.gConfig.CheckAll == '1': + for Dirpath, Dirnames, Filenames in self.WalkTree(): + for F in Filenames: + if os.path.splitext(F)[1] in ('.h', '.c'): + FullName = os.path.join(Dirpath, F) + Id = c.GetTableID(FullName) + if Id < 0: + continue + FileTable = 'Identifier' + str(Id) + self.NamingConventionCheckDefineStatement(FileTable) + self.NamingConventionCheckTypedefStatement(FileTable) + self.NamingConventionCheckIfndefStatement(FileTable) + self.NamingConventionCheckVariableName(FileTable) + self.NamingConventionCheckSingleCharacterVariable(FileTable) self.NamingConventionCheckPathName() self.NamingConventionCheckFunctionName() - + # Check whether only capital letters are used for #define declarations def NamingConventionCheckDefineStatement(self, FileTable): if EccGlobalData.gConfig.NamingConventionCheckDefineStatement == '1' or EccGlobalData.gConfig.NamingConventionCheckAll == '1' or EccGlobalData.gConfig.CheckAll == '1': EdkLogger.quiet("Checking naming covention of #define statement ...") - + SqlCommand = """select ID, Value from %s where Model = %s""" %(FileTable, MODEL_IDENTIFIER_MACRO_DEFINE) RecordSet = EccGlobalData.gDb.TblFile.Exec(SqlCommand) for Record in RecordSet: @@ -763,7 +780,7 @@ class Check(object): def NamingConventionCheckTypedefStatement(self, FileTable): if EccGlobalData.gConfig.NamingConventionCheckTypedefStatement == '1' or EccGlobalData.gConfig.NamingConventionCheckAll == '1' or EccGlobalData.gConfig.CheckAll == '1': EdkLogger.quiet("Checking naming covention of #typedef statement ...") - + SqlCommand = """select ID, Name from %s where Model = %s""" %(FileTable, MODEL_IDENTIFIER_TYPEDEF) RecordSet = EccGlobalData.gDb.TblFile.Exec(SqlCommand) for Record in RecordSet: @@ -783,7 +800,7 @@ class Check(object): def NamingConventionCheckIfndefStatement(self, FileTable): if EccGlobalData.gConfig.NamingConventionCheckTypedefStatement == '1' or EccGlobalData.gConfig.NamingConventionCheckAll == '1' or EccGlobalData.gConfig.CheckAll == '1': EdkLogger.quiet("Checking naming covention of #ifndef statement ...") - + SqlCommand = """select ID, Value from %s where Model = %s""" %(FileTable, MODEL_IDENTIFIER_MACRO_IFNDEF) RecordSet = EccGlobalData.gDb.TblFile.Exec(SqlCommand) for Record in RecordSet: @@ -818,7 +835,7 @@ class Check(object): if EccGlobalData.gConfig.NamingConventionCheckVariableName == '1' or EccGlobalData.gConfig.NamingConventionCheckAll == '1' or EccGlobalData.gConfig.CheckAll == '1': EdkLogger.quiet("Checking naming covention of variable name ...") Pattern = re.compile(r'^[A-Zgm]+\S*[a-z]\S*$') - + SqlCommand = """select ID, Name from %s where Model = %s""" %(FileTable, MODEL_IDENTIFIER_VARIABLE) RecordSet = EccGlobalData.gDb.TblFile.Exec(SqlCommand) for Record in RecordSet: @@ -846,7 +863,7 @@ class Check(object): def NamingConventionCheckSingleCharacterVariable(self, FileTable): if EccGlobalData.gConfig.NamingConventionCheckSingleCharacterVariable == '1' or EccGlobalData.gConfig.NamingConventionCheckAll == '1' or EccGlobalData.gConfig.CheckAll == '1': EdkLogger.quiet("Checking naming covention of single character variable name ...") - + SqlCommand = """select ID, Name from %s where Model = %s""" %(FileTable, MODEL_IDENTIFIER_VARIABLE) RecordSet = EccGlobalData.gDb.TblFile.Exec(SqlCommand) for Record in RecordSet: diff --git a/BaseTools/Source/Python/Ecc/Ecc.py b/BaseTools/Source/Python/Ecc/Ecc.py index ea9d0b343c..4b5c319c35 100644 --- a/BaseTools/Source/Python/Ecc/Ecc.py +++ b/BaseTools/Source/Python/Ecc/Ecc.py @@ -1,7 +1,7 @@ ## @file # This file is used to be the main entrance of ECC tool # -# Copyright (c) 2009, Intel Corporation +# Copyright (c) 2009 - 2010, Intel Corporation # All rights reserved. This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License # which accompanies this distribution. The full text of the license may be found at @@ -43,7 +43,7 @@ class Ecc(object): # Version and Copyright self.VersionNumber = "0.01" self.Version = "%prog Version " + self.VersionNumber - self.Copyright = "Copyright (c) 2009, Intel Corporation All rights reserved." + self.Copyright = "Copyright (c) 2009 - 2010, Intel Corporation All rights reserved." self.InitDefaultConfigIni() self.OutputFile = 'output.txt' @@ -225,6 +225,9 @@ class Ecc(object): EdkLogger.quiet("Loading ECC configuration ... done") (Options, Target) = self.EccOptionParser() + if Options.Workspace: + os.environ["WORKSPACE"] = Options.Workspace + # Check workspace envirnoment if "WORKSPACE" not in os.environ: EdkLogger.error("ECC", BuildToolError.ATTRIBUTE_NOT_AVAILABLE, "Environment variable not found", @@ -244,6 +247,8 @@ class Ecc(object): self.OutputFile = Options.OutputFile if Options.ReportFile != None: self.ReportFile = Options.ReportFile + if Options.ExceptionFile != None: + self.ExceptionFile = Options.ExceptionFile if Options.Target != None: if not os.path.isdir(Options.Target): EdkLogger.error("ECC", BuildToolError.OPTION_VALUE_INVALID, ExtraData="Target [%s] does NOT exist" % Options.Target) @@ -294,6 +299,8 @@ class Ecc(object): help="Specify the name of an output file, if and only if one filename was specified.") Parser.add_option("-r", "--reportfile filename", action="store", type="string", dest="ReportFile", help="Specify the name of an report file, if and only if one filename was specified.") + Parser.add_option("-e", "--exceptionfile filename", action="store", type="string", dest="ExceptionFile", + help="Specify the name of an exception file, if and only if one filename was specified.") Parser.add_option("-m", "--metadata", action="store_true", type=None, help="Only scan meta-data files information if this option is specified.") Parser.add_option("-s", "--sourcecode", action="store_true", type=None, help="Only scan source code files information if this option is specified.") Parser.add_option("-k", "--keepdatabase", action="store_true", type=None, help="The existing Ecc database will not be cleaned except report information if this option is specified.") @@ -307,6 +314,7 @@ class Ecc(object): "including library instances selected, final dependency expression, "\ "and warning messages, etc.") Parser.add_option("-d", "--debug", action="store", type="int", help="Enable debug messages at specified level.") + Parser.add_option("-w", "--workspace", action="store", type="string", dest='Workspace', help="Specify workspace.") (Opt, Args)=Parser.parse_args() diff --git a/BaseTools/Source/Python/Ecc/EccToolError.py b/BaseTools/Source/Python/Ecc/EccToolError.py index 9c4d10d55b..f6c4097e78 100644 --- a/BaseTools/Source/Python/Ecc/EccToolError.py +++ b/BaseTools/Source/Python/Ecc/EccToolError.py @@ -1,7 +1,7 @@ ## @file # Standardized Error Hanlding infrastructures. # -# Copyright (c) 20087, Intel Corporation +# Copyright (c) 2008 - 2010, Intel Corporation # All rights reserved. This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License # which accompanies this distribution. The full text of the license may be found at @@ -40,6 +40,8 @@ ERROR_C_FUNCTION_LAYOUT_CHECK_FUNCTION_BODY = 5005 ERROR_C_FUNCTION_LAYOUT_CHECK_DATA_DECLARATION = 5006 ERROR_C_FUNCTION_LAYOUT_CHECK_NO_INIT_OF_VARIABLE = 5007 ERROR_C_FUNCTION_LAYOUT_CHECK_NO_STATIC = 5008 +ERROR_C_FUNCTION_LAYOUT_CHECK_FUNCTION_PROTO_TYPE_2 = 5009 +ERROR_C_FUNCTION_LAYOUT_CHECK_FUNCTION_PROTO_TYPE_3 = 5010 ERROR_INCLUDE_FILE_CHECK_ALL = 6000 ERROR_INCLUDE_FILE_CHECK_IFNDEF_STATEMENT_1 = 6001 @@ -102,35 +104,37 @@ gEccErrorMessage = { ERROR_GENERAL_CHECK_NO_PROGMA : """There should be no use of "#progma" in source file except "#pragma pack(#)\"""", ERROR_GENERAL_CHECK_CARRIAGE_RETURN : "There should be a carriage return at the end of the file", ERROR_GENERAL_CHECK_FILE_EXISTENCE : "File not found", - + ERROR_SPACE_CHECK_ALL : "", - + ERROR_PREDICATE_EXPRESSION_CHECK_ALL : "", ERROR_PREDICATE_EXPRESSION_CHECK_BOOLEAN_VALUE : "Boolean values and variable type BOOLEAN should not use explicit comparisons to TRUE or FALSE", ERROR_PREDICATE_EXPRESSION_CHECK_NO_BOOLEAN_OPERATOR : "Non-Boolean comparisons should use a compare operator (==, !=, >, < >=, <=)", ERROR_PREDICATE_EXPRESSION_CHECK_COMPARISON_NULL_TYPE : "A comparison of any pointer to zero must be done via the NULL type", - + ERROR_HEADER_CHECK_ALL : "", ERROR_HEADER_CHECK_FILE : "File header doesn't exist", ERROR_HEADER_CHECK_FUNCTION : "Function header doesn't exist", - + ERROR_C_FUNCTION_LAYOUT_CHECK_ALL : "", ERROR_C_FUNCTION_LAYOUT_CHECK_RETURN_TYPE : "Return type of a function should exist and in the first line", ERROR_C_FUNCTION_LAYOUT_CHECK_OPTIONAL_FUNCTIONAL_MODIFIER : "Any optional functional modifiers should exist and next to the return type", ERROR_C_FUNCTION_LAYOUT_CHECK_FUNCTION_NAME : """Function name should be left justified, followed by the beginning of the parameter list, with the closing parenthesis on its own line, indented two spaces""", ERROR_C_FUNCTION_LAYOUT_CHECK_FUNCTION_PROTO_TYPE : "Function prototypes in include files have the same form as function definitions", + ERROR_C_FUNCTION_LAYOUT_CHECK_FUNCTION_PROTO_TYPE_2 : "Function prototypes in include files have different parameter number with function definitions", + ERROR_C_FUNCTION_LAYOUT_CHECK_FUNCTION_PROTO_TYPE_3 : "Function prototypes in include files have different parameter modifier with function definitions", ERROR_C_FUNCTION_LAYOUT_CHECK_FUNCTION_BODY : "The body of a function should be contained by open and close braces that must be in the first column", ERROR_C_FUNCTION_LAYOUT_CHECK_DATA_DECLARATION : "The data declarations should be the first code in a module", ERROR_C_FUNCTION_LAYOUT_CHECK_NO_INIT_OF_VARIABLE : "There should be no initialization of a variable as part of its declaration", ERROR_C_FUNCTION_LAYOUT_CHECK_NO_STATIC : "There should be no use of STATIC for functions", - + ERROR_INCLUDE_FILE_CHECK_ALL : "", ERROR_INCLUDE_FILE_CHECK_IFNDEF_STATEMENT_1 : "All include file contents should be guarded by a #ifndef statement.", ERROR_INCLUDE_FILE_CHECK_IFNDEF_STATEMENT_2 : "The #ifndef must be the first line of code following the file header comment", ERROR_INCLUDE_FILE_CHECK_IFNDEF_STATEMENT_3 : "The #endif must appear on the last line in the file", ERROR_INCLUDE_FILE_CHECK_DATA : "Include files should contain only public or only private data and cannot contain code or define data variables", ERROR_INCLUDE_FILE_CHECK_NAME : "No permission for the inlcude file with same names", - + ERROR_DECLARATION_DATA_TYPE_CHECK_ALL : "", ERROR_DECLARATION_DATA_TYPE_CHECK_NO_USE_C_TYPE : "There should be no use of int, unsigned, char, void, static, long in any .c, .h or .asl files", ERROR_DECLARATION_DATA_TYPE_CHECK_IN_OUT_MODIFIER : """The modifiers IN, OUT, OPTIONAL, and UNALIGNED should be used only to qualify arguments to a function and should not appear in a data type declaration""", @@ -140,7 +144,7 @@ gEccErrorMessage = { ERROR_DECLARATION_DATA_TYPE_CHECK_SAME_STRUCTURE : "No permission for the structure with same names", ERROR_DECLARATION_DATA_TYPE_CHECK_UNION_TYPE : "Union Type should have a 'typedef' and the name must be in capital letters", ERROR_DECLARATION_DATA_TYPE_CHECK_NESTED_STRUCTURE : "Complex types should be typedef-ed", - + ERROR_NAMING_CONVENTION_CHECK_ALL : "", ERROR_NAMING_CONVENTION_CHECK_DEFINE_STATEMENT : "Only capital letters are allowed to be used for #define declarations", ERROR_NAMING_CONVENTION_CHECK_TYPEDEF_STATEMENT : "Only capital letters are allowed to be used for typedef declarations", @@ -149,17 +153,17 @@ gEccErrorMessage = { ERROR_NAMING_CONVENTION_CHECK_VARIABLE_NAME : """Variable name does not follow the rules: 1. First character should be upper case 2. Must contain lower case characters 3. No white space characters 4. Global variable name must start with a 'g'""", ERROR_NAMING_CONVENTION_CHECK_FUNCTION_NAME : """Function name does not follow the rules: 1. First character should be upper case 2. Must contain lower case characters 3. No white space characters""", ERROR_NAMING_CONVENTION_CHECK_SINGLE_CHARACTER_VARIABLE : "There should be no use of short (single character) variable names", - + ERROR_DOXYGEN_CHECK_ALL : "", ERROR_DOXYGEN_CHECK_FILE_HEADER : "The file headers should follow Doxygen special documentation blocks in section 2.3.5", ERROR_DOXYGEN_CHECK_FUNCTION_HEADER : "The function headers should follow Doxygen special documentation blocks in section 2.3.5", ERROR_DOXYGEN_CHECK_COMMENT_DESCRIPTION : """The first line of text in a comment block should be a brief description of the element being documented and the brief description must end with a period.""", ERROR_DOXYGEN_CHECK_COMMENT_FORMAT : "For comment line with '///< ... text ...' format, if it is used, it should be after the code section", - ERROR_DOXYGEN_CHECK_COMMAND : "Only Doxygen commands @bug and @todo are allowed to mark the code", - + ERROR_DOXYGEN_CHECK_COMMAND : "Only Doxygen commands '@bug', '@todo', '@example', '@file', '@attention', '@param', '@post', '@pre', '@retval', '@return', '@sa', '@since', '@test', '@note', '@par' are allowed to mark the code", + ERROR_META_DATA_FILE_CHECK_ALL : "", ERROR_META_DATA_FILE_CHECK_PATH_NAME : "The file defined in meta-data does not exist", - ERROR_META_DATA_FILE_CHECK_LIBRARY_INSTANCE_1 : "A library instances defined for a given module (or dependent library instance) doesn't match the module's type.", + ERROR_META_DATA_FILE_CHECK_LIBRARY_INSTANCE_1 : "A library instances defined for a given module (or dependent library instance) doesn't match the module's type.", ERROR_META_DATA_FILE_CHECK_LIBRARY_INSTANCE_2 : "A library instance must specify the Supported Module Types in its INF file", ERROR_META_DATA_FILE_CHECK_LIBRARY_INSTANCE_DEPENDENT : "A library instance must be defined for all dependent library classes", ERROR_META_DATA_FILE_CHECK_LIBRARY_INSTANCE_ORDER : "The library Instances specified by the LibraryClasses sections should be listed in order of dependencies", @@ -171,9 +175,9 @@ gEccErrorMessage = { ERROR_META_DATA_FILE_CHECK_DUPLICATE_GUID : "Duplicate GUID found", ERROR_META_DATA_FILE_CHECK_DUPLICATE_PROTOCOL : "Duplicate PROTOCOL found", ERROR_META_DATA_FILE_CHECK_DUPLICATE_PPI : "Duplicate PPI found", - ERROR_META_DATA_FILE_CHECK_MODULE_FILE_NO_USE : "No used module files found", + ERROR_META_DATA_FILE_CHECK_MODULE_FILE_NO_USE : "No used module files found", ERROR_META_DATA_FILE_CHECK_PCD_TYPE : "Wrong C code function used for this kind of PCD", - + ERROR_SPELLING_CHECK_ALL : "", } diff --git a/BaseTools/Source/Python/Ecc/ParserWarning.py b/BaseTools/Source/Python/Ecc/ParserWarning.py index 547360d927..1874739915 100644 --- a/BaseTools/Source/Python/Ecc/ParserWarning.py +++ b/BaseTools/Source/Python/Ecc/ParserWarning.py @@ -1,3 +1,16 @@ +## @file +# This file is used to be the warning class of ECC tool +# +# Copyright (c) 2009 - 2010, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# + ## The exception class that used to report error messages when preprocessing # # Currently the "ToolName" is set to be "ECC PP". diff --git a/BaseTools/Source/Python/Ecc/__init__.py b/BaseTools/Source/Python/Ecc/__init__.py index e69de29bb2..f385b1e670 100644 --- a/BaseTools/Source/Python/Ecc/__init__.py +++ b/BaseTools/Source/Python/Ecc/__init__.py @@ -0,0 +1,15 @@ +## @file +# Python 'Ecc' package initialization file. +# +# This file is required to make Python interpreter treat the directory +# as containing package. +# +# Copyright (c) 2007 - 2010, Intel Corporation
    +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# diff --git a/BaseTools/Source/Python/Ecc/c.py b/BaseTools/Source/Python/Ecc/c.py index b8b1d2d6f5..1085da942b 100644 --- a/BaseTools/Source/Python/Ecc/c.py +++ b/BaseTools/Source/Python/Ecc/c.py @@ -1,3 +1,16 @@ +## @file +# This file is used to be the c coding style checking of ECC tool +# +# Copyright (c) 2009 - 2010, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# + import sys import os import re @@ -82,16 +95,16 @@ def GetIdentifierList(): for comment in FileProfile.CommentList: IdComment = DataClass.IdentifierClass(-1, '', '', '', comment.Content, DataClass.MODEL_IDENTIFIER_COMMENT, -1, -1, comment.StartPos[0],comment.StartPos[1],comment.EndPos[0],comment.EndPos[1]) IdList.append(IdComment) - + for pp in FileProfile.PPDirectiveList: Type = GetIdType(pp.Content) IdPP = DataClass.IdentifierClass(-1, '', '', '', pp.Content, Type, -1, -1, pp.StartPos[0],pp.StartPos[1],pp.EndPos[0],pp.EndPos[1]) IdList.append(IdPP) - + for pe in FileProfile.PredicateExpressionList: IdPE = DataClass.IdentifierClass(-1, '', '', '', pe.Content, DataClass.MODEL_IDENTIFIER_PREDICATE_EXPRESSION, -1, -1, pe.StartPos[0],pe.StartPos[1],pe.EndPos[0],pe.EndPos[1]) IdList.append(IdPE) - + FuncDeclPattern = GetFuncDeclPattern() ArrayPattern = GetArrayPattern() for var in FileProfile.VariableDeclarationList: @@ -125,10 +138,10 @@ def GetIdentifierList(): DeclText = DeclText[1:] VarNameStartColumn += 1 FirstChar = DeclText[0] - + var.Declarator = DeclText if FuncDeclPattern.match(var.Declarator): - DeclSplitList = var.Declarator.split('(') + DeclSplitList = var.Declarator.split('(') FuncName = DeclSplitList[0].strip() FuncNamePartList = FuncName.split() if len(FuncNamePartList) > 1: @@ -168,8 +181,8 @@ def GetIdentifierList(): IdVar = DataClass.IdentifierClass(-1, var.Modifier, '', var.Declarator, FuncName, DataClass.MODEL_IDENTIFIER_FUNCTION_DECLARATION, -1, -1, var.StartPos[0], var.StartPos[1], VarNameStartLine, VarNameStartColumn) IdList.append(IdVar) continue - - if var.Declarator.find('{') == -1: + + if var.Declarator.find('{') == -1: for decl in var.Declarator.split(','): DeclList = decl.split('=') Name = DeclList[0].strip() @@ -177,7 +190,7 @@ def GetIdentifierList(): LSBPos = var.Declarator.find('[') var.Modifier += ' ' + Name[LSBPos:] Name = Name[0:LSBPos] - + IdVar = DataClass.IdentifierClass(-1, var.Modifier, '', Name, (len(DeclList) > 1 and [DeclList[1]]or [''])[0], DataClass.MODEL_IDENTIFIER_VARIABLE, -1, -1, var.StartPos[0],var.StartPos[1], VarNameStartLine, VarNameStartColumn) IdList.append(IdVar) else: @@ -189,7 +202,7 @@ def GetIdentifierList(): Name = Name[0:LSBPos] IdVar = DataClass.IdentifierClass(-1, var.Modifier, '', Name, (len(DeclList) > 1 and [DeclList[1]]or [''])[0], DataClass.MODEL_IDENTIFIER_VARIABLE, -1, -1, var.StartPos[0],var.StartPos[1], VarNameStartLine, VarNameStartColumn) IdList.append(IdVar) - + for enum in FileProfile.EnumerationDefinitionList: LBPos = enum.Content.find('{') RBPos = enum.Content.find('}') @@ -197,7 +210,7 @@ def GetIdentifierList(): Value = enum.Content[LBPos+1:RBPos] IdEnum = DataClass.IdentifierClass(-1, '', '', Name, Value, DataClass.MODEL_IDENTIFIER_ENUMERATE, -1, -1, enum.StartPos[0],enum.StartPos[1],enum.EndPos[0],enum.EndPos[1]) IdList.append(IdEnum) - + for su in FileProfile.StructUnionDefinitionList: if SuOccurInTypedef(su, FileProfile.TypedefDefinitionList): continue @@ -216,8 +229,8 @@ def GetIdentifierList(): Value = su.Content[LBPos:RBPos+1] IdPE = DataClass.IdentifierClass(-1, '', '', Name, Value, Type, -1, -1, su.StartPos[0],su.StartPos[1],su.EndPos[0],su.EndPos[1]) IdList.append(IdPE) - - TdFuncPointerPattern = GetTypedefFuncPointerPattern() + + TdFuncPointerPattern = GetTypedefFuncPointerPattern() for td in FileProfile.TypedefDefinitionList: Modifier = '' Name = td.ToType @@ -240,16 +253,16 @@ def GetIdentifierList(): while Name.startswith('*'): Value += ' ' + '*' Name = Name.lstrip('*').strip() - + if Name.find('[') != -1: LBPos = Name.find('[') RBPos = Name.rfind(']') Value += Name[LBPos : RBPos + 1] Name = Name[0 : LBPos] - + IdTd = DataClass.IdentifierClass(-1, Modifier, '', Name, Value, DataClass.MODEL_IDENTIFIER_TYPEDEF, -1, -1, td.StartPos[0],td.StartPos[1],td.EndPos[0],td.EndPos[1]) IdList.append(IdTd) - + for funcCall in FileProfile.FunctionCallingList: IdFC = DataClass.IdentifierClass(-1, '', '', funcCall.FuncName, funcCall.ParamList, DataClass.MODEL_IDENTIFIER_FUNCTION_CALLING, -1, -1, funcCall.StartPos[0],funcCall.StartPos[1],funcCall.EndPos[0],funcCall.EndPos[1]) IdList.append(IdFC) @@ -278,7 +291,7 @@ def GetParamList(FuncDeclarator, FuncNameLine = 0, FuncNameOffset = 0): OffsetSkipped = 0 TailChar = FuncName[-1] while not TailChar.isalpha() and TailChar != '_': - + if TailChar == '\n': FuncName = FuncName.rstrip('\r\n').rstrip('\n') LineSkipped += 1 @@ -296,9 +309,9 @@ def GetParamList(FuncDeclarator, FuncNameLine = 0, FuncNameOffset = 0): else: FuncName = FuncName[:-1] TailChar = FuncName[-1] - + OffsetSkipped += 1 #skip '(' - + for p in ParamStr.split(','): ListP = p.split() if len(ListP) == 0: @@ -325,13 +338,13 @@ def GetParamList(FuncDeclarator, FuncNameLine = 0, FuncNameOffset = 0): LBIndex = ParamName.find('[') if LBIndex != -1: ParamName = ParamName[0:LBIndex] - + Start = RightSpacePos Index = 0 PreChar = '' while Index < Start: FirstChar = p[Index] - + if FirstChar == '\r': Index += 1 LineSkipped += 1 @@ -351,15 +364,15 @@ def GetParamList(FuncDeclarator, FuncNameLine = 0, FuncNameOffset = 0): Index += 1 OffsetSkipped += 1 PreChar = FirstChar - + ParamBeginLine = FuncNameLine + LineSkipped ParamBeginOffset = FuncNameOffset + OffsetSkipped - + Index = Start + len(ParamName) PreChar = '' while Index < len(p): FirstChar = p[Index] - + if FirstChar == '\r': Index += 1 LineSkipped += 1 @@ -379,18 +392,18 @@ def GetParamList(FuncDeclarator, FuncNameLine = 0, FuncNameOffset = 0): Index += 1 OffsetSkipped += 1 PreChar = FirstChar - + ParamEndLine = FuncNameLine + LineSkipped ParamEndOffset = FuncNameOffset + OffsetSkipped if ParamName != '...': ParamName = StripNonAlnumChars(ParamName) IdParam = DataClass.IdentifierClass(-1, ParamModifier, '', ParamName, '', DataClass.MODEL_IDENTIFIER_PARAMETER, -1, -1, ParamBeginLine, ParamBeginOffset, ParamEndLine, ParamEndOffset) ParamIdList.append(IdParam) - + OffsetSkipped += 1 #skip ',' - + return ParamIdList - + def GetFunctionList(): FuncObjList = [] for FuncDef in FileProfile.FunctionDefinitionList: @@ -422,12 +435,12 @@ def GetFunctionList(): DeclText = DeclText[1:] FuncNameStartColumn += 1 FirstChar = DeclText[0] - + FuncDef.Declarator = DeclText DeclSplitList = FuncDef.Declarator.split('(') if len(DeclSplitList) < 2: continue - + FuncName = DeclSplitList[0] FuncNamePartList = FuncName.split() if len(FuncNamePartList) > 1: @@ -463,10 +476,10 @@ def GetFunctionList(): Index += 1 FuncNameStartColumn += 1 PreChar = FirstChar - + FuncObj = DataClass.FunctionClass(-1, FuncDef.Declarator, FuncDef.Modifier, FuncName.strip(), '', FuncDef.StartPos[0],FuncDef.StartPos[1],FuncDef.EndPos[0],FuncDef.EndPos[1], FuncDef.LeftBracePos[0], FuncDef.LeftBracePos[1], -1, ParamIdList, [], FuncNameStartLine, FuncNameStartColumn) FuncObjList.append(FuncObj) - + return FuncObjList def GetFileModificationTimeFromDB(FullFileName): @@ -519,13 +532,13 @@ def CollectSourceCodeDataIntoDB(RootDir): ModifiedTime = os.path.getmtime(FullName) FileObj = DataClass.FileClass(-1, BaseName, Ext, DirName, FullName, model, ModifiedTime, GetFunctionList(), GetIdentifierList(), []) FileObjList.append(FileObj) - collector.CleanFileProfileBuffer() - + collector.CleanFileProfileBuffer() + if len(ParseErrorFileList) > 0: EdkLogger.info("Found unrecoverable error during parsing:\n\t%s\n" % "\n\t".join(ParseErrorFileList)) - - Db = GetDB() - for file in FileObjList: + + Db = GetDB() + for file in FileObjList: Db.InsertOneFile(file) Db.UpdateIdentifierBelongsToFunction() @@ -533,13 +546,13 @@ def CollectSourceCodeDataIntoDB(RootDir): def GetTableID(FullFileName, ErrorMsgList = None): if ErrorMsgList == None: ErrorMsgList = [] - + Db = GetDB() SqlStatement = """ select ID from File where FullPath like '%s' """ % FullFileName - + ResultSet = Db.TblFile.Exec(SqlStatement) FileID = -1 @@ -557,11 +570,11 @@ def GetIncludeFileList(FullFileName): IFList = IncludeFileListDict.get(FullFileName) if IFList != None: return IFList - + FileID = GetTableID(FullFileName) if FileID < 0: return [] - + Db = GetDB() FileTable = 'Identifier' + str(FileID) SqlStatement = """ select Value @@ -583,7 +596,7 @@ def GetFullPathOfIncludeFile(Str, IncludePathList): def GetAllIncludeFiles(FullFileName): if AllIncludeFileListDict.get(FullFileName) != None: return AllIncludeFileListDict.get(FullFileName) - + FileDirName = os.path.dirname(FullFileName) IncludePathList = IncludePathListDict.get(FileDirName) if IncludePathList == None: @@ -600,7 +613,7 @@ def GetAllIncludeFiles(FullFileName): FullPath = GetFullPathOfIncludeFile(FileName, IncludePathList) if FullPath != None: IncludeFileQueue.append(FullPath) - + i = 0 while i < len(IncludeFileQueue): for IncludeFile in GetIncludeFileList(IncludeFileQueue[i]): @@ -612,7 +625,7 @@ def GetAllIncludeFiles(FullFileName): if FullPath != None and FullPath not in IncludeFileQueue: IncludeFileQueue.insert(i + 1, FullPath) i += 1 - + AllIncludeFileListDict[FullFileName] = IncludeFileQueue return IncludeFileQueue @@ -637,7 +650,7 @@ def GetPredicateListFromPredicateExpStr(PES): else: PredicateList.append(Exp.rstrip(';').rstrip(')').strip()) i += 1 - + if PredicateBegin > LogicOpPos: while PredicateBegin < len(PES): if PES[PredicateBegin].isalnum() or PES[PredicateBegin] == '_' or PES[PredicateBegin] == '*': @@ -651,7 +664,7 @@ def GetPredicateListFromPredicateExpStr(PES): else: PredicateList.append(Exp.rstrip(';').rstrip(')').strip()) return PredicateList - + def GetCNameList(Lvalue, StarList = []): Lvalue += ' ' i = 0 @@ -659,7 +672,7 @@ def GetCNameList(Lvalue, StarList = []): VarStart = -1 VarEnd = -1 VarList = [] - + while SearchBegin < len(Lvalue): while i < len(Lvalue): if Lvalue[i].isalnum() or Lvalue[i] == '_': @@ -677,8 +690,8 @@ def GetCNameList(Lvalue, StarList = []): i += 1 if VarEnd == -1: break - - + + DotIndex = Lvalue[VarEnd:].find('.') ArrowIndex = Lvalue[VarEnd:].find('->') if DotIndex == -1 and ArrowIndex == -1: @@ -688,19 +701,19 @@ def GetCNameList(Lvalue, StarList = []): elif ArrowIndex == -1 and DotIndex != -1: SearchBegin = VarEnd + DotIndex else: - SearchBegin = VarEnd + ((DotIndex < ArrowIndex) and DotIndex or ArrowIndex) - + SearchBegin = VarEnd + ((DotIndex < ArrowIndex) and DotIndex or ArrowIndex) + i = SearchBegin VarStart = -1 VarEnd = -1 - - return VarList + + return VarList def SplitPredicateByOp(Str, Op, IsFuncCalling = False): Name = Str.strip() Value = None - + if IsFuncCalling: Index = 0 LBFound = False @@ -708,7 +721,7 @@ def SplitPredicateByOp(Str, Op, IsFuncCalling = False): while Index < len(Str): while not LBFound and Str[Index] != '_' and not Str[Index].isalnum(): Index += 1 - + while not LBFound and (Str[Index].isalnum() or Str[Index] == '_'): Index += 1 # maybe type-cast at the begining, skip it. @@ -716,79 +729,81 @@ def SplitPredicateByOp(Str, Op, IsFuncCalling = False): if RemainingStr.startswith(')') and not LBFound: Index += 1 continue - + if RemainingStr.startswith('(') and not LBFound: LBFound = True - + if Str[Index] == '(': UnmatchedLBCount += 1 Index += 1 continue - + if Str[Index] == ')': UnmatchedLBCount -= 1 Index += 1 if UnmatchedLBCount == 0: break continue - + Index += 1 - + if UnmatchedLBCount > 0: return [Name] - + IndexInRemainingStr = Str[Index:].find(Op) if IndexInRemainingStr == -1: return [Name] - + Name = Str[0:Index + IndexInRemainingStr].strip() - Value = Str[Index+IndexInRemainingStr+len(Op):].strip() + Value = Str[Index+IndexInRemainingStr+len(Op):].strip().strip(')') return [Name, Value] - + TmpStr = Str.rstrip(';').rstrip(')') while True: Index = TmpStr.rfind(Op) if Index == -1: return [Name] - + if Str[Index - 1].isalnum() or Str[Index - 1].isspace() or Str[Index - 1] == ')': Name = Str[0:Index].strip() Value = Str[Index + len(Op):].strip() - return [Name, Value] - + return [Name, Value] + TmpStr = Str[0:Index - 1] def SplitPredicateStr(Str): + + Str = Str.lstrip('(') IsFuncCalling = False p = GetFuncDeclPattern() TmpStr = Str.replace('.', '').replace('->', '') if p.match(TmpStr): IsFuncCalling = True - + PredPartList = SplitPredicateByOp(Str, '==', IsFuncCalling) if len(PredPartList) > 1: return [PredPartList, '=='] - + PredPartList = SplitPredicateByOp(Str, '!=', IsFuncCalling) if len(PredPartList) > 1: return [PredPartList, '!='] - + PredPartList = SplitPredicateByOp(Str, '>=', IsFuncCalling) if len(PredPartList) > 1: return [PredPartList, '>='] - + PredPartList = SplitPredicateByOp(Str, '<=', IsFuncCalling) if len(PredPartList) > 1: return [PredPartList, '<='] - + PredPartList = SplitPredicateByOp(Str, '>', IsFuncCalling) if len(PredPartList) > 1: return [PredPartList, '>'] - + PredPartList = SplitPredicateByOp(Str, '<', IsFuncCalling) if len(PredPartList) > 1: return [PredPartList, '<'] - + return [[Str, None], None] def GetFuncContainsPE(ExpLine, ResultSet): @@ -812,11 +827,11 @@ def GetDataTypeFromModifier(ModifierStr): # remove array sufix if M.startswith('['): MList.remove(M) - + ReturnType = '' for M in MList: ReturnType += M + ' ' - + ReturnType = ReturnType.strip() if len(ReturnType) == 0: ReturnType = 'VOID' @@ -829,13 +844,13 @@ def DiffModifier(Str1, Str2): return False else: return True - + def GetTypedefDict(FullFileName): - + Dict = ComplexTypeDict.get(FullFileName) if Dict != None: return Dict - + FileID = GetTableID(FullFileName) FileTable = 'Identifier' + str(FileID) Db = GetDB() @@ -844,25 +859,25 @@ def GetTypedefDict(FullFileName): where Model = %d """ % (FileTable, DataClass.MODEL_IDENTIFIER_TYPEDEF) ResultSet = Db.TblFile.Exec(SqlStatement) - + Dict = {} for Result in ResultSet: if len(Result[0]) == 0: Dict[Result[1]] = Result[2] - + IncludeFileList = GetAllIncludeFiles(FullFileName) for F in IncludeFileList: FileID = GetTableID(F) if FileID < 0: continue - + FileTable = 'Identifier' + str(FileID) SqlStatement = """ select Modifier, Name, Value, ID from %s where Model = %d """ % (FileTable, DataClass.MODEL_IDENTIFIER_TYPEDEF) ResultSet = Db.TblFile.Exec(SqlStatement) - + for Result in ResultSet: if not Result[2].startswith('FP ('): Dict[Result[1]] = Result[2] @@ -871,16 +886,16 @@ def GetTypedefDict(FullFileName): Dict[Result[1]] = 'VOID' else: Dict[Result[1]] = GetDataTypeFromModifier(Result[0]) - + ComplexTypeDict[FullFileName] = Dict return Dict def GetSUDict(FullFileName): - + Dict = SUDict.get(FullFileName) if Dict != None: return Dict - + FileID = GetTableID(FullFileName) FileTable = 'Identifier' + str(FileID) Db = GetDB() @@ -889,36 +904,36 @@ def GetSUDict(FullFileName): where Model = %d or Model = %d """ % (FileTable, DataClass.MODEL_IDENTIFIER_STRUCTURE, DataClass.MODEL_IDENTIFIER_UNION) ResultSet = Db.TblFile.Exec(SqlStatement) - + Dict = {} for Result in ResultSet: if len(Result[1]) > 0: Dict[Result[0]] = Result[1] - + IncludeFileList = GetAllIncludeFiles(FullFileName) for F in IncludeFileList: FileID = GetTableID(F) if FileID < 0: continue - + FileTable = 'Identifier' + str(FileID) SqlStatement = """ select Name, Value, ID from %s where Model = %d or Model = %d """ % (FileTable, DataClass.MODEL_IDENTIFIER_STRUCTURE, DataClass.MODEL_IDENTIFIER_UNION) ResultSet = Db.TblFile.Exec(SqlStatement) - + for Result in ResultSet: if len(Result[1]) > 0: Dict[Result[0]] = Result[1] - + SUDict[FullFileName] = Dict return Dict def StripComments(Str): Str += ' ' ListFromStr = list(Str) - + InComment = False DoubleSlashComment = False Index = 0 @@ -944,7 +959,7 @@ def StripComments(Str): elif ListFromStr[Index] == '/' and ListFromStr[Index+1] == '/' and ListFromStr[Index+2] != '\n': InComment = True DoubleSlashComment = True - + # check for /* comment start elif ListFromStr[Index] == '/' and ListFromStr[Index+1] == '*': ListFromStr[Index] = ' ' @@ -958,7 +973,7 @@ def StripComments(Str): # restore from List to String Str = "".join(ListFromStr) Str = Str.rstrip(' ') - + return Str def GetFinalTypeValue(Type, FieldName, TypedefDict, SUDict): @@ -967,7 +982,7 @@ def GetFinalTypeValue(Type, FieldName, TypedefDict, SUDict): Value = SUDict.get(Type) if Value == None: return None - + LBPos = Value.find('{') while LBPos == -1: FTList = Value.split() @@ -977,12 +992,12 @@ def GetFinalTypeValue(Type, FieldName, TypedefDict, SUDict): if Value == None: Value = SUDict.get(FT) break - + if Value == None: return None - + LBPos = Value.find('{') - + # RBPos = Value.find('}') Fields = Value[LBPos + 1:] Fields = StripComments(Fields) @@ -997,13 +1012,13 @@ def GetFinalTypeValue(Type, FieldName, TypedefDict, SUDict): Type = GetDataTypeFromModifier(Field[0:Index]) return Type.strip() else: - # For the condition that the field in struct is an array with [] sufixes... + # For the condition that the field in struct is an array with [] sufixes... if not Field[Index + len(FieldName)].isalnum(): Type = GetDataTypeFromModifier(Field[0:Index]) return Type.strip() - + return None - + def GetRealType(Type, TypedefDict, TargetType = None): if TargetType != None and Type == TargetType: return Type @@ -1017,7 +1032,7 @@ def GetTypeInfo(RefList, Modifier, FullFileName, TargetType = None): TypedefDict = GetTypedefDict(FullFileName) SUDict = GetSUDict(FullFileName) Type = GetDataTypeFromModifier(Modifier).replace('*', '').strip() - + Type = Type.split()[-1] Index = 0 while Index < len(RefList): @@ -1034,7 +1049,7 @@ def GetTypeInfo(RefList, Modifier, FullFileName, TargetType = None): if Type.find('*') != -1 and Index == len(RefList)-1: return Type Type = FromType.split()[0] - + Index += 1 Type = GetRealType(Type, TypedefDict, TargetType) @@ -1042,14 +1057,14 @@ def GetTypeInfo(RefList, Modifier, FullFileName, TargetType = None): return Type def GetVarInfo(PredVarList, FuncRecord, FullFileName, IsFuncCall = False, TargetType = None, StarList = None): - + PredVar = PredVarList[0] FileID = GetTableID(FullFileName) - + Db = GetDB() FileTable = 'Identifier' + str(FileID) # search variable in include files - + # it is a function call, search function declarations and definitions if IsFuncCall: SqlStatement = """ select Modifier, ID @@ -1057,65 +1072,65 @@ def GetVarInfo(PredVarList, FuncRecord, FullFileName, IsFuncCall = False, Target where Model = %d and Value = \'%s\' """ % (FileTable, DataClass.MODEL_IDENTIFIER_FUNCTION_DECLARATION, PredVar) ResultSet = Db.TblFile.Exec(SqlStatement) - - for Result in ResultSet: + + for Result in ResultSet: Type = GetDataTypeFromModifier(Result[0]).split()[-1] TypedefDict = GetTypedefDict(FullFileName) Type = GetRealType(Type, TypedefDict, TargetType) return Type - + IncludeFileList = GetAllIncludeFiles(FullFileName) for F in IncludeFileList: FileID = GetTableID(F) if FileID < 0: continue - + FileTable = 'Identifier' + str(FileID) SqlStatement = """ select Modifier, ID from %s where Model = %d and Value = \'%s\' """ % (FileTable, DataClass.MODEL_IDENTIFIER_FUNCTION_DECLARATION, PredVar) ResultSet = Db.TblFile.Exec(SqlStatement) - + for Result in ResultSet: Type = GetDataTypeFromModifier(Result[0]).split()[-1] TypedefDict = GetTypedefDict(FullFileName) Type = GetRealType(Type, TypedefDict, TargetType) return Type - + FileID = GetTableID(FullFileName) SqlStatement = """ select Modifier, ID from Function where BelongsToFile = %d and Name = \'%s\' """ % (FileID, PredVar) ResultSet = Db.TblFile.Exec(SqlStatement) - - for Result in ResultSet: + + for Result in ResultSet: Type = GetDataTypeFromModifier(Result[0]).split()[-1] TypedefDict = GetTypedefDict(FullFileName) Type = GetRealType(Type, TypedefDict, TargetType) return Type - + for F in IncludeFileList: FileID = GetTableID(F) if FileID < 0: continue - + FileTable = 'Identifier' + str(FileID) SqlStatement = """ select Modifier, ID from Function where BelongsToFile = %d and Name = \'%s\' """ % (FileID, PredVar) ResultSet = Db.TblFile.Exec(SqlStatement) - + for Result in ResultSet: Type = GetDataTypeFromModifier(Result[0]).split()[-1] TypedefDict = GetTypedefDict(FullFileName) Type = GetRealType(Type, TypedefDict, TargetType) return Type - + return None - + # really variable, search local variable first SqlStatement = """ select Modifier, ID from %s @@ -1141,7 +1156,7 @@ def GetVarInfo(PredVarList, FuncRecord, FullFileName, IsFuncCall = False, Target TypedefDict = GetTypedefDict(FullFileName) Type = GetRealType(Type, TypedefDict, TargetType) return Type - + # search function parameters second ParamList = GetParamList(FuncRecord[2]) for Param in ParamList: @@ -1162,7 +1177,7 @@ def GetVarInfo(PredVarList, FuncRecord, FullFileName, IsFuncCall = False, Target TypedefDict = GetTypedefDict(FullFileName) Type = GetRealType(Type, TypedefDict, TargetType) return Type - + # search global variable next SqlStatement = """ select Modifier, ID from %s @@ -1187,13 +1202,13 @@ def GetVarInfo(PredVarList, FuncRecord, FullFileName, IsFuncCall = False, Target TypedefDict = GetTypedefDict(FullFileName) Type = GetRealType(Type, TypedefDict, TargetType) return Type - + IncludeFileList = GetAllIncludeFiles(FullFileName) for F in IncludeFileList: FileID = GetTableID(F) if FileID < 0: continue - + FileTable = 'Identifier' + str(FileID) SqlStatement = """ select Modifier, ID from %s @@ -1219,16 +1234,26 @@ def GetVarInfo(PredVarList, FuncRecord, FullFileName, IsFuncCall = False, Target Type = GetRealType(Type, TypedefDict, TargetType) return Type +def GetTypeFromArray(Type, Var): + Count = Var.count('[') + + while Count > 0: + Type = Type.strip() + Type = Type.rstrip('*') + Count = Count - 1 + + return Type + def CheckFuncLayoutReturnType(FullFileName): ErrorMsgList = [] - + FileID = GetTableID(FullFileName, ErrorMsgList) if FileID < 0: return ErrorMsgList - + Db = GetDB() FileTable = 'Identifier' + str(FileID) - SqlStatement = """ select Modifier, ID, StartLine, StartColumn, EndLine, Value + SqlStatement = """ select Modifier, ID, StartLine, StartColumn, EndLine, Value from %s where Model = %d """ % (FileTable, DataClass.MODEL_IDENTIFIER_FUNCTION_DECLARATION) @@ -1242,10 +1267,10 @@ def CheckFuncLayoutReturnType(FullFileName): Index = Result[0].find(TypeStart) if Index != 0 or Result[3] != 0: PrintErrorMsg(ERROR_C_FUNCTION_LAYOUT_CHECK_RETURN_TYPE, '[%s] Return Type should appear at the start of line' % FuncName, FileTable, Result[1]) - + if Result[2] == Result[4]: PrintErrorMsg(ERROR_C_FUNCTION_LAYOUT_CHECK_RETURN_TYPE, '[%s] Return Type should appear on its own line' % FuncName, FileTable, Result[1]) - + SqlStatement = """ select Modifier, ID, StartLine, StartColumn, FunNameStartLine, Name from Function where BelongsToFile = %d @@ -1260,17 +1285,17 @@ def CheckFuncLayoutReturnType(FullFileName): Index = Result[0].find(ReturnType) if Index != 0 or Result[3] != 0: PrintErrorMsg(ERROR_C_FUNCTION_LAYOUT_CHECK_RETURN_TYPE, '[%s] Return Type should appear at the start of line' % FuncName, 'Function', Result[1]) - + if Result[2] == Result[4]: PrintErrorMsg(ERROR_C_FUNCTION_LAYOUT_CHECK_RETURN_TYPE, '[%s] Return Type should appear on its own line' % FuncName, 'Function', Result[1]) - + def CheckFuncLayoutModifier(FullFileName): ErrorMsgList = [] - + FileID = GetTableID(FullFileName, ErrorMsgList) if FileID < 0: return ErrorMsgList - + Db = GetDB() FileTable = 'Identifier' + str(FileID) SqlStatement = """ select Modifier, ID @@ -1286,7 +1311,7 @@ def CheckFuncLayoutModifier(FullFileName): Index = Result[0].find(TypeStart) if Index != 0: PrintErrorMsg(ERROR_C_FUNCTION_LAYOUT_CHECK_OPTIONAL_FUNCTIONAL_MODIFIER, '', FileTable, Result[1]) - + SqlStatement = """ select Modifier, ID from Function where BelongsToFile = %d @@ -1309,7 +1334,7 @@ def CheckFuncLayoutName(FullFileName): FileID = GetTableID(FullFileName, ErrorMsgList) if FileID < 0: return ErrorMsgList - + Db = GetDB() FileTable = 'Identifier' + str(FileID) SqlStatement = """ select Name, ID, EndColumn, Value @@ -1331,14 +1356,14 @@ def CheckFuncLayoutName(FullFileName): if Param.StartLine <= StartLine: PrintErrorMsg(ERROR_C_FUNCTION_LAYOUT_CHECK_FUNCTION_NAME, 'Parameter %s should be in its own line.' % Param.Name, FileTable, Result[1]) if Param.StartLine - StartLine > 1: - PrintErrorMsg(ERROR_C_FUNCTION_LAYOUT_CHECK_FUNCTION_NAME, 'Empty line appears before Parameter %s.' % Param.Name, FileTable, Result[1]) + PrintErrorMsg(ERROR_C_FUNCTION_LAYOUT_CHECK_FUNCTION_NAME, 'Empty line appears before Parameter %s.' % Param.Name, FileTable, Result[1]) if not Pattern.match(Param.Name) and not Param.Name in ParamIgnoreList and not EccGlobalData.gException.IsException(ERROR_NAMING_CONVENTION_CHECK_VARIABLE_NAME, Param.Name): PrintErrorMsg(ERROR_NAMING_CONVENTION_CHECK_VARIABLE_NAME, 'Parameter [%s] NOT follow naming convention.' % Param.Name, FileTable, Result[1]) StartLine = Param.StartLine - + if not Result[0].endswith('\n )') and not Result[0].endswith('\r )'): PrintErrorMsg(ERROR_C_FUNCTION_LAYOUT_CHECK_FUNCTION_NAME, '\')\' should be on a new line and indented two spaces', FileTable, Result[1]) - + SqlStatement = """ select Modifier, ID, FunNameStartColumn, Name from Function where BelongsToFile = %d @@ -1367,11 +1392,11 @@ def CheckFuncLayoutName(FullFileName): def CheckFuncLayoutPrototype(FullFileName): ErrorMsgList = [] - + FileID = GetTableID(FullFileName, ErrorMsgList) if FileID < 0: return ErrorMsgList - + FileTable = 'Identifier' + str(FileID) Db = GetDB() SqlStatement = """ select Modifier, Header, Name, ID @@ -1381,11 +1406,11 @@ def CheckFuncLayoutPrototype(FullFileName): ResultSet = Db.TblFile.Exec(SqlStatement) if len(ResultSet) == 0: return ErrorMsgList - + FuncDefList = [] for Result in ResultSet: FuncDefList.append(Result) - + SqlStatement = """ select Modifier, Name, ID from %s where Model = %d @@ -1394,7 +1419,7 @@ def CheckFuncLayoutPrototype(FullFileName): FuncDeclList = [] for Result in ResultSet: FuncDeclList.append(Result) - + UndeclFuncList = [] for FuncDef in FuncDefList: FuncName = FuncDef[2].strip() @@ -1409,26 +1434,26 @@ def CheckFuncLayoutPrototype(FullFileName): PrintErrorMsg(ERROR_C_FUNCTION_LAYOUT_CHECK_FUNCTION_PROTO_TYPE, 'Function [%s] modifier different with prototype.' % FuncName, 'Function', FuncDef[3]) ParamListOfDef = GetParamList(FuncDefHeader) ParamListOfDecl = GetParamList(FuncDecl[1]) - if len(ParamListOfDef) != len(ParamListOfDecl): - PrintErrorMsg(ERROR_C_FUNCTION_LAYOUT_CHECK_FUNCTION_PROTO_TYPE, 'Parameter number different.', 'Function', FuncDef[3]) + if len(ParamListOfDef) != len(ParamListOfDecl) and not EccGlobalData.gException.IsException(ERROR_C_FUNCTION_LAYOUT_CHECK_FUNCTION_PROTO_TYPE_2, FuncName): + PrintErrorMsg(ERROR_C_FUNCTION_LAYOUT_CHECK_FUNCTION_PROTO_TYPE_2, 'Parameter number different in function [%s].' % FuncName, 'Function', FuncDef[3]) break Index = 0 while Index < len(ParamListOfDef): - if DiffModifier(ParamListOfDef[Index].Modifier, ParamListOfDecl[Index].Modifier): - PrintErrorMsg(ERROR_C_FUNCTION_LAYOUT_CHECK_FUNCTION_PROTO_TYPE, 'Parameter %s has different modifier with prototype.' % ParamListOfDef[Index].Name, 'Function', FuncDef[3]) + if DiffModifier(ParamListOfDef[Index].Modifier, ParamListOfDecl[Index].Modifier) and not EccGlobalData.gException.IsException(ERROR_C_FUNCTION_LAYOUT_CHECK_FUNCTION_PROTO_TYPE_3, FuncName): + PrintErrorMsg(ERROR_C_FUNCTION_LAYOUT_CHECK_FUNCTION_PROTO_TYPE_3, 'Parameter %s has different modifier with prototype in function [%s].' % (ParamListOfDef[Index].Name, FuncName), 'Function', FuncDef[3]) Index += 1 break else: UndeclFuncList.append(FuncDef) - + IncludeFileList = GetAllIncludeFiles(FullFileName) FuncDeclList = [] for F in IncludeFileList: FileID = GetTableID(F, ErrorMsgList) if FileID < 0: continue - + FileTable = 'Identifier' + str(FileID) SqlStatement = """ select Modifier, Name, ID from %s @@ -1438,7 +1463,7 @@ def CheckFuncLayoutPrototype(FullFileName): for Result in ResultSet: FuncDeclList.append(Result) - + for FuncDef in UndeclFuncList: FuncName = FuncDef[2].strip() FuncModifier = FuncDef[0] @@ -1452,24 +1477,24 @@ def CheckFuncLayoutPrototype(FullFileName): PrintErrorMsg(ERROR_C_FUNCTION_LAYOUT_CHECK_FUNCTION_PROTO_TYPE, 'Function [%s] modifier different with prototype.' % FuncName, 'Function', FuncDef[3]) ParamListOfDef = GetParamList(FuncDefHeader) ParamListOfDecl = GetParamList(FuncDecl[1]) - if len(ParamListOfDef) != len(ParamListOfDecl): - PrintErrorMsg(ERROR_C_FUNCTION_LAYOUT_CHECK_FUNCTION_PROTO_TYPE, 'Parameter number different.', 'Function', FuncDef[3]) + if len(ParamListOfDef) != len(ParamListOfDecl) and not EccGlobalData.gException.IsException(ERROR_C_FUNCTION_LAYOUT_CHECK_FUNCTION_PROTO_TYPE_2, FuncName): + PrintErrorMsg(ERROR_C_FUNCTION_LAYOUT_CHECK_FUNCTION_PROTO_TYPE_2, 'Parameter number different in function [%s].' % FuncName, 'Function', FuncDef[3]) break Index = 0 while Index < len(ParamListOfDef): - if DiffModifier(ParamListOfDef[Index].Modifier, ParamListOfDecl[Index].Modifier): - PrintErrorMsg(ERROR_C_FUNCTION_LAYOUT_CHECK_FUNCTION_PROTO_TYPE, 'Parameter %s has different modifier with prototype.' % ParamListOfDef[Index].Name, 'Function', FuncDef[3]) + if DiffModifier(ParamListOfDef[Index].Modifier, ParamListOfDecl[Index].Modifier) and not EccGlobalData.gException.IsException(ERROR_C_FUNCTION_LAYOUT_CHECK_FUNCTION_PROTO_TYPE_3, FuncName): + PrintErrorMsg(ERROR_C_FUNCTION_LAYOUT_CHECK_FUNCTION_PROTO_TYPE_3, 'Parameter %s has different modifier with prototype in function [%s].' % (ParamListOfDef[Index].Name, FuncName), 'Function', FuncDef[3]) Index += 1 break - + def CheckFuncLayoutBody(FullFileName): ErrorMsgList = [] - + FileID = GetTableID(FullFileName, ErrorMsgList) if FileID < 0: return ErrorMsgList - + FileTable = 'Identifier' + str(FileID) Db = GetDB() SqlStatement = """ select BodyStartColumn, EndColumn, ID @@ -1487,11 +1512,11 @@ def CheckFuncLayoutBody(FullFileName): def CheckFuncLayoutLocalVariable(FullFileName): ErrorMsgList = [] - + FileID = GetTableID(FullFileName, ErrorMsgList) if FileID < 0: return ErrorMsgList - + Db = GetDB() FileTable = 'Identifier' + str(FileID) SqlStatement = """ select ID @@ -1504,7 +1529,7 @@ def CheckFuncLayoutLocalVariable(FullFileName): FL = [] for Result in ResultSet: FL.append(Result) - + for F in FL: SqlStatement = """ select Name, Value, ID from %s @@ -1513,21 +1538,21 @@ def CheckFuncLayoutLocalVariable(FullFileName): ResultSet = Db.TblFile.Exec(SqlStatement) if len(ResultSet) == 0: continue - + for Result in ResultSet: if len(Result[1]) > 0: PrintErrorMsg(ERROR_C_FUNCTION_LAYOUT_CHECK_NO_INIT_OF_VARIABLE, 'Variable Name: %s' % Result[0], FileTable, Result[2]) - + def CheckMemberVariableFormat(Name, Value, FileTable, TdId, ModelId): ErrMsgList = [] # Member variable format pattern. Pattern = re.compile(r'^[A-Z]+\S*[a-z]\S*$') - + LBPos = Value.find('{') RBPos = Value.rfind('}') if LBPos == -1 or RBPos == -1: return ErrMsgList - + Fields = Value[LBPos + 1 : RBPos] Fields = StripComments(Fields).strip() NestPos = Fields.find ('struct') @@ -1548,7 +1573,7 @@ def CheckMemberVariableFormat(Name, Value, FileTable, TdId, ModelId): if not EccGlobalData.gException.IsException(ERROR_DECLARATION_DATA_TYPE_CHECK_NESTED_STRUCTURE, Name): PrintErrorMsg(ERROR_DECLARATION_DATA_TYPE_CHECK_NESTED_STRUCTURE, 'Nested enum in [%s].' % (Name), FileTable, TdId) return ErrMsgList - + if ModelId == DataClass.MODEL_IDENTIFIER_ENUMERATE: FieldsList = Fields.split(',') # deal with enum is pre-assigned a value by function call ( , , , ...) @@ -1557,34 +1582,34 @@ def CheckMemberVariableFormat(Name, Value, FileTable, TdId, ModelId): RemoveCurrentElement = False while Index < len(FieldsList): Field = FieldsList[Index] - + if Field.find('(') != -1: QuoteCount += 1 RemoveCurrentElement = True Index += 1 continue - + if Field.find(')') != -1 and QuoteCount > 0: QuoteCount -= 1 - if RemoveCurrentElement: + if RemoveCurrentElement: FieldsList.remove(Field) if QuoteCount == 0: RemoveCurrentElement = False continue - + if QuoteCount == 0: RemoveCurrentElement = False - + Index += 1 else: FieldsList = Fields.split(';') - + for Field in FieldsList: Field = Field.strip() if Field == '': continue - # For the condition that the field in struct is an array with [] sufixes... + # For the condition that the field in struct is an array with [] sufixes... if Field[-1] == ']': LBPos = Field.find('[') Field = Field[0:LBPos] @@ -1592,26 +1617,26 @@ def CheckMemberVariableFormat(Name, Value, FileTable, TdId, ModelId): if Field.find(':') != -1: ColonPos = Field.find(':') Field = Field[0:ColonPos] - + Field = Field.strip() if Field == '': continue # Enum could directly assign value to variable Field = Field.split('=')[0].strip() - TokenList = Field.split() + TokenList = Field.split() # Remove pointers before variable if not Pattern.match(TokenList[-1].lstrip('*')): ErrMsgList.append(TokenList[-1].lstrip('*')) - + return ErrMsgList def CheckDeclTypedefFormat(FullFileName, ModelId): ErrorMsgList = [] - + FileID = GetTableID(FullFileName, ErrorMsgList) if FileID < 0: return ErrorMsgList - + Db = GetDB() FileTable = 'Identifier' + str(FileID) SqlStatement = """ select Name, StartLine, EndLine, ID, Value @@ -1622,7 +1647,7 @@ def CheckDeclTypedefFormat(FullFileName, ModelId): ResultList = [] for Result in ResultSet: ResultList.append(Result) - + ErrorType = ERROR_DECLARATION_DATA_TYPE_CHECK_ALL if ModelId == DataClass.MODEL_IDENTIFIER_STRUCTURE: ErrorType = ERROR_DECLARATION_DATA_TYPE_CHECK_STRUCTURE_DECLARATION @@ -1630,7 +1655,7 @@ def CheckDeclTypedefFormat(FullFileName, ModelId): ErrorType = ERROR_DECLARATION_DATA_TYPE_CHECK_ENUMERATED_TYPE elif ModelId == DataClass.MODEL_IDENTIFIER_UNION: ErrorType = ERROR_DECLARATION_DATA_TYPE_CHECK_UNION_TYPE - + SqlStatement = """ select Modifier, Name, Value, StartLine, EndLine, ID from %s where Model = %d @@ -1651,7 +1676,7 @@ def CheckDeclTypedefFormat(FullFileName, ModelId): ValueModelId = DataClass.MODEL_IDENTIFIER_UNION else: continue - + if ValueModelId != ModelId: continue # Check member variable format. @@ -1660,7 +1685,7 @@ def CheckDeclTypedefFormat(FullFileName, ModelId): if EccGlobalData.gException.IsException(ERROR_NAMING_CONVENTION_CHECK_VARIABLE_NAME, Name+'.'+ErrMsg): continue PrintErrorMsg(ERROR_NAMING_CONVENTION_CHECK_VARIABLE_NAME, 'Member variable [%s] NOT follow naming convention.' % (Name+'.'+ErrMsg), FileTable, Td[5]) - + # First check in current file to see whether struct/union/enum is typedef-ed. UntypedefedList = [] for Result in ResultList: @@ -1675,7 +1700,7 @@ def CheckDeclTypedefFormat(FullFileName, ModelId): ValueModelId = DataClass.MODEL_IDENTIFIER_UNION else: continue - + if ValueModelId != ModelId: continue ErrMsgList = CheckMemberVariableFormat(Name, Value, FileTable, Result[3], ModelId) @@ -1699,21 +1724,21 @@ def CheckDeclTypedefFormat(FullFileName, ModelId): PrintErrorMsg(ErrorType, 'Typedef should be UPPER case', FileTable, Td[5]) if Found: break - + if not Found: UntypedefedList.append(Result) continue - + if len(UntypedefedList) == 0: return - + IncludeFileList = GetAllIncludeFiles(FullFileName) TdList = [] for F in IncludeFileList: FileID = GetTableID(F, ErrorMsgList) if FileID < 0: continue - + IncludeFileTable = 'Identifier' + str(FileID) SqlStatement = """ select Modifier, Name, Value, StartLine, EndLine, ID from %s @@ -1721,13 +1746,13 @@ def CheckDeclTypedefFormat(FullFileName, ModelId): """ % (IncludeFileTable, DataClass.MODEL_IDENTIFIER_TYPEDEF) ResultSet = Db.TblFile.Exec(SqlStatement) TdList.extend(ResultSet) - + for Result in UntypedefedList: - + # Check whether it is typedefed. Found = False for Td in TdList: - + if len(Td[0]) > 0: continue if Result[1] >= Td[3] and Td[4] >= Result[2]: @@ -1740,27 +1765,27 @@ def CheckDeclTypedefFormat(FullFileName, ModelId): PrintErrorMsg(ErrorType, 'Typedef should be UPPER case', FileTable, Td[5]) if Found: break - + if not Found: PrintErrorMsg(ErrorType, 'No Typedef for %s' % Result[0], FileTable, Result[3]) continue - + def CheckDeclStructTypedef(FullFileName): CheckDeclTypedefFormat(FullFileName, DataClass.MODEL_IDENTIFIER_STRUCTURE) def CheckDeclEnumTypedef(FullFileName): CheckDeclTypedefFormat(FullFileName, DataClass.MODEL_IDENTIFIER_ENUMERATE) - + def CheckDeclUnionTypedef(FullFileName): CheckDeclTypedefFormat(FullFileName, DataClass.MODEL_IDENTIFIER_UNION) def CheckDeclArgModifier(FullFileName): ErrorMsgList = [] - + FileID = GetTableID(FullFileName, ErrorMsgList) if FileID < 0: return ErrorMsgList - + Db = GetDB() FileTable = 'Identifier' + str(FileID) SqlStatement = """ select Modifier, Name, ID @@ -1775,7 +1800,7 @@ def CheckDeclArgModifier(FullFileName): if PatternInModifier(Result[0], Modifier) and len(Result[0]) < MAX_MODIFIER_LENGTH: PrintErrorMsg(ERROR_DECLARATION_DATA_TYPE_CHECK_IN_OUT_MODIFIER, 'Variable Modifier %s' % Result[0], FileTable, Result[2]) break - + SqlStatement = """ select Modifier, Name, ID from %s where Model = %d @@ -1786,7 +1811,7 @@ def CheckDeclArgModifier(FullFileName): if PatternInModifier(Result[0], Modifier): PrintErrorMsg(ERROR_DECLARATION_DATA_TYPE_CHECK_IN_OUT_MODIFIER, 'Return Type Modifier %s' % Result[0], FileTable, Result[2]) break - + SqlStatement = """ select Modifier, Header, ID from Function where BelongsToFile = %d @@ -1800,11 +1825,11 @@ def CheckDeclArgModifier(FullFileName): def CheckDeclNoUseCType(FullFileName): ErrorMsgList = [] - + FileID = GetTableID(FullFileName, ErrorMsgList) if FileID < 0: return ErrorMsgList - + Db = GetDB() FileTable = 'Identifier' + str(FileID) SqlStatement = """ select Modifier, Name, ID @@ -1818,7 +1843,7 @@ def CheckDeclNoUseCType(FullFileName): if PatternInModifier(Result[0], Type): PrintErrorMsg(ERROR_DECLARATION_DATA_TYPE_CHECK_NO_USE_C_TYPE, 'Variable type %s' % Type, FileTable, Result[2]) break - + SqlStatement = """ select Modifier, Name, ID, Value from %s where Model = %d @@ -1832,11 +1857,11 @@ def CheckDeclNoUseCType(FullFileName): for Type in CTypeTuple: if PatternInModifier(Result[0], Type): PrintErrorMsg(ERROR_DECLARATION_DATA_TYPE_CHECK_NO_USE_C_TYPE, '%s Return type %s' % (FuncName, Result[0]), FileTable, Result[2]) - + for Param in ParamList: if PatternInModifier(Param.Modifier, Type): PrintErrorMsg(ERROR_DECLARATION_DATA_TYPE_CHECK_NO_USE_C_TYPE, 'Parameter %s' % Param.Name, FileTable, Result[2]) - + SqlStatement = """ select Modifier, Header, ID, Name from Function where BelongsToFile = %d @@ -1850,22 +1875,22 @@ def CheckDeclNoUseCType(FullFileName): for Type in CTypeTuple: if PatternInModifier(Result[0], Type): PrintErrorMsg(ERROR_DECLARATION_DATA_TYPE_CHECK_NO_USE_C_TYPE, '[%s] Return type %s' % (FuncName, Result[0]), FileTable, Result[2]) - + for Param in ParamList: if PatternInModifier(Param.Modifier, Type): PrintErrorMsg(ERROR_DECLARATION_DATA_TYPE_CHECK_NO_USE_C_TYPE, 'Parameter %s' % Param.Name, FileTable, Result[2]) - + def CheckPointerNullComparison(FullFileName): ErrorMsgList = [] - + FileID = GetTableID(FullFileName, ErrorMsgList) if FileID < 0: return ErrorMsgList - + # cache the found function return type to accelerate later checking in this file. FuncReturnTypeDict = {} - + Db = GetDB() FileTable = 'Identifier' + str(FileID) SqlStatement = """ select Value, StartLine, ID @@ -1878,7 +1903,7 @@ def CheckPointerNullComparison(FullFileName): PSL = [] for Result in ResultSet: PSL.append([Result[0], Result[1], Result[2]]) - + SqlStatement = """ select BodyStartLine, EndLine, Header, Modifier, ID from Function where BelongsToFile = %d @@ -1887,13 +1912,13 @@ def CheckPointerNullComparison(FullFileName): FL = [] for Result in ResultSet: FL.append([Result[0], Result[1], Result[2], Result[3], Result[4]]) - + p = GetFuncDeclPattern() for Str in PSL: FuncRecord = GetFuncContainsPE(Str[1], FL) if FuncRecord == None: continue - + for Exp in GetPredicateListFromPredicateExpStr(Str[0]): PredInfo = SplitPredicateStr(Exp) if PredInfo[1] == None: @@ -1906,9 +1931,9 @@ def CheckPointerNullComparison(FullFileName): PredVarStr = PredVarStr[0:PredVarStr.find('(')] SearchInCache = True # Only direct function call using IsFuncCall branch. Multi-level ref. function call is considered a variable. - if TmpStr.startswith(PredVarStr): + if TmpStr.startswith(PredVarStr): IsFuncCall = True - + if PredVarStr.strip() in IgnoredKeywordList: continue StarList = [] @@ -1922,28 +1947,29 @@ def CheckPointerNullComparison(FullFileName): if Type.find('*') != -1: PrintErrorMsg(ERROR_PREDICATE_EXPRESSION_CHECK_COMPARISON_NULL_TYPE, 'Predicate Expression: %s' % Exp, FileTable, Str[2]) continue - + if PredVarStr in FuncReturnTypeDict: continue - + Type = GetVarInfo(PredVarList, FuncRecord, FullFileName, IsFuncCall, None, StarList) if SearchInCache: FuncReturnTypeDict[PredVarStr] = Type if Type == None: continue + Type = GetTypeFromArray(Type, PredVarStr) if Type.find('*') != -1: PrintErrorMsg(ERROR_PREDICATE_EXPRESSION_CHECK_COMPARISON_NULL_TYPE, 'Predicate Expression: %s' % Exp, FileTable, Str[2]) def CheckNonBooleanValueComparison(FullFileName): ErrorMsgList = [] - + FileID = GetTableID(FullFileName, ErrorMsgList) if FileID < 0: return ErrorMsgList - + # cache the found function return type to accelerate later checking in this file. FuncReturnTypeDict = {} - + Db = GetDB() FileTable = 'Identifier' + str(FileID) SqlStatement = """ select Value, StartLine, ID @@ -1956,7 +1982,7 @@ def CheckNonBooleanValueComparison(FullFileName): PSL = [] for Result in ResultSet: PSL.append([Result[0], Result[1], Result[2]]) - + SqlStatement = """ select BodyStartLine, EndLine, Header, Modifier, ID from Function where BelongsToFile = %d @@ -1965,13 +1991,13 @@ def CheckNonBooleanValueComparison(FullFileName): FL = [] for Result in ResultSet: FL.append([Result[0], Result[1], Result[2], Result[3], Result[4]]) - + p = GetFuncDeclPattern() for Str in PSL: FuncRecord = GetFuncContainsPE(Str[1], FL) if FuncRecord == None: continue - + for Exp in GetPredicateListFromPredicateExpStr(Str[0]): # if p.match(Exp): # continue @@ -1986,9 +2012,9 @@ def CheckNonBooleanValueComparison(FullFileName): PredVarStr = PredVarStr[0:PredVarStr.find('(')] SearchInCache = True # Only direct function call using IsFuncCall branch. Multi-level ref. function call is considered a variable. - if TmpStr.startswith(PredVarStr): + if TmpStr.startswith(PredVarStr): IsFuncCall = True - + if PredVarStr.strip() in IgnoredKeywordList: continue StarList = [] @@ -1996,17 +2022,17 @@ def CheckNonBooleanValueComparison(FullFileName): # No variable found, maybe value first? like (0 == VarName) if len(PredVarList) == 0: continue - + if SearchInCache: Type = FuncReturnTypeDict.get(PredVarStr) if Type != None: if Type.find('BOOLEAN') == -1: PrintErrorMsg(ERROR_PREDICATE_EXPRESSION_CHECK_NO_BOOLEAN_OPERATOR, 'Predicate Expression: %s' % Exp, FileTable, Str[2]) continue - + if PredVarStr in FuncReturnTypeDict: continue - + Type = GetVarInfo(PredVarList, FuncRecord, FullFileName, IsFuncCall, 'BOOLEAN', StarList) if SearchInCache: FuncReturnTypeDict[PredVarStr] = Type @@ -2014,18 +2040,18 @@ def CheckNonBooleanValueComparison(FullFileName): continue if Type.find('BOOLEAN') == -1: PrintErrorMsg(ERROR_PREDICATE_EXPRESSION_CHECK_NO_BOOLEAN_OPERATOR, 'Predicate Expression: %s' % Exp, FileTable, Str[2]) - + def CheckBooleanValueComparison(FullFileName): ErrorMsgList = [] - + FileID = GetTableID(FullFileName, ErrorMsgList) if FileID < 0: return ErrorMsgList - + # cache the found function return type to accelerate later checking in this file. FuncReturnTypeDict = {} - + Db = GetDB() FileTable = 'Identifier' + str(FileID) SqlStatement = """ select Value, StartLine, ID @@ -2038,7 +2064,7 @@ def CheckBooleanValueComparison(FullFileName): PSL = [] for Result in ResultSet: PSL.append([Result[0], Result[1], Result[2]]) - + SqlStatement = """ select BodyStartLine, EndLine, Header, Modifier, ID from Function where BelongsToFile = %d @@ -2047,13 +2073,13 @@ def CheckBooleanValueComparison(FullFileName): FL = [] for Result in ResultSet: FL.append([Result[0], Result[1], Result[2], Result[3], Result[4]]) - + p = GetFuncDeclPattern() for Str in PSL: FuncRecord = GetFuncContainsPE(Str[1], FL) if FuncRecord == None: continue - + for Exp in GetPredicateListFromPredicateExpStr(Str[0]): PredInfo = SplitPredicateStr(Exp) if PredInfo[1] in ('==', '!=') and PredInfo[0][1] in ('TRUE', 'FALSE'): @@ -2066,9 +2092,9 @@ def CheckBooleanValueComparison(FullFileName): PredVarStr = PredVarStr[0:PredVarStr.find('(')] SearchInCache = True # Only direct function call using IsFuncCall branch. Multi-level ref. function call is considered a variable. - if TmpStr.startswith(PredVarStr): + if TmpStr.startswith(PredVarStr): IsFuncCall = True - + if PredVarStr.strip() in IgnoredKeywordList: continue StarList = [] @@ -2076,17 +2102,17 @@ def CheckBooleanValueComparison(FullFileName): # No variable found, maybe value first? like (0 == VarName) if len(PredVarList) == 0: continue - + if SearchInCache: Type = FuncReturnTypeDict.get(PredVarStr) if Type != None: if Type.find('BOOLEAN') != -1: PrintErrorMsg(ERROR_PREDICATE_EXPRESSION_CHECK_BOOLEAN_VALUE, 'Predicate Expression: %s' % Exp, FileTable, Str[2]) continue - + if PredVarStr in FuncReturnTypeDict: continue - + Type = GetVarInfo(PredVarList, FuncRecord, FullFileName, IsFuncCall, 'BOOLEAN', StarList) if SearchInCache: FuncReturnTypeDict[PredVarStr] = Type @@ -2094,15 +2120,15 @@ def CheckBooleanValueComparison(FullFileName): continue if Type.find('BOOLEAN') != -1: PrintErrorMsg(ERROR_PREDICATE_EXPRESSION_CHECK_BOOLEAN_VALUE, 'Predicate Expression: %s' % Exp, FileTable, Str[2]) - + def CheckHeaderFileData(FullFileName): ErrorMsgList = [] - + FileID = GetTableID(FullFileName, ErrorMsgList) if FileID < 0: return ErrorMsgList - + Db = GetDB() FileTable = 'Identifier' + str(FileID) SqlStatement = """ select ID, Modifier @@ -2113,7 +2139,7 @@ def CheckHeaderFileData(FullFileName): for Result in ResultSet: if not Result[1].startswith('extern'): PrintErrorMsg(ERROR_INCLUDE_FILE_CHECK_DATA, 'Variable definition appears in header file', FileTable, Result[0]) - + SqlStatement = """ select ID from Function where BelongsToFile = %d @@ -2126,11 +2152,11 @@ def CheckHeaderFileData(FullFileName): def CheckHeaderFileIfndef(FullFileName): ErrorMsgList = [] - + FileID = GetTableID(FullFileName, ErrorMsgList) if FileID < 0: return ErrorMsgList - + Db = GetDB() FileTable = 'Identifier' + str(FileID) SqlStatement = """ select Value, StartLine @@ -2151,7 +2177,7 @@ def CheckHeaderFileIfndef(FullFileName): if not Result[0].startswith('/*') and not Result[0].startswith('//'): PrintErrorMsg(ERROR_INCLUDE_FILE_CHECK_IFNDEF_STATEMENT_2, '', 'File', FileID) break - + SqlStatement = """ select Value from %s where StartLine > (select max(EndLine) from %s where Model = %d) @@ -2164,11 +2190,11 @@ def CheckHeaderFileIfndef(FullFileName): def CheckDoxygenCommand(FullFileName): ErrorMsgList = [] - + FileID = GetTableID(FullFileName, ErrorMsgList) if FileID < 0: return ErrorMsgList - + Db = GetDB() FileTable = 'Identifier' + str(FileID) SqlStatement = """ select Value, ID @@ -2198,17 +2224,17 @@ def CheckDoxygenCommand(FullFileName): RealCmd = Part[1:Index] if RealCmd not in DoxygenCommandList: PrintErrorMsg(ERROR_DOXYGEN_CHECK_COMMAND, 'Unknown doxygen command %s' % Part, FileTable, Result[1]) - - + + def CheckDoxygenTripleForwardSlash(FullFileName): ErrorMsgList = [] - + FileID = GetTableID(FullFileName, ErrorMsgList) if FileID < 0: return ErrorMsgList - + Db = GetDB() - + SqlStatement = """ select ID, BodyStartLine, BodyStartColumn, EndLine, EndColumn from Function where BelongsToFile = %d @@ -2216,17 +2242,17 @@ def CheckDoxygenTripleForwardSlash(FullFileName): ResultSet = Db.TblFile.Exec(SqlStatement) if len(ResultSet) == 0: return - - FuncDefSet = [] + + FuncDefSet = [] for Result in ResultSet: FuncDefSet.append(Result) - - + + FileTable = 'Identifier' + str(FileID) SqlStatement = """ select Value, ID, StartLine, StartColumn, EndLine, EndColumn from %s - where Model = %d - + where Model = %d + """ % (FileTable, DataClass.MODEL_IDENTIFIER_COMMENT) ResultSet = Db.TblFile.Exec(SqlStatement) CommentSet = [] @@ -2235,8 +2261,8 @@ def CheckDoxygenTripleForwardSlash(FullFileName): CommentSet.append(Result) except: print 'Unrecognized chars in comment of file %s', FullFileName - - + + for Result in CommentSet: CommentStr = Result[0] StartLine = Result[2] @@ -2245,7 +2271,7 @@ def CheckDoxygenTripleForwardSlash(FullFileName): EndColumn = Result[5] if not CommentStr.startswith('///<'): continue - + Found = False for FuncDef in FuncDefSet: if StartLine == FuncDef[1] and StartColumn > FuncDef[2] and EndLine == FuncDef[3] and EndColumn < FuncDef[4]: @@ -2266,11 +2292,11 @@ def CheckDoxygenTripleForwardSlash(FullFileName): def CheckFileHeaderDoxygenComments(FullFileName): ErrorMsgList = [] - + FileID = GetTableID(FullFileName, ErrorMsgList) if FileID < 0: return ErrorMsgList - + Db = GetDB() FileTable = 'Identifier' + str(FileID) SqlStatement = """ select Value, ID @@ -2281,7 +2307,7 @@ def CheckFileHeaderDoxygenComments(FullFileName): if len(ResultSet) == 0: PrintErrorMsg(ERROR_HEADER_CHECK_FILE, 'No Comment appear at the very beginning of file.', 'File', FileID) return ErrorMsgList - + for Result in ResultSet: CommentStr = Result[0] if not CommentStr.startswith('/** @file'): @@ -2293,18 +2319,18 @@ def CheckFileHeaderDoxygenComments(FullFileName): def CheckFuncHeaderDoxygenComments(FullFileName): ErrorMsgList = [] - + FileID = GetTableID(FullFileName, ErrorMsgList) if FileID < 0: return ErrorMsgList - + Db = GetDB() FileTable = 'Identifier' + str(FileID) SqlStatement = """ select Value, StartLine, EndLine, ID from %s where Model = %d """ % (FileTable, DataClass.MODEL_IDENTIFIER_COMMENT) - + ResultSet = Db.TblFile.Exec(SqlStatement) CommentSet = [] try: @@ -2312,7 +2338,7 @@ def CheckFuncHeaderDoxygenComments(FullFileName): CommentSet.append(Result) except: print 'Unrecognized chars in comment of file %s', FullFileName - + # Func Decl check SqlStatement = """ select Modifier, Name, StartLine, ID, Value from %s @@ -2329,13 +2355,13 @@ def CheckFuncHeaderDoxygenComments(FullFileName): continue ErrorMsgList.append('Line %d :Function %s has NO comment immediately preceding it.' % (Result[2], Result[1])) PrintErrorMsg(ERROR_HEADER_CHECK_FUNCTION, 'Function [%s] has NO comment immediately preceding it.' % (FuncName), FileTable, Result[3]) - + # Func Def check SqlStatement = """ select Value, StartLine, EndLine, ID from %s where Model = %d """ % (FileTable, DataClass.MODEL_IDENTIFIER_FUNCTION_HEADER) - + ResultSet = Db.TblFile.Exec(SqlStatement) CommentSet = [] try: @@ -2343,7 +2369,7 @@ def CheckFuncHeaderDoxygenComments(FullFileName): CommentSet.append(Result) except: print 'Unrecognized chars in comment of file %s', FullFileName - + SqlStatement = """ select Modifier, Header, StartLine, ID, Name from Function where BelongsToFile = %d @@ -2376,9 +2402,9 @@ def GetDoxygenStrFromComment(Str): while i < len(ParamTagList): DoxygenStrList.append('@param' + ParamTagList[i]) i += 1 - + Str = ParamTagList[0] - + RetvalTagList = ParamTagList[-1].split('@retval') if len(RetvalTagList) > 1: if len(ParamTagList) > 1: @@ -2387,7 +2413,7 @@ def GetDoxygenStrFromComment(Str): while i < len(RetvalTagList): DoxygenStrList.append('@retval' + RetvalTagList[i]) i += 1 - + ReturnTagList = RetvalTagList[-1].split('@return') if len(ReturnTagList) > 1: if len(RetvalTagList) > 1: @@ -2398,12 +2424,12 @@ def GetDoxygenStrFromComment(Str): while i < len(ReturnTagList): DoxygenStrList.append('@return' + ReturnTagList[i]) i += 1 - + if len(DoxygenStrList) > 0: DoxygenStrList[-1] = DoxygenStrList[-1].rstrip('--*/') - + return DoxygenStrList - + def CheckGeneralDoxygenCommentLayout(Str, StartLine, ErrorMsgList, CommentId = -1, TableName = ''): #/** --*/ @retval after @param if not Str.startswith('/**'): @@ -2417,10 +2443,10 @@ def CheckGeneralDoxygenCommentLayout(Str, StartLine, ErrorMsgList, CommentId = - if (FirstRetvalIndex > 0) and (LastParamIndex > 0) and (FirstRetvalIndex < LastParamIndex): ErrorMsgList.append('Line %d : @retval appear before @param ' % StartLine) PrintErrorMsg(ERROR_DOXYGEN_CHECK_FUNCTION_HEADER, 'in Comment, @retval appear before @param ', TableName, CommentId) - + def CheckFunctionHeaderConsistentWithDoxygenComment(FuncModifier, FuncHeader, FuncStartLine, CommentStr, CommentStartLine, ErrorMsgList, CommentId = -1, TableName = ''): - - ParamList = GetParamList(FuncHeader) + + ParamList = GetParamList(FuncHeader) CheckGeneralDoxygenCommentLayout(CommentStr, CommentStartLine, ErrorMsgList, CommentId, TableName) DescriptionStr = CommentStr DoxygenStrList = GetDoxygenStrFromComment(DescriptionStr) @@ -2456,32 +2482,32 @@ def CheckFunctionHeaderConsistentWithDoxygenComment(FuncModifier, FuncHeader, Fu if Part.strip() == 'IN': InOutStr += 'in' if Part.strip() == 'OUT': - if InOutStr != '': + if InOutStr != '': InOutStr += ', out' else: InOutStr = 'out' - + if InOutStr != '': if Tag.find('['+InOutStr+']') == -1: - ErrorMsgList.append('Line %d : in Comment, \"%s\" does NOT have %s ' % (CommentStartLine, (TagPartList[0] + ' ' +TagPartList[1]).replace('\n', '').replace('\r', ''), '['+InOutStr+']')) + ErrorMsgList.append('Line %d : in Comment, \"%s\" does NOT have %s ' % (CommentStartLine, (TagPartList[0] + ' ' +TagPartList[1]).replace('\n', '').replace('\r', ''), '['+InOutStr+']')) PrintErrorMsg(ERROR_DOXYGEN_CHECK_FUNCTION_HEADER, 'in Comment, \"%s\" does NOT have %s ' % ((TagPartList[0] + ' ' +TagPartList[1]).replace('\n', '').replace('\r', ''), '['+InOutStr+']'), TableName, CommentId) if Tag.find(ParamName) == -1 and ParamName != 'VOID' and ParamName != 'void': - ErrorMsgList.append('Line %d : in Comment, \"%s\" does NOT consistent with parameter name %s ' % (CommentStartLine, (TagPartList[0] + ' ' +TagPartList[1]).replace('\n', '').replace('\r', ''), ParamName)) + ErrorMsgList.append('Line %d : in Comment, \"%s\" does NOT consistent with parameter name %s ' % (CommentStartLine, (TagPartList[0] + ' ' +TagPartList[1]).replace('\n', '').replace('\r', ''), ParamName)) PrintErrorMsg(ERROR_DOXYGEN_CHECK_FUNCTION_HEADER, 'in Comment, \"%s\" does NOT consistent with parameter name %s ' % ((TagPartList[0] + ' ' +TagPartList[1]).replace('\n', '').replace('\r', ''), ParamName), TableName, CommentId) Index += 1 - + if Index < ParamNumber: ErrorMsgList.append('Line %d : Number of doxygen tags in comment less than number of function parameters' % CommentStartLine) PrintErrorMsg(ERROR_DOXYGEN_CHECK_FUNCTION_HEADER, 'Number of doxygen tags in comment less than number of function parameters ', TableName, CommentId) # VOID return type, NOT VOID*. VOID* should be matched with a doxygen tag. if (FuncModifier.find('VOID') != -1 or FuncModifier.find('void') != -1) and FuncModifier.find('*') == -1: - + # assume we allow a return description tag for void func. return. that's why 'DoxygenTagNumber - 1' is used instead of 'DoxygenTagNumber' if Index < DoxygenTagNumber - 1 or (Index < DoxygenTagNumber and DoxygenStrList[Index].startswith('@retval')): ErrorMsgList.append('Line %d : VOID return type need NO doxygen tags in comment' % CommentStartLine) PrintErrorMsg(ERROR_DOXYGEN_CHECK_FUNCTION_HEADER, 'VOID return type need no doxygen tags in comment ', TableName, CommentId) else: - if Index < DoxygenTagNumber and not DoxygenStrList[Index].startswith('@retval') and not DoxygenStrList[Index].startswith('@return'): + if Index < DoxygenTagNumber and not DoxygenStrList[Index].startswith('@retval') and not DoxygenStrList[Index].startswith('@return'): ErrorMsgList.append('Line %d : Number of @param doxygen tags in comment does NOT match number of function parameters' % CommentStartLine) PrintErrorMsg(ERROR_DOXYGEN_CHECK_FUNCTION_HEADER, 'Number of @param doxygen tags in comment does NOT match number of function parameters ', TableName, CommentId) else: @@ -2496,7 +2522,7 @@ if __name__ == '__main__': # EdkLogger.Initialize() # EdkLogger.SetLevel(EdkLogger.QUIET) -# CollectSourceCodeDataIntoDB(sys.argv[1]) +# CollectSourceCodeDataIntoDB(sys.argv[1]) MsgList = CheckFuncHeaderDoxygenComments('C:\\Combo\\R9\\LakeportX64Dev\\FlashDevicePkg\\Library\\SpiFlashChipM25P64\\SpiFlashChipM25P64.c') for Msg in MsgList: print Msg diff --git a/BaseTools/Source/Python/Ecc/exception.xml b/BaseTools/Source/Python/Ecc/exception.xml index 0dc67527b5..58cb600e46 100644 --- a/BaseTools/Source/Python/Ecc/exception.xml +++ b/BaseTools/Source/Python/Ecc/exception.xml @@ -1,4 +1,14 @@ + + Copyright (c) 2009 - 2010, Intel Corporation. + + All rights reserved. + This program and the accompanying materials are licensed and made available + under the terms and conditions of the BSD License which accompanies this distribution. + The full text of the license may be found at http://opensource.org/licenses/bsd-license.php + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTIES + OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + __debugbreak 4002 diff --git a/BaseTools/Source/Python/Eot/CLexer.py b/BaseTools/Source/Python/Eot/CLexer.py new file mode 100644 index 0000000000..947ac4c8e3 --- /dev/null +++ b/BaseTools/Source/Python/Eot/CLexer.py @@ -0,0 +1,4947 @@ +# $ANTLR 3.0.1 C.g 2010-02-23 09:58:53 + +from antlr3 import * +from antlr3.compat import set, frozenset + +## @file +# The file defines the Lexer for C source files. +# +# THIS FILE IS AUTO-GENENERATED. PLEASE DON NOT MODIFY THIS FILE. +# This file is generated by running: +# java org.antlr.Tool C.g +# +# Copyright (c) 2009 - 2010, Intel Corporation All rights reserved. +# +# This program and the accompanying materials are licensed and made available +# under the terms and conditions of the BSD License which accompanies this +# distribution. The full text of the license may be found at: +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +## + + + +# for convenience in actions +HIDDEN = BaseRecognizer.HIDDEN + +# token types +T114=114 +T115=115 +T116=116 +T117=117 +FloatTypeSuffix=16 +LETTER=11 +T29=29 +T28=28 +T27=27 +T26=26 +T25=25 +EOF=-1 +STRING_LITERAL=9 +FLOATING_POINT_LITERAL=10 +T38=38 +T37=37 +T39=39 +T34=34 +COMMENT=22 +T33=33 +T36=36 +T35=35 +T30=30 +T32=32 +T31=31 +LINE_COMMENT=23 +IntegerTypeSuffix=14 +CHARACTER_LITERAL=8 +T49=49 +T48=48 +T100=100 +T43=43 +T42=42 +T102=102 +T41=41 +T101=101 +T40=40 +T47=47 +T46=46 +T45=45 +T44=44 +T109=109 +T107=107 +T108=108 +T105=105 +WS=19 +T106=106 +T103=103 +T104=104 +T50=50 +LINE_COMMAND=24 +T59=59 +T113=113 +T52=52 +T112=112 +T51=51 +T111=111 +T54=54 +T110=110 +EscapeSequence=12 +DECIMAL_LITERAL=7 +T53=53 +T56=56 +T55=55 +T58=58 +T57=57 +T75=75 +T76=76 +T73=73 +T74=74 +T79=79 +T77=77 +T78=78 +Exponent=15 +HexDigit=13 +T72=72 +T71=71 +T70=70 +T62=62 +T63=63 +T64=64 +T65=65 +T66=66 +T67=67 +T68=68 +T69=69 +IDENTIFIER=4 +UnicodeVocabulary=21 +HEX_LITERAL=5 +T61=61 +T60=60 +T99=99 +T97=97 +BS=20 +T98=98 +T95=95 +T96=96 +OCTAL_LITERAL=6 +T94=94 +Tokens=118 +T93=93 +T92=92 +T91=91 +T90=90 +T88=88 +T89=89 +T84=84 +T85=85 +T86=86 +T87=87 +UnicodeEscape=18 +T81=81 +T80=80 +T83=83 +OctalEscape=17 +T82=82 + +class CLexer(Lexer): + + grammarFileName = "C.g" + + def __init__(self, input=None): + Lexer.__init__(self, input) + self.dfa25 = self.DFA25( + self, 25, + eot = self.DFA25_eot, + eof = self.DFA25_eof, + min = self.DFA25_min, + max = self.DFA25_max, + accept = self.DFA25_accept, + special = self.DFA25_special, + transition = self.DFA25_transition + ) + self.dfa35 = self.DFA35( + self, 35, + eot = self.DFA35_eot, + eof = self.DFA35_eof, + min = self.DFA35_min, + max = self.DFA35_max, + accept = self.DFA35_accept, + special = self.DFA35_special, + transition = self.DFA35_transition + ) + + + + + + + # $ANTLR start T25 + def mT25(self, ): + + try: + self.type = T25 + + # C.g:27:5: ( ';' ) + # C.g:27:7: ';' + self.match(u';') + + + + + + finally: + + pass + + # $ANTLR end T25 + + + + # $ANTLR start T26 + def mT26(self, ): + + try: + self.type = T26 + + # C.g:28:5: ( 'typedef' ) + # C.g:28:7: 'typedef' + self.match("typedef") + + + + + + + finally: + + pass + + # $ANTLR end T26 + + + + # $ANTLR start T27 + def mT27(self, ): + + try: + self.type = T27 + + # C.g:29:5: ( ',' ) + # C.g:29:7: ',' + self.match(u',') + + + + + + finally: + + pass + + # $ANTLR end T27 + + + + # $ANTLR start T28 + def mT28(self, ): + + try: + self.type = T28 + + # C.g:30:5: ( '=' ) + # C.g:30:7: '=' + self.match(u'=') + + + + + + finally: + + pass + + # $ANTLR end T28 + + + + # $ANTLR start T29 + def mT29(self, ): + + try: + self.type = T29 + + # C.g:31:5: ( 'extern' ) + # C.g:31:7: 'extern' + self.match("extern") + + + + + + + finally: + + pass + + # $ANTLR end T29 + + + + # $ANTLR start T30 + def mT30(self, ): + + try: + self.type = T30 + + # C.g:32:5: ( 'static' ) + # C.g:32:7: 'static' + self.match("static") + + + + + + + finally: + + pass + + # $ANTLR end T30 + + + + # $ANTLR start T31 + def mT31(self, ): + + try: + self.type = T31 + + # C.g:33:5: ( 'auto' ) + # C.g:33:7: 'auto' + self.match("auto") + + + + + + + finally: + + pass + + # $ANTLR end T31 + + + + # $ANTLR start T32 + def mT32(self, ): + + try: + self.type = T32 + + # C.g:34:5: ( 'register' ) + # C.g:34:7: 'register' + self.match("register") + + + + + + + finally: + + pass + + # $ANTLR end T32 + + + + # $ANTLR start T33 + def mT33(self, ): + + try: + self.type = T33 + + # C.g:35:5: ( 'STATIC' ) + # C.g:35:7: 'STATIC' + self.match("STATIC") + + + + + + + finally: + + pass + + # $ANTLR end T33 + + + + # $ANTLR start T34 + def mT34(self, ): + + try: + self.type = T34 + + # C.g:36:5: ( 'void' ) + # C.g:36:7: 'void' + self.match("void") + + + + + + + finally: + + pass + + # $ANTLR end T34 + + + + # $ANTLR start T35 + def mT35(self, ): + + try: + self.type = T35 + + # C.g:37:5: ( 'char' ) + # C.g:37:7: 'char' + self.match("char") + + + + + + + finally: + + pass + + # $ANTLR end T35 + + + + # $ANTLR start T36 + def mT36(self, ): + + try: + self.type = T36 + + # C.g:38:5: ( 'short' ) + # C.g:38:7: 'short' + self.match("short") + + + + + + + finally: + + pass + + # $ANTLR end T36 + + + + # $ANTLR start T37 + def mT37(self, ): + + try: + self.type = T37 + + # C.g:39:5: ( 'int' ) + # C.g:39:7: 'int' + self.match("int") + + + + + + + finally: + + pass + + # $ANTLR end T37 + + + + # $ANTLR start T38 + def mT38(self, ): + + try: + self.type = T38 + + # C.g:40:5: ( 'long' ) + # C.g:40:7: 'long' + self.match("long") + + + + + + + finally: + + pass + + # $ANTLR end T38 + + + + # $ANTLR start T39 + def mT39(self, ): + + try: + self.type = T39 + + # C.g:41:5: ( 'float' ) + # C.g:41:7: 'float' + self.match("float") + + + + + + + finally: + + pass + + # $ANTLR end T39 + + + + # $ANTLR start T40 + def mT40(self, ): + + try: + self.type = T40 + + # C.g:42:5: ( 'double' ) + # C.g:42:7: 'double' + self.match("double") + + + + + + + finally: + + pass + + # $ANTLR end T40 + + + + # $ANTLR start T41 + def mT41(self, ): + + try: + self.type = T41 + + # C.g:43:5: ( 'signed' ) + # C.g:43:7: 'signed' + self.match("signed") + + + + + + + finally: + + pass + + # $ANTLR end T41 + + + + # $ANTLR start T42 + def mT42(self, ): + + try: + self.type = T42 + + # C.g:44:5: ( 'unsigned' ) + # C.g:44:7: 'unsigned' + self.match("unsigned") + + + + + + + finally: + + pass + + # $ANTLR end T42 + + + + # $ANTLR start T43 + def mT43(self, ): + + try: + self.type = T43 + + # C.g:45:5: ( '{' ) + # C.g:45:7: '{' + self.match(u'{') + + + + + + finally: + + pass + + # $ANTLR end T43 + + + + # $ANTLR start T44 + def mT44(self, ): + + try: + self.type = T44 + + # C.g:46:5: ( '}' ) + # C.g:46:7: '}' + self.match(u'}') + + + + + + finally: + + pass + + # $ANTLR end T44 + + + + # $ANTLR start T45 + def mT45(self, ): + + try: + self.type = T45 + + # C.g:47:5: ( 'struct' ) + # C.g:47:7: 'struct' + self.match("struct") + + + + + + + finally: + + pass + + # $ANTLR end T45 + + + + # $ANTLR start T46 + def mT46(self, ): + + try: + self.type = T46 + + # C.g:48:5: ( 'union' ) + # C.g:48:7: 'union' + self.match("union") + + + + + + + finally: + + pass + + # $ANTLR end T46 + + + + # $ANTLR start T47 + def mT47(self, ): + + try: + self.type = T47 + + # C.g:49:5: ( ':' ) + # C.g:49:7: ':' + self.match(u':') + + + + + + finally: + + pass + + # $ANTLR end T47 + + + + # $ANTLR start T48 + def mT48(self, ): + + try: + self.type = T48 + + # C.g:50:5: ( 'enum' ) + # C.g:50:7: 'enum' + self.match("enum") + + + + + + + finally: + + pass + + # $ANTLR end T48 + + + + # $ANTLR start T49 + def mT49(self, ): + + try: + self.type = T49 + + # C.g:51:5: ( 'const' ) + # C.g:51:7: 'const' + self.match("const") + + + + + + + finally: + + pass + + # $ANTLR end T49 + + + + # $ANTLR start T50 + def mT50(self, ): + + try: + self.type = T50 + + # C.g:52:5: ( 'volatile' ) + # C.g:52:7: 'volatile' + self.match("volatile") + + + + + + + finally: + + pass + + # $ANTLR end T50 + + + + # $ANTLR start T51 + def mT51(self, ): + + try: + self.type = T51 + + # C.g:53:5: ( 'IN' ) + # C.g:53:7: 'IN' + self.match("IN") + + + + + + + finally: + + pass + + # $ANTLR end T51 + + + + # $ANTLR start T52 + def mT52(self, ): + + try: + self.type = T52 + + # C.g:54:5: ( 'OUT' ) + # C.g:54:7: 'OUT' + self.match("OUT") + + + + + + + finally: + + pass + + # $ANTLR end T52 + + + + # $ANTLR start T53 + def mT53(self, ): + + try: + self.type = T53 + + # C.g:55:5: ( 'OPTIONAL' ) + # C.g:55:7: 'OPTIONAL' + self.match("OPTIONAL") + + + + + + + finally: + + pass + + # $ANTLR end T53 + + + + # $ANTLR start T54 + def mT54(self, ): + + try: + self.type = T54 + + # C.g:56:5: ( 'CONST' ) + # C.g:56:7: 'CONST' + self.match("CONST") + + + + + + + finally: + + pass + + # $ANTLR end T54 + + + + # $ANTLR start T55 + def mT55(self, ): + + try: + self.type = T55 + + # C.g:57:5: ( 'UNALIGNED' ) + # C.g:57:7: 'UNALIGNED' + self.match("UNALIGNED") + + + + + + + finally: + + pass + + # $ANTLR end T55 + + + + # $ANTLR start T56 + def mT56(self, ): + + try: + self.type = T56 + + # C.g:58:5: ( 'VOLATILE' ) + # C.g:58:7: 'VOLATILE' + self.match("VOLATILE") + + + + + + + finally: + + pass + + # $ANTLR end T56 + + + + # $ANTLR start T57 + def mT57(self, ): + + try: + self.type = T57 + + # C.g:59:5: ( 'GLOBAL_REMOVE_IF_UNREFERENCED' ) + # C.g:59:7: 'GLOBAL_REMOVE_IF_UNREFERENCED' + self.match("GLOBAL_REMOVE_IF_UNREFERENCED") + + + + + + + finally: + + pass + + # $ANTLR end T57 + + + + # $ANTLR start T58 + def mT58(self, ): + + try: + self.type = T58 + + # C.g:60:5: ( 'EFIAPI' ) + # C.g:60:7: 'EFIAPI' + self.match("EFIAPI") + + + + + + + finally: + + pass + + # $ANTLR end T58 + + + + # $ANTLR start T59 + def mT59(self, ): + + try: + self.type = T59 + + # C.g:61:5: ( 'EFI_BOOTSERVICE' ) + # C.g:61:7: 'EFI_BOOTSERVICE' + self.match("EFI_BOOTSERVICE") + + + + + + + finally: + + pass + + # $ANTLR end T59 + + + + # $ANTLR start T60 + def mT60(self, ): + + try: + self.type = T60 + + # C.g:62:5: ( 'EFI_RUNTIMESERVICE' ) + # C.g:62:7: 'EFI_RUNTIMESERVICE' + self.match("EFI_RUNTIMESERVICE") + + + + + + + finally: + + pass + + # $ANTLR end T60 + + + + # $ANTLR start T61 + def mT61(self, ): + + try: + self.type = T61 + + # C.g:63:5: ( 'PACKED' ) + # C.g:63:7: 'PACKED' + self.match("PACKED") + + + + + + + finally: + + pass + + # $ANTLR end T61 + + + + # $ANTLR start T62 + def mT62(self, ): + + try: + self.type = T62 + + # C.g:64:5: ( '(' ) + # C.g:64:7: '(' + self.match(u'(') + + + + + + finally: + + pass + + # $ANTLR end T62 + + + + # $ANTLR start T63 + def mT63(self, ): + + try: + self.type = T63 + + # C.g:65:5: ( ')' ) + # C.g:65:7: ')' + self.match(u')') + + + + + + finally: + + pass + + # $ANTLR end T63 + + + + # $ANTLR start T64 + def mT64(self, ): + + try: + self.type = T64 + + # C.g:66:5: ( '[' ) + # C.g:66:7: '[' + self.match(u'[') + + + + + + finally: + + pass + + # $ANTLR end T64 + + + + # $ANTLR start T65 + def mT65(self, ): + + try: + self.type = T65 + + # C.g:67:5: ( ']' ) + # C.g:67:7: ']' + self.match(u']') + + + + + + finally: + + pass + + # $ANTLR end T65 + + + + # $ANTLR start T66 + def mT66(self, ): + + try: + self.type = T66 + + # C.g:68:5: ( '*' ) + # C.g:68:7: '*' + self.match(u'*') + + + + + + finally: + + pass + + # $ANTLR end T66 + + + + # $ANTLR start T67 + def mT67(self, ): + + try: + self.type = T67 + + # C.g:69:5: ( '...' ) + # C.g:69:7: '...' + self.match("...") + + + + + + + finally: + + pass + + # $ANTLR end T67 + + + + # $ANTLR start T68 + def mT68(self, ): + + try: + self.type = T68 + + # C.g:70:5: ( '+' ) + # C.g:70:7: '+' + self.match(u'+') + + + + + + finally: + + pass + + # $ANTLR end T68 + + + + # $ANTLR start T69 + def mT69(self, ): + + try: + self.type = T69 + + # C.g:71:5: ( '-' ) + # C.g:71:7: '-' + self.match(u'-') + + + + + + finally: + + pass + + # $ANTLR end T69 + + + + # $ANTLR start T70 + def mT70(self, ): + + try: + self.type = T70 + + # C.g:72:5: ( '/' ) + # C.g:72:7: '/' + self.match(u'/') + + + + + + finally: + + pass + + # $ANTLR end T70 + + + + # $ANTLR start T71 + def mT71(self, ): + + try: + self.type = T71 + + # C.g:73:5: ( '%' ) + # C.g:73:7: '%' + self.match(u'%') + + + + + + finally: + + pass + + # $ANTLR end T71 + + + + # $ANTLR start T72 + def mT72(self, ): + + try: + self.type = T72 + + # C.g:74:5: ( '++' ) + # C.g:74:7: '++' + self.match("++") + + + + + + + finally: + + pass + + # $ANTLR end T72 + + + + # $ANTLR start T73 + def mT73(self, ): + + try: + self.type = T73 + + # C.g:75:5: ( '--' ) + # C.g:75:7: '--' + self.match("--") + + + + + + + finally: + + pass + + # $ANTLR end T73 + + + + # $ANTLR start T74 + def mT74(self, ): + + try: + self.type = T74 + + # C.g:76:5: ( 'sizeof' ) + # C.g:76:7: 'sizeof' + self.match("sizeof") + + + + + + + finally: + + pass + + # $ANTLR end T74 + + + + # $ANTLR start T75 + def mT75(self, ): + + try: + self.type = T75 + + # C.g:77:5: ( '.' ) + # C.g:77:7: '.' + self.match(u'.') + + + + + + finally: + + pass + + # $ANTLR end T75 + + + + # $ANTLR start T76 + def mT76(self, ): + + try: + self.type = T76 + + # C.g:78:5: ( '->' ) + # C.g:78:7: '->' + self.match("->") + + + + + + + finally: + + pass + + # $ANTLR end T76 + + + + # $ANTLR start T77 + def mT77(self, ): + + try: + self.type = T77 + + # C.g:79:5: ( '&' ) + # C.g:79:7: '&' + self.match(u'&') + + + + + + finally: + + pass + + # $ANTLR end T77 + + + + # $ANTLR start T78 + def mT78(self, ): + + try: + self.type = T78 + + # C.g:80:5: ( '~' ) + # C.g:80:7: '~' + self.match(u'~') + + + + + + finally: + + pass + + # $ANTLR end T78 + + + + # $ANTLR start T79 + def mT79(self, ): + + try: + self.type = T79 + + # C.g:81:5: ( '!' ) + # C.g:81:7: '!' + self.match(u'!') + + + + + + finally: + + pass + + # $ANTLR end T79 + + + + # $ANTLR start T80 + def mT80(self, ): + + try: + self.type = T80 + + # C.g:82:5: ( '*=' ) + # C.g:82:7: '*=' + self.match("*=") + + + + + + + finally: + + pass + + # $ANTLR end T80 + + + + # $ANTLR start T81 + def mT81(self, ): + + try: + self.type = T81 + + # C.g:83:5: ( '/=' ) + # C.g:83:7: '/=' + self.match("/=") + + + + + + + finally: + + pass + + # $ANTLR end T81 + + + + # $ANTLR start T82 + def mT82(self, ): + + try: + self.type = T82 + + # C.g:84:5: ( '%=' ) + # C.g:84:7: '%=' + self.match("%=") + + + + + + + finally: + + pass + + # $ANTLR end T82 + + + + # $ANTLR start T83 + def mT83(self, ): + + try: + self.type = T83 + + # C.g:85:5: ( '+=' ) + # C.g:85:7: '+=' + self.match("+=") + + + + + + + finally: + + pass + + # $ANTLR end T83 + + + + # $ANTLR start T84 + def mT84(self, ): + + try: + self.type = T84 + + # C.g:86:5: ( '-=' ) + # C.g:86:7: '-=' + self.match("-=") + + + + + + + finally: + + pass + + # $ANTLR end T84 + + + + # $ANTLR start T85 + def mT85(self, ): + + try: + self.type = T85 + + # C.g:87:5: ( '<<=' ) + # C.g:87:7: '<<=' + self.match("<<=") + + + + + + + finally: + + pass + + # $ANTLR end T85 + + + + # $ANTLR start T86 + def mT86(self, ): + + try: + self.type = T86 + + # C.g:88:5: ( '>>=' ) + # C.g:88:7: '>>=' + self.match(">>=") + + + + + + + finally: + + pass + + # $ANTLR end T86 + + + + # $ANTLR start T87 + def mT87(self, ): + + try: + self.type = T87 + + # C.g:89:5: ( '&=' ) + # C.g:89:7: '&=' + self.match("&=") + + + + + + + finally: + + pass + + # $ANTLR end T87 + + + + # $ANTLR start T88 + def mT88(self, ): + + try: + self.type = T88 + + # C.g:90:5: ( '^=' ) + # C.g:90:7: '^=' + self.match("^=") + + + + + + + finally: + + pass + + # $ANTLR end T88 + + + + # $ANTLR start T89 + def mT89(self, ): + + try: + self.type = T89 + + # C.g:91:5: ( '|=' ) + # C.g:91:7: '|=' + self.match("|=") + + + + + + + finally: + + pass + + # $ANTLR end T89 + + + + # $ANTLR start T90 + def mT90(self, ): + + try: + self.type = T90 + + # C.g:92:5: ( '?' ) + # C.g:92:7: '?' + self.match(u'?') + + + + + + finally: + + pass + + # $ANTLR end T90 + + + + # $ANTLR start T91 + def mT91(self, ): + + try: + self.type = T91 + + # C.g:93:5: ( '||' ) + # C.g:93:7: '||' + self.match("||") + + + + + + + finally: + + pass + + # $ANTLR end T91 + + + + # $ANTLR start T92 + def mT92(self, ): + + try: + self.type = T92 + + # C.g:94:5: ( '&&' ) + # C.g:94:7: '&&' + self.match("&&") + + + + + + + finally: + + pass + + # $ANTLR end T92 + + + + # $ANTLR start T93 + def mT93(self, ): + + try: + self.type = T93 + + # C.g:95:5: ( '|' ) + # C.g:95:7: '|' + self.match(u'|') + + + + + + finally: + + pass + + # $ANTLR end T93 + + + + # $ANTLR start T94 + def mT94(self, ): + + try: + self.type = T94 + + # C.g:96:5: ( '^' ) + # C.g:96:7: '^' + self.match(u'^') + + + + + + finally: + + pass + + # $ANTLR end T94 + + + + # $ANTLR start T95 + def mT95(self, ): + + try: + self.type = T95 + + # C.g:97:5: ( '==' ) + # C.g:97:7: '==' + self.match("==") + + + + + + + finally: + + pass + + # $ANTLR end T95 + + + + # $ANTLR start T96 + def mT96(self, ): + + try: + self.type = T96 + + # C.g:98:5: ( '!=' ) + # C.g:98:7: '!=' + self.match("!=") + + + + + + + finally: + + pass + + # $ANTLR end T96 + + + + # $ANTLR start T97 + def mT97(self, ): + + try: + self.type = T97 + + # C.g:99:5: ( '<' ) + # C.g:99:7: '<' + self.match(u'<') + + + + + + finally: + + pass + + # $ANTLR end T97 + + + + # $ANTLR start T98 + def mT98(self, ): + + try: + self.type = T98 + + # C.g:100:5: ( '>' ) + # C.g:100:7: '>' + self.match(u'>') + + + + + + finally: + + pass + + # $ANTLR end T98 + + + + # $ANTLR start T99 + def mT99(self, ): + + try: + self.type = T99 + + # C.g:101:5: ( '<=' ) + # C.g:101:7: '<=' + self.match("<=") + + + + + + + finally: + + pass + + # $ANTLR end T99 + + + + # $ANTLR start T100 + def mT100(self, ): + + try: + self.type = T100 + + # C.g:102:6: ( '>=' ) + # C.g:102:8: '>=' + self.match(">=") + + + + + + + finally: + + pass + + # $ANTLR end T100 + + + + # $ANTLR start T101 + def mT101(self, ): + + try: + self.type = T101 + + # C.g:103:6: ( '<<' ) + # C.g:103:8: '<<' + self.match("<<") + + + + + + + finally: + + pass + + # $ANTLR end T101 + + + + # $ANTLR start T102 + def mT102(self, ): + + try: + self.type = T102 + + # C.g:104:6: ( '>>' ) + # C.g:104:8: '>>' + self.match(">>") + + + + + + + finally: + + pass + + # $ANTLR end T102 + + + + # $ANTLR start T103 + def mT103(self, ): + + try: + self.type = T103 + + # C.g:105:6: ( '__asm__' ) + # C.g:105:8: '__asm__' + self.match("__asm__") + + + + + + + finally: + + pass + + # $ANTLR end T103 + + + + # $ANTLR start T104 + def mT104(self, ): + + try: + self.type = T104 + + # C.g:106:6: ( '_asm' ) + # C.g:106:8: '_asm' + self.match("_asm") + + + + + + + finally: + + pass + + # $ANTLR end T104 + + + + # $ANTLR start T105 + def mT105(self, ): + + try: + self.type = T105 + + # C.g:107:6: ( '__asm' ) + # C.g:107:8: '__asm' + self.match("__asm") + + + + + + + finally: + + pass + + # $ANTLR end T105 + + + + # $ANTLR start T106 + def mT106(self, ): + + try: + self.type = T106 + + # C.g:108:6: ( 'case' ) + # C.g:108:8: 'case' + self.match("case") + + + + + + + finally: + + pass + + # $ANTLR end T106 + + + + # $ANTLR start T107 + def mT107(self, ): + + try: + self.type = T107 + + # C.g:109:6: ( 'default' ) + # C.g:109:8: 'default' + self.match("default") + + + + + + + finally: + + pass + + # $ANTLR end T107 + + + + # $ANTLR start T108 + def mT108(self, ): + + try: + self.type = T108 + + # C.g:110:6: ( 'if' ) + # C.g:110:8: 'if' + self.match("if") + + + + + + + finally: + + pass + + # $ANTLR end T108 + + + + # $ANTLR start T109 + def mT109(self, ): + + try: + self.type = T109 + + # C.g:111:6: ( 'else' ) + # C.g:111:8: 'else' + self.match("else") + + + + + + + finally: + + pass + + # $ANTLR end T109 + + + + # $ANTLR start T110 + def mT110(self, ): + + try: + self.type = T110 + + # C.g:112:6: ( 'switch' ) + # C.g:112:8: 'switch' + self.match("switch") + + + + + + + finally: + + pass + + # $ANTLR end T110 + + + + # $ANTLR start T111 + def mT111(self, ): + + try: + self.type = T111 + + # C.g:113:6: ( 'while' ) + # C.g:113:8: 'while' + self.match("while") + + + + + + + finally: + + pass + + # $ANTLR end T111 + + + + # $ANTLR start T112 + def mT112(self, ): + + try: + self.type = T112 + + # C.g:114:6: ( 'do' ) + # C.g:114:8: 'do' + self.match("do") + + + + + + + finally: + + pass + + # $ANTLR end T112 + + + + # $ANTLR start T113 + def mT113(self, ): + + try: + self.type = T113 + + # C.g:115:6: ( 'for' ) + # C.g:115:8: 'for' + self.match("for") + + + + + + + finally: + + pass + + # $ANTLR end T113 + + + + # $ANTLR start T114 + def mT114(self, ): + + try: + self.type = T114 + + # C.g:116:6: ( 'goto' ) + # C.g:116:8: 'goto' + self.match("goto") + + + + + + + finally: + + pass + + # $ANTLR end T114 + + + + # $ANTLR start T115 + def mT115(self, ): + + try: + self.type = T115 + + # C.g:117:6: ( 'continue' ) + # C.g:117:8: 'continue' + self.match("continue") + + + + + + + finally: + + pass + + # $ANTLR end T115 + + + + # $ANTLR start T116 + def mT116(self, ): + + try: + self.type = T116 + + # C.g:118:6: ( 'break' ) + # C.g:118:8: 'break' + self.match("break") + + + + + + + finally: + + pass + + # $ANTLR end T116 + + + + # $ANTLR start T117 + def mT117(self, ): + + try: + self.type = T117 + + # C.g:119:6: ( 'return' ) + # C.g:119:8: 'return' + self.match("return") + + + + + + + finally: + + pass + + # $ANTLR end T117 + + + + # $ANTLR start IDENTIFIER + def mIDENTIFIER(self, ): + + try: + self.type = IDENTIFIER + + # C.g:586:2: ( LETTER ( LETTER | '0' .. '9' )* ) + # C.g:586:4: LETTER ( LETTER | '0' .. '9' )* + self.mLETTER() + + # C.g:586:11: ( LETTER | '0' .. '9' )* + while True: #loop1 + alt1 = 2 + LA1_0 = self.input.LA(1) + + if (LA1_0 == u'$' or (u'0' <= LA1_0 <= u'9') or (u'A' <= LA1_0 <= u'Z') or LA1_0 == u'_' or (u'a' <= LA1_0 <= u'z')) : + alt1 = 1 + + + if alt1 == 1: + # C.g: + if self.input.LA(1) == u'$' or (u'0' <= self.input.LA(1) <= u'9') or (u'A' <= self.input.LA(1) <= u'Z') or self.input.LA(1) == u'_' or (u'a' <= self.input.LA(1) <= u'z'): + self.input.consume(); + + else: + mse = MismatchedSetException(None, self.input) + self.recover(mse) + raise mse + + + + + else: + break #loop1 + + + + + + + finally: + + pass + + # $ANTLR end IDENTIFIER + + + + # $ANTLR start LETTER + def mLETTER(self, ): + + try: + # C.g:591:2: ( '$' | 'A' .. 'Z' | 'a' .. 'z' | '_' ) + # C.g: + if self.input.LA(1) == u'$' or (u'A' <= self.input.LA(1) <= u'Z') or self.input.LA(1) == u'_' or (u'a' <= self.input.LA(1) <= u'z'): + self.input.consume(); + + else: + mse = MismatchedSetException(None, self.input) + self.recover(mse) + raise mse + + + + + + + finally: + + pass + + # $ANTLR end LETTER + + + + # $ANTLR start CHARACTER_LITERAL + def mCHARACTER_LITERAL(self, ): + + try: + self.type = CHARACTER_LITERAL + + # C.g:598:5: ( ( 'L' )? '\\'' ( EscapeSequence | ~ ( '\\'' | '\\\\' ) ) '\\'' ) + # C.g:598:9: ( 'L' )? '\\'' ( EscapeSequence | ~ ( '\\'' | '\\\\' ) ) '\\'' + # C.g:598:9: ( 'L' )? + alt2 = 2 + LA2_0 = self.input.LA(1) + + if (LA2_0 == u'L') : + alt2 = 1 + if alt2 == 1: + # C.g:598:10: 'L' + self.match(u'L') + + + + + self.match(u'\'') + + # C.g:598:21: ( EscapeSequence | ~ ( '\\'' | '\\\\' ) ) + alt3 = 2 + LA3_0 = self.input.LA(1) + + if (LA3_0 == u'\\') : + alt3 = 1 + elif ((u'\u0000' <= LA3_0 <= u'&') or (u'(' <= LA3_0 <= u'[') or (u']' <= LA3_0 <= u'\uFFFE')) : + alt3 = 2 + else: + nvae = NoViableAltException("598:21: ( EscapeSequence | ~ ( '\\'' | '\\\\' ) )", 3, 0, self.input) + + raise nvae + + if alt3 == 1: + # C.g:598:23: EscapeSequence + self.mEscapeSequence() + + + + elif alt3 == 2: + # C.g:598:40: ~ ( '\\'' | '\\\\' ) + if (u'\u0000' <= self.input.LA(1) <= u'&') or (u'(' <= self.input.LA(1) <= u'[') or (u']' <= self.input.LA(1) <= u'\uFFFE'): + self.input.consume(); + + else: + mse = MismatchedSetException(None, self.input) + self.recover(mse) + raise mse + + + + + + self.match(u'\'') + + + + + + finally: + + pass + + # $ANTLR end CHARACTER_LITERAL + + + + # $ANTLR start STRING_LITERAL + def mSTRING_LITERAL(self, ): + + try: + self.type = STRING_LITERAL + + # C.g:602:5: ( ( 'L' )? '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' ) + # C.g:602:8: ( 'L' )? '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' + # C.g:602:8: ( 'L' )? + alt4 = 2 + LA4_0 = self.input.LA(1) + + if (LA4_0 == u'L') : + alt4 = 1 + if alt4 == 1: + # C.g:602:9: 'L' + self.match(u'L') + + + + + self.match(u'"') + + # C.g:602:19: ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* + while True: #loop5 + alt5 = 3 + LA5_0 = self.input.LA(1) + + if (LA5_0 == u'\\') : + alt5 = 1 + elif ((u'\u0000' <= LA5_0 <= u'!') or (u'#' <= LA5_0 <= u'[') or (u']' <= LA5_0 <= u'\uFFFE')) : + alt5 = 2 + + + if alt5 == 1: + # C.g:602:21: EscapeSequence + self.mEscapeSequence() + + + + elif alt5 == 2: + # C.g:602:38: ~ ( '\\\\' | '\"' ) + if (u'\u0000' <= self.input.LA(1) <= u'!') or (u'#' <= self.input.LA(1) <= u'[') or (u']' <= self.input.LA(1) <= u'\uFFFE'): + self.input.consume(); + + else: + mse = MismatchedSetException(None, self.input) + self.recover(mse) + raise mse + + + + + else: + break #loop5 + + + self.match(u'"') + + + + + + finally: + + pass + + # $ANTLR end STRING_LITERAL + + + + # $ANTLR start HEX_LITERAL + def mHEX_LITERAL(self, ): + + try: + self.type = HEX_LITERAL + + # C.g:605:13: ( '0' ( 'x' | 'X' ) ( HexDigit )+ ( IntegerTypeSuffix )? ) + # C.g:605:15: '0' ( 'x' | 'X' ) ( HexDigit )+ ( IntegerTypeSuffix )? + self.match(u'0') + + if self.input.LA(1) == u'X' or self.input.LA(1) == u'x': + self.input.consume(); + + else: + mse = MismatchedSetException(None, self.input) + self.recover(mse) + raise mse + + + # C.g:605:29: ( HexDigit )+ + cnt6 = 0 + while True: #loop6 + alt6 = 2 + LA6_0 = self.input.LA(1) + + if ((u'0' <= LA6_0 <= u'9') or (u'A' <= LA6_0 <= u'F') or (u'a' <= LA6_0 <= u'f')) : + alt6 = 1 + + + if alt6 == 1: + # C.g:605:29: HexDigit + self.mHexDigit() + + + + else: + if cnt6 >= 1: + break #loop6 + + eee = EarlyExitException(6, self.input) + raise eee + + cnt6 += 1 + + + # C.g:605:39: ( IntegerTypeSuffix )? + alt7 = 2 + LA7_0 = self.input.LA(1) + + if (LA7_0 == u'L' or LA7_0 == u'U' or LA7_0 == u'l' or LA7_0 == u'u') : + alt7 = 1 + if alt7 == 1: + # C.g:605:39: IntegerTypeSuffix + self.mIntegerTypeSuffix() + + + + + + + + + finally: + + pass + + # $ANTLR end HEX_LITERAL + + + + # $ANTLR start DECIMAL_LITERAL + def mDECIMAL_LITERAL(self, ): + + try: + self.type = DECIMAL_LITERAL + + # C.g:607:17: ( ( '0' | '1' .. '9' ( '0' .. '9' )* ) ( IntegerTypeSuffix )? ) + # C.g:607:19: ( '0' | '1' .. '9' ( '0' .. '9' )* ) ( IntegerTypeSuffix )? + # C.g:607:19: ( '0' | '1' .. '9' ( '0' .. '9' )* ) + alt9 = 2 + LA9_0 = self.input.LA(1) + + if (LA9_0 == u'0') : + alt9 = 1 + elif ((u'1' <= LA9_0 <= u'9')) : + alt9 = 2 + else: + nvae = NoViableAltException("607:19: ( '0' | '1' .. '9' ( '0' .. '9' )* )", 9, 0, self.input) + + raise nvae + + if alt9 == 1: + # C.g:607:20: '0' + self.match(u'0') + + + + elif alt9 == 2: + # C.g:607:26: '1' .. '9' ( '0' .. '9' )* + self.matchRange(u'1', u'9') + + # C.g:607:35: ( '0' .. '9' )* + while True: #loop8 + alt8 = 2 + LA8_0 = self.input.LA(1) + + if ((u'0' <= LA8_0 <= u'9')) : + alt8 = 1 + + + if alt8 == 1: + # C.g:607:35: '0' .. '9' + self.matchRange(u'0', u'9') + + + + else: + break #loop8 + + + + + + # C.g:607:46: ( IntegerTypeSuffix )? + alt10 = 2 + LA10_0 = self.input.LA(1) + + if (LA10_0 == u'L' or LA10_0 == u'U' or LA10_0 == u'l' or LA10_0 == u'u') : + alt10 = 1 + if alt10 == 1: + # C.g:607:46: IntegerTypeSuffix + self.mIntegerTypeSuffix() + + + + + + + + + finally: + + pass + + # $ANTLR end DECIMAL_LITERAL + + + + # $ANTLR start OCTAL_LITERAL + def mOCTAL_LITERAL(self, ): + + try: + self.type = OCTAL_LITERAL + + # C.g:609:15: ( '0' ( '0' .. '7' )+ ( IntegerTypeSuffix )? ) + # C.g:609:17: '0' ( '0' .. '7' )+ ( IntegerTypeSuffix )? + self.match(u'0') + + # C.g:609:21: ( '0' .. '7' )+ + cnt11 = 0 + while True: #loop11 + alt11 = 2 + LA11_0 = self.input.LA(1) + + if ((u'0' <= LA11_0 <= u'7')) : + alt11 = 1 + + + if alt11 == 1: + # C.g:609:22: '0' .. '7' + self.matchRange(u'0', u'7') + + + + else: + if cnt11 >= 1: + break #loop11 + + eee = EarlyExitException(11, self.input) + raise eee + + cnt11 += 1 + + + # C.g:609:33: ( IntegerTypeSuffix )? + alt12 = 2 + LA12_0 = self.input.LA(1) + + if (LA12_0 == u'L' or LA12_0 == u'U' or LA12_0 == u'l' or LA12_0 == u'u') : + alt12 = 1 + if alt12 == 1: + # C.g:609:33: IntegerTypeSuffix + self.mIntegerTypeSuffix() + + + + + + + + + finally: + + pass + + # $ANTLR end OCTAL_LITERAL + + + + # $ANTLR start HexDigit + def mHexDigit(self, ): + + try: + # C.g:612:10: ( ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) ) + # C.g:612:12: ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) + if (u'0' <= self.input.LA(1) <= u'9') or (u'A' <= self.input.LA(1) <= u'F') or (u'a' <= self.input.LA(1) <= u'f'): + self.input.consume(); + + else: + mse = MismatchedSetException(None, self.input) + self.recover(mse) + raise mse + + + + + + + finally: + + pass + + # $ANTLR end HexDigit + + + + # $ANTLR start IntegerTypeSuffix + def mIntegerTypeSuffix(self, ): + + try: + # C.g:616:2: ( ( 'u' | 'U' ) | ( 'l' | 'L' ) | ( 'u' | 'U' ) ( 'l' | 'L' ) | ( 'u' | 'U' ) ( 'l' | 'L' ) ( 'l' | 'L' ) ) + alt13 = 4 + LA13_0 = self.input.LA(1) + + if (LA13_0 == u'U' or LA13_0 == u'u') : + LA13_1 = self.input.LA(2) + + if (LA13_1 == u'L' or LA13_1 == u'l') : + LA13_3 = self.input.LA(3) + + if (LA13_3 == u'L' or LA13_3 == u'l') : + alt13 = 4 + else: + alt13 = 3 + else: + alt13 = 1 + elif (LA13_0 == u'L' or LA13_0 == u'l') : + alt13 = 2 + else: + nvae = NoViableAltException("614:1: fragment IntegerTypeSuffix : ( ( 'u' | 'U' ) | ( 'l' | 'L' ) | ( 'u' | 'U' ) ( 'l' | 'L' ) | ( 'u' | 'U' ) ( 'l' | 'L' ) ( 'l' | 'L' ) );", 13, 0, self.input) + + raise nvae + + if alt13 == 1: + # C.g:616:4: ( 'u' | 'U' ) + if self.input.LA(1) == u'U' or self.input.LA(1) == u'u': + self.input.consume(); + + else: + mse = MismatchedSetException(None, self.input) + self.recover(mse) + raise mse + + + + + elif alt13 == 2: + # C.g:617:4: ( 'l' | 'L' ) + if self.input.LA(1) == u'L' or self.input.LA(1) == u'l': + self.input.consume(); + + else: + mse = MismatchedSetException(None, self.input) + self.recover(mse) + raise mse + + + + + elif alt13 == 3: + # C.g:618:4: ( 'u' | 'U' ) ( 'l' | 'L' ) + if self.input.LA(1) == u'U' or self.input.LA(1) == u'u': + self.input.consume(); + + else: + mse = MismatchedSetException(None, self.input) + self.recover(mse) + raise mse + + + if self.input.LA(1) == u'L' or self.input.LA(1) == u'l': + self.input.consume(); + + else: + mse = MismatchedSetException(None, self.input) + self.recover(mse) + raise mse + + + + + elif alt13 == 4: + # C.g:619:4: ( 'u' | 'U' ) ( 'l' | 'L' ) ( 'l' | 'L' ) + if self.input.LA(1) == u'U' or self.input.LA(1) == u'u': + self.input.consume(); + + else: + mse = MismatchedSetException(None, self.input) + self.recover(mse) + raise mse + + + if self.input.LA(1) == u'L' or self.input.LA(1) == u'l': + self.input.consume(); + + else: + mse = MismatchedSetException(None, self.input) + self.recover(mse) + raise mse + + + if self.input.LA(1) == u'L' or self.input.LA(1) == u'l': + self.input.consume(); + + else: + mse = MismatchedSetException(None, self.input) + self.recover(mse) + raise mse + + + + + + finally: + + pass + + # $ANTLR end IntegerTypeSuffix + + + + # $ANTLR start FLOATING_POINT_LITERAL + def mFLOATING_POINT_LITERAL(self, ): + + try: + self.type = FLOATING_POINT_LITERAL + + # C.g:623:5: ( ( '0' .. '9' )+ '.' ( '0' .. '9' )* ( Exponent )? ( FloatTypeSuffix )? | '.' ( '0' .. '9' )+ ( Exponent )? ( FloatTypeSuffix )? | ( '0' .. '9' )+ Exponent ( FloatTypeSuffix )? | ( '0' .. '9' )+ ( Exponent )? FloatTypeSuffix ) + alt25 = 4 + alt25 = self.dfa25.predict(self.input) + if alt25 == 1: + # C.g:623:9: ( '0' .. '9' )+ '.' ( '0' .. '9' )* ( Exponent )? ( FloatTypeSuffix )? + # C.g:623:9: ( '0' .. '9' )+ + cnt14 = 0 + while True: #loop14 + alt14 = 2 + LA14_0 = self.input.LA(1) + + if ((u'0' <= LA14_0 <= u'9')) : + alt14 = 1 + + + if alt14 == 1: + # C.g:623:10: '0' .. '9' + self.matchRange(u'0', u'9') + + + + else: + if cnt14 >= 1: + break #loop14 + + eee = EarlyExitException(14, self.input) + raise eee + + cnt14 += 1 + + + self.match(u'.') + + # C.g:623:25: ( '0' .. '9' )* + while True: #loop15 + alt15 = 2 + LA15_0 = self.input.LA(1) + + if ((u'0' <= LA15_0 <= u'9')) : + alt15 = 1 + + + if alt15 == 1: + # C.g:623:26: '0' .. '9' + self.matchRange(u'0', u'9') + + + + else: + break #loop15 + + + # C.g:623:37: ( Exponent )? + alt16 = 2 + LA16_0 = self.input.LA(1) + + if (LA16_0 == u'E' or LA16_0 == u'e') : + alt16 = 1 + if alt16 == 1: + # C.g:623:37: Exponent + self.mExponent() + + + + + # C.g:623:47: ( FloatTypeSuffix )? + alt17 = 2 + LA17_0 = self.input.LA(1) + + if (LA17_0 == u'D' or LA17_0 == u'F' or LA17_0 == u'd' or LA17_0 == u'f') : + alt17 = 1 + if alt17 == 1: + # C.g:623:47: FloatTypeSuffix + self.mFloatTypeSuffix() + + + + + + + elif alt25 == 2: + # C.g:624:9: '.' ( '0' .. '9' )+ ( Exponent )? ( FloatTypeSuffix )? + self.match(u'.') + + # C.g:624:13: ( '0' .. '9' )+ + cnt18 = 0 + while True: #loop18 + alt18 = 2 + LA18_0 = self.input.LA(1) + + if ((u'0' <= LA18_0 <= u'9')) : + alt18 = 1 + + + if alt18 == 1: + # C.g:624:14: '0' .. '9' + self.matchRange(u'0', u'9') + + + + else: + if cnt18 >= 1: + break #loop18 + + eee = EarlyExitException(18, self.input) + raise eee + + cnt18 += 1 + + + # C.g:624:25: ( Exponent )? + alt19 = 2 + LA19_0 = self.input.LA(1) + + if (LA19_0 == u'E' or LA19_0 == u'e') : + alt19 = 1 + if alt19 == 1: + # C.g:624:25: Exponent + self.mExponent() + + + + + # C.g:624:35: ( FloatTypeSuffix )? + alt20 = 2 + LA20_0 = self.input.LA(1) + + if (LA20_0 == u'D' or LA20_0 == u'F' or LA20_0 == u'd' or LA20_0 == u'f') : + alt20 = 1 + if alt20 == 1: + # C.g:624:35: FloatTypeSuffix + self.mFloatTypeSuffix() + + + + + + + elif alt25 == 3: + # C.g:625:9: ( '0' .. '9' )+ Exponent ( FloatTypeSuffix )? + # C.g:625:9: ( '0' .. '9' )+ + cnt21 = 0 + while True: #loop21 + alt21 = 2 + LA21_0 = self.input.LA(1) + + if ((u'0' <= LA21_0 <= u'9')) : + alt21 = 1 + + + if alt21 == 1: + # C.g:625:10: '0' .. '9' + self.matchRange(u'0', u'9') + + + + else: + if cnt21 >= 1: + break #loop21 + + eee = EarlyExitException(21, self.input) + raise eee + + cnt21 += 1 + + + self.mExponent() + + # C.g:625:30: ( FloatTypeSuffix )? + alt22 = 2 + LA22_0 = self.input.LA(1) + + if (LA22_0 == u'D' or LA22_0 == u'F' or LA22_0 == u'd' or LA22_0 == u'f') : + alt22 = 1 + if alt22 == 1: + # C.g:625:30: FloatTypeSuffix + self.mFloatTypeSuffix() + + + + + + + elif alt25 == 4: + # C.g:626:9: ( '0' .. '9' )+ ( Exponent )? FloatTypeSuffix + # C.g:626:9: ( '0' .. '9' )+ + cnt23 = 0 + while True: #loop23 + alt23 = 2 + LA23_0 = self.input.LA(1) + + if ((u'0' <= LA23_0 <= u'9')) : + alt23 = 1 + + + if alt23 == 1: + # C.g:626:10: '0' .. '9' + self.matchRange(u'0', u'9') + + + + else: + if cnt23 >= 1: + break #loop23 + + eee = EarlyExitException(23, self.input) + raise eee + + cnt23 += 1 + + + # C.g:626:21: ( Exponent )? + alt24 = 2 + LA24_0 = self.input.LA(1) + + if (LA24_0 == u'E' or LA24_0 == u'e') : + alt24 = 1 + if alt24 == 1: + # C.g:626:21: Exponent + self.mExponent() + + + + + self.mFloatTypeSuffix() + + + + + finally: + + pass + + # $ANTLR end FLOATING_POINT_LITERAL + + + + # $ANTLR start Exponent + def mExponent(self, ): + + try: + # C.g:630:10: ( ( 'e' | 'E' ) ( '+' | '-' )? ( '0' .. '9' )+ ) + # C.g:630:12: ( 'e' | 'E' ) ( '+' | '-' )? ( '0' .. '9' )+ + if self.input.LA(1) == u'E' or self.input.LA(1) == u'e': + self.input.consume(); + + else: + mse = MismatchedSetException(None, self.input) + self.recover(mse) + raise mse + + + # C.g:630:22: ( '+' | '-' )? + alt26 = 2 + LA26_0 = self.input.LA(1) + + if (LA26_0 == u'+' or LA26_0 == u'-') : + alt26 = 1 + if alt26 == 1: + # C.g: + if self.input.LA(1) == u'+' or self.input.LA(1) == u'-': + self.input.consume(); + + else: + mse = MismatchedSetException(None, self.input) + self.recover(mse) + raise mse + + + + + + # C.g:630:33: ( '0' .. '9' )+ + cnt27 = 0 + while True: #loop27 + alt27 = 2 + LA27_0 = self.input.LA(1) + + if ((u'0' <= LA27_0 <= u'9')) : + alt27 = 1 + + + if alt27 == 1: + # C.g:630:34: '0' .. '9' + self.matchRange(u'0', u'9') + + + + else: + if cnt27 >= 1: + break #loop27 + + eee = EarlyExitException(27, self.input) + raise eee + + cnt27 += 1 + + + + + + + finally: + + pass + + # $ANTLR end Exponent + + + + # $ANTLR start FloatTypeSuffix + def mFloatTypeSuffix(self, ): + + try: + # C.g:633:17: ( ( 'f' | 'F' | 'd' | 'D' ) ) + # C.g:633:19: ( 'f' | 'F' | 'd' | 'D' ) + if self.input.LA(1) == u'D' or self.input.LA(1) == u'F' or self.input.LA(1) == u'd' or self.input.LA(1) == u'f': + self.input.consume(); + + else: + mse = MismatchedSetException(None, self.input) + self.recover(mse) + raise mse + + + + + + + finally: + + pass + + # $ANTLR end FloatTypeSuffix + + + + # $ANTLR start EscapeSequence + def mEscapeSequence(self, ): + + try: + # C.g:637:5: ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' ) | OctalEscape ) + alt28 = 2 + LA28_0 = self.input.LA(1) + + if (LA28_0 == u'\\') : + LA28_1 = self.input.LA(2) + + if (LA28_1 == u'"' or LA28_1 == u'\'' or LA28_1 == u'\\' or LA28_1 == u'b' or LA28_1 == u'f' or LA28_1 == u'n' or LA28_1 == u'r' or LA28_1 == u't') : + alt28 = 1 + elif ((u'0' <= LA28_1 <= u'7')) : + alt28 = 2 + else: + nvae = NoViableAltException("635:1: fragment EscapeSequence : ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' ) | OctalEscape );", 28, 1, self.input) + + raise nvae + + else: + nvae = NoViableAltException("635:1: fragment EscapeSequence : ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' ) | OctalEscape );", 28, 0, self.input) + + raise nvae + + if alt28 == 1: + # C.g:637:8: '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' ) + self.match(u'\\') + + if self.input.LA(1) == u'"' or self.input.LA(1) == u'\'' or self.input.LA(1) == u'\\' or self.input.LA(1) == u'b' or self.input.LA(1) == u'f' or self.input.LA(1) == u'n' or self.input.LA(1) == u'r' or self.input.LA(1) == u't': + self.input.consume(); + + else: + mse = MismatchedSetException(None, self.input) + self.recover(mse) + raise mse + + + + + elif alt28 == 2: + # C.g:638:9: OctalEscape + self.mOctalEscape() + + + + + finally: + + pass + + # $ANTLR end EscapeSequence + + + + # $ANTLR start OctalEscape + def mOctalEscape(self, ): + + try: + # C.g:643:5: ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ) + alt29 = 3 + LA29_0 = self.input.LA(1) + + if (LA29_0 == u'\\') : + LA29_1 = self.input.LA(2) + + if ((u'0' <= LA29_1 <= u'3')) : + LA29_2 = self.input.LA(3) + + if ((u'0' <= LA29_2 <= u'7')) : + LA29_4 = self.input.LA(4) + + if ((u'0' <= LA29_4 <= u'7')) : + alt29 = 1 + else: + alt29 = 2 + else: + alt29 = 3 + elif ((u'4' <= LA29_1 <= u'7')) : + LA29_3 = self.input.LA(3) + + if ((u'0' <= LA29_3 <= u'7')) : + alt29 = 2 + else: + alt29 = 3 + else: + nvae = NoViableAltException("641:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 29, 1, self.input) + + raise nvae + + else: + nvae = NoViableAltException("641:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 29, 0, self.input) + + raise nvae + + if alt29 == 1: + # C.g:643:9: '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) + self.match(u'\\') + + # C.g:643:14: ( '0' .. '3' ) + # C.g:643:15: '0' .. '3' + self.matchRange(u'0', u'3') + + + + + # C.g:643:25: ( '0' .. '7' ) + # C.g:643:26: '0' .. '7' + self.matchRange(u'0', u'7') + + + + + # C.g:643:36: ( '0' .. '7' ) + # C.g:643:37: '0' .. '7' + self.matchRange(u'0', u'7') + + + + + + + elif alt29 == 2: + # C.g:644:9: '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) + self.match(u'\\') + + # C.g:644:14: ( '0' .. '7' ) + # C.g:644:15: '0' .. '7' + self.matchRange(u'0', u'7') + + + + + # C.g:644:25: ( '0' .. '7' ) + # C.g:644:26: '0' .. '7' + self.matchRange(u'0', u'7') + + + + + + + elif alt29 == 3: + # C.g:645:9: '\\\\' ( '0' .. '7' ) + self.match(u'\\') + + # C.g:645:14: ( '0' .. '7' ) + # C.g:645:15: '0' .. '7' + self.matchRange(u'0', u'7') + + + + + + + + finally: + + pass + + # $ANTLR end OctalEscape + + + + # $ANTLR start UnicodeEscape + def mUnicodeEscape(self, ): + + try: + # C.g:650:5: ( '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit ) + # C.g:650:9: '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit + self.match(u'\\') + + self.match(u'u') + + self.mHexDigit() + + self.mHexDigit() + + self.mHexDigit() + + self.mHexDigit() + + + + + + finally: + + pass + + # $ANTLR end UnicodeEscape + + + + # $ANTLR start WS + def mWS(self, ): + + try: + self.type = WS + + # C.g:653:5: ( ( ' ' | '\\r' | '\\t' | '\\u000C' | '\\n' ) ) + # C.g:653:8: ( ' ' | '\\r' | '\\t' | '\\u000C' | '\\n' ) + if (u'\t' <= self.input.LA(1) <= u'\n') or (u'\f' <= self.input.LA(1) <= u'\r') or self.input.LA(1) == u' ': + self.input.consume(); + + else: + mse = MismatchedSetException(None, self.input) + self.recover(mse) + raise mse + + + #action start + self.channel=HIDDEN; + #action end + + + + + finally: + + pass + + # $ANTLR end WS + + + + # $ANTLR start BS + def mBS(self, ): + + try: + self.type = BS + + # C.g:657:5: ( ( '\\\\' ) ) + # C.g:657:7: ( '\\\\' ) + # C.g:657:7: ( '\\\\' ) + # C.g:657:8: '\\\\' + self.match(u'\\') + + + + + #action start + self.channel=HIDDEN; + #action end + + + + + finally: + + pass + + # $ANTLR end BS + + + + # $ANTLR start UnicodeVocabulary + def mUnicodeVocabulary(self, ): + + try: + self.type = UnicodeVocabulary + + # C.g:665:5: ( '\\u0003' .. '\\uFFFE' ) + # C.g:665:7: '\\u0003' .. '\\uFFFE' + self.matchRange(u'\u0003', u'\uFFFE') + + + + + + finally: + + pass + + # $ANTLR end UnicodeVocabulary + + + + # $ANTLR start COMMENT + def mCOMMENT(self, ): + + try: + self.type = COMMENT + + # C.g:668:5: ( '/*' ( options {greedy=false; } : . )* '*/' ) + # C.g:668:9: '/*' ( options {greedy=false; } : . )* '*/' + self.match("/*") + + + # C.g:668:14: ( options {greedy=false; } : . )* + while True: #loop30 + alt30 = 2 + LA30_0 = self.input.LA(1) + + if (LA30_0 == u'*') : + LA30_1 = self.input.LA(2) + + if (LA30_1 == u'/') : + alt30 = 2 + elif ((u'\u0000' <= LA30_1 <= u'.') or (u'0' <= LA30_1 <= u'\uFFFE')) : + alt30 = 1 + + + elif ((u'\u0000' <= LA30_0 <= u')') or (u'+' <= LA30_0 <= u'\uFFFE')) : + alt30 = 1 + + + if alt30 == 1: + # C.g:668:42: . + self.matchAny() + + + + else: + break #loop30 + + + self.match("*/") + + + #action start + self.channel=HIDDEN; + #action end + + + + + finally: + + pass + + # $ANTLR end COMMENT + + + + # $ANTLR start LINE_COMMENT + def mLINE_COMMENT(self, ): + + try: + self.type = LINE_COMMENT + + # C.g:673:5: ( '//' (~ ( '\\n' | '\\r' ) )* ( '\\r' )? '\\n' ) + # C.g:673:7: '//' (~ ( '\\n' | '\\r' ) )* ( '\\r' )? '\\n' + self.match("//") + + + # C.g:673:12: (~ ( '\\n' | '\\r' ) )* + while True: #loop31 + alt31 = 2 + LA31_0 = self.input.LA(1) + + if ((u'\u0000' <= LA31_0 <= u'\t') or (u'\u000B' <= LA31_0 <= u'\f') or (u'\u000E' <= LA31_0 <= u'\uFFFE')) : + alt31 = 1 + + + if alt31 == 1: + # C.g:673:12: ~ ( '\\n' | '\\r' ) + if (u'\u0000' <= self.input.LA(1) <= u'\t') or (u'\u000B' <= self.input.LA(1) <= u'\f') or (u'\u000E' <= self.input.LA(1) <= u'\uFFFE'): + self.input.consume(); + + else: + mse = MismatchedSetException(None, self.input) + self.recover(mse) + raise mse + + + + + else: + break #loop31 + + + # C.g:673:26: ( '\\r' )? + alt32 = 2 + LA32_0 = self.input.LA(1) + + if (LA32_0 == u'\r') : + alt32 = 1 + if alt32 == 1: + # C.g:673:26: '\\r' + self.match(u'\r') + + + + + self.match(u'\n') + + #action start + self.channel=HIDDEN; + #action end + + + + + finally: + + pass + + # $ANTLR end LINE_COMMENT + + + + # $ANTLR start LINE_COMMAND + def mLINE_COMMAND(self, ): + + try: + self.type = LINE_COMMAND + + # C.g:678:5: ( '#' (~ ( '\\n' | '\\r' ) )* ( '\\r' )? '\\n' ) + # C.g:678:7: '#' (~ ( '\\n' | '\\r' ) )* ( '\\r' )? '\\n' + self.match(u'#') + + # C.g:678:11: (~ ( '\\n' | '\\r' ) )* + while True: #loop33 + alt33 = 2 + LA33_0 = self.input.LA(1) + + if ((u'\u0000' <= LA33_0 <= u'\t') or (u'\u000B' <= LA33_0 <= u'\f') or (u'\u000E' <= LA33_0 <= u'\uFFFE')) : + alt33 = 1 + + + if alt33 == 1: + # C.g:678:11: ~ ( '\\n' | '\\r' ) + if (u'\u0000' <= self.input.LA(1) <= u'\t') or (u'\u000B' <= self.input.LA(1) <= u'\f') or (u'\u000E' <= self.input.LA(1) <= u'\uFFFE'): + self.input.consume(); + + else: + mse = MismatchedSetException(None, self.input) + self.recover(mse) + raise mse + + + + + else: + break #loop33 + + + # C.g:678:25: ( '\\r' )? + alt34 = 2 + LA34_0 = self.input.LA(1) + + if (LA34_0 == u'\r') : + alt34 = 1 + if alt34 == 1: + # C.g:678:25: '\\r' + self.match(u'\r') + + + + + self.match(u'\n') + + #action start + self.channel=HIDDEN; + #action end + + + + + finally: + + pass + + # $ANTLR end LINE_COMMAND + + + + def mTokens(self): + # C.g:1:8: ( T25 | T26 | T27 | T28 | T29 | T30 | T31 | T32 | T33 | T34 | T35 | T36 | T37 | T38 | T39 | T40 | T41 | T42 | T43 | T44 | T45 | T46 | T47 | T48 | T49 | T50 | T51 | T52 | T53 | T54 | T55 | T56 | T57 | T58 | T59 | T60 | T61 | T62 | T63 | T64 | T65 | T66 | T67 | T68 | T69 | T70 | T71 | T72 | T73 | T74 | T75 | T76 | T77 | T78 | T79 | T80 | T81 | T82 | T83 | T84 | T85 | T86 | T87 | T88 | T89 | T90 | T91 | T92 | T93 | T94 | T95 | T96 | T97 | T98 | T99 | T100 | T101 | T102 | T103 | T104 | T105 | T106 | T107 | T108 | T109 | T110 | T111 | T112 | T113 | T114 | T115 | T116 | T117 | IDENTIFIER | CHARACTER_LITERAL | STRING_LITERAL | HEX_LITERAL | DECIMAL_LITERAL | OCTAL_LITERAL | FLOATING_POINT_LITERAL | WS | BS | UnicodeVocabulary | COMMENT | LINE_COMMENT | LINE_COMMAND ) + alt35 = 106 + alt35 = self.dfa35.predict(self.input) + if alt35 == 1: + # C.g:1:10: T25 + self.mT25() + + + + elif alt35 == 2: + # C.g:1:14: T26 + self.mT26() + + + + elif alt35 == 3: + # C.g:1:18: T27 + self.mT27() + + + + elif alt35 == 4: + # C.g:1:22: T28 + self.mT28() + + + + elif alt35 == 5: + # C.g:1:26: T29 + self.mT29() + + + + elif alt35 == 6: + # C.g:1:30: T30 + self.mT30() + + + + elif alt35 == 7: + # C.g:1:34: T31 + self.mT31() + + + + elif alt35 == 8: + # C.g:1:38: T32 + self.mT32() + + + + elif alt35 == 9: + # C.g:1:42: T33 + self.mT33() + + + + elif alt35 == 10: + # C.g:1:46: T34 + self.mT34() + + + + elif alt35 == 11: + # C.g:1:50: T35 + self.mT35() + + + + elif alt35 == 12: + # C.g:1:54: T36 + self.mT36() + + + + elif alt35 == 13: + # C.g:1:58: T37 + self.mT37() + + + + elif alt35 == 14: + # C.g:1:62: T38 + self.mT38() + + + + elif alt35 == 15: + # C.g:1:66: T39 + self.mT39() + + + + elif alt35 == 16: + # C.g:1:70: T40 + self.mT40() + + + + elif alt35 == 17: + # C.g:1:74: T41 + self.mT41() + + + + elif alt35 == 18: + # C.g:1:78: T42 + self.mT42() + + + + elif alt35 == 19: + # C.g:1:82: T43 + self.mT43() + + + + elif alt35 == 20: + # C.g:1:86: T44 + self.mT44() + + + + elif alt35 == 21: + # C.g:1:90: T45 + self.mT45() + + + + elif alt35 == 22: + # C.g:1:94: T46 + self.mT46() + + + + elif alt35 == 23: + # C.g:1:98: T47 + self.mT47() + + + + elif alt35 == 24: + # C.g:1:102: T48 + self.mT48() + + + + elif alt35 == 25: + # C.g:1:106: T49 + self.mT49() + + + + elif alt35 == 26: + # C.g:1:110: T50 + self.mT50() + + + + elif alt35 == 27: + # C.g:1:114: T51 + self.mT51() + + + + elif alt35 == 28: + # C.g:1:118: T52 + self.mT52() + + + + elif alt35 == 29: + # C.g:1:122: T53 + self.mT53() + + + + elif alt35 == 30: + # C.g:1:126: T54 + self.mT54() + + + + elif alt35 == 31: + # C.g:1:130: T55 + self.mT55() + + + + elif alt35 == 32: + # C.g:1:134: T56 + self.mT56() + + + + elif alt35 == 33: + # C.g:1:138: T57 + self.mT57() + + + + elif alt35 == 34: + # C.g:1:142: T58 + self.mT58() + + + + elif alt35 == 35: + # C.g:1:146: T59 + self.mT59() + + + + elif alt35 == 36: + # C.g:1:150: T60 + self.mT60() + + + + elif alt35 == 37: + # C.g:1:154: T61 + self.mT61() + + + + elif alt35 == 38: + # C.g:1:158: T62 + self.mT62() + + + + elif alt35 == 39: + # C.g:1:162: T63 + self.mT63() + + + + elif alt35 == 40: + # C.g:1:166: T64 + self.mT64() + + + + elif alt35 == 41: + # C.g:1:170: T65 + self.mT65() + + + + elif alt35 == 42: + # C.g:1:174: T66 + self.mT66() + + + + elif alt35 == 43: + # C.g:1:178: T67 + self.mT67() + + + + elif alt35 == 44: + # C.g:1:182: T68 + self.mT68() + + + + elif alt35 == 45: + # C.g:1:186: T69 + self.mT69() + + + + elif alt35 == 46: + # C.g:1:190: T70 + self.mT70() + + + + elif alt35 == 47: + # C.g:1:194: T71 + self.mT71() + + + + elif alt35 == 48: + # C.g:1:198: T72 + self.mT72() + + + + elif alt35 == 49: + # C.g:1:202: T73 + self.mT73() + + + + elif alt35 == 50: + # C.g:1:206: T74 + self.mT74() + + + + elif alt35 == 51: + # C.g:1:210: T75 + self.mT75() + + + + elif alt35 == 52: + # C.g:1:214: T76 + self.mT76() + + + + elif alt35 == 53: + # C.g:1:218: T77 + self.mT77() + + + + elif alt35 == 54: + # C.g:1:222: T78 + self.mT78() + + + + elif alt35 == 55: + # C.g:1:226: T79 + self.mT79() + + + + elif alt35 == 56: + # C.g:1:230: T80 + self.mT80() + + + + elif alt35 == 57: + # C.g:1:234: T81 + self.mT81() + + + + elif alt35 == 58: + # C.g:1:238: T82 + self.mT82() + + + + elif alt35 == 59: + # C.g:1:242: T83 + self.mT83() + + + + elif alt35 == 60: + # C.g:1:246: T84 + self.mT84() + + + + elif alt35 == 61: + # C.g:1:250: T85 + self.mT85() + + + + elif alt35 == 62: + # C.g:1:254: T86 + self.mT86() + + + + elif alt35 == 63: + # C.g:1:258: T87 + self.mT87() + + + + elif alt35 == 64: + # C.g:1:262: T88 + self.mT88() + + + + elif alt35 == 65: + # C.g:1:266: T89 + self.mT89() + + + + elif alt35 == 66: + # C.g:1:270: T90 + self.mT90() + + + + elif alt35 == 67: + # C.g:1:274: T91 + self.mT91() + + + + elif alt35 == 68: + # C.g:1:278: T92 + self.mT92() + + + + elif alt35 == 69: + # C.g:1:282: T93 + self.mT93() + + + + elif alt35 == 70: + # C.g:1:286: T94 + self.mT94() + + + + elif alt35 == 71: + # C.g:1:290: T95 + self.mT95() + + + + elif alt35 == 72: + # C.g:1:294: T96 + self.mT96() + + + + elif alt35 == 73: + # C.g:1:298: T97 + self.mT97() + + + + elif alt35 == 74: + # C.g:1:302: T98 + self.mT98() + + + + elif alt35 == 75: + # C.g:1:306: T99 + self.mT99() + + + + elif alt35 == 76: + # C.g:1:310: T100 + self.mT100() + + + + elif alt35 == 77: + # C.g:1:315: T101 + self.mT101() + + + + elif alt35 == 78: + # C.g:1:320: T102 + self.mT102() + + + + elif alt35 == 79: + # C.g:1:325: T103 + self.mT103() + + + + elif alt35 == 80: + # C.g:1:330: T104 + self.mT104() + + + + elif alt35 == 81: + # C.g:1:335: T105 + self.mT105() + + + + elif alt35 == 82: + # C.g:1:340: T106 + self.mT106() + + + + elif alt35 == 83: + # C.g:1:345: T107 + self.mT107() + + + + elif alt35 == 84: + # C.g:1:350: T108 + self.mT108() + + + + elif alt35 == 85: + # C.g:1:355: T109 + self.mT109() + + + + elif alt35 == 86: + # C.g:1:360: T110 + self.mT110() + + + + elif alt35 == 87: + # C.g:1:365: T111 + self.mT111() + + + + elif alt35 == 88: + # C.g:1:370: T112 + self.mT112() + + + + elif alt35 == 89: + # C.g:1:375: T113 + self.mT113() + + + + elif alt35 == 90: + # C.g:1:380: T114 + self.mT114() + + + + elif alt35 == 91: + # C.g:1:385: T115 + self.mT115() + + + + elif alt35 == 92: + # C.g:1:390: T116 + self.mT116() + + + + elif alt35 == 93: + # C.g:1:395: T117 + self.mT117() + + + + elif alt35 == 94: + # C.g:1:400: IDENTIFIER + self.mIDENTIFIER() + + + + elif alt35 == 95: + # C.g:1:411: CHARACTER_LITERAL + self.mCHARACTER_LITERAL() + + + + elif alt35 == 96: + # C.g:1:429: STRING_LITERAL + self.mSTRING_LITERAL() + + + + elif alt35 == 97: + # C.g:1:444: HEX_LITERAL + self.mHEX_LITERAL() + + + + elif alt35 == 98: + # C.g:1:456: DECIMAL_LITERAL + self.mDECIMAL_LITERAL() + + + + elif alt35 == 99: + # C.g:1:472: OCTAL_LITERAL + self.mOCTAL_LITERAL() + + + + elif alt35 == 100: + # C.g:1:486: FLOATING_POINT_LITERAL + self.mFLOATING_POINT_LITERAL() + + + + elif alt35 == 101: + # C.g:1:509: WS + self.mWS() + + + + elif alt35 == 102: + # C.g:1:512: BS + self.mBS() + + + + elif alt35 == 103: + # C.g:1:515: UnicodeVocabulary + self.mUnicodeVocabulary() + + + + elif alt35 == 104: + # C.g:1:533: COMMENT + self.mCOMMENT() + + + + elif alt35 == 105: + # C.g:1:541: LINE_COMMENT + self.mLINE_COMMENT() + + + + elif alt35 == 106: + # C.g:1:554: LINE_COMMAND + self.mLINE_COMMAND() + + + + + + + + + # lookup tables for DFA #25 + + DFA25_eot = DFA.unpack( + u"\7\uffff\1\10\2\uffff" + ) + + DFA25_eof = DFA.unpack( + u"\12\uffff" + ) + + DFA25_min = DFA.unpack( + u"\2\56\2\uffff\1\53\1\uffff\2\60\2\uffff" + ) + + DFA25_max = DFA.unpack( + u"\1\71\1\146\2\uffff\1\71\1\uffff\1\71\1\146\2\uffff" + ) + + DFA25_accept = DFA.unpack( + u"\2\uffff\1\2\1\1\1\uffff\1\4\2\uffff\2\3" + ) + + DFA25_special = DFA.unpack( + u"\12\uffff" + ) + + + DFA25_transition = [ + DFA.unpack(u"\1\2\1\uffff\12\1"), + DFA.unpack(u"\1\3\1\uffff\12\1\12\uffff\1\5\1\4\1\5\35\uffff\1\5" + u"\1\4\1\5"), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u"\1\6\1\uffff\1\6\2\uffff\12\7"), + DFA.unpack(u""), + DFA.unpack(u"\12\7"), + DFA.unpack(u"\12\7\12\uffff\1\11\1\uffff\1\11\35\uffff\1\11\1\uffff" + u"\1\11"), + DFA.unpack(u""), + DFA.unpack(u"") + ] + + # class definition for DFA #25 + + DFA25 = DFA + # lookup tables for DFA #35 + + DFA35_eot = DFA.unpack( + u"\2\uffff\1\76\1\uffff\1\101\14\76\3\uffff\10\76\4\uffff\1\151\1" + u"\153\1\157\1\163\1\167\1\171\1\174\1\uffff\1\177\1\u0082\1\u0085" + u"\1\u0087\1\u008a\1\uffff\5\76\1\uffff\2\73\2\u0095\2\uffff\1\73" + u"\2\uffff\1\76\4\uffff\16\76\1\u00ad\5\76\1\u00b4\1\76\3\uffff\1" + u"\u00b7\10\76\34\uffff\1\u00c1\2\uffff\1\u00c3\10\uffff\5\76\3\uffff" + u"\1\u00c9\1\uffff\1\u0095\3\uffff\23\76\1\uffff\1\u00de\1\76\1\u00e0" + u"\3\76\1\uffff\2\76\1\uffff\1\76\1\u00e7\6\76\4\uffff\5\76\1\uffff" + u"\1\76\1\u00f5\1\76\1\u00f7\6\76\1\u00fe\4\76\1\u0103\1\u0104\2" + u"\76\1\u0107\1\uffff\1\u0108\1\uffff\6\76\1\uffff\10\76\1\u0118" + u"\1\76\1\u011a\2\76\1\uffff\1\76\1\uffff\5\76\1\u0123\1\uffff\4" + u"\76\2\uffff\1\76\1\u0129\2\uffff\1\u012a\3\76\1\u012e\1\76\1\u0130" + u"\7\76\1\u0139\1\uffff\1\u013a\1\uffff\1\u013b\1\76\1\u013d\1\u013e" + u"\1\u013f\1\u0140\1\u0141\1\u0142\1\uffff\1\76\1\u0144\1\u0145\2" + u"\76\2\uffff\1\76\1\u0149\1\76\1\uffff\1\76\1\uffff\5\76\1\u0151" + u"\1\u0152\1\76\3\uffff\1\u0154\6\uffff\1\76\2\uffff\2\76\1\u0158" + u"\1\uffff\7\76\2\uffff\1\u0160\1\uffff\1\u0161\1\u0162\1\u0163\1" + u"\uffff\1\u0164\1\u0165\1\76\1\u0167\3\76\6\uffff\1\u016b\1\uffff" + u"\3\76\1\uffff\21\76\1\u0180\2\76\1\uffff\3\76\1\u0186\1\76\1\uffff" + u"\11\76\1\u0191\1\uffff" + ) + + DFA35_eof = DFA.unpack( + u"\u0192\uffff" + ) + + DFA35_min = DFA.unpack( + u"\1\3\1\uffff\1\171\1\uffff\1\75\1\154\1\150\1\165\1\145\1\124\1" + u"\157\1\141\1\146\1\157\1\154\1\145\1\156\3\uffff\1\116\1\120\1" + u"\117\1\116\1\117\1\114\1\106\1\101\4\uffff\1\75\1\56\1\53\1\55" + u"\1\52\1\75\1\46\1\uffff\1\75\1\74\3\75\1\uffff\1\137\1\150\1\157" + u"\1\162\1\42\1\uffff\2\0\2\56\2\uffff\1\0\2\uffff\1\160\4\uffff" + u"\1\163\1\164\1\165\1\151\1\141\1\147\1\157\1\164\1\147\1\101\1" + u"\151\1\163\1\156\1\141\1\44\1\164\1\156\1\162\1\157\1\146\1\44" + u"\1\151\3\uffff\1\44\2\124\1\116\1\101\1\114\1\117\1\111\1\103\34" + u"\uffff\1\75\2\uffff\1\75\10\uffff\1\141\1\163\1\151\1\164\1\145" + u"\3\uffff\1\56\1\uffff\1\56\3\uffff\3\145\1\155\2\164\1\165\1\145" + u"\1\156\1\162\1\157\1\151\1\165\1\124\1\141\1\144\1\145\1\163\1" + u"\162\1\uffff\1\44\1\147\1\44\2\141\1\142\1\uffff\1\151\1\157\1" + u"\uffff\1\111\1\44\1\123\1\114\1\101\1\102\1\101\1\113\4\uffff\1" + u"\163\1\155\1\154\1\157\1\141\1\uffff\1\144\1\44\1\162\1\44\1\143" + u"\1\151\1\143\1\157\1\145\1\164\1\44\1\163\1\162\1\111\1\164\2\44" + u"\1\151\1\164\1\44\1\uffff\1\44\1\uffff\1\164\1\165\1\154\1\147" + u"\1\156\1\117\1\uffff\1\124\1\111\1\124\1\101\1\102\1\120\1\105" + u"\1\155\1\44\1\145\1\44\1\153\1\145\1\uffff\1\156\1\uffff\1\150" + u"\1\143\1\164\1\146\1\144\1\44\1\uffff\1\164\1\156\1\103\1\151\2" + u"\uffff\1\156\1\44\2\uffff\1\44\1\154\1\145\1\156\1\44\1\116\1\44" + u"\1\107\1\111\1\114\1\125\1\117\1\111\1\104\1\44\1\uffff\1\44\1" + u"\uffff\1\44\1\146\6\44\1\uffff\1\145\2\44\1\154\1\165\2\uffff\1" + u"\164\1\44\1\145\1\uffff\1\101\1\uffff\1\116\1\114\1\137\1\116\1" + u"\117\2\44\1\137\3\uffff\1\44\6\uffff\1\162\2\uffff\2\145\1\44\1" + u"\uffff\1\144\1\114\2\105\1\122\2\124\2\uffff\1\44\1\uffff\3\44" + u"\1\uffff\2\44\1\104\1\44\1\105\1\111\1\123\6\uffff\1\44\1\uffff" + u"\2\115\1\105\1\uffff\1\117\1\105\1\122\1\126\1\123\1\126\2\105" + u"\1\111\1\137\1\122\1\103\1\111\1\126\1\105\1\106\1\111\1\44\1\137" + u"\1\103\1\uffff\1\125\1\105\1\116\1\44\1\122\1\uffff\1\105\1\106" + u"\1\105\1\122\1\105\1\116\1\103\1\105\1\104\1\44\1\uffff" + ) + + DFA35_max = DFA.unpack( + u"\1\ufffe\1\uffff\1\171\1\uffff\1\75\1\170\1\167\1\165\1\145\1\124" + u"\2\157\1\156\3\157\1\156\3\uffff\1\116\1\125\1\117\1\116\1\117" + u"\1\114\1\106\1\101\4\uffff\1\75\1\71\1\75\1\76\3\75\1\uffff\2\75" + u"\1\76\1\75\1\174\1\uffff\1\141\1\150\1\157\1\162\1\47\1\uffff\2" + u"\ufffe\1\170\1\146\2\uffff\1\ufffe\2\uffff\1\160\4\uffff\1\163" + u"\1\164\1\165\1\151\1\162\1\172\1\157\2\164\1\101\1\154\1\163\1" + u"\156\1\141\1\172\1\164\1\156\1\162\1\157\1\146\1\172\1\163\3\uffff" + u"\1\172\2\124\1\116\1\101\1\114\1\117\1\111\1\103\34\uffff\1\75" + u"\2\uffff\1\75\10\uffff\1\141\1\163\1\151\1\164\1\145\3\uffff\1" + u"\146\1\uffff\1\146\3\uffff\3\145\1\155\2\164\1\165\1\145\1\156" + u"\1\162\1\157\1\151\1\165\1\124\1\141\1\144\1\145\1\164\1\162\1" + u"\uffff\1\172\1\147\1\172\2\141\1\142\1\uffff\1\151\1\157\1\uffff" + u"\1\111\1\172\1\123\1\114\1\101\1\102\1\137\1\113\4\uffff\1\163" + u"\1\155\1\154\1\157\1\141\1\uffff\1\144\1\172\1\162\1\172\1\143" + u"\1\151\1\143\1\157\1\145\1\164\1\172\1\163\1\162\1\111\1\164\2" + u"\172\1\151\1\164\1\172\1\uffff\1\172\1\uffff\1\164\1\165\1\154" + u"\1\147\1\156\1\117\1\uffff\1\124\1\111\1\124\1\101\1\122\1\120" + u"\1\105\1\155\1\172\1\145\1\172\1\153\1\145\1\uffff\1\156\1\uffff" + u"\1\150\1\143\1\164\1\146\1\144\1\172\1\uffff\1\164\1\156\1\103" + u"\1\151\2\uffff\1\156\1\172\2\uffff\1\172\1\154\1\145\1\156\1\172" + u"\1\116\1\172\1\107\1\111\1\114\1\125\1\117\1\111\1\104\1\172\1" + u"\uffff\1\172\1\uffff\1\172\1\146\6\172\1\uffff\1\145\2\172\1\154" + u"\1\165\2\uffff\1\164\1\172\1\145\1\uffff\1\101\1\uffff\1\116\1" + u"\114\1\137\1\116\1\117\2\172\1\137\3\uffff\1\172\6\uffff\1\162" + u"\2\uffff\2\145\1\172\1\uffff\1\144\1\114\2\105\1\122\2\124\2\uffff" + u"\1\172\1\uffff\3\172\1\uffff\2\172\1\104\1\172\1\105\1\111\1\123" + u"\6\uffff\1\172\1\uffff\2\115\1\105\1\uffff\1\117\1\105\1\122\1" + u"\126\1\123\1\126\2\105\1\111\1\137\1\122\1\103\1\111\1\126\1\105" + u"\1\106\1\111\1\172\1\137\1\103\1\uffff\1\125\1\105\1\116\1\172" + u"\1\122\1\uffff\1\105\1\106\1\105\1\122\1\105\1\116\1\103\1\105" + u"\1\104\1\172\1\uffff" + ) + + DFA35_accept = DFA.unpack( + u"\1\uffff\1\1\1\uffff\1\3\15\uffff\1\23\1\24\1\27\10\uffff\1\46" + u"\1\47\1\50\1\51\7\uffff\1\66\5\uffff\1\102\5\uffff\1\136\4\uffff" + u"\1\145\1\146\1\uffff\1\147\1\1\1\uffff\1\136\1\3\1\107\1\4\26\uffff" + u"\1\23\1\24\1\27\11\uffff\1\46\1\47\1\50\1\51\1\70\1\52\1\53\1\63" + u"\1\144\1\73\1\60\1\54\1\74\1\64\1\61\1\55\1\150\1\151\1\71\1\56" + u"\1\72\1\57\1\77\1\104\1\65\1\66\1\110\1\67\1\uffff\1\113\1\111" + u"\1\uffff\1\114\1\112\1\100\1\106\1\103\1\101\1\105\1\102\5\uffff" + u"\1\140\1\137\1\141\1\uffff\1\142\1\uffff\1\145\1\146\1\152\23\uffff" + u"\1\124\6\uffff\1\130\2\uffff\1\33\10\uffff\1\75\1\115\1\76\1\116" + u"\5\uffff\1\143\24\uffff\1\15\1\uffff\1\131\6\uffff\1\34\15\uffff" + u"\1\125\1\uffff\1\30\6\uffff\1\7\4\uffff\1\12\1\122\2\uffff\1\13" + u"\1\16\17\uffff\1\120\1\uffff\1\132\10\uffff\1\14\5\uffff\1\31\1" + u"\17\3\uffff\1\26\1\uffff\1\36\10\uffff\1\121\1\127\1\134\1\uffff" + u"\1\5\1\126\1\6\1\25\1\62\1\21\1\uffff\1\135\1\11\3\uffff\1\20\7" + u"\uffff\1\42\1\45\1\uffff\1\2\3\uffff\1\123\7\uffff\1\117\1\10\1" + u"\32\1\133\1\22\1\35\1\uffff\1\40\3\uffff\1\37\24\uffff\1\43\5\uffff" + u"\1\44\12\uffff\1\41" + ) + + DFA35_special = DFA.unpack( + u"\u0192\uffff" + ) + + + DFA35_transition = [ + DFA.unpack(u"\6\73\2\70\1\73\2\70\22\73\1\70\1\50\1\65\1\72\1\63" + u"\1\45\1\46\1\64\1\34\1\35\1\40\1\42\1\3\1\43\1\41\1\44\1\66\11" + u"\67\1\23\1\1\1\51\1\4\1\52\1\55\1\73\2\63\1\26\1\63\1\32\1\63\1" + u"\31\1\63\1\24\2\63\1\62\2\63\1\25\1\33\2\63\1\11\1\63\1\27\1\30" + u"\4\63\1\36\1\71\1\37\1\53\1\56\1\73\1\7\1\61\1\13\1\17\1\5\1\16" + u"\1\60\1\63\1\14\2\63\1\15\5\63\1\10\1\6\1\2\1\20\1\12\1\57\3\63" + u"\1\21\1\54\1\22\1\47\uff80\73"), + DFA.unpack(u""), + DFA.unpack(u"\1\75"), + DFA.unpack(u""), + DFA.unpack(u"\1\100"), + DFA.unpack(u"\1\102\1\uffff\1\104\11\uffff\1\103"), + DFA.unpack(u"\1\110\1\107\12\uffff\1\106\2\uffff\1\105"), + DFA.unpack(u"\1\111"), + DFA.unpack(u"\1\112"), + DFA.unpack(u"\1\113"), + DFA.unpack(u"\1\114"), + DFA.unpack(u"\1\115\6\uffff\1\117\6\uffff\1\116"), + DFA.unpack(u"\1\120\7\uffff\1\121"), + DFA.unpack(u"\1\122"), + DFA.unpack(u"\1\124\2\uffff\1\123"), + DFA.unpack(u"\1\125\11\uffff\1\126"), + DFA.unpack(u"\1\127"), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u"\1\133"), + DFA.unpack(u"\1\134\4\uffff\1\135"), + DFA.unpack(u"\1\136"), + DFA.unpack(u"\1\137"), + DFA.unpack(u"\1\140"), + DFA.unpack(u"\1\141"), + DFA.unpack(u"\1\142"), + DFA.unpack(u"\1\143"), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u"\1\150"), + DFA.unpack(u"\1\152\1\uffff\12\154"), + DFA.unpack(u"\1\156\21\uffff\1\155"), + DFA.unpack(u"\1\162\17\uffff\1\160\1\161"), + DFA.unpack(u"\1\164\4\uffff\1\165\15\uffff\1\166"), + DFA.unpack(u"\1\170"), + DFA.unpack(u"\1\173\26\uffff\1\172"), + DFA.unpack(u""), + DFA.unpack(u"\1\176"), + DFA.unpack(u"\1\u0080\1\u0081"), + DFA.unpack(u"\1\u0084\1\u0083"), + DFA.unpack(u"\1\u0086"), + DFA.unpack(u"\1\u0089\76\uffff\1\u0088"), + DFA.unpack(u""), + DFA.unpack(u"\1\u008c\1\uffff\1\u008d"), + DFA.unpack(u"\1\u008e"), + DFA.unpack(u"\1\u008f"), + DFA.unpack(u"\1\u0090"), + DFA.unpack(u"\1\u0091\4\uffff\1\u0092"), + DFA.unpack(u""), + DFA.unpack(u"\47\u0092\1\uffff\uffd7\u0092"), + DFA.unpack(u"\uffff\u0091"), + DFA.unpack(u"\1\154\1\uffff\10\u0094\2\154\12\uffff\3\154\21\uffff" + u"\1\u0093\13\uffff\3\154\21\uffff\1\u0093"), + DFA.unpack(u"\1\154\1\uffff\12\u0096\12\uffff\3\154\35\uffff\3\154"), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u"\uffff\u0099"), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u"\1\u009a"), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u"\1\u009b"), + DFA.unpack(u"\1\u009c"), + DFA.unpack(u"\1\u009d"), + DFA.unpack(u"\1\u009e"), + DFA.unpack(u"\1\u009f\20\uffff\1\u00a0"), + DFA.unpack(u"\1\u00a2\22\uffff\1\u00a1"), + DFA.unpack(u"\1\u00a3"), + DFA.unpack(u"\1\u00a4"), + DFA.unpack(u"\1\u00a5\14\uffff\1\u00a6"), + DFA.unpack(u"\1\u00a7"), + DFA.unpack(u"\1\u00a9\2\uffff\1\u00a8"), + DFA.unpack(u"\1\u00aa"), + DFA.unpack(u"\1\u00ab"), + DFA.unpack(u"\1\u00ac"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), + DFA.unpack(u"\1\u00ae"), + DFA.unpack(u"\1\u00af"), + DFA.unpack(u"\1\u00b0"), + DFA.unpack(u"\1\u00b1"), + DFA.unpack(u"\1\u00b2"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\24\76\1\u00b3\5\76"), + DFA.unpack(u"\1\u00b6\11\uffff\1\u00b5"), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), + DFA.unpack(u"\1\u00b8"), + DFA.unpack(u"\1\u00b9"), + DFA.unpack(u"\1\u00ba"), + DFA.unpack(u"\1\u00bb"), + DFA.unpack(u"\1\u00bc"), + DFA.unpack(u"\1\u00bd"), + DFA.unpack(u"\1\u00be"), + DFA.unpack(u"\1\u00bf"), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u"\1\u00c0"), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u"\1\u00c2"), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u"\1\u00c4"), + DFA.unpack(u"\1\u00c5"), + DFA.unpack(u"\1\u00c6"), + DFA.unpack(u"\1\u00c7"), + DFA.unpack(u"\1\u00c8"), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u"\1\154\1\uffff\10\u0094\2\154\12\uffff\3\154\35\uffff" + u"\3\154"), + DFA.unpack(u""), + DFA.unpack(u"\1\154\1\uffff\12\u0096\12\uffff\3\154\35\uffff\3\154"), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u"\1\u00ca"), + DFA.unpack(u"\1\u00cb"), + DFA.unpack(u"\1\u00cc"), + DFA.unpack(u"\1\u00cd"), + DFA.unpack(u"\1\u00ce"), + DFA.unpack(u"\1\u00cf"), + DFA.unpack(u"\1\u00d0"), + DFA.unpack(u"\1\u00d1"), + DFA.unpack(u"\1\u00d2"), + DFA.unpack(u"\1\u00d3"), + DFA.unpack(u"\1\u00d4"), + DFA.unpack(u"\1\u00d5"), + DFA.unpack(u"\1\u00d6"), + DFA.unpack(u"\1\u00d7"), + DFA.unpack(u"\1\u00d8"), + DFA.unpack(u"\1\u00d9"), + DFA.unpack(u"\1\u00da"), + DFA.unpack(u"\1\u00dc\1\u00db"), + DFA.unpack(u"\1\u00dd"), + DFA.unpack(u""), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), + DFA.unpack(u"\1\u00df"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), + DFA.unpack(u"\1\u00e1"), + DFA.unpack(u"\1\u00e2"), + DFA.unpack(u"\1\u00e3"), + DFA.unpack(u""), + DFA.unpack(u"\1\u00e4"), + DFA.unpack(u"\1\u00e5"), + DFA.unpack(u""), + DFA.unpack(u"\1\u00e6"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), + DFA.unpack(u"\1\u00e8"), + DFA.unpack(u"\1\u00e9"), + DFA.unpack(u"\1\u00ea"), + DFA.unpack(u"\1\u00eb"), + DFA.unpack(u"\1\u00ed\35\uffff\1\u00ec"), + DFA.unpack(u"\1\u00ee"), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u"\1\u00ef"), + DFA.unpack(u"\1\u00f0"), + DFA.unpack(u"\1\u00f1"), + DFA.unpack(u"\1\u00f2"), + DFA.unpack(u"\1\u00f3"), + DFA.unpack(u""), + DFA.unpack(u"\1\u00f4"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), + DFA.unpack(u"\1\u00f6"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), + DFA.unpack(u"\1\u00f8"), + DFA.unpack(u"\1\u00f9"), + DFA.unpack(u"\1\u00fa"), + DFA.unpack(u"\1\u00fb"), + DFA.unpack(u"\1\u00fc"), + DFA.unpack(u"\1\u00fd"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), + DFA.unpack(u"\1\u00ff"), + DFA.unpack(u"\1\u0100"), + DFA.unpack(u"\1\u0101"), + DFA.unpack(u"\1\u0102"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), + DFA.unpack(u"\1\u0105"), + DFA.unpack(u"\1\u0106"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), + DFA.unpack(u""), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), + DFA.unpack(u""), + DFA.unpack(u"\1\u0109"), + DFA.unpack(u"\1\u010a"), + DFA.unpack(u"\1\u010b"), + DFA.unpack(u"\1\u010c"), + DFA.unpack(u"\1\u010d"), + DFA.unpack(u"\1\u010e"), + DFA.unpack(u""), + DFA.unpack(u"\1\u010f"), + DFA.unpack(u"\1\u0110"), + DFA.unpack(u"\1\u0111"), + DFA.unpack(u"\1\u0112"), + DFA.unpack(u"\1\u0114\17\uffff\1\u0113"), + DFA.unpack(u"\1\u0115"), + DFA.unpack(u"\1\u0116"), + DFA.unpack(u"\1\u0117"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), + DFA.unpack(u"\1\u0119"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), + DFA.unpack(u"\1\u011b"), + DFA.unpack(u"\1\u011c"), + DFA.unpack(u""), + DFA.unpack(u"\1\u011d"), + DFA.unpack(u""), + DFA.unpack(u"\1\u011e"), + DFA.unpack(u"\1\u011f"), + DFA.unpack(u"\1\u0120"), + DFA.unpack(u"\1\u0121"), + DFA.unpack(u"\1\u0122"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), + DFA.unpack(u""), + DFA.unpack(u"\1\u0124"), + DFA.unpack(u"\1\u0125"), + DFA.unpack(u"\1\u0126"), + DFA.unpack(u"\1\u0127"), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u"\1\u0128"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), + DFA.unpack(u"\1\u012b"), + DFA.unpack(u"\1\u012c"), + DFA.unpack(u"\1\u012d"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), + DFA.unpack(u"\1\u012f"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), + DFA.unpack(u"\1\u0131"), + DFA.unpack(u"\1\u0132"), + DFA.unpack(u"\1\u0133"), + DFA.unpack(u"\1\u0134"), + DFA.unpack(u"\1\u0135"), + DFA.unpack(u"\1\u0136"), + DFA.unpack(u"\1\u0137"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\u0138\1" + u"\uffff\32\76"), + DFA.unpack(u""), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), + DFA.unpack(u""), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), + DFA.unpack(u"\1\u013c"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), + DFA.unpack(u""), + DFA.unpack(u"\1\u0143"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), + DFA.unpack(u"\1\u0146"), + DFA.unpack(u"\1\u0147"), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u"\1\u0148"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), + DFA.unpack(u"\1\u014a"), + DFA.unpack(u""), + DFA.unpack(u"\1\u014b"), + DFA.unpack(u""), + DFA.unpack(u"\1\u014c"), + DFA.unpack(u"\1\u014d"), + DFA.unpack(u"\1\u014e"), + DFA.unpack(u"\1\u014f"), + DFA.unpack(u"\1\u0150"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), + DFA.unpack(u"\1\u0153"), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u"\1\u0155"), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u"\1\u0156"), + DFA.unpack(u"\1\u0157"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), + DFA.unpack(u""), + DFA.unpack(u"\1\u0159"), + DFA.unpack(u"\1\u015a"), + DFA.unpack(u"\1\u015b"), + DFA.unpack(u"\1\u015c"), + DFA.unpack(u"\1\u015d"), + DFA.unpack(u"\1\u015e"), + DFA.unpack(u"\1\u015f"), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), + DFA.unpack(u""), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), + DFA.unpack(u""), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), + DFA.unpack(u"\1\u0166"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), + DFA.unpack(u"\1\u0168"), + DFA.unpack(u"\1\u0169"), + DFA.unpack(u"\1\u016a"), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u""), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), + DFA.unpack(u""), + DFA.unpack(u"\1\u016c"), + DFA.unpack(u"\1\u016d"), + DFA.unpack(u"\1\u016e"), + DFA.unpack(u""), + DFA.unpack(u"\1\u016f"), + DFA.unpack(u"\1\u0170"), + DFA.unpack(u"\1\u0171"), + DFA.unpack(u"\1\u0172"), + DFA.unpack(u"\1\u0173"), + DFA.unpack(u"\1\u0174"), + DFA.unpack(u"\1\u0175"), + DFA.unpack(u"\1\u0176"), + DFA.unpack(u"\1\u0177"), + DFA.unpack(u"\1\u0178"), + DFA.unpack(u"\1\u0179"), + DFA.unpack(u"\1\u017a"), + DFA.unpack(u"\1\u017b"), + DFA.unpack(u"\1\u017c"), + DFA.unpack(u"\1\u017d"), + DFA.unpack(u"\1\u017e"), + DFA.unpack(u"\1\u017f"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), + DFA.unpack(u"\1\u0181"), + DFA.unpack(u"\1\u0182"), + DFA.unpack(u""), + DFA.unpack(u"\1\u0183"), + DFA.unpack(u"\1\u0184"), + DFA.unpack(u"\1\u0185"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), + DFA.unpack(u"\1\u0187"), + DFA.unpack(u""), + DFA.unpack(u"\1\u0188"), + DFA.unpack(u"\1\u0189"), + DFA.unpack(u"\1\u018a"), + DFA.unpack(u"\1\u018b"), + DFA.unpack(u"\1\u018c"), + DFA.unpack(u"\1\u018d"), + DFA.unpack(u"\1\u018e"), + DFA.unpack(u"\1\u018f"), + DFA.unpack(u"\1\u0190"), + DFA.unpack(u"\1\76\13\uffff\12\76\7\uffff\32\76\4\uffff\1\76\1\uffff" + u"\32\76"), + DFA.unpack(u"") + ] + + # class definition for DFA #35 + + DFA35 = DFA + + diff --git a/BaseTools/Source/Python/Eot/CParser.py b/BaseTools/Source/Python/Eot/CParser.py new file mode 100644 index 0000000000..e56a79a43d --- /dev/null +++ b/BaseTools/Source/Python/Eot/CParser.py @@ -0,0 +1,18844 @@ +# $ANTLR 3.0.1 C.g 2010-02-23 09:58:53 + +from antlr3 import * +from antlr3.compat import set, frozenset + +## @file +# The file defines the parser for C source files. +# +# THIS FILE IS AUTO-GENENERATED. PLEASE DON NOT MODIFY THIS FILE. +# This file is generated by running: +# java org.antlr.Tool C.g +# +# Copyright (c) 2009 - 2010, Intel Corporation All rights reserved. +# +# This program and the accompanying materials are licensed and made available +# under the terms and conditions of the BSD License which accompanies this +# distribution. The full text of the license may be found at: +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +## + +import CodeFragment +import FileProfile + + + +# for convenience in actions +HIDDEN = BaseRecognizer.HIDDEN + +# token types +BS=20 +LINE_COMMENT=23 +FloatTypeSuffix=16 +IntegerTypeSuffix=14 +LETTER=11 +OCTAL_LITERAL=6 +CHARACTER_LITERAL=8 +Exponent=15 +EOF=-1 +HexDigit=13 +STRING_LITERAL=9 +WS=19 +FLOATING_POINT_LITERAL=10 +IDENTIFIER=4 +UnicodeEscape=18 +LINE_COMMAND=24 +UnicodeVocabulary=21 +HEX_LITERAL=5 +COMMENT=22 +DECIMAL_LITERAL=7 +EscapeSequence=12 +OctalEscape=17 + +# token names +tokenNames = [ + "", "", "", "", + "IDENTIFIER", "HEX_LITERAL", "OCTAL_LITERAL", "DECIMAL_LITERAL", "CHARACTER_LITERAL", + "STRING_LITERAL", "FLOATING_POINT_LITERAL", "LETTER", "EscapeSequence", + "HexDigit", "IntegerTypeSuffix", "Exponent", "FloatTypeSuffix", "OctalEscape", + "UnicodeEscape", "WS", "BS", "UnicodeVocabulary", "COMMENT", "LINE_COMMENT", + "LINE_COMMAND", "';'", "'typedef'", "','", "'='", "'extern'", "'static'", + "'auto'", "'register'", "'STATIC'", "'void'", "'char'", "'short'", "'int'", + "'long'", "'float'", "'double'", "'signed'", "'unsigned'", "'{'", "'}'", + "'struct'", "'union'", "':'", "'enum'", "'const'", "'volatile'", "'IN'", + "'OUT'", "'OPTIONAL'", "'CONST'", "'UNALIGNED'", "'VOLATILE'", "'GLOBAL_REMOVE_IF_UNREFERENCED'", + "'EFIAPI'", "'EFI_BOOTSERVICE'", "'EFI_RUNTIMESERVICE'", "'PACKED'", + "'('", "')'", "'['", "']'", "'*'", "'...'", "'+'", "'-'", "'/'", "'%'", + "'++'", "'--'", "'sizeof'", "'.'", "'->'", "'&'", "'~'", "'!'", "'*='", + "'/='", "'%='", "'+='", "'-='", "'<<='", "'>>='", "'&='", "'^='", "'|='", + "'?'", "'||'", "'&&'", "'|'", "'^'", "'=='", "'!='", "'<'", "'>'", "'<='", + "'>='", "'<<'", "'>>'", "'__asm__'", "'_asm'", "'__asm'", "'case'", + "'default'", "'if'", "'else'", "'switch'", "'while'", "'do'", "'for'", + "'goto'", "'continue'", "'break'", "'return'" +] + + +class function_definition_scope(object): + def __init__(self): + self.ModifierText = None + self.DeclText = None + self.LBLine = None + self.LBOffset = None + self.DeclLine = None + self.DeclOffset = None +class postfix_expression_scope(object): + def __init__(self): + self.FuncCallText = None + + +class CParser(Parser): + grammarFileName = "C.g" + tokenNames = tokenNames + + def __init__(self, input): + Parser.__init__(self, input) + self.ruleMemo = {} + + self.function_definition_stack = [] + self.postfix_expression_stack = [] + + + + + + + + + def printTokenInfo(self, line, offset, tokenText): + print str(line)+ ',' + str(offset) + ':' + str(tokenText) + + def StorePredicateExpression(self, StartLine, StartOffset, EndLine, EndOffset, Text): + PredExp = CodeFragment.PredicateExpression(Text, (StartLine, StartOffset), (EndLine, EndOffset)) + FileProfile.PredicateExpressionList.append(PredExp) + + def StoreEnumerationDefinition(self, StartLine, StartOffset, EndLine, EndOffset, Text): + EnumDef = CodeFragment.EnumerationDefinition(Text, (StartLine, StartOffset), (EndLine, EndOffset)) + FileProfile.EnumerationDefinitionList.append(EnumDef) + + def StoreStructUnionDefinition(self, StartLine, StartOffset, EndLine, EndOffset, Text): + SUDef = CodeFragment.StructUnionDefinition(Text, (StartLine, StartOffset), (EndLine, EndOffset)) + FileProfile.StructUnionDefinitionList.append(SUDef) + + def StoreTypedefDefinition(self, StartLine, StartOffset, EndLine, EndOffset, FromText, ToText): + Tdef = CodeFragment.TypedefDefinition(FromText, ToText, (StartLine, StartOffset), (EndLine, EndOffset)) + FileProfile.TypedefDefinitionList.append(Tdef) + + def StoreFunctionDefinition(self, StartLine, StartOffset, EndLine, EndOffset, ModifierText, DeclText, LeftBraceLine, LeftBraceOffset, DeclLine, DeclOffset): + FuncDef = CodeFragment.FunctionDefinition(ModifierText, DeclText, (StartLine, StartOffset), (EndLine, EndOffset), (LeftBraceLine, LeftBraceOffset), (DeclLine, DeclOffset)) + FileProfile.FunctionDefinitionList.append(FuncDef) + + def StoreVariableDeclaration(self, StartLine, StartOffset, EndLine, EndOffset, ModifierText, DeclText): + VarDecl = CodeFragment.VariableDeclaration(ModifierText, DeclText, (StartLine, StartOffset), (EndLine, EndOffset)) + FileProfile.VariableDeclarationList.append(VarDecl) + + def StoreFunctionCalling(self, StartLine, StartOffset, EndLine, EndOffset, FuncName, ParamList): + FuncCall = CodeFragment.FunctionCalling(FuncName, ParamList, (StartLine, StartOffset), (EndLine, EndOffset)) + FileProfile.FunctionCallingList.append(FuncCall) + + + + + # $ANTLR start translation_unit + # C.g:102:1: translation_unit : ( external_declaration )* ; + def translation_unit(self, ): + + translation_unit_StartIndex = self.input.index() + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 1): + return + + # C.g:103:2: ( ( external_declaration )* ) + # C.g:103:4: ( external_declaration )* + # C.g:103:4: ( external_declaration )* + while True: #loop1 + alt1 = 2 + LA1_0 = self.input.LA(1) + + if (LA1_0 == IDENTIFIER or LA1_0 == 26 or (29 <= LA1_0 <= 42) or (45 <= LA1_0 <= 46) or (48 <= LA1_0 <= 62) or LA1_0 == 66) : + alt1 = 1 + + + if alt1 == 1: + # C.g:0:0: external_declaration + self.following.append(self.FOLLOW_external_declaration_in_translation_unit74) + self.external_declaration() + self.following.pop() + if self.failed: + return + + + else: + break #loop1 + + + + + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 1, translation_unit_StartIndex) + + pass + + return + + # $ANTLR end translation_unit + + + # $ANTLR start external_declaration + # C.g:114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? ); + def external_declaration(self, ): + + external_declaration_StartIndex = self.input.index() + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 2): + return + + # C.g:119:2: ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? ) + alt3 = 3 + LA3_0 = self.input.LA(1) + + if ((29 <= LA3_0 <= 33)) : + LA3_1 = self.input.LA(2) + + if (self.synpred4()) : + alt3 = 1 + elif (self.synpred5()) : + alt3 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 1, self.input) + + raise nvae + + elif (LA3_0 == 34) : + LA3_2 = self.input.LA(2) + + if (self.synpred4()) : + alt3 = 1 + elif (self.synpred5()) : + alt3 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 2, self.input) + + raise nvae + + elif (LA3_0 == 35) : + LA3_3 = self.input.LA(2) + + if (self.synpred4()) : + alt3 = 1 + elif (self.synpred5()) : + alt3 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 3, self.input) + + raise nvae + + elif (LA3_0 == 36) : + LA3_4 = self.input.LA(2) + + if (self.synpred4()) : + alt3 = 1 + elif (self.synpred5()) : + alt3 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 4, self.input) + + raise nvae + + elif (LA3_0 == 37) : + LA3_5 = self.input.LA(2) + + if (self.synpred4()) : + alt3 = 1 + elif (self.synpred5()) : + alt3 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 5, self.input) + + raise nvae + + elif (LA3_0 == 38) : + LA3_6 = self.input.LA(2) + + if (self.synpred4()) : + alt3 = 1 + elif (self.synpred5()) : + alt3 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 6, self.input) + + raise nvae + + elif (LA3_0 == 39) : + LA3_7 = self.input.LA(2) + + if (self.synpred4()) : + alt3 = 1 + elif (self.synpred5()) : + alt3 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 7, self.input) + + raise nvae + + elif (LA3_0 == 40) : + LA3_8 = self.input.LA(2) + + if (self.synpred4()) : + alt3 = 1 + elif (self.synpred5()) : + alt3 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 8, self.input) + + raise nvae + + elif (LA3_0 == 41) : + LA3_9 = self.input.LA(2) + + if (self.synpred4()) : + alt3 = 1 + elif (self.synpred5()) : + alt3 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 9, self.input) + + raise nvae + + elif (LA3_0 == 42) : + LA3_10 = self.input.LA(2) + + if (self.synpred4()) : + alt3 = 1 + elif (self.synpred5()) : + alt3 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 10, self.input) + + raise nvae + + elif ((45 <= LA3_0 <= 46)) : + LA3_11 = self.input.LA(2) + + if (self.synpred4()) : + alt3 = 1 + elif (self.synpred5()) : + alt3 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 11, self.input) + + raise nvae + + elif (LA3_0 == 48) : + LA3_12 = self.input.LA(2) + + if (self.synpred4()) : + alt3 = 1 + elif (self.synpred5()) : + alt3 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 12, self.input) + + raise nvae + + elif (LA3_0 == IDENTIFIER) : + LA3_13 = self.input.LA(2) + + if (self.synpred4()) : + alt3 = 1 + elif (self.synpred5()) : + alt3 = 2 + elif (True) : + alt3 = 3 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 13, self.input) + + raise nvae + + elif (LA3_0 == 58) : + LA3_14 = self.input.LA(2) + + if (self.synpred4()) : + alt3 = 1 + elif (self.synpred5()) : + alt3 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 14, self.input) + + raise nvae + + elif (LA3_0 == 66) and (self.synpred4()): + alt3 = 1 + elif (LA3_0 == 59) : + LA3_16 = self.input.LA(2) + + if (self.synpred4()) : + alt3 = 1 + elif (self.synpred5()) : + alt3 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 16, self.input) + + raise nvae + + elif (LA3_0 == 60) : + LA3_17 = self.input.LA(2) + + if (self.synpred4()) : + alt3 = 1 + elif (self.synpred5()) : + alt3 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 17, self.input) + + raise nvae + + elif ((49 <= LA3_0 <= 57) or LA3_0 == 61) : + LA3_18 = self.input.LA(2) + + if (self.synpred4()) : + alt3 = 1 + elif (self.synpred5()) : + alt3 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 18, self.input) + + raise nvae + + elif (LA3_0 == 62) and (self.synpred4()): + alt3 = 1 + elif (LA3_0 == 26) : + alt3 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("114:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 0, self.input) + + raise nvae + + if alt3 == 1: + # C.g:119:4: ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition + self.following.append(self.FOLLOW_function_definition_in_external_declaration113) + self.function_definition() + self.following.pop() + if self.failed: + return + + + elif alt3 == 2: + # C.g:120:4: declaration + self.following.append(self.FOLLOW_declaration_in_external_declaration118) + self.declaration() + self.following.pop() + if self.failed: + return + + + elif alt3 == 3: + # C.g:121:4: macro_statement ( ';' )? + self.following.append(self.FOLLOW_macro_statement_in_external_declaration123) + self.macro_statement() + self.following.pop() + if self.failed: + return + # C.g:121:20: ( ';' )? + alt2 = 2 + LA2_0 = self.input.LA(1) + + if (LA2_0 == 25) : + alt2 = 1 + if alt2 == 1: + # C.g:121:21: ';' + self.match(self.input, 25, self.FOLLOW_25_in_external_declaration126) + if self.failed: + return + + + + + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 2, external_declaration_StartIndex) + + pass + + return + + # $ANTLR end external_declaration + + class function_definition_return(object): + def __init__(self): + self.start = None + self.stop = None + + + + # $ANTLR start function_definition + # C.g:126:1: function_definition : (d= declaration_specifiers )? declarator ( ( declaration )+ a= compound_statement | b= compound_statement ) ; + def function_definition(self, ): + self.function_definition_stack.append(function_definition_scope()) + retval = self.function_definition_return() + retval.start = self.input.LT(1) + function_definition_StartIndex = self.input.index() + d = None + + a = None + + b = None + + declarator1 = None + + + + self.function_definition_stack[-1].ModifierText = '' + self.function_definition_stack[-1].DeclText = '' + self.function_definition_stack[-1].LBLine = 0 + self.function_definition_stack[-1].LBOffset = 0 + self.function_definition_stack[-1].DeclLine = 0 + self.function_definition_stack[-1].DeclOffset = 0 + + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 3): + return retval + + # C.g:146:2: ( (d= declaration_specifiers )? declarator ( ( declaration )+ a= compound_statement | b= compound_statement ) ) + # C.g:146:4: (d= declaration_specifiers )? declarator ( ( declaration )+ a= compound_statement | b= compound_statement ) + # C.g:146:5: (d= declaration_specifiers )? + alt4 = 2 + LA4 = self.input.LA(1) + if LA4 == 29 or LA4 == 30 or LA4 == 31 or LA4 == 32 or LA4 == 33 or LA4 == 34 or LA4 == 35 or LA4 == 36 or LA4 == 37 or LA4 == 38 or LA4 == 39 or LA4 == 40 or LA4 == 41 or LA4 == 42 or LA4 == 45 or LA4 == 46 or LA4 == 48 or LA4 == 49 or LA4 == 50 or LA4 == 51 or LA4 == 52 or LA4 == 53 or LA4 == 54 or LA4 == 55 or LA4 == 56 or LA4 == 57 or LA4 == 61: + alt4 = 1 + elif LA4 == IDENTIFIER: + LA4 = self.input.LA(2) + if LA4 == 66: + alt4 = 1 + elif LA4 == 58: + LA4_21 = self.input.LA(3) + + if (self.synpred7()) : + alt4 = 1 + elif LA4 == 59: + LA4_22 = self.input.LA(3) + + if (self.synpred7()) : + alt4 = 1 + elif LA4 == 60: + LA4_23 = self.input.LA(3) + + if (self.synpred7()) : + alt4 = 1 + elif LA4 == IDENTIFIER: + LA4_24 = self.input.LA(3) + + if (self.synpred7()) : + alt4 = 1 + elif LA4 == 62: + LA4_25 = self.input.LA(3) + + if (self.synpred7()) : + alt4 = 1 + elif LA4 == 29 or LA4 == 30 or LA4 == 31 or LA4 == 32 or LA4 == 33: + LA4_26 = self.input.LA(3) + + if (self.synpred7()) : + alt4 = 1 + elif LA4 == 34: + LA4_27 = self.input.LA(3) + + if (self.synpred7()) : + alt4 = 1 + elif LA4 == 35: + LA4_28 = self.input.LA(3) + + if (self.synpred7()) : + alt4 = 1 + elif LA4 == 36: + LA4_29 = self.input.LA(3) + + if (self.synpred7()) : + alt4 = 1 + elif LA4 == 37: + LA4_30 = self.input.LA(3) + + if (self.synpred7()) : + alt4 = 1 + elif LA4 == 38: + LA4_31 = self.input.LA(3) + + if (self.synpred7()) : + alt4 = 1 + elif LA4 == 39: + LA4_32 = self.input.LA(3) + + if (self.synpred7()) : + alt4 = 1 + elif LA4 == 40: + LA4_33 = self.input.LA(3) + + if (self.synpred7()) : + alt4 = 1 + elif LA4 == 41: + LA4_34 = self.input.LA(3) + + if (self.synpred7()) : + alt4 = 1 + elif LA4 == 42: + LA4_35 = self.input.LA(3) + + if (self.synpred7()) : + alt4 = 1 + elif LA4 == 45 or LA4 == 46: + LA4_36 = self.input.LA(3) + + if (self.synpred7()) : + alt4 = 1 + elif LA4 == 48: + LA4_37 = self.input.LA(3) + + if (self.synpred7()) : + alt4 = 1 + elif LA4 == 49 or LA4 == 50 or LA4 == 51 or LA4 == 52 or LA4 == 53 or LA4 == 54 or LA4 == 55 or LA4 == 56 or LA4 == 57 or LA4 == 61: + LA4_38 = self.input.LA(3) + + if (self.synpred7()) : + alt4 = 1 + elif LA4 == 58: + LA4_14 = self.input.LA(2) + + if (self.synpred7()) : + alt4 = 1 + elif LA4 == 59: + LA4_16 = self.input.LA(2) + + if (self.synpred7()) : + alt4 = 1 + elif LA4 == 60: + LA4_17 = self.input.LA(2) + + if (self.synpred7()) : + alt4 = 1 + if alt4 == 1: + # C.g:0:0: d= declaration_specifiers + self.following.append(self.FOLLOW_declaration_specifiers_in_function_definition157) + d = self.declaration_specifiers() + self.following.pop() + if self.failed: + return retval + + + + self.following.append(self.FOLLOW_declarator_in_function_definition160) + declarator1 = self.declarator() + self.following.pop() + if self.failed: + return retval + # C.g:147:3: ( ( declaration )+ a= compound_statement | b= compound_statement ) + alt6 = 2 + LA6_0 = self.input.LA(1) + + if (LA6_0 == IDENTIFIER or LA6_0 == 26 or (29 <= LA6_0 <= 42) or (45 <= LA6_0 <= 46) or (48 <= LA6_0 <= 61)) : + alt6 = 1 + elif (LA6_0 == 43) : + alt6 = 2 + else: + if self.backtracking > 0: + self.failed = True + return retval + + nvae = NoViableAltException("147:3: ( ( declaration )+ a= compound_statement | b= compound_statement )", 6, 0, self.input) + + raise nvae + + if alt6 == 1: + # C.g:147:5: ( declaration )+ a= compound_statement + # C.g:147:5: ( declaration )+ + cnt5 = 0 + while True: #loop5 + alt5 = 2 + LA5_0 = self.input.LA(1) + + if (LA5_0 == IDENTIFIER or LA5_0 == 26 or (29 <= LA5_0 <= 42) or (45 <= LA5_0 <= 46) or (48 <= LA5_0 <= 61)) : + alt5 = 1 + + + if alt5 == 1: + # C.g:0:0: declaration + self.following.append(self.FOLLOW_declaration_in_function_definition166) + self.declaration() + self.following.pop() + if self.failed: + return retval + + + else: + if cnt5 >= 1: + break #loop5 + + if self.backtracking > 0: + self.failed = True + return retval + + eee = EarlyExitException(5, self.input) + raise eee + + cnt5 += 1 + + + self.following.append(self.FOLLOW_compound_statement_in_function_definition171) + a = self.compound_statement() + self.following.pop() + if self.failed: + return retval + + + elif alt6 == 2: + # C.g:148:5: b= compound_statement + self.following.append(self.FOLLOW_compound_statement_in_function_definition180) + b = self.compound_statement() + self.following.pop() + if self.failed: + return retval + + + + if self.backtracking == 0: + + if d != None: + self.function_definition_stack[-1].ModifierText = self.input.toString(d.start,d.stop) + else: + self.function_definition_stack[-1].ModifierText = '' + self.function_definition_stack[-1].DeclText = self.input.toString(declarator1.start,declarator1.stop) + self.function_definition_stack[-1].DeclLine = declarator1.start.line + self.function_definition_stack[-1].DeclOffset = declarator1.start.charPositionInLine + if a != None: + self.function_definition_stack[-1].LBLine = a.start.line + self.function_definition_stack[-1].LBOffset = a.start.charPositionInLine + else: + self.function_definition_stack[-1].LBLine = b.start.line + self.function_definition_stack[-1].LBOffset = b.start.charPositionInLine + + + + + + retval.stop = self.input.LT(-1) + + if self.backtracking == 0: + + self.StoreFunctionDefinition(retval.start.line, retval.start.charPositionInLine, retval.stop.line, retval.stop.charPositionInLine, self.function_definition_stack[-1].ModifierText, self.function_definition_stack[-1].DeclText, self.function_definition_stack[-1].LBLine, self.function_definition_stack[-1].LBOffset, self.function_definition_stack[-1].DeclLine, self.function_definition_stack[-1].DeclOffset) + + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 3, function_definition_StartIndex) + + self.function_definition_stack.pop() + pass + + return retval + + # $ANTLR end function_definition + + + # $ANTLR start declaration + # C.g:166:1: declaration : (a= 'typedef' (b= declaration_specifiers )? c= init_declarator_list d= ';' | s= declaration_specifiers (t= init_declarator_list )? e= ';' ); + def declaration(self, ): + + declaration_StartIndex = self.input.index() + a = None + d = None + e = None + b = None + + c = None + + s = None + + t = None + + + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 4): + return + + # C.g:167:2: (a= 'typedef' (b= declaration_specifiers )? c= init_declarator_list d= ';' | s= declaration_specifiers (t= init_declarator_list )? e= ';' ) + alt9 = 2 + LA9_0 = self.input.LA(1) + + if (LA9_0 == 26) : + alt9 = 1 + elif (LA9_0 == IDENTIFIER or (29 <= LA9_0 <= 42) or (45 <= LA9_0 <= 46) or (48 <= LA9_0 <= 61)) : + alt9 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("166:1: declaration : (a= 'typedef' (b= declaration_specifiers )? c= init_declarator_list d= ';' | s= declaration_specifiers (t= init_declarator_list )? e= ';' );", 9, 0, self.input) + + raise nvae + + if alt9 == 1: + # C.g:167:4: a= 'typedef' (b= declaration_specifiers )? c= init_declarator_list d= ';' + a = self.input.LT(1) + self.match(self.input, 26, self.FOLLOW_26_in_declaration203) + if self.failed: + return + # C.g:167:17: (b= declaration_specifiers )? + alt7 = 2 + LA7 = self.input.LA(1) + if LA7 == 29 or LA7 == 30 or LA7 == 31 or LA7 == 32 or LA7 == 33 or LA7 == 34 or LA7 == 35 or LA7 == 36 or LA7 == 37 or LA7 == 38 or LA7 == 39 or LA7 == 40 or LA7 == 41 or LA7 == 42 or LA7 == 45 or LA7 == 46 or LA7 == 48 or LA7 == 49 or LA7 == 50 or LA7 == 51 or LA7 == 52 or LA7 == 53 or LA7 == 54 or LA7 == 55 or LA7 == 56 or LA7 == 57 or LA7 == 61: + alt7 = 1 + elif LA7 == IDENTIFIER: + LA7_13 = self.input.LA(2) + + if (LA7_13 == 62) : + LA7_21 = self.input.LA(3) + + if (self.synpred10()) : + alt7 = 1 + elif (LA7_13 == IDENTIFIER or (29 <= LA7_13 <= 42) or (45 <= LA7_13 <= 46) or (48 <= LA7_13 <= 61) or LA7_13 == 66) : + alt7 = 1 + elif LA7 == 58: + LA7_14 = self.input.LA(2) + + if (self.synpred10()) : + alt7 = 1 + elif LA7 == 59: + LA7_16 = self.input.LA(2) + + if (self.synpred10()) : + alt7 = 1 + elif LA7 == 60: + LA7_17 = self.input.LA(2) + + if (self.synpred10()) : + alt7 = 1 + if alt7 == 1: + # C.g:0:0: b= declaration_specifiers + self.following.append(self.FOLLOW_declaration_specifiers_in_declaration207) + b = self.declaration_specifiers() + self.following.pop() + if self.failed: + return + + + + self.following.append(self.FOLLOW_init_declarator_list_in_declaration216) + c = self.init_declarator_list() + self.following.pop() + if self.failed: + return + d = self.input.LT(1) + self.match(self.input, 25, self.FOLLOW_25_in_declaration220) + if self.failed: + return + if self.backtracking == 0: + + if b != None: + self.StoreTypedefDefinition(a.line, a.charPositionInLine, d.line, d.charPositionInLine, self.input.toString(b.start,b.stop), self.input.toString(c.start,c.stop)) + else: + self.StoreTypedefDefinition(a.line, a.charPositionInLine, d.line, d.charPositionInLine, '', self.input.toString(c.start,c.stop)) + + + + + elif alt9 == 2: + # C.g:175:4: s= declaration_specifiers (t= init_declarator_list )? e= ';' + self.following.append(self.FOLLOW_declaration_specifiers_in_declaration234) + s = self.declaration_specifiers() + self.following.pop() + if self.failed: + return + # C.g:175:30: (t= init_declarator_list )? + alt8 = 2 + LA8_0 = self.input.LA(1) + + if (LA8_0 == IDENTIFIER or (58 <= LA8_0 <= 60) or LA8_0 == 62 or LA8_0 == 66) : + alt8 = 1 + if alt8 == 1: + # C.g:0:0: t= init_declarator_list + self.following.append(self.FOLLOW_init_declarator_list_in_declaration238) + t = self.init_declarator_list() + self.following.pop() + if self.failed: + return + + + + e = self.input.LT(1) + self.match(self.input, 25, self.FOLLOW_25_in_declaration243) + if self.failed: + return + if self.backtracking == 0: + + if t != None: + self.StoreVariableDeclaration(s.start.line, s.start.charPositionInLine, t.start.line, t.start.charPositionInLine, self.input.toString(s.start,s.stop), self.input.toString(t.start,t.stop)) + + + + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 4, declaration_StartIndex) + + pass + + return + + # $ANTLR end declaration + + class declaration_specifiers_return(object): + def __init__(self): + self.start = None + self.stop = None + + + + # $ANTLR start declaration_specifiers + # C.g:182:1: declaration_specifiers : ( storage_class_specifier | type_specifier | type_qualifier )+ ; + def declaration_specifiers(self, ): + + retval = self.declaration_specifiers_return() + retval.start = self.input.LT(1) + declaration_specifiers_StartIndex = self.input.index() + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 5): + return retval + + # C.g:183:2: ( ( storage_class_specifier | type_specifier | type_qualifier )+ ) + # C.g:183:6: ( storage_class_specifier | type_specifier | type_qualifier )+ + # C.g:183:6: ( storage_class_specifier | type_specifier | type_qualifier )+ + cnt10 = 0 + while True: #loop10 + alt10 = 4 + LA10 = self.input.LA(1) + if LA10 == 58: + LA10_2 = self.input.LA(2) + + if (self.synpred15()) : + alt10 = 3 + + + elif LA10 == 59: + LA10_3 = self.input.LA(2) + + if (self.synpred15()) : + alt10 = 3 + + + elif LA10 == 60: + LA10_4 = self.input.LA(2) + + if (self.synpred15()) : + alt10 = 3 + + + elif LA10 == IDENTIFIER: + LA10_5 = self.input.LA(2) + + if (self.synpred14()) : + alt10 = 2 + + + elif LA10 == 53: + LA10_9 = self.input.LA(2) + + if (self.synpred15()) : + alt10 = 3 + + + elif LA10 == 29 or LA10 == 30 or LA10 == 31 or LA10 == 32 or LA10 == 33: + alt10 = 1 + elif LA10 == 34 or LA10 == 35 or LA10 == 36 or LA10 == 37 or LA10 == 38 or LA10 == 39 or LA10 == 40 or LA10 == 41 or LA10 == 42 or LA10 == 45 or LA10 == 46 or LA10 == 48: + alt10 = 2 + elif LA10 == 49 or LA10 == 50 or LA10 == 51 or LA10 == 52 or LA10 == 54 or LA10 == 55 or LA10 == 56 or LA10 == 57 or LA10 == 61: + alt10 = 3 + + if alt10 == 1: + # C.g:183:10: storage_class_specifier + self.following.append(self.FOLLOW_storage_class_specifier_in_declaration_specifiers264) + self.storage_class_specifier() + self.following.pop() + if self.failed: + return retval + + + elif alt10 == 2: + # C.g:184:7: type_specifier + self.following.append(self.FOLLOW_type_specifier_in_declaration_specifiers272) + self.type_specifier() + self.following.pop() + if self.failed: + return retval + + + elif alt10 == 3: + # C.g:185:13: type_qualifier + self.following.append(self.FOLLOW_type_qualifier_in_declaration_specifiers286) + self.type_qualifier() + self.following.pop() + if self.failed: + return retval + + + else: + if cnt10 >= 1: + break #loop10 + + if self.backtracking > 0: + self.failed = True + return retval + + eee = EarlyExitException(10, self.input) + raise eee + + cnt10 += 1 + + + + + + retval.stop = self.input.LT(-1) + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 5, declaration_specifiers_StartIndex) + + pass + + return retval + + # $ANTLR end declaration_specifiers + + class init_declarator_list_return(object): + def __init__(self): + self.start = None + self.stop = None + + + + # $ANTLR start init_declarator_list + # C.g:189:1: init_declarator_list : init_declarator ( ',' init_declarator )* ; + def init_declarator_list(self, ): + + retval = self.init_declarator_list_return() + retval.start = self.input.LT(1) + init_declarator_list_StartIndex = self.input.index() + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 6): + return retval + + # C.g:190:2: ( init_declarator ( ',' init_declarator )* ) + # C.g:190:4: init_declarator ( ',' init_declarator )* + self.following.append(self.FOLLOW_init_declarator_in_init_declarator_list308) + self.init_declarator() + self.following.pop() + if self.failed: + return retval + # C.g:190:20: ( ',' init_declarator )* + while True: #loop11 + alt11 = 2 + LA11_0 = self.input.LA(1) + + if (LA11_0 == 27) : + alt11 = 1 + + + if alt11 == 1: + # C.g:190:21: ',' init_declarator + self.match(self.input, 27, self.FOLLOW_27_in_init_declarator_list311) + if self.failed: + return retval + self.following.append(self.FOLLOW_init_declarator_in_init_declarator_list313) + self.init_declarator() + self.following.pop() + if self.failed: + return retval + + + else: + break #loop11 + + + + + + retval.stop = self.input.LT(-1) + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 6, init_declarator_list_StartIndex) + + pass + + return retval + + # $ANTLR end init_declarator_list + + + # $ANTLR start init_declarator + # C.g:193:1: init_declarator : declarator ( '=' initializer )? ; + def init_declarator(self, ): + + init_declarator_StartIndex = self.input.index() + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 7): + return + + # C.g:194:2: ( declarator ( '=' initializer )? ) + # C.g:194:4: declarator ( '=' initializer )? + self.following.append(self.FOLLOW_declarator_in_init_declarator326) + self.declarator() + self.following.pop() + if self.failed: + return + # C.g:194:15: ( '=' initializer )? + alt12 = 2 + LA12_0 = self.input.LA(1) + + if (LA12_0 == 28) : + alt12 = 1 + if alt12 == 1: + # C.g:194:16: '=' initializer + self.match(self.input, 28, self.FOLLOW_28_in_init_declarator329) + if self.failed: + return + self.following.append(self.FOLLOW_initializer_in_init_declarator331) + self.initializer() + self.following.pop() + if self.failed: + return + + + + + + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 7, init_declarator_StartIndex) + + pass + + return + + # $ANTLR end init_declarator + + + # $ANTLR start storage_class_specifier + # C.g:197:1: storage_class_specifier : ( 'extern' | 'static' | 'auto' | 'register' | 'STATIC' ); + def storage_class_specifier(self, ): + + storage_class_specifier_StartIndex = self.input.index() + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 8): + return + + # C.g:198:2: ( 'extern' | 'static' | 'auto' | 'register' | 'STATIC' ) + # C.g: + if (29 <= self.input.LA(1) <= 33): + self.input.consume(); + self.errorRecovery = False + self.failed = False + + else: + if self.backtracking > 0: + self.failed = True + return + + mse = MismatchedSetException(None, self.input) + self.recoverFromMismatchedSet( + self.input, mse, self.FOLLOW_set_in_storage_class_specifier0 + ) + raise mse + + + + + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 8, storage_class_specifier_StartIndex) + + pass + + return + + # $ANTLR end storage_class_specifier + + + # $ANTLR start type_specifier + # C.g:205:1: type_specifier : ( 'void' | 'char' | 'short' | 'int' | 'long' | 'float' | 'double' | 'signed' | 'unsigned' | s= struct_or_union_specifier | e= enum_specifier | ( IDENTIFIER ( type_qualifier )* declarator )=> type_id ); + def type_specifier(self, ): + + type_specifier_StartIndex = self.input.index() + s = None + + e = None + + + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 9): + return + + # C.g:206:2: ( 'void' | 'char' | 'short' | 'int' | 'long' | 'float' | 'double' | 'signed' | 'unsigned' | s= struct_or_union_specifier | e= enum_specifier | ( IDENTIFIER ( type_qualifier )* declarator )=> type_id ) + alt13 = 12 + LA13_0 = self.input.LA(1) + + if (LA13_0 == 34) : + alt13 = 1 + elif (LA13_0 == 35) : + alt13 = 2 + elif (LA13_0 == 36) : + alt13 = 3 + elif (LA13_0 == 37) : + alt13 = 4 + elif (LA13_0 == 38) : + alt13 = 5 + elif (LA13_0 == 39) : + alt13 = 6 + elif (LA13_0 == 40) : + alt13 = 7 + elif (LA13_0 == 41) : + alt13 = 8 + elif (LA13_0 == 42) : + alt13 = 9 + elif ((45 <= LA13_0 <= 46)) : + alt13 = 10 + elif (LA13_0 == 48) : + alt13 = 11 + elif (LA13_0 == IDENTIFIER) and (self.synpred34()): + alt13 = 12 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("205:1: type_specifier : ( 'void' | 'char' | 'short' | 'int' | 'long' | 'float' | 'double' | 'signed' | 'unsigned' | s= struct_or_union_specifier | e= enum_specifier | ( IDENTIFIER ( type_qualifier )* declarator )=> type_id );", 13, 0, self.input) + + raise nvae + + if alt13 == 1: + # C.g:206:4: 'void' + self.match(self.input, 34, self.FOLLOW_34_in_type_specifier376) + if self.failed: + return + + + elif alt13 == 2: + # C.g:207:4: 'char' + self.match(self.input, 35, self.FOLLOW_35_in_type_specifier381) + if self.failed: + return + + + elif alt13 == 3: + # C.g:208:4: 'short' + self.match(self.input, 36, self.FOLLOW_36_in_type_specifier386) + if self.failed: + return + + + elif alt13 == 4: + # C.g:209:4: 'int' + self.match(self.input, 37, self.FOLLOW_37_in_type_specifier391) + if self.failed: + return + + + elif alt13 == 5: + # C.g:210:4: 'long' + self.match(self.input, 38, self.FOLLOW_38_in_type_specifier396) + if self.failed: + return + + + elif alt13 == 6: + # C.g:211:4: 'float' + self.match(self.input, 39, self.FOLLOW_39_in_type_specifier401) + if self.failed: + return + + + elif alt13 == 7: + # C.g:212:4: 'double' + self.match(self.input, 40, self.FOLLOW_40_in_type_specifier406) + if self.failed: + return + + + elif alt13 == 8: + # C.g:213:4: 'signed' + self.match(self.input, 41, self.FOLLOW_41_in_type_specifier411) + if self.failed: + return + + + elif alt13 == 9: + # C.g:214:4: 'unsigned' + self.match(self.input, 42, self.FOLLOW_42_in_type_specifier416) + if self.failed: + return + + + elif alt13 == 10: + # C.g:215:4: s= struct_or_union_specifier + self.following.append(self.FOLLOW_struct_or_union_specifier_in_type_specifier423) + s = self.struct_or_union_specifier() + self.following.pop() + if self.failed: + return + if self.backtracking == 0: + + if s.stop != None: + self.StoreStructUnionDefinition(s.start.line, s.start.charPositionInLine, s.stop.line, s.stop.charPositionInLine, self.input.toString(s.start,s.stop)) + + + + + elif alt13 == 11: + # C.g:220:4: e= enum_specifier + self.following.append(self.FOLLOW_enum_specifier_in_type_specifier433) + e = self.enum_specifier() + self.following.pop() + if self.failed: + return + if self.backtracking == 0: + + if e.stop != None: + self.StoreEnumerationDefinition(e.start.line, e.start.charPositionInLine, e.stop.line, e.stop.charPositionInLine, self.input.toString(e.start,e.stop)) + + + + + elif alt13 == 12: + # C.g:225:4: ( IDENTIFIER ( type_qualifier )* declarator )=> type_id + self.following.append(self.FOLLOW_type_id_in_type_specifier451) + self.type_id() + self.following.pop() + if self.failed: + return + + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 9, type_specifier_StartIndex) + + pass + + return + + # $ANTLR end type_specifier + + + # $ANTLR start type_id + # C.g:228:1: type_id : IDENTIFIER ; + def type_id(self, ): + + type_id_StartIndex = self.input.index() + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 10): + return + + # C.g:229:5: ( IDENTIFIER ) + # C.g:229:9: IDENTIFIER + self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_type_id467) + if self.failed: + return + + + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 10, type_id_StartIndex) + + pass + + return + + # $ANTLR end type_id + + class struct_or_union_specifier_return(object): + def __init__(self): + self.start = None + self.stop = None + + + + # $ANTLR start struct_or_union_specifier + # C.g:233:1: struct_or_union_specifier options {k=3; } : ( struct_or_union ( IDENTIFIER )? '{' struct_declaration_list '}' | struct_or_union IDENTIFIER ); + def struct_or_union_specifier(self, ): + + retval = self.struct_or_union_specifier_return() + retval.start = self.input.LT(1) + struct_or_union_specifier_StartIndex = self.input.index() + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 11): + return retval + + # C.g:235:2: ( struct_or_union ( IDENTIFIER )? '{' struct_declaration_list '}' | struct_or_union IDENTIFIER ) + alt15 = 2 + LA15_0 = self.input.LA(1) + + if ((45 <= LA15_0 <= 46)) : + LA15_1 = self.input.LA(2) + + if (LA15_1 == IDENTIFIER) : + LA15_2 = self.input.LA(3) + + if (LA15_2 == 43) : + alt15 = 1 + elif (LA15_2 == EOF or LA15_2 == IDENTIFIER or LA15_2 == 25 or LA15_2 == 27 or (29 <= LA15_2 <= 42) or (45 <= LA15_2 <= 64) or LA15_2 == 66) : + alt15 = 2 + else: + if self.backtracking > 0: + self.failed = True + return retval + + nvae = NoViableAltException("233:1: struct_or_union_specifier options {k=3; } : ( struct_or_union ( IDENTIFIER )? '{' struct_declaration_list '}' | struct_or_union IDENTIFIER );", 15, 2, self.input) + + raise nvae + + elif (LA15_1 == 43) : + alt15 = 1 + else: + if self.backtracking > 0: + self.failed = True + return retval + + nvae = NoViableAltException("233:1: struct_or_union_specifier options {k=3; } : ( struct_or_union ( IDENTIFIER )? '{' struct_declaration_list '}' | struct_or_union IDENTIFIER );", 15, 1, self.input) + + raise nvae + + else: + if self.backtracking > 0: + self.failed = True + return retval + + nvae = NoViableAltException("233:1: struct_or_union_specifier options {k=3; } : ( struct_or_union ( IDENTIFIER )? '{' struct_declaration_list '}' | struct_or_union IDENTIFIER );", 15, 0, self.input) + + raise nvae + + if alt15 == 1: + # C.g:235:4: struct_or_union ( IDENTIFIER )? '{' struct_declaration_list '}' + self.following.append(self.FOLLOW_struct_or_union_in_struct_or_union_specifier494) + self.struct_or_union() + self.following.pop() + if self.failed: + return retval + # C.g:235:20: ( IDENTIFIER )? + alt14 = 2 + LA14_0 = self.input.LA(1) + + if (LA14_0 == IDENTIFIER) : + alt14 = 1 + if alt14 == 1: + # C.g:0:0: IDENTIFIER + self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_struct_or_union_specifier496) + if self.failed: + return retval + + + + self.match(self.input, 43, self.FOLLOW_43_in_struct_or_union_specifier499) + if self.failed: + return retval + self.following.append(self.FOLLOW_struct_declaration_list_in_struct_or_union_specifier501) + self.struct_declaration_list() + self.following.pop() + if self.failed: + return retval + self.match(self.input, 44, self.FOLLOW_44_in_struct_or_union_specifier503) + if self.failed: + return retval + + + elif alt15 == 2: + # C.g:236:4: struct_or_union IDENTIFIER + self.following.append(self.FOLLOW_struct_or_union_in_struct_or_union_specifier508) + self.struct_or_union() + self.following.pop() + if self.failed: + return retval + self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_struct_or_union_specifier510) + if self.failed: + return retval + + + retval.stop = self.input.LT(-1) + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 11, struct_or_union_specifier_StartIndex) + + pass + + return retval + + # $ANTLR end struct_or_union_specifier + + + # $ANTLR start struct_or_union + # C.g:239:1: struct_or_union : ( 'struct' | 'union' ); + def struct_or_union(self, ): + + struct_or_union_StartIndex = self.input.index() + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 12): + return + + # C.g:240:2: ( 'struct' | 'union' ) + # C.g: + if (45 <= self.input.LA(1) <= 46): + self.input.consume(); + self.errorRecovery = False + self.failed = False + + else: + if self.backtracking > 0: + self.failed = True + return + + mse = MismatchedSetException(None, self.input) + self.recoverFromMismatchedSet( + self.input, mse, self.FOLLOW_set_in_struct_or_union0 + ) + raise mse + + + + + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 12, struct_or_union_StartIndex) + + pass + + return + + # $ANTLR end struct_or_union + + + # $ANTLR start struct_declaration_list + # C.g:244:1: struct_declaration_list : ( struct_declaration )+ ; + def struct_declaration_list(self, ): + + struct_declaration_list_StartIndex = self.input.index() + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 13): + return + + # C.g:245:2: ( ( struct_declaration )+ ) + # C.g:245:4: ( struct_declaration )+ + # C.g:245:4: ( struct_declaration )+ + cnt16 = 0 + while True: #loop16 + alt16 = 2 + LA16_0 = self.input.LA(1) + + if (LA16_0 == IDENTIFIER or (34 <= LA16_0 <= 42) or (45 <= LA16_0 <= 46) or (48 <= LA16_0 <= 61)) : + alt16 = 1 + + + if alt16 == 1: + # C.g:0:0: struct_declaration + self.following.append(self.FOLLOW_struct_declaration_in_struct_declaration_list537) + self.struct_declaration() + self.following.pop() + if self.failed: + return + + + else: + if cnt16 >= 1: + break #loop16 + + if self.backtracking > 0: + self.failed = True + return + + eee = EarlyExitException(16, self.input) + raise eee + + cnt16 += 1 + + + + + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 13, struct_declaration_list_StartIndex) + + pass + + return + + # $ANTLR end struct_declaration_list + + + # $ANTLR start struct_declaration + # C.g:248:1: struct_declaration : specifier_qualifier_list struct_declarator_list ';' ; + def struct_declaration(self, ): + + struct_declaration_StartIndex = self.input.index() + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 14): + return + + # C.g:249:2: ( specifier_qualifier_list struct_declarator_list ';' ) + # C.g:249:4: specifier_qualifier_list struct_declarator_list ';' + self.following.append(self.FOLLOW_specifier_qualifier_list_in_struct_declaration549) + self.specifier_qualifier_list() + self.following.pop() + if self.failed: + return + self.following.append(self.FOLLOW_struct_declarator_list_in_struct_declaration551) + self.struct_declarator_list() + self.following.pop() + if self.failed: + return + self.match(self.input, 25, self.FOLLOW_25_in_struct_declaration553) + if self.failed: + return + + + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 14, struct_declaration_StartIndex) + + pass + + return + + # $ANTLR end struct_declaration + + + # $ANTLR start specifier_qualifier_list + # C.g:252:1: specifier_qualifier_list : ( type_qualifier | type_specifier )+ ; + def specifier_qualifier_list(self, ): + + specifier_qualifier_list_StartIndex = self.input.index() + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 15): + return + + # C.g:253:2: ( ( type_qualifier | type_specifier )+ ) + # C.g:253:4: ( type_qualifier | type_specifier )+ + # C.g:253:4: ( type_qualifier | type_specifier )+ + cnt17 = 0 + while True: #loop17 + alt17 = 3 + LA17 = self.input.LA(1) + if LA17 == 58: + LA17_2 = self.input.LA(2) + + if (self.synpred39()) : + alt17 = 1 + + + elif LA17 == 59: + LA17_3 = self.input.LA(2) + + if (self.synpred39()) : + alt17 = 1 + + + elif LA17 == 60: + LA17_4 = self.input.LA(2) + + if (self.synpred39()) : + alt17 = 1 + + + elif LA17 == IDENTIFIER: + LA17 = self.input.LA(2) + if LA17 == EOF or LA17 == IDENTIFIER or LA17 == 34 or LA17 == 35 or LA17 == 36 or LA17 == 37 or LA17 == 38 or LA17 == 39 or LA17 == 40 or LA17 == 41 or LA17 == 42 or LA17 == 45 or LA17 == 46 or LA17 == 48 or LA17 == 49 or LA17 == 50 or LA17 == 51 or LA17 == 52 or LA17 == 53 or LA17 == 54 or LA17 == 55 or LA17 == 56 or LA17 == 57 or LA17 == 58 or LA17 == 59 or LA17 == 60 or LA17 == 61 or LA17 == 63 or LA17 == 66: + alt17 = 2 + elif LA17 == 62: + LA17_94 = self.input.LA(3) + + if (self.synpred40()) : + alt17 = 2 + + + elif LA17 == 47: + LA17_95 = self.input.LA(3) + + if (self.synpred40()) : + alt17 = 2 + + + elif LA17 == 64: + LA17_96 = self.input.LA(3) + + if (self.synpred40()) : + alt17 = 2 + + + + elif LA17 == 49 or LA17 == 50 or LA17 == 51 or LA17 == 52 or LA17 == 53 or LA17 == 54 or LA17 == 55 or LA17 == 56 or LA17 == 57 or LA17 == 61: + alt17 = 1 + elif LA17 == 34 or LA17 == 35 or LA17 == 36 or LA17 == 37 or LA17 == 38 or LA17 == 39 or LA17 == 40 or LA17 == 41 or LA17 == 42 or LA17 == 45 or LA17 == 46 or LA17 == 48: + alt17 = 2 + + if alt17 == 1: + # C.g:253:6: type_qualifier + self.following.append(self.FOLLOW_type_qualifier_in_specifier_qualifier_list566) + self.type_qualifier() + self.following.pop() + if self.failed: + return + + + elif alt17 == 2: + # C.g:253:23: type_specifier + self.following.append(self.FOLLOW_type_specifier_in_specifier_qualifier_list570) + self.type_specifier() + self.following.pop() + if self.failed: + return + + + else: + if cnt17 >= 1: + break #loop17 + + if self.backtracking > 0: + self.failed = True + return + + eee = EarlyExitException(17, self.input) + raise eee + + cnt17 += 1 + + + + + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 15, specifier_qualifier_list_StartIndex) + + pass + + return + + # $ANTLR end specifier_qualifier_list + + + # $ANTLR start struct_declarator_list + # C.g:256:1: struct_declarator_list : struct_declarator ( ',' struct_declarator )* ; + def struct_declarator_list(self, ): + + struct_declarator_list_StartIndex = self.input.index() + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 16): + return + + # C.g:257:2: ( struct_declarator ( ',' struct_declarator )* ) + # C.g:257:4: struct_declarator ( ',' struct_declarator )* + self.following.append(self.FOLLOW_struct_declarator_in_struct_declarator_list584) + self.struct_declarator() + self.following.pop() + if self.failed: + return + # C.g:257:22: ( ',' struct_declarator )* + while True: #loop18 + alt18 = 2 + LA18_0 = self.input.LA(1) + + if (LA18_0 == 27) : + alt18 = 1 + + + if alt18 == 1: + # C.g:257:23: ',' struct_declarator + self.match(self.input, 27, self.FOLLOW_27_in_struct_declarator_list587) + if self.failed: + return + self.following.append(self.FOLLOW_struct_declarator_in_struct_declarator_list589) + self.struct_declarator() + self.following.pop() + if self.failed: + return + + + else: + break #loop18 + + + + + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 16, struct_declarator_list_StartIndex) + + pass + + return + + # $ANTLR end struct_declarator_list + + + # $ANTLR start struct_declarator + # C.g:260:1: struct_declarator : ( declarator ( ':' constant_expression )? | ':' constant_expression ); + def struct_declarator(self, ): + + struct_declarator_StartIndex = self.input.index() + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 17): + return + + # C.g:261:2: ( declarator ( ':' constant_expression )? | ':' constant_expression ) + alt20 = 2 + LA20_0 = self.input.LA(1) + + if (LA20_0 == IDENTIFIER or (58 <= LA20_0 <= 60) or LA20_0 == 62 or LA20_0 == 66) : + alt20 = 1 + elif (LA20_0 == 47) : + alt20 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("260:1: struct_declarator : ( declarator ( ':' constant_expression )? | ':' constant_expression );", 20, 0, self.input) + + raise nvae + + if alt20 == 1: + # C.g:261:4: declarator ( ':' constant_expression )? + self.following.append(self.FOLLOW_declarator_in_struct_declarator602) + self.declarator() + self.following.pop() + if self.failed: + return + # C.g:261:15: ( ':' constant_expression )? + alt19 = 2 + LA19_0 = self.input.LA(1) + + if (LA19_0 == 47) : + alt19 = 1 + if alt19 == 1: + # C.g:261:16: ':' constant_expression + self.match(self.input, 47, self.FOLLOW_47_in_struct_declarator605) + if self.failed: + return + self.following.append(self.FOLLOW_constant_expression_in_struct_declarator607) + self.constant_expression() + self.following.pop() + if self.failed: + return + + + + + + elif alt20 == 2: + # C.g:262:4: ':' constant_expression + self.match(self.input, 47, self.FOLLOW_47_in_struct_declarator614) + if self.failed: + return + self.following.append(self.FOLLOW_constant_expression_in_struct_declarator616) + self.constant_expression() + self.following.pop() + if self.failed: + return + + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 17, struct_declarator_StartIndex) + + pass + + return + + # $ANTLR end struct_declarator + + class enum_specifier_return(object): + def __init__(self): + self.start = None + self.stop = None + + + + # $ANTLR start enum_specifier + # C.g:265:1: enum_specifier options {k=3; } : ( 'enum' '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER ); + def enum_specifier(self, ): + + retval = self.enum_specifier_return() + retval.start = self.input.LT(1) + enum_specifier_StartIndex = self.input.index() + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 18): + return retval + + # C.g:267:2: ( 'enum' '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER ) + alt23 = 3 + LA23_0 = self.input.LA(1) + + if (LA23_0 == 48) : + LA23_1 = self.input.LA(2) + + if (LA23_1 == IDENTIFIER) : + LA23_2 = self.input.LA(3) + + if (LA23_2 == 43) : + alt23 = 2 + elif (LA23_2 == EOF or LA23_2 == IDENTIFIER or LA23_2 == 25 or LA23_2 == 27 or (29 <= LA23_2 <= 42) or (45 <= LA23_2 <= 64) or LA23_2 == 66) : + alt23 = 3 + else: + if self.backtracking > 0: + self.failed = True + return retval + + nvae = NoViableAltException("265:1: enum_specifier options {k=3; } : ( 'enum' '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER );", 23, 2, self.input) + + raise nvae + + elif (LA23_1 == 43) : + alt23 = 1 + else: + if self.backtracking > 0: + self.failed = True + return retval + + nvae = NoViableAltException("265:1: enum_specifier options {k=3; } : ( 'enum' '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER );", 23, 1, self.input) + + raise nvae + + else: + if self.backtracking > 0: + self.failed = True + return retval + + nvae = NoViableAltException("265:1: enum_specifier options {k=3; } : ( 'enum' '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER );", 23, 0, self.input) + + raise nvae + + if alt23 == 1: + # C.g:267:4: 'enum' '{' enumerator_list ( ',' )? '}' + self.match(self.input, 48, self.FOLLOW_48_in_enum_specifier634) + if self.failed: + return retval + self.match(self.input, 43, self.FOLLOW_43_in_enum_specifier636) + if self.failed: + return retval + self.following.append(self.FOLLOW_enumerator_list_in_enum_specifier638) + self.enumerator_list() + self.following.pop() + if self.failed: + return retval + # C.g:267:31: ( ',' )? + alt21 = 2 + LA21_0 = self.input.LA(1) + + if (LA21_0 == 27) : + alt21 = 1 + if alt21 == 1: + # C.g:0:0: ',' + self.match(self.input, 27, self.FOLLOW_27_in_enum_specifier640) + if self.failed: + return retval + + + + self.match(self.input, 44, self.FOLLOW_44_in_enum_specifier643) + if self.failed: + return retval + + + elif alt23 == 2: + # C.g:268:4: 'enum' IDENTIFIER '{' enumerator_list ( ',' )? '}' + self.match(self.input, 48, self.FOLLOW_48_in_enum_specifier648) + if self.failed: + return retval + self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_enum_specifier650) + if self.failed: + return retval + self.match(self.input, 43, self.FOLLOW_43_in_enum_specifier652) + if self.failed: + return retval + self.following.append(self.FOLLOW_enumerator_list_in_enum_specifier654) + self.enumerator_list() + self.following.pop() + if self.failed: + return retval + # C.g:268:42: ( ',' )? + alt22 = 2 + LA22_0 = self.input.LA(1) + + if (LA22_0 == 27) : + alt22 = 1 + if alt22 == 1: + # C.g:0:0: ',' + self.match(self.input, 27, self.FOLLOW_27_in_enum_specifier656) + if self.failed: + return retval + + + + self.match(self.input, 44, self.FOLLOW_44_in_enum_specifier659) + if self.failed: + return retval + + + elif alt23 == 3: + # C.g:269:4: 'enum' IDENTIFIER + self.match(self.input, 48, self.FOLLOW_48_in_enum_specifier664) + if self.failed: + return retval + self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_enum_specifier666) + if self.failed: + return retval + + + retval.stop = self.input.LT(-1) + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 18, enum_specifier_StartIndex) + + pass + + return retval + + # $ANTLR end enum_specifier + + + # $ANTLR start enumerator_list + # C.g:272:1: enumerator_list : enumerator ( ',' enumerator )* ; + def enumerator_list(self, ): + + enumerator_list_StartIndex = self.input.index() + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 19): + return + + # C.g:273:2: ( enumerator ( ',' enumerator )* ) + # C.g:273:4: enumerator ( ',' enumerator )* + self.following.append(self.FOLLOW_enumerator_in_enumerator_list677) + self.enumerator() + self.following.pop() + if self.failed: + return + # C.g:273:15: ( ',' enumerator )* + while True: #loop24 + alt24 = 2 + LA24_0 = self.input.LA(1) + + if (LA24_0 == 27) : + LA24_1 = self.input.LA(2) + + if (LA24_1 == IDENTIFIER) : + alt24 = 1 + + + + + if alt24 == 1: + # C.g:273:16: ',' enumerator + self.match(self.input, 27, self.FOLLOW_27_in_enumerator_list680) + if self.failed: + return + self.following.append(self.FOLLOW_enumerator_in_enumerator_list682) + self.enumerator() + self.following.pop() + if self.failed: + return + + + else: + break #loop24 + + + + + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 19, enumerator_list_StartIndex) + + pass + + return + + # $ANTLR end enumerator_list + + + # $ANTLR start enumerator + # C.g:276:1: enumerator : IDENTIFIER ( '=' constant_expression )? ; + def enumerator(self, ): + + enumerator_StartIndex = self.input.index() + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 20): + return + + # C.g:277:2: ( IDENTIFIER ( '=' constant_expression )? ) + # C.g:277:4: IDENTIFIER ( '=' constant_expression )? + self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_enumerator695) + if self.failed: + return + # C.g:277:15: ( '=' constant_expression )? + alt25 = 2 + LA25_0 = self.input.LA(1) + + if (LA25_0 == 28) : + alt25 = 1 + if alt25 == 1: + # C.g:277:16: '=' constant_expression + self.match(self.input, 28, self.FOLLOW_28_in_enumerator698) + if self.failed: + return + self.following.append(self.FOLLOW_constant_expression_in_enumerator700) + self.constant_expression() + self.following.pop() + if self.failed: + return + + + + + + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 20, enumerator_StartIndex) + + pass + + return + + # $ANTLR end enumerator + + + # $ANTLR start type_qualifier + # C.g:280:1: type_qualifier : ( 'const' | 'volatile' | 'IN' | 'OUT' | 'OPTIONAL' | 'CONST' | 'UNALIGNED' | 'VOLATILE' | 'GLOBAL_REMOVE_IF_UNREFERENCED' | 'EFIAPI' | 'EFI_BOOTSERVICE' | 'EFI_RUNTIMESERVICE' | 'PACKED' ); + def type_qualifier(self, ): + + type_qualifier_StartIndex = self.input.index() + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 21): + return + + # C.g:281:2: ( 'const' | 'volatile' | 'IN' | 'OUT' | 'OPTIONAL' | 'CONST' | 'UNALIGNED' | 'VOLATILE' | 'GLOBAL_REMOVE_IF_UNREFERENCED' | 'EFIAPI' | 'EFI_BOOTSERVICE' | 'EFI_RUNTIMESERVICE' | 'PACKED' ) + # C.g: + if (49 <= self.input.LA(1) <= 61): + self.input.consume(); + self.errorRecovery = False + self.failed = False + + else: + if self.backtracking > 0: + self.failed = True + return + + mse = MismatchedSetException(None, self.input) + self.recoverFromMismatchedSet( + self.input, mse, self.FOLLOW_set_in_type_qualifier0 + ) + raise mse + + + + + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 21, type_qualifier_StartIndex) + + pass + + return + + # $ANTLR end type_qualifier + + class declarator_return(object): + def __init__(self): + self.start = None + self.stop = None + + + + # $ANTLR start declarator + # C.g:296:1: declarator : ( ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator | pointer ); + def declarator(self, ): + + retval = self.declarator_return() + retval.start = self.input.LT(1) + declarator_StartIndex = self.input.index() + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 22): + return retval + + # C.g:297:2: ( ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator | pointer ) + alt30 = 2 + LA30_0 = self.input.LA(1) + + if (LA30_0 == 66) : + LA30_1 = self.input.LA(2) + + if (self.synpred66()) : + alt30 = 1 + elif (True) : + alt30 = 2 + else: + if self.backtracking > 0: + self.failed = True + return retval + + nvae = NoViableAltException("296:1: declarator : ( ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator | pointer );", 30, 1, self.input) + + raise nvae + + elif (LA30_0 == IDENTIFIER or (58 <= LA30_0 <= 60) or LA30_0 == 62) : + alt30 = 1 + else: + if self.backtracking > 0: + self.failed = True + return retval + + nvae = NoViableAltException("296:1: declarator : ( ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator | pointer );", 30, 0, self.input) + + raise nvae + + if alt30 == 1: + # C.g:297:4: ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator + # C.g:297:4: ( pointer )? + alt26 = 2 + LA26_0 = self.input.LA(1) + + if (LA26_0 == 66) : + alt26 = 1 + if alt26 == 1: + # C.g:0:0: pointer + self.following.append(self.FOLLOW_pointer_in_declarator784) + self.pointer() + self.following.pop() + if self.failed: + return retval + + + + # C.g:297:13: ( 'EFIAPI' )? + alt27 = 2 + LA27_0 = self.input.LA(1) + + if (LA27_0 == 58) : + alt27 = 1 + if alt27 == 1: + # C.g:297:14: 'EFIAPI' + self.match(self.input, 58, self.FOLLOW_58_in_declarator788) + if self.failed: + return retval + + + + # C.g:297:25: ( 'EFI_BOOTSERVICE' )? + alt28 = 2 + LA28_0 = self.input.LA(1) + + if (LA28_0 == 59) : + alt28 = 1 + if alt28 == 1: + # C.g:297:26: 'EFI_BOOTSERVICE' + self.match(self.input, 59, self.FOLLOW_59_in_declarator793) + if self.failed: + return retval + + + + # C.g:297:46: ( 'EFI_RUNTIMESERVICE' )? + alt29 = 2 + LA29_0 = self.input.LA(1) + + if (LA29_0 == 60) : + alt29 = 1 + if alt29 == 1: + # C.g:297:47: 'EFI_RUNTIMESERVICE' + self.match(self.input, 60, self.FOLLOW_60_in_declarator798) + if self.failed: + return retval + + + + self.following.append(self.FOLLOW_direct_declarator_in_declarator802) + self.direct_declarator() + self.following.pop() + if self.failed: + return retval + + + elif alt30 == 2: + # C.g:299:4: pointer + self.following.append(self.FOLLOW_pointer_in_declarator808) + self.pointer() + self.following.pop() + if self.failed: + return retval + + + retval.stop = self.input.LT(-1) + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 22, declarator_StartIndex) + + pass + + return retval + + # $ANTLR end declarator + + + # $ANTLR start direct_declarator + # C.g:302:1: direct_declarator : ( IDENTIFIER ( declarator_suffix )* | '(' ( 'EFIAPI' )? declarator ')' ( declarator_suffix )+ ); + def direct_declarator(self, ): + + direct_declarator_StartIndex = self.input.index() + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 23): + return + + # C.g:303:2: ( IDENTIFIER ( declarator_suffix )* | '(' ( 'EFIAPI' )? declarator ')' ( declarator_suffix )+ ) + alt34 = 2 + LA34_0 = self.input.LA(1) + + if (LA34_0 == IDENTIFIER) : + alt34 = 1 + elif (LA34_0 == 62) : + alt34 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("302:1: direct_declarator : ( IDENTIFIER ( declarator_suffix )* | '(' ( 'EFIAPI' )? declarator ')' ( declarator_suffix )+ );", 34, 0, self.input) + + raise nvae + + if alt34 == 1: + # C.g:303:4: IDENTIFIER ( declarator_suffix )* + self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_direct_declarator819) + if self.failed: + return + # C.g:303:15: ( declarator_suffix )* + while True: #loop31 + alt31 = 2 + LA31_0 = self.input.LA(1) + + if (LA31_0 == 62) : + LA31 = self.input.LA(2) + if LA31 == 63: + LA31_30 = self.input.LA(3) + + if (self.synpred67()) : + alt31 = 1 + + + elif LA31 == 58: + LA31_31 = self.input.LA(3) + + if (self.synpred67()) : + alt31 = 1 + + + elif LA31 == 66: + LA31_32 = self.input.LA(3) + + if (self.synpred67()) : + alt31 = 1 + + + elif LA31 == 59: + LA31_33 = self.input.LA(3) + + if (self.synpred67()) : + alt31 = 1 + + + elif LA31 == 60: + LA31_34 = self.input.LA(3) + + if (self.synpred67()) : + alt31 = 1 + + + elif LA31 == IDENTIFIER: + LA31_35 = self.input.LA(3) + + if (self.synpred67()) : + alt31 = 1 + + + elif LA31 == 29 or LA31 == 30 or LA31 == 31 or LA31 == 32 or LA31 == 33: + LA31_37 = self.input.LA(3) + + if (self.synpred67()) : + alt31 = 1 + + + elif LA31 == 34: + LA31_38 = self.input.LA(3) + + if (self.synpred67()) : + alt31 = 1 + + + elif LA31 == 35: + LA31_39 = self.input.LA(3) + + if (self.synpred67()) : + alt31 = 1 + + + elif LA31 == 36: + LA31_40 = self.input.LA(3) + + if (self.synpred67()) : + alt31 = 1 + + + elif LA31 == 37: + LA31_41 = self.input.LA(3) + + if (self.synpred67()) : + alt31 = 1 + + + elif LA31 == 38: + LA31_42 = self.input.LA(3) + + if (self.synpred67()) : + alt31 = 1 + + + elif LA31 == 39: + LA31_43 = self.input.LA(3) + + if (self.synpred67()) : + alt31 = 1 + + + elif LA31 == 40: + LA31_44 = self.input.LA(3) + + if (self.synpred67()) : + alt31 = 1 + + + elif LA31 == 41: + LA31_45 = self.input.LA(3) + + if (self.synpred67()) : + alt31 = 1 + + + elif LA31 == 42: + LA31_46 = self.input.LA(3) + + if (self.synpred67()) : + alt31 = 1 + + + elif LA31 == 45 or LA31 == 46: + LA31_47 = self.input.LA(3) + + if (self.synpred67()) : + alt31 = 1 + + + elif LA31 == 48: + LA31_48 = self.input.LA(3) + + if (self.synpred67()) : + alt31 = 1 + + + elif LA31 == 49 or LA31 == 50 or LA31 == 51 or LA31 == 52 or LA31 == 53 or LA31 == 54 or LA31 == 55 or LA31 == 56 or LA31 == 57 or LA31 == 61: + LA31_49 = self.input.LA(3) + + if (self.synpred67()) : + alt31 = 1 + + + + elif (LA31_0 == 64) : + LA31 = self.input.LA(2) + if LA31 == 65: + LA31_51 = self.input.LA(3) + + if (self.synpred67()) : + alt31 = 1 + + + elif LA31 == 62: + LA31_52 = self.input.LA(3) + + if (self.synpred67()) : + alt31 = 1 + + + elif LA31 == IDENTIFIER: + LA31_53 = self.input.LA(3) + + if (self.synpred67()) : + alt31 = 1 + + + elif LA31 == HEX_LITERAL: + LA31_54 = self.input.LA(3) + + if (self.synpred67()) : + alt31 = 1 + + + elif LA31 == OCTAL_LITERAL: + LA31_55 = self.input.LA(3) + + if (self.synpred67()) : + alt31 = 1 + + + elif LA31 == DECIMAL_LITERAL: + LA31_56 = self.input.LA(3) + + if (self.synpred67()) : + alt31 = 1 + + + elif LA31 == CHARACTER_LITERAL: + LA31_57 = self.input.LA(3) + + if (self.synpred67()) : + alt31 = 1 + + + elif LA31 == STRING_LITERAL: + LA31_58 = self.input.LA(3) + + if (self.synpred67()) : + alt31 = 1 + + + elif LA31 == FLOATING_POINT_LITERAL: + LA31_59 = self.input.LA(3) + + if (self.synpred67()) : + alt31 = 1 + + + elif LA31 == 72: + LA31_60 = self.input.LA(3) + + if (self.synpred67()) : + alt31 = 1 + + + elif LA31 == 73: + LA31_61 = self.input.LA(3) + + if (self.synpred67()) : + alt31 = 1 + + + elif LA31 == 66 or LA31 == 68 or LA31 == 69 or LA31 == 77 or LA31 == 78 or LA31 == 79: + LA31_62 = self.input.LA(3) + + if (self.synpred67()) : + alt31 = 1 + + + elif LA31 == 74: + LA31_63 = self.input.LA(3) + + if (self.synpred67()) : + alt31 = 1 + + + + + + if alt31 == 1: + # C.g:0:0: declarator_suffix + self.following.append(self.FOLLOW_declarator_suffix_in_direct_declarator821) + self.declarator_suffix() + self.following.pop() + if self.failed: + return + + + else: + break #loop31 + + + + + elif alt34 == 2: + # C.g:304:4: '(' ( 'EFIAPI' )? declarator ')' ( declarator_suffix )+ + self.match(self.input, 62, self.FOLLOW_62_in_direct_declarator827) + if self.failed: + return + # C.g:304:8: ( 'EFIAPI' )? + alt32 = 2 + LA32_0 = self.input.LA(1) + + if (LA32_0 == 58) : + LA32_1 = self.input.LA(2) + + if (self.synpred69()) : + alt32 = 1 + if alt32 == 1: + # C.g:304:9: 'EFIAPI' + self.match(self.input, 58, self.FOLLOW_58_in_direct_declarator830) + if self.failed: + return + + + + self.following.append(self.FOLLOW_declarator_in_direct_declarator834) + self.declarator() + self.following.pop() + if self.failed: + return + self.match(self.input, 63, self.FOLLOW_63_in_direct_declarator836) + if self.failed: + return + # C.g:304:35: ( declarator_suffix )+ + cnt33 = 0 + while True: #loop33 + alt33 = 2 + LA33_0 = self.input.LA(1) + + if (LA33_0 == 62) : + LA33 = self.input.LA(2) + if LA33 == 63: + LA33_30 = self.input.LA(3) + + if (self.synpred70()) : + alt33 = 1 + + + elif LA33 == 58: + LA33_31 = self.input.LA(3) + + if (self.synpred70()) : + alt33 = 1 + + + elif LA33 == 66: + LA33_32 = self.input.LA(3) + + if (self.synpred70()) : + alt33 = 1 + + + elif LA33 == 59: + LA33_33 = self.input.LA(3) + + if (self.synpred70()) : + alt33 = 1 + + + elif LA33 == 60: + LA33_34 = self.input.LA(3) + + if (self.synpred70()) : + alt33 = 1 + + + elif LA33 == IDENTIFIER: + LA33_35 = self.input.LA(3) + + if (self.synpred70()) : + alt33 = 1 + + + elif LA33 == 29 or LA33 == 30 or LA33 == 31 or LA33 == 32 or LA33 == 33: + LA33_37 = self.input.LA(3) + + if (self.synpred70()) : + alt33 = 1 + + + elif LA33 == 34: + LA33_38 = self.input.LA(3) + + if (self.synpred70()) : + alt33 = 1 + + + elif LA33 == 35: + LA33_39 = self.input.LA(3) + + if (self.synpred70()) : + alt33 = 1 + + + elif LA33 == 36: + LA33_40 = self.input.LA(3) + + if (self.synpred70()) : + alt33 = 1 + + + elif LA33 == 37: + LA33_41 = self.input.LA(3) + + if (self.synpred70()) : + alt33 = 1 + + + elif LA33 == 38: + LA33_42 = self.input.LA(3) + + if (self.synpred70()) : + alt33 = 1 + + + elif LA33 == 39: + LA33_43 = self.input.LA(3) + + if (self.synpred70()) : + alt33 = 1 + + + elif LA33 == 40: + LA33_44 = self.input.LA(3) + + if (self.synpred70()) : + alt33 = 1 + + + elif LA33 == 41: + LA33_45 = self.input.LA(3) + + if (self.synpred70()) : + alt33 = 1 + + + elif LA33 == 42: + LA33_46 = self.input.LA(3) + + if (self.synpred70()) : + alt33 = 1 + + + elif LA33 == 45 or LA33 == 46: + LA33_47 = self.input.LA(3) + + if (self.synpred70()) : + alt33 = 1 + + + elif LA33 == 48: + LA33_48 = self.input.LA(3) + + if (self.synpred70()) : + alt33 = 1 + + + elif LA33 == 49 or LA33 == 50 or LA33 == 51 or LA33 == 52 or LA33 == 53 or LA33 == 54 or LA33 == 55 or LA33 == 56 or LA33 == 57 or LA33 == 61: + LA33_49 = self.input.LA(3) + + if (self.synpred70()) : + alt33 = 1 + + + + elif (LA33_0 == 64) : + LA33 = self.input.LA(2) + if LA33 == 65: + LA33_51 = self.input.LA(3) + + if (self.synpred70()) : + alt33 = 1 + + + elif LA33 == 62: + LA33_52 = self.input.LA(3) + + if (self.synpred70()) : + alt33 = 1 + + + elif LA33 == IDENTIFIER: + LA33_53 = self.input.LA(3) + + if (self.synpred70()) : + alt33 = 1 + + + elif LA33 == HEX_LITERAL: + LA33_54 = self.input.LA(3) + + if (self.synpred70()) : + alt33 = 1 + + + elif LA33 == OCTAL_LITERAL: + LA33_55 = self.input.LA(3) + + if (self.synpred70()) : + alt33 = 1 + + + elif LA33 == DECIMAL_LITERAL: + LA33_56 = self.input.LA(3) + + if (self.synpred70()) : + alt33 = 1 + + + elif LA33 == CHARACTER_LITERAL: + LA33_57 = self.input.LA(3) + + if (self.synpred70()) : + alt33 = 1 + + + elif LA33 == STRING_LITERAL: + LA33_58 = self.input.LA(3) + + if (self.synpred70()) : + alt33 = 1 + + + elif LA33 == FLOATING_POINT_LITERAL: + LA33_59 = self.input.LA(3) + + if (self.synpred70()) : + alt33 = 1 + + + elif LA33 == 72: + LA33_60 = self.input.LA(3) + + if (self.synpred70()) : + alt33 = 1 + + + elif LA33 == 73: + LA33_61 = self.input.LA(3) + + if (self.synpred70()) : + alt33 = 1 + + + elif LA33 == 66 or LA33 == 68 or LA33 == 69 or LA33 == 77 or LA33 == 78 or LA33 == 79: + LA33_62 = self.input.LA(3) + + if (self.synpred70()) : + alt33 = 1 + + + elif LA33 == 74: + LA33_63 = self.input.LA(3) + + if (self.synpred70()) : + alt33 = 1 + + + + + + if alt33 == 1: + # C.g:0:0: declarator_suffix + self.following.append(self.FOLLOW_declarator_suffix_in_direct_declarator838) + self.declarator_suffix() + self.following.pop() + if self.failed: + return + + + else: + if cnt33 >= 1: + break #loop33 + + if self.backtracking > 0: + self.failed = True + return + + eee = EarlyExitException(33, self.input) + raise eee + + cnt33 += 1 + + + + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 23, direct_declarator_StartIndex) + + pass + + return + + # $ANTLR end direct_declarator + + + # $ANTLR start declarator_suffix + # C.g:307:1: declarator_suffix : ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' ); + def declarator_suffix(self, ): + + declarator_suffix_StartIndex = self.input.index() + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 24): + return + + # C.g:308:2: ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' ) + alt35 = 5 + LA35_0 = self.input.LA(1) + + if (LA35_0 == 64) : + LA35_1 = self.input.LA(2) + + if (LA35_1 == 65) : + alt35 = 2 + elif ((IDENTIFIER <= LA35_1 <= FLOATING_POINT_LITERAL) or LA35_1 == 62 or LA35_1 == 66 or (68 <= LA35_1 <= 69) or (72 <= LA35_1 <= 74) or (77 <= LA35_1 <= 79)) : + alt35 = 1 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("307:1: declarator_suffix : ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' );", 35, 1, self.input) + + raise nvae + + elif (LA35_0 == 62) : + LA35 = self.input.LA(2) + if LA35 == 63: + alt35 = 5 + elif LA35 == 29 or LA35 == 30 or LA35 == 31 or LA35 == 32 or LA35 == 33 or LA35 == 34 or LA35 == 35 or LA35 == 36 or LA35 == 37 or LA35 == 38 or LA35 == 39 or LA35 == 40 or LA35 == 41 or LA35 == 42 or LA35 == 45 or LA35 == 46 or LA35 == 48 or LA35 == 49 or LA35 == 50 or LA35 == 51 or LA35 == 52 or LA35 == 53 or LA35 == 54 or LA35 == 55 or LA35 == 56 or LA35 == 57 or LA35 == 58 or LA35 == 59 or LA35 == 60 or LA35 == 61 or LA35 == 66: + alt35 = 3 + elif LA35 == IDENTIFIER: + LA35_29 = self.input.LA(3) + + if (self.synpred73()) : + alt35 = 3 + elif (self.synpred74()) : + alt35 = 4 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("307:1: declarator_suffix : ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' );", 35, 29, self.input) + + raise nvae + + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("307:1: declarator_suffix : ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' );", 35, 2, self.input) + + raise nvae + + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("307:1: declarator_suffix : ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' );", 35, 0, self.input) + + raise nvae + + if alt35 == 1: + # C.g:308:6: '[' constant_expression ']' + self.match(self.input, 64, self.FOLLOW_64_in_declarator_suffix852) + if self.failed: + return + self.following.append(self.FOLLOW_constant_expression_in_declarator_suffix854) + self.constant_expression() + self.following.pop() + if self.failed: + return + self.match(self.input, 65, self.FOLLOW_65_in_declarator_suffix856) + if self.failed: + return + + + elif alt35 == 2: + # C.g:309:9: '[' ']' + self.match(self.input, 64, self.FOLLOW_64_in_declarator_suffix866) + if self.failed: + return + self.match(self.input, 65, self.FOLLOW_65_in_declarator_suffix868) + if self.failed: + return + + + elif alt35 == 3: + # C.g:310:9: '(' parameter_type_list ')' + self.match(self.input, 62, self.FOLLOW_62_in_declarator_suffix878) + if self.failed: + return + self.following.append(self.FOLLOW_parameter_type_list_in_declarator_suffix880) + self.parameter_type_list() + self.following.pop() + if self.failed: + return + self.match(self.input, 63, self.FOLLOW_63_in_declarator_suffix882) + if self.failed: + return + + + elif alt35 == 4: + # C.g:311:9: '(' identifier_list ')' + self.match(self.input, 62, self.FOLLOW_62_in_declarator_suffix892) + if self.failed: + return + self.following.append(self.FOLLOW_identifier_list_in_declarator_suffix894) + self.identifier_list() + self.following.pop() + if self.failed: + return + self.match(self.input, 63, self.FOLLOW_63_in_declarator_suffix896) + if self.failed: + return + + + elif alt35 == 5: + # C.g:312:9: '(' ')' + self.match(self.input, 62, self.FOLLOW_62_in_declarator_suffix906) + if self.failed: + return + self.match(self.input, 63, self.FOLLOW_63_in_declarator_suffix908) + if self.failed: + return + + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 24, declarator_suffix_StartIndex) + + pass + + return + + # $ANTLR end declarator_suffix + + + # $ANTLR start pointer + # C.g:315:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' ); + def pointer(self, ): + + pointer_StartIndex = self.input.index() + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 25): + return + + # C.g:316:2: ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' ) + alt38 = 3 + LA38_0 = self.input.LA(1) + + if (LA38_0 == 66) : + LA38 = self.input.LA(2) + if LA38 == 66: + LA38_2 = self.input.LA(3) + + if (self.synpred78()) : + alt38 = 2 + elif (True) : + alt38 = 3 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("315:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 38, 2, self.input) + + raise nvae + + elif LA38 == 58: + LA38_3 = self.input.LA(3) + + if (self.synpred77()) : + alt38 = 1 + elif (True) : + alt38 = 3 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("315:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 38, 3, self.input) + + raise nvae + + elif LA38 == 59: + LA38_4 = self.input.LA(3) + + if (self.synpred77()) : + alt38 = 1 + elif (True) : + alt38 = 3 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("315:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 38, 4, self.input) + + raise nvae + + elif LA38 == 60: + LA38_5 = self.input.LA(3) + + if (self.synpred77()) : + alt38 = 1 + elif (True) : + alt38 = 3 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("315:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 38, 5, self.input) + + raise nvae + + elif LA38 == EOF or LA38 == IDENTIFIER or LA38 == 25 or LA38 == 26 or LA38 == 27 or LA38 == 28 or LA38 == 29 or LA38 == 30 or LA38 == 31 or LA38 == 32 or LA38 == 33 or LA38 == 34 or LA38 == 35 or LA38 == 36 or LA38 == 37 or LA38 == 38 or LA38 == 39 or LA38 == 40 or LA38 == 41 or LA38 == 42 or LA38 == 43 or LA38 == 45 or LA38 == 46 or LA38 == 47 or LA38 == 48 or LA38 == 62 or LA38 == 63 or LA38 == 64: + alt38 = 3 + elif LA38 == 53: + LA38_21 = self.input.LA(3) + + if (self.synpred77()) : + alt38 = 1 + elif (True) : + alt38 = 3 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("315:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 38, 21, self.input) + + raise nvae + + elif LA38 == 49 or LA38 == 50 or LA38 == 51 or LA38 == 52 or LA38 == 54 or LA38 == 55 or LA38 == 56 or LA38 == 57 or LA38 == 61: + LA38_29 = self.input.LA(3) + + if (self.synpred77()) : + alt38 = 1 + elif (True) : + alt38 = 3 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("315:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 38, 29, self.input) + + raise nvae + + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("315:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 38, 1, self.input) + + raise nvae + + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("315:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 38, 0, self.input) + + raise nvae + + if alt38 == 1: + # C.g:316:4: '*' ( type_qualifier )+ ( pointer )? + self.match(self.input, 66, self.FOLLOW_66_in_pointer919) + if self.failed: + return + # C.g:316:8: ( type_qualifier )+ + cnt36 = 0 + while True: #loop36 + alt36 = 2 + LA36 = self.input.LA(1) + if LA36 == 58: + LA36_2 = self.input.LA(2) + + if (self.synpred75()) : + alt36 = 1 + + + elif LA36 == 59: + LA36_3 = self.input.LA(2) + + if (self.synpred75()) : + alt36 = 1 + + + elif LA36 == 60: + LA36_4 = self.input.LA(2) + + if (self.synpred75()) : + alt36 = 1 + + + elif LA36 == 53: + LA36_20 = self.input.LA(2) + + if (self.synpred75()) : + alt36 = 1 + + + elif LA36 == 49 or LA36 == 50 or LA36 == 51 or LA36 == 52 or LA36 == 54 or LA36 == 55 or LA36 == 56 or LA36 == 57 or LA36 == 61: + LA36_28 = self.input.LA(2) + + if (self.synpred75()) : + alt36 = 1 + + + + if alt36 == 1: + # C.g:0:0: type_qualifier + self.following.append(self.FOLLOW_type_qualifier_in_pointer921) + self.type_qualifier() + self.following.pop() + if self.failed: + return + + + else: + if cnt36 >= 1: + break #loop36 + + if self.backtracking > 0: + self.failed = True + return + + eee = EarlyExitException(36, self.input) + raise eee + + cnt36 += 1 + + + # C.g:316:24: ( pointer )? + alt37 = 2 + LA37_0 = self.input.LA(1) + + if (LA37_0 == 66) : + LA37_1 = self.input.LA(2) + + if (self.synpred76()) : + alt37 = 1 + if alt37 == 1: + # C.g:0:0: pointer + self.following.append(self.FOLLOW_pointer_in_pointer924) + self.pointer() + self.following.pop() + if self.failed: + return + + + + + + elif alt38 == 2: + # C.g:317:4: '*' pointer + self.match(self.input, 66, self.FOLLOW_66_in_pointer930) + if self.failed: + return + self.following.append(self.FOLLOW_pointer_in_pointer932) + self.pointer() + self.following.pop() + if self.failed: + return + + + elif alt38 == 3: + # C.g:318:4: '*' + self.match(self.input, 66, self.FOLLOW_66_in_pointer937) + if self.failed: + return + + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 25, pointer_StartIndex) + + pass + + return + + # $ANTLR end pointer + + + # $ANTLR start parameter_type_list + # C.g:321:1: parameter_type_list : parameter_list ( ',' ( 'OPTIONAL' )? '...' )? ; + def parameter_type_list(self, ): + + parameter_type_list_StartIndex = self.input.index() + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 26): + return + + # C.g:322:2: ( parameter_list ( ',' ( 'OPTIONAL' )? '...' )? ) + # C.g:322:4: parameter_list ( ',' ( 'OPTIONAL' )? '...' )? + self.following.append(self.FOLLOW_parameter_list_in_parameter_type_list948) + self.parameter_list() + self.following.pop() + if self.failed: + return + # C.g:322:19: ( ',' ( 'OPTIONAL' )? '...' )? + alt40 = 2 + LA40_0 = self.input.LA(1) + + if (LA40_0 == 27) : + alt40 = 1 + if alt40 == 1: + # C.g:322:20: ',' ( 'OPTIONAL' )? '...' + self.match(self.input, 27, self.FOLLOW_27_in_parameter_type_list951) + if self.failed: + return + # C.g:322:24: ( 'OPTIONAL' )? + alt39 = 2 + LA39_0 = self.input.LA(1) + + if (LA39_0 == 53) : + alt39 = 1 + if alt39 == 1: + # C.g:322:25: 'OPTIONAL' + self.match(self.input, 53, self.FOLLOW_53_in_parameter_type_list954) + if self.failed: + return + + + + self.match(self.input, 67, self.FOLLOW_67_in_parameter_type_list958) + if self.failed: + return + + + + + + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 26, parameter_type_list_StartIndex) + + pass + + return + + # $ANTLR end parameter_type_list + + + # $ANTLR start parameter_list + # C.g:325:1: parameter_list : parameter_declaration ( ',' ( 'OPTIONAL' )? parameter_declaration )* ; + def parameter_list(self, ): + + parameter_list_StartIndex = self.input.index() + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 27): + return + + # C.g:326:2: ( parameter_declaration ( ',' ( 'OPTIONAL' )? parameter_declaration )* ) + # C.g:326:4: parameter_declaration ( ',' ( 'OPTIONAL' )? parameter_declaration )* + self.following.append(self.FOLLOW_parameter_declaration_in_parameter_list971) + self.parameter_declaration() + self.following.pop() + if self.failed: + return + # C.g:326:26: ( ',' ( 'OPTIONAL' )? parameter_declaration )* + while True: #loop42 + alt42 = 2 + LA42_0 = self.input.LA(1) + + if (LA42_0 == 27) : + LA42_1 = self.input.LA(2) + + if (LA42_1 == 53) : + LA42_3 = self.input.LA(3) + + if (self.synpred82()) : + alt42 = 1 + + + elif (LA42_1 == IDENTIFIER or (29 <= LA42_1 <= 42) or (45 <= LA42_1 <= 46) or (48 <= LA42_1 <= 52) or (54 <= LA42_1 <= 61) or LA42_1 == 66) : + alt42 = 1 + + + + + if alt42 == 1: + # C.g:326:27: ',' ( 'OPTIONAL' )? parameter_declaration + self.match(self.input, 27, self.FOLLOW_27_in_parameter_list974) + if self.failed: + return + # C.g:326:31: ( 'OPTIONAL' )? + alt41 = 2 + LA41_0 = self.input.LA(1) + + if (LA41_0 == 53) : + LA41_1 = self.input.LA(2) + + if (self.synpred81()) : + alt41 = 1 + if alt41 == 1: + # C.g:326:32: 'OPTIONAL' + self.match(self.input, 53, self.FOLLOW_53_in_parameter_list977) + if self.failed: + return + + + + self.following.append(self.FOLLOW_parameter_declaration_in_parameter_list981) + self.parameter_declaration() + self.following.pop() + if self.failed: + return + + + else: + break #loop42 + + + + + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 27, parameter_list_StartIndex) + + pass + + return + + # $ANTLR end parameter_list + + + # $ANTLR start parameter_declaration + # C.g:329:1: parameter_declaration : ( declaration_specifiers ( declarator | abstract_declarator )* ( 'OPTIONAL' )? | ( pointer )* IDENTIFIER ); + def parameter_declaration(self, ): + + parameter_declaration_StartIndex = self.input.index() + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 28): + return + + # C.g:330:2: ( declaration_specifiers ( declarator | abstract_declarator )* ( 'OPTIONAL' )? | ( pointer )* IDENTIFIER ) + alt46 = 2 + LA46 = self.input.LA(1) + if LA46 == 29 or LA46 == 30 or LA46 == 31 or LA46 == 32 or LA46 == 33 or LA46 == 34 or LA46 == 35 or LA46 == 36 or LA46 == 37 or LA46 == 38 or LA46 == 39 or LA46 == 40 or LA46 == 41 or LA46 == 42 or LA46 == 45 or LA46 == 46 or LA46 == 48 or LA46 == 49 or LA46 == 50 or LA46 == 51 or LA46 == 52 or LA46 == 53 or LA46 == 54 or LA46 == 55 or LA46 == 56 or LA46 == 57 or LA46 == 58 or LA46 == 59 or LA46 == 60 or LA46 == 61: + alt46 = 1 + elif LA46 == IDENTIFIER: + LA46_13 = self.input.LA(2) + + if (self.synpred86()) : + alt46 = 1 + elif (True) : + alt46 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("329:1: parameter_declaration : ( declaration_specifiers ( declarator | abstract_declarator )* ( 'OPTIONAL' )? | ( pointer )* IDENTIFIER );", 46, 13, self.input) + + raise nvae + + elif LA46 == 66: + alt46 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("329:1: parameter_declaration : ( declaration_specifiers ( declarator | abstract_declarator )* ( 'OPTIONAL' )? | ( pointer )* IDENTIFIER );", 46, 0, self.input) + + raise nvae + + if alt46 == 1: + # C.g:330:4: declaration_specifiers ( declarator | abstract_declarator )* ( 'OPTIONAL' )? + self.following.append(self.FOLLOW_declaration_specifiers_in_parameter_declaration994) + self.declaration_specifiers() + self.following.pop() + if self.failed: + return + # C.g:330:27: ( declarator | abstract_declarator )* + while True: #loop43 + alt43 = 3 + LA43 = self.input.LA(1) + if LA43 == 66: + LA43_5 = self.input.LA(2) + + if (self.synpred83()) : + alt43 = 1 + elif (self.synpred84()) : + alt43 = 2 + + + elif LA43 == IDENTIFIER or LA43 == 58 or LA43 == 59 or LA43 == 60: + alt43 = 1 + elif LA43 == 62: + LA43 = self.input.LA(2) + if LA43 == 29 or LA43 == 30 or LA43 == 31 or LA43 == 32 or LA43 == 33 or LA43 == 34 or LA43 == 35 or LA43 == 36 or LA43 == 37 or LA43 == 38 or LA43 == 39 or LA43 == 40 or LA43 == 41 or LA43 == 42 or LA43 == 45 or LA43 == 46 or LA43 == 48 or LA43 == 49 or LA43 == 50 or LA43 == 51 or LA43 == 52 or LA43 == 53 or LA43 == 54 or LA43 == 55 or LA43 == 56 or LA43 == 57 or LA43 == 61 or LA43 == 63 or LA43 == 64: + alt43 = 2 + elif LA43 == IDENTIFIER: + LA43_37 = self.input.LA(3) + + if (self.synpred83()) : + alt43 = 1 + elif (self.synpred84()) : + alt43 = 2 + + + elif LA43 == 58: + LA43_38 = self.input.LA(3) + + if (self.synpred83()) : + alt43 = 1 + elif (self.synpred84()) : + alt43 = 2 + + + elif LA43 == 66: + LA43_39 = self.input.LA(3) + + if (self.synpred83()) : + alt43 = 1 + elif (self.synpred84()) : + alt43 = 2 + + + elif LA43 == 59: + LA43_40 = self.input.LA(3) + + if (self.synpred83()) : + alt43 = 1 + elif (self.synpred84()) : + alt43 = 2 + + + elif LA43 == 60: + LA43_41 = self.input.LA(3) + + if (self.synpred83()) : + alt43 = 1 + elif (self.synpred84()) : + alt43 = 2 + + + elif LA43 == 62: + LA43_43 = self.input.LA(3) + + if (self.synpred83()) : + alt43 = 1 + elif (self.synpred84()) : + alt43 = 2 + + + + elif LA43 == 64: + alt43 = 2 + + if alt43 == 1: + # C.g:330:28: declarator + self.following.append(self.FOLLOW_declarator_in_parameter_declaration997) + self.declarator() + self.following.pop() + if self.failed: + return + + + elif alt43 == 2: + # C.g:330:39: abstract_declarator + self.following.append(self.FOLLOW_abstract_declarator_in_parameter_declaration999) + self.abstract_declarator() + self.following.pop() + if self.failed: + return + + + else: + break #loop43 + + + # C.g:330:61: ( 'OPTIONAL' )? + alt44 = 2 + LA44_0 = self.input.LA(1) + + if (LA44_0 == 53) : + alt44 = 1 + if alt44 == 1: + # C.g:330:62: 'OPTIONAL' + self.match(self.input, 53, self.FOLLOW_53_in_parameter_declaration1004) + if self.failed: + return + + + + + + elif alt46 == 2: + # C.g:332:4: ( pointer )* IDENTIFIER + # C.g:332:4: ( pointer )* + while True: #loop45 + alt45 = 2 + LA45_0 = self.input.LA(1) + + if (LA45_0 == 66) : + alt45 = 1 + + + if alt45 == 1: + # C.g:0:0: pointer + self.following.append(self.FOLLOW_pointer_in_parameter_declaration1013) + self.pointer() + self.following.pop() + if self.failed: + return + + + else: + break #loop45 + + + self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_parameter_declaration1016) + if self.failed: + return + + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 28, parameter_declaration_StartIndex) + + pass + + return + + # $ANTLR end parameter_declaration + + + # $ANTLR start identifier_list + # C.g:335:1: identifier_list : IDENTIFIER ( ',' IDENTIFIER )* ; + def identifier_list(self, ): + + identifier_list_StartIndex = self.input.index() + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 29): + return + + # C.g:336:2: ( IDENTIFIER ( ',' IDENTIFIER )* ) + # C.g:336:4: IDENTIFIER ( ',' IDENTIFIER )* + self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_identifier_list1027) + if self.failed: + return + # C.g:337:2: ( ',' IDENTIFIER )* + while True: #loop47 + alt47 = 2 + LA47_0 = self.input.LA(1) + + if (LA47_0 == 27) : + alt47 = 1 + + + if alt47 == 1: + # C.g:337:3: ',' IDENTIFIER + self.match(self.input, 27, self.FOLLOW_27_in_identifier_list1031) + if self.failed: + return + self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_identifier_list1033) + if self.failed: + return + + + else: + break #loop47 + + + + + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 29, identifier_list_StartIndex) + + pass + + return + + # $ANTLR end identifier_list + + + # $ANTLR start type_name + # C.g:340:1: type_name : ( specifier_qualifier_list ( abstract_declarator )? | type_id ); + def type_name(self, ): + + type_name_StartIndex = self.input.index() + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 30): + return + + # C.g:341:2: ( specifier_qualifier_list ( abstract_declarator )? | type_id ) + alt49 = 2 + LA49_0 = self.input.LA(1) + + if ((34 <= LA49_0 <= 42) or (45 <= LA49_0 <= 46) or (48 <= LA49_0 <= 61)) : + alt49 = 1 + elif (LA49_0 == IDENTIFIER) : + LA49_13 = self.input.LA(2) + + if (self.synpred90()) : + alt49 = 1 + elif (True) : + alt49 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("340:1: type_name : ( specifier_qualifier_list ( abstract_declarator )? | type_id );", 49, 13, self.input) + + raise nvae + + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("340:1: type_name : ( specifier_qualifier_list ( abstract_declarator )? | type_id );", 49, 0, self.input) + + raise nvae + + if alt49 == 1: + # C.g:341:4: specifier_qualifier_list ( abstract_declarator )? + self.following.append(self.FOLLOW_specifier_qualifier_list_in_type_name1046) + self.specifier_qualifier_list() + self.following.pop() + if self.failed: + return + # C.g:341:29: ( abstract_declarator )? + alt48 = 2 + LA48_0 = self.input.LA(1) + + if (LA48_0 == 62 or LA48_0 == 64 or LA48_0 == 66) : + alt48 = 1 + if alt48 == 1: + # C.g:0:0: abstract_declarator + self.following.append(self.FOLLOW_abstract_declarator_in_type_name1048) + self.abstract_declarator() + self.following.pop() + if self.failed: + return + + + + + + elif alt49 == 2: + # C.g:342:4: type_id + self.following.append(self.FOLLOW_type_id_in_type_name1054) + self.type_id() + self.following.pop() + if self.failed: + return + + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 30, type_name_StartIndex) + + pass + + return + + # $ANTLR end type_name + + + # $ANTLR start abstract_declarator + # C.g:345:1: abstract_declarator : ( pointer ( direct_abstract_declarator )? | direct_abstract_declarator ); + def abstract_declarator(self, ): + + abstract_declarator_StartIndex = self.input.index() + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 31): + return + + # C.g:346:2: ( pointer ( direct_abstract_declarator )? | direct_abstract_declarator ) + alt51 = 2 + LA51_0 = self.input.LA(1) + + if (LA51_0 == 66) : + alt51 = 1 + elif (LA51_0 == 62 or LA51_0 == 64) : + alt51 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("345:1: abstract_declarator : ( pointer ( direct_abstract_declarator )? | direct_abstract_declarator );", 51, 0, self.input) + + raise nvae + + if alt51 == 1: + # C.g:346:4: pointer ( direct_abstract_declarator )? + self.following.append(self.FOLLOW_pointer_in_abstract_declarator1065) + self.pointer() + self.following.pop() + if self.failed: + return + # C.g:346:12: ( direct_abstract_declarator )? + alt50 = 2 + LA50_0 = self.input.LA(1) + + if (LA50_0 == 62) : + LA50 = self.input.LA(2) + if LA50 == 63: + LA50_12 = self.input.LA(3) + + if (self.synpred91()) : + alt50 = 1 + elif LA50 == 58: + LA50_13 = self.input.LA(3) + + if (self.synpred91()) : + alt50 = 1 + elif LA50 == 66: + LA50_14 = self.input.LA(3) + + if (self.synpred91()) : + alt50 = 1 + elif LA50 == 59: + LA50_15 = self.input.LA(3) + + if (self.synpred91()) : + alt50 = 1 + elif LA50 == 60: + LA50_16 = self.input.LA(3) + + if (self.synpred91()) : + alt50 = 1 + elif LA50 == IDENTIFIER: + LA50_17 = self.input.LA(3) + + if (self.synpred91()) : + alt50 = 1 + elif LA50 == 62: + LA50_18 = self.input.LA(3) + + if (self.synpred91()) : + alt50 = 1 + elif LA50 == 64: + LA50_19 = self.input.LA(3) + + if (self.synpred91()) : + alt50 = 1 + elif LA50 == 29 or LA50 == 30 or LA50 == 31 or LA50 == 32 or LA50 == 33: + LA50_20 = self.input.LA(3) + + if (self.synpred91()) : + alt50 = 1 + elif LA50 == 34: + LA50_21 = self.input.LA(3) + + if (self.synpred91()) : + alt50 = 1 + elif LA50 == 35: + LA50_22 = self.input.LA(3) + + if (self.synpred91()) : + alt50 = 1 + elif LA50 == 36: + LA50_23 = self.input.LA(3) + + if (self.synpred91()) : + alt50 = 1 + elif LA50 == 37: + LA50_24 = self.input.LA(3) + + if (self.synpred91()) : + alt50 = 1 + elif LA50 == 38: + LA50_25 = self.input.LA(3) + + if (self.synpred91()) : + alt50 = 1 + elif LA50 == 39: + LA50_26 = self.input.LA(3) + + if (self.synpred91()) : + alt50 = 1 + elif LA50 == 40: + LA50_27 = self.input.LA(3) + + if (self.synpred91()) : + alt50 = 1 + elif LA50 == 41: + LA50_28 = self.input.LA(3) + + if (self.synpred91()) : + alt50 = 1 + elif LA50 == 42: + LA50_29 = self.input.LA(3) + + if (self.synpred91()) : + alt50 = 1 + elif LA50 == 45 or LA50 == 46: + LA50_30 = self.input.LA(3) + + if (self.synpred91()) : + alt50 = 1 + elif LA50 == 48: + LA50_31 = self.input.LA(3) + + if (self.synpred91()) : + alt50 = 1 + elif LA50 == 49 or LA50 == 50 or LA50 == 51 or LA50 == 52 or LA50 == 53 or LA50 == 54 or LA50 == 55 or LA50 == 56 or LA50 == 57 or LA50 == 61: + LA50_32 = self.input.LA(3) + + if (self.synpred91()) : + alt50 = 1 + elif (LA50_0 == 64) : + LA50 = self.input.LA(2) + if LA50 == 65: + LA50_33 = self.input.LA(3) + + if (self.synpred91()) : + alt50 = 1 + elif LA50 == 62: + LA50_34 = self.input.LA(3) + + if (self.synpred91()) : + alt50 = 1 + elif LA50 == IDENTIFIER: + LA50_35 = self.input.LA(3) + + if (self.synpred91()) : + alt50 = 1 + elif LA50 == HEX_LITERAL: + LA50_36 = self.input.LA(3) + + if (self.synpred91()) : + alt50 = 1 + elif LA50 == OCTAL_LITERAL: + LA50_37 = self.input.LA(3) + + if (self.synpred91()) : + alt50 = 1 + elif LA50 == DECIMAL_LITERAL: + LA50_38 = self.input.LA(3) + + if (self.synpred91()) : + alt50 = 1 + elif LA50 == CHARACTER_LITERAL: + LA50_39 = self.input.LA(3) + + if (self.synpred91()) : + alt50 = 1 + elif LA50 == STRING_LITERAL: + LA50_40 = self.input.LA(3) + + if (self.synpred91()) : + alt50 = 1 + elif LA50 == FLOATING_POINT_LITERAL: + LA50_41 = self.input.LA(3) + + if (self.synpred91()) : + alt50 = 1 + elif LA50 == 72: + LA50_42 = self.input.LA(3) + + if (self.synpred91()) : + alt50 = 1 + elif LA50 == 73: + LA50_43 = self.input.LA(3) + + if (self.synpred91()) : + alt50 = 1 + elif LA50 == 66 or LA50 == 68 or LA50 == 69 or LA50 == 77 or LA50 == 78 or LA50 == 79: + LA50_44 = self.input.LA(3) + + if (self.synpred91()) : + alt50 = 1 + elif LA50 == 74: + LA50_45 = self.input.LA(3) + + if (self.synpred91()) : + alt50 = 1 + if alt50 == 1: + # C.g:0:0: direct_abstract_declarator + self.following.append(self.FOLLOW_direct_abstract_declarator_in_abstract_declarator1067) + self.direct_abstract_declarator() + self.following.pop() + if self.failed: + return + + + + + + elif alt51 == 2: + # C.g:347:4: direct_abstract_declarator + self.following.append(self.FOLLOW_direct_abstract_declarator_in_abstract_declarator1073) + self.direct_abstract_declarator() + self.following.pop() + if self.failed: + return + + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 31, abstract_declarator_StartIndex) + + pass + + return + + # $ANTLR end abstract_declarator + + + # $ANTLR start direct_abstract_declarator + # C.g:350:1: direct_abstract_declarator : ( '(' abstract_declarator ')' | abstract_declarator_suffix ) ( abstract_declarator_suffix )* ; + def direct_abstract_declarator(self, ): + + direct_abstract_declarator_StartIndex = self.input.index() + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 32): + return + + # C.g:351:2: ( ( '(' abstract_declarator ')' | abstract_declarator_suffix ) ( abstract_declarator_suffix )* ) + # C.g:351:4: ( '(' abstract_declarator ')' | abstract_declarator_suffix ) ( abstract_declarator_suffix )* + # C.g:351:4: ( '(' abstract_declarator ')' | abstract_declarator_suffix ) + alt52 = 2 + LA52_0 = self.input.LA(1) + + if (LA52_0 == 62) : + LA52 = self.input.LA(2) + if LA52 == IDENTIFIER or LA52 == 29 or LA52 == 30 or LA52 == 31 or LA52 == 32 or LA52 == 33 or LA52 == 34 or LA52 == 35 or LA52 == 36 or LA52 == 37 or LA52 == 38 or LA52 == 39 or LA52 == 40 or LA52 == 41 or LA52 == 42 or LA52 == 45 or LA52 == 46 or LA52 == 48 or LA52 == 49 or LA52 == 50 or LA52 == 51 or LA52 == 52 or LA52 == 53 or LA52 == 54 or LA52 == 55 or LA52 == 56 or LA52 == 57 or LA52 == 58 or LA52 == 59 or LA52 == 60 or LA52 == 61 or LA52 == 63: + alt52 = 2 + elif LA52 == 66: + LA52_18 = self.input.LA(3) + + if (self.synpred93()) : + alt52 = 1 + elif (True) : + alt52 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("351:4: ( '(' abstract_declarator ')' | abstract_declarator_suffix )", 52, 18, self.input) + + raise nvae + + elif LA52 == 62 or LA52 == 64: + alt52 = 1 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("351:4: ( '(' abstract_declarator ')' | abstract_declarator_suffix )", 52, 1, self.input) + + raise nvae + + elif (LA52_0 == 64) : + alt52 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("351:4: ( '(' abstract_declarator ')' | abstract_declarator_suffix )", 52, 0, self.input) + + raise nvae + + if alt52 == 1: + # C.g:351:6: '(' abstract_declarator ')' + self.match(self.input, 62, self.FOLLOW_62_in_direct_abstract_declarator1086) + if self.failed: + return + self.following.append(self.FOLLOW_abstract_declarator_in_direct_abstract_declarator1088) + self.abstract_declarator() + self.following.pop() + if self.failed: + return + self.match(self.input, 63, self.FOLLOW_63_in_direct_abstract_declarator1090) + if self.failed: + return + + + elif alt52 == 2: + # C.g:351:36: abstract_declarator_suffix + self.following.append(self.FOLLOW_abstract_declarator_suffix_in_direct_abstract_declarator1094) + self.abstract_declarator_suffix() + self.following.pop() + if self.failed: + return + + + + # C.g:351:65: ( abstract_declarator_suffix )* + while True: #loop53 + alt53 = 2 + LA53_0 = self.input.LA(1) + + if (LA53_0 == 62) : + LA53 = self.input.LA(2) + if LA53 == 63: + LA53_12 = self.input.LA(3) + + if (self.synpred94()) : + alt53 = 1 + + + elif LA53 == 58: + LA53_13 = self.input.LA(3) + + if (self.synpred94()) : + alt53 = 1 + + + elif LA53 == 66: + LA53_14 = self.input.LA(3) + + if (self.synpred94()) : + alt53 = 1 + + + elif LA53 == 59: + LA53_15 = self.input.LA(3) + + if (self.synpred94()) : + alt53 = 1 + + + elif LA53 == 60: + LA53_16 = self.input.LA(3) + + if (self.synpred94()) : + alt53 = 1 + + + elif LA53 == IDENTIFIER: + LA53_17 = self.input.LA(3) + + if (self.synpred94()) : + alt53 = 1 + + + elif LA53 == 29 or LA53 == 30 or LA53 == 31 or LA53 == 32 or LA53 == 33: + LA53_19 = self.input.LA(3) + + if (self.synpred94()) : + alt53 = 1 + + + elif LA53 == 34: + LA53_20 = self.input.LA(3) + + if (self.synpred94()) : + alt53 = 1 + + + elif LA53 == 35: + LA53_21 = self.input.LA(3) + + if (self.synpred94()) : + alt53 = 1 + + + elif LA53 == 36: + LA53_22 = self.input.LA(3) + + if (self.synpred94()) : + alt53 = 1 + + + elif LA53 == 37: + LA53_23 = self.input.LA(3) + + if (self.synpred94()) : + alt53 = 1 + + + elif LA53 == 38: + LA53_24 = self.input.LA(3) + + if (self.synpred94()) : + alt53 = 1 + + + elif LA53 == 39: + LA53_25 = self.input.LA(3) + + if (self.synpred94()) : + alt53 = 1 + + + elif LA53 == 40: + LA53_26 = self.input.LA(3) + + if (self.synpred94()) : + alt53 = 1 + + + elif LA53 == 41: + LA53_27 = self.input.LA(3) + + if (self.synpred94()) : + alt53 = 1 + + + elif LA53 == 42: + LA53_28 = self.input.LA(3) + + if (self.synpred94()) : + alt53 = 1 + + + elif LA53 == 45 or LA53 == 46: + LA53_29 = self.input.LA(3) + + if (self.synpred94()) : + alt53 = 1 + + + elif LA53 == 48: + LA53_30 = self.input.LA(3) + + if (self.synpred94()) : + alt53 = 1 + + + elif LA53 == 49 or LA53 == 50 or LA53 == 51 or LA53 == 52 or LA53 == 53 or LA53 == 54 or LA53 == 55 or LA53 == 56 or LA53 == 57 or LA53 == 61: + LA53_31 = self.input.LA(3) + + if (self.synpred94()) : + alt53 = 1 + + + + elif (LA53_0 == 64) : + LA53 = self.input.LA(2) + if LA53 == 65: + LA53_33 = self.input.LA(3) + + if (self.synpred94()) : + alt53 = 1 + + + elif LA53 == 62: + LA53_34 = self.input.LA(3) + + if (self.synpred94()) : + alt53 = 1 + + + elif LA53 == IDENTIFIER: + LA53_35 = self.input.LA(3) + + if (self.synpred94()) : + alt53 = 1 + + + elif LA53 == HEX_LITERAL: + LA53_36 = self.input.LA(3) + + if (self.synpred94()) : + alt53 = 1 + + + elif LA53 == OCTAL_LITERAL: + LA53_37 = self.input.LA(3) + + if (self.synpred94()) : + alt53 = 1 + + + elif LA53 == DECIMAL_LITERAL: + LA53_38 = self.input.LA(3) + + if (self.synpred94()) : + alt53 = 1 + + + elif LA53 == CHARACTER_LITERAL: + LA53_39 = self.input.LA(3) + + if (self.synpred94()) : + alt53 = 1 + + + elif LA53 == STRING_LITERAL: + LA53_40 = self.input.LA(3) + + if (self.synpred94()) : + alt53 = 1 + + + elif LA53 == FLOATING_POINT_LITERAL: + LA53_41 = self.input.LA(3) + + if (self.synpred94()) : + alt53 = 1 + + + elif LA53 == 72: + LA53_42 = self.input.LA(3) + + if (self.synpred94()) : + alt53 = 1 + + + elif LA53 == 73: + LA53_43 = self.input.LA(3) + + if (self.synpred94()) : + alt53 = 1 + + + elif LA53 == 66 or LA53 == 68 or LA53 == 69 or LA53 == 77 or LA53 == 78 or LA53 == 79: + LA53_44 = self.input.LA(3) + + if (self.synpred94()) : + alt53 = 1 + + + elif LA53 == 74: + LA53_45 = self.input.LA(3) + + if (self.synpred94()) : + alt53 = 1 + + + + + + if alt53 == 1: + # C.g:0:0: abstract_declarator_suffix + self.following.append(self.FOLLOW_abstract_declarator_suffix_in_direct_abstract_declarator1098) + self.abstract_declarator_suffix() + self.following.pop() + if self.failed: + return + + + else: + break #loop53 + + + + + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 32, direct_abstract_declarator_StartIndex) + + pass + + return + + # $ANTLR end direct_abstract_declarator + + + # $ANTLR start abstract_declarator_suffix + # C.g:354:1: abstract_declarator_suffix : ( '[' ']' | '[' constant_expression ']' | '(' ')' | '(' parameter_type_list ')' ); + def abstract_declarator_suffix(self, ): + + abstract_declarator_suffix_StartIndex = self.input.index() + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 33): + return + + # C.g:355:2: ( '[' ']' | '[' constant_expression ']' | '(' ')' | '(' parameter_type_list ')' ) + alt54 = 4 + LA54_0 = self.input.LA(1) + + if (LA54_0 == 64) : + LA54_1 = self.input.LA(2) + + if (LA54_1 == 65) : + alt54 = 1 + elif ((IDENTIFIER <= LA54_1 <= FLOATING_POINT_LITERAL) or LA54_1 == 62 or LA54_1 == 66 or (68 <= LA54_1 <= 69) or (72 <= LA54_1 <= 74) or (77 <= LA54_1 <= 79)) : + alt54 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("354:1: abstract_declarator_suffix : ( '[' ']' | '[' constant_expression ']' | '(' ')' | '(' parameter_type_list ')' );", 54, 1, self.input) + + raise nvae + + elif (LA54_0 == 62) : + LA54_2 = self.input.LA(2) + + if (LA54_2 == 63) : + alt54 = 3 + elif (LA54_2 == IDENTIFIER or (29 <= LA54_2 <= 42) or (45 <= LA54_2 <= 46) or (48 <= LA54_2 <= 61) or LA54_2 == 66) : + alt54 = 4 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("354:1: abstract_declarator_suffix : ( '[' ']' | '[' constant_expression ']' | '(' ')' | '(' parameter_type_list ')' );", 54, 2, self.input) + + raise nvae + + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("354:1: abstract_declarator_suffix : ( '[' ']' | '[' constant_expression ']' | '(' ')' | '(' parameter_type_list ')' );", 54, 0, self.input) + + raise nvae + + if alt54 == 1: + # C.g:355:4: '[' ']' + self.match(self.input, 64, self.FOLLOW_64_in_abstract_declarator_suffix1110) + if self.failed: + return + self.match(self.input, 65, self.FOLLOW_65_in_abstract_declarator_suffix1112) + if self.failed: + return + + + elif alt54 == 2: + # C.g:356:4: '[' constant_expression ']' + self.match(self.input, 64, self.FOLLOW_64_in_abstract_declarator_suffix1117) + if self.failed: + return + self.following.append(self.FOLLOW_constant_expression_in_abstract_declarator_suffix1119) + self.constant_expression() + self.following.pop() + if self.failed: + return + self.match(self.input, 65, self.FOLLOW_65_in_abstract_declarator_suffix1121) + if self.failed: + return + + + elif alt54 == 3: + # C.g:357:4: '(' ')' + self.match(self.input, 62, self.FOLLOW_62_in_abstract_declarator_suffix1126) + if self.failed: + return + self.match(self.input, 63, self.FOLLOW_63_in_abstract_declarator_suffix1128) + if self.failed: + return + + + elif alt54 == 4: + # C.g:358:4: '(' parameter_type_list ')' + self.match(self.input, 62, self.FOLLOW_62_in_abstract_declarator_suffix1133) + if self.failed: + return + self.following.append(self.FOLLOW_parameter_type_list_in_abstract_declarator_suffix1135) + self.parameter_type_list() + self.following.pop() + if self.failed: + return + self.match(self.input, 63, self.FOLLOW_63_in_abstract_declarator_suffix1137) + if self.failed: + return + + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 33, abstract_declarator_suffix_StartIndex) + + pass + + return + + # $ANTLR end abstract_declarator_suffix + + + # $ANTLR start initializer + # C.g:361:1: initializer : ( assignment_expression | '{' initializer_list ( ',' )? '}' ); + def initializer(self, ): + + initializer_StartIndex = self.input.index() + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 34): + return + + # C.g:363:2: ( assignment_expression | '{' initializer_list ( ',' )? '}' ) + alt56 = 2 + LA56_0 = self.input.LA(1) + + if ((IDENTIFIER <= LA56_0 <= FLOATING_POINT_LITERAL) or LA56_0 == 62 or LA56_0 == 66 or (68 <= LA56_0 <= 69) or (72 <= LA56_0 <= 74) or (77 <= LA56_0 <= 79)) : + alt56 = 1 + elif (LA56_0 == 43) : + alt56 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("361:1: initializer : ( assignment_expression | '{' initializer_list ( ',' )? '}' );", 56, 0, self.input) + + raise nvae + + if alt56 == 1: + # C.g:363:4: assignment_expression + self.following.append(self.FOLLOW_assignment_expression_in_initializer1150) + self.assignment_expression() + self.following.pop() + if self.failed: + return + + + elif alt56 == 2: + # C.g:364:4: '{' initializer_list ( ',' )? '}' + self.match(self.input, 43, self.FOLLOW_43_in_initializer1155) + if self.failed: + return + self.following.append(self.FOLLOW_initializer_list_in_initializer1157) + self.initializer_list() + self.following.pop() + if self.failed: + return + # C.g:364:25: ( ',' )? + alt55 = 2 + LA55_0 = self.input.LA(1) + + if (LA55_0 == 27) : + alt55 = 1 + if alt55 == 1: + # C.g:0:0: ',' + self.match(self.input, 27, self.FOLLOW_27_in_initializer1159) + if self.failed: + return + + + + self.match(self.input, 44, self.FOLLOW_44_in_initializer1162) + if self.failed: + return + + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 34, initializer_StartIndex) + + pass + + return + + # $ANTLR end initializer + + + # $ANTLR start initializer_list + # C.g:367:1: initializer_list : initializer ( ',' initializer )* ; + def initializer_list(self, ): + + initializer_list_StartIndex = self.input.index() + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 35): + return + + # C.g:368:2: ( initializer ( ',' initializer )* ) + # C.g:368:4: initializer ( ',' initializer )* + self.following.append(self.FOLLOW_initializer_in_initializer_list1173) + self.initializer() + self.following.pop() + if self.failed: + return + # C.g:368:16: ( ',' initializer )* + while True: #loop57 + alt57 = 2 + LA57_0 = self.input.LA(1) + + if (LA57_0 == 27) : + LA57_1 = self.input.LA(2) + + if ((IDENTIFIER <= LA57_1 <= FLOATING_POINT_LITERAL) or LA57_1 == 43 or LA57_1 == 62 or LA57_1 == 66 or (68 <= LA57_1 <= 69) or (72 <= LA57_1 <= 74) or (77 <= LA57_1 <= 79)) : + alt57 = 1 + + + + + if alt57 == 1: + # C.g:368:17: ',' initializer + self.match(self.input, 27, self.FOLLOW_27_in_initializer_list1176) + if self.failed: + return + self.following.append(self.FOLLOW_initializer_in_initializer_list1178) + self.initializer() + self.following.pop() + if self.failed: + return + + + else: + break #loop57 + + + + + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 35, initializer_list_StartIndex) + + pass + + return + + # $ANTLR end initializer_list + + class argument_expression_list_return(object): + def __init__(self): + self.start = None + self.stop = None + + + + # $ANTLR start argument_expression_list + # C.g:373:1: argument_expression_list : assignment_expression ( 'OPTIONAL' )? ( ',' assignment_expression ( 'OPTIONAL' )? )* ; + def argument_expression_list(self, ): + + retval = self.argument_expression_list_return() + retval.start = self.input.LT(1) + argument_expression_list_StartIndex = self.input.index() + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 36): + return retval + + # C.g:374:2: ( assignment_expression ( 'OPTIONAL' )? ( ',' assignment_expression ( 'OPTIONAL' )? )* ) + # C.g:374:6: assignment_expression ( 'OPTIONAL' )? ( ',' assignment_expression ( 'OPTIONAL' )? )* + self.following.append(self.FOLLOW_assignment_expression_in_argument_expression_list1196) + self.assignment_expression() + self.following.pop() + if self.failed: + return retval + # C.g:374:28: ( 'OPTIONAL' )? + alt58 = 2 + LA58_0 = self.input.LA(1) + + if (LA58_0 == 53) : + alt58 = 1 + if alt58 == 1: + # C.g:374:29: 'OPTIONAL' + self.match(self.input, 53, self.FOLLOW_53_in_argument_expression_list1199) + if self.failed: + return retval + + + + # C.g:374:42: ( ',' assignment_expression ( 'OPTIONAL' )? )* + while True: #loop60 + alt60 = 2 + LA60_0 = self.input.LA(1) + + if (LA60_0 == 27) : + alt60 = 1 + + + if alt60 == 1: + # C.g:374:43: ',' assignment_expression ( 'OPTIONAL' )? + self.match(self.input, 27, self.FOLLOW_27_in_argument_expression_list1204) + if self.failed: + return retval + self.following.append(self.FOLLOW_assignment_expression_in_argument_expression_list1206) + self.assignment_expression() + self.following.pop() + if self.failed: + return retval + # C.g:374:69: ( 'OPTIONAL' )? + alt59 = 2 + LA59_0 = self.input.LA(1) + + if (LA59_0 == 53) : + alt59 = 1 + if alt59 == 1: + # C.g:374:70: 'OPTIONAL' + self.match(self.input, 53, self.FOLLOW_53_in_argument_expression_list1209) + if self.failed: + return retval + + + + + + else: + break #loop60 + + + + + + retval.stop = self.input.LT(-1) + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 36, argument_expression_list_StartIndex) + + pass + + return retval + + # $ANTLR end argument_expression_list + + + # $ANTLR start additive_expression + # C.g:377:1: additive_expression : ( multiplicative_expression ) ( '+' multiplicative_expression | '-' multiplicative_expression )* ; + def additive_expression(self, ): + + additive_expression_StartIndex = self.input.index() + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 37): + return + + # C.g:378:2: ( ( multiplicative_expression ) ( '+' multiplicative_expression | '-' multiplicative_expression )* ) + # C.g:378:4: ( multiplicative_expression ) ( '+' multiplicative_expression | '-' multiplicative_expression )* + # C.g:378:4: ( multiplicative_expression ) + # C.g:378:5: multiplicative_expression + self.following.append(self.FOLLOW_multiplicative_expression_in_additive_expression1225) + self.multiplicative_expression() + self.following.pop() + if self.failed: + return + + + + # C.g:378:32: ( '+' multiplicative_expression | '-' multiplicative_expression )* + while True: #loop61 + alt61 = 3 + LA61_0 = self.input.LA(1) + + if (LA61_0 == 68) : + alt61 = 1 + elif (LA61_0 == 69) : + alt61 = 2 + + + if alt61 == 1: + # C.g:378:33: '+' multiplicative_expression + self.match(self.input, 68, self.FOLLOW_68_in_additive_expression1229) + if self.failed: + return + self.following.append(self.FOLLOW_multiplicative_expression_in_additive_expression1231) + self.multiplicative_expression() + self.following.pop() + if self.failed: + return + + + elif alt61 == 2: + # C.g:378:65: '-' multiplicative_expression + self.match(self.input, 69, self.FOLLOW_69_in_additive_expression1235) + if self.failed: + return + self.following.append(self.FOLLOW_multiplicative_expression_in_additive_expression1237) + self.multiplicative_expression() + self.following.pop() + if self.failed: + return + + + else: + break #loop61 + + + + + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 37, additive_expression_StartIndex) + + pass + + return + + # $ANTLR end additive_expression + + + # $ANTLR start multiplicative_expression + # C.g:381:1: multiplicative_expression : ( cast_expression ) ( '*' cast_expression | '/' cast_expression | '%' cast_expression )* ; + def multiplicative_expression(self, ): + + multiplicative_expression_StartIndex = self.input.index() + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 38): + return + + # C.g:382:2: ( ( cast_expression ) ( '*' cast_expression | '/' cast_expression | '%' cast_expression )* ) + # C.g:382:4: ( cast_expression ) ( '*' cast_expression | '/' cast_expression | '%' cast_expression )* + # C.g:382:4: ( cast_expression ) + # C.g:382:5: cast_expression + self.following.append(self.FOLLOW_cast_expression_in_multiplicative_expression1251) + self.cast_expression() + self.following.pop() + if self.failed: + return + + + + # C.g:382:22: ( '*' cast_expression | '/' cast_expression | '%' cast_expression )* + while True: #loop62 + alt62 = 4 + LA62 = self.input.LA(1) + if LA62 == 66: + alt62 = 1 + elif LA62 == 70: + alt62 = 2 + elif LA62 == 71: + alt62 = 3 + + if alt62 == 1: + # C.g:382:23: '*' cast_expression + self.match(self.input, 66, self.FOLLOW_66_in_multiplicative_expression1255) + if self.failed: + return + self.following.append(self.FOLLOW_cast_expression_in_multiplicative_expression1257) + self.cast_expression() + self.following.pop() + if self.failed: + return + + + elif alt62 == 2: + # C.g:382:45: '/' cast_expression + self.match(self.input, 70, self.FOLLOW_70_in_multiplicative_expression1261) + if self.failed: + return + self.following.append(self.FOLLOW_cast_expression_in_multiplicative_expression1263) + self.cast_expression() + self.following.pop() + if self.failed: + return + + + elif alt62 == 3: + # C.g:382:67: '%' cast_expression + self.match(self.input, 71, self.FOLLOW_71_in_multiplicative_expression1267) + if self.failed: + return + self.following.append(self.FOLLOW_cast_expression_in_multiplicative_expression1269) + self.cast_expression() + self.following.pop() + if self.failed: + return + + + else: + break #loop62 + + + + + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 38, multiplicative_expression_StartIndex) + + pass + + return + + # $ANTLR end multiplicative_expression + + + # $ANTLR start cast_expression + # C.g:385:1: cast_expression : ( '(' type_name ')' cast_expression | unary_expression ); + def cast_expression(self, ): + + cast_expression_StartIndex = self.input.index() + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 39): + return + + # C.g:386:2: ( '(' type_name ')' cast_expression | unary_expression ) + alt63 = 2 + LA63_0 = self.input.LA(1) + + if (LA63_0 == 62) : + LA63 = self.input.LA(2) + if LA63 == 34 or LA63 == 35 or LA63 == 36 or LA63 == 37 or LA63 == 38 or LA63 == 39 or LA63 == 40 or LA63 == 41 or LA63 == 42 or LA63 == 45 or LA63 == 46 or LA63 == 48 or LA63 == 49 or LA63 == 50 or LA63 == 51 or LA63 == 52 or LA63 == 53 or LA63 == 54 or LA63 == 55 or LA63 == 56 or LA63 == 57 or LA63 == 58 or LA63 == 59 or LA63 == 60 or LA63 == 61: + alt63 = 1 + elif LA63 == IDENTIFIER: + LA63_25 = self.input.LA(3) + + if (self.synpred109()) : + alt63 = 1 + elif (True) : + alt63 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("385:1: cast_expression : ( '(' type_name ')' cast_expression | unary_expression );", 63, 25, self.input) + + raise nvae + + elif LA63 == HEX_LITERAL or LA63 == OCTAL_LITERAL or LA63 == DECIMAL_LITERAL or LA63 == CHARACTER_LITERAL or LA63 == STRING_LITERAL or LA63 == FLOATING_POINT_LITERAL or LA63 == 62 or LA63 == 66 or LA63 == 68 or LA63 == 69 or LA63 == 72 or LA63 == 73 or LA63 == 74 or LA63 == 77 or LA63 == 78 or LA63 == 79: + alt63 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("385:1: cast_expression : ( '(' type_name ')' cast_expression | unary_expression );", 63, 1, self.input) + + raise nvae + + elif ((IDENTIFIER <= LA63_0 <= FLOATING_POINT_LITERAL) or LA63_0 == 66 or (68 <= LA63_0 <= 69) or (72 <= LA63_0 <= 74) or (77 <= LA63_0 <= 79)) : + alt63 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("385:1: cast_expression : ( '(' type_name ')' cast_expression | unary_expression );", 63, 0, self.input) + + raise nvae + + if alt63 == 1: + # C.g:386:4: '(' type_name ')' cast_expression + self.match(self.input, 62, self.FOLLOW_62_in_cast_expression1282) + if self.failed: + return + self.following.append(self.FOLLOW_type_name_in_cast_expression1284) + self.type_name() + self.following.pop() + if self.failed: + return + self.match(self.input, 63, self.FOLLOW_63_in_cast_expression1286) + if self.failed: + return + self.following.append(self.FOLLOW_cast_expression_in_cast_expression1288) + self.cast_expression() + self.following.pop() + if self.failed: + return + + + elif alt63 == 2: + # C.g:387:4: unary_expression + self.following.append(self.FOLLOW_unary_expression_in_cast_expression1293) + self.unary_expression() + self.following.pop() + if self.failed: + return + + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 39, cast_expression_StartIndex) + + pass + + return + + # $ANTLR end cast_expression + + + # $ANTLR start unary_expression + # C.g:390:1: unary_expression : ( postfix_expression | '++' unary_expression | '--' unary_expression | unary_operator cast_expression | 'sizeof' unary_expression | 'sizeof' '(' type_name ')' ); + def unary_expression(self, ): + + unary_expression_StartIndex = self.input.index() + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 40): + return + + # C.g:391:2: ( postfix_expression | '++' unary_expression | '--' unary_expression | unary_operator cast_expression | 'sizeof' unary_expression | 'sizeof' '(' type_name ')' ) + alt64 = 6 + LA64 = self.input.LA(1) + if LA64 == IDENTIFIER or LA64 == HEX_LITERAL or LA64 == OCTAL_LITERAL or LA64 == DECIMAL_LITERAL or LA64 == CHARACTER_LITERAL or LA64 == STRING_LITERAL or LA64 == FLOATING_POINT_LITERAL or LA64 == 62: + alt64 = 1 + elif LA64 == 72: + alt64 = 2 + elif LA64 == 73: + alt64 = 3 + elif LA64 == 66 or LA64 == 68 or LA64 == 69 or LA64 == 77 or LA64 == 78 or LA64 == 79: + alt64 = 4 + elif LA64 == 74: + LA64_12 = self.input.LA(2) + + if (LA64_12 == 62) : + LA64_13 = self.input.LA(3) + + if (self.synpred114()) : + alt64 = 5 + elif (True) : + alt64 = 6 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("390:1: unary_expression : ( postfix_expression | '++' unary_expression | '--' unary_expression | unary_operator cast_expression | 'sizeof' unary_expression | 'sizeof' '(' type_name ')' );", 64, 13, self.input) + + raise nvae + + elif ((IDENTIFIER <= LA64_12 <= FLOATING_POINT_LITERAL) or LA64_12 == 66 or (68 <= LA64_12 <= 69) or (72 <= LA64_12 <= 74) or (77 <= LA64_12 <= 79)) : + alt64 = 5 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("390:1: unary_expression : ( postfix_expression | '++' unary_expression | '--' unary_expression | unary_operator cast_expression | 'sizeof' unary_expression | 'sizeof' '(' type_name ')' );", 64, 12, self.input) + + raise nvae + + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("390:1: unary_expression : ( postfix_expression | '++' unary_expression | '--' unary_expression | unary_operator cast_expression | 'sizeof' unary_expression | 'sizeof' '(' type_name ')' );", 64, 0, self.input) + + raise nvae + + if alt64 == 1: + # C.g:391:4: postfix_expression + self.following.append(self.FOLLOW_postfix_expression_in_unary_expression1304) + self.postfix_expression() + self.following.pop() + if self.failed: + return + + + elif alt64 == 2: + # C.g:392:4: '++' unary_expression + self.match(self.input, 72, self.FOLLOW_72_in_unary_expression1309) + if self.failed: + return + self.following.append(self.FOLLOW_unary_expression_in_unary_expression1311) + self.unary_expression() + self.following.pop() + if self.failed: + return + + + elif alt64 == 3: + # C.g:393:4: '--' unary_expression + self.match(self.input, 73, self.FOLLOW_73_in_unary_expression1316) + if self.failed: + return + self.following.append(self.FOLLOW_unary_expression_in_unary_expression1318) + self.unary_expression() + self.following.pop() + if self.failed: + return + + + elif alt64 == 4: + # C.g:394:4: unary_operator cast_expression + self.following.append(self.FOLLOW_unary_operator_in_unary_expression1323) + self.unary_operator() + self.following.pop() + if self.failed: + return + self.following.append(self.FOLLOW_cast_expression_in_unary_expression1325) + self.cast_expression() + self.following.pop() + if self.failed: + return + + + elif alt64 == 5: + # C.g:395:4: 'sizeof' unary_expression + self.match(self.input, 74, self.FOLLOW_74_in_unary_expression1330) + if self.failed: + return + self.following.append(self.FOLLOW_unary_expression_in_unary_expression1332) + self.unary_expression() + self.following.pop() + if self.failed: + return + + + elif alt64 == 6: + # C.g:396:4: 'sizeof' '(' type_name ')' + self.match(self.input, 74, self.FOLLOW_74_in_unary_expression1337) + if self.failed: + return + self.match(self.input, 62, self.FOLLOW_62_in_unary_expression1339) + if self.failed: + return + self.following.append(self.FOLLOW_type_name_in_unary_expression1341) + self.type_name() + self.following.pop() + if self.failed: + return + self.match(self.input, 63, self.FOLLOW_63_in_unary_expression1343) + if self.failed: + return + + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 40, unary_expression_StartIndex) + + pass + + return + + # $ANTLR end unary_expression + + + # $ANTLR start postfix_expression + # C.g:399:1: postfix_expression : p= primary_expression ( '[' expression ']' | '(' a= ')' | '(' c= argument_expression_list b= ')' | '(' macro_parameter_list ')' | '.' x= IDENTIFIER | '*' y= IDENTIFIER | '->' z= IDENTIFIER | '++' | '--' )* ; + def postfix_expression(self, ): + self.postfix_expression_stack.append(postfix_expression_scope()) + postfix_expression_StartIndex = self.input.index() + a = None + b = None + x = None + y = None + z = None + p = None + + c = None + + + + self.postfix_expression_stack[-1].FuncCallText = '' + + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 41): + return + + # C.g:406:2: (p= primary_expression ( '[' expression ']' | '(' a= ')' | '(' c= argument_expression_list b= ')' | '(' macro_parameter_list ')' | '.' x= IDENTIFIER | '*' y= IDENTIFIER | '->' z= IDENTIFIER | '++' | '--' )* ) + # C.g:406:6: p= primary_expression ( '[' expression ']' | '(' a= ')' | '(' c= argument_expression_list b= ')' | '(' macro_parameter_list ')' | '.' x= IDENTIFIER | '*' y= IDENTIFIER | '->' z= IDENTIFIER | '++' | '--' )* + self.following.append(self.FOLLOW_primary_expression_in_postfix_expression1367) + p = self.primary_expression() + self.following.pop() + if self.failed: + return + if self.backtracking == 0: + self.postfix_expression_stack[-1].FuncCallText += self.input.toString(p.start,p.stop) + + # C.g:407:9: ( '[' expression ']' | '(' a= ')' | '(' c= argument_expression_list b= ')' | '(' macro_parameter_list ')' | '.' x= IDENTIFIER | '*' y= IDENTIFIER | '->' z= IDENTIFIER | '++' | '--' )* + while True: #loop65 + alt65 = 10 + LA65 = self.input.LA(1) + if LA65 == 66: + LA65_1 = self.input.LA(2) + + if (LA65_1 == IDENTIFIER) : + LA65_30 = self.input.LA(3) + + if (self.synpred120()) : + alt65 = 6 + + + + + elif LA65 == 64: + alt65 = 1 + elif LA65 == 62: + LA65 = self.input.LA(2) + if LA65 == 63: + alt65 = 2 + elif LA65 == 29 or LA65 == 30 or LA65 == 31 or LA65 == 32 or LA65 == 33 or LA65 == 34 or LA65 == 35 or LA65 == 36 or LA65 == 37 or LA65 == 38 or LA65 == 39 or LA65 == 40 or LA65 == 41 or LA65 == 42 or LA65 == 45 or LA65 == 46 or LA65 == 48 or LA65 == 49 or LA65 == 50 or LA65 == 51 or LA65 == 52 or LA65 == 53 or LA65 == 54 or LA65 == 55 or LA65 == 56 or LA65 == 57 or LA65 == 58 or LA65 == 59 or LA65 == 60 or LA65 == 61: + alt65 = 4 + elif LA65 == IDENTIFIER: + LA65_55 = self.input.LA(3) + + if (self.synpred117()) : + alt65 = 3 + elif (self.synpred118()) : + alt65 = 4 + + + elif LA65 == 66: + LA65_57 = self.input.LA(3) + + if (self.synpred117()) : + alt65 = 3 + elif (self.synpred118()) : + alt65 = 4 + + + elif LA65 == HEX_LITERAL or LA65 == OCTAL_LITERAL or LA65 == DECIMAL_LITERAL or LA65 == CHARACTER_LITERAL or LA65 == STRING_LITERAL or LA65 == FLOATING_POINT_LITERAL or LA65 == 62 or LA65 == 68 or LA65 == 69 or LA65 == 72 or LA65 == 73 or LA65 == 74 or LA65 == 77 or LA65 == 78 or LA65 == 79: + alt65 = 3 + + elif LA65 == 75: + alt65 = 5 + elif LA65 == 76: + alt65 = 7 + elif LA65 == 72: + alt65 = 8 + elif LA65 == 73: + alt65 = 9 + + if alt65 == 1: + # C.g:407:13: '[' expression ']' + self.match(self.input, 64, self.FOLLOW_64_in_postfix_expression1383) + if self.failed: + return + self.following.append(self.FOLLOW_expression_in_postfix_expression1385) + self.expression() + self.following.pop() + if self.failed: + return + self.match(self.input, 65, self.FOLLOW_65_in_postfix_expression1387) + if self.failed: + return + + + elif alt65 == 2: + # C.g:408:13: '(' a= ')' + self.match(self.input, 62, self.FOLLOW_62_in_postfix_expression1401) + if self.failed: + return + a = self.input.LT(1) + self.match(self.input, 63, self.FOLLOW_63_in_postfix_expression1405) + if self.failed: + return + if self.backtracking == 0: + self.StoreFunctionCalling(p.start.line, p.start.charPositionInLine, a.line, a.charPositionInLine, self.postfix_expression_stack[-1].FuncCallText, '') + + + + elif alt65 == 3: + # C.g:409:13: '(' c= argument_expression_list b= ')' + self.match(self.input, 62, self.FOLLOW_62_in_postfix_expression1420) + if self.failed: + return + self.following.append(self.FOLLOW_argument_expression_list_in_postfix_expression1424) + c = self.argument_expression_list() + self.following.pop() + if self.failed: + return + b = self.input.LT(1) + self.match(self.input, 63, self.FOLLOW_63_in_postfix_expression1428) + if self.failed: + return + if self.backtracking == 0: + self.StoreFunctionCalling(p.start.line, p.start.charPositionInLine, b.line, b.charPositionInLine, self.postfix_expression_stack[-1].FuncCallText, self.input.toString(c.start,c.stop)) + + + + elif alt65 == 4: + # C.g:410:13: '(' macro_parameter_list ')' + self.match(self.input, 62, self.FOLLOW_62_in_postfix_expression1444) + if self.failed: + return + self.following.append(self.FOLLOW_macro_parameter_list_in_postfix_expression1446) + self.macro_parameter_list() + self.following.pop() + if self.failed: + return + self.match(self.input, 63, self.FOLLOW_63_in_postfix_expression1448) + if self.failed: + return + + + elif alt65 == 5: + # C.g:411:13: '.' x= IDENTIFIER + self.match(self.input, 75, self.FOLLOW_75_in_postfix_expression1462) + if self.failed: + return + x = self.input.LT(1) + self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_postfix_expression1466) + if self.failed: + return + if self.backtracking == 0: + self.postfix_expression_stack[-1].FuncCallText += '.' + x.text + + + + elif alt65 == 6: + # C.g:412:13: '*' y= IDENTIFIER + self.match(self.input, 66, self.FOLLOW_66_in_postfix_expression1482) + if self.failed: + return + y = self.input.LT(1) + self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_postfix_expression1486) + if self.failed: + return + if self.backtracking == 0: + self.postfix_expression_stack[-1].FuncCallText = y.text + + + + elif alt65 == 7: + # C.g:413:13: '->' z= IDENTIFIER + self.match(self.input, 76, self.FOLLOW_76_in_postfix_expression1502) + if self.failed: + return + z = self.input.LT(1) + self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_postfix_expression1506) + if self.failed: + return + if self.backtracking == 0: + self.postfix_expression_stack[-1].FuncCallText += '->' + z.text + + + + elif alt65 == 8: + # C.g:414:13: '++' + self.match(self.input, 72, self.FOLLOW_72_in_postfix_expression1522) + if self.failed: + return + + + elif alt65 == 9: + # C.g:415:13: '--' + self.match(self.input, 73, self.FOLLOW_73_in_postfix_expression1536) + if self.failed: + return + + + else: + break #loop65 + + + + + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 41, postfix_expression_StartIndex) + + self.postfix_expression_stack.pop() + pass + + return + + # $ANTLR end postfix_expression + + + # $ANTLR start macro_parameter_list + # C.g:419:1: macro_parameter_list : parameter_declaration ( ',' parameter_declaration )* ; + def macro_parameter_list(self, ): + + macro_parameter_list_StartIndex = self.input.index() + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 42): + return + + # C.g:420:2: ( parameter_declaration ( ',' parameter_declaration )* ) + # C.g:420:4: parameter_declaration ( ',' parameter_declaration )* + self.following.append(self.FOLLOW_parameter_declaration_in_macro_parameter_list1559) + self.parameter_declaration() + self.following.pop() + if self.failed: + return + # C.g:420:26: ( ',' parameter_declaration )* + while True: #loop66 + alt66 = 2 + LA66_0 = self.input.LA(1) + + if (LA66_0 == 27) : + alt66 = 1 + + + if alt66 == 1: + # C.g:420:27: ',' parameter_declaration + self.match(self.input, 27, self.FOLLOW_27_in_macro_parameter_list1562) + if self.failed: + return + self.following.append(self.FOLLOW_parameter_declaration_in_macro_parameter_list1564) + self.parameter_declaration() + self.following.pop() + if self.failed: + return + + + else: + break #loop66 + + + + + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 42, macro_parameter_list_StartIndex) + + pass + + return + + # $ANTLR end macro_parameter_list + + + # $ANTLR start unary_operator + # C.g:423:1: unary_operator : ( '&' | '*' | '+' | '-' | '~' | '!' ); + def unary_operator(self, ): + + unary_operator_StartIndex = self.input.index() + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 43): + return + + # C.g:424:2: ( '&' | '*' | '+' | '-' | '~' | '!' ) + # C.g: + if self.input.LA(1) == 66 or (68 <= self.input.LA(1) <= 69) or (77 <= self.input.LA(1) <= 79): + self.input.consume(); + self.errorRecovery = False + self.failed = False + + else: + if self.backtracking > 0: + self.failed = True + return + + mse = MismatchedSetException(None, self.input) + self.recoverFromMismatchedSet( + self.input, mse, self.FOLLOW_set_in_unary_operator0 + ) + raise mse + + + + + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 43, unary_operator_StartIndex) + + pass + + return + + # $ANTLR end unary_operator + + class primary_expression_return(object): + def __init__(self): + self.start = None + self.stop = None + + + + # $ANTLR start primary_expression + # C.g:432:1: primary_expression : ( IDENTIFIER | constant | '(' expression ')' ); + def primary_expression(self, ): + + retval = self.primary_expression_return() + retval.start = self.input.LT(1) + primary_expression_StartIndex = self.input.index() + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 44): + return retval + + # C.g:433:2: ( IDENTIFIER | constant | '(' expression ')' ) + alt67 = 3 + LA67 = self.input.LA(1) + if LA67 == IDENTIFIER: + LA67_1 = self.input.LA(2) + + if (LA67_1 == EOF or LA67_1 == 25 or (27 <= LA67_1 <= 28) or LA67_1 == 44 or LA67_1 == 47 or LA67_1 == 53 or (62 <= LA67_1 <= 66) or (68 <= LA67_1 <= 73) or (75 <= LA67_1 <= 77) or (80 <= LA67_1 <= 102)) : + alt67 = 1 + elif (LA67_1 == IDENTIFIER or LA67_1 == STRING_LITERAL) : + alt67 = 2 + else: + if self.backtracking > 0: + self.failed = True + return retval + + nvae = NoViableAltException("432:1: primary_expression : ( IDENTIFIER | constant | '(' expression ')' );", 67, 1, self.input) + + raise nvae + + elif LA67 == HEX_LITERAL or LA67 == OCTAL_LITERAL or LA67 == DECIMAL_LITERAL or LA67 == CHARACTER_LITERAL or LA67 == STRING_LITERAL or LA67 == FLOATING_POINT_LITERAL: + alt67 = 2 + elif LA67 == 62: + alt67 = 3 + else: + if self.backtracking > 0: + self.failed = True + return retval + + nvae = NoViableAltException("432:1: primary_expression : ( IDENTIFIER | constant | '(' expression ')' );", 67, 0, self.input) + + raise nvae + + if alt67 == 1: + # C.g:433:4: IDENTIFIER + self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_primary_expression1613) + if self.failed: + return retval + + + elif alt67 == 2: + # C.g:434:4: constant + self.following.append(self.FOLLOW_constant_in_primary_expression1618) + self.constant() + self.following.pop() + if self.failed: + return retval + + + elif alt67 == 3: + # C.g:435:4: '(' expression ')' + self.match(self.input, 62, self.FOLLOW_62_in_primary_expression1623) + if self.failed: + return retval + self.following.append(self.FOLLOW_expression_in_primary_expression1625) + self.expression() + self.following.pop() + if self.failed: + return retval + self.match(self.input, 63, self.FOLLOW_63_in_primary_expression1627) + if self.failed: + return retval + + + retval.stop = self.input.LT(-1) + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 44, primary_expression_StartIndex) + + pass + + return retval + + # $ANTLR end primary_expression + + + # $ANTLR start constant + # C.g:438:1: constant : ( HEX_LITERAL | OCTAL_LITERAL | DECIMAL_LITERAL | CHARACTER_LITERAL | ( ( IDENTIFIER )* ( STRING_LITERAL )+ )+ ( IDENTIFIER )* | FLOATING_POINT_LITERAL ); + def constant(self, ): + + constant_StartIndex = self.input.index() + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 45): + return + + # C.g:439:5: ( HEX_LITERAL | OCTAL_LITERAL | DECIMAL_LITERAL | CHARACTER_LITERAL | ( ( IDENTIFIER )* ( STRING_LITERAL )+ )+ ( IDENTIFIER )* | FLOATING_POINT_LITERAL ) + alt72 = 6 + LA72 = self.input.LA(1) + if LA72 == HEX_LITERAL: + alt72 = 1 + elif LA72 == OCTAL_LITERAL: + alt72 = 2 + elif LA72 == DECIMAL_LITERAL: + alt72 = 3 + elif LA72 == CHARACTER_LITERAL: + alt72 = 4 + elif LA72 == IDENTIFIER or LA72 == STRING_LITERAL: + alt72 = 5 + elif LA72 == FLOATING_POINT_LITERAL: + alt72 = 6 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("438:1: constant : ( HEX_LITERAL | OCTAL_LITERAL | DECIMAL_LITERAL | CHARACTER_LITERAL | ( ( IDENTIFIER )* ( STRING_LITERAL )+ )+ ( IDENTIFIER )* | FLOATING_POINT_LITERAL );", 72, 0, self.input) + + raise nvae + + if alt72 == 1: + # C.g:439:9: HEX_LITERAL + self.match(self.input, HEX_LITERAL, self.FOLLOW_HEX_LITERAL_in_constant1643) + if self.failed: + return + + + elif alt72 == 2: + # C.g:440:9: OCTAL_LITERAL + self.match(self.input, OCTAL_LITERAL, self.FOLLOW_OCTAL_LITERAL_in_constant1653) + if self.failed: + return + + + elif alt72 == 3: + # C.g:441:9: DECIMAL_LITERAL + self.match(self.input, DECIMAL_LITERAL, self.FOLLOW_DECIMAL_LITERAL_in_constant1663) + if self.failed: + return + + + elif alt72 == 4: + # C.g:442:7: CHARACTER_LITERAL + self.match(self.input, CHARACTER_LITERAL, self.FOLLOW_CHARACTER_LITERAL_in_constant1671) + if self.failed: + return + + + elif alt72 == 5: + # C.g:443:7: ( ( IDENTIFIER )* ( STRING_LITERAL )+ )+ ( IDENTIFIER )* + # C.g:443:7: ( ( IDENTIFIER )* ( STRING_LITERAL )+ )+ + cnt70 = 0 + while True: #loop70 + alt70 = 2 + LA70_0 = self.input.LA(1) + + if (LA70_0 == IDENTIFIER) : + LA70_1 = self.input.LA(2) + + if (LA70_1 == STRING_LITERAL) : + alt70 = 1 + elif (LA70_1 == IDENTIFIER) : + LA70_33 = self.input.LA(3) + + if (self.synpred138()) : + alt70 = 1 + + + + + elif (LA70_0 == STRING_LITERAL) : + alt70 = 1 + + + if alt70 == 1: + # C.g:443:8: ( IDENTIFIER )* ( STRING_LITERAL )+ + # C.g:443:8: ( IDENTIFIER )* + while True: #loop68 + alt68 = 2 + LA68_0 = self.input.LA(1) + + if (LA68_0 == IDENTIFIER) : + alt68 = 1 + + + if alt68 == 1: + # C.g:0:0: IDENTIFIER + self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_constant1680) + if self.failed: + return + + + else: + break #loop68 + + + # C.g:443:20: ( STRING_LITERAL )+ + cnt69 = 0 + while True: #loop69 + alt69 = 2 + LA69_0 = self.input.LA(1) + + if (LA69_0 == STRING_LITERAL) : + LA69_31 = self.input.LA(2) + + if (self.synpred137()) : + alt69 = 1 + + + + + if alt69 == 1: + # C.g:0:0: STRING_LITERAL + self.match(self.input, STRING_LITERAL, self.FOLLOW_STRING_LITERAL_in_constant1683) + if self.failed: + return + + + else: + if cnt69 >= 1: + break #loop69 + + if self.backtracking > 0: + self.failed = True + return + + eee = EarlyExitException(69, self.input) + raise eee + + cnt69 += 1 + + + + + else: + if cnt70 >= 1: + break #loop70 + + if self.backtracking > 0: + self.failed = True + return + + eee = EarlyExitException(70, self.input) + raise eee + + cnt70 += 1 + + + # C.g:443:38: ( IDENTIFIER )* + while True: #loop71 + alt71 = 2 + LA71_0 = self.input.LA(1) + + if (LA71_0 == IDENTIFIER) : + alt71 = 1 + + + if alt71 == 1: + # C.g:0:0: IDENTIFIER + self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_constant1688) + if self.failed: + return + + + else: + break #loop71 + + + + + elif alt72 == 6: + # C.g:444:9: FLOATING_POINT_LITERAL + self.match(self.input, FLOATING_POINT_LITERAL, self.FOLLOW_FLOATING_POINT_LITERAL_in_constant1699) + if self.failed: + return + + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 45, constant_StartIndex) + + pass + + return + + # $ANTLR end constant + + class expression_return(object): + def __init__(self): + self.start = None + self.stop = None + + + + # $ANTLR start expression + # C.g:449:1: expression : assignment_expression ( ',' assignment_expression )* ; + def expression(self, ): + + retval = self.expression_return() + retval.start = self.input.LT(1) + expression_StartIndex = self.input.index() + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 46): + return retval + + # C.g:450:2: ( assignment_expression ( ',' assignment_expression )* ) + # C.g:450:4: assignment_expression ( ',' assignment_expression )* + self.following.append(self.FOLLOW_assignment_expression_in_expression1715) + self.assignment_expression() + self.following.pop() + if self.failed: + return retval + # C.g:450:26: ( ',' assignment_expression )* + while True: #loop73 + alt73 = 2 + LA73_0 = self.input.LA(1) + + if (LA73_0 == 27) : + alt73 = 1 + + + if alt73 == 1: + # C.g:450:27: ',' assignment_expression + self.match(self.input, 27, self.FOLLOW_27_in_expression1718) + if self.failed: + return retval + self.following.append(self.FOLLOW_assignment_expression_in_expression1720) + self.assignment_expression() + self.following.pop() + if self.failed: + return retval + + + else: + break #loop73 + + + + + + retval.stop = self.input.LT(-1) + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 46, expression_StartIndex) + + pass + + return retval + + # $ANTLR end expression + + + # $ANTLR start constant_expression + # C.g:453:1: constant_expression : conditional_expression ; + def constant_expression(self, ): + + constant_expression_StartIndex = self.input.index() + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 47): + return + + # C.g:454:2: ( conditional_expression ) + # C.g:454:4: conditional_expression + self.following.append(self.FOLLOW_conditional_expression_in_constant_expression1733) + self.conditional_expression() + self.following.pop() + if self.failed: + return + + + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 47, constant_expression_StartIndex) + + pass + + return + + # $ANTLR end constant_expression + + + # $ANTLR start assignment_expression + # C.g:457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression ); + def assignment_expression(self, ): + + assignment_expression_StartIndex = self.input.index() + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 48): + return + + # C.g:458:2: ( lvalue assignment_operator assignment_expression | conditional_expression ) + alt74 = 2 + LA74 = self.input.LA(1) + if LA74 == IDENTIFIER: + LA74 = self.input.LA(2) + if LA74 == 64: + LA74_13 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 13, self.input) + + raise nvae + + elif LA74 == 62: + LA74_14 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 14, self.input) + + raise nvae + + elif LA74 == 75: + LA74_15 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 15, self.input) + + raise nvae + + elif LA74 == 66: + LA74_16 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 16, self.input) + + raise nvae + + elif LA74 == 76: + LA74_17 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 17, self.input) + + raise nvae + + elif LA74 == 72: + LA74_18 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 18, self.input) + + raise nvae + + elif LA74 == 73: + LA74_19 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 19, self.input) + + raise nvae + + elif LA74 == 28 or LA74 == 80 or LA74 == 81 or LA74 == 82 or LA74 == 83 or LA74 == 84 or LA74 == 85 or LA74 == 86 or LA74 == 87 or LA74 == 88 or LA74 == 89: + alt74 = 1 + elif LA74 == STRING_LITERAL: + LA74_21 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 21, self.input) + + raise nvae + + elif LA74 == IDENTIFIER: + LA74_22 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 22, self.input) + + raise nvae + + elif LA74 == EOF or LA74 == 25 or LA74 == 27 or LA74 == 44 or LA74 == 47 or LA74 == 53 or LA74 == 63 or LA74 == 65 or LA74 == 68 or LA74 == 69 or LA74 == 70 or LA74 == 71 or LA74 == 77 or LA74 == 90 or LA74 == 91 or LA74 == 92 or LA74 == 93 or LA74 == 94 or LA74 == 95 or LA74 == 96 or LA74 == 97 or LA74 == 98 or LA74 == 99 or LA74 == 100 or LA74 == 101 or LA74 == 102: + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 1, self.input) + + raise nvae + + elif LA74 == HEX_LITERAL: + LA74 = self.input.LA(2) + if LA74 == 64: + LA74_44 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 44, self.input) + + raise nvae + + elif LA74 == 62: + LA74_45 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 45, self.input) + + raise nvae + + elif LA74 == 75: + LA74_46 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 46, self.input) + + raise nvae + + elif LA74 == 66: + LA74_47 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 47, self.input) + + raise nvae + + elif LA74 == 76: + LA74_48 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 48, self.input) + + raise nvae + + elif LA74 == 72: + LA74_49 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 49, self.input) + + raise nvae + + elif LA74 == 73: + LA74_50 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 50, self.input) + + raise nvae + + elif LA74 == EOF or LA74 == 25 or LA74 == 27 or LA74 == 44 or LA74 == 47 or LA74 == 53 or LA74 == 63 or LA74 == 65 or LA74 == 68 or LA74 == 69 or LA74 == 70 or LA74 == 71 or LA74 == 77 or LA74 == 90 or LA74 == 91 or LA74 == 92 or LA74 == 93 or LA74 == 94 or LA74 == 95 or LA74 == 96 or LA74 == 97 or LA74 == 98 or LA74 == 99 or LA74 == 100 or LA74 == 101 or LA74 == 102: + alt74 = 2 + elif LA74 == 28 or LA74 == 80 or LA74 == 81 or LA74 == 82 or LA74 == 83 or LA74 == 84 or LA74 == 85 or LA74 == 86 or LA74 == 87 or LA74 == 88 or LA74 == 89: + alt74 = 1 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 2, self.input) + + raise nvae + + elif LA74 == OCTAL_LITERAL: + LA74 = self.input.LA(2) + if LA74 == 64: + LA74_73 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 73, self.input) + + raise nvae + + elif LA74 == 62: + LA74_74 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 74, self.input) + + raise nvae + + elif LA74 == 75: + LA74_75 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 75, self.input) + + raise nvae + + elif LA74 == 66: + LA74_76 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 76, self.input) + + raise nvae + + elif LA74 == 76: + LA74_77 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 77, self.input) + + raise nvae + + elif LA74 == 72: + LA74_78 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 78, self.input) + + raise nvae + + elif LA74 == 73: + LA74_79 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 79, self.input) + + raise nvae + + elif LA74 == 28 or LA74 == 80 or LA74 == 81 or LA74 == 82 or LA74 == 83 or LA74 == 84 or LA74 == 85 or LA74 == 86 or LA74 == 87 or LA74 == 88 or LA74 == 89: + alt74 = 1 + elif LA74 == EOF or LA74 == 25 or LA74 == 27 or LA74 == 44 or LA74 == 47 or LA74 == 53 or LA74 == 63 or LA74 == 65 or LA74 == 68 or LA74 == 69 or LA74 == 70 or LA74 == 71 or LA74 == 77 or LA74 == 90 or LA74 == 91 or LA74 == 92 or LA74 == 93 or LA74 == 94 or LA74 == 95 or LA74 == 96 or LA74 == 97 or LA74 == 98 or LA74 == 99 or LA74 == 100 or LA74 == 101 or LA74 == 102: + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 3, self.input) + + raise nvae + + elif LA74 == DECIMAL_LITERAL: + LA74 = self.input.LA(2) + if LA74 == 64: + LA74_102 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 102, self.input) + + raise nvae + + elif LA74 == 62: + LA74_103 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 103, self.input) + + raise nvae + + elif LA74 == 75: + LA74_104 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 104, self.input) + + raise nvae + + elif LA74 == 66: + LA74_105 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 105, self.input) + + raise nvae + + elif LA74 == 76: + LA74_106 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 106, self.input) + + raise nvae + + elif LA74 == 72: + LA74_107 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 107, self.input) + + raise nvae + + elif LA74 == 73: + LA74_108 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 108, self.input) + + raise nvae + + elif LA74 == EOF or LA74 == 25 or LA74 == 27 or LA74 == 44 or LA74 == 47 or LA74 == 53 or LA74 == 63 or LA74 == 65 or LA74 == 68 or LA74 == 69 or LA74 == 70 or LA74 == 71 or LA74 == 77 or LA74 == 90 or LA74 == 91 or LA74 == 92 or LA74 == 93 or LA74 == 94 or LA74 == 95 or LA74 == 96 or LA74 == 97 or LA74 == 98 or LA74 == 99 or LA74 == 100 or LA74 == 101 or LA74 == 102: + alt74 = 2 + elif LA74 == 28 or LA74 == 80 or LA74 == 81 or LA74 == 82 or LA74 == 83 or LA74 == 84 or LA74 == 85 or LA74 == 86 or LA74 == 87 or LA74 == 88 or LA74 == 89: + alt74 = 1 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 4, self.input) + + raise nvae + + elif LA74 == CHARACTER_LITERAL: + LA74 = self.input.LA(2) + if LA74 == 64: + LA74_131 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 131, self.input) + + raise nvae + + elif LA74 == 62: + LA74_132 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 132, self.input) + + raise nvae + + elif LA74 == 75: + LA74_133 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 133, self.input) + + raise nvae + + elif LA74 == 66: + LA74_134 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 134, self.input) + + raise nvae + + elif LA74 == 76: + LA74_135 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 135, self.input) + + raise nvae + + elif LA74 == 72: + LA74_136 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 136, self.input) + + raise nvae + + elif LA74 == 73: + LA74_137 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 137, self.input) + + raise nvae + + elif LA74 == EOF or LA74 == 25 or LA74 == 27 or LA74 == 44 or LA74 == 47 or LA74 == 53 or LA74 == 63 or LA74 == 65 or LA74 == 68 or LA74 == 69 or LA74 == 70 or LA74 == 71 or LA74 == 77 or LA74 == 90 or LA74 == 91 or LA74 == 92 or LA74 == 93 or LA74 == 94 or LA74 == 95 or LA74 == 96 or LA74 == 97 or LA74 == 98 or LA74 == 99 or LA74 == 100 or LA74 == 101 or LA74 == 102: + alt74 = 2 + elif LA74 == 28 or LA74 == 80 or LA74 == 81 or LA74 == 82 or LA74 == 83 or LA74 == 84 or LA74 == 85 or LA74 == 86 or LA74 == 87 or LA74 == 88 or LA74 == 89: + alt74 = 1 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 5, self.input) + + raise nvae + + elif LA74 == STRING_LITERAL: + LA74 = self.input.LA(2) + if LA74 == IDENTIFIER: + LA74_160 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 160, self.input) + + raise nvae + + elif LA74 == 64: + LA74_161 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 161, self.input) + + raise nvae + + elif LA74 == 62: + LA74_162 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 162, self.input) + + raise nvae + + elif LA74 == 75: + LA74_163 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 163, self.input) + + raise nvae + + elif LA74 == 66: + LA74_164 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 164, self.input) + + raise nvae + + elif LA74 == 76: + LA74_165 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 165, self.input) + + raise nvae + + elif LA74 == 72: + LA74_166 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 166, self.input) + + raise nvae + + elif LA74 == 73: + LA74_167 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 167, self.input) + + raise nvae + + elif LA74 == EOF or LA74 == 25 or LA74 == 27 or LA74 == 44 or LA74 == 47 or LA74 == 53 or LA74 == 63 or LA74 == 65 or LA74 == 68 or LA74 == 69 or LA74 == 70 or LA74 == 71 or LA74 == 77 or LA74 == 90 or LA74 == 91 or LA74 == 92 or LA74 == 93 or LA74 == 94 or LA74 == 95 or LA74 == 96 or LA74 == 97 or LA74 == 98 or LA74 == 99 or LA74 == 100 or LA74 == 101 or LA74 == 102: + alt74 = 2 + elif LA74 == STRING_LITERAL: + LA74_189 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 189, self.input) + + raise nvae + + elif LA74 == 28 or LA74 == 80 or LA74 == 81 or LA74 == 82 or LA74 == 83 or LA74 == 84 or LA74 == 85 or LA74 == 86 or LA74 == 87 or LA74 == 88 or LA74 == 89: + alt74 = 1 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 6, self.input) + + raise nvae + + elif LA74 == FLOATING_POINT_LITERAL: + LA74 = self.input.LA(2) + if LA74 == 64: + LA74_191 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 191, self.input) + + raise nvae + + elif LA74 == 62: + LA74_192 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 192, self.input) + + raise nvae + + elif LA74 == 75: + LA74_193 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 193, self.input) + + raise nvae + + elif LA74 == 66: + LA74_194 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 194, self.input) + + raise nvae + + elif LA74 == 76: + LA74_195 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 195, self.input) + + raise nvae + + elif LA74 == 72: + LA74_196 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 196, self.input) + + raise nvae + + elif LA74 == 73: + LA74_197 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 197, self.input) + + raise nvae + + elif LA74 == EOF or LA74 == 25 or LA74 == 27 or LA74 == 44 or LA74 == 47 or LA74 == 53 or LA74 == 63 or LA74 == 65 or LA74 == 68 or LA74 == 69 or LA74 == 70 or LA74 == 71 or LA74 == 77 or LA74 == 90 or LA74 == 91 or LA74 == 92 or LA74 == 93 or LA74 == 94 or LA74 == 95 or LA74 == 96 or LA74 == 97 or LA74 == 98 or LA74 == 99 or LA74 == 100 or LA74 == 101 or LA74 == 102: + alt74 = 2 + elif LA74 == 28 or LA74 == 80 or LA74 == 81 or LA74 == 82 or LA74 == 83 or LA74 == 84 or LA74 == 85 or LA74 == 86 or LA74 == 87 or LA74 == 88 or LA74 == 89: + alt74 = 1 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 7, self.input) + + raise nvae + + elif LA74 == 62: + LA74 = self.input.LA(2) + if LA74 == IDENTIFIER: + LA74_220 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 220, self.input) + + raise nvae + + elif LA74 == HEX_LITERAL: + LA74_221 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 221, self.input) + + raise nvae + + elif LA74 == OCTAL_LITERAL: + LA74_222 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 222, self.input) + + raise nvae + + elif LA74 == DECIMAL_LITERAL: + LA74_223 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 223, self.input) + + raise nvae + + elif LA74 == CHARACTER_LITERAL: + LA74_224 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 224, self.input) + + raise nvae + + elif LA74 == STRING_LITERAL: + LA74_225 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 225, self.input) + + raise nvae + + elif LA74 == FLOATING_POINT_LITERAL: + LA74_226 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 226, self.input) + + raise nvae + + elif LA74 == 62: + LA74_227 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 227, self.input) + + raise nvae + + elif LA74 == 72: + LA74_228 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 228, self.input) + + raise nvae + + elif LA74 == 73: + LA74_229 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 229, self.input) + + raise nvae + + elif LA74 == 66 or LA74 == 68 or LA74 == 69 or LA74 == 77 or LA74 == 78 or LA74 == 79: + LA74_230 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 230, self.input) + + raise nvae + + elif LA74 == 74: + LA74_231 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 231, self.input) + + raise nvae + + elif LA74 == 34 or LA74 == 35 or LA74 == 36 or LA74 == 37 or LA74 == 38 or LA74 == 39 or LA74 == 40 or LA74 == 41 or LA74 == 42 or LA74 == 45 or LA74 == 46 or LA74 == 48 or LA74 == 49 or LA74 == 50 or LA74 == 51 or LA74 == 52 or LA74 == 53 or LA74 == 54 or LA74 == 55 or LA74 == 56 or LA74 == 57 or LA74 == 58 or LA74 == 59 or LA74 == 60 or LA74 == 61: + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 8, self.input) + + raise nvae + + elif LA74 == 72: + LA74 = self.input.LA(2) + if LA74 == IDENTIFIER: + LA74_244 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 244, self.input) + + raise nvae + + elif LA74 == HEX_LITERAL: + LA74_245 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 245, self.input) + + raise nvae + + elif LA74 == OCTAL_LITERAL: + LA74_246 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 246, self.input) + + raise nvae + + elif LA74 == DECIMAL_LITERAL: + LA74_247 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 247, self.input) + + raise nvae + + elif LA74 == CHARACTER_LITERAL: + LA74_248 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 248, self.input) + + raise nvae + + elif LA74 == STRING_LITERAL: + LA74_249 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 249, self.input) + + raise nvae + + elif LA74 == FLOATING_POINT_LITERAL: + LA74_250 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 250, self.input) + + raise nvae + + elif LA74 == 62: + LA74_251 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 251, self.input) + + raise nvae + + elif LA74 == 72: + LA74_252 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 252, self.input) + + raise nvae + + elif LA74 == 73: + LA74_253 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 253, self.input) + + raise nvae + + elif LA74 == 66 or LA74 == 68 or LA74 == 69 or LA74 == 77 or LA74 == 78 or LA74 == 79: + LA74_254 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 254, self.input) + + raise nvae + + elif LA74 == 74: + LA74_255 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 255, self.input) + + raise nvae + + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 9, self.input) + + raise nvae + + elif LA74 == 73: + LA74 = self.input.LA(2) + if LA74 == IDENTIFIER: + LA74_256 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 256, self.input) + + raise nvae + + elif LA74 == HEX_LITERAL: + LA74_257 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 257, self.input) + + raise nvae + + elif LA74 == OCTAL_LITERAL: + LA74_258 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 258, self.input) + + raise nvae + + elif LA74 == DECIMAL_LITERAL: + LA74_259 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 259, self.input) + + raise nvae + + elif LA74 == CHARACTER_LITERAL: + LA74_260 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 260, self.input) + + raise nvae + + elif LA74 == STRING_LITERAL: + LA74_261 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 261, self.input) + + raise nvae + + elif LA74 == FLOATING_POINT_LITERAL: + LA74_262 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 262, self.input) + + raise nvae + + elif LA74 == 62: + LA74_263 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 263, self.input) + + raise nvae + + elif LA74 == 72: + LA74_264 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 264, self.input) + + raise nvae + + elif LA74 == 73: + LA74_265 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 265, self.input) + + raise nvae + + elif LA74 == 66 or LA74 == 68 or LA74 == 69 or LA74 == 77 or LA74 == 78 or LA74 == 79: + LA74_266 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 266, self.input) + + raise nvae + + elif LA74 == 74: + LA74_267 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 267, self.input) + + raise nvae + + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 10, self.input) + + raise nvae + + elif LA74 == 66 or LA74 == 68 or LA74 == 69 or LA74 == 77 or LA74 == 78 or LA74 == 79: + LA74 = self.input.LA(2) + if LA74 == 62: + LA74_268 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 268, self.input) + + raise nvae + + elif LA74 == IDENTIFIER: + LA74_269 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 269, self.input) + + raise nvae + + elif LA74 == HEX_LITERAL: + LA74_270 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 270, self.input) + + raise nvae + + elif LA74 == OCTAL_LITERAL: + LA74_271 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 271, self.input) + + raise nvae + + elif LA74 == DECIMAL_LITERAL: + LA74_272 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 272, self.input) + + raise nvae + + elif LA74 == CHARACTER_LITERAL: + LA74_273 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 273, self.input) + + raise nvae + + elif LA74 == STRING_LITERAL: + LA74_274 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 274, self.input) + + raise nvae + + elif LA74 == FLOATING_POINT_LITERAL: + LA74_275 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 275, self.input) + + raise nvae + + elif LA74 == 72: + LA74_276 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 276, self.input) + + raise nvae + + elif LA74 == 73: + LA74_277 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 277, self.input) + + raise nvae + + elif LA74 == 66 or LA74 == 68 or LA74 == 69 or LA74 == 77 or LA74 == 78 or LA74 == 79: + LA74_278 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 278, self.input) + + raise nvae + + elif LA74 == 74: + LA74_279 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 279, self.input) + + raise nvae + + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 11, self.input) + + raise nvae + + elif LA74 == 74: + LA74 = self.input.LA(2) + if LA74 == 62: + LA74_280 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 280, self.input) + + raise nvae + + elif LA74 == IDENTIFIER: + LA74_281 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 281, self.input) + + raise nvae + + elif LA74 == HEX_LITERAL: + LA74_282 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 282, self.input) + + raise nvae + + elif LA74 == OCTAL_LITERAL: + LA74_283 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 283, self.input) + + raise nvae + + elif LA74 == DECIMAL_LITERAL: + LA74_284 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 284, self.input) + + raise nvae + + elif LA74 == CHARACTER_LITERAL: + LA74_285 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 285, self.input) + + raise nvae + + elif LA74 == STRING_LITERAL: + LA74_286 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 286, self.input) + + raise nvae + + elif LA74 == FLOATING_POINT_LITERAL: + LA74_287 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 287, self.input) + + raise nvae + + elif LA74 == 72: + LA74_288 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 288, self.input) + + raise nvae + + elif LA74 == 73: + LA74_289 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 289, self.input) + + raise nvae + + elif LA74 == 66 or LA74 == 68 or LA74 == 69 or LA74 == 77 or LA74 == 78 or LA74 == 79: + LA74_290 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 290, self.input) + + raise nvae + + elif LA74 == 74: + LA74_291 = self.input.LA(3) + + if (self.synpred142()) : + alt74 = 1 + elif (True) : + alt74 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 291, self.input) + + raise nvae + + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 12, self.input) + + raise nvae + + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("457:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 74, 0, self.input) + + raise nvae + + if alt74 == 1: + # C.g:458:4: lvalue assignment_operator assignment_expression + self.following.append(self.FOLLOW_lvalue_in_assignment_expression1744) + self.lvalue() + self.following.pop() + if self.failed: + return + self.following.append(self.FOLLOW_assignment_operator_in_assignment_expression1746) + self.assignment_operator() + self.following.pop() + if self.failed: + return + self.following.append(self.FOLLOW_assignment_expression_in_assignment_expression1748) + self.assignment_expression() + self.following.pop() + if self.failed: + return + + + elif alt74 == 2: + # C.g:459:4: conditional_expression + self.following.append(self.FOLLOW_conditional_expression_in_assignment_expression1753) + self.conditional_expression() + self.following.pop() + if self.failed: + return + + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 48, assignment_expression_StartIndex) + + pass + + return + + # $ANTLR end assignment_expression + + + # $ANTLR start lvalue + # C.g:462:1: lvalue : unary_expression ; + def lvalue(self, ): + + lvalue_StartIndex = self.input.index() + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 49): + return + + # C.g:463:2: ( unary_expression ) + # C.g:463:4: unary_expression + self.following.append(self.FOLLOW_unary_expression_in_lvalue1765) + self.unary_expression() + self.following.pop() + if self.failed: + return + + + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 49, lvalue_StartIndex) + + pass + + return + + # $ANTLR end lvalue + + + # $ANTLR start assignment_operator + # C.g:466:1: assignment_operator : ( '=' | '*=' | '/=' | '%=' | '+=' | '-=' | '<<=' | '>>=' | '&=' | '^=' | '|=' ); + def assignment_operator(self, ): + + assignment_operator_StartIndex = self.input.index() + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 50): + return + + # C.g:467:2: ( '=' | '*=' | '/=' | '%=' | '+=' | '-=' | '<<=' | '>>=' | '&=' | '^=' | '|=' ) + # C.g: + if self.input.LA(1) == 28 or (80 <= self.input.LA(1) <= 89): + self.input.consume(); + self.errorRecovery = False + self.failed = False + + else: + if self.backtracking > 0: + self.failed = True + return + + mse = MismatchedSetException(None, self.input) + self.recoverFromMismatchedSet( + self.input, mse, self.FOLLOW_set_in_assignment_operator0 + ) + raise mse + + + + + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 50, assignment_operator_StartIndex) + + pass + + return + + # $ANTLR end assignment_operator + + + # $ANTLR start conditional_expression + # C.g:480:1: conditional_expression : e= logical_or_expression ( '?' expression ':' conditional_expression )? ; + def conditional_expression(self, ): + + conditional_expression_StartIndex = self.input.index() + e = None + + + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 51): + return + + # C.g:481:2: (e= logical_or_expression ( '?' expression ':' conditional_expression )? ) + # C.g:481:4: e= logical_or_expression ( '?' expression ':' conditional_expression )? + self.following.append(self.FOLLOW_logical_or_expression_in_conditional_expression1839) + e = self.logical_or_expression() + self.following.pop() + if self.failed: + return + # C.g:481:28: ( '?' expression ':' conditional_expression )? + alt75 = 2 + LA75_0 = self.input.LA(1) + + if (LA75_0 == 90) : + alt75 = 1 + if alt75 == 1: + # C.g:481:29: '?' expression ':' conditional_expression + self.match(self.input, 90, self.FOLLOW_90_in_conditional_expression1842) + if self.failed: + return + self.following.append(self.FOLLOW_expression_in_conditional_expression1844) + self.expression() + self.following.pop() + if self.failed: + return + self.match(self.input, 47, self.FOLLOW_47_in_conditional_expression1846) + if self.failed: + return + self.following.append(self.FOLLOW_conditional_expression_in_conditional_expression1848) + self.conditional_expression() + self.following.pop() + if self.failed: + return + if self.backtracking == 0: + self.StorePredicateExpression(e.start.line, e.start.charPositionInLine, e.stop.line, e.stop.charPositionInLine, self.input.toString(e.start,e.stop)) + + + + + + + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 51, conditional_expression_StartIndex) + + pass + + return + + # $ANTLR end conditional_expression + + class logical_or_expression_return(object): + def __init__(self): + self.start = None + self.stop = None + + + + # $ANTLR start logical_or_expression + # C.g:484:1: logical_or_expression : logical_and_expression ( '||' logical_and_expression )* ; + def logical_or_expression(self, ): + + retval = self.logical_or_expression_return() + retval.start = self.input.LT(1) + logical_or_expression_StartIndex = self.input.index() + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 52): + return retval + + # C.g:485:2: ( logical_and_expression ( '||' logical_and_expression )* ) + # C.g:485:4: logical_and_expression ( '||' logical_and_expression )* + self.following.append(self.FOLLOW_logical_and_expression_in_logical_or_expression1863) + self.logical_and_expression() + self.following.pop() + if self.failed: + return retval + # C.g:485:27: ( '||' logical_and_expression )* + while True: #loop76 + alt76 = 2 + LA76_0 = self.input.LA(1) + + if (LA76_0 == 91) : + alt76 = 1 + + + if alt76 == 1: + # C.g:485:28: '||' logical_and_expression + self.match(self.input, 91, self.FOLLOW_91_in_logical_or_expression1866) + if self.failed: + return retval + self.following.append(self.FOLLOW_logical_and_expression_in_logical_or_expression1868) + self.logical_and_expression() + self.following.pop() + if self.failed: + return retval + + + else: + break #loop76 + + + + + + retval.stop = self.input.LT(-1) + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 52, logical_or_expression_StartIndex) + + pass + + return retval + + # $ANTLR end logical_or_expression + + + # $ANTLR start logical_and_expression + # C.g:488:1: logical_and_expression : inclusive_or_expression ( '&&' inclusive_or_expression )* ; + def logical_and_expression(self, ): + + logical_and_expression_StartIndex = self.input.index() + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 53): + return + + # C.g:489:2: ( inclusive_or_expression ( '&&' inclusive_or_expression )* ) + # C.g:489:4: inclusive_or_expression ( '&&' inclusive_or_expression )* + self.following.append(self.FOLLOW_inclusive_or_expression_in_logical_and_expression1881) + self.inclusive_or_expression() + self.following.pop() + if self.failed: + return + # C.g:489:28: ( '&&' inclusive_or_expression )* + while True: #loop77 + alt77 = 2 + LA77_0 = self.input.LA(1) + + if (LA77_0 == 92) : + alt77 = 1 + + + if alt77 == 1: + # C.g:489:29: '&&' inclusive_or_expression + self.match(self.input, 92, self.FOLLOW_92_in_logical_and_expression1884) + if self.failed: + return + self.following.append(self.FOLLOW_inclusive_or_expression_in_logical_and_expression1886) + self.inclusive_or_expression() + self.following.pop() + if self.failed: + return + + + else: + break #loop77 + + + + + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 53, logical_and_expression_StartIndex) + + pass + + return + + # $ANTLR end logical_and_expression + + + # $ANTLR start inclusive_or_expression + # C.g:492:1: inclusive_or_expression : exclusive_or_expression ( '|' exclusive_or_expression )* ; + def inclusive_or_expression(self, ): + + inclusive_or_expression_StartIndex = self.input.index() + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 54): + return + + # C.g:493:2: ( exclusive_or_expression ( '|' exclusive_or_expression )* ) + # C.g:493:4: exclusive_or_expression ( '|' exclusive_or_expression )* + self.following.append(self.FOLLOW_exclusive_or_expression_in_inclusive_or_expression1899) + self.exclusive_or_expression() + self.following.pop() + if self.failed: + return + # C.g:493:28: ( '|' exclusive_or_expression )* + while True: #loop78 + alt78 = 2 + LA78_0 = self.input.LA(1) + + if (LA78_0 == 93) : + alt78 = 1 + + + if alt78 == 1: + # C.g:493:29: '|' exclusive_or_expression + self.match(self.input, 93, self.FOLLOW_93_in_inclusive_or_expression1902) + if self.failed: + return + self.following.append(self.FOLLOW_exclusive_or_expression_in_inclusive_or_expression1904) + self.exclusive_or_expression() + self.following.pop() + if self.failed: + return + + + else: + break #loop78 + + + + + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 54, inclusive_or_expression_StartIndex) + + pass + + return + + # $ANTLR end inclusive_or_expression + + + # $ANTLR start exclusive_or_expression + # C.g:496:1: exclusive_or_expression : and_expression ( '^' and_expression )* ; + def exclusive_or_expression(self, ): + + exclusive_or_expression_StartIndex = self.input.index() + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 55): + return + + # C.g:497:2: ( and_expression ( '^' and_expression )* ) + # C.g:497:4: and_expression ( '^' and_expression )* + self.following.append(self.FOLLOW_and_expression_in_exclusive_or_expression1917) + self.and_expression() + self.following.pop() + if self.failed: + return + # C.g:497:19: ( '^' and_expression )* + while True: #loop79 + alt79 = 2 + LA79_0 = self.input.LA(1) + + if (LA79_0 == 94) : + alt79 = 1 + + + if alt79 == 1: + # C.g:497:20: '^' and_expression + self.match(self.input, 94, self.FOLLOW_94_in_exclusive_or_expression1920) + if self.failed: + return + self.following.append(self.FOLLOW_and_expression_in_exclusive_or_expression1922) + self.and_expression() + self.following.pop() + if self.failed: + return + + + else: + break #loop79 + + + + + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 55, exclusive_or_expression_StartIndex) + + pass + + return + + # $ANTLR end exclusive_or_expression + + + # $ANTLR start and_expression + # C.g:500:1: and_expression : equality_expression ( '&' equality_expression )* ; + def and_expression(self, ): + + and_expression_StartIndex = self.input.index() + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 56): + return + + # C.g:501:2: ( equality_expression ( '&' equality_expression )* ) + # C.g:501:4: equality_expression ( '&' equality_expression )* + self.following.append(self.FOLLOW_equality_expression_in_and_expression1935) + self.equality_expression() + self.following.pop() + if self.failed: + return + # C.g:501:24: ( '&' equality_expression )* + while True: #loop80 + alt80 = 2 + LA80_0 = self.input.LA(1) + + if (LA80_0 == 77) : + alt80 = 1 + + + if alt80 == 1: + # C.g:501:25: '&' equality_expression + self.match(self.input, 77, self.FOLLOW_77_in_and_expression1938) + if self.failed: + return + self.following.append(self.FOLLOW_equality_expression_in_and_expression1940) + self.equality_expression() + self.following.pop() + if self.failed: + return + + + else: + break #loop80 + + + + + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 56, and_expression_StartIndex) + + pass + + return + + # $ANTLR end and_expression + + + # $ANTLR start equality_expression + # C.g:503:1: equality_expression : relational_expression ( ( '==' | '!=' ) relational_expression )* ; + def equality_expression(self, ): + + equality_expression_StartIndex = self.input.index() + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 57): + return + + # C.g:504:2: ( relational_expression ( ( '==' | '!=' ) relational_expression )* ) + # C.g:504:4: relational_expression ( ( '==' | '!=' ) relational_expression )* + self.following.append(self.FOLLOW_relational_expression_in_equality_expression1952) + self.relational_expression() + self.following.pop() + if self.failed: + return + # C.g:504:26: ( ( '==' | '!=' ) relational_expression )* + while True: #loop81 + alt81 = 2 + LA81_0 = self.input.LA(1) + + if ((95 <= LA81_0 <= 96)) : + alt81 = 1 + + + if alt81 == 1: + # C.g:504:27: ( '==' | '!=' ) relational_expression + if (95 <= self.input.LA(1) <= 96): + self.input.consume(); + self.errorRecovery = False + self.failed = False + + else: + if self.backtracking > 0: + self.failed = True + return + + mse = MismatchedSetException(None, self.input) + self.recoverFromMismatchedSet( + self.input, mse, self.FOLLOW_set_in_equality_expression1955 + ) + raise mse + + + self.following.append(self.FOLLOW_relational_expression_in_equality_expression1961) + self.relational_expression() + self.following.pop() + if self.failed: + return + + + else: + break #loop81 + + + + + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 57, equality_expression_StartIndex) + + pass + + return + + # $ANTLR end equality_expression + + + # $ANTLR start relational_expression + # C.g:507:1: relational_expression : shift_expression ( ( '<' | '>' | '<=' | '>=' ) shift_expression )* ; + def relational_expression(self, ): + + relational_expression_StartIndex = self.input.index() + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 58): + return + + # C.g:508:2: ( shift_expression ( ( '<' | '>' | '<=' | '>=' ) shift_expression )* ) + # C.g:508:4: shift_expression ( ( '<' | '>' | '<=' | '>=' ) shift_expression )* + self.following.append(self.FOLLOW_shift_expression_in_relational_expression1975) + self.shift_expression() + self.following.pop() + if self.failed: + return + # C.g:508:21: ( ( '<' | '>' | '<=' | '>=' ) shift_expression )* + while True: #loop82 + alt82 = 2 + LA82_0 = self.input.LA(1) + + if ((97 <= LA82_0 <= 100)) : + alt82 = 1 + + + if alt82 == 1: + # C.g:508:22: ( '<' | '>' | '<=' | '>=' ) shift_expression + if (97 <= self.input.LA(1) <= 100): + self.input.consume(); + self.errorRecovery = False + self.failed = False + + else: + if self.backtracking > 0: + self.failed = True + return + + mse = MismatchedSetException(None, self.input) + self.recoverFromMismatchedSet( + self.input, mse, self.FOLLOW_set_in_relational_expression1978 + ) + raise mse + + + self.following.append(self.FOLLOW_shift_expression_in_relational_expression1988) + self.shift_expression() + self.following.pop() + if self.failed: + return + + + else: + break #loop82 + + + + + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 58, relational_expression_StartIndex) + + pass + + return + + # $ANTLR end relational_expression + + + # $ANTLR start shift_expression + # C.g:511:1: shift_expression : additive_expression ( ( '<<' | '>>' ) additive_expression )* ; + def shift_expression(self, ): + + shift_expression_StartIndex = self.input.index() + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 59): + return + + # C.g:512:2: ( additive_expression ( ( '<<' | '>>' ) additive_expression )* ) + # C.g:512:4: additive_expression ( ( '<<' | '>>' ) additive_expression )* + self.following.append(self.FOLLOW_additive_expression_in_shift_expression2001) + self.additive_expression() + self.following.pop() + if self.failed: + return + # C.g:512:24: ( ( '<<' | '>>' ) additive_expression )* + while True: #loop83 + alt83 = 2 + LA83_0 = self.input.LA(1) + + if ((101 <= LA83_0 <= 102)) : + alt83 = 1 + + + if alt83 == 1: + # C.g:512:25: ( '<<' | '>>' ) additive_expression + if (101 <= self.input.LA(1) <= 102): + self.input.consume(); + self.errorRecovery = False + self.failed = False + + else: + if self.backtracking > 0: + self.failed = True + return + + mse = MismatchedSetException(None, self.input) + self.recoverFromMismatchedSet( + self.input, mse, self.FOLLOW_set_in_shift_expression2004 + ) + raise mse + + + self.following.append(self.FOLLOW_additive_expression_in_shift_expression2010) + self.additive_expression() + self.following.pop() + if self.failed: + return + + + else: + break #loop83 + + + + + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 59, shift_expression_StartIndex) + + pass + + return + + # $ANTLR end shift_expression + + + # $ANTLR start statement + # C.g:517:1: statement : ( labeled_statement | compound_statement | expression_statement | selection_statement | iteration_statement | jump_statement | macro_statement | asm2_statement | asm1_statement | asm_statement | declaration ); + def statement(self, ): + + statement_StartIndex = self.input.index() + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 60): + return + + # C.g:518:2: ( labeled_statement | compound_statement | expression_statement | selection_statement | iteration_statement | jump_statement | macro_statement | asm2_statement | asm1_statement | asm_statement | declaration ) + alt84 = 11 + LA84 = self.input.LA(1) + if LA84 == IDENTIFIER: + LA84 = self.input.LA(2) + if LA84 == 62: + LA84_43 = self.input.LA(3) + + if (self.synpred169()) : + alt84 = 3 + elif (self.synpred173()) : + alt84 = 7 + elif (self.synpred174()) : + alt84 = 8 + elif (True) : + alt84 = 11 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("517:1: statement : ( labeled_statement | compound_statement | expression_statement | selection_statement | iteration_statement | jump_statement | macro_statement | asm2_statement | asm1_statement | asm_statement | declaration );", 84, 43, self.input) + + raise nvae + + elif LA84 == 47: + alt84 = 1 + elif LA84 == STRING_LITERAL or LA84 == 27 or LA84 == 28 or LA84 == 64 or LA84 == 68 or LA84 == 69 or LA84 == 70 or LA84 == 71 or LA84 == 72 or LA84 == 73 or LA84 == 75 or LA84 == 76 or LA84 == 77 or LA84 == 80 or LA84 == 81 or LA84 == 82 or LA84 == 83 or LA84 == 84 or LA84 == 85 or LA84 == 86 or LA84 == 87 or LA84 == 88 or LA84 == 89 or LA84 == 90 or LA84 == 91 or LA84 == 92 or LA84 == 93 or LA84 == 94 or LA84 == 95 or LA84 == 96 or LA84 == 97 or LA84 == 98 or LA84 == 99 or LA84 == 100 or LA84 == 101 or LA84 == 102: + alt84 = 3 + elif LA84 == 66: + LA84_47 = self.input.LA(3) + + if (self.synpred169()) : + alt84 = 3 + elif (True) : + alt84 = 11 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("517:1: statement : ( labeled_statement | compound_statement | expression_statement | selection_statement | iteration_statement | jump_statement | macro_statement | asm2_statement | asm1_statement | asm_statement | declaration );", 84, 47, self.input) + + raise nvae + + elif LA84 == IDENTIFIER: + LA84_53 = self.input.LA(3) + + if (self.synpred169()) : + alt84 = 3 + elif (True) : + alt84 = 11 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("517:1: statement : ( labeled_statement | compound_statement | expression_statement | selection_statement | iteration_statement | jump_statement | macro_statement | asm2_statement | asm1_statement | asm_statement | declaration );", 84, 53, self.input) + + raise nvae + + elif LA84 == 25: + LA84_68 = self.input.LA(3) + + if (self.synpred169()) : + alt84 = 3 + elif (True) : + alt84 = 11 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("517:1: statement : ( labeled_statement | compound_statement | expression_statement | selection_statement | iteration_statement | jump_statement | macro_statement | asm2_statement | asm1_statement | asm_statement | declaration );", 84, 68, self.input) + + raise nvae + + elif LA84 == 29 or LA84 == 30 or LA84 == 31 or LA84 == 32 or LA84 == 33 or LA84 == 34 or LA84 == 35 or LA84 == 36 or LA84 == 37 or LA84 == 38 or LA84 == 39 or LA84 == 40 or LA84 == 41 or LA84 == 42 or LA84 == 45 or LA84 == 46 or LA84 == 48 or LA84 == 49 or LA84 == 50 or LA84 == 51 or LA84 == 52 or LA84 == 53 or LA84 == 54 or LA84 == 55 or LA84 == 56 or LA84 == 57 or LA84 == 58 or LA84 == 59 or LA84 == 60 or LA84 == 61: + alt84 = 11 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("517:1: statement : ( labeled_statement | compound_statement | expression_statement | selection_statement | iteration_statement | jump_statement | macro_statement | asm2_statement | asm1_statement | asm_statement | declaration );", 84, 1, self.input) + + raise nvae + + elif LA84 == 106 or LA84 == 107: + alt84 = 1 + elif LA84 == 43: + alt84 = 2 + elif LA84 == HEX_LITERAL or LA84 == OCTAL_LITERAL or LA84 == DECIMAL_LITERAL or LA84 == CHARACTER_LITERAL or LA84 == STRING_LITERAL or LA84 == FLOATING_POINT_LITERAL or LA84 == 25 or LA84 == 62 or LA84 == 66 or LA84 == 68 or LA84 == 69 or LA84 == 72 or LA84 == 73 or LA84 == 74 or LA84 == 77 or LA84 == 78 or LA84 == 79: + alt84 = 3 + elif LA84 == 108 or LA84 == 110: + alt84 = 4 + elif LA84 == 111 or LA84 == 112 or LA84 == 113: + alt84 = 5 + elif LA84 == 114 or LA84 == 115 or LA84 == 116 or LA84 == 117: + alt84 = 6 + elif LA84 == 103: + alt84 = 8 + elif LA84 == 104: + alt84 = 9 + elif LA84 == 105: + alt84 = 10 + elif LA84 == 26 or LA84 == 29 or LA84 == 30 or LA84 == 31 or LA84 == 32 or LA84 == 33 or LA84 == 34 or LA84 == 35 or LA84 == 36 or LA84 == 37 or LA84 == 38 or LA84 == 39 or LA84 == 40 or LA84 == 41 or LA84 == 42 or LA84 == 45 or LA84 == 46 or LA84 == 48 or LA84 == 49 or LA84 == 50 or LA84 == 51 or LA84 == 52 or LA84 == 53 or LA84 == 54 or LA84 == 55 or LA84 == 56 or LA84 == 57 or LA84 == 58 or LA84 == 59 or LA84 == 60 or LA84 == 61: + alt84 = 11 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("517:1: statement : ( labeled_statement | compound_statement | expression_statement | selection_statement | iteration_statement | jump_statement | macro_statement | asm2_statement | asm1_statement | asm_statement | declaration );", 84, 0, self.input) + + raise nvae + + if alt84 == 1: + # C.g:518:4: labeled_statement + self.following.append(self.FOLLOW_labeled_statement_in_statement2025) + self.labeled_statement() + self.following.pop() + if self.failed: + return + + + elif alt84 == 2: + # C.g:519:4: compound_statement + self.following.append(self.FOLLOW_compound_statement_in_statement2030) + self.compound_statement() + self.following.pop() + if self.failed: + return + + + elif alt84 == 3: + # C.g:520:4: expression_statement + self.following.append(self.FOLLOW_expression_statement_in_statement2035) + self.expression_statement() + self.following.pop() + if self.failed: + return + + + elif alt84 == 4: + # C.g:521:4: selection_statement + self.following.append(self.FOLLOW_selection_statement_in_statement2040) + self.selection_statement() + self.following.pop() + if self.failed: + return + + + elif alt84 == 5: + # C.g:522:4: iteration_statement + self.following.append(self.FOLLOW_iteration_statement_in_statement2045) + self.iteration_statement() + self.following.pop() + if self.failed: + return + + + elif alt84 == 6: + # C.g:523:4: jump_statement + self.following.append(self.FOLLOW_jump_statement_in_statement2050) + self.jump_statement() + self.following.pop() + if self.failed: + return + + + elif alt84 == 7: + # C.g:524:4: macro_statement + self.following.append(self.FOLLOW_macro_statement_in_statement2055) + self.macro_statement() + self.following.pop() + if self.failed: + return + + + elif alt84 == 8: + # C.g:525:4: asm2_statement + self.following.append(self.FOLLOW_asm2_statement_in_statement2060) + self.asm2_statement() + self.following.pop() + if self.failed: + return + + + elif alt84 == 9: + # C.g:526:4: asm1_statement + self.following.append(self.FOLLOW_asm1_statement_in_statement2065) + self.asm1_statement() + self.following.pop() + if self.failed: + return + + + elif alt84 == 10: + # C.g:527:4: asm_statement + self.following.append(self.FOLLOW_asm_statement_in_statement2070) + self.asm_statement() + self.following.pop() + if self.failed: + return + + + elif alt84 == 11: + # C.g:528:4: declaration + self.following.append(self.FOLLOW_declaration_in_statement2075) + self.declaration() + self.following.pop() + if self.failed: + return + + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 60, statement_StartIndex) + + pass + + return + + # $ANTLR end statement + + + # $ANTLR start asm2_statement + # C.g:531:1: asm2_statement : ( '__asm__' )? IDENTIFIER '(' (~ ( ';' ) )* ')' ';' ; + def asm2_statement(self, ): + + asm2_statement_StartIndex = self.input.index() + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 61): + return + + # C.g:532:2: ( ( '__asm__' )? IDENTIFIER '(' (~ ( ';' ) )* ')' ';' ) + # C.g:532:4: ( '__asm__' )? IDENTIFIER '(' (~ ( ';' ) )* ')' ';' + # C.g:532:4: ( '__asm__' )? + alt85 = 2 + LA85_0 = self.input.LA(1) + + if (LA85_0 == 103) : + alt85 = 1 + if alt85 == 1: + # C.g:0:0: '__asm__' + self.match(self.input, 103, self.FOLLOW_103_in_asm2_statement2086) + if self.failed: + return + + + + self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_asm2_statement2089) + if self.failed: + return + self.match(self.input, 62, self.FOLLOW_62_in_asm2_statement2091) + if self.failed: + return + # C.g:532:30: (~ ( ';' ) )* + while True: #loop86 + alt86 = 2 + LA86_0 = self.input.LA(1) + + if (LA86_0 == 63) : + LA86_1 = self.input.LA(2) + + if ((IDENTIFIER <= LA86_1 <= LINE_COMMAND) or (26 <= LA86_1 <= 117)) : + alt86 = 1 + + + elif ((IDENTIFIER <= LA86_0 <= LINE_COMMAND) or (26 <= LA86_0 <= 62) or (64 <= LA86_0 <= 117)) : + alt86 = 1 + + + if alt86 == 1: + # C.g:532:31: ~ ( ';' ) + if (IDENTIFIER <= self.input.LA(1) <= LINE_COMMAND) or (26 <= self.input.LA(1) <= 117): + self.input.consume(); + self.errorRecovery = False + self.failed = False + + else: + if self.backtracking > 0: + self.failed = True + return + + mse = MismatchedSetException(None, self.input) + self.recoverFromMismatchedSet( + self.input, mse, self.FOLLOW_set_in_asm2_statement2094 + ) + raise mse + + + + + else: + break #loop86 + + + self.match(self.input, 63, self.FOLLOW_63_in_asm2_statement2101) + if self.failed: + return + self.match(self.input, 25, self.FOLLOW_25_in_asm2_statement2103) + if self.failed: + return + + + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 61, asm2_statement_StartIndex) + + pass + + return + + # $ANTLR end asm2_statement + + + # $ANTLR start asm1_statement + # C.g:535:1: asm1_statement : '_asm' '{' (~ ( '}' ) )* '}' ; + def asm1_statement(self, ): + + asm1_statement_StartIndex = self.input.index() + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 62): + return + + # C.g:536:2: ( '_asm' '{' (~ ( '}' ) )* '}' ) + # C.g:536:4: '_asm' '{' (~ ( '}' ) )* '}' + self.match(self.input, 104, self.FOLLOW_104_in_asm1_statement2115) + if self.failed: + return + self.match(self.input, 43, self.FOLLOW_43_in_asm1_statement2117) + if self.failed: + return + # C.g:536:15: (~ ( '}' ) )* + while True: #loop87 + alt87 = 2 + LA87_0 = self.input.LA(1) + + if ((IDENTIFIER <= LA87_0 <= 43) or (45 <= LA87_0 <= 117)) : + alt87 = 1 + + + if alt87 == 1: + # C.g:536:16: ~ ( '}' ) + if (IDENTIFIER <= self.input.LA(1) <= 43) or (45 <= self.input.LA(1) <= 117): + self.input.consume(); + self.errorRecovery = False + self.failed = False + + else: + if self.backtracking > 0: + self.failed = True + return + + mse = MismatchedSetException(None, self.input) + self.recoverFromMismatchedSet( + self.input, mse, self.FOLLOW_set_in_asm1_statement2120 + ) + raise mse + + + + + else: + break #loop87 + + + self.match(self.input, 44, self.FOLLOW_44_in_asm1_statement2127) + if self.failed: + return + + + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 62, asm1_statement_StartIndex) + + pass + + return + + # $ANTLR end asm1_statement + + + # $ANTLR start asm_statement + # C.g:539:1: asm_statement : '__asm' '{' (~ ( '}' ) )* '}' ; + def asm_statement(self, ): + + asm_statement_StartIndex = self.input.index() + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 63): + return + + # C.g:540:2: ( '__asm' '{' (~ ( '}' ) )* '}' ) + # C.g:540:4: '__asm' '{' (~ ( '}' ) )* '}' + self.match(self.input, 105, self.FOLLOW_105_in_asm_statement2138) + if self.failed: + return + self.match(self.input, 43, self.FOLLOW_43_in_asm_statement2140) + if self.failed: + return + # C.g:540:16: (~ ( '}' ) )* + while True: #loop88 + alt88 = 2 + LA88_0 = self.input.LA(1) + + if ((IDENTIFIER <= LA88_0 <= 43) or (45 <= LA88_0 <= 117)) : + alt88 = 1 + + + if alt88 == 1: + # C.g:540:17: ~ ( '}' ) + if (IDENTIFIER <= self.input.LA(1) <= 43) or (45 <= self.input.LA(1) <= 117): + self.input.consume(); + self.errorRecovery = False + self.failed = False + + else: + if self.backtracking > 0: + self.failed = True + return + + mse = MismatchedSetException(None, self.input) + self.recoverFromMismatchedSet( + self.input, mse, self.FOLLOW_set_in_asm_statement2143 + ) + raise mse + + + + + else: + break #loop88 + + + self.match(self.input, 44, self.FOLLOW_44_in_asm_statement2150) + if self.failed: + return + + + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 63, asm_statement_StartIndex) + + pass + + return + + # $ANTLR end asm_statement + + + # $ANTLR start macro_statement + # C.g:543:1: macro_statement : IDENTIFIER '(' ( declaration )* ( statement_list )? ( expression )? ')' ; + def macro_statement(self, ): + + macro_statement_StartIndex = self.input.index() + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 64): + return + + # C.g:544:2: ( IDENTIFIER '(' ( declaration )* ( statement_list )? ( expression )? ')' ) + # C.g:544:4: IDENTIFIER '(' ( declaration )* ( statement_list )? ( expression )? ')' + self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_macro_statement2162) + if self.failed: + return + self.match(self.input, 62, self.FOLLOW_62_in_macro_statement2164) + if self.failed: + return + # C.g:544:19: ( declaration )* + while True: #loop89 + alt89 = 2 + LA89 = self.input.LA(1) + if LA89 == IDENTIFIER: + LA89 = self.input.LA(2) + if LA89 == 62: + LA89_45 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == IDENTIFIER: + LA89_47 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 66: + LA89_50 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 25: + LA89_68 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 58: + LA89_71 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 59: + LA89_72 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 60: + LA89_73 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 29 or LA89 == 30 or LA89 == 31 or LA89 == 32 or LA89 == 33: + LA89_74 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 34: + LA89_75 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 35: + LA89_76 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 36: + LA89_77 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 37: + LA89_78 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 38: + LA89_79 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 39: + LA89_80 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 40: + LA89_81 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 41: + LA89_82 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 42: + LA89_83 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 45 or LA89 == 46: + LA89_84 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 48: + LA89_85 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57 or LA89 == 61: + LA89_86 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + + elif LA89 == 26: + LA89 = self.input.LA(2) + if LA89 == 29 or LA89 == 30 or LA89 == 31 or LA89 == 32 or LA89 == 33: + LA89_87 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 34: + LA89_88 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 35: + LA89_89 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 36: + LA89_90 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 37: + LA89_91 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 38: + LA89_92 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 39: + LA89_93 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 40: + LA89_94 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 41: + LA89_95 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 42: + LA89_96 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 45 or LA89 == 46: + LA89_97 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 48: + LA89_98 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == IDENTIFIER: + LA89_99 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 58: + LA89_100 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 66: + LA89_101 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 59: + LA89_102 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 60: + LA89_103 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57 or LA89 == 61: + LA89_104 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 62: + LA89_105 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + + elif LA89 == 29 or LA89 == 30 or LA89 == 31 or LA89 == 32 or LA89 == 33: + LA89 = self.input.LA(2) + if LA89 == 66: + LA89_106 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 58: + LA89_107 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 59: + LA89_108 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 60: + LA89_109 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == IDENTIFIER: + LA89_110 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 62: + LA89_111 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 25: + LA89_112 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 29 or LA89 == 30 or LA89 == 31 or LA89 == 32 or LA89 == 33: + LA89_113 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 34: + LA89_114 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 35: + LA89_115 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 36: + LA89_116 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 37: + LA89_117 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 38: + LA89_118 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 39: + LA89_119 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 40: + LA89_120 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 41: + LA89_121 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 42: + LA89_122 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 45 or LA89 == 46: + LA89_123 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 48: + LA89_124 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57 or LA89 == 61: + LA89_125 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + + elif LA89 == 34: + LA89 = self.input.LA(2) + if LA89 == 66: + LA89_126 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 58: + LA89_127 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 59: + LA89_128 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 60: + LA89_129 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == IDENTIFIER: + LA89_130 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 62: + LA89_131 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 25: + LA89_132 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 29 or LA89 == 30 or LA89 == 31 or LA89 == 32 or LA89 == 33: + LA89_133 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 34: + LA89_134 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 35: + LA89_135 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 36: + LA89_136 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 37: + LA89_137 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 38: + LA89_138 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 39: + LA89_139 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 40: + LA89_140 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 41: + LA89_141 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 42: + LA89_142 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 45 or LA89 == 46: + LA89_143 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 48: + LA89_144 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57 or LA89 == 61: + LA89_145 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + + elif LA89 == 35: + LA89 = self.input.LA(2) + if LA89 == 66: + LA89_146 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 58: + LA89_147 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 59: + LA89_148 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 60: + LA89_149 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == IDENTIFIER: + LA89_150 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 62: + LA89_151 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 25: + LA89_152 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 29 or LA89 == 30 or LA89 == 31 or LA89 == 32 or LA89 == 33: + LA89_153 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 34: + LA89_154 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 35: + LA89_155 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 36: + LA89_156 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 37: + LA89_157 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 38: + LA89_158 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 39: + LA89_159 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 40: + LA89_160 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 41: + LA89_161 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 42: + LA89_162 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 45 or LA89 == 46: + LA89_163 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 48: + LA89_164 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57 or LA89 == 61: + LA89_165 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + + elif LA89 == 36: + LA89 = self.input.LA(2) + if LA89 == 66: + LA89_166 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 58: + LA89_167 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 59: + LA89_168 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 60: + LA89_169 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == IDENTIFIER: + LA89_170 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 62: + LA89_171 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 25: + LA89_172 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 29 or LA89 == 30 or LA89 == 31 or LA89 == 32 or LA89 == 33: + LA89_173 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 34: + LA89_174 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 35: + LA89_175 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 36: + LA89_176 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 37: + LA89_177 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 38: + LA89_178 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 39: + LA89_179 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 40: + LA89_180 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 41: + LA89_181 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 42: + LA89_182 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 45 or LA89 == 46: + LA89_183 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 48: + LA89_184 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57 or LA89 == 61: + LA89_185 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + + elif LA89 == 37: + LA89 = self.input.LA(2) + if LA89 == 66: + LA89_186 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 58: + LA89_187 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 59: + LA89_188 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 60: + LA89_189 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == IDENTIFIER: + LA89_190 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 62: + LA89_191 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 25: + LA89_192 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 29 or LA89 == 30 or LA89 == 31 or LA89 == 32 or LA89 == 33: + LA89_193 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 34: + LA89_194 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 35: + LA89_195 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 36: + LA89_196 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 37: + LA89_197 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 38: + LA89_198 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 39: + LA89_199 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 40: + LA89_200 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 41: + LA89_201 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 42: + LA89_202 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 45 or LA89 == 46: + LA89_203 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 48: + LA89_204 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57 or LA89 == 61: + LA89_205 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + + elif LA89 == 38: + LA89 = self.input.LA(2) + if LA89 == 66: + LA89_206 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 58: + LA89_207 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 59: + LA89_208 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 60: + LA89_209 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == IDENTIFIER: + LA89_210 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 62: + LA89_211 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 25: + LA89_212 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 29 or LA89 == 30 or LA89 == 31 or LA89 == 32 or LA89 == 33: + LA89_213 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 34: + LA89_214 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 35: + LA89_215 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 36: + LA89_216 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 37: + LA89_217 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 38: + LA89_218 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 39: + LA89_219 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 40: + LA89_220 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 41: + LA89_221 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 42: + LA89_222 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 45 or LA89 == 46: + LA89_223 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 48: + LA89_224 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57 or LA89 == 61: + LA89_225 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + + elif LA89 == 39: + LA89 = self.input.LA(2) + if LA89 == 66: + LA89_226 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 58: + LA89_227 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 59: + LA89_228 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 60: + LA89_229 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == IDENTIFIER: + LA89_230 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 62: + LA89_231 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 25: + LA89_232 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 29 or LA89 == 30 or LA89 == 31 or LA89 == 32 or LA89 == 33: + LA89_233 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 34: + LA89_234 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 35: + LA89_235 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 36: + LA89_236 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 37: + LA89_237 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 38: + LA89_238 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 39: + LA89_239 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 40: + LA89_240 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 41: + LA89_241 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 42: + LA89_242 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 45 or LA89 == 46: + LA89_243 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 48: + LA89_244 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57 or LA89 == 61: + LA89_245 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + + elif LA89 == 40: + LA89 = self.input.LA(2) + if LA89 == 66: + LA89_246 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 58: + LA89_247 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 59: + LA89_248 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 60: + LA89_249 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == IDENTIFIER: + LA89_250 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 62: + LA89_251 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 25: + LA89_252 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 29 or LA89 == 30 or LA89 == 31 or LA89 == 32 or LA89 == 33: + LA89_253 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 34: + LA89_254 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 35: + LA89_255 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 36: + LA89_256 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 37: + LA89_257 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 38: + LA89_258 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 39: + LA89_259 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 40: + LA89_260 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 41: + LA89_261 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 42: + LA89_262 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 45 or LA89 == 46: + LA89_263 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 48: + LA89_264 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57 or LA89 == 61: + LA89_265 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + + elif LA89 == 41: + LA89 = self.input.LA(2) + if LA89 == 66: + LA89_266 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 58: + LA89_267 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 59: + LA89_268 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 60: + LA89_269 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == IDENTIFIER: + LA89_270 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 62: + LA89_271 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 25: + LA89_272 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 29 or LA89 == 30 or LA89 == 31 or LA89 == 32 or LA89 == 33: + LA89_273 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 34: + LA89_274 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 35: + LA89_275 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 36: + LA89_276 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 37: + LA89_277 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 38: + LA89_278 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 39: + LA89_279 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 40: + LA89_280 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 41: + LA89_281 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 42: + LA89_282 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 45 or LA89 == 46: + LA89_283 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 48: + LA89_284 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57 or LA89 == 61: + LA89_285 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + + elif LA89 == 42: + LA89 = self.input.LA(2) + if LA89 == 66: + LA89_286 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 58: + LA89_287 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 59: + LA89_288 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 60: + LA89_289 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == IDENTIFIER: + LA89_290 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 62: + LA89_291 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 25: + LA89_292 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 29 or LA89 == 30 or LA89 == 31 or LA89 == 32 or LA89 == 33: + LA89_293 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 34: + LA89_294 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 35: + LA89_295 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 36: + LA89_296 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 37: + LA89_297 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 38: + LA89_298 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 39: + LA89_299 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 40: + LA89_300 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 41: + LA89_301 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 42: + LA89_302 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 45 or LA89 == 46: + LA89_303 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 48: + LA89_304 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57 or LA89 == 61: + LA89_305 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + + elif LA89 == 45 or LA89 == 46: + LA89_40 = self.input.LA(2) + + if (LA89_40 == IDENTIFIER) : + LA89_306 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif (LA89_40 == 43) : + LA89_307 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + + + elif LA89 == 48: + LA89_41 = self.input.LA(2) + + if (LA89_41 == 43) : + LA89_308 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif (LA89_41 == IDENTIFIER) : + LA89_309 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + + + elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57 or LA89 == 58 or LA89 == 59 or LA89 == 60 or LA89 == 61: + LA89 = self.input.LA(2) + if LA89 == 66: + LA89_310 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 58: + LA89_311 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 59: + LA89_312 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 60: + LA89_313 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == IDENTIFIER: + LA89_314 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 62: + LA89_315 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 25: + LA89_316 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 29 or LA89 == 30 or LA89 == 31 or LA89 == 32 or LA89 == 33: + LA89_317 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 34: + LA89_318 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 35: + LA89_319 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 36: + LA89_320 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 37: + LA89_321 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 38: + LA89_322 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 39: + LA89_323 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 40: + LA89_324 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 41: + LA89_325 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 42: + LA89_326 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 45 or LA89 == 46: + LA89_327 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 48: + LA89_328 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + elif LA89 == 49 or LA89 == 50 or LA89 == 51 or LA89 == 52 or LA89 == 53 or LA89 == 54 or LA89 == 55 or LA89 == 56 or LA89 == 57 or LA89 == 61: + LA89_329 = self.input.LA(3) + + if (self.synpred181()) : + alt89 = 1 + + + + + if alt89 == 1: + # C.g:0:0: declaration + self.following.append(self.FOLLOW_declaration_in_macro_statement2166) + self.declaration() + self.following.pop() + if self.failed: + return + + + else: + break #loop89 + + + # C.g:544:33: ( statement_list )? + alt90 = 2 + LA90 = self.input.LA(1) + if LA90 == IDENTIFIER: + LA90 = self.input.LA(2) + if LA90 == 25 or LA90 == 29 or LA90 == 30 or LA90 == 31 or LA90 == 32 or LA90 == 33 or LA90 == 34 or LA90 == 35 or LA90 == 36 or LA90 == 37 or LA90 == 38 or LA90 == 39 or LA90 == 40 or LA90 == 41 or LA90 == 42 or LA90 == 45 or LA90 == 46 or LA90 == 47 or LA90 == 48 or LA90 == 49 or LA90 == 50 or LA90 == 51 or LA90 == 52 or LA90 == 53 or LA90 == 54 or LA90 == 55 or LA90 == 56 or LA90 == 57 or LA90 == 58 or LA90 == 59 or LA90 == 60 or LA90 == 61: + alt90 = 1 + elif LA90 == 62: + LA90_45 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == STRING_LITERAL: + LA90_46 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == IDENTIFIER: + LA90_47 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 64: + LA90_48 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 75: + LA90_49 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 66: + LA90_50 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 76: + LA90_51 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 72: + LA90_52 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 73: + LA90_53 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 70: + LA90_54 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 71: + LA90_55 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 68: + LA90_56 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 69: + LA90_57 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 101 or LA90 == 102: + LA90_58 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 97 or LA90 == 98 or LA90 == 99 or LA90 == 100: + LA90_59 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 95 or LA90 == 96: + LA90_60 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 77: + LA90_61 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 94: + LA90_62 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 93: + LA90_63 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 92: + LA90_64 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 91: + LA90_65 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 90: + LA90_66 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 27: + LA90_67 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 28 or LA90 == 80 or LA90 == 81 or LA90 == 82 or LA90 == 83 or LA90 == 84 or LA90 == 85 or LA90 == 86 or LA90 == 87 or LA90 == 88 or LA90 == 89: + LA90_70 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 25 or LA90 == 26 or LA90 == 29 or LA90 == 30 or LA90 == 31 or LA90 == 32 or LA90 == 33 or LA90 == 34 or LA90 == 35 or LA90 == 36 or LA90 == 37 or LA90 == 38 or LA90 == 39 or LA90 == 40 or LA90 == 41 or LA90 == 42 or LA90 == 43 or LA90 == 45 or LA90 == 46 or LA90 == 48 or LA90 == 49 or LA90 == 50 or LA90 == 51 or LA90 == 52 or LA90 == 53 or LA90 == 54 or LA90 == 55 or LA90 == 56 or LA90 == 57 or LA90 == 58 or LA90 == 59 or LA90 == 60 or LA90 == 61 or LA90 == 103 or LA90 == 104 or LA90 == 105 or LA90 == 106 or LA90 == 107 or LA90 == 108 or LA90 == 110 or LA90 == 111 or LA90 == 112 or LA90 == 113 or LA90 == 114 or LA90 == 115 or LA90 == 116 or LA90 == 117: + alt90 = 1 + elif LA90 == HEX_LITERAL: + LA90 = self.input.LA(2) + if LA90 == 64: + LA90_87 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 62: + LA90_88 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 75: + LA90_89 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 66: + LA90_90 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 76: + LA90_91 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 72: + LA90_92 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 73: + LA90_93 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 28 or LA90 == 80 or LA90 == 81 or LA90 == 82 or LA90 == 83 or LA90 == 84 or LA90 == 85 or LA90 == 86 or LA90 == 87 or LA90 == 88 or LA90 == 89: + LA90_94 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 70: + LA90_95 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 71: + LA90_96 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 68: + LA90_97 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 69: + LA90_98 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 101 or LA90 == 102: + LA90_99 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 97 or LA90 == 98 or LA90 == 99 or LA90 == 100: + LA90_100 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 95 or LA90 == 96: + LA90_101 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 77: + LA90_102 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 94: + LA90_103 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 93: + LA90_104 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 92: + LA90_105 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 91: + LA90_106 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 90: + LA90_107 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 27: + LA90_108 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 25: + alt90 = 1 + elif LA90 == OCTAL_LITERAL: + LA90 = self.input.LA(2) + if LA90 == 64: + LA90_111 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 62: + LA90_112 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 75: + LA90_113 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 66: + LA90_114 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 76: + LA90_115 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 72: + LA90_116 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 73: + LA90_117 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 70: + LA90_118 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 71: + LA90_119 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 68: + LA90_120 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 69: + LA90_121 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 101 or LA90 == 102: + LA90_122 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 97 or LA90 == 98 or LA90 == 99 or LA90 == 100: + LA90_123 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 95 or LA90 == 96: + LA90_124 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 77: + LA90_125 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 94: + LA90_126 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 93: + LA90_127 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 92: + LA90_128 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 91: + LA90_129 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 90: + LA90_130 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 27: + LA90_131 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 25: + alt90 = 1 + elif LA90 == 28 or LA90 == 80 or LA90 == 81 or LA90 == 82 or LA90 == 83 or LA90 == 84 or LA90 == 85 or LA90 == 86 or LA90 == 87 or LA90 == 88 or LA90 == 89: + LA90_134 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == DECIMAL_LITERAL: + LA90 = self.input.LA(2) + if LA90 == 64: + LA90_135 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 62: + LA90_136 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 75: + LA90_137 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 66: + LA90_138 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 76: + LA90_139 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 72: + LA90_140 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 73: + LA90_141 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 28 or LA90 == 80 or LA90 == 81 or LA90 == 82 or LA90 == 83 or LA90 == 84 or LA90 == 85 or LA90 == 86 or LA90 == 87 or LA90 == 88 or LA90 == 89: + LA90_142 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 70: + LA90_143 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 71: + LA90_144 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 68: + LA90_145 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 69: + LA90_146 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 101 or LA90 == 102: + LA90_147 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 97 or LA90 == 98 or LA90 == 99 or LA90 == 100: + LA90_148 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 95 or LA90 == 96: + LA90_149 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 77: + LA90_150 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 94: + LA90_151 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 93: + LA90_152 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 92: + LA90_153 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 91: + LA90_154 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 90: + LA90_155 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 27: + LA90_156 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 25: + alt90 = 1 + elif LA90 == CHARACTER_LITERAL: + LA90 = self.input.LA(2) + if LA90 == 64: + LA90_159 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 62: + LA90_160 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 75: + LA90_161 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 66: + LA90_162 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 76: + LA90_163 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 72: + LA90_164 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 73: + LA90_165 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 70: + LA90_166 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 71: + LA90_167 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 68: + LA90_168 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 69: + LA90_169 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 101 or LA90 == 102: + LA90_170 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 97 or LA90 == 98 or LA90 == 99 or LA90 == 100: + LA90_171 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 95 or LA90 == 96: + LA90_172 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 77: + LA90_173 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 94: + LA90_174 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 93: + LA90_175 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 92: + LA90_176 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 91: + LA90_177 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 90: + LA90_178 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 27: + LA90_179 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 25: + alt90 = 1 + elif LA90 == 28 or LA90 == 80 or LA90 == 81 or LA90 == 82 or LA90 == 83 or LA90 == 84 or LA90 == 85 or LA90 == 86 or LA90 == 87 or LA90 == 88 or LA90 == 89: + LA90_181 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == STRING_LITERAL: + LA90 = self.input.LA(2) + if LA90 == IDENTIFIER: + LA90_183 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 64: + LA90_184 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 62: + LA90_185 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 75: + LA90_186 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 66: + LA90_187 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 76: + LA90_188 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 72: + LA90_189 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 73: + LA90_190 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 28 or LA90 == 80 or LA90 == 81 or LA90 == 82 or LA90 == 83 or LA90 == 84 or LA90 == 85 or LA90 == 86 or LA90 == 87 or LA90 == 88 or LA90 == 89: + LA90_191 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == STRING_LITERAL: + LA90_192 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 70: + LA90_193 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 71: + LA90_194 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 68: + LA90_195 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 69: + LA90_196 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 101 or LA90 == 102: + LA90_197 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 97 or LA90 == 98 or LA90 == 99 or LA90 == 100: + LA90_198 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 95 or LA90 == 96: + LA90_199 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 77: + LA90_200 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 94: + LA90_201 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 93: + LA90_202 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 92: + LA90_203 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 91: + LA90_204 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 90: + LA90_205 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 27: + LA90_206 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 25: + alt90 = 1 + elif LA90 == FLOATING_POINT_LITERAL: + LA90 = self.input.LA(2) + if LA90 == 64: + LA90_209 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 62: + LA90_210 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 75: + LA90_211 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 66: + LA90_212 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 76: + LA90_213 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 72: + LA90_214 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 73: + LA90_215 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 28 or LA90 == 80 or LA90 == 81 or LA90 == 82 or LA90 == 83 or LA90 == 84 or LA90 == 85 or LA90 == 86 or LA90 == 87 or LA90 == 88 or LA90 == 89: + LA90_216 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 70: + LA90_217 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 71: + LA90_218 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 68: + LA90_219 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 69: + LA90_220 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 101 or LA90 == 102: + LA90_221 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 97 or LA90 == 98 or LA90 == 99 or LA90 == 100: + LA90_222 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 95 or LA90 == 96: + LA90_223 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 77: + LA90_224 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 94: + LA90_225 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 93: + LA90_226 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 92: + LA90_227 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 91: + LA90_228 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 90: + LA90_229 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 27: + LA90_230 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 25: + alt90 = 1 + elif LA90 == 62: + LA90 = self.input.LA(2) + if LA90 == IDENTIFIER: + LA90_233 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == HEX_LITERAL: + LA90_234 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == OCTAL_LITERAL: + LA90_235 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == DECIMAL_LITERAL: + LA90_236 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == CHARACTER_LITERAL: + LA90_237 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == STRING_LITERAL: + LA90_238 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == FLOATING_POINT_LITERAL: + LA90_239 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 62: + LA90_240 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 72: + LA90_241 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 73: + LA90_242 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 66 or LA90 == 68 or LA90 == 69 or LA90 == 77 or LA90 == 78 or LA90 == 79: + LA90_243 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 74: + LA90_244 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 49 or LA90 == 50 or LA90 == 51 or LA90 == 52 or LA90 == 53 or LA90 == 54 or LA90 == 55 or LA90 == 56 or LA90 == 57 or LA90 == 58 or LA90 == 59 or LA90 == 60 or LA90 == 61: + LA90_245 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 34: + LA90_246 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 35: + LA90_247 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 36: + LA90_248 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 37: + LA90_249 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 38: + LA90_250 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 39: + LA90_251 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 40: + LA90_252 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 41: + LA90_253 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 42: + LA90_254 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 45 or LA90 == 46: + LA90_255 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 48: + LA90_256 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 72: + LA90 = self.input.LA(2) + if LA90 == IDENTIFIER: + LA90_257 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == HEX_LITERAL: + LA90_258 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == OCTAL_LITERAL: + LA90_259 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == DECIMAL_LITERAL: + LA90_260 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == CHARACTER_LITERAL: + LA90_261 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == STRING_LITERAL: + LA90_262 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == FLOATING_POINT_LITERAL: + LA90_263 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 62: + LA90_264 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 72: + LA90_265 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 73: + LA90_266 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 66 or LA90 == 68 or LA90 == 69 or LA90 == 77 or LA90 == 78 or LA90 == 79: + LA90_267 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 74: + LA90_268 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 73: + LA90 = self.input.LA(2) + if LA90 == IDENTIFIER: + LA90_269 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == HEX_LITERAL: + LA90_270 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == OCTAL_LITERAL: + LA90_271 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == DECIMAL_LITERAL: + LA90_272 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == CHARACTER_LITERAL: + LA90_273 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == STRING_LITERAL: + LA90_274 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == FLOATING_POINT_LITERAL: + LA90_275 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 62: + LA90_276 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 72: + LA90_277 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 73: + LA90_278 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 66 or LA90 == 68 or LA90 == 69 or LA90 == 77 or LA90 == 78 or LA90 == 79: + LA90_279 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 74: + LA90_280 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 66 or LA90 == 68 or LA90 == 69 or LA90 == 77 or LA90 == 78 or LA90 == 79: + LA90 = self.input.LA(2) + if LA90 == 62: + LA90_281 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == IDENTIFIER: + LA90_282 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == HEX_LITERAL: + LA90_283 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == OCTAL_LITERAL: + LA90_284 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == DECIMAL_LITERAL: + LA90_285 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == CHARACTER_LITERAL: + LA90_286 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == STRING_LITERAL: + LA90_287 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == FLOATING_POINT_LITERAL: + LA90_288 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 72: + LA90_289 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 73: + LA90_290 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 66 or LA90 == 68 or LA90 == 69 or LA90 == 77 or LA90 == 78 or LA90 == 79: + LA90_291 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 74: + LA90_292 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 74: + LA90 = self.input.LA(2) + if LA90 == 62: + LA90_293 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == IDENTIFIER: + LA90_294 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == HEX_LITERAL: + LA90_295 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == OCTAL_LITERAL: + LA90_296 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == DECIMAL_LITERAL: + LA90_297 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == CHARACTER_LITERAL: + LA90_298 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == STRING_LITERAL: + LA90_299 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == FLOATING_POINT_LITERAL: + LA90_300 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 72: + LA90_301 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 73: + LA90_302 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 66 or LA90 == 68 or LA90 == 69 or LA90 == 77 or LA90 == 78 or LA90 == 79: + LA90_303 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + elif LA90 == 74: + LA90_304 = self.input.LA(3) + + if (self.synpred182()) : + alt90 = 1 + if alt90 == 1: + # C.g:0:0: statement_list + self.following.append(self.FOLLOW_statement_list_in_macro_statement2170) + self.statement_list() + self.following.pop() + if self.failed: + return + + + + # C.g:544:49: ( expression )? + alt91 = 2 + LA91_0 = self.input.LA(1) + + if ((IDENTIFIER <= LA91_0 <= FLOATING_POINT_LITERAL) or LA91_0 == 62 or LA91_0 == 66 or (68 <= LA91_0 <= 69) or (72 <= LA91_0 <= 74) or (77 <= LA91_0 <= 79)) : + alt91 = 1 + if alt91 == 1: + # C.g:0:0: expression + self.following.append(self.FOLLOW_expression_in_macro_statement2173) + self.expression() + self.following.pop() + if self.failed: + return + + + + self.match(self.input, 63, self.FOLLOW_63_in_macro_statement2176) + if self.failed: + return + + + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 64, macro_statement_StartIndex) + + pass + + return + + # $ANTLR end macro_statement + + + # $ANTLR start labeled_statement + # C.g:547:1: labeled_statement : ( IDENTIFIER ':' statement | 'case' constant_expression ':' statement | 'default' ':' statement ); + def labeled_statement(self, ): + + labeled_statement_StartIndex = self.input.index() + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 65): + return + + # C.g:548:2: ( IDENTIFIER ':' statement | 'case' constant_expression ':' statement | 'default' ':' statement ) + alt92 = 3 + LA92 = self.input.LA(1) + if LA92 == IDENTIFIER: + alt92 = 1 + elif LA92 == 106: + alt92 = 2 + elif LA92 == 107: + alt92 = 3 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("547:1: labeled_statement : ( IDENTIFIER ':' statement | 'case' constant_expression ':' statement | 'default' ':' statement );", 92, 0, self.input) + + raise nvae + + if alt92 == 1: + # C.g:548:4: IDENTIFIER ':' statement + self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_labeled_statement2188) + if self.failed: + return + self.match(self.input, 47, self.FOLLOW_47_in_labeled_statement2190) + if self.failed: + return + self.following.append(self.FOLLOW_statement_in_labeled_statement2192) + self.statement() + self.following.pop() + if self.failed: + return + + + elif alt92 == 2: + # C.g:549:4: 'case' constant_expression ':' statement + self.match(self.input, 106, self.FOLLOW_106_in_labeled_statement2197) + if self.failed: + return + self.following.append(self.FOLLOW_constant_expression_in_labeled_statement2199) + self.constant_expression() + self.following.pop() + if self.failed: + return + self.match(self.input, 47, self.FOLLOW_47_in_labeled_statement2201) + if self.failed: + return + self.following.append(self.FOLLOW_statement_in_labeled_statement2203) + self.statement() + self.following.pop() + if self.failed: + return + + + elif alt92 == 3: + # C.g:550:4: 'default' ':' statement + self.match(self.input, 107, self.FOLLOW_107_in_labeled_statement2208) + if self.failed: + return + self.match(self.input, 47, self.FOLLOW_47_in_labeled_statement2210) + if self.failed: + return + self.following.append(self.FOLLOW_statement_in_labeled_statement2212) + self.statement() + self.following.pop() + if self.failed: + return + + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 65, labeled_statement_StartIndex) + + pass + + return + + # $ANTLR end labeled_statement + + class compound_statement_return(object): + def __init__(self): + self.start = None + self.stop = None + + + + # $ANTLR start compound_statement + # C.g:553:1: compound_statement : '{' ( declaration )* ( statement_list )? '}' ; + def compound_statement(self, ): + + retval = self.compound_statement_return() + retval.start = self.input.LT(1) + compound_statement_StartIndex = self.input.index() + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 66): + return retval + + # C.g:554:2: ( '{' ( declaration )* ( statement_list )? '}' ) + # C.g:554:4: '{' ( declaration )* ( statement_list )? '}' + self.match(self.input, 43, self.FOLLOW_43_in_compound_statement2223) + if self.failed: + return retval + # C.g:554:8: ( declaration )* + while True: #loop93 + alt93 = 2 + LA93 = self.input.LA(1) + if LA93 == IDENTIFIER: + LA93 = self.input.LA(2) + if LA93 == 62: + LA93_44 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == IDENTIFIER: + LA93_47 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 66: + LA93_48 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 58: + LA93_49 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 59: + LA93_50 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 60: + LA93_51 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 25: + LA93_52 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 29 or LA93 == 30 or LA93 == 31 or LA93 == 32 or LA93 == 33: + LA93_53 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 34: + LA93_54 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 35: + LA93_55 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 36: + LA93_56 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 37: + LA93_57 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 38: + LA93_58 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 39: + LA93_59 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 40: + LA93_60 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 41: + LA93_61 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 42: + LA93_62 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 45 or LA93 == 46: + LA93_63 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 48: + LA93_64 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57 or LA93 == 61: + LA93_65 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + + elif LA93 == 26: + LA93 = self.input.LA(2) + if LA93 == 29 or LA93 == 30 or LA93 == 31 or LA93 == 32 or LA93 == 33: + LA93_86 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 34: + LA93_87 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 35: + LA93_88 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 36: + LA93_89 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 37: + LA93_90 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 38: + LA93_91 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 39: + LA93_92 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 40: + LA93_93 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 41: + LA93_94 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 42: + LA93_95 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 45 or LA93 == 46: + LA93_96 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 48: + LA93_97 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == IDENTIFIER: + LA93_98 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 58: + LA93_99 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 66: + LA93_100 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 59: + LA93_101 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 60: + LA93_102 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57 or LA93 == 61: + LA93_103 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 62: + LA93_104 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + + elif LA93 == 29 or LA93 == 30 or LA93 == 31 or LA93 == 32 or LA93 == 33: + LA93 = self.input.LA(2) + if LA93 == 66: + LA93_105 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 58: + LA93_106 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 59: + LA93_107 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 60: + LA93_108 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == IDENTIFIER: + LA93_109 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 62: + LA93_110 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 25: + LA93_111 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 29 or LA93 == 30 or LA93 == 31 or LA93 == 32 or LA93 == 33: + LA93_112 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 34: + LA93_113 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 35: + LA93_114 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 36: + LA93_115 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 37: + LA93_116 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 38: + LA93_117 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 39: + LA93_118 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 40: + LA93_119 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 41: + LA93_120 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 42: + LA93_121 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 45 or LA93 == 46: + LA93_122 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 48: + LA93_123 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57 or LA93 == 61: + LA93_124 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + + elif LA93 == 34: + LA93 = self.input.LA(2) + if LA93 == 66: + LA93_125 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 58: + LA93_126 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 59: + LA93_127 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 60: + LA93_128 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == IDENTIFIER: + LA93_129 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 62: + LA93_130 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 25: + LA93_131 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 29 or LA93 == 30 or LA93 == 31 or LA93 == 32 or LA93 == 33: + LA93_132 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 34: + LA93_133 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 35: + LA93_134 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 36: + LA93_135 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 37: + LA93_136 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 38: + LA93_137 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 39: + LA93_138 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 40: + LA93_139 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 41: + LA93_140 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 42: + LA93_141 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 45 or LA93 == 46: + LA93_142 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 48: + LA93_143 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57 or LA93 == 61: + LA93_144 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + + elif LA93 == 35: + LA93 = self.input.LA(2) + if LA93 == 66: + LA93_145 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 58: + LA93_146 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 59: + LA93_147 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 60: + LA93_148 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == IDENTIFIER: + LA93_149 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 62: + LA93_150 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 25: + LA93_151 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 29 or LA93 == 30 or LA93 == 31 or LA93 == 32 or LA93 == 33: + LA93_152 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 34: + LA93_153 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 35: + LA93_154 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 36: + LA93_155 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 37: + LA93_156 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 38: + LA93_157 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 39: + LA93_158 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 40: + LA93_159 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 41: + LA93_160 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 42: + LA93_161 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 45 or LA93 == 46: + LA93_162 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 48: + LA93_163 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57 or LA93 == 61: + LA93_164 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + + elif LA93 == 36: + LA93 = self.input.LA(2) + if LA93 == 66: + LA93_165 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 58: + LA93_166 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 59: + LA93_167 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 60: + LA93_168 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == IDENTIFIER: + LA93_169 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 62: + LA93_170 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 25: + LA93_171 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 29 or LA93 == 30 or LA93 == 31 or LA93 == 32 or LA93 == 33: + LA93_172 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 34: + LA93_173 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 35: + LA93_174 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 36: + LA93_175 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 37: + LA93_176 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 38: + LA93_177 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 39: + LA93_178 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 40: + LA93_179 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 41: + LA93_180 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 42: + LA93_181 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 45 or LA93 == 46: + LA93_182 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 48: + LA93_183 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57 or LA93 == 61: + LA93_184 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + + elif LA93 == 37: + LA93 = self.input.LA(2) + if LA93 == 66: + LA93_185 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 58: + LA93_186 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 59: + LA93_187 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 60: + LA93_188 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == IDENTIFIER: + LA93_189 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 62: + LA93_190 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 25: + LA93_191 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 29 or LA93 == 30 or LA93 == 31 or LA93 == 32 or LA93 == 33: + LA93_192 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 34: + LA93_193 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 35: + LA93_194 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 36: + LA93_195 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 37: + LA93_196 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 38: + LA93_197 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 39: + LA93_198 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 40: + LA93_199 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 41: + LA93_200 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 42: + LA93_201 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 45 or LA93 == 46: + LA93_202 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 48: + LA93_203 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57 or LA93 == 61: + LA93_204 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + + elif LA93 == 38: + LA93 = self.input.LA(2) + if LA93 == 66: + LA93_205 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 58: + LA93_206 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 59: + LA93_207 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 60: + LA93_208 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == IDENTIFIER: + LA93_209 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 62: + LA93_210 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 25: + LA93_211 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 29 or LA93 == 30 or LA93 == 31 or LA93 == 32 or LA93 == 33: + LA93_212 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 34: + LA93_213 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 35: + LA93_214 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 36: + LA93_215 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 37: + LA93_216 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 38: + LA93_217 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 39: + LA93_218 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 40: + LA93_219 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 41: + LA93_220 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 42: + LA93_221 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 45 or LA93 == 46: + LA93_222 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 48: + LA93_223 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57 or LA93 == 61: + LA93_224 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + + elif LA93 == 39: + LA93 = self.input.LA(2) + if LA93 == 66: + LA93_225 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 58: + LA93_226 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 59: + LA93_227 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 60: + LA93_228 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == IDENTIFIER: + LA93_229 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 62: + LA93_230 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 25: + LA93_231 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 29 or LA93 == 30 or LA93 == 31 or LA93 == 32 or LA93 == 33: + LA93_232 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 34: + LA93_233 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 35: + LA93_234 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 36: + LA93_235 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 37: + LA93_236 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 38: + LA93_237 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 39: + LA93_238 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 40: + LA93_239 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 41: + LA93_240 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 42: + LA93_241 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 45 or LA93 == 46: + LA93_242 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 48: + LA93_243 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57 or LA93 == 61: + LA93_244 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + + elif LA93 == 40: + LA93 = self.input.LA(2) + if LA93 == 66: + LA93_245 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 58: + LA93_246 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 59: + LA93_247 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 60: + LA93_248 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == IDENTIFIER: + LA93_249 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 62: + LA93_250 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 25: + LA93_251 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 29 or LA93 == 30 or LA93 == 31 or LA93 == 32 or LA93 == 33: + LA93_252 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 34: + LA93_253 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 35: + LA93_254 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 36: + LA93_255 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 37: + LA93_256 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 38: + LA93_257 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 39: + LA93_258 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 40: + LA93_259 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 41: + LA93_260 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 42: + LA93_261 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 45 or LA93 == 46: + LA93_262 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 48: + LA93_263 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57 or LA93 == 61: + LA93_264 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + + elif LA93 == 41: + LA93 = self.input.LA(2) + if LA93 == 66: + LA93_265 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 58: + LA93_266 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 59: + LA93_267 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 60: + LA93_268 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == IDENTIFIER: + LA93_269 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 62: + LA93_270 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 25: + LA93_271 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 29 or LA93 == 30 or LA93 == 31 or LA93 == 32 or LA93 == 33: + LA93_272 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 34: + LA93_273 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 35: + LA93_274 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 36: + LA93_275 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 37: + LA93_276 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 38: + LA93_277 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 39: + LA93_278 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 40: + LA93_279 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 41: + LA93_280 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 42: + LA93_281 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 45 or LA93 == 46: + LA93_282 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 48: + LA93_283 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57 or LA93 == 61: + LA93_284 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + + elif LA93 == 42: + LA93 = self.input.LA(2) + if LA93 == 66: + LA93_285 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 58: + LA93_286 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 59: + LA93_287 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 60: + LA93_288 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == IDENTIFIER: + LA93_289 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 62: + LA93_290 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 25: + LA93_291 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 29 or LA93 == 30 or LA93 == 31 or LA93 == 32 or LA93 == 33: + LA93_292 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 34: + LA93_293 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 35: + LA93_294 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 36: + LA93_295 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 37: + LA93_296 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 38: + LA93_297 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 39: + LA93_298 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 40: + LA93_299 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 41: + LA93_300 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 42: + LA93_301 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 45 or LA93 == 46: + LA93_302 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 48: + LA93_303 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57 or LA93 == 61: + LA93_304 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + + elif LA93 == 45 or LA93 == 46: + LA93_40 = self.input.LA(2) + + if (LA93_40 == IDENTIFIER) : + LA93_305 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif (LA93_40 == 43) : + LA93_306 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + + + elif LA93 == 48: + LA93_41 = self.input.LA(2) + + if (LA93_41 == 43) : + LA93_307 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif (LA93_41 == IDENTIFIER) : + LA93_308 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + + + elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57 or LA93 == 58 or LA93 == 59 or LA93 == 60 or LA93 == 61: + LA93 = self.input.LA(2) + if LA93 == 66: + LA93_309 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 58: + LA93_310 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 59: + LA93_311 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 60: + LA93_312 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == IDENTIFIER: + LA93_313 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 62: + LA93_314 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 25: + LA93_315 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 29 or LA93 == 30 or LA93 == 31 or LA93 == 32 or LA93 == 33: + LA93_316 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 34: + LA93_317 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 35: + LA93_318 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 36: + LA93_319 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 37: + LA93_320 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 38: + LA93_321 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 39: + LA93_322 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 40: + LA93_323 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 41: + LA93_324 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 42: + LA93_325 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 45 or LA93 == 46: + LA93_326 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 48: + LA93_327 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + elif LA93 == 49 or LA93 == 50 or LA93 == 51 or LA93 == 52 or LA93 == 53 or LA93 == 54 or LA93 == 55 or LA93 == 56 or LA93 == 57 or LA93 == 61: + LA93_328 = self.input.LA(3) + + if (self.synpred186()) : + alt93 = 1 + + + + + if alt93 == 1: + # C.g:0:0: declaration + self.following.append(self.FOLLOW_declaration_in_compound_statement2225) + self.declaration() + self.following.pop() + if self.failed: + return retval + + + else: + break #loop93 + + + # C.g:554:21: ( statement_list )? + alt94 = 2 + LA94_0 = self.input.LA(1) + + if ((IDENTIFIER <= LA94_0 <= FLOATING_POINT_LITERAL) or (25 <= LA94_0 <= 26) or (29 <= LA94_0 <= 43) or (45 <= LA94_0 <= 46) or (48 <= LA94_0 <= 62) or LA94_0 == 66 or (68 <= LA94_0 <= 69) or (72 <= LA94_0 <= 74) or (77 <= LA94_0 <= 79) or (103 <= LA94_0 <= 108) or (110 <= LA94_0 <= 117)) : + alt94 = 1 + if alt94 == 1: + # C.g:0:0: statement_list + self.following.append(self.FOLLOW_statement_list_in_compound_statement2228) + self.statement_list() + self.following.pop() + if self.failed: + return retval + + + + self.match(self.input, 44, self.FOLLOW_44_in_compound_statement2231) + if self.failed: + return retval + + + + retval.stop = self.input.LT(-1) + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 66, compound_statement_StartIndex) + + pass + + return retval + + # $ANTLR end compound_statement + + + # $ANTLR start statement_list + # C.g:557:1: statement_list : ( statement )+ ; + def statement_list(self, ): + + statement_list_StartIndex = self.input.index() + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 67): + return + + # C.g:558:2: ( ( statement )+ ) + # C.g:558:4: ( statement )+ + # C.g:558:4: ( statement )+ + cnt95 = 0 + while True: #loop95 + alt95 = 2 + LA95 = self.input.LA(1) + if LA95 == IDENTIFIER: + LA95 = self.input.LA(2) + if LA95 == 62: + LA95_46 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 25 or LA95 == 29 or LA95 == 30 or LA95 == 31 or LA95 == 32 or LA95 == 33 or LA95 == 34 or LA95 == 35 or LA95 == 36 or LA95 == 37 or LA95 == 38 or LA95 == 39 or LA95 == 40 or LA95 == 41 or LA95 == 42 or LA95 == 45 or LA95 == 46 or LA95 == 47 or LA95 == 48 or LA95 == 49 or LA95 == 50 or LA95 == 51 or LA95 == 52 or LA95 == 53 or LA95 == 54 or LA95 == 55 or LA95 == 56 or LA95 == 57 or LA95 == 58 or LA95 == 59 or LA95 == 60 or LA95 == 61: + alt95 = 1 + elif LA95 == STRING_LITERAL: + LA95_48 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == IDENTIFIER: + LA95_49 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 64: + LA95_50 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 75: + LA95_51 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 66: + LA95_52 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 76: + LA95_53 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 72: + LA95_54 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 73: + LA95_55 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 70: + LA95_56 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 71: + LA95_57 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 68: + LA95_58 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 69: + LA95_59 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 101 or LA95 == 102: + LA95_60 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 97 or LA95 == 98 or LA95 == 99 or LA95 == 100: + LA95_61 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 95 or LA95 == 96: + LA95_62 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 77: + LA95_63 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 94: + LA95_64 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 93: + LA95_65 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 92: + LA95_66 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 91: + LA95_67 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 90: + LA95_68 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 27: + LA95_69 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 28 or LA95 == 80 or LA95 == 81 or LA95 == 82 or LA95 == 83 or LA95 == 84 or LA95 == 85 or LA95 == 86 or LA95 == 87 or LA95 == 88 or LA95 == 89: + LA95_88 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + + elif LA95 == HEX_LITERAL: + LA95 = self.input.LA(2) + if LA95 == 64: + LA95_89 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 62: + LA95_90 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 75: + LA95_91 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 66: + LA95_92 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 76: + LA95_93 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 72: + LA95_94 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 73: + LA95_95 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 28 or LA95 == 80 or LA95 == 81 or LA95 == 82 or LA95 == 83 or LA95 == 84 or LA95 == 85 or LA95 == 86 or LA95 == 87 or LA95 == 88 or LA95 == 89: + LA95_96 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 70: + LA95_97 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 71: + LA95_98 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 68: + LA95_99 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 69: + LA95_100 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 101 or LA95 == 102: + LA95_101 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 97 or LA95 == 98 or LA95 == 99 or LA95 == 100: + LA95_102 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 95 or LA95 == 96: + LA95_103 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 77: + LA95_104 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 94: + LA95_105 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 93: + LA95_106 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 92: + LA95_107 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 91: + LA95_108 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 90: + LA95_109 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 27: + LA95_110 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 25: + alt95 = 1 + + elif LA95 == OCTAL_LITERAL: + LA95 = self.input.LA(2) + if LA95 == 64: + LA95_113 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 62: + LA95_114 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 75: + LA95_115 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 66: + LA95_116 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 76: + LA95_117 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 72: + LA95_118 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 73: + LA95_119 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 70: + LA95_120 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 71: + LA95_121 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 68: + LA95_122 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 69: + LA95_123 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 101 or LA95 == 102: + LA95_124 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 97 or LA95 == 98 or LA95 == 99 or LA95 == 100: + LA95_125 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 95 or LA95 == 96: + LA95_126 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 77: + LA95_127 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 94: + LA95_128 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 93: + LA95_129 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 92: + LA95_130 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 91: + LA95_131 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 90: + LA95_132 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 27: + LA95_133 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 28 or LA95 == 80 or LA95 == 81 or LA95 == 82 or LA95 == 83 or LA95 == 84 or LA95 == 85 or LA95 == 86 or LA95 == 87 or LA95 == 88 or LA95 == 89: + LA95_135 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 25: + alt95 = 1 + + elif LA95 == DECIMAL_LITERAL: + LA95 = self.input.LA(2) + if LA95 == 64: + LA95_137 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 62: + LA95_138 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 75: + LA95_139 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 66: + LA95_140 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 76: + LA95_141 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 72: + LA95_142 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 73: + LA95_143 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 28 or LA95 == 80 or LA95 == 81 or LA95 == 82 or LA95 == 83 or LA95 == 84 or LA95 == 85 or LA95 == 86 or LA95 == 87 or LA95 == 88 or LA95 == 89: + LA95_144 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 70: + LA95_145 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 71: + LA95_146 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 68: + LA95_147 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 69: + LA95_148 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 101 or LA95 == 102: + LA95_149 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 97 or LA95 == 98 or LA95 == 99 or LA95 == 100: + LA95_150 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 95 or LA95 == 96: + LA95_151 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 77: + LA95_152 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 94: + LA95_153 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 93: + LA95_154 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 92: + LA95_155 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 91: + LA95_156 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 90: + LA95_157 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 27: + LA95_158 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 25: + alt95 = 1 + + elif LA95 == CHARACTER_LITERAL: + LA95 = self.input.LA(2) + if LA95 == 64: + LA95_161 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 62: + LA95_162 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 75: + LA95_163 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 66: + LA95_164 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 76: + LA95_165 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 72: + LA95_166 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 73: + LA95_167 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 28 or LA95 == 80 or LA95 == 81 or LA95 == 82 or LA95 == 83 or LA95 == 84 or LA95 == 85 or LA95 == 86 or LA95 == 87 or LA95 == 88 or LA95 == 89: + LA95_168 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 70: + LA95_169 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 71: + LA95_170 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 68: + LA95_171 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 69: + LA95_172 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 101 or LA95 == 102: + LA95_173 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 97 or LA95 == 98 or LA95 == 99 or LA95 == 100: + LA95_174 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 95 or LA95 == 96: + LA95_175 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 77: + LA95_176 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 94: + LA95_177 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 93: + LA95_178 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 92: + LA95_179 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 91: + LA95_180 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 90: + LA95_181 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 27: + LA95_182 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 25: + alt95 = 1 + + elif LA95 == STRING_LITERAL: + LA95 = self.input.LA(2) + if LA95 == IDENTIFIER: + LA95_185 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 64: + LA95_186 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 62: + LA95_187 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 75: + LA95_188 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 66: + LA95_189 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 76: + LA95_190 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 72: + LA95_191 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 73: + LA95_192 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 70: + LA95_193 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 71: + LA95_194 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 68: + LA95_195 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 69: + LA95_196 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 101 or LA95 == 102: + LA95_197 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 97 or LA95 == 98 or LA95 == 99 or LA95 == 100: + LA95_198 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 95 or LA95 == 96: + LA95_199 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 77: + LA95_200 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 94: + LA95_201 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 93: + LA95_202 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 92: + LA95_203 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 91: + LA95_204 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 90: + LA95_205 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 27: + LA95_206 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 25: + alt95 = 1 + elif LA95 == STRING_LITERAL: + LA95_208 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 28 or LA95 == 80 or LA95 == 81 or LA95 == 82 or LA95 == 83 or LA95 == 84 or LA95 == 85 or LA95 == 86 or LA95 == 87 or LA95 == 88 or LA95 == 89: + LA95_209 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + + elif LA95 == FLOATING_POINT_LITERAL: + LA95 = self.input.LA(2) + if LA95 == 64: + LA95_211 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 62: + LA95_212 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 75: + LA95_213 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 66: + LA95_214 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 76: + LA95_215 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 72: + LA95_216 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 73: + LA95_217 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 70: + LA95_218 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 71: + LA95_219 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 68: + LA95_220 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 69: + LA95_221 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 101 or LA95 == 102: + LA95_222 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 97 or LA95 == 98 or LA95 == 99 or LA95 == 100: + LA95_223 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 95 or LA95 == 96: + LA95_224 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 77: + LA95_225 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 94: + LA95_226 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 93: + LA95_227 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 92: + LA95_228 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 91: + LA95_229 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 90: + LA95_230 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 27: + LA95_231 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 25: + alt95 = 1 + elif LA95 == 28 or LA95 == 80 or LA95 == 81 or LA95 == 82 or LA95 == 83 or LA95 == 84 or LA95 == 85 or LA95 == 86 or LA95 == 87 or LA95 == 88 or LA95 == 89: + LA95_234 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + + elif LA95 == 62: + LA95 = self.input.LA(2) + if LA95 == IDENTIFIER: + LA95_235 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == HEX_LITERAL: + LA95_236 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == OCTAL_LITERAL: + LA95_237 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == DECIMAL_LITERAL: + LA95_238 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == CHARACTER_LITERAL: + LA95_239 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == STRING_LITERAL: + LA95_240 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == FLOATING_POINT_LITERAL: + LA95_241 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 62: + LA95_242 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 72: + LA95_243 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 73: + LA95_244 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 66 or LA95 == 68 or LA95 == 69 or LA95 == 77 or LA95 == 78 or LA95 == 79: + LA95_245 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 74: + LA95_246 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 49 or LA95 == 50 or LA95 == 51 or LA95 == 52 or LA95 == 53 or LA95 == 54 or LA95 == 55 or LA95 == 56 or LA95 == 57 or LA95 == 58 or LA95 == 59 or LA95 == 60 or LA95 == 61: + LA95_247 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 34: + LA95_248 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 35: + LA95_249 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 36: + LA95_250 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 37: + LA95_251 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 38: + LA95_252 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 39: + LA95_253 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 40: + LA95_254 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 41: + LA95_255 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 42: + LA95_256 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 45 or LA95 == 46: + LA95_257 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 48: + LA95_258 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + + elif LA95 == 72: + LA95 = self.input.LA(2) + if LA95 == IDENTIFIER: + LA95_259 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == HEX_LITERAL: + LA95_260 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == OCTAL_LITERAL: + LA95_261 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == DECIMAL_LITERAL: + LA95_262 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == CHARACTER_LITERAL: + LA95_263 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == STRING_LITERAL: + LA95_264 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == FLOATING_POINT_LITERAL: + LA95_265 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 62: + LA95_266 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 72: + LA95_267 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 73: + LA95_268 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 66 or LA95 == 68 or LA95 == 69 or LA95 == 77 or LA95 == 78 or LA95 == 79: + LA95_269 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 74: + LA95_270 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + + elif LA95 == 73: + LA95 = self.input.LA(2) + if LA95 == IDENTIFIER: + LA95_271 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == HEX_LITERAL: + LA95_272 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == OCTAL_LITERAL: + LA95_273 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == DECIMAL_LITERAL: + LA95_274 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == CHARACTER_LITERAL: + LA95_275 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == STRING_LITERAL: + LA95_276 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == FLOATING_POINT_LITERAL: + LA95_277 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 62: + LA95_278 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 72: + LA95_279 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 73: + LA95_280 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 66 or LA95 == 68 or LA95 == 69 or LA95 == 77 or LA95 == 78 or LA95 == 79: + LA95_281 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 74: + LA95_282 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + + elif LA95 == 66 or LA95 == 68 or LA95 == 69 or LA95 == 77 or LA95 == 78 or LA95 == 79: + LA95 = self.input.LA(2) + if LA95 == 62: + LA95_283 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == IDENTIFIER: + LA95_284 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == HEX_LITERAL: + LA95_285 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == OCTAL_LITERAL: + LA95_286 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == DECIMAL_LITERAL: + LA95_287 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == CHARACTER_LITERAL: + LA95_288 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == STRING_LITERAL: + LA95_289 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == FLOATING_POINT_LITERAL: + LA95_290 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 72: + LA95_291 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 73: + LA95_292 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 66 or LA95 == 68 or LA95 == 69 or LA95 == 77 or LA95 == 78 or LA95 == 79: + LA95_293 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 74: + LA95_294 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + + elif LA95 == 74: + LA95 = self.input.LA(2) + if LA95 == 62: + LA95_295 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == IDENTIFIER: + LA95_296 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == HEX_LITERAL: + LA95_297 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == OCTAL_LITERAL: + LA95_298 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == DECIMAL_LITERAL: + LA95_299 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == CHARACTER_LITERAL: + LA95_300 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == STRING_LITERAL: + LA95_301 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == FLOATING_POINT_LITERAL: + LA95_302 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 72: + LA95_303 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 73: + LA95_304 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 66 or LA95 == 68 or LA95 == 69 or LA95 == 77 or LA95 == 78 or LA95 == 79: + LA95_305 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + elif LA95 == 74: + LA95_306 = self.input.LA(3) + + if (self.synpred188()) : + alt95 = 1 + + + + elif LA95 == 25 or LA95 == 26 or LA95 == 29 or LA95 == 30 or LA95 == 31 or LA95 == 32 or LA95 == 33 or LA95 == 34 or LA95 == 35 or LA95 == 36 or LA95 == 37 or LA95 == 38 or LA95 == 39 or LA95 == 40 or LA95 == 41 or LA95 == 42 or LA95 == 43 or LA95 == 45 or LA95 == 46 or LA95 == 48 or LA95 == 49 or LA95 == 50 or LA95 == 51 or LA95 == 52 or LA95 == 53 or LA95 == 54 or LA95 == 55 or LA95 == 56 or LA95 == 57 or LA95 == 58 or LA95 == 59 or LA95 == 60 or LA95 == 61 or LA95 == 103 or LA95 == 104 or LA95 == 105 or LA95 == 106 or LA95 == 107 or LA95 == 108 or LA95 == 110 or LA95 == 111 or LA95 == 112 or LA95 == 113 or LA95 == 114 or LA95 == 115 or LA95 == 116 or LA95 == 117: + alt95 = 1 + + if alt95 == 1: + # C.g:0:0: statement + self.following.append(self.FOLLOW_statement_in_statement_list2242) + self.statement() + self.following.pop() + if self.failed: + return + + + else: + if cnt95 >= 1: + break #loop95 + + if self.backtracking > 0: + self.failed = True + return + + eee = EarlyExitException(95, self.input) + raise eee + + cnt95 += 1 + + + + + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 67, statement_list_StartIndex) + + pass + + return + + # $ANTLR end statement_list + + class expression_statement_return(object): + def __init__(self): + self.start = None + self.stop = None + + + + # $ANTLR start expression_statement + # C.g:561:1: expression_statement : ( ';' | expression ';' ); + def expression_statement(self, ): + + retval = self.expression_statement_return() + retval.start = self.input.LT(1) + expression_statement_StartIndex = self.input.index() + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 68): + return retval + + # C.g:562:2: ( ';' | expression ';' ) + alt96 = 2 + LA96_0 = self.input.LA(1) + + if (LA96_0 == 25) : + alt96 = 1 + elif ((IDENTIFIER <= LA96_0 <= FLOATING_POINT_LITERAL) or LA96_0 == 62 or LA96_0 == 66 or (68 <= LA96_0 <= 69) or (72 <= LA96_0 <= 74) or (77 <= LA96_0 <= 79)) : + alt96 = 2 + else: + if self.backtracking > 0: + self.failed = True + return retval + + nvae = NoViableAltException("561:1: expression_statement : ( ';' | expression ';' );", 96, 0, self.input) + + raise nvae + + if alt96 == 1: + # C.g:562:4: ';' + self.match(self.input, 25, self.FOLLOW_25_in_expression_statement2254) + if self.failed: + return retval + + + elif alt96 == 2: + # C.g:563:4: expression ';' + self.following.append(self.FOLLOW_expression_in_expression_statement2259) + self.expression() + self.following.pop() + if self.failed: + return retval + self.match(self.input, 25, self.FOLLOW_25_in_expression_statement2261) + if self.failed: + return retval + + + retval.stop = self.input.LT(-1) + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 68, expression_statement_StartIndex) + + pass + + return retval + + # $ANTLR end expression_statement + + + # $ANTLR start selection_statement + # C.g:566:1: selection_statement : ( 'if' '(' e= expression ')' statement ( options {k=1; backtrack=false; } : 'else' statement )? | 'switch' '(' expression ')' statement ); + def selection_statement(self, ): + + selection_statement_StartIndex = self.input.index() + e = None + + + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 69): + return + + # C.g:567:2: ( 'if' '(' e= expression ')' statement ( options {k=1; backtrack=false; } : 'else' statement )? | 'switch' '(' expression ')' statement ) + alt98 = 2 + LA98_0 = self.input.LA(1) + + if (LA98_0 == 108) : + alt98 = 1 + elif (LA98_0 == 110) : + alt98 = 2 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("566:1: selection_statement : ( 'if' '(' e= expression ')' statement ( options {k=1; backtrack=false; } : 'else' statement )? | 'switch' '(' expression ')' statement );", 98, 0, self.input) + + raise nvae + + if alt98 == 1: + # C.g:567:4: 'if' '(' e= expression ')' statement ( options {k=1; backtrack=false; } : 'else' statement )? + self.match(self.input, 108, self.FOLLOW_108_in_selection_statement2272) + if self.failed: + return + self.match(self.input, 62, self.FOLLOW_62_in_selection_statement2274) + if self.failed: + return + self.following.append(self.FOLLOW_expression_in_selection_statement2278) + e = self.expression() + self.following.pop() + if self.failed: + return + self.match(self.input, 63, self.FOLLOW_63_in_selection_statement2280) + if self.failed: + return + if self.backtracking == 0: + self.StorePredicateExpression(e.start.line, e.start.charPositionInLine, e.stop.line, e.stop.charPositionInLine, self.input.toString(e.start,e.stop)) + + self.following.append(self.FOLLOW_statement_in_selection_statement2284) + self.statement() + self.following.pop() + if self.failed: + return + # C.g:567:167: ( options {k=1; backtrack=false; } : 'else' statement )? + alt97 = 2 + LA97_0 = self.input.LA(1) + + if (LA97_0 == 109) : + alt97 = 1 + if alt97 == 1: + # C.g:567:200: 'else' statement + self.match(self.input, 109, self.FOLLOW_109_in_selection_statement2299) + if self.failed: + return + self.following.append(self.FOLLOW_statement_in_selection_statement2301) + self.statement() + self.following.pop() + if self.failed: + return + + + + + + elif alt98 == 2: + # C.g:568:4: 'switch' '(' expression ')' statement + self.match(self.input, 110, self.FOLLOW_110_in_selection_statement2308) + if self.failed: + return + self.match(self.input, 62, self.FOLLOW_62_in_selection_statement2310) + if self.failed: + return + self.following.append(self.FOLLOW_expression_in_selection_statement2312) + self.expression() + self.following.pop() + if self.failed: + return + self.match(self.input, 63, self.FOLLOW_63_in_selection_statement2314) + if self.failed: + return + self.following.append(self.FOLLOW_statement_in_selection_statement2316) + self.statement() + self.following.pop() + if self.failed: + return + + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 69, selection_statement_StartIndex) + + pass + + return + + # $ANTLR end selection_statement + + + # $ANTLR start iteration_statement + # C.g:571:1: iteration_statement : ( 'while' '(' e= expression ')' statement | 'do' statement 'while' '(' e= expression ')' ';' | 'for' '(' expression_statement e= expression_statement ( expression )? ')' statement ); + def iteration_statement(self, ): + + iteration_statement_StartIndex = self.input.index() + e = None + + + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 70): + return + + # C.g:572:2: ( 'while' '(' e= expression ')' statement | 'do' statement 'while' '(' e= expression ')' ';' | 'for' '(' expression_statement e= expression_statement ( expression )? ')' statement ) + alt100 = 3 + LA100 = self.input.LA(1) + if LA100 == 111: + alt100 = 1 + elif LA100 == 112: + alt100 = 2 + elif LA100 == 113: + alt100 = 3 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("571:1: iteration_statement : ( 'while' '(' e= expression ')' statement | 'do' statement 'while' '(' e= expression ')' ';' | 'for' '(' expression_statement e= expression_statement ( expression )? ')' statement );", 100, 0, self.input) + + raise nvae + + if alt100 == 1: + # C.g:572:4: 'while' '(' e= expression ')' statement + self.match(self.input, 111, self.FOLLOW_111_in_iteration_statement2327) + if self.failed: + return + self.match(self.input, 62, self.FOLLOW_62_in_iteration_statement2329) + if self.failed: + return + self.following.append(self.FOLLOW_expression_in_iteration_statement2333) + e = self.expression() + self.following.pop() + if self.failed: + return + self.match(self.input, 63, self.FOLLOW_63_in_iteration_statement2335) + if self.failed: + return + self.following.append(self.FOLLOW_statement_in_iteration_statement2337) + self.statement() + self.following.pop() + if self.failed: + return + if self.backtracking == 0: + self.StorePredicateExpression(e.start.line, e.start.charPositionInLine, e.stop.line, e.stop.charPositionInLine, self.input.toString(e.start,e.stop)) + + + + elif alt100 == 2: + # C.g:573:4: 'do' statement 'while' '(' e= expression ')' ';' + self.match(self.input, 112, self.FOLLOW_112_in_iteration_statement2344) + if self.failed: + return + self.following.append(self.FOLLOW_statement_in_iteration_statement2346) + self.statement() + self.following.pop() + if self.failed: + return + self.match(self.input, 111, self.FOLLOW_111_in_iteration_statement2348) + if self.failed: + return + self.match(self.input, 62, self.FOLLOW_62_in_iteration_statement2350) + if self.failed: + return + self.following.append(self.FOLLOW_expression_in_iteration_statement2354) + e = self.expression() + self.following.pop() + if self.failed: + return + self.match(self.input, 63, self.FOLLOW_63_in_iteration_statement2356) + if self.failed: + return + self.match(self.input, 25, self.FOLLOW_25_in_iteration_statement2358) + if self.failed: + return + if self.backtracking == 0: + self.StorePredicateExpression(e.start.line, e.start.charPositionInLine, e.stop.line, e.stop.charPositionInLine, self.input.toString(e.start,e.stop)) + + + + elif alt100 == 3: + # C.g:574:4: 'for' '(' expression_statement e= expression_statement ( expression )? ')' statement + self.match(self.input, 113, self.FOLLOW_113_in_iteration_statement2365) + if self.failed: + return + self.match(self.input, 62, self.FOLLOW_62_in_iteration_statement2367) + if self.failed: + return + self.following.append(self.FOLLOW_expression_statement_in_iteration_statement2369) + self.expression_statement() + self.following.pop() + if self.failed: + return + self.following.append(self.FOLLOW_expression_statement_in_iteration_statement2373) + e = self.expression_statement() + self.following.pop() + if self.failed: + return + # C.g:574:58: ( expression )? + alt99 = 2 + LA99_0 = self.input.LA(1) + + if ((IDENTIFIER <= LA99_0 <= FLOATING_POINT_LITERAL) or LA99_0 == 62 or LA99_0 == 66 or (68 <= LA99_0 <= 69) or (72 <= LA99_0 <= 74) or (77 <= LA99_0 <= 79)) : + alt99 = 1 + if alt99 == 1: + # C.g:0:0: expression + self.following.append(self.FOLLOW_expression_in_iteration_statement2375) + self.expression() + self.following.pop() + if self.failed: + return + + + + self.match(self.input, 63, self.FOLLOW_63_in_iteration_statement2378) + if self.failed: + return + self.following.append(self.FOLLOW_statement_in_iteration_statement2380) + self.statement() + self.following.pop() + if self.failed: + return + if self.backtracking == 0: + self.StorePredicateExpression(e.start.line, e.start.charPositionInLine, e.stop.line, e.stop.charPositionInLine, self.input.toString(e.start,e.stop)) + + + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 70, iteration_statement_StartIndex) + + pass + + return + + # $ANTLR end iteration_statement + + + # $ANTLR start jump_statement + # C.g:577:1: jump_statement : ( 'goto' IDENTIFIER ';' | 'continue' ';' | 'break' ';' | 'return' ';' | 'return' expression ';' ); + def jump_statement(self, ): + + jump_statement_StartIndex = self.input.index() + try: + try: + if self.backtracking > 0 and self.alreadyParsedRule(self.input, 71): + return + + # C.g:578:2: ( 'goto' IDENTIFIER ';' | 'continue' ';' | 'break' ';' | 'return' ';' | 'return' expression ';' ) + alt101 = 5 + LA101 = self.input.LA(1) + if LA101 == 114: + alt101 = 1 + elif LA101 == 115: + alt101 = 2 + elif LA101 == 116: + alt101 = 3 + elif LA101 == 117: + LA101_4 = self.input.LA(2) + + if (LA101_4 == 25) : + alt101 = 4 + elif ((IDENTIFIER <= LA101_4 <= FLOATING_POINT_LITERAL) or LA101_4 == 62 or LA101_4 == 66 or (68 <= LA101_4 <= 69) or (72 <= LA101_4 <= 74) or (77 <= LA101_4 <= 79)) : + alt101 = 5 + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("577:1: jump_statement : ( 'goto' IDENTIFIER ';' | 'continue' ';' | 'break' ';' | 'return' ';' | 'return' expression ';' );", 101, 4, self.input) + + raise nvae + + else: + if self.backtracking > 0: + self.failed = True + return + + nvae = NoViableAltException("577:1: jump_statement : ( 'goto' IDENTIFIER ';' | 'continue' ';' | 'break' ';' | 'return' ';' | 'return' expression ';' );", 101, 0, self.input) + + raise nvae + + if alt101 == 1: + # C.g:578:4: 'goto' IDENTIFIER ';' + self.match(self.input, 114, self.FOLLOW_114_in_jump_statement2393) + if self.failed: + return + self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_jump_statement2395) + if self.failed: + return + self.match(self.input, 25, self.FOLLOW_25_in_jump_statement2397) + if self.failed: + return + + + elif alt101 == 2: + # C.g:579:4: 'continue' ';' + self.match(self.input, 115, self.FOLLOW_115_in_jump_statement2402) + if self.failed: + return + self.match(self.input, 25, self.FOLLOW_25_in_jump_statement2404) + if self.failed: + return + + + elif alt101 == 3: + # C.g:580:4: 'break' ';' + self.match(self.input, 116, self.FOLLOW_116_in_jump_statement2409) + if self.failed: + return + self.match(self.input, 25, self.FOLLOW_25_in_jump_statement2411) + if self.failed: + return + + + elif alt101 == 4: + # C.g:581:4: 'return' ';' + self.match(self.input, 117, self.FOLLOW_117_in_jump_statement2416) + if self.failed: + return + self.match(self.input, 25, self.FOLLOW_25_in_jump_statement2418) + if self.failed: + return + + + elif alt101 == 5: + # C.g:582:4: 'return' expression ';' + self.match(self.input, 117, self.FOLLOW_117_in_jump_statement2423) + if self.failed: + return + self.following.append(self.FOLLOW_expression_in_jump_statement2425) + self.expression() + self.following.pop() + if self.failed: + return + self.match(self.input, 25, self.FOLLOW_25_in_jump_statement2427) + if self.failed: + return + + + + except RecognitionException, re: + self.reportError(re) + self.recover(self.input, re) + finally: + if self.backtracking > 0: + self.memoize(self.input, 71, jump_statement_StartIndex) + + pass + + return + + # $ANTLR end jump_statement + + # $ANTLR start synpred2 + def synpred2_fragment(self, ): + # C.g:119:6: ( declaration_specifiers ) + # C.g:119:6: declaration_specifiers + self.following.append(self.FOLLOW_declaration_specifiers_in_synpred2100) + self.declaration_specifiers() + self.following.pop() + if self.failed: + return + + + # $ANTLR end synpred2 + + + + # $ANTLR start synpred4 + def synpred4_fragment(self, ): + # C.g:119:4: ( ( declaration_specifiers )? declarator ( declaration )* '{' ) + # C.g:119:6: ( declaration_specifiers )? declarator ( declaration )* '{' + # C.g:119:6: ( declaration_specifiers )? + alt102 = 2 + LA102 = self.input.LA(1) + if LA102 == 29 or LA102 == 30 or LA102 == 31 or LA102 == 32 or LA102 == 33 or LA102 == 34 or LA102 == 35 or LA102 == 36 or LA102 == 37 or LA102 == 38 or LA102 == 39 or LA102 == 40 or LA102 == 41 or LA102 == 42 or LA102 == 45 or LA102 == 46 or LA102 == 48 or LA102 == 49 or LA102 == 50 or LA102 == 51 or LA102 == 52 or LA102 == 53 or LA102 == 54 or LA102 == 55 or LA102 == 56 or LA102 == 57 or LA102 == 61: + alt102 = 1 + elif LA102 == IDENTIFIER: + LA102 = self.input.LA(2) + if LA102 == 62: + LA102_21 = self.input.LA(3) + + if (self.synpred2()) : + alt102 = 1 + elif LA102 == 29 or LA102 == 30 or LA102 == 31 or LA102 == 32 or LA102 == 33: + LA102_23 = self.input.LA(3) + + if (self.synpred2()) : + alt102 = 1 + elif LA102 == 34: + LA102_24 = self.input.LA(3) + + if (self.synpred2()) : + alt102 = 1 + elif LA102 == 35: + LA102_25 = self.input.LA(3) + + if (self.synpred2()) : + alt102 = 1 + elif LA102 == 36: + LA102_26 = self.input.LA(3) + + if (self.synpred2()) : + alt102 = 1 + elif LA102 == 37: + LA102_27 = self.input.LA(3) + + if (self.synpred2()) : + alt102 = 1 + elif LA102 == 38: + LA102_28 = self.input.LA(3) + + if (self.synpred2()) : + alt102 = 1 + elif LA102 == 39: + LA102_29 = self.input.LA(3) + + if (self.synpred2()) : + alt102 = 1 + elif LA102 == 40: + LA102_30 = self.input.LA(3) + + if (self.synpred2()) : + alt102 = 1 + elif LA102 == 41: + LA102_31 = self.input.LA(3) + + if (self.synpred2()) : + alt102 = 1 + elif LA102 == 42: + LA102_32 = self.input.LA(3) + + if (self.synpred2()) : + alt102 = 1 + elif LA102 == 45 or LA102 == 46: + LA102_33 = self.input.LA(3) + + if (self.synpred2()) : + alt102 = 1 + elif LA102 == 48: + LA102_34 = self.input.LA(3) + + if (self.synpred2()) : + alt102 = 1 + elif LA102 == IDENTIFIER: + LA102_35 = self.input.LA(3) + + if (self.synpred2()) : + alt102 = 1 + elif LA102 == 58: + LA102_36 = self.input.LA(3) + + if (self.synpred2()) : + alt102 = 1 + elif LA102 == 66: + alt102 = 1 + elif LA102 == 59: + LA102_39 = self.input.LA(3) + + if (self.synpred2()) : + alt102 = 1 + elif LA102 == 60: + LA102_40 = self.input.LA(3) + + if (self.synpred2()) : + alt102 = 1 + elif LA102 == 49 or LA102 == 50 or LA102 == 51 or LA102 == 52 or LA102 == 53 or LA102 == 54 or LA102 == 55 or LA102 == 56 or LA102 == 57 or LA102 == 61: + LA102_41 = self.input.LA(3) + + if (self.synpred2()) : + alt102 = 1 + elif LA102 == 58: + LA102_14 = self.input.LA(2) + + if (self.synpred2()) : + alt102 = 1 + elif LA102 == 59: + LA102_16 = self.input.LA(2) + + if (self.synpred2()) : + alt102 = 1 + elif LA102 == 60: + LA102_17 = self.input.LA(2) + + if (self.synpred2()) : + alt102 = 1 + if alt102 == 1: + # C.g:0:0: declaration_specifiers + self.following.append(self.FOLLOW_declaration_specifiers_in_synpred4100) + self.declaration_specifiers() + self.following.pop() + if self.failed: + return + + + + self.following.append(self.FOLLOW_declarator_in_synpred4103) + self.declarator() + self.following.pop() + if self.failed: + return + # C.g:119:41: ( declaration )* + while True: #loop103 + alt103 = 2 + LA103_0 = self.input.LA(1) + + if (LA103_0 == IDENTIFIER or LA103_0 == 26 or (29 <= LA103_0 <= 42) or (45 <= LA103_0 <= 46) or (48 <= LA103_0 <= 61)) : + alt103 = 1 + + + if alt103 == 1: + # C.g:0:0: declaration + self.following.append(self.FOLLOW_declaration_in_synpred4105) + self.declaration() + self.following.pop() + if self.failed: + return + + + else: + break #loop103 + + + self.match(self.input, 43, self.FOLLOW_43_in_synpred4108) + if self.failed: + return + + + # $ANTLR end synpred4 + + + + # $ANTLR start synpred5 + def synpred5_fragment(self, ): + # C.g:120:4: ( declaration ) + # C.g:120:4: declaration + self.following.append(self.FOLLOW_declaration_in_synpred5118) + self.declaration() + self.following.pop() + if self.failed: + return + + + # $ANTLR end synpred5 + + + + # $ANTLR start synpred7 + def synpred7_fragment(self, ): + # C.g:146:6: ( declaration_specifiers ) + # C.g:146:6: declaration_specifiers + self.following.append(self.FOLLOW_declaration_specifiers_in_synpred7157) + self.declaration_specifiers() + self.following.pop() + if self.failed: + return + + + # $ANTLR end synpred7 + + + + # $ANTLR start synpred10 + def synpred10_fragment(self, ): + # C.g:167:18: ( declaration_specifiers ) + # C.g:167:18: declaration_specifiers + self.following.append(self.FOLLOW_declaration_specifiers_in_synpred10207) + self.declaration_specifiers() + self.following.pop() + if self.failed: + return + + + # $ANTLR end synpred10 + + + + # $ANTLR start synpred14 + def synpred14_fragment(self, ): + # C.g:184:7: ( type_specifier ) + # C.g:184:7: type_specifier + self.following.append(self.FOLLOW_type_specifier_in_synpred14272) + self.type_specifier() + self.following.pop() + if self.failed: + return + + + # $ANTLR end synpred14 + + + + # $ANTLR start synpred15 + def synpred15_fragment(self, ): + # C.g:185:13: ( type_qualifier ) + # C.g:185:13: type_qualifier + self.following.append(self.FOLLOW_type_qualifier_in_synpred15286) + self.type_qualifier() + self.following.pop() + if self.failed: + return + + + # $ANTLR end synpred15 + + + + # $ANTLR start synpred33 + def synpred33_fragment(self, ): + # C.g:225:16: ( type_qualifier ) + # C.g:225:16: type_qualifier + self.following.append(self.FOLLOW_type_qualifier_in_synpred33444) + self.type_qualifier() + self.following.pop() + if self.failed: + return + + + # $ANTLR end synpred33 + + + + # $ANTLR start synpred34 + def synpred34_fragment(self, ): + # C.g:225:4: ( IDENTIFIER ( type_qualifier )* declarator ) + # C.g:225:5: IDENTIFIER ( type_qualifier )* declarator + self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_synpred34442) + if self.failed: + return + # C.g:225:16: ( type_qualifier )* + while True: #loop106 + alt106 = 2 + LA106 = self.input.LA(1) + if LA106 == 58: + LA106_2 = self.input.LA(2) + + if (self.synpred33()) : + alt106 = 1 + + + elif LA106 == 59: + LA106_3 = self.input.LA(2) + + if (self.synpred33()) : + alt106 = 1 + + + elif LA106 == 60: + LA106_4 = self.input.LA(2) + + if (self.synpred33()) : + alt106 = 1 + + + elif LA106 == 49 or LA106 == 50 or LA106 == 51 or LA106 == 52 or LA106 == 53 or LA106 == 54 or LA106 == 55 or LA106 == 56 or LA106 == 57 or LA106 == 61: + alt106 = 1 + + if alt106 == 1: + # C.g:0:0: type_qualifier + self.following.append(self.FOLLOW_type_qualifier_in_synpred34444) + self.type_qualifier() + self.following.pop() + if self.failed: + return + + + else: + break #loop106 + + + self.following.append(self.FOLLOW_declarator_in_synpred34447) + self.declarator() + self.following.pop() + if self.failed: + return + + + # $ANTLR end synpred34 + + + + # $ANTLR start synpred39 + def synpred39_fragment(self, ): + # C.g:253:6: ( type_qualifier ) + # C.g:253:6: type_qualifier + self.following.append(self.FOLLOW_type_qualifier_in_synpred39566) + self.type_qualifier() + self.following.pop() + if self.failed: + return + + + # $ANTLR end synpred39 + + + + # $ANTLR start synpred40 + def synpred40_fragment(self, ): + # C.g:253:23: ( type_specifier ) + # C.g:253:23: type_specifier + self.following.append(self.FOLLOW_type_specifier_in_synpred40570) + self.type_specifier() + self.following.pop() + if self.failed: + return + + + # $ANTLR end synpred40 + + + + # $ANTLR start synpred66 + def synpred66_fragment(self, ): + # C.g:297:4: ( ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator ) + # C.g:297:4: ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator + # C.g:297:4: ( pointer )? + alt111 = 2 + LA111_0 = self.input.LA(1) + + if (LA111_0 == 66) : + alt111 = 1 + if alt111 == 1: + # C.g:0:0: pointer + self.following.append(self.FOLLOW_pointer_in_synpred66784) + self.pointer() + self.following.pop() + if self.failed: + return + + + + # C.g:297:13: ( 'EFIAPI' )? + alt112 = 2 + LA112_0 = self.input.LA(1) + + if (LA112_0 == 58) : + alt112 = 1 + if alt112 == 1: + # C.g:297:14: 'EFIAPI' + self.match(self.input, 58, self.FOLLOW_58_in_synpred66788) + if self.failed: + return + + + + # C.g:297:25: ( 'EFI_BOOTSERVICE' )? + alt113 = 2 + LA113_0 = self.input.LA(1) + + if (LA113_0 == 59) : + alt113 = 1 + if alt113 == 1: + # C.g:297:26: 'EFI_BOOTSERVICE' + self.match(self.input, 59, self.FOLLOW_59_in_synpred66793) + if self.failed: + return + + + + # C.g:297:46: ( 'EFI_RUNTIMESERVICE' )? + alt114 = 2 + LA114_0 = self.input.LA(1) + + if (LA114_0 == 60) : + alt114 = 1 + if alt114 == 1: + # C.g:297:47: 'EFI_RUNTIMESERVICE' + self.match(self.input, 60, self.FOLLOW_60_in_synpred66798) + if self.failed: + return + + + + self.following.append(self.FOLLOW_direct_declarator_in_synpred66802) + self.direct_declarator() + self.following.pop() + if self.failed: + return + + + # $ANTLR end synpred66 + + + + # $ANTLR start synpred67 + def synpred67_fragment(self, ): + # C.g:303:15: ( declarator_suffix ) + # C.g:303:15: declarator_suffix + self.following.append(self.FOLLOW_declarator_suffix_in_synpred67821) + self.declarator_suffix() + self.following.pop() + if self.failed: + return + + + # $ANTLR end synpred67 + + + + # $ANTLR start synpred69 + def synpred69_fragment(self, ): + # C.g:304:9: ( 'EFIAPI' ) + # C.g:304:9: 'EFIAPI' + self.match(self.input, 58, self.FOLLOW_58_in_synpred69830) + if self.failed: + return + + + # $ANTLR end synpred69 + + + + # $ANTLR start synpred70 + def synpred70_fragment(self, ): + # C.g:304:35: ( declarator_suffix ) + # C.g:304:35: declarator_suffix + self.following.append(self.FOLLOW_declarator_suffix_in_synpred70838) + self.declarator_suffix() + self.following.pop() + if self.failed: + return + + + # $ANTLR end synpred70 + + + + # $ANTLR start synpred73 + def synpred73_fragment(self, ): + # C.g:310:9: ( '(' parameter_type_list ')' ) + # C.g:310:9: '(' parameter_type_list ')' + self.match(self.input, 62, self.FOLLOW_62_in_synpred73878) + if self.failed: + return + self.following.append(self.FOLLOW_parameter_type_list_in_synpred73880) + self.parameter_type_list() + self.following.pop() + if self.failed: + return + self.match(self.input, 63, self.FOLLOW_63_in_synpred73882) + if self.failed: + return + + + # $ANTLR end synpred73 + + + + # $ANTLR start synpred74 + def synpred74_fragment(self, ): + # C.g:311:9: ( '(' identifier_list ')' ) + # C.g:311:9: '(' identifier_list ')' + self.match(self.input, 62, self.FOLLOW_62_in_synpred74892) + if self.failed: + return + self.following.append(self.FOLLOW_identifier_list_in_synpred74894) + self.identifier_list() + self.following.pop() + if self.failed: + return + self.match(self.input, 63, self.FOLLOW_63_in_synpred74896) + if self.failed: + return + + + # $ANTLR end synpred74 + + + + # $ANTLR start synpred75 + def synpred75_fragment(self, ): + # C.g:316:8: ( type_qualifier ) + # C.g:316:8: type_qualifier + self.following.append(self.FOLLOW_type_qualifier_in_synpred75921) + self.type_qualifier() + self.following.pop() + if self.failed: + return + + + # $ANTLR end synpred75 + + + + # $ANTLR start synpred76 + def synpred76_fragment(self, ): + # C.g:316:24: ( pointer ) + # C.g:316:24: pointer + self.following.append(self.FOLLOW_pointer_in_synpred76924) + self.pointer() + self.following.pop() + if self.failed: + return + + + # $ANTLR end synpred76 + + + + # $ANTLR start synpred77 + def synpred77_fragment(self, ): + # C.g:316:4: ( '*' ( type_qualifier )+ ( pointer )? ) + # C.g:316:4: '*' ( type_qualifier )+ ( pointer )? + self.match(self.input, 66, self.FOLLOW_66_in_synpred77919) + if self.failed: + return + # C.g:316:8: ( type_qualifier )+ + cnt116 = 0 + while True: #loop116 + alt116 = 2 + LA116_0 = self.input.LA(1) + + if ((49 <= LA116_0 <= 61)) : + alt116 = 1 + + + if alt116 == 1: + # C.g:0:0: type_qualifier + self.following.append(self.FOLLOW_type_qualifier_in_synpred77921) + self.type_qualifier() + self.following.pop() + if self.failed: + return + + + else: + if cnt116 >= 1: + break #loop116 + + if self.backtracking > 0: + self.failed = True + return + + eee = EarlyExitException(116, self.input) + raise eee + + cnt116 += 1 + + + # C.g:316:24: ( pointer )? + alt117 = 2 + LA117_0 = self.input.LA(1) + + if (LA117_0 == 66) : + alt117 = 1 + if alt117 == 1: + # C.g:0:0: pointer + self.following.append(self.FOLLOW_pointer_in_synpred77924) + self.pointer() + self.following.pop() + if self.failed: + return + + + + + + # $ANTLR end synpred77 + + + + # $ANTLR start synpred78 + def synpred78_fragment(self, ): + # C.g:317:4: ( '*' pointer ) + # C.g:317:4: '*' pointer + self.match(self.input, 66, self.FOLLOW_66_in_synpred78930) + if self.failed: + return + self.following.append(self.FOLLOW_pointer_in_synpred78932) + self.pointer() + self.following.pop() + if self.failed: + return + + + # $ANTLR end synpred78 + + + + # $ANTLR start synpred81 + def synpred81_fragment(self, ): + # C.g:326:32: ( 'OPTIONAL' ) + # C.g:326:32: 'OPTIONAL' + self.match(self.input, 53, self.FOLLOW_53_in_synpred81977) + if self.failed: + return + + + # $ANTLR end synpred81 + + + + # $ANTLR start synpred82 + def synpred82_fragment(self, ): + # C.g:326:27: ( ',' ( 'OPTIONAL' )? parameter_declaration ) + # C.g:326:27: ',' ( 'OPTIONAL' )? parameter_declaration + self.match(self.input, 27, self.FOLLOW_27_in_synpred82974) + if self.failed: + return + # C.g:326:31: ( 'OPTIONAL' )? + alt119 = 2 + LA119_0 = self.input.LA(1) + + if (LA119_0 == 53) : + LA119_1 = self.input.LA(2) + + if (self.synpred81()) : + alt119 = 1 + if alt119 == 1: + # C.g:326:32: 'OPTIONAL' + self.match(self.input, 53, self.FOLLOW_53_in_synpred82977) + if self.failed: + return + + + + self.following.append(self.FOLLOW_parameter_declaration_in_synpred82981) + self.parameter_declaration() + self.following.pop() + if self.failed: + return + + + # $ANTLR end synpred82 + + + + # $ANTLR start synpred83 + def synpred83_fragment(self, ): + # C.g:330:28: ( declarator ) + # C.g:330:28: declarator + self.following.append(self.FOLLOW_declarator_in_synpred83997) + self.declarator() + self.following.pop() + if self.failed: + return + + + # $ANTLR end synpred83 + + + + # $ANTLR start synpred84 + def synpred84_fragment(self, ): + # C.g:330:39: ( abstract_declarator ) + # C.g:330:39: abstract_declarator + self.following.append(self.FOLLOW_abstract_declarator_in_synpred84999) + self.abstract_declarator() + self.following.pop() + if self.failed: + return + + + # $ANTLR end synpred84 + + + + # $ANTLR start synpred86 + def synpred86_fragment(self, ): + # C.g:330:4: ( declaration_specifiers ( declarator | abstract_declarator )* ( 'OPTIONAL' )? ) + # C.g:330:4: declaration_specifiers ( declarator | abstract_declarator )* ( 'OPTIONAL' )? + self.following.append(self.FOLLOW_declaration_specifiers_in_synpred86994) + self.declaration_specifiers() + self.following.pop() + if self.failed: + return + # C.g:330:27: ( declarator | abstract_declarator )* + while True: #loop120 + alt120 = 3 + LA120 = self.input.LA(1) + if LA120 == 66: + LA120_3 = self.input.LA(2) + + if (self.synpred83()) : + alt120 = 1 + elif (self.synpred84()) : + alt120 = 2 + + + elif LA120 == IDENTIFIER or LA120 == 58 or LA120 == 59 or LA120 == 60: + alt120 = 1 + elif LA120 == 62: + LA120 = self.input.LA(2) + if LA120 == 29 or LA120 == 30 or LA120 == 31 or LA120 == 32 or LA120 == 33 or LA120 == 34 or LA120 == 35 or LA120 == 36 or LA120 == 37 or LA120 == 38 or LA120 == 39 or LA120 == 40 or LA120 == 41 or LA120 == 42 or LA120 == 45 or LA120 == 46 or LA120 == 48 or LA120 == 49 or LA120 == 50 or LA120 == 51 or LA120 == 52 or LA120 == 53 or LA120 == 54 or LA120 == 55 or LA120 == 56 or LA120 == 57 or LA120 == 61 or LA120 == 63 or LA120 == 64: + alt120 = 2 + elif LA120 == 58: + LA120_21 = self.input.LA(3) + + if (self.synpred83()) : + alt120 = 1 + elif (self.synpred84()) : + alt120 = 2 + + + elif LA120 == 66: + LA120_22 = self.input.LA(3) + + if (self.synpred83()) : + alt120 = 1 + elif (self.synpred84()) : + alt120 = 2 + + + elif LA120 == 59: + LA120_23 = self.input.LA(3) + + if (self.synpred83()) : + alt120 = 1 + elif (self.synpred84()) : + alt120 = 2 + + + elif LA120 == 60: + LA120_24 = self.input.LA(3) + + if (self.synpred83()) : + alt120 = 1 + elif (self.synpred84()) : + alt120 = 2 + + + elif LA120 == IDENTIFIER: + LA120_25 = self.input.LA(3) + + if (self.synpred83()) : + alt120 = 1 + elif (self.synpred84()) : + alt120 = 2 + + + elif LA120 == 62: + LA120_26 = self.input.LA(3) + + if (self.synpred83()) : + alt120 = 1 + elif (self.synpred84()) : + alt120 = 2 + + + + elif LA120 == 64: + alt120 = 2 + + if alt120 == 1: + # C.g:330:28: declarator + self.following.append(self.FOLLOW_declarator_in_synpred86997) + self.declarator() + self.following.pop() + if self.failed: + return + + + elif alt120 == 2: + # C.g:330:39: abstract_declarator + self.following.append(self.FOLLOW_abstract_declarator_in_synpred86999) + self.abstract_declarator() + self.following.pop() + if self.failed: + return + + + else: + break #loop120 + + + # C.g:330:61: ( 'OPTIONAL' )? + alt121 = 2 + LA121_0 = self.input.LA(1) + + if (LA121_0 == 53) : + alt121 = 1 + if alt121 == 1: + # C.g:330:62: 'OPTIONAL' + self.match(self.input, 53, self.FOLLOW_53_in_synpred861004) + if self.failed: + return + + + + + + # $ANTLR end synpred86 + + + + # $ANTLR start synpred90 + def synpred90_fragment(self, ): + # C.g:341:4: ( specifier_qualifier_list ( abstract_declarator )? ) + # C.g:341:4: specifier_qualifier_list ( abstract_declarator )? + self.following.append(self.FOLLOW_specifier_qualifier_list_in_synpred901046) + self.specifier_qualifier_list() + self.following.pop() + if self.failed: + return + # C.g:341:29: ( abstract_declarator )? + alt122 = 2 + LA122_0 = self.input.LA(1) + + if (LA122_0 == 62 or LA122_0 == 64 or LA122_0 == 66) : + alt122 = 1 + if alt122 == 1: + # C.g:0:0: abstract_declarator + self.following.append(self.FOLLOW_abstract_declarator_in_synpred901048) + self.abstract_declarator() + self.following.pop() + if self.failed: + return + + + + + + # $ANTLR end synpred90 + + + + # $ANTLR start synpred91 + def synpred91_fragment(self, ): + # C.g:346:12: ( direct_abstract_declarator ) + # C.g:346:12: direct_abstract_declarator + self.following.append(self.FOLLOW_direct_abstract_declarator_in_synpred911067) + self.direct_abstract_declarator() + self.following.pop() + if self.failed: + return + + + # $ANTLR end synpred91 + + + + # $ANTLR start synpred93 + def synpred93_fragment(self, ): + # C.g:351:6: ( '(' abstract_declarator ')' ) + # C.g:351:6: '(' abstract_declarator ')' + self.match(self.input, 62, self.FOLLOW_62_in_synpred931086) + if self.failed: + return + self.following.append(self.FOLLOW_abstract_declarator_in_synpred931088) + self.abstract_declarator() + self.following.pop() + if self.failed: + return + self.match(self.input, 63, self.FOLLOW_63_in_synpred931090) + if self.failed: + return + + + # $ANTLR end synpred93 + + + + # $ANTLR start synpred94 + def synpred94_fragment(self, ): + # C.g:351:65: ( abstract_declarator_suffix ) + # C.g:351:65: abstract_declarator_suffix + self.following.append(self.FOLLOW_abstract_declarator_suffix_in_synpred941098) + self.abstract_declarator_suffix() + self.following.pop() + if self.failed: + return + + + # $ANTLR end synpred94 + + + + # $ANTLR start synpred109 + def synpred109_fragment(self, ): + # C.g:386:4: ( '(' type_name ')' cast_expression ) + # C.g:386:4: '(' type_name ')' cast_expression + self.match(self.input, 62, self.FOLLOW_62_in_synpred1091282) + if self.failed: + return + self.following.append(self.FOLLOW_type_name_in_synpred1091284) + self.type_name() + self.following.pop() + if self.failed: + return + self.match(self.input, 63, self.FOLLOW_63_in_synpred1091286) + if self.failed: + return + self.following.append(self.FOLLOW_cast_expression_in_synpred1091288) + self.cast_expression() + self.following.pop() + if self.failed: + return + + + # $ANTLR end synpred109 + + + + # $ANTLR start synpred114 + def synpred114_fragment(self, ): + # C.g:395:4: ( 'sizeof' unary_expression ) + # C.g:395:4: 'sizeof' unary_expression + self.match(self.input, 74, self.FOLLOW_74_in_synpred1141330) + if self.failed: + return + self.following.append(self.FOLLOW_unary_expression_in_synpred1141332) + self.unary_expression() + self.following.pop() + if self.failed: + return + + + # $ANTLR end synpred114 + + + + # $ANTLR start synpred117 + def synpred117_fragment(self, ): + # C.g:409:13: ( '(' argument_expression_list ')' ) + # C.g:409:13: '(' argument_expression_list ')' + self.match(self.input, 62, self.FOLLOW_62_in_synpred1171420) + if self.failed: + return + self.following.append(self.FOLLOW_argument_expression_list_in_synpred1171424) + self.argument_expression_list() + self.following.pop() + if self.failed: + return + self.match(self.input, 63, self.FOLLOW_63_in_synpred1171428) + if self.failed: + return + + + # $ANTLR end synpred117 + + + + # $ANTLR start synpred118 + def synpred118_fragment(self, ): + # C.g:410:13: ( '(' macro_parameter_list ')' ) + # C.g:410:13: '(' macro_parameter_list ')' + self.match(self.input, 62, self.FOLLOW_62_in_synpred1181444) + if self.failed: + return + self.following.append(self.FOLLOW_macro_parameter_list_in_synpred1181446) + self.macro_parameter_list() + self.following.pop() + if self.failed: + return + self.match(self.input, 63, self.FOLLOW_63_in_synpred1181448) + if self.failed: + return + + + # $ANTLR end synpred118 + + + + # $ANTLR start synpred120 + def synpred120_fragment(self, ): + # C.g:412:13: ( '*' IDENTIFIER ) + # C.g:412:13: '*' IDENTIFIER + self.match(self.input, 66, self.FOLLOW_66_in_synpred1201482) + if self.failed: + return + self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_synpred1201486) + if self.failed: + return + + + # $ANTLR end synpred120 + + + + # $ANTLR start synpred137 + def synpred137_fragment(self, ): + # C.g:443:20: ( STRING_LITERAL ) + # C.g:443:20: STRING_LITERAL + self.match(self.input, STRING_LITERAL, self.FOLLOW_STRING_LITERAL_in_synpred1371683) + if self.failed: + return + + + # $ANTLR end synpred137 + + + + # $ANTLR start synpred138 + def synpred138_fragment(self, ): + # C.g:443:8: ( ( IDENTIFIER )* ( STRING_LITERAL )+ ) + # C.g:443:8: ( IDENTIFIER )* ( STRING_LITERAL )+ + # C.g:443:8: ( IDENTIFIER )* + while True: #loop125 + alt125 = 2 + LA125_0 = self.input.LA(1) + + if (LA125_0 == IDENTIFIER) : + alt125 = 1 + + + if alt125 == 1: + # C.g:0:0: IDENTIFIER + self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_synpred1381680) + if self.failed: + return + + + else: + break #loop125 + + + # C.g:443:20: ( STRING_LITERAL )+ + cnt126 = 0 + while True: #loop126 + alt126 = 2 + LA126_0 = self.input.LA(1) + + if (LA126_0 == STRING_LITERAL) : + alt126 = 1 + + + if alt126 == 1: + # C.g:0:0: STRING_LITERAL + self.match(self.input, STRING_LITERAL, self.FOLLOW_STRING_LITERAL_in_synpred1381683) + if self.failed: + return + + + else: + if cnt126 >= 1: + break #loop126 + + if self.backtracking > 0: + self.failed = True + return + + eee = EarlyExitException(126, self.input) + raise eee + + cnt126 += 1 + + + + + # $ANTLR end synpred138 + + + + # $ANTLR start synpred142 + def synpred142_fragment(self, ): + # C.g:458:4: ( lvalue assignment_operator assignment_expression ) + # C.g:458:4: lvalue assignment_operator assignment_expression + self.following.append(self.FOLLOW_lvalue_in_synpred1421744) + self.lvalue() + self.following.pop() + if self.failed: + return + self.following.append(self.FOLLOW_assignment_operator_in_synpred1421746) + self.assignment_operator() + self.following.pop() + if self.failed: + return + self.following.append(self.FOLLOW_assignment_expression_in_synpred1421748) + self.assignment_expression() + self.following.pop() + if self.failed: + return + + + # $ANTLR end synpred142 + + + + # $ANTLR start synpred169 + def synpred169_fragment(self, ): + # C.g:520:4: ( expression_statement ) + # C.g:520:4: expression_statement + self.following.append(self.FOLLOW_expression_statement_in_synpred1692035) + self.expression_statement() + self.following.pop() + if self.failed: + return + + + # $ANTLR end synpred169 + + + + # $ANTLR start synpred173 + def synpred173_fragment(self, ): + # C.g:524:4: ( macro_statement ) + # C.g:524:4: macro_statement + self.following.append(self.FOLLOW_macro_statement_in_synpred1732055) + self.macro_statement() + self.following.pop() + if self.failed: + return + + + # $ANTLR end synpred173 + + + + # $ANTLR start synpred174 + def synpred174_fragment(self, ): + # C.g:525:4: ( asm2_statement ) + # C.g:525:4: asm2_statement + self.following.append(self.FOLLOW_asm2_statement_in_synpred1742060) + self.asm2_statement() + self.following.pop() + if self.failed: + return + + + # $ANTLR end synpred174 + + + + # $ANTLR start synpred181 + def synpred181_fragment(self, ): + # C.g:544:19: ( declaration ) + # C.g:544:19: declaration + self.following.append(self.FOLLOW_declaration_in_synpred1812166) + self.declaration() + self.following.pop() + if self.failed: + return + + + # $ANTLR end synpred181 + + + + # $ANTLR start synpred182 + def synpred182_fragment(self, ): + # C.g:544:33: ( statement_list ) + # C.g:544:33: statement_list + self.following.append(self.FOLLOW_statement_list_in_synpred1822170) + self.statement_list() + self.following.pop() + if self.failed: + return + + + # $ANTLR end synpred182 + + + + # $ANTLR start synpred186 + def synpred186_fragment(self, ): + # C.g:554:8: ( declaration ) + # C.g:554:8: declaration + self.following.append(self.FOLLOW_declaration_in_synpred1862225) + self.declaration() + self.following.pop() + if self.failed: + return + + + # $ANTLR end synpred186 + + + + # $ANTLR start synpred188 + def synpred188_fragment(self, ): + # C.g:558:4: ( statement ) + # C.g:558:4: statement + self.following.append(self.FOLLOW_statement_in_synpred1882242) + self.statement() + self.following.pop() + if self.failed: + return + + + # $ANTLR end synpred188 + + + + def synpred69(self): + self.backtracking += 1 + start = self.input.mark() + self.synpred69_fragment() + success = not self.failed + self.input.rewind(start) + self.backtracking -= 1 + self.failed = False + return success + + def synpred81(self): + self.backtracking += 1 + start = self.input.mark() + self.synpred81_fragment() + success = not self.failed + self.input.rewind(start) + self.backtracking -= 1 + self.failed = False + return success + + def synpred82(self): + self.backtracking += 1 + start = self.input.mark() + self.synpred82_fragment() + success = not self.failed + self.input.rewind(start) + self.backtracking -= 1 + self.failed = False + return success + + def synpred66(self): + self.backtracking += 1 + start = self.input.mark() + self.synpred66_fragment() + success = not self.failed + self.input.rewind(start) + self.backtracking -= 1 + self.failed = False + return success + + def synpred83(self): + self.backtracking += 1 + start = self.input.mark() + self.synpred83_fragment() + success = not self.failed + self.input.rewind(start) + self.backtracking -= 1 + self.failed = False + return success + + def synpred84(self): + self.backtracking += 1 + start = self.input.mark() + self.synpred84_fragment() + success = not self.failed + self.input.rewind(start) + self.backtracking -= 1 + self.failed = False + return success + + def synpred67(self): + self.backtracking += 1 + start = self.input.mark() + self.synpred67_fragment() + success = not self.failed + self.input.rewind(start) + self.backtracking -= 1 + self.failed = False + return success + + def synpred86(self): + self.backtracking += 1 + start = self.input.mark() + self.synpred86_fragment() + success = not self.failed + self.input.rewind(start) + self.backtracking -= 1 + self.failed = False + return success + + def synpred120(self): + self.backtracking += 1 + start = self.input.mark() + self.synpred120_fragment() + success = not self.failed + self.input.rewind(start) + self.backtracking -= 1 + self.failed = False + return success + + def synpred40(self): + self.backtracking += 1 + start = self.input.mark() + self.synpred40_fragment() + success = not self.failed + self.input.rewind(start) + self.backtracking -= 1 + self.failed = False + return success + + def synpred142(self): + self.backtracking += 1 + start = self.input.mark() + self.synpred142_fragment() + success = not self.failed + self.input.rewind(start) + self.backtracking -= 1 + self.failed = False + return success + + def synpred182(self): + self.backtracking += 1 + start = self.input.mark() + self.synpred182_fragment() + success = not self.failed + self.input.rewind(start) + self.backtracking -= 1 + self.failed = False + return success + + def synpred109(self): + self.backtracking += 1 + start = self.input.mark() + self.synpred109_fragment() + success = not self.failed + self.input.rewind(start) + self.backtracking -= 1 + self.failed = False + return success + + def synpred181(self): + self.backtracking += 1 + start = self.input.mark() + self.synpred181_fragment() + success = not self.failed + self.input.rewind(start) + self.backtracking -= 1 + self.failed = False + return success + + def synpred186(self): + self.backtracking += 1 + start = self.input.mark() + self.synpred186_fragment() + success = not self.failed + self.input.rewind(start) + self.backtracking -= 1 + self.failed = False + return success + + def synpred188(self): + self.backtracking += 1 + start = self.input.mark() + self.synpred188_fragment() + success = not self.failed + self.input.rewind(start) + self.backtracking -= 1 + self.failed = False + return success + + def synpred169(self): + self.backtracking += 1 + start = self.input.mark() + self.synpred169_fragment() + success = not self.failed + self.input.rewind(start) + self.backtracking -= 1 + self.failed = False + return success + + def synpred117(self): + self.backtracking += 1 + start = self.input.mark() + self.synpred117_fragment() + success = not self.failed + self.input.rewind(start) + self.backtracking -= 1 + self.failed = False + return success + + def synpred70(self): + self.backtracking += 1 + start = self.input.mark() + self.synpred70_fragment() + success = not self.failed + self.input.rewind(start) + self.backtracking -= 1 + self.failed = False + return success + + def synpred118(self): + self.backtracking += 1 + start = self.input.mark() + self.synpred118_fragment() + success = not self.failed + self.input.rewind(start) + self.backtracking -= 1 + self.failed = False + return success + + def synpred34(self): + self.backtracking += 1 + start = self.input.mark() + self.synpred34_fragment() + success = not self.failed + self.input.rewind(start) + self.backtracking -= 1 + self.failed = False + return success + + def synpred33(self): + self.backtracking += 1 + start = self.input.mark() + self.synpred33_fragment() + success = not self.failed + self.input.rewind(start) + self.backtracking -= 1 + self.failed = False + return success + + def synpred94(self): + self.backtracking += 1 + start = self.input.mark() + self.synpred94_fragment() + success = not self.failed + self.input.rewind(start) + self.backtracking -= 1 + self.failed = False + return success + + def synpred39(self): + self.backtracking += 1 + start = self.input.mark() + self.synpred39_fragment() + success = not self.failed + self.input.rewind(start) + self.backtracking -= 1 + self.failed = False + return success + + def synpred74(self): + self.backtracking += 1 + start = self.input.mark() + self.synpred74_fragment() + success = not self.failed + self.input.rewind(start) + self.backtracking -= 1 + self.failed = False + return success + + def synpred114(self): + self.backtracking += 1 + start = self.input.mark() + self.synpred114_fragment() + success = not self.failed + self.input.rewind(start) + self.backtracking -= 1 + self.failed = False + return success + + def synpred93(self): + self.backtracking += 1 + start = self.input.mark() + self.synpred93_fragment() + success = not self.failed + self.input.rewind(start) + self.backtracking -= 1 + self.failed = False + return success + + def synpred75(self): + self.backtracking += 1 + start = self.input.mark() + self.synpred75_fragment() + success = not self.failed + self.input.rewind(start) + self.backtracking -= 1 + self.failed = False + return success + + def synpred137(self): + self.backtracking += 1 + start = self.input.mark() + self.synpred137_fragment() + success = not self.failed + self.input.rewind(start) + self.backtracking -= 1 + self.failed = False + return success + + def synpred90(self): + self.backtracking += 1 + start = self.input.mark() + self.synpred90_fragment() + success = not self.failed + self.input.rewind(start) + self.backtracking -= 1 + self.failed = False + return success + + def synpred138(self): + self.backtracking += 1 + start = self.input.mark() + self.synpred138_fragment() + success = not self.failed + self.input.rewind(start) + self.backtracking -= 1 + self.failed = False + return success + + def synpred91(self): + self.backtracking += 1 + start = self.input.mark() + self.synpred91_fragment() + success = not self.failed + self.input.rewind(start) + self.backtracking -= 1 + self.failed = False + return success + + def synpred73(self): + self.backtracking += 1 + start = self.input.mark() + self.synpred73_fragment() + success = not self.failed + self.input.rewind(start) + self.backtracking -= 1 + self.failed = False + return success + + def synpred5(self): + self.backtracking += 1 + start = self.input.mark() + self.synpred5_fragment() + success = not self.failed + self.input.rewind(start) + self.backtracking -= 1 + self.failed = False + return success + + def synpred78(self): + self.backtracking += 1 + start = self.input.mark() + self.synpred78_fragment() + success = not self.failed + self.input.rewind(start) + self.backtracking -= 1 + self.failed = False + return success + + def synpred7(self): + self.backtracking += 1 + start = self.input.mark() + self.synpred7_fragment() + success = not self.failed + self.input.rewind(start) + self.backtracking -= 1 + self.failed = False + return success + + def synpred76(self): + self.backtracking += 1 + start = self.input.mark() + self.synpred76_fragment() + success = not self.failed + self.input.rewind(start) + self.backtracking -= 1 + self.failed = False + return success + + def synpred77(self): + self.backtracking += 1 + start = self.input.mark() + self.synpred77_fragment() + success = not self.failed + self.input.rewind(start) + self.backtracking -= 1 + self.failed = False + return success + + def synpred2(self): + self.backtracking += 1 + start = self.input.mark() + self.synpred2_fragment() + success = not self.failed + self.input.rewind(start) + self.backtracking -= 1 + self.failed = False + return success + + def synpred4(self): + self.backtracking += 1 + start = self.input.mark() + self.synpred4_fragment() + success = not self.failed + self.input.rewind(start) + self.backtracking -= 1 + self.failed = False + return success + + def synpred174(self): + self.backtracking += 1 + start = self.input.mark() + self.synpred174_fragment() + success = not self.failed + self.input.rewind(start) + self.backtracking -= 1 + self.failed = False + return success + + def synpred173(self): + self.backtracking += 1 + start = self.input.mark() + self.synpred173_fragment() + success = not self.failed + self.input.rewind(start) + self.backtracking -= 1 + self.failed = False + return success + + def synpred14(self): + self.backtracking += 1 + start = self.input.mark() + self.synpred14_fragment() + success = not self.failed + self.input.rewind(start) + self.backtracking -= 1 + self.failed = False + return success + + def synpred15(self): + self.backtracking += 1 + start = self.input.mark() + self.synpred15_fragment() + success = not self.failed + self.input.rewind(start) + self.backtracking -= 1 + self.failed = False + return success + + def synpred10(self): + self.backtracking += 1 + start = self.input.mark() + self.synpred10_fragment() + success = not self.failed + self.input.rewind(start) + self.backtracking -= 1 + self.failed = False + return success + + + + + + FOLLOW_external_declaration_in_translation_unit74 = frozenset([1, 4, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66]) + FOLLOW_function_definition_in_external_declaration113 = frozenset([1]) + FOLLOW_declaration_in_external_declaration118 = frozenset([1]) + FOLLOW_macro_statement_in_external_declaration123 = frozenset([1, 25]) + FOLLOW_25_in_external_declaration126 = frozenset([1]) + FOLLOW_declaration_specifiers_in_function_definition157 = frozenset([4, 58, 59, 60, 62, 66]) + FOLLOW_declarator_in_function_definition160 = frozenset([4, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61]) + FOLLOW_declaration_in_function_definition166 = frozenset([4, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61]) + FOLLOW_compound_statement_in_function_definition171 = frozenset([1]) + FOLLOW_compound_statement_in_function_definition180 = frozenset([1]) + FOLLOW_26_in_declaration203 = frozenset([4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66]) + FOLLOW_declaration_specifiers_in_declaration207 = frozenset([4, 58, 59, 60, 62, 66]) + FOLLOW_init_declarator_list_in_declaration216 = frozenset([25]) + FOLLOW_25_in_declaration220 = frozenset([1]) + FOLLOW_declaration_specifiers_in_declaration234 = frozenset([4, 25, 58, 59, 60, 62, 66]) + FOLLOW_init_declarator_list_in_declaration238 = frozenset([25]) + FOLLOW_25_in_declaration243 = frozenset([1]) + FOLLOW_storage_class_specifier_in_declaration_specifiers264 = frozenset([1, 4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61]) + FOLLOW_type_specifier_in_declaration_specifiers272 = frozenset([1, 4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61]) + FOLLOW_type_qualifier_in_declaration_specifiers286 = frozenset([1, 4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61]) + FOLLOW_init_declarator_in_init_declarator_list308 = frozenset([1, 27]) + FOLLOW_27_in_init_declarator_list311 = frozenset([4, 58, 59, 60, 62, 66]) + FOLLOW_init_declarator_in_init_declarator_list313 = frozenset([1, 27]) + FOLLOW_declarator_in_init_declarator326 = frozenset([1, 28]) + FOLLOW_28_in_init_declarator329 = frozenset([4, 5, 6, 7, 8, 9, 10, 43, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_initializer_in_init_declarator331 = frozenset([1]) + FOLLOW_set_in_storage_class_specifier0 = frozenset([1]) + FOLLOW_34_in_type_specifier376 = frozenset([1]) + FOLLOW_35_in_type_specifier381 = frozenset([1]) + FOLLOW_36_in_type_specifier386 = frozenset([1]) + FOLLOW_37_in_type_specifier391 = frozenset([1]) + FOLLOW_38_in_type_specifier396 = frozenset([1]) + FOLLOW_39_in_type_specifier401 = frozenset([1]) + FOLLOW_40_in_type_specifier406 = frozenset([1]) + FOLLOW_41_in_type_specifier411 = frozenset([1]) + FOLLOW_42_in_type_specifier416 = frozenset([1]) + FOLLOW_struct_or_union_specifier_in_type_specifier423 = frozenset([1]) + FOLLOW_enum_specifier_in_type_specifier433 = frozenset([1]) + FOLLOW_type_id_in_type_specifier451 = frozenset([1]) + FOLLOW_IDENTIFIER_in_type_id467 = frozenset([1]) + FOLLOW_struct_or_union_in_struct_or_union_specifier494 = frozenset([4, 43]) + FOLLOW_IDENTIFIER_in_struct_or_union_specifier496 = frozenset([43]) + FOLLOW_43_in_struct_or_union_specifier499 = frozenset([4, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61]) + FOLLOW_struct_declaration_list_in_struct_or_union_specifier501 = frozenset([44]) + FOLLOW_44_in_struct_or_union_specifier503 = frozenset([1]) + FOLLOW_struct_or_union_in_struct_or_union_specifier508 = frozenset([4]) + FOLLOW_IDENTIFIER_in_struct_or_union_specifier510 = frozenset([1]) + FOLLOW_set_in_struct_or_union0 = frozenset([1]) + FOLLOW_struct_declaration_in_struct_declaration_list537 = frozenset([1, 4, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61]) + FOLLOW_specifier_qualifier_list_in_struct_declaration549 = frozenset([4, 47, 58, 59, 60, 62, 66]) + FOLLOW_struct_declarator_list_in_struct_declaration551 = frozenset([25]) + FOLLOW_25_in_struct_declaration553 = frozenset([1]) + FOLLOW_type_qualifier_in_specifier_qualifier_list566 = frozenset([1, 4, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61]) + FOLLOW_type_specifier_in_specifier_qualifier_list570 = frozenset([1, 4, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61]) + FOLLOW_struct_declarator_in_struct_declarator_list584 = frozenset([1, 27]) + FOLLOW_27_in_struct_declarator_list587 = frozenset([4, 47, 58, 59, 60, 62, 66]) + FOLLOW_struct_declarator_in_struct_declarator_list589 = frozenset([1, 27]) + FOLLOW_declarator_in_struct_declarator602 = frozenset([1, 47]) + FOLLOW_47_in_struct_declarator605 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_constant_expression_in_struct_declarator607 = frozenset([1]) + FOLLOW_47_in_struct_declarator614 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_constant_expression_in_struct_declarator616 = frozenset([1]) + FOLLOW_48_in_enum_specifier634 = frozenset([43]) + FOLLOW_43_in_enum_specifier636 = frozenset([4]) + FOLLOW_enumerator_list_in_enum_specifier638 = frozenset([27, 44]) + FOLLOW_27_in_enum_specifier640 = frozenset([44]) + FOLLOW_44_in_enum_specifier643 = frozenset([1]) + FOLLOW_48_in_enum_specifier648 = frozenset([4]) + FOLLOW_IDENTIFIER_in_enum_specifier650 = frozenset([43]) + FOLLOW_43_in_enum_specifier652 = frozenset([4]) + FOLLOW_enumerator_list_in_enum_specifier654 = frozenset([27, 44]) + FOLLOW_27_in_enum_specifier656 = frozenset([44]) + FOLLOW_44_in_enum_specifier659 = frozenset([1]) + FOLLOW_48_in_enum_specifier664 = frozenset([4]) + FOLLOW_IDENTIFIER_in_enum_specifier666 = frozenset([1]) + FOLLOW_enumerator_in_enumerator_list677 = frozenset([1, 27]) + FOLLOW_27_in_enumerator_list680 = frozenset([4]) + FOLLOW_enumerator_in_enumerator_list682 = frozenset([1, 27]) + FOLLOW_IDENTIFIER_in_enumerator695 = frozenset([1, 28]) + FOLLOW_28_in_enumerator698 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_constant_expression_in_enumerator700 = frozenset([1]) + FOLLOW_set_in_type_qualifier0 = frozenset([1]) + FOLLOW_pointer_in_declarator784 = frozenset([4, 58, 59, 60, 62]) + FOLLOW_58_in_declarator788 = frozenset([4, 59, 60, 62]) + FOLLOW_59_in_declarator793 = frozenset([4, 60, 62]) + FOLLOW_60_in_declarator798 = frozenset([4, 62]) + FOLLOW_direct_declarator_in_declarator802 = frozenset([1]) + FOLLOW_pointer_in_declarator808 = frozenset([1]) + FOLLOW_IDENTIFIER_in_direct_declarator819 = frozenset([1, 62, 64]) + FOLLOW_declarator_suffix_in_direct_declarator821 = frozenset([1, 62, 64]) + FOLLOW_62_in_direct_declarator827 = frozenset([4, 58, 59, 60, 62, 66]) + FOLLOW_58_in_direct_declarator830 = frozenset([4, 58, 59, 60, 62, 66]) + FOLLOW_declarator_in_direct_declarator834 = frozenset([63]) + FOLLOW_63_in_direct_declarator836 = frozenset([62, 64]) + FOLLOW_declarator_suffix_in_direct_declarator838 = frozenset([1, 62, 64]) + FOLLOW_64_in_declarator_suffix852 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_constant_expression_in_declarator_suffix854 = frozenset([65]) + FOLLOW_65_in_declarator_suffix856 = frozenset([1]) + FOLLOW_64_in_declarator_suffix866 = frozenset([65]) + FOLLOW_65_in_declarator_suffix868 = frozenset([1]) + FOLLOW_62_in_declarator_suffix878 = frozenset([4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 66]) + FOLLOW_parameter_type_list_in_declarator_suffix880 = frozenset([63]) + FOLLOW_63_in_declarator_suffix882 = frozenset([1]) + FOLLOW_62_in_declarator_suffix892 = frozenset([4]) + FOLLOW_identifier_list_in_declarator_suffix894 = frozenset([63]) + FOLLOW_63_in_declarator_suffix896 = frozenset([1]) + FOLLOW_62_in_declarator_suffix906 = frozenset([63]) + FOLLOW_63_in_declarator_suffix908 = frozenset([1]) + FOLLOW_66_in_pointer919 = frozenset([49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61]) + FOLLOW_type_qualifier_in_pointer921 = frozenset([1, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 66]) + FOLLOW_pointer_in_pointer924 = frozenset([1]) + FOLLOW_66_in_pointer930 = frozenset([66]) + FOLLOW_pointer_in_pointer932 = frozenset([1]) + FOLLOW_66_in_pointer937 = frozenset([1]) + FOLLOW_parameter_list_in_parameter_type_list948 = frozenset([1, 27]) + FOLLOW_27_in_parameter_type_list951 = frozenset([53, 67]) + FOLLOW_53_in_parameter_type_list954 = frozenset([67]) + FOLLOW_67_in_parameter_type_list958 = frozenset([1]) + FOLLOW_parameter_declaration_in_parameter_list971 = frozenset([1, 27]) + FOLLOW_27_in_parameter_list974 = frozenset([4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 66]) + FOLLOW_53_in_parameter_list977 = frozenset([4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 66]) + FOLLOW_parameter_declaration_in_parameter_list981 = frozenset([1, 27]) + FOLLOW_declaration_specifiers_in_parameter_declaration994 = frozenset([1, 4, 53, 58, 59, 60, 62, 64, 66]) + FOLLOW_declarator_in_parameter_declaration997 = frozenset([1, 4, 53, 58, 59, 60, 62, 64, 66]) + FOLLOW_abstract_declarator_in_parameter_declaration999 = frozenset([1, 4, 53, 58, 59, 60, 62, 64, 66]) + FOLLOW_53_in_parameter_declaration1004 = frozenset([1]) + FOLLOW_pointer_in_parameter_declaration1013 = frozenset([4, 66]) + FOLLOW_IDENTIFIER_in_parameter_declaration1016 = frozenset([1]) + FOLLOW_IDENTIFIER_in_identifier_list1027 = frozenset([1, 27]) + FOLLOW_27_in_identifier_list1031 = frozenset([4]) + FOLLOW_IDENTIFIER_in_identifier_list1033 = frozenset([1, 27]) + FOLLOW_specifier_qualifier_list_in_type_name1046 = frozenset([1, 62, 64, 66]) + FOLLOW_abstract_declarator_in_type_name1048 = frozenset([1]) + FOLLOW_type_id_in_type_name1054 = frozenset([1]) + FOLLOW_pointer_in_abstract_declarator1065 = frozenset([1, 62, 64]) + FOLLOW_direct_abstract_declarator_in_abstract_declarator1067 = frozenset([1]) + FOLLOW_direct_abstract_declarator_in_abstract_declarator1073 = frozenset([1]) + FOLLOW_62_in_direct_abstract_declarator1086 = frozenset([62, 64, 66]) + FOLLOW_abstract_declarator_in_direct_abstract_declarator1088 = frozenset([63]) + FOLLOW_63_in_direct_abstract_declarator1090 = frozenset([1, 62, 64]) + FOLLOW_abstract_declarator_suffix_in_direct_abstract_declarator1094 = frozenset([1, 62, 64]) + FOLLOW_abstract_declarator_suffix_in_direct_abstract_declarator1098 = frozenset([1, 62, 64]) + FOLLOW_64_in_abstract_declarator_suffix1110 = frozenset([65]) + FOLLOW_65_in_abstract_declarator_suffix1112 = frozenset([1]) + FOLLOW_64_in_abstract_declarator_suffix1117 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_constant_expression_in_abstract_declarator_suffix1119 = frozenset([65]) + FOLLOW_65_in_abstract_declarator_suffix1121 = frozenset([1]) + FOLLOW_62_in_abstract_declarator_suffix1126 = frozenset([63]) + FOLLOW_63_in_abstract_declarator_suffix1128 = frozenset([1]) + FOLLOW_62_in_abstract_declarator_suffix1133 = frozenset([4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 66]) + FOLLOW_parameter_type_list_in_abstract_declarator_suffix1135 = frozenset([63]) + FOLLOW_63_in_abstract_declarator_suffix1137 = frozenset([1]) + FOLLOW_assignment_expression_in_initializer1150 = frozenset([1]) + FOLLOW_43_in_initializer1155 = frozenset([4, 5, 6, 7, 8, 9, 10, 43, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_initializer_list_in_initializer1157 = frozenset([27, 44]) + FOLLOW_27_in_initializer1159 = frozenset([44]) + FOLLOW_44_in_initializer1162 = frozenset([1]) + FOLLOW_initializer_in_initializer_list1173 = frozenset([1, 27]) + FOLLOW_27_in_initializer_list1176 = frozenset([4, 5, 6, 7, 8, 9, 10, 43, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_initializer_in_initializer_list1178 = frozenset([1, 27]) + FOLLOW_assignment_expression_in_argument_expression_list1196 = frozenset([1, 27, 53]) + FOLLOW_53_in_argument_expression_list1199 = frozenset([1, 27]) + FOLLOW_27_in_argument_expression_list1204 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_assignment_expression_in_argument_expression_list1206 = frozenset([1, 27, 53]) + FOLLOW_53_in_argument_expression_list1209 = frozenset([1, 27]) + FOLLOW_multiplicative_expression_in_additive_expression1225 = frozenset([1, 68, 69]) + FOLLOW_68_in_additive_expression1229 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_multiplicative_expression_in_additive_expression1231 = frozenset([1, 68, 69]) + FOLLOW_69_in_additive_expression1235 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_multiplicative_expression_in_additive_expression1237 = frozenset([1, 68, 69]) + FOLLOW_cast_expression_in_multiplicative_expression1251 = frozenset([1, 66, 70, 71]) + FOLLOW_66_in_multiplicative_expression1255 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_cast_expression_in_multiplicative_expression1257 = frozenset([1, 66, 70, 71]) + FOLLOW_70_in_multiplicative_expression1261 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_cast_expression_in_multiplicative_expression1263 = frozenset([1, 66, 70, 71]) + FOLLOW_71_in_multiplicative_expression1267 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_cast_expression_in_multiplicative_expression1269 = frozenset([1, 66, 70, 71]) + FOLLOW_62_in_cast_expression1282 = frozenset([4, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61]) + FOLLOW_type_name_in_cast_expression1284 = frozenset([63]) + FOLLOW_63_in_cast_expression1286 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_cast_expression_in_cast_expression1288 = frozenset([1]) + FOLLOW_unary_expression_in_cast_expression1293 = frozenset([1]) + FOLLOW_postfix_expression_in_unary_expression1304 = frozenset([1]) + FOLLOW_72_in_unary_expression1309 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_unary_expression_in_unary_expression1311 = frozenset([1]) + FOLLOW_73_in_unary_expression1316 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_unary_expression_in_unary_expression1318 = frozenset([1]) + FOLLOW_unary_operator_in_unary_expression1323 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_cast_expression_in_unary_expression1325 = frozenset([1]) + FOLLOW_74_in_unary_expression1330 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_unary_expression_in_unary_expression1332 = frozenset([1]) + FOLLOW_74_in_unary_expression1337 = frozenset([62]) + FOLLOW_62_in_unary_expression1339 = frozenset([4, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61]) + FOLLOW_type_name_in_unary_expression1341 = frozenset([63]) + FOLLOW_63_in_unary_expression1343 = frozenset([1]) + FOLLOW_primary_expression_in_postfix_expression1367 = frozenset([1, 62, 64, 66, 72, 73, 75, 76]) + FOLLOW_64_in_postfix_expression1383 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_expression_in_postfix_expression1385 = frozenset([65]) + FOLLOW_65_in_postfix_expression1387 = frozenset([1, 62, 64, 66, 72, 73, 75, 76]) + FOLLOW_62_in_postfix_expression1401 = frozenset([63]) + FOLLOW_63_in_postfix_expression1405 = frozenset([1, 62, 64, 66, 72, 73, 75, 76]) + FOLLOW_62_in_postfix_expression1420 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_argument_expression_list_in_postfix_expression1424 = frozenset([63]) + FOLLOW_63_in_postfix_expression1428 = frozenset([1, 62, 64, 66, 72, 73, 75, 76]) + FOLLOW_62_in_postfix_expression1444 = frozenset([4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 66]) + FOLLOW_macro_parameter_list_in_postfix_expression1446 = frozenset([63]) + FOLLOW_63_in_postfix_expression1448 = frozenset([1, 62, 64, 66, 72, 73, 75, 76]) + FOLLOW_75_in_postfix_expression1462 = frozenset([4]) + FOLLOW_IDENTIFIER_in_postfix_expression1466 = frozenset([1, 62, 64, 66, 72, 73, 75, 76]) + FOLLOW_66_in_postfix_expression1482 = frozenset([4]) + FOLLOW_IDENTIFIER_in_postfix_expression1486 = frozenset([1, 62, 64, 66, 72, 73, 75, 76]) + FOLLOW_76_in_postfix_expression1502 = frozenset([4]) + FOLLOW_IDENTIFIER_in_postfix_expression1506 = frozenset([1, 62, 64, 66, 72, 73, 75, 76]) + FOLLOW_72_in_postfix_expression1522 = frozenset([1, 62, 64, 66, 72, 73, 75, 76]) + FOLLOW_73_in_postfix_expression1536 = frozenset([1, 62, 64, 66, 72, 73, 75, 76]) + FOLLOW_parameter_declaration_in_macro_parameter_list1559 = frozenset([1, 27]) + FOLLOW_27_in_macro_parameter_list1562 = frozenset([4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 66]) + FOLLOW_parameter_declaration_in_macro_parameter_list1564 = frozenset([1, 27]) + FOLLOW_set_in_unary_operator0 = frozenset([1]) + FOLLOW_IDENTIFIER_in_primary_expression1613 = frozenset([1]) + FOLLOW_constant_in_primary_expression1618 = frozenset([1]) + FOLLOW_62_in_primary_expression1623 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_expression_in_primary_expression1625 = frozenset([63]) + FOLLOW_63_in_primary_expression1627 = frozenset([1]) + FOLLOW_HEX_LITERAL_in_constant1643 = frozenset([1]) + FOLLOW_OCTAL_LITERAL_in_constant1653 = frozenset([1]) + FOLLOW_DECIMAL_LITERAL_in_constant1663 = frozenset([1]) + FOLLOW_CHARACTER_LITERAL_in_constant1671 = frozenset([1]) + FOLLOW_IDENTIFIER_in_constant1680 = frozenset([4, 9]) + FOLLOW_STRING_LITERAL_in_constant1683 = frozenset([1, 4, 9]) + FOLLOW_IDENTIFIER_in_constant1688 = frozenset([1, 4]) + FOLLOW_FLOATING_POINT_LITERAL_in_constant1699 = frozenset([1]) + FOLLOW_assignment_expression_in_expression1715 = frozenset([1, 27]) + FOLLOW_27_in_expression1718 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_assignment_expression_in_expression1720 = frozenset([1, 27]) + FOLLOW_conditional_expression_in_constant_expression1733 = frozenset([1]) + FOLLOW_lvalue_in_assignment_expression1744 = frozenset([28, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89]) + FOLLOW_assignment_operator_in_assignment_expression1746 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_assignment_expression_in_assignment_expression1748 = frozenset([1]) + FOLLOW_conditional_expression_in_assignment_expression1753 = frozenset([1]) + FOLLOW_unary_expression_in_lvalue1765 = frozenset([1]) + FOLLOW_set_in_assignment_operator0 = frozenset([1]) + FOLLOW_logical_or_expression_in_conditional_expression1839 = frozenset([1, 90]) + FOLLOW_90_in_conditional_expression1842 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_expression_in_conditional_expression1844 = frozenset([47]) + FOLLOW_47_in_conditional_expression1846 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_conditional_expression_in_conditional_expression1848 = frozenset([1]) + FOLLOW_logical_and_expression_in_logical_or_expression1863 = frozenset([1, 91]) + FOLLOW_91_in_logical_or_expression1866 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_logical_and_expression_in_logical_or_expression1868 = frozenset([1, 91]) + FOLLOW_inclusive_or_expression_in_logical_and_expression1881 = frozenset([1, 92]) + FOLLOW_92_in_logical_and_expression1884 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_inclusive_or_expression_in_logical_and_expression1886 = frozenset([1, 92]) + FOLLOW_exclusive_or_expression_in_inclusive_or_expression1899 = frozenset([1, 93]) + FOLLOW_93_in_inclusive_or_expression1902 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_exclusive_or_expression_in_inclusive_or_expression1904 = frozenset([1, 93]) + FOLLOW_and_expression_in_exclusive_or_expression1917 = frozenset([1, 94]) + FOLLOW_94_in_exclusive_or_expression1920 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_and_expression_in_exclusive_or_expression1922 = frozenset([1, 94]) + FOLLOW_equality_expression_in_and_expression1935 = frozenset([1, 77]) + FOLLOW_77_in_and_expression1938 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_equality_expression_in_and_expression1940 = frozenset([1, 77]) + FOLLOW_relational_expression_in_equality_expression1952 = frozenset([1, 95, 96]) + FOLLOW_set_in_equality_expression1955 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_relational_expression_in_equality_expression1961 = frozenset([1, 95, 96]) + FOLLOW_shift_expression_in_relational_expression1975 = frozenset([1, 97, 98, 99, 100]) + FOLLOW_set_in_relational_expression1978 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_shift_expression_in_relational_expression1988 = frozenset([1, 97, 98, 99, 100]) + FOLLOW_additive_expression_in_shift_expression2001 = frozenset([1, 101, 102]) + FOLLOW_set_in_shift_expression2004 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_additive_expression_in_shift_expression2010 = frozenset([1, 101, 102]) + FOLLOW_labeled_statement_in_statement2025 = frozenset([1]) + FOLLOW_compound_statement_in_statement2030 = frozenset([1]) + FOLLOW_expression_statement_in_statement2035 = frozenset([1]) + FOLLOW_selection_statement_in_statement2040 = frozenset([1]) + FOLLOW_iteration_statement_in_statement2045 = frozenset([1]) + FOLLOW_jump_statement_in_statement2050 = frozenset([1]) + FOLLOW_macro_statement_in_statement2055 = frozenset([1]) + FOLLOW_asm2_statement_in_statement2060 = frozenset([1]) + FOLLOW_asm1_statement_in_statement2065 = frozenset([1]) + FOLLOW_asm_statement_in_statement2070 = frozenset([1]) + FOLLOW_declaration_in_statement2075 = frozenset([1]) + FOLLOW_103_in_asm2_statement2086 = frozenset([4]) + FOLLOW_IDENTIFIER_in_asm2_statement2089 = frozenset([62]) + FOLLOW_62_in_asm2_statement2091 = frozenset([4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117]) + FOLLOW_set_in_asm2_statement2094 = frozenset([4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117]) + FOLLOW_63_in_asm2_statement2101 = frozenset([25]) + FOLLOW_25_in_asm2_statement2103 = frozenset([1]) + FOLLOW_104_in_asm1_statement2115 = frozenset([43]) + FOLLOW_43_in_asm1_statement2117 = frozenset([4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117]) + FOLLOW_set_in_asm1_statement2120 = frozenset([4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117]) + FOLLOW_44_in_asm1_statement2127 = frozenset([1]) + FOLLOW_105_in_asm_statement2138 = frozenset([43]) + FOLLOW_43_in_asm_statement2140 = frozenset([4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117]) + FOLLOW_set_in_asm_statement2143 = frozenset([4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117]) + FOLLOW_44_in_asm_statement2150 = frozenset([1]) + FOLLOW_IDENTIFIER_in_macro_statement2162 = frozenset([62]) + FOLLOW_62_in_macro_statement2164 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 66, 68, 69, 72, 73, 74, 77, 78, 79, 103, 104, 105, 106, 107, 108, 110, 111, 112, 113, 114, 115, 116, 117]) + FOLLOW_declaration_in_macro_statement2166 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 66, 68, 69, 72, 73, 74, 77, 78, 79, 103, 104, 105, 106, 107, 108, 110, 111, 112, 113, 114, 115, 116, 117]) + FOLLOW_statement_list_in_macro_statement2170 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 63, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_expression_in_macro_statement2173 = frozenset([63]) + FOLLOW_63_in_macro_statement2176 = frozenset([1]) + FOLLOW_IDENTIFIER_in_labeled_statement2188 = frozenset([47]) + FOLLOW_47_in_labeled_statement2190 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79, 103, 104, 105, 106, 107, 108, 110, 111, 112, 113, 114, 115, 116, 117]) + FOLLOW_statement_in_labeled_statement2192 = frozenset([1]) + FOLLOW_106_in_labeled_statement2197 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_constant_expression_in_labeled_statement2199 = frozenset([47]) + FOLLOW_47_in_labeled_statement2201 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79, 103, 104, 105, 106, 107, 108, 110, 111, 112, 113, 114, 115, 116, 117]) + FOLLOW_statement_in_labeled_statement2203 = frozenset([1]) + FOLLOW_107_in_labeled_statement2208 = frozenset([47]) + FOLLOW_47_in_labeled_statement2210 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79, 103, 104, 105, 106, 107, 108, 110, 111, 112, 113, 114, 115, 116, 117]) + FOLLOW_statement_in_labeled_statement2212 = frozenset([1]) + FOLLOW_43_in_compound_statement2223 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79, 103, 104, 105, 106, 107, 108, 110, 111, 112, 113, 114, 115, 116, 117]) + FOLLOW_declaration_in_compound_statement2225 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79, 103, 104, 105, 106, 107, 108, 110, 111, 112, 113, 114, 115, 116, 117]) + FOLLOW_statement_list_in_compound_statement2228 = frozenset([44]) + FOLLOW_44_in_compound_statement2231 = frozenset([1]) + FOLLOW_statement_in_statement_list2242 = frozenset([1, 4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79, 103, 104, 105, 106, 107, 108, 110, 111, 112, 113, 114, 115, 116, 117]) + FOLLOW_25_in_expression_statement2254 = frozenset([1]) + FOLLOW_expression_in_expression_statement2259 = frozenset([25]) + FOLLOW_25_in_expression_statement2261 = frozenset([1]) + FOLLOW_108_in_selection_statement2272 = frozenset([62]) + FOLLOW_62_in_selection_statement2274 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_expression_in_selection_statement2278 = frozenset([63]) + FOLLOW_63_in_selection_statement2280 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79, 103, 104, 105, 106, 107, 108, 110, 111, 112, 113, 114, 115, 116, 117]) + FOLLOW_statement_in_selection_statement2284 = frozenset([1, 109]) + FOLLOW_109_in_selection_statement2299 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79, 103, 104, 105, 106, 107, 108, 110, 111, 112, 113, 114, 115, 116, 117]) + FOLLOW_statement_in_selection_statement2301 = frozenset([1]) + FOLLOW_110_in_selection_statement2308 = frozenset([62]) + FOLLOW_62_in_selection_statement2310 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_expression_in_selection_statement2312 = frozenset([63]) + FOLLOW_63_in_selection_statement2314 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79, 103, 104, 105, 106, 107, 108, 110, 111, 112, 113, 114, 115, 116, 117]) + FOLLOW_statement_in_selection_statement2316 = frozenset([1]) + FOLLOW_111_in_iteration_statement2327 = frozenset([62]) + FOLLOW_62_in_iteration_statement2329 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_expression_in_iteration_statement2333 = frozenset([63]) + FOLLOW_63_in_iteration_statement2335 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79, 103, 104, 105, 106, 107, 108, 110, 111, 112, 113, 114, 115, 116, 117]) + FOLLOW_statement_in_iteration_statement2337 = frozenset([1]) + FOLLOW_112_in_iteration_statement2344 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79, 103, 104, 105, 106, 107, 108, 110, 111, 112, 113, 114, 115, 116, 117]) + FOLLOW_statement_in_iteration_statement2346 = frozenset([111]) + FOLLOW_111_in_iteration_statement2348 = frozenset([62]) + FOLLOW_62_in_iteration_statement2350 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_expression_in_iteration_statement2354 = frozenset([63]) + FOLLOW_63_in_iteration_statement2356 = frozenset([25]) + FOLLOW_25_in_iteration_statement2358 = frozenset([1]) + FOLLOW_113_in_iteration_statement2365 = frozenset([62]) + FOLLOW_62_in_iteration_statement2367 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_expression_statement_in_iteration_statement2369 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_expression_statement_in_iteration_statement2373 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 63, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_expression_in_iteration_statement2375 = frozenset([63]) + FOLLOW_63_in_iteration_statement2378 = frozenset([4, 5, 6, 7, 8, 9, 10, 25, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79, 103, 104, 105, 106, 107, 108, 110, 111, 112, 113, 114, 115, 116, 117]) + FOLLOW_statement_in_iteration_statement2380 = frozenset([1]) + FOLLOW_114_in_jump_statement2393 = frozenset([4]) + FOLLOW_IDENTIFIER_in_jump_statement2395 = frozenset([25]) + FOLLOW_25_in_jump_statement2397 = frozenset([1]) + FOLLOW_115_in_jump_statement2402 = frozenset([25]) + FOLLOW_25_in_jump_statement2404 = frozenset([1]) + FOLLOW_116_in_jump_statement2409 = frozenset([25]) + FOLLOW_25_in_jump_statement2411 = frozenset([1]) + FOLLOW_117_in_jump_statement2416 = frozenset([25]) + FOLLOW_25_in_jump_statement2418 = frozenset([1]) + FOLLOW_117_in_jump_statement2423 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_expression_in_jump_statement2425 = frozenset([25]) + FOLLOW_25_in_jump_statement2427 = frozenset([1]) + FOLLOW_declaration_specifiers_in_synpred2100 = frozenset([1]) + FOLLOW_declaration_specifiers_in_synpred4100 = frozenset([4, 58, 59, 60, 62, 66]) + FOLLOW_declarator_in_synpred4103 = frozenset([4, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61]) + FOLLOW_declaration_in_synpred4105 = frozenset([4, 26, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61]) + FOLLOW_43_in_synpred4108 = frozenset([1]) + FOLLOW_declaration_in_synpred5118 = frozenset([1]) + FOLLOW_declaration_specifiers_in_synpred7157 = frozenset([1]) + FOLLOW_declaration_specifiers_in_synpred10207 = frozenset([1]) + FOLLOW_type_specifier_in_synpred14272 = frozenset([1]) + FOLLOW_type_qualifier_in_synpred15286 = frozenset([1]) + FOLLOW_type_qualifier_in_synpred33444 = frozenset([1]) + FOLLOW_IDENTIFIER_in_synpred34442 = frozenset([4, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66]) + FOLLOW_type_qualifier_in_synpred34444 = frozenset([4, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 66]) + FOLLOW_declarator_in_synpred34447 = frozenset([1]) + FOLLOW_type_qualifier_in_synpred39566 = frozenset([1]) + FOLLOW_type_specifier_in_synpred40570 = frozenset([1]) + FOLLOW_pointer_in_synpred66784 = frozenset([4, 58, 59, 60, 62]) + FOLLOW_58_in_synpred66788 = frozenset([4, 59, 60, 62]) + FOLLOW_59_in_synpred66793 = frozenset([4, 60, 62]) + FOLLOW_60_in_synpred66798 = frozenset([4, 62]) + FOLLOW_direct_declarator_in_synpred66802 = frozenset([1]) + FOLLOW_declarator_suffix_in_synpred67821 = frozenset([1]) + FOLLOW_58_in_synpred69830 = frozenset([1]) + FOLLOW_declarator_suffix_in_synpred70838 = frozenset([1]) + FOLLOW_62_in_synpred73878 = frozenset([4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 66]) + FOLLOW_parameter_type_list_in_synpred73880 = frozenset([63]) + FOLLOW_63_in_synpred73882 = frozenset([1]) + FOLLOW_62_in_synpred74892 = frozenset([4]) + FOLLOW_identifier_list_in_synpred74894 = frozenset([63]) + FOLLOW_63_in_synpred74896 = frozenset([1]) + FOLLOW_type_qualifier_in_synpred75921 = frozenset([1]) + FOLLOW_pointer_in_synpred76924 = frozenset([1]) + FOLLOW_66_in_synpred77919 = frozenset([49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61]) + FOLLOW_type_qualifier_in_synpred77921 = frozenset([1, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 66]) + FOLLOW_pointer_in_synpred77924 = frozenset([1]) + FOLLOW_66_in_synpred78930 = frozenset([66]) + FOLLOW_pointer_in_synpred78932 = frozenset([1]) + FOLLOW_53_in_synpred81977 = frozenset([1]) + FOLLOW_27_in_synpred82974 = frozenset([4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 66]) + FOLLOW_53_in_synpred82977 = frozenset([4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 66]) + FOLLOW_parameter_declaration_in_synpred82981 = frozenset([1]) + FOLLOW_declarator_in_synpred83997 = frozenset([1]) + FOLLOW_abstract_declarator_in_synpred84999 = frozenset([1]) + FOLLOW_declaration_specifiers_in_synpred86994 = frozenset([1, 4, 53, 58, 59, 60, 62, 64, 66]) + FOLLOW_declarator_in_synpred86997 = frozenset([1, 4, 53, 58, 59, 60, 62, 64, 66]) + FOLLOW_abstract_declarator_in_synpred86999 = frozenset([1, 4, 53, 58, 59, 60, 62, 64, 66]) + FOLLOW_53_in_synpred861004 = frozenset([1]) + FOLLOW_specifier_qualifier_list_in_synpred901046 = frozenset([1, 62, 64, 66]) + FOLLOW_abstract_declarator_in_synpred901048 = frozenset([1]) + FOLLOW_direct_abstract_declarator_in_synpred911067 = frozenset([1]) + FOLLOW_62_in_synpred931086 = frozenset([62, 64, 66]) + FOLLOW_abstract_declarator_in_synpred931088 = frozenset([63]) + FOLLOW_63_in_synpred931090 = frozenset([1]) + FOLLOW_abstract_declarator_suffix_in_synpred941098 = frozenset([1]) + FOLLOW_62_in_synpred1091282 = frozenset([4, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61]) + FOLLOW_type_name_in_synpred1091284 = frozenset([63]) + FOLLOW_63_in_synpred1091286 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_cast_expression_in_synpred1091288 = frozenset([1]) + FOLLOW_74_in_synpred1141330 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_unary_expression_in_synpred1141332 = frozenset([1]) + FOLLOW_62_in_synpred1171420 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_argument_expression_list_in_synpred1171424 = frozenset([63]) + FOLLOW_63_in_synpred1171428 = frozenset([1]) + FOLLOW_62_in_synpred1181444 = frozenset([4, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 66]) + FOLLOW_macro_parameter_list_in_synpred1181446 = frozenset([63]) + FOLLOW_63_in_synpred1181448 = frozenset([1]) + FOLLOW_66_in_synpred1201482 = frozenset([4]) + FOLLOW_IDENTIFIER_in_synpred1201486 = frozenset([1]) + FOLLOW_STRING_LITERAL_in_synpred1371683 = frozenset([1]) + FOLLOW_IDENTIFIER_in_synpred1381680 = frozenset([4, 9]) + FOLLOW_STRING_LITERAL_in_synpred1381683 = frozenset([1, 9]) + FOLLOW_lvalue_in_synpred1421744 = frozenset([28, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89]) + FOLLOW_assignment_operator_in_synpred1421746 = frozenset([4, 5, 6, 7, 8, 9, 10, 62, 66, 68, 69, 72, 73, 74, 77, 78, 79]) + FOLLOW_assignment_expression_in_synpred1421748 = frozenset([1]) + FOLLOW_expression_statement_in_synpred1692035 = frozenset([1]) + FOLLOW_macro_statement_in_synpred1732055 = frozenset([1]) + FOLLOW_asm2_statement_in_synpred1742060 = frozenset([1]) + FOLLOW_declaration_in_synpred1812166 = frozenset([1]) + FOLLOW_statement_list_in_synpred1822170 = frozenset([1]) + FOLLOW_declaration_in_synpred1862225 = frozenset([1]) + FOLLOW_statement_in_synpred1882242 = frozenset([1]) + diff --git a/BaseTools/Source/Python/Eot/CodeFragment.py b/BaseTools/Source/Python/Eot/CodeFragment.py new file mode 100644 index 0000000000..6dc30a3baf --- /dev/null +++ b/BaseTools/Source/Python/Eot/CodeFragment.py @@ -0,0 +1,185 @@ +## @file +# fragments of source file +# +# Copyright (c) 2007 ~ 2010, Intel Corporation +# +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# + + +## The description of comment contents and start & end position +# +# +class Comment : + ## The constructor + # + # @param self The object pointer + # @param Str The message to record + # @param Begin The start position tuple. + # @param End The end position tuple. + # @param CommentType The type of comment (T_COMMENT_TWO_SLASH or T_COMMENT_SLASH_STAR). + # + def __init__(self, Str, Begin, End, CommentType): + self.Content = Str + self.StartPos = Begin + self.EndPos = End + self.Type = CommentType + +## The description of preprocess directives and start & end position +# +# +class PP_Directive : + ## The constructor + # + # @param self The object pointer + # @param Str The message to record + # @param Begin The start position tuple. + # @param End The end position tuple. + # + def __init__(self, Str, Begin, End): + self.Content = Str + self.StartPos = Begin + self.EndPos = End + +## The description of assignment expression and start & end position +# +# +class AssignmentExpression : + ## The constructor + # + # @param self The object pointer + # @param Str The message to record + # @param Begin The start position tuple. + # @param End The end position tuple. + # + def __init__(self, Lvalue, Op, Exp, Begin, End): + self.Name = Lvalue + self.Operator = Op + self.Value = Exp + self.StartPos = Begin + self.EndPos = End + +## The description of predicate expression and start & end position +# +# +class PredicateExpression : + ## The constructor + # + # @param self The object pointer + # @param Str The message to record + # @param Begin The start position tuple. + # @param End The end position tuple. + # + def __init__(self, Str, Begin, End): + self.Content = Str + self.StartPos = Begin + self.EndPos = End + +## The description of function definition and start & end position +# +# +class FunctionDefinition : + ## The constructor + # + # @param self The object pointer + # @param Str The message to record + # @param Begin The start position tuple. + # @param End The end position tuple. + # @param LBPos The left brace position tuple. + # + def __init__(self, ModifierStr, DeclStr, Begin, End, LBPos, NamePos): + self.Modifier = ModifierStr + self.Declarator = DeclStr + self.StartPos = Begin + self.EndPos = End + self.LeftBracePos = LBPos + self.NamePos = NamePos + +## The description of variable declaration and start & end position +# +# +class VariableDeclaration : + ## The constructor + # + # @param self The object pointer + # @param Str The message to record + # @param Begin The start position tuple. + # @param End The end position tuple. + # + def __init__(self, ModifierStr, DeclStr, Begin, End): + self.Modifier = ModifierStr + self.Declarator = DeclStr + self.StartPos = Begin + self.EndPos = End + +## The description of enum definition and start & end position +# +# +class EnumerationDefinition : + ## The constructor + # + # @param self The object pointer + # @param Str The message to record + # @param Begin The start position tuple. + # @param End The end position tuple. + # + def __init__(self, Str, Begin, End): + self.Content = Str + self.StartPos = Begin + self.EndPos = End + +## The description of struct/union definition and start & end position +# +# +class StructUnionDefinition : + ## The constructor + # + # @param self The object pointer + # @param Str The message to record + # @param Begin The start position tuple. + # @param End The end position tuple. + # + def __init__(self, Str, Begin, End): + self.Content = Str + self.StartPos = Begin + self.EndPos = End + +## The description of 'Typedef' definition and start & end position +# +# +class TypedefDefinition : + ## The constructor + # + # @param self The object pointer + # @param Str The message to record + # @param Begin The start position tuple. + # @param End The end position tuple. + # + def __init__(self, FromStr, ToStr, Begin, End): + self.FromType = FromStr + self.ToType = ToStr + self.StartPos = Begin + self.EndPos = End + +## The description of function calling definition and start & end position +# +# +class FunctionCalling: + ## The constructor + # + # @param self The object pointer + # @param Str The message to record + # @param Begin The start position tuple. + # @param End The end position tuple. + # + def __init__(self, Name, Param, Begin, End): + self.FuncName = Name + self.ParamList = Param + self.StartPos = Begin + self.EndPos = End diff --git a/BaseTools/Source/Python/Eot/CodeFragmentCollector.py b/BaseTools/Source/Python/Eot/CodeFragmentCollector.py new file mode 100644 index 0000000000..349f934304 --- /dev/null +++ b/BaseTools/Source/Python/Eot/CodeFragmentCollector.py @@ -0,0 +1,467 @@ +## @file +# preprocess source file +# +# Copyright (c) 2007 ~ 2010, Intel Corporation +# +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# + +## +# Import Modules +# +import re +import os +import sys + +import antlr3 +from CLexer import CLexer +from CParser import CParser + +import FileProfile +from CodeFragment import PP_Directive +from ParserWarning import Warning + + +##define T_CHAR_SPACE ' ' +##define T_CHAR_NULL '\0' +##define T_CHAR_CR '\r' +##define T_CHAR_TAB '\t' +##define T_CHAR_LF '\n' +##define T_CHAR_SLASH '/' +##define T_CHAR_BACKSLASH '\\' +##define T_CHAR_DOUBLE_QUOTE '\"' +##define T_CHAR_SINGLE_QUOTE '\'' +##define T_CHAR_STAR '*' +##define T_CHAR_HASH '#' + +(T_CHAR_SPACE, T_CHAR_NULL, T_CHAR_CR, T_CHAR_TAB, T_CHAR_LF, T_CHAR_SLASH, \ +T_CHAR_BACKSLASH, T_CHAR_DOUBLE_QUOTE, T_CHAR_SINGLE_QUOTE, T_CHAR_STAR, T_CHAR_HASH) = \ +(' ', '\0', '\r', '\t', '\n', '/', '\\', '\"', '\'', '*', '#') + +SEPERATOR_TUPLE = ('=', '|', ',', '{', '}') + +(T_COMMENT_TWO_SLASH, T_COMMENT_SLASH_STAR) = (0, 1) + +(T_PP_INCLUDE, T_PP_DEFINE, T_PP_OTHERS) = (0, 1, 2) + +## The collector for source code fragments. +# +# PreprocessFile method should be called prior to ParseFile +# +# GetNext*** procedures mean these procedures will get next token first, then make judgement. +# Get*** procedures mean these procedures will make judgement on current token only. +# +class CodeFragmentCollector: + ## The constructor + # + # @param self The object pointer + # @param FileName The file that to be parsed + # + def __init__(self, FileName): + self.Profile = FileProfile.FileProfile(FileName) + self.Profile.FileLinesList.append(T_CHAR_LF) + self.FileName = FileName + self.CurrentLineNumber = 1 + self.CurrentOffsetWithinLine = 0 + + self.__Token = "" + self.__SkippedChars = "" + + ## __IsWhiteSpace() method + # + # Whether char at current FileBufferPos is whitespace + # + # @param self The object pointer + # @param Char The char to test + # @retval True The char is a kind of white space + # @retval False The char is NOT a kind of white space + # + def __IsWhiteSpace(self, Char): + if Char in (T_CHAR_NULL, T_CHAR_CR, T_CHAR_SPACE, T_CHAR_TAB, T_CHAR_LF): + return True + else: + return False + + ## __SkipWhiteSpace() method + # + # Skip white spaces from current char, return number of chars skipped + # + # @param self The object pointer + # @retval Count The number of chars skipped + # + def __SkipWhiteSpace(self): + Count = 0 + while not self.__EndOfFile(): + Count += 1 + if self.__CurrentChar() in (T_CHAR_NULL, T_CHAR_CR, T_CHAR_LF, T_CHAR_SPACE, T_CHAR_TAB): + self.__SkippedChars += str(self.__CurrentChar()) + self.__GetOneChar() + + else: + Count = Count - 1 + return Count + + ## __EndOfFile() method + # + # Judge current buffer pos is at file end + # + # @param self The object pointer + # @retval True Current File buffer position is at file end + # @retval False Current File buffer position is NOT at file end + # + def __EndOfFile(self): + NumberOfLines = len(self.Profile.FileLinesList) + SizeOfLastLine = len(self.Profile.FileLinesList[-1]) + if self.CurrentLineNumber == NumberOfLines and self.CurrentOffsetWithinLine >= SizeOfLastLine - 1: + return True + elif self.CurrentLineNumber > NumberOfLines: + return True + else: + return False + + ## __EndOfLine() method + # + # Judge current buffer pos is at line end + # + # @param self The object pointer + # @retval True Current File buffer position is at line end + # @retval False Current File buffer position is NOT at line end + # + def __EndOfLine(self): + SizeOfCurrentLine = len(self.Profile.FileLinesList[self.CurrentLineNumber - 1]) + if self.CurrentOffsetWithinLine >= SizeOfCurrentLine - 1: + return True + else: + return False + + ## Rewind() method + # + # Reset file data buffer to the initial state + # + # @param self The object pointer + # + def Rewind(self): + self.CurrentLineNumber = 1 + self.CurrentOffsetWithinLine = 0 + + ## __UndoOneChar() method + # + # Go back one char in the file buffer + # + # @param self The object pointer + # @retval True Successfully go back one char + # @retval False Not able to go back one char as file beginning reached + # + def __UndoOneChar(self): + + if self.CurrentLineNumber == 1 and self.CurrentOffsetWithinLine == 0: + return False + elif self.CurrentOffsetWithinLine == 0: + self.CurrentLineNumber -= 1 + self.CurrentOffsetWithinLine = len(self.__CurrentLine()) - 1 + else: + self.CurrentOffsetWithinLine -= 1 + return True + + ## __GetOneChar() method + # + # Move forward one char in the file buffer + # + # @param self The object pointer + # + def __GetOneChar(self): + if self.CurrentOffsetWithinLine == len(self.Profile.FileLinesList[self.CurrentLineNumber - 1]) - 1: + self.CurrentLineNumber += 1 + self.CurrentOffsetWithinLine = 0 + else: + self.CurrentOffsetWithinLine += 1 + + ## __CurrentChar() method + # + # Get the char pointed to by the file buffer pointer + # + # @param self The object pointer + # @retval Char Current char + # + def __CurrentChar(self): + CurrentChar = self.Profile.FileLinesList[self.CurrentLineNumber - 1][self.CurrentOffsetWithinLine] + + return CurrentChar + + ## __NextChar() method + # + # Get the one char pass the char pointed to by the file buffer pointer + # + # @param self The object pointer + # @retval Char Next char + # + def __NextChar(self): + if self.CurrentOffsetWithinLine == len(self.Profile.FileLinesList[self.CurrentLineNumber - 1]) - 1: + return self.Profile.FileLinesList[self.CurrentLineNumber][0] + else: + return self.Profile.FileLinesList[self.CurrentLineNumber - 1][self.CurrentOffsetWithinLine + 1] + + ## __SetCurrentCharValue() method + # + # Modify the value of current char + # + # @param self The object pointer + # @param Value The new value of current char + # + def __SetCurrentCharValue(self, Value): + self.Profile.FileLinesList[self.CurrentLineNumber - 1][self.CurrentOffsetWithinLine] = Value + + ## __SetCharValue() method + # + # Modify the value of current char + # + # @param self The object pointer + # @param Value The new value of current char + # + def __SetCharValue(self, Line, Offset, Value): + self.Profile.FileLinesList[Line - 1][Offset] = Value + + ## __CurrentLine() method + # + # Get the list that contains current line contents + # + # @param self The object pointer + # @retval List current line contents + # + def __CurrentLine(self): + return self.Profile.FileLinesList[self.CurrentLineNumber - 1] + + ## __InsertComma() method + # + # Insert ',' to replace PP + # + # @param self The object pointer + # @retval List current line contents + # + def __InsertComma(self, Line): + + + if self.Profile.FileLinesList[Line - 1][0] != T_CHAR_HASH: + BeforeHashPart = str(self.Profile.FileLinesList[Line - 1]).split(T_CHAR_HASH)[0] + if BeforeHashPart.rstrip().endswith(T_CHAR_COMMA) or BeforeHashPart.rstrip().endswith(';'): + return + + if Line - 2 >= 0 and str(self.Profile.FileLinesList[Line - 2]).rstrip().endswith(','): + return + + if Line - 2 >= 0 and str(self.Profile.FileLinesList[Line - 2]).rstrip().endswith(';'): + return + + if str(self.Profile.FileLinesList[Line]).lstrip().startswith(',') or str(self.Profile.FileLinesList[Line]).lstrip().startswith(';'): + return + + self.Profile.FileLinesList[Line - 1].insert(self.CurrentOffsetWithinLine, ',') + + ## PreprocessFileWithClear() method + # + # Run a preprocess for the file to clean all comments + # + # @param self The object pointer + # + def PreprocessFileWithClear(self): + + self.Rewind() + InComment = False + DoubleSlashComment = False + HashComment = False + PPExtend = False + PPDirectiveObj = None + # HashComment in quoted string " " is ignored. + InString = False + InCharLiteral = False + + self.Profile.FileLinesList = [list(s) for s in self.Profile.FileLinesListFromFile] + while not self.__EndOfFile(): + + if not InComment and self.__CurrentChar() == T_CHAR_DOUBLE_QUOTE: + InString = not InString + + if not InComment and self.__CurrentChar() == T_CHAR_SINGLE_QUOTE: + InCharLiteral = not InCharLiteral + # meet new line, then no longer in a comment for // and '#' + if self.__CurrentChar() == T_CHAR_LF: + if HashComment and PPDirectiveObj != None: + if PPDirectiveObj.Content.rstrip(T_CHAR_CR).endswith(T_CHAR_BACKSLASH): + PPDirectiveObj.Content += T_CHAR_LF + PPExtend = True + else: + PPExtend = False + + EndLinePos = (self.CurrentLineNumber, self.CurrentOffsetWithinLine) + + if InComment and DoubleSlashComment: + InComment = False + DoubleSlashComment = False + + if InComment and HashComment and not PPExtend: + InComment = False + HashComment = False + PPDirectiveObj.Content += T_CHAR_LF + PPDirectiveObj.EndPos = EndLinePos + FileProfile.PPDirectiveList.append(PPDirectiveObj) + PPDirectiveObj = None + + if InString or InCharLiteral: + CurrentLine = "".join(self.__CurrentLine()) + if CurrentLine.rstrip(T_CHAR_LF).rstrip(T_CHAR_CR).endswith(T_CHAR_BACKSLASH): + SlashIndex = CurrentLine.rindex(T_CHAR_BACKSLASH) + self.__SetCharValue(self.CurrentLineNumber, SlashIndex, T_CHAR_SPACE) + + self.CurrentLineNumber += 1 + self.CurrentOffsetWithinLine = 0 + # check for */ comment end + elif InComment and not DoubleSlashComment and not HashComment and self.__CurrentChar() == T_CHAR_STAR and self.__NextChar() == T_CHAR_SLASH: + + self.__SetCurrentCharValue(T_CHAR_SPACE) + self.__GetOneChar() + self.__SetCurrentCharValue(T_CHAR_SPACE) + self.__GetOneChar() + InComment = False + # set comments to spaces + elif InComment: + if HashComment: + # // follows hash PP directive + if self.__CurrentChar() == T_CHAR_SLASH and self.__NextChar() == T_CHAR_SLASH: + InComment = False + HashComment = False + PPDirectiveObj.EndPos = (self.CurrentLineNumber, self.CurrentOffsetWithinLine - 1) + FileProfile.PPDirectiveList.append(PPDirectiveObj) + PPDirectiveObj = None + continue + else: + PPDirectiveObj.Content += self.__CurrentChar() + + self.__SetCurrentCharValue(T_CHAR_SPACE) + self.__GetOneChar() + # check for // comment + elif self.__CurrentChar() == T_CHAR_SLASH and self.__NextChar() == T_CHAR_SLASH: + InComment = True + DoubleSlashComment = True + + # check for '#' comment + elif self.__CurrentChar() == T_CHAR_HASH and not InString and not InCharLiteral: + InComment = True + HashComment = True + PPDirectiveObj = PP_Directive('', (self.CurrentLineNumber, self.CurrentOffsetWithinLine), None) + # check for /* comment start + elif self.__CurrentChar() == T_CHAR_SLASH and self.__NextChar() == T_CHAR_STAR: + + self.__SetCurrentCharValue( T_CHAR_SPACE) + self.__GetOneChar() + self.__SetCurrentCharValue( T_CHAR_SPACE) + self.__GetOneChar() + InComment = True + else: + self.__GetOneChar() + + EndLinePos = (self.CurrentLineNumber, self.CurrentOffsetWithinLine) + + if InComment and HashComment and not PPExtend: + PPDirectiveObj.EndPos = EndLinePos + FileProfile.PPDirectiveList.append(PPDirectiveObj) + self.Rewind() + + ## ParseFile() method + # + # Parse the file profile buffer to extract fd, fv ... information + # Exception will be raised if syntax error found + # + # @param self The object pointer + # + def ParseFile(self): + self.PreprocessFileWithClear() + # restore from ListOfList to ListOfString + self.Profile.FileLinesList = ["".join(list) for list in self.Profile.FileLinesList] + FileStringContents = '' + for fileLine in self.Profile.FileLinesList: + FileStringContents += fileLine + cStream = antlr3.StringStream(FileStringContents) + lexer = CLexer(cStream) + tStream = antlr3.CommonTokenStream(lexer) + parser = CParser(tStream) + parser.translation_unit() + + ## CleanFileProfileBuffer() method + # + # Reset all contents of the profile of a file + # + def CleanFileProfileBuffer(self): + + FileProfile.PPDirectiveList = [] + FileProfile.AssignmentExpressionList = [] + FileProfile.FunctionDefinitionList = [] + FileProfile.VariableDeclarationList = [] + FileProfile.EnumerationDefinitionList = [] + FileProfile.StructUnionDefinitionList = [] + FileProfile.TypedefDefinitionList = [] + FileProfile.FunctionCallingList = [] + + ## PrintFragments() method + # + # Print the contents of the profile of a file + # + def PrintFragments(self): + + print '################# ' + self.FileName + '#####################' + + print '/****************************************/' + print '/*************** ASSIGNMENTS ***************/' + print '/****************************************/' + for asign in FileProfile.AssignmentExpressionList: + print str(asign.StartPos) + asign.Name + asign.Operator + asign.Value + + print '/****************************************/' + print '/********* PREPROCESS DIRECTIVES ********/' + print '/****************************************/' + for pp in FileProfile.PPDirectiveList: + print str(pp.StartPos) + pp.Content + + print '/****************************************/' + print '/********* VARIABLE DECLARATIONS ********/' + print '/****************************************/' + for var in FileProfile.VariableDeclarationList: + print str(var.StartPos) + var.Modifier + ' '+ var.Declarator + + print '/****************************************/' + print '/********* FUNCTION DEFINITIONS *********/' + print '/****************************************/' + for func in FileProfile.FunctionDefinitionList: + print str(func.StartPos) + func.Modifier + ' '+ func.Declarator + ' ' + str(func.NamePos) + + print '/****************************************/' + print '/************ ENUMERATIONS **************/' + print '/****************************************/' + for enum in FileProfile.EnumerationDefinitionList: + print str(enum.StartPos) + enum.Content + + print '/****************************************/' + print '/*********** STRUCTS/UNIONS *************/' + print '/****************************************/' + for su in FileProfile.StructUnionDefinitionList: + print str(su.StartPos) + su.Content + + print '/****************************************/' + print '/************** TYPEDEFS ****************/' + print '/****************************************/' + for typedef in FileProfile.TypedefDefinitionList: + print str(typedef.StartPos) + typedef.ToType + +## +# +# This acts like the main() function for the script, unless it is 'import'ed into another +# script. +# +if __name__ == "__main__": + + print "For Test." diff --git a/BaseTools/Source/Python/Eot/Database.py b/BaseTools/Source/Python/Eot/Database.py new file mode 100644 index 0000000000..e3fb4f2ddf --- /dev/null +++ b/BaseTools/Source/Python/Eot/Database.py @@ -0,0 +1,255 @@ +## @file +# This file is used to create a database used by EOT tool +# +# Copyright (c) 2007 - 2010, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# + +## +# Import Modules +# +import sqlite3 +import os, time + +import Common.EdkLogger as EdkLogger +import CommonDataClass.DataClass as DataClass + +from Table.TableDataModel import TableDataModel +from Table.TableFile import TableFile +from Table.TableFunction import TableFunction +from Table.TableIdentifier import TableIdentifier +from Table.TableEotReport import TableEotReport +from Table.TableInf import TableInf +from Table.TableDec import TableDec +from Table.TableDsc import TableDsc +from Table.TableFdf import TableFdf +from Table.TableQuery import TableQuery + +## +# Static definitions +# +DATABASE_PATH = "Eot.db" + +## Database class +# +# This class defined the EOT databse +# During the phase of initialization, the database will create all tables and +# insert all records of table DataModel +# +class Database(object): + ## The constructor + # + # @param self: The object pointer + # @param DbPath: The file path of the database + # + def __init__(self, DbPath): + self.DbPath = DbPath + self.Conn = None + self.Cur = None + self.TblDataModel = None + self.TblFile = None + self.TblFunction = None + self.TblIdentifier = None + self.TblReport = None + self.TblInf = None + self.TblDec = None + self.TblDsc = None + self.TblFdf = None + self.TblQuery = None + self.TblQuery2 = None + + ## InitDatabase() method + # 1. Delete all old existing tables + # 2. Create new tables + # 3. Initialize table DataModel + # + # @param self: The object pointer + # @param NewDatabase: Check if it needs to create a new database + # + def InitDatabase(self, NewDatabase = True): + EdkLogger.verbose("\nInitialize EOT database started ...") + # + # Drop all old existing tables + # + if NewDatabase: + if os.path.exists(self.DbPath): + os.remove(self.DbPath) + self.Conn = sqlite3.connect(self.DbPath, isolation_level = 'DEFERRED') + self.Conn.execute("PRAGMA page_size=8192") + self.Conn.execute("PRAGMA synchronous=OFF") + # to avoid non-ascii charater conversion error + self.Conn.text_factory = str + self.Cur = self.Conn.cursor() + + self.TblDataModel = TableDataModel(self.Cur) + self.TblFile = TableFile(self.Cur) + self.TblFunction = TableFunction(self.Cur) + self.TblIdentifier = TableIdentifier(self.Cur) + self.TblReport = TableEotReport(self.Cur) + self.TblInf = TableInf(self.Cur) + self.TblDec = TableDec(self.Cur) + self.TblDsc = TableDsc(self.Cur) + self.TblFdf = TableFdf(self.Cur) + self.TblQuery = TableQuery(self.Cur) + self.TblQuery2 = TableQuery(self.Cur) + self.TblQuery2.Table = 'Query2' + + # Create new tables + if NewDatabase: + self.TblDataModel.Create() + self.TblFile.Create() + self.TblFunction.Create() + self.TblReport.Create() + self.TblInf.Create() + self.TblDec.Create() + self.TblDsc.Create() + self.TblFdf.Create() + self.TblQuery.Create() + self.TblQuery2.Create() + + # Init each table's ID + self.TblDataModel.InitID() + self.TblFile.InitID() + self.TblFunction.InitID() + self.TblReport.InitID() + self.TblInf.InitID() + self.TblDec.InitID() + self.TblDsc.InitID() + self.TblFdf.InitID() + self.TblQuery.Drop() + self.TblQuery.Create() + self.TblQuery.InitID() + self.TblQuery2.Drop() + self.TblQuery2.Create() + self.TblQuery2.InitID() + + # Initialize table DataModel + if NewDatabase: + self.TblDataModel.InitTable() + + EdkLogger.verbose("Initialize EOT database ... DONE!") + + ## QueryTable() method + # + # Query a table + # + # @param self: The object pointer + # @param Table: The instance of the table to be queried + # + def QueryTable(self, Table): + Table.Query() + + ## Close() method + # + # Commit all first + # Close the connection and cursor + # + def Close(self): + # Commit to file + self.Conn.commit() + + # Close connection and cursor + self.Cur.close() + self.Conn.close() + + ## InsertOneFile() method + # + # Insert one file's information to the database + # 1. Create a record in TableFile + # 2. Create functions one by one + # 2.1 Create variables of function one by one + # 2.2 Create pcds of function one by one + # 3. Create variables one by one + # 4. Create pcds one by one + # + # @param self: The object pointer + # @param File: The object of the file to be inserted + # + def InsertOneFile(self, File): + # Insert a record for file + FileID = self.TblFile.Insert(File.Name, File.ExtName, File.Path, File.FullPath, Model = File.Model, TimeStamp = File.TimeStamp) + IdTable = TableIdentifier(self.Cur) + IdTable.Table = "Identifier%s" % FileID + IdTable.Create() + + # Insert function of file + for Function in File.FunctionList: + FunctionID = self.TblFunction.Insert(Function.Header, Function.Modifier, Function.Name, Function.ReturnStatement, \ + Function.StartLine, Function.StartColumn, Function.EndLine, Function.EndColumn, \ + Function.BodyStartLine, Function.BodyStartColumn, FileID, \ + Function.FunNameStartLine, Function.FunNameStartColumn) + + # Insert Identifier of function + for Identifier in Function.IdentifierList: + IdentifierID = IdTable.Insert(Identifier.Modifier, Identifier.Type, Identifier.Name, Identifier.Value, Identifier.Model, \ + FileID, FunctionID, Identifier.StartLine, Identifier.StartColumn, Identifier.EndLine, Identifier.EndColumn) + # Insert Identifier of file + for Identifier in File.IdentifierList: + IdentifierID = IdTable.Insert(Identifier.Modifier, Identifier.Type, Identifier.Name, Identifier.Value, Identifier.Model, \ + FileID, -1, Identifier.StartLine, Identifier.StartColumn, Identifier.EndLine, Identifier.EndColumn) + + EdkLogger.verbose("Insert information from file %s ... DONE!" % File.FullPath) + + ## UpdateIdentifierBelongsToFunction() method + # + # Update the field "BelongsToFunction" for each Indentifier + # + # @param self: The object pointer + # + def UpdateIdentifierBelongsToFunction(self): + EdkLogger.verbose("Update 'BelongsToFunction' for Identifiers started ...") + + SqlCommand = """select ID, BelongsToFile, StartLine, EndLine from Function""" + Records = self.TblFunction.Exec(SqlCommand) + Data1 = [] + Data2 = [] + for Record in Records: + FunctionID = Record[0] + BelongsToFile = Record[1] + StartLine = Record[2] + EndLine = Record[3] + + SqlCommand = """Update Identifier%s set BelongsToFunction = %s where BelongsToFile = %s and StartLine > %s and EndLine < %s""" % \ + (BelongsToFile, FunctionID, BelongsToFile, StartLine, EndLine) + self.TblIdentifier.Exec(SqlCommand) + + SqlCommand = """Update Identifier%s set BelongsToFunction = %s, Model = %s where BelongsToFile = %s and Model = %s and EndLine = %s""" % \ + (BelongsToFile, FunctionID, DataClass.MODEL_IDENTIFIER_FUNCTION_HEADER, BelongsToFile, DataClass.MODEL_IDENTIFIER_COMMENT, StartLine - 1) + self.TblIdentifier.Exec(SqlCommand) + + +## +# +# This acts like the main() function for the script, unless it is 'import'ed into another +# script. +# +if __name__ == '__main__': + EdkLogger.Initialize() + EdkLogger.SetLevel(EdkLogger.DEBUG_0) + EdkLogger.verbose("Start at " + time.strftime('%H:%M:%S', time.localtime())) + + Db = Database(DATABASE_PATH) + Db.InitDatabase() + Db.QueryTable(Db.TblDataModel) + + identifier1 = DataClass.IdentifierClass(-1, '', '', "i''1", 'aaa', DataClass.MODEL_IDENTIFIER_COMMENT, 1, -1, 32, 43, 54, 43) + identifier2 = DataClass.IdentifierClass(-1, '', '', 'i1', 'aaa', DataClass.MODEL_IDENTIFIER_COMMENT, 1, -1, 15, 43, 20, 43) + identifier3 = DataClass.IdentifierClass(-1, '', '', 'i1', 'aaa', DataClass.MODEL_IDENTIFIER_COMMENT, 1, -1, 55, 43, 58, 43) + identifier4 = DataClass.IdentifierClass(-1, '', '', "i1'", 'aaa', DataClass.MODEL_IDENTIFIER_COMMENT, 1, -1, 77, 43, 88, 43) + fun1 = DataClass.FunctionClass(-1, '', '', 'fun1', '', 21, 2, 60, 45, 1, 23, 0, [], []) + file = DataClass.FileClass(-1, 'F1', 'c', 'C:\\', 'C:\\F1.exe', DataClass.MODEL_FILE_C, '2007-12-28', [fun1], [identifier1, identifier2, identifier3, identifier4], []) + Db.InsertOneFile(file) + + Db.QueryTable(Db.TblFile) + Db.QueryTable(Db.TblFunction) + Db.QueryTable(Db.TblIdentifier) + + Db.Close() + EdkLogger.verbose("End at " + time.strftime('%H:%M:%S', time.localtime())) + diff --git a/BaseTools/Source/Python/Eot/EfiCompressor.pyd b/BaseTools/Source/Python/Eot/EfiCompressor.pyd new file mode 100644 index 0000000000000000000000000000000000000000..0729100b997577d4d531f947e693698ad916e19b GIT binary patch literal 8192 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 n=QA+)r}v=HAQI<2LxJBoX*;cCaoh literal 0 HcmV?d00001 diff --git a/BaseTools/Source/Python/Eot/Eot.py b/BaseTools/Source/Python/Eot/Eot.py new file mode 100644 index 0000000000..815907dfdd --- /dev/null +++ b/BaseTools/Source/Python/Eot/Eot.py @@ -0,0 +1,647 @@ +## @file +# This file is used to be the main entrance of EOT tool +# +# Copyright (c) 2008 - 2010, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# + +## +# Import Modules +# +import os, time, glob +import Common.EdkLogger as EdkLogger +import EotGlobalData +from optparse import OptionParser +from Common.String import NormPath +from Common import BuildToolError +from Common.Misc import GuidStructureStringToGuidString +from InfParserLite import * +import c +import Database +from FvImage import * +from array import array +from Report import Report +from Common.Misc import ParseConsoleLog +from Parser import ConvertGuid + +## Class Eot +# +# This class is used to define Eot main entrance +# +# @param object: Inherited from object class +# +class Eot(object): + ## The constructor + # + # @param self: The object pointer + # + def __init__(self, CommandLineOption=True, IsInit=True, SourceFileList=None, \ + IncludeDirList=None, DecFileList=None, GuidList=None, LogFile=None, + FvFileList="", MapFileList="", Report='Report.html', Dispatch=None): + # Version and Copyright + self.VersionNumber = "0.02" + self.Version = "%prog Version " + self.VersionNumber + self.Copyright = "Copyright (c) 2008 - 2010, Intel Corporation All rights reserved." + self.Report = Report + + self.IsInit = IsInit + self.SourceFileList = SourceFileList + self.IncludeDirList = IncludeDirList + self.DecFileList = DecFileList + self.GuidList = GuidList + self.LogFile = LogFile + self.FvFileList = FvFileList + self.MapFileList = MapFileList + self.Dispatch = Dispatch + + # Check workspace environment + if "EFI_SOURCE" not in os.environ: + if "EDK_SOURCE" not in os.environ: + pass + else: + EotGlobalData.gEDK_SOURCE = os.path.normpath(os.getenv("EDK_SOURCE")) + else: + EotGlobalData.gEFI_SOURCE = os.path.normpath(os.getenv("EFI_SOURCE")) + EotGlobalData.gEDK_SOURCE = os.path.join(EotGlobalData.gEFI_SOURCE, 'Edk') + + if "WORKSPACE" not in os.environ: + EdkLogger.error("EOT", BuildToolError.ATTRIBUTE_NOT_AVAILABLE, "Environment variable not found", + ExtraData="WORKSPACE") + else: + EotGlobalData.gWORKSPACE = os.path.normpath(os.getenv("WORKSPACE")) + + EotGlobalData.gMACRO['WORKSPACE'] = EotGlobalData.gWORKSPACE + EotGlobalData.gMACRO['EFI_SOURCE'] = EotGlobalData.gEFI_SOURCE + EotGlobalData.gMACRO['EDK_SOURCE'] = EotGlobalData.gEDK_SOURCE + + # Parse the options and args + if CommandLineOption: + self.ParseOption() + + if self.FvFileList: + for FvFile in GetSplitValueList(self.FvFileList, ' '): + FvFile = os.path.normpath(FvFile) + if not os.path.isfile(FvFile): + EdkLogger.error("Eot", EdkLogger.EOT_ERROR, "Can not find file %s " % FvFile) + EotGlobalData.gFV_FILE.append(FvFile) + else: + EdkLogger.error("Eot", EdkLogger.EOT_ERROR, "The fv file list of target platform was not specified") + + if self.MapFileList: + for MapFile in GetSplitValueList(self.MapFileList, ' '): + MapFile = os.path.normpath(MapFile) + if not os.path.isfile(MapFile): + EdkLogger.error("Eot", EdkLogger.EOT_ERROR, "Can not find file %s " % MapFile) + EotGlobalData.gMAP_FILE.append(MapFile) + + # Generate source file list + self.GenerateSourceFileList(self.SourceFileList, self.IncludeDirList) + + # Generate guid list of dec file list + self.ParseDecFile(self.DecFileList) + + # Generate guid list from GUID list file + self.ParseGuidList(self.GuidList) + + # Init Eot database + EotGlobalData.gDb = Database.Database(Database.DATABASE_PATH) + EotGlobalData.gDb.InitDatabase(self.IsInit) + + # Build ECC database + self.BuildDatabase() + + # Parse Ppi/Protocol + self.ParseExecutionOrder() + + # Merge Identifier tables + self.GenerateQueryTable() + + # Generate report database + self.GenerateReportDatabase() + + # Load Fv Info + self.LoadFvInfo() + + # Load Map Info + self.LoadMapInfo() + + # Generate Report + self.GenerateReport() + + # Convert log file + self.ConvertLogFile(self.LogFile) + + # DONE + EdkLogger.quiet("EOT FINISHED!") + + # Close Database + EotGlobalData.gDb.Close() + + ## ParseDecFile() method + # + # parse DEC file and get all GUID names with GUID values as {GuidName : GuidValue} + # The Dict is stored in EotGlobalData.gGuidDict + # + # @param self: The object pointer + # @param DecFileList: A list of all DEC files + # + def ParseDecFile(self, DecFileList): + if DecFileList: + path = os.path.normpath(DecFileList) + lfr = open(path, 'rb') + for line in lfr: + path = os.path.normpath(os.path.join(EotGlobalData.gWORKSPACE, line.strip())) + if os.path.exists(path): + dfr = open(path, 'rb') + for line in dfr: + line = CleanString(line) + list = line.split('=') + if len(list) == 2: + EotGlobalData.gGuidDict[list[0].strip()] = GuidStructureStringToGuidString(list[1].strip()) + + + ## ParseGuidList() method + # + # Parse Guid list and get all GUID names with GUID values as {GuidName : GuidValue} + # The Dict is stored in EotGlobalData.gGuidDict + # + # @param self: The object pointer + # @param GuidList: A list of all GUID and its value + # + def ParseGuidList(self, GuidList): + Path = os.path.join(EotGlobalData.gWORKSPACE, GuidList) + if os.path.isfile(Path): + for Line in open(Path): + (GuidName, GuidValue) = Line.split() + EotGlobalData.gGuidDict[GuidName] = GuidValue + + ## ConvertLogFile() method + # + # Parse a real running log file to get real dispatch order + # The result is saved to old file name + '.new' + # + # @param self: The object pointer + # @param LogFile: A real running log file name + # + def ConvertLogFile(self, LogFile): + newline = [] + lfr = None + lfw = None + if LogFile: + lfr = open(LogFile, 'rb') + lfw = open(LogFile + '.new', 'wb') + for line in lfr: + line = line.strip() + line = line.replace('.efi', '') + index = line.find("Loading PEIM at ") + if index > -1: + newline.append(line[index + 55 : ]) + continue + index = line.find("Loading driver at ") + if index > -1: + newline.append(line[index + 57 : ]) + continue + + for line in newline: + lfw.write(line + '\r\n') + + if lfr: + lfr.close() + if lfw: + lfw.close() + + ## GenerateSourceFileList() method + # + # Generate a list of all source files + # 1. Search the file list one by one + # 2. Store inf file name with source file names under it like + # { INF file name: [source file1, source file2, ...]} + # 3. Search the include list to find all .h files + # 4. Store source file list to EotGlobalData.gSOURCE_FILES + # 5. Store INF file list to EotGlobalData.gINF_FILES + # + # @param self: The object pointer + # @param SourceFileList: A list of all source files + # @param IncludeFileList: A list of all include files + # + def GenerateSourceFileList(self, SourceFileList, IncludeFileList): + EdkLogger.quiet("Generating source files list ... ") + mSourceFileList = [] + mInfFileList = [] + mDecFileList = [] + mFileList = {} + mCurrentInfFile = '' + mCurrentSourceFileList = [] + + if SourceFileList: + sfl = open(SourceFileList, 'rb') + for line in sfl: + line = os.path.normpath(os.path.join(EotGlobalData.gWORKSPACE, line.strip())) + if line[-2:].upper() == '.C' or line[-2:].upper() == '.H': + if line not in mCurrentSourceFileList: + mCurrentSourceFileList.append(line) + mSourceFileList.append(line) + EotGlobalData.gOP_SOURCE_FILES.write('%s\n' % line) + if line[-4:].upper() == '.INF': + if mCurrentInfFile != '': + mFileList[mCurrentInfFile] = mCurrentSourceFileList + mCurrentSourceFileList = [] + mCurrentInfFile = os.path.normpath(os.path.join(EotGlobalData.gWORKSPACE, line)) + EotGlobalData.gOP_INF.write('%s\n' % mCurrentInfFile) + if mCurrentInfFile not in mFileList: + mFileList[mCurrentInfFile] = mCurrentSourceFileList + + # Get all include files from packages + if IncludeFileList: + ifl = open(IncludeFileList, 'rb') + for line in ifl: + if not line.strip(): + continue + newline = os.path.normpath(os.path.join(EotGlobalData.gWORKSPACE, line.strip())) + for Root, Dirs, Files in os.walk(str(newline)): + for File in Files: + FullPath = os.path.normpath(os.path.join(Root, File)) + if FullPath not in mSourceFileList and File[-2:].upper() == '.H': + mSourceFileList.append(FullPath) + EotGlobalData.gOP_SOURCE_FILES.write('%s\n' % FullPath) + if FullPath not in mDecFileList and File.upper().find('.DEC') > -1: + mDecFileList.append(FullPath) + + EotGlobalData.gSOURCE_FILES = mSourceFileList + EotGlobalData.gOP_SOURCE_FILES.close() + + EotGlobalData.gINF_FILES = mFileList + EotGlobalData.gOP_INF.close() + + EotGlobalData.gDEC_FILES = mDecFileList + + + ## GenerateReport() method + # + # Generate final HTML report + # + # @param self: The object pointer + # + def GenerateReport(self): + EdkLogger.quiet("Generating report file ... ") + Rep = Report(self.Report, EotGlobalData.gFV, self.Dispatch) + Rep.GenerateReport() + + ## LoadMapInfo() method + # + # Load map files and parse them + # + # @param self: The object pointer + # + def LoadMapInfo(self): + if EotGlobalData.gMAP_FILE != []: + EdkLogger.quiet("Parsing Map file ... ") + EotGlobalData.gMap = ParseMapFile(EotGlobalData.gMAP_FILE) + + ## LoadFvInfo() method + # + # Load FV binary files and parse them + # + # @param self: The object pointer + # + def LoadFvInfo(self): + EdkLogger.quiet("Parsing FV file ... ") + EotGlobalData.gFV = MultipleFv(EotGlobalData.gFV_FILE) + EotGlobalData.gFV.Dispatch(EotGlobalData.gDb) + + for Protocol in EotGlobalData.gProtocolList: + EotGlobalData.gOP_UN_MATCHED_IN_LIBRARY_CALLING.write('%s\n' %Protocol) + + ## GenerateReportDatabase() method + # + # Generate data for the information needed by report + # 1. Update name, macro and value of all found PPI/PROTOCOL GUID + # 2. Install hard coded PPI/PROTOCOL + # + # @param self: The object pointer + # + def GenerateReportDatabase(self): + EdkLogger.quiet("Generating the cross-reference table of GUID for Ppi/Protocol ... ") + + # Update Protocol/Ppi Guid + SqlCommand = """select DISTINCT GuidName from Report""" + RecordSet = EotGlobalData.gDb.TblReport.Exec(SqlCommand) + for Record in RecordSet: + GuidName = Record[0] + GuidMacro = '' + GuidMacro2 = '' + GuidValue = '' + + # Find value for hardcode guid macro + if GuidName in EotGlobalData.gGuidMacroDict: + GuidMacro = EotGlobalData.gGuidMacroDict[GuidName][0] + GuidValue = EotGlobalData.gGuidMacroDict[GuidName][1] + SqlCommand = """update Report set GuidMacro = '%s', GuidValue = '%s' where GuidName = '%s'""" %(GuidMacro, GuidValue, GuidName) + EotGlobalData.gDb.TblReport.Exec(SqlCommand) + continue + + # Find guid value defined in Dec file + if GuidName in EotGlobalData.gGuidDict: + GuidValue = EotGlobalData.gGuidDict[GuidName] + SqlCommand = """update Report set GuidMacro = '%s', GuidValue = '%s' where GuidName = '%s'""" %(GuidMacro, GuidValue, GuidName) + EotGlobalData.gDb.TblReport.Exec(SqlCommand) + continue + + # Search defined Macros for guid name + SqlCommand ="""select DISTINCT Value, Modifier from Query where Name like '%s'""" % GuidName + GuidMacroSet = EotGlobalData.gDb.TblReport.Exec(SqlCommand) + # Ignore NULL result + if not GuidMacroSet: + continue + GuidMacro = GuidMacroSet[0][0].strip() + if not GuidMacro: + continue + # Find Guid value of Guid Macro + SqlCommand ="""select DISTINCT Value from Query2 where Value like '%%%s%%' and Model = %s""" % (GuidMacro, MODEL_IDENTIFIER_MACRO_DEFINE) + GuidValueSet = EotGlobalData.gDb.TblReport.Exec(SqlCommand) + if GuidValueSet != []: + GuidValue = GuidValueSet[0][0] + GuidValue = GuidValue[GuidValue.find(GuidMacro) + len(GuidMacro) :] + GuidValue = GuidValue.lower().replace('\\', '').replace('\r', '').replace('\n', '').replace('l', '').strip() + GuidValue = GuidStructureStringToGuidString(GuidValue) + SqlCommand = """update Report set GuidMacro = '%s', GuidValue = '%s' where GuidName = '%s'""" %(GuidMacro, GuidValue, GuidName) + EotGlobalData.gDb.TblReport.Exec(SqlCommand) + continue + + # Update Hard Coded Ppi/Protocol + SqlCommand = """select DISTINCT GuidValue, ItemType from Report where ModuleID = -2 and ItemMode = 'Produced'""" + RecordSet = EotGlobalData.gDb.TblReport.Exec(SqlCommand) + for Record in RecordSet: + if Record[1] == 'Ppi': + EotGlobalData.gPpiList[Record[0].lower()] = -2 + if Record[1] == 'Protocol': + EotGlobalData.gProtocolList[Record[0].lower()] = -2 + + ## GenerateQueryTable() method + # + # Generate two tables improve query performance + # + # @param self: The object pointer + # + def GenerateQueryTable(self): + EdkLogger.quiet("Generating temp query table for analysis ... ") + for Identifier in EotGlobalData.gIdentifierTableList: + SqlCommand = """insert into Query (Name, Modifier, Value, Model) + select Name, Modifier, Value, Model from %s where (Model = %s or Model = %s)""" \ + % (Identifier[0], MODEL_IDENTIFIER_VARIABLE, MODEL_IDENTIFIER_ASSIGNMENT_EXPRESSION) + EotGlobalData.gDb.TblReport.Exec(SqlCommand) + SqlCommand = """insert into Query2 (Name, Modifier, Value, Model) + select Name, Modifier, Value, Model from %s where Model = %s""" \ + % (Identifier[0], MODEL_IDENTIFIER_MACRO_DEFINE) + EotGlobalData.gDb.TblReport.Exec(SqlCommand) + + ## ParseExecutionOrder() method + # + # Get final execution order + # 1. Search all PPI + # 2. Search all PROTOCOL + # + # @param self: The object pointer + # + def ParseExecutionOrder(self): + EdkLogger.quiet("Searching Ppi/Protocol ... ") + for Identifier in EotGlobalData.gIdentifierTableList: + ModuleID, ModuleName, ModuleGuid, SourceFileID, SourceFileFullPath, ItemName, ItemType, ItemMode, GuidName, GuidMacro, GuidValue, BelongsToFunction, Enabled = \ + -1, '', '', -1, '', '', '', '', '', '', '', '', 0 + + SourceFileID = Identifier[0].replace('Identifier', '') + SourceFileFullPath = Identifier[1] + Identifier = Identifier[0] + + # Find Ppis + ItemMode = 'Produced' + SqlCommand = """select Value, Name, BelongsToFile, StartLine, EndLine from %s + where (Name like '%%%s%%' or Name like '%%%s%%' or Name like '%%%s%%') and Model = %s""" \ + % (Identifier, '.InstallPpi', '->InstallPpi', 'PeiInstallPpi', MODEL_IDENTIFIER_FUNCTION_CALLING) + SearchPpi(SqlCommand, Identifier, SourceFileID, SourceFileFullPath, ItemMode) + + ItemMode = 'Produced' + SqlCommand = """select Value, Name, BelongsToFile, StartLine, EndLine from %s + where (Name like '%%%s%%' or Name like '%%%s%%') and Model = %s""" \ + % (Identifier, '.ReInstallPpi', '->ReInstallPpi', MODEL_IDENTIFIER_FUNCTION_CALLING) + SearchPpi(SqlCommand, Identifier, SourceFileID, SourceFileFullPath, ItemMode, 2) + + SearchPpiCallFunction(Identifier, SourceFileID, SourceFileFullPath, ItemMode) + + ItemMode = 'Consumed' + SqlCommand = """select Value, Name, BelongsToFile, StartLine, EndLine from %s + where (Name like '%%%s%%' or Name like '%%%s%%') and Model = %s""" \ + % (Identifier, '.LocatePpi', '->LocatePpi', MODEL_IDENTIFIER_FUNCTION_CALLING) + SearchPpi(SqlCommand, Identifier, SourceFileID, SourceFileFullPath, ItemMode) + + SearchFunctionCalling(Identifier, SourceFileID, SourceFileFullPath, 'Ppi', ItemMode) + + ItemMode = 'Callback' + SqlCommand = """select Value, Name, BelongsToFile, StartLine, EndLine from %s + where (Name like '%%%s%%' or Name like '%%%s%%') and Model = %s""" \ + % (Identifier, '.NotifyPpi', '->NotifyPpi', MODEL_IDENTIFIER_FUNCTION_CALLING) + SearchPpi(SqlCommand, Identifier, SourceFileID, SourceFileFullPath, ItemMode) + + # Find Procotols + ItemMode = 'Produced' + SqlCommand = """select Value, Name, BelongsToFile, StartLine, EndLine from %s + where (Name like '%%%s%%' or Name like '%%%s%%' or Name like '%%%s%%' or Name like '%%%s%%') and Model = %s""" \ + % (Identifier, '.InstallProtocolInterface', '.ReInstallProtocolInterface', '->InstallProtocolInterface', '->ReInstallProtocolInterface', MODEL_IDENTIFIER_FUNCTION_CALLING) + SearchProtocols(SqlCommand, Identifier, SourceFileID, SourceFileFullPath, ItemMode, 1) + + SqlCommand = """select Value, Name, BelongsToFile, StartLine, EndLine from %s + where (Name like '%%%s%%' or Name like '%%%s%%') and Model = %s""" \ + % (Identifier, '.InstallMultipleProtocolInterfaces', '->InstallMultipleProtocolInterfaces', MODEL_IDENTIFIER_FUNCTION_CALLING) + SearchProtocols(SqlCommand, Identifier, SourceFileID, SourceFileFullPath, ItemMode, 2) + + SearchFunctionCalling(Identifier, SourceFileID, SourceFileFullPath, 'Protocol', ItemMode) + + ItemMode = 'Consumed' + SqlCommand = """select Value, Name, BelongsToFile, StartLine, EndLine from %s + where (Name like '%%%s%%' or Name like '%%%s%%') and Model = %s""" \ + % (Identifier, '.LocateProtocol', '->LocateProtocol', MODEL_IDENTIFIER_FUNCTION_CALLING) + SearchProtocols(SqlCommand, Identifier, SourceFileID, SourceFileFullPath, ItemMode, 0) + + SqlCommand = """select Value, Name, BelongsToFile, StartLine, EndLine from %s + where (Name like '%%%s%%' or Name like '%%%s%%') and Model = %s""" \ + % (Identifier, '.HandleProtocol', '->HandleProtocol', MODEL_IDENTIFIER_FUNCTION_CALLING) + SearchProtocols(SqlCommand, Identifier, SourceFileID, SourceFileFullPath, ItemMode, 1) + + SearchFunctionCalling(Identifier, SourceFileID, SourceFileFullPath, 'Protocol', ItemMode) + + ItemMode = 'Callback' + SqlCommand = """select Value, Name, BelongsToFile, StartLine, EndLine from %s + where (Name like '%%%s%%' or Name like '%%%s%%') and Model = %s""" \ + % (Identifier, '.RegisterProtocolNotify', '->RegisterProtocolNotify', MODEL_IDENTIFIER_FUNCTION_CALLING) + SearchProtocols(SqlCommand, Identifier, SourceFileID, SourceFileFullPath, ItemMode, 0) + + SearchFunctionCalling(Identifier, SourceFileID, SourceFileFullPath, 'Protocol', ItemMode) + + # Hard Code + EotGlobalData.gDb.TblReport.Insert(-2, '', '', -1, '', '', 'Ppi', 'Produced', 'gEfiSecPlatformInformationPpiGuid', '', '', '', 0) + EotGlobalData.gDb.TblReport.Insert(-2, '', '', -1, '', '', 'Ppi', 'Produced', 'gEfiNtLoadAsDllPpiGuid', '', '', '', 0) + EotGlobalData.gDb.TblReport.Insert(-2, '', '', -1, '', '', 'Ppi', 'Produced', 'gNtPeiLoadFileGuid', '', '', '', 0) + EotGlobalData.gDb.TblReport.Insert(-2, '', '', -1, '', '', 'Ppi', 'Produced', 'gPeiNtAutoScanPpiGuid', '', '', '', 0) + EotGlobalData.gDb.TblReport.Insert(-2, '', '', -1, '', '', 'Ppi', 'Produced', 'gNtFwhPpiGuid', '', '', '', 0) + EotGlobalData.gDb.TblReport.Insert(-2, '', '', -1, '', '', 'Ppi', 'Produced', 'gPeiNtThunkPpiGuid', '', '', '', 0) + EotGlobalData.gDb.TblReport.Insert(-2, '', '', -1, '', '', 'Ppi', 'Produced', 'gPeiPlatformTypePpiGuid', '', '', '', 0) + EotGlobalData.gDb.TblReport.Insert(-2, '', '', -1, '', '', 'Ppi', 'Produced', 'gPeiFrequencySelectionCpuPpiGuid', '', '', '', 0) + EotGlobalData.gDb.TblReport.Insert(-2, '', '', -1, '', '', 'Ppi', 'Produced', 'gPeiCachePpiGuid', '', '', '', 0) + + EotGlobalData.gDb.Conn.commit() + + + ## BuildDatabase() methoc + # + # Build the database for target + # + # @param self: The object pointer + # + def BuildDatabase(self): + # Clean report table + EotGlobalData.gDb.TblReport.Drop() + EotGlobalData.gDb.TblReport.Create() + + # Build database + if self.IsInit: + self.BuildMetaDataFileDatabase(EotGlobalData.gINF_FILES) + EdkLogger.quiet("Building database for source code ...") + c.CreateCCodeDB(EotGlobalData.gSOURCE_FILES) + EdkLogger.quiet("Building database for source code done!") + + EotGlobalData.gIdentifierTableList = GetTableList((MODEL_FILE_C, MODEL_FILE_H), 'Identifier', EotGlobalData.gDb) + + ## BuildMetaDataFileDatabase() method + # + # Build the database for meta data files + # + # @param self: The object pointer + # @param Inf_Files: A list for all INF files + # + def BuildMetaDataFileDatabase(self, Inf_Files): + EdkLogger.quiet("Building database for meta data files ...") + for InfFile in Inf_Files: + EdkLogger.quiet("Parsing %s ..." % str(InfFile)) + EdkInfParser(InfFile, EotGlobalData.gDb, Inf_Files[InfFile], '') + + EotGlobalData.gDb.Conn.commit() + EdkLogger.quiet("Building database for meta data files done!") + + ## ParseOption() method + # + # Parse command line options + # + # @param self: The object pointer + # + def ParseOption(self): + (Options, Target) = self.EotOptionParser() + + # Set log level + self.SetLogLevel(Options) + + if Options.FvFileList: + self.FvFileList = Options.FvFileList + + if Options.MapFileList: + self.MapFileList = Options.FvMapFileList + + if Options.SourceFileList: + self.SourceFileList = Options.SourceFileList + + if Options.IncludeDirList: + self.IncludeDirList = Options.IncludeDirList + + if Options.DecFileList: + self.DecFileList = Options.DecFileList + + if Options.GuidList: + self.GuidList = Options.GuidList + + if Options.LogFile: + self.LogFile = Options.LogFile + + if Options.keepdatabase: + self.IsInit = False + + ## SetLogLevel() method + # + # Set current log level of the tool based on args + # + # @param self: The object pointer + # @param Option: The option list including log level setting + # + def SetLogLevel(self, Option): + if Option.verbose != None: + EdkLogger.SetLevel(EdkLogger.VERBOSE) + elif Option.quiet != None: + EdkLogger.SetLevel(EdkLogger.QUIET) + elif Option.debug != None: + EdkLogger.SetLevel(Option.debug + 1) + else: + EdkLogger.SetLevel(EdkLogger.INFO) + + ## EotOptionParser() method + # + # Using standard Python module optparse to parse command line option of this tool. + # + # @param self: The object pointer + # + # @retval Opt A optparse.Values object containing the parsed options + # @retval Args Target of build command + # + def EotOptionParser(self): + Parser = OptionParser(description = self.Copyright, version = self.Version, prog = "Eot.exe", usage = "%prog [options]") + Parser.add_option("-m", "--makefile filename", action="store", type="string", dest='MakeFile', + help="Specify a makefile for the platform.") + Parser.add_option("-c", "--dsc filename", action="store", type="string", dest="DscFile", + help="Specify a dsc file for the platform.") + Parser.add_option("-f", "--fv filename", action="store", type="string", dest="FvFileList", + help="Specify fv file list, quoted by \"\".") + Parser.add_option("-a", "--map filename", action="store", type="string", dest="MapFileList", + help="Specify map file list, quoted by \"\".") + Parser.add_option("-s", "--source files", action="store", type="string", dest="SourceFileList", + help="Specify source file list by a file") + Parser.add_option("-i", "--include dirs", action="store", type="string", dest="IncludeDirList", + help="Specify include dir list by a file") + Parser.add_option("-e", "--dec files", action="store", type="string", dest="DecFileList", + help="Specify dec file list by a file") + Parser.add_option("-g", "--guid list", action="store", type="string", dest="GuidList", + help="Specify guid file list by a file") + Parser.add_option("-l", "--log filename", action="store", type="string", dest="LogFile", + help="Specify real execution log file") + + Parser.add_option("-k", "--keepdatabase", action="store_true", type=None, help="The existing Eot database will not be cleaned except report information if this option is specified.") + + Parser.add_option("-q", "--quiet", action="store_true", type=None, help="Disable all messages except FATAL ERRORS.") + Parser.add_option("-v", "--verbose", action="store_true", type=None, help="Turn on verbose output with informational messages printed, "\ + "including library instances selected, final dependency expression, "\ + "and warning messages, etc.") + Parser.add_option("-d", "--debug", action="store", type="int", help="Enable debug messages at specified level.") + + (Opt, Args)=Parser.parse_args() + + return (Opt, Args) + +## +# +# This acts like the main() function for the script, unless it is 'import'ed into another +# script. +# +if __name__ == '__main__': + # Initialize log system + EdkLogger.Initialize() + EdkLogger.IsRaiseError = False + EdkLogger.quiet(time.strftime("%H:%M:%S, %b.%d %Y ", time.localtime()) + "[00:00]" + "\n") + + StartTime = time.clock() + Eot = Eot() + FinishTime = time.clock() + + BuildDuration = time.strftime("%M:%S", time.gmtime(int(round(FinishTime - StartTime)))) + EdkLogger.quiet("\n%s [%s]" % (time.strftime("%H:%M:%S, %b.%d %Y", time.localtime()), BuildDuration)) diff --git a/BaseTools/Source/Python/Eot/EotGlobalData.py b/BaseTools/Source/Python/Eot/EotGlobalData.py new file mode 100644 index 0000000000..a70a60b819 --- /dev/null +++ b/BaseTools/Source/Python/Eot/EotGlobalData.py @@ -0,0 +1,138 @@ +## @file +# This file is used to save global datas +# +# Copyright (c) 2008 - 2010, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# + +from Common.Misc import sdict + +gEFI_SOURCE = '' +gEDK_SOURCE = '' +gWORKSPACE = '' +gSHELL_INF = 'Application\Shell' +gMAKE_FILE = '' +gDSC_FILE = '' +gFV_FILE = [] +gFV = [] +gMAP_FILE = [] +gMap = {} + + +gDb = '' +gIdentifierTableList = [] + +# Global macro +gMACRO = {} +gMACRO['EFI_SOURCE'] = gEFI_SOURCE +gMACRO['EDK_SOURCE'] = gEDK_SOURCE +gMACRO['SHELL_INF'] = gSHELL_INF +gMACRO['CAPSULE_INF'] = '' + +gNOT_FOUND_FILES = [] +gSOURCE_FILES = [] +gINF_FILES = {} +gDEC_FILES = [] + +# Log file for unmatched variables +gUN_MATCHED_LOG = 'Log_UnMatched.log' +gOP_UN_MATCHED = open(gUN_MATCHED_LOG, 'w+') + +# Log file for all INF files +gINF_FILES = 'Log_Inf_File.log' +gOP_INF = open(gINF_FILES, 'w+') + +# Log file for not dispatched PEIM/DRIVER +gUN_DISPATCHED_LOG = 'Log_UnDispatched.log' +gOP_UN_DISPATCHED = open(gUN_DISPATCHED_LOG, 'w+') + +# Log file for unmatched variables in function calling +gUN_MATCHED_IN_LIBRARY_CALLING_LOG = 'Log_UnMatchedInLibraryCalling.log' +gOP_UN_MATCHED_IN_LIBRARY_CALLING = open(gUN_MATCHED_IN_LIBRARY_CALLING_LOG, 'w+') + +# Log file for order of dispatched PEIM/DRIVER +gDISPATCH_ORDER_LOG = 'Log_DispatchOrder.log' +gOP_DISPATCH_ORDER = open(gDISPATCH_ORDER_LOG, 'w+') + +# Log file for source files not found +gUN_FOUND_FILES = 'Log_UnFoundSourceFiles.log' +gOP_UN_FOUND_FILES = open(gUN_FOUND_FILES, 'w+') + +# Log file for found source files +gSOURCE_FILES = 'Log_SourceFiles.log' +gOP_SOURCE_FILES = open(gSOURCE_FILES, 'w+') + +# Dict for GUID found in DEC files +gGuidDict = sdict() + +# Dict for hard coded GUID Macros +# {GuidName : [GuidMacro : GuidValue]} +gGuidMacroDict = sdict() + +# Dict for PPI +gPpiList = {} + +# Dict for PROTOCOL +gProtocolList = {} + +# Dict for consumed PPI function calling +gConsumedPpiLibrary = sdict() +gConsumedPpiLibrary['EfiCommonLocateInterface'] = 0 +gConsumedPpiLibrary['PeiServicesLocatePpi'] = 0 + +# Dict for produced PROTOCOL function calling +gProducedProtocolLibrary = sdict() +gProducedProtocolLibrary['RegisterEsalClass'] = 0 +gProducedProtocolLibrary['CoreInstallProtocolInterface'] = 1 +gProducedProtocolLibrary['CoreInstallMultipleProtocolInterfaces'] = -1 +gProducedProtocolLibrary['EfiInstallProtocolInterface'] = 1 +gProducedProtocolLibrary['EfiReinstallProtocolInterface'] = 1 +gProducedProtocolLibrary['EfiLibNamedEventSignal'] = 0 +gProducedProtocolLibrary['LibInstallProtocolInterfaces'] = 1 +gProducedProtocolLibrary['LibReinstallProtocolInterfaces'] = 1 + +# Dict for consumed PROTOCOL function calling +gConsumedProtocolLibrary = sdict() +gConsumedProtocolLibrary['EfiHandleProtocol'] = 0 +gConsumedProtocolLibrary['EfiLocateProtocolHandleBuffers'] = 0 +gConsumedProtocolLibrary['EfiLocateProtocolInterface'] = 0 +gConsumedProtocolLibrary['EfiHandleProtocol'] = 1 + +# Dict for callback PROTOCOL function callling +gCallbackProtocolLibrary = sdict() +gCallbackProtocolLibrary['EfiRegisterProtocolCallback'] = 2 + +# Dict for ARCH PROTOCOL +gArchProtocols = ['gEfiBdsArchProtocolGuid', + 'gEfiCapsuleArchProtocolGuid', + 'gEfiCpuArchProtocolGuid', #5053697e-2cbc-4819-90d9-0580deee5754 + 'gEfiMetronomeArchProtocolGuid', + 'gEfiMonotonicCounterArchProtocolGuid', + 'gEfiRealTimeClockArchProtocolGuid', + 'gEfiResetArchProtocolGuid', + 'gEfiRuntimeArchProtocolGuid', + 'gEfiSecurityArchProtocolGuid', + 'gEfiStatusCodeRuntimeProtocolGuid', + 'gEfiTimerArchProtocolGuid', + 'gEfiVariableArchProtocolGuid', + 'gEfiVariableWriteArchProtocolGuid', + 'gEfiWatchdogTimerArchProtocolGuid'] +gArchProtocolGuids = ['665e3ff6-46cc-11d4-9a38-0090273fc14d', + '26baccb1-6f42-11d4-bce7-0080c73c8881', + '26baccb2-6f42-11d4-bce7-0080c73c8881', + '1da97072-bddc-4b30-99f1-72a0b56fff2a', + '27cfac87-46cc-11d4-9a38-0090273fc14d', + '27cfac88-46cc-11d4-9a38-0090273fc14d', + 'b7dfb4e1-052f-449f-87be-9818fc91b733', + 'a46423e3-4617-49f1-b9ff-d1bfa9115839', + 'd2b2b828-0826-48a7-b3df-983c006024f0', + '26baccb3-6f42-11d4-bce7-0080c73c8881', + '1e5668e2-8481-11d4-bcf1-0080c73c8881', + '6441f818-6362-4e44-b570-7dba31dd2453', + '665e3ff5-46cc-11d4-9a38-0090273fc14d'] diff --git a/BaseTools/Source/Python/Eot/EotToolError.py b/BaseTools/Source/Python/Eot/EotToolError.py new file mode 100644 index 0000000000..17005f30f6 --- /dev/null +++ b/BaseTools/Source/Python/Eot/EotToolError.py @@ -0,0 +1,21 @@ +## @file +# Standardized Error Handling infrastructures. +# +# Copyright (c) 2008 - 2010, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# + +# Error id +ERROR_1 = 1000 + +# Error message +gEccErrorMessage = { + ERROR_1 : "RESERVED" + } + diff --git a/BaseTools/Source/Python/Eot/FileProfile.py b/BaseTools/Source/Python/Eot/FileProfile.py new file mode 100644 index 0000000000..602639e5bd --- /dev/null +++ b/BaseTools/Source/Python/Eot/FileProfile.py @@ -0,0 +1,58 @@ +## @file +# fragments of source file +# +# Copyright (c) 2007 - 2010, Intel Corporation +# +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# + +## +# Import Modules +# + +import re +import os +from ParserWarning import Warning + +# Profile contents of a file +PPDirectiveList = [] +AssignmentExpressionList = [] +PredicateExpressionList = [] +FunctionDefinitionList = [] +VariableDeclarationList = [] +EnumerationDefinitionList = [] +StructUnionDefinitionList = [] +TypedefDefinitionList = [] +FunctionCallingList = [] + +## Class FileProfile +# +# record file data when parsing source +# +# May raise Exception when opening file. +# +class FileProfile : + + ## The constructor + # + # @param self: The object pointer + # @param FileName: The file that to be parsed + # + def __init__(self, FileName): + self.FileLinesList = [] + self.FileLinesListFromFile = [] + try: + fsock = open(FileName, "rb", 0) + try: + self.FileLinesListFromFile = fsock.readlines() + finally: + fsock.close() + + except IOError: + raise Warning("Error when opening file %s" % FileName) diff --git a/BaseTools/Source/Python/Eot/FvImage.py b/BaseTools/Source/Python/Eot/FvImage.py new file mode 100644 index 0000000000..ad88491bae --- /dev/null +++ b/BaseTools/Source/Python/Eot/FvImage.py @@ -0,0 +1,1453 @@ +## @file +# Parse FV image +# +# Copyright (c) 2008 - 2010, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# + +## Import Modules +# +import os +import re +import sys +import uuid +import struct +import codecs +import copy + +from UserDict import IterableUserDict +from cStringIO import StringIO +from array import array + +from CommonDataClass import * +from Common.Misc import sdict, GuidStructureStringToGuidString + +import Common.EdkLogger as EdkLogger + +import EotGlobalData + +# Global definiton +gFfsPrintTitle = "%-36s %-21s %8s %8s %8s %-4s %-36s" % ("GUID", "TYPE", "OFFSET", "SIZE", "FREE", "ALIGN", "NAME") +gFfsPrintFormat = "%36s %-21s %8X %8X %8X %4s %-36s" +gGuidStringFormat = "%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X" +gPeiAprioriFileNameGuid = '1b45cc0a-156a-428a-af62-49864da0e6e6' +gAprioriGuid = 'fc510ee7-ffdc-11d4-bd41-0080c73c8881' +gIndention = -4 + +## Image() class +# +# A class for Image +# +class Image(array): + _HEADER_ = struct.Struct("") + _HEADER_SIZE_ = _HEADER_.size + + def __new__(cls, *args, **kwargs): + return array.__new__(cls, 'B') + + def __init__(m, ID=None): + if ID == None: + m._ID_ = str(uuid.uuid1()).upper() + else: + m._ID_ = ID + m._BUF_ = None + m._LEN_ = None + m._OFF_ = None + + m._SubImages = sdict() # {offset: Image()} + + array.__init__(m, 'B') + + def __repr__(m): + return m._ID_ + + def __len__(m): + Len = array.__len__(m) + for Offset in m._SubImages: + Len += len(m._SubImages[Offset]) + return Len + + def _Unpack(m): + m.extend(m._BUF_[m._OFF_ : m._OFF_ + m._LEN_]) + return len(m) + + def _Pack(m, PadByte=0xFF): + raise NotImplementedError + + def frombuffer(m, Buffer, Offset=0, Size=None): + m._BUF_ = Buffer + m._OFF_ = Offset + # we may need the Size information in advance if it's given + m._LEN_ = Size + m._LEN_ = m._Unpack() + + def empty(m): + del m[0:] + + def GetField(m, FieldStruct, Offset=0): + return FieldStruct.unpack_from(m, Offset) + + def SetField(m, FieldStruct, Offset, *args): + # check if there's enough space + Size = FieldStruct.size + if Size > len(m): + m.extend([0] * (Size - len(m))) + FieldStruct.pack_into(m, Offset, *args) + + def _SetData(m, Data): + if len(m) < m._HEADER_SIZE_: + m.extend([0] * (m._HEADER_SIZE_ - len(m))) + else: + del m[m._HEADER_SIZE_:] + m.extend(Data) + + def _GetData(m): + if len(m) > m._HEADER_SIZE_: + return m[m._HEADER_SIZE_:] + return None + + Data = property(_GetData, _SetData) + +## FirmwareVolume() class +# +# A class for Firmware Volume +# +class FirmwareVolume(Image): + # Read FvLength, Attributes, HeaderLength, Checksum + _HEADER_ = struct.Struct("16x 1I2H8B 1Q 4x 1I 1H 1H") + _HEADER_SIZE_ = _HEADER_.size + + _FfsGuid = "8C8CE578-8A3D-4F1C-9935-896185C32DD3" + + _GUID_ = struct.Struct("16x 1I2H8B") + _LENGTH_ = struct.Struct("16x 16x 1Q") + _SIG_ = struct.Struct("16x 16x 8x 1I") + _ATTR_ = struct.Struct("16x 16x 8x 4x 1I") + _HLEN_ = struct.Struct("16x 16x 8x 4x 4x 1H") + _CHECKSUM_ = struct.Struct("16x 16x 8x 4x 4x 2x 1H") + + def __init__(self, Name=''): + Image.__init__(self) + self.Name = Name + self.FfsDict = sdict() + self.OrderedFfsDict = sdict() + self.UnDispatchedFfsDict = sdict() + self.NoDepexFfsDict = sdict() + self.ProtocolList = sdict() + + def CheckArchProtocol(self): + for Item in EotGlobalData.gArchProtocolGuids: + if Item.lower() not in EotGlobalData.gProtocolList: + + return False + + return True + + def ParseDepex(self, Depex, Type): + List = None + if Type == 'Ppi': + List = EotGlobalData.gPpiList + if Type == 'Protocol': + List = EotGlobalData.gProtocolList + DepexStack = [] + DepexList = [] + DepexString = '' + FileDepex = None + CouldBeLoaded = True + for Index in range(0, len(Depex.Expression)): + Item = Depex.Expression[Index] + if Item == 0x00: + Index = Index + 1 + Guid = gGuidStringFormat % Depex.Expression[Index] + if Guid in self.OrderedFfsDict and Depex.Expression[Index + 1] == 0x08: + return (True, 'BEFORE %s' % Guid, [Guid, 'BEFORE']) + elif Item == 0x01: + Index = Index + 1 + Guid = gGuidStringFormat % Depex.Expression[Index] + if Guid in self.OrderedFfsDict and Depex.Expression[Index + 1] == 0x08: + return (True, 'AFTER %s' % Guid, [Guid, 'AFTER']) + elif Item == 0x02: + Index = Index + 1 + Guid = gGuidStringFormat % Depex.Expression[Index] + if Guid.lower() in List: + DepexStack.append(True) + DepexList.append(Guid) + else: + DepexStack.append(False) + DepexList.append(Guid) + continue + elif Item == 0x03 or Item == 0x04: + DepexStack.append(eval(str(DepexStack.pop()) + ' ' + Depex._OPCODE_STRING_[Item].lower() + ' ' + str(DepexStack.pop()))) + DepexList.append(str(DepexList.pop()) + ' ' + Depex._OPCODE_STRING_[Item].upper() + ' ' + str(DepexList.pop())) + elif Item == 0x05: + DepexStack.append(eval(Depex._OPCODE_STRING_[Item].lower() + ' ' + str(DepexStack.pop()))) + DepexList.append(Depex._OPCODE_STRING_[Item].lower() + ' ' + str(DepexList.pop())) + elif Item == 0x06: + DepexStack.append(True) + DepexList.append('TRUE') + DepexString = DepexString + 'TRUE' + ' ' + elif Item == 0x07: + DepexStack.append(False) + DepexList.append('False') + DepexString = DepexString + 'FALSE' + ' ' + elif Item == 0x08: + if Index != len(Depex.Expression) - 1: + CouldBeLoaded = False + else: + CouldBeLoaded = DepexStack.pop() + else: + CouldBeLoaded = False + if DepexList != []: + DepexString = DepexList[0].strip() + return (CouldBeLoaded, DepexString, FileDepex) + + def Dispatch(self, Db = None): + if Db == None: + return False + self.UnDispatchedFfsDict = copy.copy(self.FfsDict) + # Find PeiCore, DexCore, PeiPriori, DxePriori first + FfsSecCoreGuid = None + FfsPeiCoreGuid = None + FfsDxeCoreGuid = None + FfsPeiPrioriGuid = None + FfsDxePrioriGuid = None + for FfsID in self.UnDispatchedFfsDict: + Ffs = self.UnDispatchedFfsDict[FfsID] + if Ffs.Type == 0x03: + FfsSecCoreGuid = FfsID + continue + if Ffs.Type == 0x04: + FfsPeiCoreGuid = FfsID + continue + if Ffs.Type == 0x05: + FfsDxeCoreGuid = FfsID + continue + if Ffs.Guid.lower() == gPeiAprioriFileNameGuid: + FfsPeiPrioriGuid = FfsID + continue + if Ffs.Guid.lower() == gAprioriGuid: + FfsDxePrioriGuid = FfsID + continue + + # Parse SEC_CORE first + if FfsSecCoreGuid != None: + self.OrderedFfsDict[FfsSecCoreGuid] = self.UnDispatchedFfsDict.pop(FfsSecCoreGuid) + self.LoadPpi(Db, FfsSecCoreGuid) + + # Parse PEI first + if FfsPeiCoreGuid != None: + self.OrderedFfsDict[FfsPeiCoreGuid] = self.UnDispatchedFfsDict.pop(FfsPeiCoreGuid) + self.LoadPpi(Db, FfsPeiCoreGuid) + if FfsPeiPrioriGuid != None: + # Load PEIM described in priori file + FfsPeiPriori = self.UnDispatchedFfsDict.pop(FfsPeiPrioriGuid) + if len(FfsPeiPriori.Sections) == 1: + Section = FfsPeiPriori.Sections.popitem()[1] + if Section.Type == 0x19: + GuidStruct = struct.Struct('1I2H8B') + Start = 4 + while len(Section) > Start: + Guid = GuidStruct.unpack_from(Section[Start : Start + 16]) + GuidString = gGuidStringFormat % Guid + Start = Start + 16 + if GuidString in self.UnDispatchedFfsDict: + self.OrderedFfsDict[GuidString] = self.UnDispatchedFfsDict.pop(GuidString) + self.LoadPpi(Db, GuidString) + + self.DisPatchPei(Db) + + # Parse DXE then + if FfsDxeCoreGuid != None: + self.OrderedFfsDict[FfsDxeCoreGuid] = self.UnDispatchedFfsDict.pop(FfsDxeCoreGuid) + self.LoadProtocol(Db, FfsDxeCoreGuid) + if FfsDxePrioriGuid != None: + # Load PEIM described in priori file + FfsDxePriori = self.UnDispatchedFfsDict.pop(FfsDxePrioriGuid) + if len(FfsDxePriori.Sections) == 1: + Section = FfsDxePriori.Sections.popitem()[1] + if Section.Type == 0x19: + GuidStruct = struct.Struct('1I2H8B') + Start = 4 + while len(Section) > Start: + Guid = GuidStruct.unpack_from(Section[Start : Start + 16]) + GuidString = gGuidStringFormat % Guid + Start = Start + 16 + if GuidString in self.UnDispatchedFfsDict: + self.OrderedFfsDict[GuidString] = self.UnDispatchedFfsDict.pop(GuidString) + self.LoadProtocol(Db, GuidString) + + self.DisPatchDxe(Db) + + def DisPatchNoDepexFfs(self, Db): + # Last Load Drivers without Depex + for FfsID in self.NoDepexFfsDict: + NewFfs = self.NoDepexFfsDict.pop(FfsID) + self.OrderedFfsDict[FfsID] = NewFfs + self.LoadProtocol(Db, FfsID) + + return True + + def LoadCallbackProtocol(self): + IsLoad = True + for Protocol in self.ProtocolList: + for Callback in self.ProtocolList[Protocol][1]: + if Callback[0] not in self.OrderedFfsDict.keys(): + IsLoad = False + continue + if IsLoad: + EotGlobalData.gProtocolList[Protocol.lower()] = self.ProtocolList[Protocol][0] + self.ProtocolList.pop(Protocol) + + def LoadProtocol(self, Db, ModuleGuid): + SqlCommand = """select GuidValue from Report + where SourceFileFullPath in + (select Value1 from Inf where BelongsToFile = + (select BelongsToFile from Inf + where Value1 = 'FILE_GUID' and Value2 like '%s' and Model = %s) + and Model = %s) + and ItemType = 'Protocol' and ItemMode = 'Produced'""" \ + % (ModuleGuid, 5001, 3007) + RecordSet = Db.TblReport.Exec(SqlCommand) + for Record in RecordSet: + SqlCommand = """select Value2 from Inf where BelongsToFile = + (select DISTINCT BelongsToFile from Inf + where Value1 = + (select SourceFileFullPath from Report + where GuidValue like '%s' and ItemMode = 'Callback')) + and Value1 = 'FILE_GUID'""" % Record[0] + CallBackSet = Db.TblReport.Exec(SqlCommand) + if CallBackSet != []: + EotGlobalData.gProtocolList[Record[0].lower()] = ModuleGuid + else: + EotGlobalData.gProtocolList[Record[0].lower()] = ModuleGuid + + def LoadPpi(self, Db, ModuleGuid): + SqlCommand = """select GuidValue from Report + where SourceFileFullPath in + (select Value1 from Inf where BelongsToFile = + (select BelongsToFile from Inf + where Value1 = 'FILE_GUID' and Value2 like '%s' and Model = %s) + and Model = %s) + and ItemType = 'Ppi' and ItemMode = 'Produced'""" \ + % (ModuleGuid, 5001, 3007) + RecordSet = Db.TblReport.Exec(SqlCommand) + for Record in RecordSet: + EotGlobalData.gPpiList[Record[0].lower()] = ModuleGuid + + def DisPatchDxe(self, Db): + IsInstalled = False + ScheduleList = sdict() + for FfsID in self.UnDispatchedFfsDict: + CouldBeLoaded = False + DepexString = '' + FileDepex = None + Ffs = self.UnDispatchedFfsDict[FfsID] + if Ffs.Type == 0x07: + # Get Depex + IsFoundDepex = False + for Section in Ffs.Sections.values(): + # Find Depex + if Section.Type == 0x13: + IsFoundDepex = True + CouldBeLoaded, DepexString, FileDepex = self.ParseDepex(Section._SubImages[4], 'Protocol') + break + if Section.Type == 0x01: + CompressSections = Section._SubImages[4] + for CompressSection in CompressSections.Sections: + if CompressSection.Type == 0x13: + IsFoundDepex = True + CouldBeLoaded, DepexString, FileDepex = self.ParseDepex(CompressSection._SubImages[4], 'Protocol') + break + if CompressSection.Type == 0x02: + NewSections = CompressSection._SubImages[4] + for NewSection in NewSections.Sections: + if NewSection.Type == 0x13: + IsFoundDepex = True + CouldBeLoaded, DepexString, FileDepex = self.ParseDepex(NewSection._SubImages[4], 'Protocol') + break + + # Not find Depex + if not IsFoundDepex: + CouldBeLoaded = self.CheckArchProtocol() + DepexString = '' + FileDepex = None + + # Append New Ffs + if CouldBeLoaded: + IsInstalled = True + NewFfs = self.UnDispatchedFfsDict.pop(FfsID) + NewFfs.Depex = DepexString + if FileDepex != None: + ScheduleList.insert.insert(FileDepex[1], FfsID, NewFfs, FileDepex[0]) + else: + ScheduleList[FfsID] = NewFfs + else: + self.UnDispatchedFfsDict[FfsID].Depex = DepexString + + for FfsID in ScheduleList: + NewFfs = ScheduleList.pop(FfsID) + FfsName = 'UnKnown' + self.OrderedFfsDict[FfsID] = NewFfs + self.LoadProtocol(Db, FfsID) + + SqlCommand = """select Value2 from Inf + where BelongsToFile = (select BelongsToFile from Inf where Value1 = 'FILE_GUID' and lower(Value2) = lower('%s') and Model = %s) + and Model = %s and Value1='BASE_NAME'""" % (FfsID, 5001, 5001) + RecordSet = Db.TblReport.Exec(SqlCommand) + if RecordSet != []: + FfsName = RecordSet[0][0] + + if IsInstalled: + self.DisPatchDxe(Db) + + def DisPatchPei(self, Db): + IsInstalled = False + for FfsID in self.UnDispatchedFfsDict: + CouldBeLoaded = True + DepexString = '' + FileDepex = None + Ffs = self.UnDispatchedFfsDict[FfsID] + if Ffs.Type == 0x06 or Ffs.Type == 0x08: + # Get Depex + for Section in Ffs.Sections.values(): + if Section.Type == 0x1B: + CouldBeLoaded, DepexString, FileDepex = self.ParseDepex(Section._SubImages[4], 'Ppi') + break + + if Section.Type == 0x01: + CompressSections = Section._SubImages[4] + for CompressSection in CompressSections.Sections: + if CompressSection.Type == 0x1B: + CouldBeLoaded, DepexString, FileDepex = self.ParseDepex(CompressSection._SubImages[4], 'Ppi') + break + if CompressSection.Type == 0x02: + NewSections = CompressSection._SubImages[4] + for NewSection in NewSections.Sections: + if NewSection.Type == 0x1B: + CouldBeLoaded, DepexString, FileDepex = self.ParseDepex(NewSection._SubImages[4], 'Ppi') + break + + # Append New Ffs + if CouldBeLoaded: + IsInstalled = True + NewFfs = self.UnDispatchedFfsDict.pop(FfsID) + NewFfs.Depex = DepexString + self.OrderedFfsDict[FfsID] = NewFfs + self.LoadPpi(Db, FfsID) + else: + self.UnDispatchedFfsDict[FfsID].Depex = DepexString + + if IsInstalled: + self.DisPatchPei(Db) + + + def __str__(self): + global gIndention + gIndention += 4 + FvInfo = '\n' + ' ' * gIndention + FvInfo += "[FV:%s] file_system=%s size=%x checksum=%s\n" % (self.Name, self.FileSystemGuid, self.Size, self.Checksum) + FfsInfo = "\n".join([str(self.FfsDict[FfsId]) for FfsId in self.FfsDict]) + gIndention -= 4 + return FvInfo + FfsInfo + + def _Unpack(self): + Size = self._LENGTH_.unpack_from(self._BUF_, self._OFF_)[0] + self.empty() + self.extend(self._BUF_[self._OFF_:self._OFF_+Size]) + + # traverse the FFS + EndOfFv = Size + FfsStartAddress = self.HeaderSize + LastFfsObj = None + while FfsStartAddress < EndOfFv: + FfsObj = Ffs() + FfsObj.frombuffer(self, FfsStartAddress) + FfsId = repr(FfsObj) + if ((self.Attributes & 0x00000800) != 0 and len(FfsObj) == 0xFFFFFF) \ + or ((self.Attributes & 0x00000800) == 0 and len(FfsObj) == 0): + if LastFfsObj != None: + LastFfsObj.FreeSpace = EndOfFv - LastFfsObj._OFF_ - len(LastFfsObj) + else: + if FfsId in self.FfsDict: + EdkLogger.error("FV", 0, "Duplicate GUID in FFS", + ExtraData="\t%s @ %s\n\t%s @ %s" \ + % (FfsObj.Guid, FfsObj.Offset, + self.FfsDict[FfsId].Guid, self.FfsDict[FfsId].Offset)) + self.FfsDict[FfsId] = FfsObj + if LastFfsObj != None: + LastFfsObj.FreeSpace = FfsStartAddress - LastFfsObj._OFF_ - len(LastFfsObj) + + FfsStartAddress += len(FfsObj) + # + # align to next 8-byte aligned address: A = (A + 8 - 1) & (~(8 - 1)) + # The next FFS must be at the latest next 8-byte aligned address + # + FfsStartAddress = (FfsStartAddress + 7) & (~7) + LastFfsObj = FfsObj + + def _GetAttributes(self): + return self.GetField(self._ATTR_, 0)[0] + + def _GetSize(self): + return self.GetField(self._LENGTH_, 0)[0] + + def _GetChecksum(self): + return self.GetField(self._CHECKSUM_, 0)[0] + + def _GetHeaderLength(self): + return self.GetField(self._HLEN_, 0)[0] + + def _GetFileSystemGuid(self): + return gGuidStringFormat % self.GetField(self._GUID_, 0) + + Attributes = property(_GetAttributes) + Size = property(_GetSize) + Checksum = property(_GetChecksum) + HeaderSize = property(_GetHeaderLength) + FileSystemGuid = property(_GetFileSystemGuid) + +## CompressedImage() class +# +# A class for Compressed Image +# +class CompressedImage(Image): + # UncompressedLength = 4-byte + # CompressionType = 1-byte + _HEADER_ = struct.Struct("1I 1B") + _HEADER_SIZE_ = _HEADER_.size + + _ORIG_SIZE_ = struct.Struct("1I") + _CMPRS_TYPE_ = struct.Struct("4x 1B") + + def __init__(m, CompressedData=None, CompressionType=None, UncompressedLength=None): + Image.__init__(m) + if UncompressedLength != None: + m.UncompressedLength = UncompressedLength + if CompressionType != None: + m.CompressionType = CompressionType + if CompressedData != None: + m.Data = CompressedData + + def __str__(m): + global gIndention + S = "algorithm=%s uncompressed=%x" % (m.CompressionType, m.UncompressedLength) + for Sec in m.Sections: + S += '\n' + str(Sec) + + return S + + def _SetOriginalSize(m, Size): + m.SetField(m._ORIG_SIZE_, 0, Size) + + def _GetOriginalSize(m): + return m.GetField(m._ORIG_SIZE_)[0] + + def _SetCompressionType(m, Type): + m.SetField(m._CMPRS_TYPE_, 0, Type) + + def _GetCompressionType(m): + return m.GetField(m._CMPRS_TYPE_)[0] + + def _GetSections(m): + try: + import EfiCompressor + TmpData = EfiCompressor.FrameworkDecompress( + m[m._HEADER_SIZE_:], + len(m) - m._HEADER_SIZE_ + ) + DecData = array('B') + DecData.fromstring(TmpData) + except: + import EfiCompressor + TmpData = EfiCompressor.UefiDecompress( + m[m._HEADER_SIZE_:], + len(m) - m._HEADER_SIZE_ + ) + DecData = array('B') + DecData.fromstring(TmpData) + + SectionList = [] + Offset = 0 + while Offset < len(DecData): + Sec = Section() + try: + Sec.frombuffer(DecData, Offset) + Offset += Sec.Size + # the section is aligned to 4-byte boundary + except: + break + SectionList.append(Sec) + return SectionList + + UncompressedLength = property(_GetOriginalSize, _SetOriginalSize) + CompressionType = property(_GetCompressionType, _SetCompressionType) + Sections = property(_GetSections) + +## GuidDefinedImage() class +# +# A class for GUID Defined Image +# +class GuidDefinedImage(Image): + _HEADER_ = struct.Struct("1I2H8B 1H 1H") + _HEADER_SIZE_ = _HEADER_.size + + _GUID_ = struct.Struct("1I2H8B") + _DATA_OFFSET_ = struct.Struct("16x 1H") + _ATTR_ = struct.Struct("18x 1H") + + CRC32_GUID = "FC1BCDB0-7D31-49AA-936A-A4600D9DD083" + TIANO_COMPRESS_GUID = 'A31280AD-481E-41B6-95E8-127F4C984779' + LZMA_COMPRESS_GUID = 'EE4E5898-3914-4259-9D6E-DC7BD79403CF' + + def __init__(m, SectionDefinitionGuid=None, DataOffset=None, Attributes=None, Data=None): + Image.__init__(m) + if SectionDefinitionGuid != None: + m.SectionDefinitionGuid = SectionDefinitionGuid + if DataOffset != None: + m.DataOffset = DataOffset + if Attributes != None: + m.Attributes = Attributes + if Data != None: + m.Data = Data + + def __str__(m): + S = "guid=%s" % (gGuidStringFormat % m.SectionDefinitionGuid) + for Sec in m.Sections: + S += "\n" + str(Sec) + return S + + def _Unpack(m): + # keep header in this Image object + m.empty() + m.extend(m._BUF_[m._OFF_ : m._OFF_ + m._LEN_]) + return len(m) + + def _SetAttribute(m, Attribute): + m.SetField(m._ATTR_, 0, Attribute) + + def _GetAttribute(m): + return m.GetField(m._ATTR_)[0] + + def _SetGuid(m, Guid): + m.SetField(m._GUID_, 0, Guid) + + def _GetGuid(m): + return m.GetField(m._GUID_) + + def _SetDataOffset(m, Offset): + m.SetField(m._DATA_OFFSET_, 0, Offset) + + def _GetDataOffset(m): + return m.GetField(m._DATA_OFFSET_)[0] + + def _GetSections(m): + SectionList = [] + Guid = gGuidStringFormat % m.SectionDefinitionGuid + if Guid == m.CRC32_GUID: + # skip the CRC32 value, we don't do CRC32 verification here + Offset = m.DataOffset - 4 + while Offset < len(m): + Sec = Section() + try: + Sec.frombuffer(m, Offset) + Offset += Sec.Size + # the section is aligned to 4-byte boundary + Offset = (Offset + 3) & (~3) + except: + break + SectionList.append(Sec) + elif Guid == m.TIANO_COMPRESS_GUID: + try: + import EfiCompressor + # skip the header + Offset = m.DataOffset - 4 + TmpData = EfiCompressor.FrameworkDecompress(m[Offset:], len(m)-Offset) + DecData = array('B') + DecData.fromstring(TmpData) + Offset = 0 + while Offset < len(DecData): + Sec = Section() + try: + Sec.frombuffer(DecData, Offset) + Offset += Sec.Size + # the section is aligned to 4-byte boundary + Offset = (Offset + 3) & (~3) + except: + break + SectionList.append(Sec) + except: + pass + elif Guid == m.LZMA_COMPRESS_GUID: + try: + import LzmaCompressor + # skip the header + Offset = m.DataOffset - 4 + TmpData = LzmaCompressor.LzmaDecompress(m[Offset:], len(m)-Offset) + DecData = array('B') + DecData.fromstring(TmpData) + Offset = 0 + while Offset < len(DecData): + Sec = Section() + try: + Sec.frombuffer(DecData, Offset) + Offset += Sec.Size + # the section is aligned to 4-byte boundary + Offset = (Offset + 3) & (~3) + except: + break + SectionList.append(Sec) + except: + pass + + return SectionList + + Attributes = property(_GetAttribute, _SetAttribute) + SectionDefinitionGuid = property(_GetGuid, _SetGuid) + DataOffset = property(_GetDataOffset, _SetDataOffset) + Sections = property(_GetSections) + +## Depex() class +# +# A class for Depex +# +class Depex(Image): + _HEADER_ = struct.Struct("") + _HEADER_SIZE_ = 0 + + _GUID_ = struct.Struct("1I2H8B") + _OPCODE_ = struct.Struct("1B") + + _OPCODE_STRING_ = { + 0x00 : "BEFORE", + 0x01 : "AFTER", + 0x02 : "PUSH", + 0x03 : "AND", + 0x04 : "OR", + 0x05 : "NOT", + 0x06 : "TRUE", + 0x07 : "FALSE", + 0x08 : "END", + 0x09 : "SOR" + } + + _NEXT_ = { + -1 : _OPCODE_, # first one in depex must be an opcdoe + 0x00 : _GUID_, #"BEFORE", + 0x01 : _GUID_, #"AFTER", + 0x02 : _GUID_, #"PUSH", + 0x03 : _OPCODE_, #"AND", + 0x04 : _OPCODE_, #"OR", + 0x05 : _OPCODE_, #"NOT", + 0x06 : _OPCODE_, #"TRUE", + 0x07 : _OPCODE_, #"FALSE", + 0x08 : None, #"END", + 0x09 : _OPCODE_, #"SOR" + } + + def __init__(m): + Image.__init__(m) + m._ExprList = [] + + def __str__(m): + global gIndention + gIndention += 4 + Indention = ' ' * gIndention + S = '\n' + for T in m.Expression: + if T in m._OPCODE_STRING_: + S += Indention + m._OPCODE_STRING_[T] + if T not in [0x00, 0x01, 0x02]: + S += '\n' + else: + S += ' ' + gGuidStringFormat % T + '\n' + gIndention -= 4 + return S + + def _Unpack(m): + # keep header in this Image object + m.empty() + m.extend(m._BUF_[m._OFF_ : m._OFF_ + m._LEN_]) + return len(m) + + def _GetExpression(m): + if m._ExprList == []: + Offset = 0 + CurrentData = m._OPCODE_ + while Offset < len(m): + Token = CurrentData.unpack_from(m, Offset) + Offset += CurrentData.size + if len(Token) == 1: + Token = Token[0] + if Token in m._NEXT_: + CurrentData = m._NEXT_[Token] + else: + CurrentData = m._GUID_ + else: + CurrentData = m._OPCODE_ + m._ExprList.append(Token) + if CurrentData == None: + break + return m._ExprList + + Expression = property(_GetExpression) + +## Ui() class +# +# A class for Ui +# +class Ui(Image): + _HEADER_ = struct.Struct("") + _HEADER_SIZE_ = 0 + + def __init__(m): + Image.__init__(m) + + def __str__(m): + return m.String + + def _Unpack(m): + # keep header in this Image object + m.empty() + m.extend(m._BUF_[m._OFF_ : m._OFF_ + m._LEN_]) + return len(m) + + def _GetUiString(m): + return codecs.utf_16_decode(m[0:-2].tostring())[0] + + String = property(_GetUiString) + +## Section() class +# +# A class for Section +# +class Section(Image): + _TypeName = { + 0x00 : "", + 0x01 : "COMPRESSION", + 0x02 : "GUID_DEFINED", + 0x10 : "PE32", + 0x11 : "PIC", + 0x12 : "TE", + 0x13 : "DXE_DEPEX", + 0x14 : "VERSION", + 0x15 : "USER_INTERFACE", + 0x16 : "COMPATIBILITY16", + 0x17 : "FIRMWARE_VOLUME_IMAGE", + 0x18 : "FREEFORM_SUBTYPE_GUID", + 0x19 : "RAW", + 0x1B : "PEI_DEPEX" + } + + _SectionSubImages = { + 0x01 : CompressedImage, + 0x02 : GuidDefinedImage, + 0x17 : FirmwareVolume, + 0x13 : Depex, + 0x1B : Depex, + 0x15 : Ui + } + + # Size = 3-byte + # Type = 1-byte + _HEADER_ = struct.Struct("3B 1B") + _HEADER_SIZE_ = _HEADER_.size + + # SubTypeGuid + # _FREE_FORM_SUBTYPE_GUID_HEADER_ = struct.Struct("1I2H8B") + + _SIZE_ = struct.Struct("3B") + _TYPE_ = struct.Struct("3x 1B") + + def __init__(m, Type=None, Size=None): + Image.__init__(m) + m._Alignment = 1 + if Type != None: + m.Type = Type + if Size != None: + m.Size = Size + + def __str__(m): + global gIndention + gIndention += 4 + SectionInfo = ' ' * gIndention + if m.Type in m._TypeName: + SectionInfo += "[SECTION:%s] offset=%x size=%x" % (m._TypeName[m.Type], m._OFF_, m.Size) + else: + SectionInfo += "[SECTION:%x] offset=%x size=%x " % (m.Type, m._OFF_, m.Size) + for Offset in m._SubImages: + SectionInfo += ", " + str(m._SubImages[Offset]) + gIndention -= 4 + return SectionInfo + + def _Unpack(m): + m.empty() + Type, = m._TYPE_.unpack_from(m._BUF_, m._OFF_) + Size1, Size2, Size3 = m._SIZE_.unpack_from(m._BUF_, m._OFF_) + Size = Size1 + (Size2 << 8) + (Size3 << 16) + + if Type not in m._SectionSubImages: + # no need to extract sub-image, keep all in this Image object + m.extend(m._BUF_[m._OFF_ : m._OFF_ + Size]) + else: + # keep header in this Image object + m.extend(m._BUF_[m._OFF_ : m._OFF_ + m._HEADER_SIZE_]) + # + # use new Image object to represent payload, which may be another kind + # of image such as PE32 + # + PayloadOffset = m._HEADER_SIZE_ + PayloadLen = m.Size - m._HEADER_SIZE_ + Payload = m._SectionSubImages[m.Type]() + Payload.frombuffer(m._BUF_, m._OFF_ + m._HEADER_SIZE_, PayloadLen) + m._SubImages[PayloadOffset] = Payload + + return Size + + def _SetSize(m, Size): + Size1 = Size & 0xFF + Size2 = (Size & 0xFF00) >> 8 + Size3 = (Size & 0xFF0000) >> 16 + m.SetField(m._SIZE_, 0, Size1, Size2, Size3) + + def _GetSize(m): + Size1, Size2, Size3 = m.GetField(m._SIZE_) + return Size1 + (Size2 << 8) + (Size3 << 16) + + def _SetType(m, Type): + m.SetField(m._TYPE_, 0, Type) + + def _GetType(m): + return m.GetField(m._TYPE_)[0] + + def _GetAlignment(m): + return m._Alignment + + def _SetAlignment(m, Alignment): + m._Alignment = Alignment + AlignmentMask = Alignment - 1 + # section alignment is actually for payload, so we need to add header size + PayloadOffset = m._OFF_ + m._HEADER_SIZE_ + if (PayloadOffset & (~AlignmentMask)) == 0: + return + NewOffset = (PayloadOffset + AlignmentMask) & (~AlignmentMask) + while (NewOffset - PayloadOffset) < m._HEADER_SIZE_: + NewOffset += m._Alignment + + def tofile(m, f): + m.Size = len(m) + Image.tofile(m, f) + for Offset in m._SubImages: + m._SubImages[Offset].tofile(f) + + Type = property(_GetType, _SetType) + Size = property(_GetSize, _SetSize) + Alignment = property(_GetAlignment, _SetAlignment) + # SubTypeGuid = property(_GetGuid, _SetGuid) + +## PadSection() class +# +# A class for Pad Section +# +class PadSection(Section): + def __init__(m, Size): + Section.__init__(m) + m.Type = 0x19 + m.Size = Size + m.Data = [0] * (Size - m._HEADER_SIZE_) + +## Ffs() class +# +# A class for Ffs Section +# +class Ffs(Image): + _FfsFormat = "24B%(payload_size)sB" + # skip IntegrityCheck + _HEADER_ = struct.Struct("1I2H8B 2x 1B 1B 3B 1B") + _HEADER_SIZE_ = _HEADER_.size + + _NAME_ = struct.Struct("1I2H8B") + _INT_CHECK_ = struct.Struct("16x 1H") + _TYPE_ = struct.Struct("18x 1B") + _ATTR_ = struct.Struct("19x 1B") + _SIZE_ = struct.Struct("20x 3B") + _STATE_ = struct.Struct("23x 1B") + + VTF_GUID = "1BA0062E-C779-4582-8566-336AE8F78F09" + + FFS_ATTRIB_FIXED = 0x04 + FFS_ATTRIB_DATA_ALIGNMENT = 0x38 + FFS_ATTRIB_CHECKSUM = 0x40 + + _TypeName = { + 0x00 : "", + 0x01 : "RAW", + 0x02 : "FREEFORM", + 0x03 : "SECURITY_CORE", + 0x04 : "PEI_CORE", + 0x05 : "DXE_CORE", + 0x06 : "PEIM", + 0x07 : "DRIVER", + 0x08 : "COMBINED_PEIM_DRIVER", + 0x09 : "APPLICATION", + 0x0A : "SMM", + 0x0B : "FIRMWARE_VOLUME_IMAGE", + 0x0C : "COMBINED_SMM_DXE", + 0x0D : "SMM_CORE", + 0xc0 : "OEM_MIN", + 0xdf : "OEM_MAX", + 0xe0 : "DEBUG_MIN", + 0xef : "DEBUG_MAX", + 0xf0 : "FFS_MIN", + 0xff : "FFS_MAX", + 0xf0 : "FFS_PAD", + } + + def __init__(self): + Image.__init__(self) + self.FreeSpace = 0 + + self.Sections = sdict() + self.Depex = '' + + self.__ID__ = None + + def __str__(self): + global gIndention + gIndention += 4 + Indention = ' ' * gIndention + FfsInfo = Indention + FfsInfo += "[FFS:%s] offset=%x size=%x guid=%s free_space=%x alignment=%s\n" % \ + (Ffs._TypeName[self.Type], self._OFF_, self.Size, self.Guid, self.FreeSpace, self.Alignment) + SectionInfo = '\n'.join([str(self.Sections[Offset]) for Offset in self.Sections]) + gIndention -= 4 + return FfsInfo + SectionInfo + "\n" + + def __len__(self): + return self.Size + + def __repr__(self): + return self.__ID__ + + def _Unpack(self): + Size1, Size2, Size3 = self._SIZE_.unpack_from(self._BUF_, self._OFF_) + Size = Size1 + (Size2 << 8) + (Size3 << 16) + self.empty() + self.extend(self._BUF_[self._OFF_ : self._OFF_ + Size]) + + # Pad FFS may use the same GUID. We need to avoid it. + if self.Type == 0xf0: + self.__ID__ = str(uuid.uuid1()).upper() + else: + self.__ID__ = self.Guid + + # Traverse the SECTION. RAW and PAD do not have sections + if self.Type not in [0xf0, 0x01] and Size > 0 and Size < 0xFFFFFF: + EndOfFfs = Size + SectionStartAddress = self._HEADER_SIZE_ + while SectionStartAddress < EndOfFfs: + SectionObj = Section() + SectionObj.frombuffer(self, SectionStartAddress) + #f = open(repr(SectionObj), 'wb') + #SectionObj.Size = 0 + #SectionObj.tofile(f) + #f.close() + self.Sections[SectionStartAddress] = SectionObj + SectionStartAddress += len(SectionObj) + SectionStartAddress = (SectionStartAddress + 3) & (~3) + + def Pack(self): + pass + + def SetFreeSpace(self, Size): + self.FreeSpace = Size + + def _GetGuid(self): + return gGuidStringFormat % self.Name + + def _SetName(self, Value): + # Guid1, Guid2, Guid3, Guid4, Guid5, Guid6, Guid7, Guid8, Guid9, Guid10, Guid11 + self.SetField(self._NAME_, 0, Value) + + def _GetName(self): + # Guid1, Guid2, Guid3, Guid4, Guid5, Guid6, Guid7, Guid8, Guid9, Guid10, Guid11 + return self.GetField(self._NAME_) + + def _SetSize(m, Size): + Size1 = Size & 0xFF + Size2 = (Size & 0xFF00) >> 8 + Size3 = (Size & 0xFF0000) >> 16 + m.SetField(m._SIZE_, 0, Size1, Size2, Size3) + + def _GetSize(m): + Size1, Size2, Size3 = m.GetField(m._SIZE_) + return Size1 + (Size2 << 8) + (Size3 << 16) + + def _SetType(m, Type): + m.SetField(m._TYPE_, 0, Type) + + def _GetType(m): + return m.GetField(m._TYPE_)[0] + + def _SetAttributes(self, Value): + self.SetField(m._ATTR_, 0, Value) + + def _GetAttributes(self): + return self.GetField(self._ATTR_)[0] + + def _GetFixed(self): + if (self.Attributes & self.FFS_ATTRIB_FIXED) != 0: + return True + return False + + def _GetCheckSum(self): + if (self.Attributes & self.FFS_ATTRIB_CHECKSUM) != 0: + return True + return False + + def _GetAlignment(self): + return (self.Attributes & self.FFS_ATTRIB_DATA_ALIGNMENT) >> 3 + + def _SetState(self, Value): + self.SetField(m._STATE_, 0, Value) + + def _GetState(self): + return self.GetField(m._STATE_)[0] + + Name = property(_GetName, _SetName) + Guid = property(_GetGuid) + Type = property(_GetType, _SetType) + Size = property(_GetSize, _SetSize) + Attributes = property(_GetAttributes, _SetAttributes) + Fixed = property(_GetFixed) + Checksum = property(_GetCheckSum) + Alignment = property(_GetAlignment) + State = property(_GetState, _SetState) + +## PeImage() class +# +# A class for PE Image +# +class PeImage: + # + # just extract e_lfanew + # + _DosHeaderFormat = "60x 1I" + # + # Machine + # NumberOfSections + # SizeOfOptionalHeader + # + _FileHeaderFormat = "4x 1H 1H 4x 4x 4x 1H 2x" + # + # Magic + # SizeOfImage + # SizeOfHeaders + # CheckSum + # NumberOfRvaAndSizes + # + _OptionalHeader32Format = "1H 54x 1I 1I 1I 24x 1I" + _OptionalHeader64Format = "" + def __init__(self, Buf, Offset, Size): + self.Offset = Offset + self.Size = Size + self.Machine = 0x014c # IA32 + self.NumberOfSections = 0 + self.SizeOfImage = 0 + self.SizeOfOptionalHeader = 0 + self.Checksum = 0 + self._PeImageBuf = Buf + self._SectionList = [] + + self._DosHeader = struct.Struct(PeImage._DosHeaderFormat) + self._FileHeader = struct.Struct(PeImage._FileHeaderFormat) + self._OptionalHeader32 = struct.Struct(PeImage._OptionalHeader32Format) + + self.Buffer = None + + self._Unpack() + + def __str__(self): + pass + + def __len__(self): + return self.Size + + def _Unpack(self): + # from DOS header, get the offset of PE header + FileHeaderOffset, = self._DosHeader.unpack_from(self._PeImageBuf, self.Offset) + if FileHeaderOffset < struct.calcsize(self._DosHeaderFormat): + EdkLogger.error("PE+", 0, "Invalid offset of IMAGE_FILE_HEADER: %s" % FileHeaderOffset) + + # from FILE header, get the optional header size + self.Machine, self.NumberOfSections, self.SizeOfOptionalHeader = \ + self._FileHeader.unpack_from(self._PeImageBuf, self.Offset + FileHeaderOffset) + + print "Machine=%x NumberOfSections=%x SizeOfOptionalHeader=%x" % (self.Machine, self.NumberOfSections, self.SizeOfOptionalHeader) + # optional header follows the FILE header + OptionalHeaderOffset = FileHeaderOffset + struct.calcsize(self._FileHeaderFormat) + Magic, self.SizeOfImage, SizeOfHeaders, self.Checksum, NumberOfRvaAndSizes = \ + self._OptionalHeader32.unpack_from(self._PeImageBuf, self.Offset + OptionalHeaderOffset) + print "Magic=%x SizeOfImage=%x SizeOfHeaders=%x, Checksum=%x, NumberOfRvaAndSizes=%x" % (Magic, self.SizeOfImage, SizeOfHeaders, self.Checksum, NumberOfRvaAndSizes) + + PeImageSectionTableOffset = OptionalHeaderOffset + self.SizeOfOptionalHeader + PeSections = PeSectionTable(self._PeImageBuf, self.Offset + PeImageSectionTableOffset, self.NumberOfSections) + + print "%x" % PeSections.GetFileAddress(0x3920) + +## PeSectionTable() class +# +# A class for PE Section Table +# +class PeSectionTable: + def __init__(self, Buf, Offset, NumberOfSections): + self._SectionList = [] + + SectionHeaderOffset = Offset + for TableIndex in range(0, NumberOfSections): + SectionHeader = PeSectionHeader(Buf, SectionHeaderOffset) + self._SectionList.append(SectionHeader) + SectionHeaderOffset += len(SectionHeader) + print SectionHeader + + def GetFileAddress(self, Rva): + for PeSection in self._SectionList: + if Rva in PeSection: + return PeSection[Rva] + +## PeSectionHeader() class +# +# A class for PE Section Header +# +class PeSectionHeader: + # + # VirtualAddress + # SizeOfRawData + # PointerToRawData + # + _HeaderFormat = "12x 1I 1I 1I 16x" + _HeaderLength = struct.calcsize(_HeaderFormat) + + def __init__(self, Buf, Offset): + self.VirtualAddressStart, self.SizeOfRawData, self.PointerToRawData = \ + struct.unpack_from(self._HeaderFormat, Buf, Offset) + self.VirtualAddressEnd = self.VirtualAddressStart + self.SizeOfRawData - 1 + + def __str__(self): + return "VirtualAddress=%x, SizeOfRawData=%x, PointerToRawData=%x" % (self.VirtualAddressStart, self.SizeOfRawData, self.PointerToRawData) + + def __len__(self): + return self._HeaderLength + + def __contains__(self, Rva): + return Rva >= self.VirtualAddressStart and Rva <= self.VirtualAddressEnd + + def __getitem__(self, Rva): + return Rva - self.VirtualAddressStart + self.PointerToRawData + +## LinkMap() class +# +# A class for Link Map +# +class LinkMap: + _StartFlag = { + "MSFT" : re.compile("Address +Publics by Value +Rva\+Base +Lib:Object"), + "GCC" : re.compile("^\.(text|bss|data|edata)"), + } + + _MappingFormat = { + "MSFT" : re.compile("([0-9a-f]+):([0-9a-f]+)\s+_+([0-9A-Za-z]+)\s+([0-9a-f]+)\s+"), + "GCC" : re.compile("^(\.\w)?\s+(0x[0-9a-f]+)\s+_+([0-9A-Za-z]+)"), + } + + def __init__(self, MapFile, MapType="MSFT"): + self.File = MapFile + self.MapType = MapType + self._Globals = {} # global:RVA + + self._Parse() + + def _Parse(self): + MapFile = open(self.File, 'r') + MappingTitle = self._StartFlag[self.MapType] + MappingFormat = self._MappingFormat[self.MapType] + MappingStart = False + try: + for Line in MapFile: + Line = Line.strip() + if not MappingStart: + if MappingTitle.match(Line) != None: + MappingStart = True + continue + ResultList = MappingFormat.findall(Line) + if len(ResultList) == 0 or len(ResultList[0]) != 4: + continue + self._Globals[ResultList[2]] = int(ResultList[3], 16) + EdkLogger.verbose(ResultList[0]) + finally: + MapFile.close() + + def __contains__(self, Var): + return Var in self._Globals + + def __getitem__(self, Var): + if Var not in self._Globals: + return None + return self._Globals[Var] + +## MultipleFv() class +# +# A class for Multiple FV +# +class MultipleFv(FirmwareVolume): + def __init__(self, FvList): + FirmwareVolume.__init__(self) + self.BasicInfo = [] + for FvPath in FvList: + FvName = os.path.splitext(os.path.split(FvPath)[1])[0] + Fd = open(FvPath, 'rb') + Buf = array('B') + try: + Buf.fromfile(Fd, os.path.getsize(FvPath)) + except EOFError: + pass + + Fv = FirmwareVolume(FvName) + Fv.frombuffer(Buf, 0, len(Buf)) + + self.BasicInfo.append([Fv.Name, Fv.FileSystemGuid, Fv.Size]) + self.FfsDict.append(Fv.FfsDict) + +# Version and Copyright +__version_number__ = "0.01" +__version__ = "%prog Version " + __version_number__ +__copyright__ = "Copyright (c) 2008, Intel Corporation. All rights reserved." + +## Parse command line options +# +# Using standard Python module optparse to parse command line option of this tool. +# +# @retval Options A optparse.Values object containing the parsed options +# @retval InputFile Path of file to be trimmed +# +def GetOptions(): + OptionList = [ + make_option("-a", "--arch", dest="Arch", + help="The input file is preprocessed source code, including C or assembly code"), + make_option("-p", "--platform", dest="ActivePlatform", + help="The input file is preprocessed VFR file"), + make_option("-m", "--module", dest="ActiveModule", + help="Convert standard hex format (0xabcd) to MASM format (abcdh)"), + make_option("-f", "--FDF-file", dest="FdfFile", + help="Convert standard hex format (0xabcd) to MASM format (abcdh)"), + make_option("-o", "--output", dest="OutputDirectory", + help="File to store the trimmed content"), + make_option("-t", "--toolchain-tag", dest="ToolChain", + help=""), + make_option("-k", "--msft", dest="MakefileType", action="store_const", const="nmake", + help=""), + make_option("-g", "--gcc", dest="MakefileType", action="store_const", const="gmake", + help=""), + make_option("-v", "--verbose", dest="LogLevel", action="store_const", const=EdkLogger.VERBOSE, + help="Run verbosely"), + make_option("-d", "--debug", dest="LogLevel", type="int", + help="Run with debug information"), + make_option("-q", "--quiet", dest="LogLevel", action="store_const", const=EdkLogger.QUIET, + help="Run quietly"), + make_option("-?", action="help", help="show this help message and exit"), + ] + + # use clearer usage to override default usage message + UsageString = "%prog [-a ARCH] [-p PLATFORM] [-m MODULE] [-t TOOLCHAIN_TAG] [-k] [-g] [-v|-d |-q] [-o ] [GenC|GenMake]" + + Parser = OptionParser(description=__copyright__, version=__version__, option_list=OptionList, usage=UsageString) + Parser.set_defaults(Arch=[]) + Parser.set_defaults(ActivePlatform=None) + Parser.set_defaults(ActiveModule=None) + Parser.set_defaults(OutputDirectory="build") + Parser.set_defaults(FdfFile=None) + Parser.set_defaults(ToolChain="MYTOOLS") + if sys.platform == "win32": + Parser.set_defaults(MakefileType="nmake") + else: + Parser.set_defaults(MakefileType="gmake") + Parser.set_defaults(LogLevel=EdkLogger.INFO) + + Options, Args = Parser.parse_args() + + # error check + if len(Args) == 0: + Options.Target = "genmake" + sys.argv.append("genmake") + elif len(Args) == 1: + Options.Target = Args[0].lower() + if Options.Target not in ["genc", "genmake"]: + EdkLogger.error("AutoGen", OPTION_NOT_SUPPORTED, "Not supported target", + ExtraData="%s\n\n%s" % (Options.Target, Parser.get_usage())) + else: + EdkLogger.error("AutoGen", OPTION_NOT_SUPPORTED, "Too many targets", + ExtraData=Parser.get_usage()) + + return Options + +## Entrance method +# +# This method mainly dispatch specific methods per the command line options. +# If no error found, return zero value so the caller of this tool can know +# if it's executed successfully or not. +# +# @retval 0 Tool was successful +# @retval 1 Tool failed +# +def Main(): + from build import build + try: + Option = GetOptions() + build.main() + except Exception, e: + print e + return 1 + + return 0 + +# This acts like the main() function for the script, unless it is 'import'ed into another script. +if __name__ == '__main__': + EdkLogger.Initialize() + # sys.exit(Main()) + + if len(sys.argv) > 1: + FilePath = sys.argv[1] + if FilePath.lower().endswith(".fv"): + fd = open(FilePath, 'rb') + buf = array('B') + try: + buf.fromfile(fd, os.path.getsize(FilePath)) + except EOFError: + pass + + fv = FirmwareVolume("FVRECOVERY") + fv.frombuffer(buf, 0, len(buf)) + #fv.Dispatch(None) + print fv + elif FilePath.endswith(".efi"): + fd = open(FilePath, 'rb') + buf = array('B') + Size = os.path.getsize(FilePath) + + try: + buf.fromfile(fd, Size) + except EOFError: + pass + + PeSection = Section(Type=0x10) + PeSection.Data = buf + sf, ext = os.path.splitext(os.path.basename(FilePath)) + sf += ".sec" + PeSection.tofile(open(sf, 'wb')) + elif FilePath.endswith(".map"): + mf = LinkMap(FilePath) diff --git a/BaseTools/Source/Python/Eot/InfParserLite.py b/BaseTools/Source/Python/Eot/InfParserLite.py new file mode 100644 index 0000000000..06f775f803 --- /dev/null +++ b/BaseTools/Source/Python/Eot/InfParserLite.py @@ -0,0 +1,171 @@ +## @file +# This file is used to parse INF file of EDK project +# +# Copyright (c) 2008 - 2010 Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# + +## +# Import Modules +# +import os +import Common.EdkLogger as EdkLogger +from Common.DataType import * +from CommonDataClass.DataClass import * +from Common.Identification import * +from Common.String import * +from Parser import * +import Database + +## EdkInfParser() class +# +# This class defined basic INF object which is used by inheriting +# +# @param object: Inherited from object class +# +class EdkInfParser(object): + ## The constructor + # + # @param self: The object pointer + # @param Filename: INF file name + # @param Database: Eot database + # @param SourceFileList: A list for all source file belonging this INF file + # @param SourceOverridePath: Override path for source file + # @param Edk_Source: Envirnoment variable EDK_SOURCE + # @param Efi_Source: Envirnoment variable EFI_SOURCE + # + def __init__(self, Filename = None, Database = None, SourceFileList = None, SourceOverridePath = None, Edk_Source = None, Efi_Source = None): + self.Identification = Identification() + self.Sources = [] + self.Macros = {} + + self.Cur = Database.Cur + self.TblFile = Database.TblFile + self.TblInf = Database.TblInf + self.FileID = -1 + self.SourceOverridePath = SourceOverridePath + + # Load Inf file if filename is not None + if Filename != None: + self.LoadInfFile(Filename) + + if SourceFileList: + for Item in SourceFileList: + self.TblInf.Insert(MODEL_EFI_SOURCE_FILE, Item, '', '', '', '', 'COMMON', -1, self.FileID, -1, -1, -1, -1, 0) + + + ## LoadInffile() method + # + # Load INF file and insert a record in database + # + # @param self: The object pointer + # @param Filename: Input value for filename of Inf file + # + def LoadInfFile(self, Filename = None): + # Insert a record for file + Filename = NormPath(Filename) + self.Identification.FileFullPath = Filename + (self.Identification.FileRelativePath, self.Identification.FileName) = os.path.split(Filename) + + self.FileID = self.TblFile.InsertFile(Filename, MODEL_FILE_INF) + + self.ParseInf(PreProcess(Filename, False), self.Identification.FileRelativePath, Filename) + + ## ParserSource() method + # + # Parse Source section and insert records in database + # + # @param self: The object pointer + # @param CurrentSection: current section name + # @param SectionItemList: the item belonging current section + # @param ArchList: A list for arch for this section + # @param ThirdList: A list for third item for this section + # + def ParserSource(self, CurrentSection, SectionItemList, ArchList, ThirdList): + for Index in range(0, len(ArchList)): + Arch = ArchList[Index] + Third = ThirdList[Index] + if Arch == '': + Arch = TAB_ARCH_COMMON + + for Item in SectionItemList: + if CurrentSection.upper() == 'defines'.upper(): + (Name, Value) = AddToSelfMacro(self.Macros, Item[0]) + self.TblInf.Insert(MODEL_META_DATA_HEADER, Name, Value, Third, '', '', Arch, -1, self.FileID, Item[1], -1, Item[1], -1, 0) + + ## ParseInf() method + # + # Parse INF file and get sections information + # + # @param self: The object pointer + # @param Lines: contents of INF file + # @param FileRelativePath: relative path of the file + # @param Filename: file name of INF file + # + def ParseInf(self, Lines = [], FileRelativePath = '', Filename = ''): + IfDefList, SectionItemList, CurrentSection, ArchList, ThirdList, IncludeFiles = \ + [], [], TAB_UNKNOWN, [], [], [] + LineNo = 0 + + for Line in Lines: + LineNo = LineNo + 1 + if Line == '': + continue + if Line.startswith(TAB_SECTION_START) and Line.endswith(TAB_SECTION_END): + self.ParserSource(CurrentSection, SectionItemList, ArchList, ThirdList) + + # Parse the new section + SectionItemList = [] + ArchList = [] + ThirdList = [] + # Parse section name + CurrentSection = '' + LineList = GetSplitValueList(Line[len(TAB_SECTION_START):len(Line) - len(TAB_SECTION_END)], TAB_COMMA_SPLIT) + for Item in LineList: + ItemList = GetSplitValueList(Item, TAB_SPLIT) + if CurrentSection == '': + CurrentSection = ItemList[0] + else: + if CurrentSection != ItemList[0]: + EdkLogger.error("Parser", PARSER_ERROR, "Different section names '%s' and '%s' are found in one section definition, this is not allowed." % (CurrentSection, ItemList[0]), File=Filename, Line=LineNo) + ItemList.append('') + ItemList.append('') + if len(ItemList) > 5: + RaiseParserError(Line, CurrentSection, Filename, '', LineNo) + else: + ArchList.append(ItemList[1].upper()) + ThirdList.append(ItemList[2]) + + continue + + # Add a section item + SectionItemList.append([Line, LineNo]) + # End of parse + + self.ParserSource(CurrentSection, SectionItemList, ArchList, ThirdList) + #End of For + +## +# +# This acts like the main() function for the script, unless it is 'import'ed into another +# script. +# +if __name__ == '__main__': + EdkLogger.Initialize() + EdkLogger.SetLevel(EdkLogger.QUIET) + + Db = Database.Database('Inf.db') + Db.InitDatabase() + P = EdkInfParser(os.path.normpath("C:\Framework\Edk\Sample\Platform\Nt32\Dxe\PlatformBds\PlatformBds.inf"), Db, '', '') + for Inf in P.Sources: + print Inf + for Item in P.Macros: + print Item, P.Macros[Item] + + Db.Close() \ No newline at end of file diff --git a/BaseTools/Source/Python/Eot/LzmaCompressor.pyd b/BaseTools/Source/Python/Eot/LzmaCompressor.pyd new file mode 100644 index 0000000000000000000000000000000000000000..d792a7e9fb2073071b085076bfb15f99567e1aba GIT binary patch literal 53248 zcmeFaeSB2awKskya}o~8gc&q}fI$X{iUu)~U=s&)0+|prfe8~PL`Xs;!AT4WPR`*) z2_~MzW^x$iwzRc<+Fnz%*IvC(?QKhGYjMJ00!Wd7)mYI6MSE}%K`<{GInQ_PGm`|Z zy?ySl_w)PXVfgIq_qEqvd+)W^UVH6B!M!^;Bgb((oThQy9{BXLv%i1;&mgiVO#j^k z?pNdgIAf0?|Bo|@Jk<@>4c_|uy%p=NYb)yN>P72)RaUQ5XRWTY<}7nr*Vk88&54hX zO$md3=k^c2|AXSTLlHNn{7;9TL_EQ+`~SM?n}_^}`;h*9R?c^55dOceQV+E-|BXZE zng80M|Hb@c%wJx;)S=oj%h&Y+h=8qt$Qs2){dzV1Es1CCpX)V!S>H=nY3|el5qXCU|{tR=5}7#{BFYw{T4KO7IE=u2A3#1+Gxw z3I(oE;0gt?*())T?-lgOE~{B!|#yK9e;NZdCIHD`)vCf zX8x9nC>K&+>HHu@`7l-Od_U&+N5-?h*{ug&;4F6AKJV#!7R#Ej?WOXv(p7*P`N?NY zuHQzXvfG!RB6LL`-GdWrS9A|NLwgU>OvOE?m+WOte$d*#ajvp8#pEkWNofD1eV=kf zd9(9$l>a5FrR?kMv#eA0DagF=obrl%(s<$D4PuH($xpFd+Lzt*SpvXWyf2iOt&;bf z!Z;vPP;ydu)H1pK857fw*^U(Z1m6bU=d}2orf$0cLTE1$0+Qg{Y-u{Ag`(RhX8Q#5 z?nAyjlOouTd?`c8Gj*Os_OZBsVu8tkinak2uz^S1p>nid7G$U(PtS;?M#y^@{o|EF z!L5K0>4Db%Vr7eI+dV$STx>jhKJ4kUeddi${Y*Y!X#NbnG&EeV+@_T9o$m^^3zDfj z+d_SBdWE`uZLaS&^X?0se-+{`X&|N)SmoPdD)$u%Wf6MjfSyjlT}?X(L!GDN z%s)S(Y%tl*H@JOyLi)jVirM^|p1mCAOzJ0{m!gg5*ZIDoy(~#ogYT09$M!!|91hi z`5o!jSb7Sr2U*^>G?%hE#j--F#ndTQhV=E3!TI?)E~k3olBUV~1!LDTDTF~tqIn-) zIjQ?b7l4bZTinIzZ>4LkAF+A9Z6+pUGU_Ba{Rs~)SAPab%B%j24afTcFs^s8?Tf8% z1Dq1XLSpr)`K>8Qzo&s}M_u#ob4UBy5a>KR&Yx@O>=TSZf4+k&E>u?onDH$J$97IK zH-Ap6ed{5BYX>+z+L-LmxW=C_r+B$~3yQ~eDZQu=E_y0lG)xgTvDjd{i&gCl*5}rM zTbhDCBz5-j{`^e7##pHCXXG%Imj(UBQOngojh37qDY-q92QF0jd*Q-z0Q0IwXzu30 zA&S+ekz~urxX5QRP~T2$3M44x;G`A$P0m8~x#2KP&8?(71xRQ5LG$h)rrxYy2sa-( zuFiZ%IduFzjBtXTs&>9RUed^2f%IQT{l_N9|#T zv?7`J6u|CC%wKO)peq zfnZ!WCddLdmEI$0?Y(WuSh1j>O-%8aA0-|Nu(jpB+saDQ1B{sHK%Nd|`@>Bb_(C+2 zLNi$11M&f$JZLbtUPJI@KTOxvc@oi4Lsv7n?yfqL=Y#p`XXf+Y%{Y zZk18Hwcp$_5%fpl%JhS>HqQK`PUZE~KeZ=EwI#>+^T&_Jwor6>DNu}{^8%rx-WGu) z#h`9NC_RG50fxs_mt|W*Y@b0vE5KPn1bz0^rX(mT;Ym{?qp&&XiRCz#`Z9=?ehhPi z;j>RUaJT&K7xKP1OunMi*8o1MSU|A^6e5iGVWwCK3~gaLD7{83YOMBuyE2C3miuZ` ztm*@7zL?}e9#v**p5^NN&lv3s z{PQ_UdsqlsQfYYfPd#bWzj%Eoz19X zGO8h$+&Nqb&>2p3(~zct7hp_{YWiD@$)#)l{{@&dpTm>A#hU}9oa*mT_%e2f*}SzE z`&W{Y80lqq96pJQIy&Tg8|rfyg2%W`LwaUb=kJt?d0p*`z6C)E!8 zRq0OM*P|Nub*gABpbWD8sHyXKp7dGzv8JK%-YMqYJ$teqe=l?3-5#K@PdTb+O`QYC zH}CFr`AwGJGd}rVYrlW{HN-tuiC6hzd~V*iP3X=wp-s-W)B*}6f$Yh?S>k7gKTyC9hl#_IU!c3GEH^ zUK1$4o^WHWM@IYbVH6f<8yDCPTEhXGgu-H{YZoD+o@MM0NJx2T!s1@8Mq}$x&dK|E zbZ2~7`JV9rxhklPbE+ZCUbLD_c>$k6eAn%Csb8QMZe>vIL#DjnqI8#)kClGWeo=}b zpGii41fm3A=z0E8&azxf6q-2;YS3JC(){C7lssO^c2dGkGzl{~bBmR7@*t3yTM{V< zV6+o1SIY<)9Zf8Q1nHU%9`F>w^CX}bYKa_!E}X{gm(FUOymGg*hI49#0+wm|Tj&DF zsGQw)7bs*=ST+X9y4>Z|CbB(k>sG8ut8zf;fe5aAap4)|5JYYxF}svSw%!X*BRgSh zCrFZninErZi&kf$TWx0pi;jtRD~SxNC{Gixa*kl-R(}Cr0y+W|ZBXN#>Qj0GmMq&n zl7o@{tfu~i_M??q=zVe_C}+|8hO*daMoZ4Wtmo+g$~$~GJuqgnVp@1U1;4D}JOPyU z3_pcGFCe5Pni$Z8;0onTv0IT$N`Xab6qHV-$Jk}Nv{A4PnjhVYAsFZ;ek&z_Ci1&R zc}Vcybm18-#>}gwUl+QBieaxu$pJPB1Zs9VcV|6x4{+NwI+nAC&#*{-3(8KVUorQ2lBWr%t z4S{4#4ZxlcgmU2W;fml^!&So7!aV{9S|@|n$?%ilC&5pEp8($ipYl!cP4ETyIQKrz z!{;v_8=Xc^0^U<_FTm|5*pacxHG%?T#)8Gs+cD#SzM+hscG=ireG$LKVztB_z+aOz z9&vu)q6r2#B9IBD2P&0# ziZ^fJsUgXt6q=OfrmR9iie|V4U4_3->)=>U9lbjNE0GKRD;E;k0>90MQcjn$W_l024$LfcO(^Yb8MlHhkZv>ohTiS4scV z8Yqz_WnoN23rkxGV*yHg2V7H|w|Orhi7A5mGK!Xz1c5jw1MC7FamYj~Bgos)#6@aC zM|z%FN1AxM+o={(w1o8_j%e9hmZSWW)9n%8&pw&|8uh#4-Iw6jU}>+7?tk!&$^} zYTdPn50ZvReq@%xygO#wgc`wFtS$vnFtJ0i%CbE3Za!P?6EI@N+)%H1_k>(|=oY0% zjFyK|C7$BgQHRpD#>zukk3`F-({Rc>sL4Z`X!7$-emLkS2`DGR=~(V~7ASTR8Zht^lM&{aw<$pUdsbtegB>yj~<)|tS+ zp;7>KtVEq4)}mZ+O2eE6RJ$0@N`NBoBO~Zm-vxofQ?QZdY=m&MghOwjmRlvEz9iVu z^d|_c0e4M8nKW(>2e~m6W9w=hr*!S2oEqM#-gSdM33jc)2uau0@NVBc%2RK+EF-#R z>dLZU`mx{IY0*b_P-&kjO765`ay1VHc5#-iAEqDtofFy0d8JeCn+}bblJRTne(XKbFC`48SEM0NnkZN$7Tl+x$Jv;G7ec~2O#Eb6k7>a3$YXEHIEVk6*i*G_Vm0W(; zcJkeVFL4J2Hkz70&>q3a4@LRrwID?_H6J0{C_P5nuYEO!U2VuwcVX&drI}m$sJ&>c zYY;Y8eH+QA|42#Av#I6PXnEI443)YpmE(2|(^-JOjtXy`qyFG#7O<*ivshqq4X3UF z8z#;er$rB<@ab<6tfMpWryY|k^kcL#JBwv)tJdPFNLKWVKuC&K*CwIVGgP!3Mb+g% zCFGU|qof?qc0j2ysIMVYIoH}>QXnhOU9$~HrmO{opSk6i zXx-O1Y&(ZVekn@2tz$I^V(S)7ngp&V3EENA%4$4iZfQlyaH4u0cp1`B&a0GKTvSkP zz_`*{yJV0i*t(@yS23jy(#d>)fE%To^n&jriDtU5kpPQVN1BXf*{ng@CcxxEQx(S< zMNr1$j5mZa!~UaGsg#)>Q2Vin(Z>${4S6>86?dD7<7`m$_R=p2_5?|>sO6r{}W-G9y1mv1otj_fQ=$`(Qf`;Jl|=;9uQ33EplV1^_$PdeAdEkOVRHkM!o(OH< zL;VQN1hR4-FEH^jlt}H?XfE|89i*@V9F{wRD-e&-qzsj8kR5~%R4@`v)OSGb@&UKYuz(XZs#?q1qd!C0S5@yf0e2G1a$=$g+yj%wF zGA=FDSkw}zOG{ip1#Ku@SmHGnkCRsOAmJkk#F5P{Cg7svrhunH&-9&(sG{V~)??q) zV;OpEiyoV=#~#pQIeM&AkLBsHWqPb=0ri%^-bo2H@hUhd1f#}bC3lU^#;?`{$!v>0 z+^LtFMCI6WmqDN!lbTEwuoj74N^Ygk(T5faG$CvAY%yBNo2`w{+MGe53<{-DD2+mP z3fZ;sN?yL^`xPqNqM1B;)dI^iXeur%QvzDqS79l$=By~j zR8llBgW%o|DD#>S_Ov0nSbN>GmHb_mG{;`|Y+w-rkBEmwXn)pTmlseXw~MBlG^=AP zAnc-)j?EOJG94m9-O&WdeGAg4q=%bBZBrWN>MlZ5%ud(Xgj-y!?!RVa!lizB!c7fN zIN!E}v6D^d4vkYaP%S+`^0MH07D%e!Mz7T==&`)HmJ_GYnL>?4RCCsb#(|SZw$#%% z+{%R+2;-x?tB|C(fC(HE+-U{&e$t1nA6BnD4}E8`cC@@qdAk&8E0mCKP#{IKTmC|I z_?)JdmaIC6{aIengdRpo@$!Q02t<2%YO}_;5@$1G_BkD+@9am%DI^wL>i6&@MKmH#{UsV!9xxZ3IeT;D3_45*FDQq^(EF%QOaKG`Dos zSR{fTJ66X?E<1grFVw7LVCoC``V2%k`FcW)+m(aA=>cCno%p+>^Y9l$;OxN;%J!R@ zI;bj6lsFZEpQk!abaQXvyyN9S0;K*A(Q7tP7#2avwvfWISh$c2SOS|9U%{}s^$ldW{K>Z|SNm36RNTY96@$u(i~aiyzEYDUc7Dd+ zEq`{`Mq|xg_bT`BwtEC=q5PTk_du_yVG1rHL;n0Ie&G0w)q8R-jhAKuff-Xm$^N_h zMsj|*XFp0KGlnutc-oI$g0hNN3WkjZ7k&5g$_kT$zsm)mO8`#LFpq7ubWnZ|$XqnH zJ^?tX(x6g0*!ekMbC*vt-BV_JXJeG|jj3gQXtL4C>I5MepO2U_k7hrc`kg1u#yr#SY2LdEwb%80RwWF3 zyi;IN#ct6v<)_;E?ODsj+END`-3rk^xNqe0oX&Wq~ zD}$CKo8(F&o8o*^XJ3?ZfEC0oWB$Z5h5oz*=wL(@`y&LS{U$A*7KJUE`m~Xk*9!@3 zb+9#r61ynfw}AS%s=Vx=zJ!!`T2r`Vvvo?ih4MMkic??1#gT=(9jM^20-jVJl=U^p zR;-R*JfY|I?9ax!7W689=s7Z)b={h++m~yhx}iliyoa-f8A`F1n8CpMa!t}z&~l8l zMja0wm6r;d?@r$~UW=wqDY+I|&>$C-({e5>#8gnSA;c;V0{6E<#-6@KxE~u*g4F@G zoLkapIb$I>2JiLR1)rUV1;yRc#Ts7uobl1lznYC(z~C^nVN__-lMiU8e}v)le~(@t z**^2F7~Zr0Z1?B0ugFaDS&PJ8a6_5+tXTLKub zwxx?CB`9}XOw;S`i0iSs&B!`%xpHIP99*KRZ^Z=@E2u}$v$(5xK#5@Wll zEE|UAbBXOdT?{DGeFYXAc+8Kl09yS)*cUhuFurNKV1B}e5I9ih5Whqoy31EExG|>Y zt`hi4Id3Z$q($;jn9WV4MLFolb2Z{~JBZKSKwM)=Xu8}9J~x{A!yVMUF|2Nx0BAn& zyk)%dh~V2IV2?~aVkj7v8;3dbhia%#Zj`C{A z%JMA!WnbbUEevTSN0z&V_;JCoKWFYREaUPG!(ekOOfW3+EyUf<+`-fHLAvz7=}dTL z|E)yFQqxV6#lO_xyJy(HI(--;)p?0uDqp$_n+VdVOJ)6#8O^Ot)MaTnoXs*o9NRM5 zS1yh0D@U+Hw{gc8sX#Wu5GaOS1BSEV>Pm|!a%_LU0WzrvSN zls|_iURENOO7v0z)z)inA!VFz8UwhWPM#3#PGYV&vGq-!&eNbAF`poJQ1 zd8kZ&Sm0O>fE|$ceoQ^M0X-Pcaz-&fXX}+FsAdSbN^k31C@m(r)ZftAK)J`_GboEJ za;9c(O@SPVnfnmtY|qKXtp~wO3oa@}L%b533aRLPWY!i8ZlftnhcR{ubT@CiTaZ>` znX!e{cmoV!vF>sGn2Aa1D?KxFbz6=P?vhzbR|?KRESM1&nvF%J7u(J@Ouh7sDVNNs zA;qB(iq5!)4~r3loN~9IJjDC9;BuZ<9wL5WZt>HC8JVzm3qBMmqyn(Q#9zXzOrNlE z-~;-EZJgQE7ze_!8L1pO{_%L5GCFsM$8T-RA&~+_;z#H0_=ia%^S`L0y0nkUOUKWS z{|5M5>p?Nj7wgNPNW1_nQaWesq2-RGxmfKNl?kl}{aXyaJEf_%X|w}NR{@rdi5k+l zu(XR5pWt7}v$@|P;s^lUmzgwk+EF^?v*Q3n*_s5;9y+d^`Us=h2yF?JSratLq;7s6 z<9WJ;7>;BjW7T4H6HBT`Qds0Sx6VPtR|@T8pZS~TK|EY4c>swtU&ZRb({Yy0tU+_j z)5r|pvgNyro$BMvb_C{oVl)(zp-i{BiXD!j-3*F1D~pHoe2x>gE^n05<%CA_lsa7? zGsR+n1VjMXjF7xPDXa99bPv#rN$<~vjH+M8A>ejJWQ{!R{&d<7;<)-%um^Aj2KasI zECw%u9fy|z*{sq&={f*50`Mr*;t{YU!T>DPrM957CTkkq*oiCM>JHMlLH=ufAAyh~ z{Vk9Wgau)K5JC=4Od!^#NnyzD%K-vZVi;7sTXpE5Bp6btkDP(YxaTztm40pp;U;0tP|NEZd*`SxiVJazCx3%K)-+>9R6mfP%#%{y5<2X;N15}SwHV(^Y$NQvH zSn-m6-<$%Z#V-?-IEOi7Sod z6JcUL#PoUN3RQ__GgO4^!nUauv+pXL;-Er&^RLKY+NbM4K)NX+YX-VbpzG{eD1<9s z_0k6@6}~rit3Sb2CzN9);(S~y={Ho9YNAvH$dmw*Y)$Hc_c zh}Ctvu#k*O*WBux*Q1>-+>a`JE8V)vA53r6O8ln&uADZW6S1j$H=2}?2Q*SQ>(|XY z2>T+SjXm2ojYF*lj}in7|9l2R3F0ExpAqQ%AW9k6pOc1*pFEd(E8)Rz?!##&mpU6g zri_y0y8Ym01VOXNn2fa_JPceg7F2l0 z354-M7|SfUh|S;Mv>&9>fEOwAckBll+%e_;Yx}`4?5${`1#UasPPiY!Jq`Cf+)Hp6 zn}34+AT_3Fz4+S)cMgtUGG=W4zt|6|>#?$+(h91TEMUS;crQY9p$Rj+^nRP^)2Dt) z8!oQpZ}Fa&hpzUf$U`ZcrmN{F)@>K!v1Va4b3Iiuefl)YLLpTaY#w?M8Qw|FLx9-BA6rug2JDTGDs9fk; zDDmVq0@r2d;i6-ecq%3bQkpv{9}4?-V6@GQ;kCqPu}7_gAzm(LZaEDYxW39GRqfjp z&h&d=t$8a`^6r?!prcbloRGhE8qVINmpmQi% zG5M);P=x9=eKGA0t}U1M=bD)Pgj1c3F~FWsBF@pUWdJ%ZL zOLBz8llB-`qv_n5JwqHexfDwS=v+BBgZ8Ga_VoO)Hn#a1TO{0Y zp7vqUDy`2V(WU%|JhH$0JQ~(20e|w3*hm|JKS^*_@v54r;$rRBR7~B%4jLB4Xzc2@ z^G)WKKZ4+TBTDP@)QDrduW_gOu?sX11=~~ol<0Rn>1*6!^Aj!&H!3T(YmV*hSK(=L zEQC@=OBWY!*Bm?AEcCazaR-MEZ0%8C-|}SYAl{}pnw-T5I~Ajrk)|ci0)=ogo31#T z430Ki_tt9_$M#g#Iu1Im)QGnw6sJqOKF3bTGE~gm`Z(d*xKq5hCb}$3+9@qoe*(>z zE_$j@A?QmBd5Zl7O@-R835xb>LS7qfG7e3mcRoj3==l-wp$<*jsn(E=Ep)SDB$`3o z)2Y#vIhEapOjR>kOUb}My`5Uhq;+jfb+o{i+fSoYu3p4pxB2C#5I#tzolcr)>RV%F z?alv%ti95u1~J_)leH6YOAV!wi(T&H{!WP=6><)?CkkdryguNX^raSvmfib zESlLT9+?_Q*35eYt4Ne#x7D+;)ZN7}hItg%E6O}FM#S)5kgf`)&0ioI7Q5APus$q- ze%#O=b4O76(9iz?69>o3mB&Cdn0}S`7Cc2t3lhUaD|HYnLN~kBBiPau)zNh4f)a7c z3UwCB+kz#&apE^%mfdqTpq9wpyz$e_Yo%ivYgwIyGQMeqgl~FxH1RSlA!z?g$OZ{k z;na|NzK04?kXk%N$9@;?1k#T|5HI#kQii&XR7)HW1%T`jcwbgi=5^A9^n14KP1scrgVd&@xp7U#AelU{@wxEPIx zZqk3EBHy)GV^-2l^ib+`wAL<+6o|2h&gX?rvMf^ILX01ajE3XTqV!{-DEq>u%+=x$ zA$J3Az@_PQO#_SOJVR5~brP?1;zS7Btt{M|@9e}ybI*sZ$6#$pt&dy1Sc|z^y3j7P z92E1Yo)k;%F93pKX6swx92BD$dHs*-y^29U?OF`$Z^&%keXze-&oClYi?N^ffE(+e zIe`D~Eb>+MlkSC4}v#^S= zbFf);J(c&H?xZTH5K9#t!+9mUb^gJO?U{1A~Z)r*Xj&L9^8!AA}{Zvbl6do2h&ce5eq>G*V?i!>sqBtoM3!; zT~?Abq2%tsJ4(ecZE6^eW6(oQAC{Sa;Y*brkxxAf{The}h%ZoG*s_C zrMZ!L4c9UC0d%^Mp~N_-569Z+$c|Hd=uheZsuAPdKrnu;!^qKLkoOP4_$9%Bz2E}6 z&TW`5&}-Z;2l!TQr@}ddg?OnbG@qs{m@Gk(GU&z5q#jWAw;Gg_FwC{{PIhUHsi^M8 zR!^_x&MEGqj{VP~r-!n##CU(QUG6mblYd})#rv_JxBK}=Z3h~7WJQ4!95lCFg$baP z2<-mG+(I*0{yZ8A^a_FOOivHf%KhA6Zh0R8C3hvWMl$(wS1Pz+9)zs}U3Vynd(dFV zi}+*QXFJ+>qn}?+HU-;?DCfo6?@6t`o_~s$(lL2MhYH56T z?rNFlVrBEt4y3V!W=e215B*Cdp@k9_HV=I}lF&*Cw>1y>BMFaEg0*?*iAcg@lmHDG z%*A1$hF02Ya9IZW5rOPn_fNu5{NN&dGKoQ zdF5Q^2S(fDlw@vAq7jJB9PwYlX85}Jo-Fw89<;xA)0B&#fM`wr1W z=QCJK79@IV+sOt`0!u0>@i#Up-A*+RQwYt@FWGn({BM&^FtGY}?V6oM(ptWt3oM9SD*Xk9nIu#(}0pp*&yL8Ej{We13c z`U3VLyhOIWiCxfZvaRGBNW4CWnNzH6!&eT_BrVx@kdS`Nw*m$oia_R>g6)u5CL;`a zGjy#u3J42n4Zg9lkL}3`O75V|F>HSHIux~p@?mx0LZshu@v!Jt3QnzS&MLUq z+*UQbocT9-2{8UhGCvm2YM5-jUNgS2 zV?1j6b3;sj_Ki)_rW%7MGeD=u1A6PN8f}R2gm~*grDxmKcyoCXk*rKnxEohPt;Zg@ z2odI%8uKdKE007eZ>Aq>eQWDge*QbuEhTNC?YJ*fxwP%9JY;Dcm+fPaYPd0tocCC*_~^l#8w`?p#miN>W{F1GeJVrR89#@Kfe zx+oEf5|hA?`w1UE!^e_sI|6(@+jcgB!|~J8037^@F(o&#BHT=AiAP!g!O;6*#uU8e zX$bY=b?C4-SytmkQ=Vu9quRssu(jTE75mEz6rM=o;u<>y%a{5f^<8-G-_rxTPVK`) zK8onB1NigOIYgg(?zwWBn9XOBqQmSB`+(c;P+`zT<+a2UzyY$tUJk=$Zlys>545#J zt3cR}>)VU%jmQkVkyY4Z#c$;EQVZLo z7PbVWp7K?6`$ahUTUDHD^p>4&!~m2oriRgRDnl3{6-){`>u@$~c&V!TEI7!RGC0GI zmhsRdv~am5l#}KptrSgK?q98q~5mZSysvd(9nBb zO_a$|=U)uvV1*B6d#A{Q_ijpv06EaqX$^yzE)Q0Cua*ZN+B6{o=RnhGYp8Dwl)bph zFH`5o5#z&H;DZKipJAK=*Yy`LBE{yGBBDIr%4EIZ`5CsFDmjq0aKSk&Nbg59T#$mo zBV}%#fuc0{a-(V(nE*aUJ>N7Umie(WsMyqa7Ml*)DftUNZl8!RWwiVUBIe!M^r5WN z*qRxX2n4@rdFM$U+KPYoe}6MjXg4YsLN~R$4K2sS8!+DH-JjXIHzg=5PPKn)4f2H@ zL{hu0d*i3Mx$Q9+>EooU2*Skk6z}Z>%VRULJDR2>Fy_>2KzhHg7Il^LYX^V!rxCB!r{b07zsb>oI1*E*f_S>cQV5C@8Upzq%#rUR?pB{+J z`cQnL5v2Lq53?ol5m1f@C0c8_~~J+&w@S;_VU#T>KEF+ z1q1>ekq0kHS9M2Ij5?wv_F~b5Qsu!fE>C`qk`v^?VaYsNx??-4VGpoH)ATmC(2+`+ zM=u6^(g{5A;E&4`FJ6jHI z+ta2YY7c$jW7y&DT9XoNEG(Mb>K%k!2(Qoj#^{&&)PH-00ZrJO{7& zLVXIWyQDjs5{PPKs}id!{kYVer2b(di8wVz^+DX)9XY74<(KsePX+#DG4OxIw$}Ir!H+_Q*3z`sbFyCR+>E^ zEwqSPQj#Qu$0f;)S9qlRz|xbf=I;dj{L6%{Qlsw)Bg@24~cp!%iB#kh@~ifd|I zgyXr4cz?H}j~XowOmqlwA4(=L=RrBC2I$N0lsx2nedeP4Dw-#!!UUprZ;F# zCkdK_jL^qu04&kqJl0^hzv_VczYk*I*;OWeM5-C+;|YM8fC6-{3L8!MCY5KtMI8=M zJVCw4{3P`Z`M0a@v#3>loB1i~pO`;O{Uh^dt1mM@P5lG&Gt^%*KUw_`=4YzUFn_-K zBlz-uySCA;ev2jLsO`+pQy*o1zWNaJovN4lMQRQ6SE~0hf3UGTDs!oMZDC};+K&mE6-Q7Y#0}C=Sxc?kEeNqZS^p0sG%E8Eh59ej`lsPM$S;8_m3LUK81_62VX0trEx`6UVz?)kRp;fva z*W1W85uCIzoQZlPFn?!&vMrRE5zf50mtl|)$xNWk%y8x#dS+52Gl??ihckbtXC_B7 zlPS|4&is*{X^muBDKjUW*~Bt8ri43|g1mWoEDyFKlo$D69)0FW2-W$YPC@rLg|5!{ z;(<;`C!Bb7y8$owS_0w%Jwf^y`G((Vmo9BH9+l5&>HA=}`7_R7Xcko^dl&_0www~D z{tU~46DPpKtJYTdZf<3ofE$?}xNRJLcIUJ~Oa=XJ z)k{k6GZ9m&kl!<66i8jnilM|eqfS6lo9fiMl^Pvtz)H6}7 ze^r@I8b(`c^IvrW$3zG`3HN^bfSv$>XM@1kh6!xa2`ugRO%5eBzf1oW4MGzTLW2nL zIK|P3K|}*w+Mdxb9$~2;oiMj<(r^L^V?9bO_WqPUl!pV4xGX(@k5$6bWJvyu_ue+} zCO#h}no@fros;^N1N3;mlROK&L-?W+$SKBLcn;NL^>QDgMZK5!%j@5Q(Wi4tWI8X6 zOlKSrASvooKe7V;?);vM`JJNA@2f}WcQ#u!shvT8_9f~I3w<#XqUla)cx7k#7i{^r zK&qfUl}z$f30jPjlFPJqHAYQ0g|x-fWffk8ou(Z{ry4p%2B>$_J1;zb{)8q~+#4W- znE5l>PQ{7s6YeleD=}qgUa1CgTKk0d$(cQpqkXBNz1V<|jXnc~k3p$X(tEge#CQDq z7#&kD{F`{AvUFG}9!4ok=BJXW^R%V&LknV2nV;?hKaxZLmfWv-el48z0glE2J zB{}n~^bQ5CZazsXvKcan#@TwLgGfXpkuk@5E5@=Yu)KF8)&_Kd1L=WJ{`bI}##fX} zxFxyp)An3Qz;`UxHbuiq=ycRTkJ8DmKEeS0vGuBGY@x!mR$r*+{khmIXrxkSTk$Z zsNj1o(?>x}8v#L+$V!t)#STm4dzAom6Xy6f$jDtg9yOK;QZ|Io$5D>G=|_APyK%>* zw^RKM-3`;b{)ypd{2%V71mHfKZsAG8a}!2e>88(w{B^qDgxBfJkjj^#8{ts>MSMRXeV;0EeJ#9B`OgyDa2i??3?e%@ubc(=LK zXD^{)KtBiQ=+Vgi=BW@bSDnIL&MCZQRo{FY%@v&T32GNYUt?A`g_+f5YSa_;$D`$7 zPWPYa9%iu{BbX2ukY-^b!9WHdQ9d?sKK!97Xi1eIK38Q?4k%sZ8+$^F5vF^BBAC{J zx%Hgxc?+Ld?u|PrT^zWeoTHChp#&J?zz4=2?*tplZ4$g@8_I4RzcdvY*WlBk>2Dz< zAY>Z&^FXisXHGe!9LM@WJ7xL@vG5qoVIoDG{^^2ZH;&lq<6mIvy{f_N5g&Va^+crG zp_?G?`U{333lD;BcF+wMK8`_YvVOk6+K$JE9Z|L)up~1{6zsNFu#e#TK?k(dPJ<(%g9@@E&j~;!Tm9GIvm?(X1jt(AHDBog zU+LkjQtQaM$BH`~Cg4P zlMXxAL=HRaV3E(v9`y6hYl?J~jQo>P*QvhyD-aS@2+cJNE`2bT!|CRfjt(7t!U&LJ z@&jbL=mRInW~y06GdhyJX8YXS(v9qXM?5dyl2w`vOcAv;CYzu5IRcuLj8oK?tDYt~ z8@(aQ`uV%Uy_pN+%5ZPk@piN~PvSgByhZk6~qvruW6VCFjOi%EaLj2Pwn|7NR(B2fMTcAAjOpK)2jg7 zSK5owEZv_~DqtM9V%VWqxNJ~KXYgmpS0FJIR~j?pAa#+=VKuj$1$r)*zaRl~9eQxd zs(yl^IQjV;z39PfY(^kmr}IU^is>RS1%866uwDsMi-#>IQES-O_@diYtmX{R@xv4% zE=YQEbuEMmTwF3UUA#w`sYxeP^*^a2xZ)FULlm_p=(V~X`-yHy14VG~>>Y~$y&(zW z+}aWSZht1%6oh1nJaKw#JwtoIziV%8Fq*)Y+p!zC6}I8BIqUPKnY zcz_4%R9f8Xd0tQOJW2kp{Yaz_9W>#FH)_`b#PA@0>qwoWR43k3sVD3@jA#e_!GxJl z&wRvb#F=VL{(^IbH3qOJs(|E}eh031r|6#s;JvX;1y@-^H(|q?hY%l{-a+l6+$8NN zz3>tzbWqbsh;~uR*wa0s&D7FLJiC0{SDdwh$Mxgwim1I$r_a(Fl2YVhvm_X|S_p)d=fzgl?AA7%?eNWG`vy73AI% zXi`}~e?yMFy(~h1Lz#Q~ScLwDQq>>*9-9 zSq<{iHHvGcZ^diAdsZS{%2HgbeJhT3FIr7!bxOIhgRVlcP?SWv4OQk*)cCq>U!$2m zE#6S%%m1!m5541?z~qG_s@5n7(sZqXE-c@`WKh|% zdi^hG=@ksCzqzPsYU=9UJ~)?aY6 z(5cKj0njwrMXTI+)F4guJB~7bK}qo}XK_E>U_Br;E2=p;WiyMVc~rWhMnK$AESn8ChA4 zNum`dZTc=kU**EhGO=p(b)Dh>(>xq1qfSgJ#t&?8qyWqu2E;{f9B9758b(Pd-R7bY z>?=l#;k^JJ>K#^3{s*uF_3=Hj#(;+BA_WOP14vZ5C#&&AahyvHPyxkp7(5C>oB9cQ zuBJgm)#pM!j0kG@m1_N8uskl(&0a6v797?w-GnLUcl-*hBY~(}u&0Aq5ws8kZ_K=u zI;5OiO3YLK;Jn;5(fsrC#tXJfc-8H-LwpcdgX906Oc->anlwBD)(X3RgJZb0R2ARt zcYFjh|6a^RF&YCA%CQYLkkQ9{TUUe8Ck@x|ATstM)Xo473<1(34>N1k>&e*3UvRO| zj+vyFNFk)zQqX`e$9pH?cT< zl?xv|rgDyp>5g;h=X~?nIT9*k@(COSHct|e@brEgi{gja(j$wa<5?)o(+}D@MZAq4 z4sRew^{;WB7EmQT??PvZ`-ziY`V}B_xAsB?=MdWa8m3Vw;ibNBMN;hu?forM+Y0)0 zOMuoBDD1@Ncb*51ShZI(8vwtatUka_CjK8$AtmTkZDf2Z2jXB4ujT=~aa6~jlZH>yFpc$MNb*c$UF=rl0RJVr`$yP}uqOiux>X)Q zms|Y;PZp8U4^R6wb;_-Ni14UY0Bqz2sg?O)v(FwNMShg}H1V4733udt8+TAFpnLH~ z({HkWdGBs3>6LDXJ=H!=yb&s-nfm!WbJ!b`d16yk)CZY^2=yY=mAM}enxQx8Nk0hl z!135@G|d||@aE;`;K+H}zffBhjHoawQ!qTFLvbm+(3IfN5&o{1nAjc*eOBh1;;XPe zD-3_^D-_pTj3d{37I$2)68jSA_3#1ff%I4KRpuf2yhbX%SJS&>e3zT6e zIC%z1X#N1h+9d7AH_Wj;Dhr1*d&S$Kqxv}Wgm@z~C4a@2!;qASq!UPrLDFlX@0OM8 zI4`_J-#+&*{6hDJ$bA~V9BQ+{@!Kr-yVhK;pwiCM2~X|W_03n zkrDB%p?LI2yyFDQV_C&00)5*&*wK4=96h@7yF!606u3fxD-^gwf&bqrun%9ctNj6_ zcDP))*>K5lv2dS#pW`Ndm*Z}LyB%&J+)B7QxNUIT;eG)3Jlr0*{cuO&R5%WBC&A5v z%Y<{n)xkXk*ABN6?k8|Bz`YK43hom)?n#cD0CyeS?Qjd>is0^p6XDw7o`!o7?sd3x za3w^0;+=p=V+xs2h4EHWvKiso$^s~l}$1}=B zTn57Ar^9!0*<2Afms>s(&OlxyJ$+1g?qy*V;TEE12L6tQ^)!M@d2?9~Yz3o?d~^&S zJx>3{(ofKTar7In|5%u+{7;t8e`tNhqWbk4yj2Yi)E32as@9IAc`#sk6RqN}$TadV{TE`)RQ@t1QdkeCyk%a2{I%{_A{q^2z(X-y_*eq7nHBeeX zeWg@eMa^*}?UMiCb#w|FjZc_)d3;IA|Ls^Ffd0LI zE!t~!WJ~qx2Kf!F7c-7SjiIXNL zO__R4^0aHGTW4H1Gv)dlZk%<~&8f3*nR9E}ZFAEz=H32{%&a?X^B3HCmpyyoq8vx= z;=Cny-;-akbeXeoxvK~-EmoG?yJ~f5S^1iZ`_@)gt-Ie-UGqTg`nviJ4`Rtk8#is< z^3cOu8@D|&G9Qx`T|PcZIhV&f9eSL`d6vg=0aS~UHe{@HO zc%4*Rs|QE${dWH4_+=Gb9^biaG(Hy}!?_)fV9|Wsi10&jUa3y3USDOc@_OsNR*s9u z8ZXLU=5pyN6y;n?mM$I><#Lu4WG`7dnzH=%w7FUFvA0-@Jm5bS8#dHdudNVi(XXwj zBX)#FtWraD-ThY4Q)R7KD^_o;vTm&MGR9E9j-?hgn}I8@RE-+8}M%Q13-fRmFPiI`jdIs>)hjhv0gK#2nTK!ZDL@l|-gowWk9tWIhm0&c37(&*U|QhK7c-HjD~-+Y-FEqh>U64 zTpH7Lwe^@vSRNbdtFehwRiso_RqA6nx-{I?tapo2Q%C5KUwxmq!n=jmbu1QZggg#f z&og3Uu_4{>tyq5tmNqwM&Kz$320g)ASAkV8)jd#Gzp3s{e7$pIF)YH)jrCjW!UVt+ z%&x0+ZK$qWRF4Hojo?T8qaM#o8sQ>w^1oj`8vn%_&hl%xyu3TsufIc=T`KXLZ7smh zN`Wo-aRmjpR#x7M0DjH_j?0FFd{edlzA8u-B!g@m2`^hK)>E>pYJ(U_%$Dw#8i3f{ zQZ0jVH|8bP%iiFvrj5Ix!n@W3Key^WuN0=!-4%5#h;|4*2e<^211y3ASBH9A2nN-s zx*Y0ot_o4|Rw9God8=8d$Rl|h!fC}-m339&ND-ziB^T7!v0RrF_A5lH%b^~J@*K)h z84mdb_W$YMSLK_C95m}o64F;oQp!I;65^Ui{u#J`>|aEZA^*`a|Dy1E;~)7Ksc-#% zdhGSie|22{-;#yD+W-H%l>cf4&|FKvzsQ`U*l5^7D*ykB-a4DUVcS`n9bx>XZ;3g154B6IvB11r@e~%s}|O8 z&gLWl8hc`-_6hI3-cdZKh@52_9QZxhKDa+N0qh0X60p0VEcO{}H`sNs`Ct#iR)if1 z8x!^?Y*W~+Xw$-P?7p5IKJ8nvS9(d-CaLMZDoA;iRiZA&ZSqvF^{{jtOT7~IPhFY{ zO9MAH#6s}Ekr$#<11M89#|mM-${Gt!3?5iCD&MS1uX%zEyP@<3sKc;sy{{OO(vwR1R`k6<6{+mC#)lJ)} zTh3*Ga`^9(zVd4c>&+-bApKu6$F=MnE%q4niCoiYd~E274)Sm7AXm5?%Oh*r!a29- z`n2*~Z~giLrW1p9#kmF2b~#i^F3}4qp8F3<*}S$K4w5QlXq@hyTe7|Pmpd!G4OKzt|$VgAEJd5-%9#a&`$9@ZMw-)StylBvpt z?v8sPs({X53%7_>MfJtil~s#8kXyfLj0B77NAkG_qgy{^hIL&VBXOo1o5L-tt#7Cb zH!{J9UQr89I+&0|ekf|WSi7Qb6PPGe9(gz&>R?PP%s_BYa1JW`rGo@`XHjeV7Q>Z;JC@u5548^L9L8x(8v{S*-*v(oMPDWpk3HNn;iD4QH-h7Qk({X z^G7(FR8=`fPqg}sZph{esQgzmxU*kVqnKOvw`&x0+#2K84h}aZ>T6G;+;rq&1WCnE zMZ<~#zQ2llI5K|=r7AiH-w?H=VPQq(qWa1zr-&K*DedFgi<~f|BaD_g3Mf2Gsf(OM z4DLTEUGFJT3v~GPbtVCQ{T)&HiwY_> z=&%9THZ~5Zc~SW|=ZBB*$lns_3kI2XZjSps!(pxM+qUyB|glB+_;^9>lo-iEUrU zu!k5BkGKPfABH;$*EEge-iQC?8-h6-wp4PYZ5w-;K^F&Cepe`Pg#uS7aD@Wg1qo*a zn6X*ltZ->?cDM*>KE~bXW4QnP33RNtvk!3TIk(<0T4qT&J*oNsw0G{&Srlg&|G=OL zMvW3Gm54zi4K{_Dz0B^;?(BpbHPt{tq6UnT*oaZcY2ctn8!^O)K@vy>71|UMLNy91 zwSZbt!mUO?n;b)l7$M35nhMzbms^99v4|BSo`{qWT_4e<6 zHXV5ktd5F=zv-BiQmhv|xMwMasv6V*@xt@Jh)3EVvFf9riTF-vB(7}9)*cO%?fC^E zocg(XU*ztKpt^RQY*XoqU<(xZwhE-De&K_Wu@$kAG9vMaJ=y+~rT@G6BjrSFs48 z9H~bn{{OPym3k=6z6T<6<0;{A6zm|-51aw;K1BDIEbyj7_Xo$-dknGReafnL2~--E zjKXUUJ!z_3b*!>jaIgCus-x6CtlttkCyYAxP@wjkK*dLg<4PwL9|zPiR{@o8LfGO) ztGoP(uyhZ1$dZ`hKszGpn>odxkrMcSX_X;oQ6|U+PMw>p*|6s51!d_uD4pe^@0ab0)rp~!oLJM{WtkS9m zR;5M5s!F$&hvJk5t6){%V!^Sv0kGMyYAhwes*8Kq{h_$?V7I_x73NR{tm>mYShO+J z01ec6SHt3_KU4#I7i<-57ivq>A_9TDp-`OX6cBO{x+HaYEbU6Py9azsaa(1i>knQ0bTR(Z4Pi0bO0;^ z8Mhy_ffmpR)`K;m9;^U0pc*U&SO+$)3RHk{PzFjsF(?9sAP;1NOrY{-fHdF%0+K-j zhy$@88g$_=bq;|x5QD+nC)_eMfA?PyiW`Y|;!2d$@UOWiy!E~oM9PZ@rsAqhWoz%i zpKkpVB6*c9!33f5c3|aR6(2VtQ$E#yFQ1j#+0P{y^4R{@V2-JFKqrez24Fp@DK%l_?KmlABi&0E5 zX(l0h8fEm)Jmk)G`+70nL@&p?+55oz*!$EQA&9s{Oc0Yqt|%9k;z6-kw2BUKOnfGy z{AfScH~s7UJN**B%rEyV{3?Huzu2$#5Bi7w4*#g%>E9r4k!5n8tdfi5V)?w>Cqs#$ zkOyBLND@dQNg~N4g%Dy8o0O7rQbDT7B9cgR={CBbzEAsU1GEI~r&_Ldv$j%uNo&#) z^b7SF`YioEeU1LI{wkLG+@l}VKh;k+;*9f*0>d`%H*3vj%ook=<{M_a`GMJK#;}VR zW9e)>D_~XZSFDb0VDGS4>wN1XYowKGjkP9ObF6vRL)IqiE$e{wo;A!KVRL(`eV<)z zpXH2kvYjHQ%$esrOXP@Y zVurX^EEG#bt=J?Q#p|LS+MVK0_m}ve`cd*H@_IQ{PL~frpK4hvAD2(db#lGjEMJk$ za+ll#y$;Fu<%hCUc1d&?!Bae#KIBvqOX7)69Fj)HkbH8493$VSiF6dbjAqb@^d>ru z-bRaQ9etWUPdC!-w3+Uu2k2pXoQAYhwKKJN?E>uw+7x4^ahI{kSYp&0zcXGkUNPP@ zju^*{&x|Ouzj>}{nB2V7yu!T7%rb8@^Ub@>GV=j*vANW&GaomfH8-1Yn;&*7JdK^k z&*15N32*WCdhdFlc;|`?QHs&>vAEnH<6n=FvDB~kH~Eczv)_slk|0M)U0y45Wxgzz zb@C~>R=$9?zb1Fex6tyV^0;bqs(N-33Pq6^GK@?mx09F17IGskLED zHL@M7iM6m+*2acgDHgE|%eIzUk6T-;?N*c3VzpYwF(R(Ev+W!^&(61}*@gB@yU5;T zH`+VwCcDKR?G#{SY;_JgeK_NSkLAUD4qwSP^AkM9O=KpJyU;FU$1xS(MG&6*vK%ljLF73#su`^ z4712gX1VMaY(87UR@#q1=e!3eVg?L{2w5RoLV6}O1FVu4sK)`_iR z2Rx@u92aN$@qU6o%pVDrru+B!bNz??8vjXuoxj1~?)Q-~@@zR=rpk$!b#9X@FrMCo z{~VJi)Huosg{onqNgNrBd1ow{K{`lZnnWqRosQBS{Yw2BjGGzyLVc;eT7Lm^ORN4@ z{UiM};~XQ&7-ggyR~oNb$E*|9HO>@gj#KaKM1K!J%PaUJd;@=#@8tXVNBoDb>HZA; zTj{Ozp7XYP&EA{dKJN(p;WBZncu(~6Q_;h_{4?cXSs;(7y5awO^)Q!`pOYdoi_9kr z$#2LCvWh%I{y-YY%b2HINjo`!`kq5CrY_B-lj(f=GJTb{(B1TH`Yu%-eYZA8tI$r@ zhwE3M|7Yua^<1OWs57=1DW-rQ-)n9(|7gBzeqzS41eU~7n9VL@W7%YO3!Bbr*-G{- z+Xyc>06)0Ky3wkzI_#kibw)emom>YMEWx|7Fr8YoJ_uvX&}}_k&(ibsRZy%!KZNmC zj@hB!Tw~hsvMiRz^4UyQ#MbcVcq4D&tvpnPzc)h}@pKSPrZ!EZ>2w_0lTCAIJLabj z+NQVbNk+1POf|Sq#rTgR(U|YzFyjsS{EFd`bTW=)!Y{H(4#~qDIE@sNnb5D8l#sIS zYe^TbZqYQB#^GEkG!=h~?y{qtSSQ{|aFU!9 z$8bC+&B<^wG5crn9E|LIK8+XhnY;+zUBb(FIeNZ|FXD@NHLu|-cs*amS98_Y^}K;^ zL5p|52UM%ucst+E5AnmigCFIcxL$ -1: + ReservedLine = GetSplitValueList(Line, TAB_COMMENT_R8_START, 1)[0] + IsFindBlockComment = True + if Line.find(TAB_COMMENT_R8_END) > -1: + Line = ReservedLine + GetSplitValueList(Line, TAB_COMMENT_R8_END, 1)[1] + ReservedLine = '' + IsFindBlockComment = False + if IsFindBlockComment: + Lines.append('') + continue + + # Remove comments at tail and remove spaces again + Line = CleanString(Line) + if Line == '': + Lines.append('') + continue + + if MergeMultipleLines: + # Add multiple lines to one line + if IsFindBlockCode and Line[-1] != TAB_SLASH: + ReservedLine = (ReservedLine + TAB_SPACE_SPLIT + Line).strip() + Lines.append(ReservedLine) + for Index in (0, ReservedLineLength): + Lines.append('') + ReservedLine = '' + ReservedLineLength = 0 + IsFindBlockCode = False + continue + if Line[-1] == TAB_SLASH: + ReservedLine = ReservedLine + TAB_SPACE_SPLIT + Line[0:-1].strip() + ReservedLineLength = ReservedLineLength + 1 + IsFindBlockCode = True + continue + + Lines.append(Line) + + return Lines + +## AddToGlobalMacro() method +# +# Add a macro to EotGlobalData.gMACRO +# +# @param Name: Name of the macro +# @param Value: Value of the macro +# +def AddToGlobalMacro(Name, Value): + Value = ReplaceMacro(Value, EotGlobalData.gMACRO, True) + EotGlobalData.gMACRO[Name] = Value + +## AddToSelfMacro() method +# +# Parse a line of macro definition and add it to a macro set +# +# @param SelfMacro: The self macro set +# @param Line: The line of a macro definition +# +# @return Name: Name of macro +# @return Value: Value of macro +# +def AddToSelfMacro(SelfMacro, Line): + Name, Value = '', '' + List = GetSplitValueList(Line, TAB_EQUAL_SPLIT, 1) + if len(List) == 2: + Name = List[0] + Value = List[1] + Value = ReplaceMacro(Value, EotGlobalData.gMACRO, True) + Value = ReplaceMacro(Value, SelfMacro, True) + SelfMacro[Name] = Value + + return (Name, Value) + +## GetIncludeListOfFile() method +# +# Get the include path list for a source file +# +# 1. Find the source file belongs to which INF file +# 2. Find the inf's package +# 3. Return the include path list of the package +# +# @param WorkSpace: WORKSPACE path +# @param Filepath: File path +# @param Db: Eot database +# +# @return IncludeList: A list of include directories +# +def GetIncludeListOfFile(WorkSpace, Filepath, Db): + IncludeList = [] + Filepath = os.path.normpath(Filepath) + SqlCommand = """ + select Value1 from Inf where Model = %s and BelongsToFile in( + select distinct B.BelongsToFile from File as A left join Inf as B + where A.ID = B.BelongsToFile and B.Model = %s and (A.Path || '%s' || B.Value1) = '%s')""" \ + % (MODEL_META_DATA_PACKAGE, MODEL_EFI_SOURCE_FILE, '\\', Filepath) + RecordSet = Db.TblFile.Exec(SqlCommand) + for Record in RecordSet: + DecFullPath = os.path.normpath(os.path.join(WorkSpace, Record[0])) + (DecPath, DecName) = os.path.split(DecFullPath) + SqlCommand = """select Value1 from Dec where BelongsToFile = + (select ID from File where FullPath = '%s') and Model = %s""" \ + % (DecFullPath, MODEL_EFI_INCLUDE) + NewRecordSet = Db.TblDec.Exec(SqlCommand) + for NewRecord in NewRecordSet: + IncludePath = os.path.normpath(os.path.join(DecPath, NewRecord[0])) + if IncludePath not in IncludeList: + IncludeList.append(IncludePath) + + return IncludeList + +## GetTableList() method +# +# Search table file and find all small tables +# +# @param FileModelList: Model code for the file list +# @param Table: Table to insert records +# @param Db: Eot database +# +# @return TableList: A list of tables +# +def GetTableList(FileModelList, Table, Db): + TableList = [] + SqlCommand = """select ID, FullPath from File where Model in %s""" % str(FileModelList) + RecordSet = Db.TblFile.Exec(SqlCommand) + for Record in RecordSet: + TableName = Table + str(Record[0]) + TableList.append([TableName, Record[1]]) + + return TableList + +## GetAllIncludeDir() method +# +# Find all Include directories +# +# @param Db: Eot database +# +# @return IncludeList: A list of include directories +# +def GetAllIncludeDirs(Db): + IncludeList = [] + SqlCommand = """select distinct Value1 from Inf where Model = %s order by Value1""" % MODEL_EFI_INCLUDE + RecordSet = Db.TblInf.Exec(SqlCommand) + + for Record in RecordSet: + IncludeList.append(Record[0]) + + return IncludeList + +## GetAllIncludeFiles() method +# +# Find all Include files +# +# @param Db: Eot database +# +# @return IncludeFileList: A list of include files +# +def GetAllIncludeFiles(Db): + IncludeList = GetAllIncludeDirs(Db) + IncludeFileList = [] + + for Dir in IncludeList: + if os.path.isdir(Dir): + SubDir = os.listdir(Dir) + for Item in SubDir: + if os.path.isfile(Item): + IncludeFileList.append(Item) + + return IncludeFileList + +## GetAllSourceFiles() method +# +# Find all source files +# +# @param Db: Eot database +# +# @return SourceFileList: A list of source files +# +def GetAllSourceFiles(Db): + SourceFileList = [] + SqlCommand = """select distinct Value1 from Inf where Model = %s order by Value1""" % MODEL_EFI_SOURCE_FILE + RecordSet = Db.TblInf.Exec(SqlCommand) + + for Record in RecordSet: + SourceFileList.append(Record[0]) + + return SourceFileList + +## GetAllFiles() method +# +# Find all files, both source files and include files +# +# @param Db: Eot database +# +# @return FileList: A list of files +# +def GetAllFiles(Db): + FileList = [] + IncludeFileList = GetAllIncludeFiles(Db) + SourceFileList = GetAllSourceFiles(Db) + for Item in IncludeFileList: + if os.path.isfile(Item) and Item not in FileList: + FileList.append(Item) + for Item in SourceFileList: + if os.path.isfile(Item) and Item not in FileList: + FileList.append(Item) + + return FileList + +## ParseConditionalStatement() method +# +# Parse conditional statement +# +# @param Line: One line to be parsed +# @param Macros: A set of all macro +# @param StatusSet: A set of all status +# +# @retval True: Find keyword of conditional statement +# @retval False: Not find keyword of conditional statement +# +def ParseConditionalStatement(Line, Macros, StatusSet): + NewLine = Line.upper() + if NewLine.find(TAB_IF_EXIST.upper()) > -1: + IfLine = Line[NewLine.find(TAB_IF_EXIST) + len(TAB_IF_EXIST) + 1:].strip() + IfLine = ReplaceMacro(IfLine, EotGlobalData.gMACRO, True) + IfLine = ReplaceMacro(IfLine, Macros, True) + IfLine = IfLine.replace("\"", '') + IfLine = IfLine.replace("(", '') + IfLine = IfLine.replace(")", '') + Status = os.path.exists(os.path.normpath(IfLine)) + StatusSet.append([Status]) + return True + if NewLine.find(TAB_IF_DEF.upper()) > -1: + IfLine = Line[NewLine.find(TAB_IF_DEF) + len(TAB_IF_DEF) + 1:].strip() + Status = False + if IfLine in Macros or IfLine in EotGlobalData.gMACRO: + Status = True + StatusSet.append([Status]) + return True + if NewLine.find(TAB_IF_N_DEF.upper()) > -1: + IfLine = Line[NewLine.find(TAB_IF_N_DEF) + len(TAB_IF_N_DEF) + 1:].strip() + Status = False + if IfLine not in Macros and IfLine not in EotGlobalData.gMACRO: + Status = True + StatusSet.append([Status]) + return True + if NewLine.find(TAB_IF.upper()) > -1: + IfLine = Line[NewLine.find(TAB_IF) + len(TAB_IF) + 1:].strip() + Status = ParseConditionalStatementMacros(IfLine, Macros) + StatusSet.append([Status]) + return True + if NewLine.find(TAB_ELSE_IF.upper()) > -1: + IfLine = Line[NewLine.find(TAB_ELSE_IF) + len(TAB_ELSE_IF) + 1:].strip() + Status = ParseConditionalStatementMacros(IfLine, Macros) + StatusSet[-1].append(Status) + return True + if NewLine.find(TAB_ELSE.upper()) > -1: + Status = False + for Item in StatusSet[-1]: + Status = Status or Item + StatusSet[-1].append(not Status) + return True + if NewLine.find(TAB_END_IF.upper()) > -1: + StatusSet.pop() + return True + + return False + +## ParseConditionalStatement() method +# +# Parse conditional statement with Macros +# +# @param Line: One line to be parsed +# @param Macros: A set of macros +# +# @return Line: New line after replacing macros +# +def ParseConditionalStatementMacros(Line, Macros): + if Line.upper().find('DEFINED(') > -1 or Line.upper().find('EXIST') > -1: + return False + Line = ReplaceMacro(Line, EotGlobalData.gMACRO, True) + Line = ReplaceMacro(Line, Macros, True) + Line = Line.replace("&&", "and") + Line = Line.replace("||", "or") + return eval(Line) + +## GetConditionalStatementStatus() method +# +# 1. Assume the latest status as True +# 2. Pop the top status of status set, previous status +# 3. Compare the latest one and the previous one and get new status +# +# @param StatusSet: A set of all status +# +# @return Status: The final status +# +def GetConditionalStatementStatus(StatusSet): + Status = True + for Item in StatusSet: + Status = Status and Item[-1] + + return Status + +## SearchBelongsToFunction() method +# +# Search all functions belong to the file +# +# @param BelongsToFile: File id +# @param StartLine: Start line of search scope +# @param EndLine: End line of search scope +# +# @return: The found function +# +def SearchBelongsToFunction(BelongsToFile, StartLine, EndLine): + SqlCommand = """select ID, Name from Function where BelongsToFile = %s and StartLine <= %s and EndLine >= %s""" %(BelongsToFile, StartLine, EndLine) + RecordSet = EotGlobalData.gDb.TblFunction.Exec(SqlCommand) + if RecordSet != []: + return RecordSet[0][0], RecordSet[0][1] + else: + return -1, '' + +## SearchPpiCallFunction() method +# +# Search all used PPI calling function 'PeiServicesReInstallPpi' and 'PeiServicesInstallPpi' +# Store the result to database +# +# @param Identifier: Table id +# @param SourceFileID: Source file id +# @param SourceFileFullPath: Source file full path +# @param ItemMode: Mode of the item +# +def SearchPpiCallFunction(Identifier, SourceFileID, SourceFileFullPath, ItemMode): + ItemName, ItemType, GuidName, GuidMacro, GuidValue = '', 'Ppi', '', '', '' + SqlCommand = """select Value, Name, BelongsToFile, StartLine, EndLine from %s + where (Name like '%%%s%%' and Model = %s)""" \ + % (Identifier, 'PeiServicesReInstallPpi', MODEL_IDENTIFIER_FUNCTION_CALLING) + BelongsToFunctionID, BelongsToFunction = -1, '' + Db = EotGlobalData.gDb.TblReport + RecordSet = Db.Exec(SqlCommand) + for Record in RecordSet: + Index = 0 + BelongsToFile, StartLine, EndLine = Record[2], Record[3], Record[4] + BelongsToFunctionID, BelongsToFunction = SearchBelongsToFunction(BelongsToFile, StartLine, EndLine) + VariableList = Record[0].split(',') + for Variable in VariableList: + Variable = Variable.strip() + # Get index of the variable + if Variable.find('[') > -1: + Index = int(Variable[Variable.find('[') + 1 : Variable.find(']')]) + Variable = Variable[:Variable.find('[')] + # Get variable name + if Variable.startswith('&'): + Variable = Variable[1:] + # Get variable value + SqlCommand = """select Value from %s where (Name like '%%%s%%') and Model = %s""" \ + % (Identifier, Variable, MODEL_IDENTIFIER_VARIABLE) + NewRecordSet = Db.Exec(SqlCommand) + if NewRecordSet: + NewRecord = NewRecordSet[0][0] + VariableValueList = NewRecord.split('},') + if len(VariableValueList) > Index: + VariableValue = VariableValueList[Index] + NewVariableValueList = VariableValue.split(',') + if len(NewVariableValueList) > 1: + NewVariableValue = NewVariableValueList[1].strip() + if NewVariableValue.startswith('&'): + Db.Insert(-1, '', '', SourceFileID, SourceFileFullPath, ItemName, ItemType, ItemMode, NewVariableValue[1:], GuidMacro, GuidValue, BelongsToFunction, 0) + continue + else: + EotGlobalData.gOP_UN_MATCHED.write('%s, %s, %s, %s, %s, %s\n' % (ItemType, ItemMode, SourceFileID, SourceFileFullPath, StartLine, NewParameter)) + + ItemName, ItemType, GuidName, GuidMacro, GuidValue = '', 'Ppi', '', '', '' + SqlCommand = """select Value, Name, BelongsToFile, StartLine, EndLine from %s + where (Value like '%%%s%%' and Model = %s)""" \ + % (Identifier, 'PeiServicesInstallPpi', MODEL_IDENTIFIER_ASSIGNMENT_EXPRESSION) + BelongsToFunctionID, BelongsToFunction = -1, '' + Db = EotGlobalData.gDb.TblReport + RecordSet = Db.Exec(SqlCommand) + + SqlCommand = """select Value, Name, BelongsToFile, StartLine, EndLine from %s + where (Name like '%%%s%%' and Model = %s)""" \ + % (Identifier, 'PeiServicesInstallPpi', MODEL_IDENTIFIER_FUNCTION_CALLING) + Db = EotGlobalData.gDb.TblReport + RecordSet2 = Db.Exec(SqlCommand) + + for Record in RecordSet + RecordSet2: + if Record == []: + continue + Index = 0 + BelongsToFile, StartLine, EndLine = Record[2], Record[3], Record[4] + BelongsToFunctionID, BelongsToFunction = SearchBelongsToFunction(BelongsToFile, StartLine, EndLine) + Variable = Record[0].replace('PeiServicesInstallPpi', '').replace('(', '').replace(')', '').replace('&', '').strip() + Variable = Variable[Variable.find(',') + 1:].strip() + # Get index of the variable + if Variable.find('[') > -1: + Index = int(Variable[Variable.find('[') + 1 : Variable.find(']')]) + Variable = Variable[:Variable.find('[')] + # Get variable name + if Variable.startswith('&'): + Variable = Variable[1:] + # Get variable value + SqlCommand = """select Value from %s where (Name like '%%%s%%') and Model = %s""" \ + % (Identifier, Variable, MODEL_IDENTIFIER_VARIABLE) + NewRecordSet = Db.Exec(SqlCommand) + if NewRecordSet: + NewRecord = NewRecordSet[0][0] + VariableValueList = NewRecord.split('},') + if len(VariableValueList) > Index: + VariableValue = VariableValueList[Index] + NewVariableValueList = VariableValue.split(',') + if len(NewVariableValueList) > 1: + NewVariableValue = NewVariableValueList[1].strip() + if NewVariableValue.startswith('&'): + Db.Insert(-1, '', '', SourceFileID, SourceFileFullPath, ItemName, ItemType, ItemMode, NewVariableValue[1:], GuidMacro, GuidValue, BelongsToFunction, 0) + continue + else: + EotGlobalData.gOP_UN_MATCHED.write('%s, %s, %s, %s, %s, %s\n' % (ItemType, ItemMode, SourceFileID, SourceFileFullPath, StartLine, NewParameter)) + +## SearchPpis() method +# +# Search all used PPI calling function +# Store the result to database +# +# @param SqlCommand: SQL command statement +# @param Table: Table id +# @param SourceFileID: Source file id +# @param SourceFileFullPath: Source file full path +# @param ItemMode: Mode of the item +# @param PpiMode: Mode of PPI +# +def SearchPpi(SqlCommand, Table, SourceFileID, SourceFileFullPath, ItemMode, PpiMode = 1): + ItemName, ItemType, GuidName, GuidMacro, GuidValue = '', 'Ppi', '', '', '' + BelongsToFunctionID, BelongsToFunction = -1, '' + Db = EotGlobalData.gDb.TblReport + RecordSet = Db.Exec(SqlCommand) + for Record in RecordSet: + Parameter = GetPpiParameter(Record[0], PpiMode) + BelongsToFile, StartLine, EndLine = Record[2], Record[3], Record[4] + # Get BelongsToFunction + BelongsToFunctionID, BelongsToFunction = SearchBelongsToFunction(BelongsToFile, StartLine, EndLine) + + # Default is Not Found + IsFound = False + + # For Consumed Ppi + if ItemMode == 'Consumed': + if Parameter.startswith('g'): + Db.Insert(-1, '', '', SourceFileID, SourceFileFullPath, ItemName, ItemType, ItemMode, Parameter, GuidMacro, GuidValue, BelongsToFunction, 0) + else: + EotGlobalData.gOP_UN_MATCHED.write('%s, %s, %s, %s, %s, %s\n' % (ItemType, ItemMode, SourceFileID, SourceFileFullPath, StartLine, Parameter)) + continue + + # Direct Parameter.Guid + SqlCommand = """select Value from %s where (Name like '%%%s.Guid%%' or Name like '%%%s->Guid%%') and Model = %s""" % (Table, Parameter, Parameter, MODEL_IDENTIFIER_ASSIGNMENT_EXPRESSION) + NewRecordSet = Db.Exec(SqlCommand) + for NewRecord in NewRecordSet: + GuidName = GetParameterName(NewRecord[0]) + Db.Insert(-1, '', '', SourceFileID, SourceFileFullPath, ItemName, ItemType, ItemMode, GuidName, GuidMacro, GuidValue, BelongsToFunction, 0) + IsFound = True + + # Defined Parameter + if not IsFound: + Key = Parameter + if Key.rfind(' ') > -1: + Key = Key[Key.rfind(' ') : ].strip().replace('&', '') + Value = FindKeyValue(EotGlobalData.gDb.TblFile, Table, Key) + List = GetSplitValueList(Value.replace('\n', ''), TAB_COMMA_SPLIT) + if len(List) > 1: + GuidName = GetParameterName(List[1]) + Db.Insert(-1, '', '', SourceFileID, SourceFileFullPath, ItemName, ItemType, ItemMode, GuidName, GuidMacro, GuidValue, BelongsToFunction, 0) + IsFound = True + + # A list Parameter + if not IsFound: + Start = Parameter.find('[') + End = Parameter.find(']') + if Start > -1 and End > -1 and Start < End: + try: + Index = int(Parameter[Start + 1 : End]) + Parameter = Parameter[0 : Start] + SqlCommand = """select Value from %s where Name = '%s' and Model = %s""" % (Table, Parameter, MODEL_IDENTIFIER_VARIABLE) + NewRecordSet = Db.Exec(SqlCommand) + for NewRecord in NewRecordSet: + NewParameter = GetSplitValueList(NewRecord[0], '}')[Index] + GuidName = GetPpiParameter(NewParameter[NewParameter.find('{') : ]) + Db.Insert(-1, '', '', SourceFileID, SourceFileFullPath, ItemName, ItemType, ItemMode, GuidName, GuidMacro, GuidValue, BelongsToFunction, 0) + IsFound = True + except Exception: + pass + + # A External Parameter + if not IsFound: + SqlCommand = """select File.ID from Inf, File + where BelongsToFile = (select BelongsToFile from Inf where Value1 = '%s') + and Inf.Model = %s and Inf.Value1 = File.FullPath and File.Model = %s""" % (SourceFileFullPath, MODEL_EFI_SOURCE_FILE, MODEL_FILE_C) + NewRecordSet = Db.Exec(SqlCommand) + for NewRecord in NewRecordSet: + Table = 'Identifier' + str(NewRecord[0]) + SqlCommand = """select Value from %s where Name = '%s' and Modifier = 'EFI_PEI_PPI_DESCRIPTOR' and Model = %s""" % (Table, Parameter, MODEL_IDENTIFIER_VARIABLE) + PpiSet = Db.Exec(SqlCommand) + if PpiSet != []: + GuidName = GetPpiParameter(PpiSet[0][0]) + if GuidName != '': + Db.Insert(-1, '', '', SourceFileID, SourceFileFullPath, ItemName, ItemType, ItemMode, GuidName, GuidMacro, GuidValue, BelongsToFunction, 0) + IsFound = True + break + + if not IsFound: + EotGlobalData.gOP_UN_MATCHED.write('%s, %s, %s, %s, %s, %s\n' % (ItemType, ItemMode, SourceFileID, SourceFileFullPath, StartLine, Parameter)) + +## SearchProtocols() method +# +# Search all used PROTOCOL calling function +# Store the result to database +# +# @param SqlCommand: SQL command statement +# @param Table: Table id +# @param SourceFileID: Source file id +# @param SourceFileFullPath: Source file full path +# @param ItemMode: Mode of the item +# @param ProtocolMode: Mode of PROTOCOL +# +def SearchProtocols(SqlCommand, Table, SourceFileID, SourceFileFullPath, ItemMode, ProtocolMode): + ItemName, ItemType, GuidName, GuidMacro, GuidValue = '', 'Protocol', '', '', '' + BelongsToFunctionID, BelongsToFunction = -1, '' + Db = EotGlobalData.gDb.TblReport + RecordSet = Db.Exec(SqlCommand) + for Record in RecordSet: + Parameter = '' + BelongsToFile, StartLine, EndLine = Record[2], Record[3], Record[4] + # Get BelongsToFunction + BelongsToFunctionID, BelongsToFunction = SearchBelongsToFunction(BelongsToFile, StartLine, EndLine) + + # Default is Not Found + IsFound = False + + if ProtocolMode == 0 or ProtocolMode == 1: + Parameter = GetProtocolParameter(Record[0], ProtocolMode) + if Parameter.startswith('g') or Parameter.endswith('Guid') or Parameter == 'ShellEnvProtocol' or Parameter == 'ShellInterfaceProtocol': + GuidName = GetParameterName(Parameter) + Db.Insert(-1, '', '', SourceFileID, SourceFileFullPath, ItemName, ItemType, ItemMode, GuidName, GuidMacro, GuidValue, BelongsToFunction, 0) + IsFound = True + + if ProtocolMode == 2: + Protocols = GetSplitValueList(Record[0], TAB_COMMA_SPLIT) + for Protocol in Protocols: + if Protocol.startswith('&') and Protocol.endswith('Guid'): + GuidName = GetParameterName(Protocol) + Db.Insert(-1, '', '', SourceFileID, SourceFileFullPath, ItemName, ItemType, ItemMode, GuidName, GuidMacro, GuidValue, BelongsToFunction, 0) + IsFound = True + else: + NewValue = FindKeyValue(EotGlobalData.gDb.TblFile, Table, Protocol) + if Protocol != NewValue and NewValue.endswith('Guid'): + GuidName = GetParameterName(NewValue) + Db.Insert(-1, '', '', SourceFileID, SourceFileFullPath, ItemName, ItemType, ItemMode, GuidName, GuidMacro, GuidValue, BelongsToFunction, 0) + IsFound = True + + if not IsFound: + if BelongsToFunction in EotGlobalData.gProducedProtocolLibrary or BelongsToFunction in EotGlobalData.gConsumedProtocolLibrary: + EotGlobalData.gOP_UN_MATCHED_IN_LIBRARY_CALLING.write('%s, %s, %s, %s, %s, %s, %s\n' % (ItemType, ItemMode, SourceFileID, SourceFileFullPath, StartLine, Parameter, BelongsToFunction)) + else: + EotGlobalData.gOP_UN_MATCHED.write('%s, %s, %s, %s, %s, %s\n' % (ItemType, ItemMode, SourceFileID, SourceFileFullPath, StartLine, Parameter)) + +## SearchFunctionCalling() method +# +# Search all used PPI/PROTOCOL calling function by library +# Store the result to database +# +# @param SqlCommand: SQL command statement +# @param Table: Table id +# @param SourceFileID: Source file id +# @param SourceFileFullPath: Source file full path +# @param ItemType: Type of the item, PPI or PROTOCOL +# @param ItemMode: Mode of item +# +def SearchFunctionCalling(Table, SourceFileID, SourceFileFullPath, ItemType, ItemMode): + LibraryList = sdict() + Db = EotGlobalData.gDb.TblReport + Parameters, ItemName, GuidName, GuidMacro, GuidValue, BelongsToFunction = [], '', '', '', '', '' + if ItemType == 'Protocol' and ItemMode == 'Produced': + LibraryList = EotGlobalData.gProducedProtocolLibrary + elif ItemType == 'Protocol' and ItemMode == 'Consumed': + LibraryList = EotGlobalData.gConsumedProtocolLibrary + elif ItemType == 'Protocol' and ItemMode == 'Callback': + LibraryList = EotGlobalData.gCallbackProtocolLibrary + elif ItemType == 'Ppi' and ItemMode == 'Produced': + LibraryList = EotGlobalData.gProducedPpiLibrary + elif ItemType == 'Ppi' and ItemMode == 'Consumed': + LibraryList = EotGlobalData.gConsumedPpiLibrary + + for Library in LibraryList: + Index = LibraryList[Library] + SqlCommand = """select Value, StartLine from %s + where Name like '%%%s%%' and Model = %s""" \ + % (Table, Library, MODEL_IDENTIFIER_FUNCTION_CALLING) + RecordSet = Db.Exec(SqlCommand) + for Record in RecordSet: + IsFound = False + if Index == -1: + ParameterList = GetSplitValueList(Record[0], TAB_COMMA_SPLIT) + for Parameter in ParameterList: + Parameters.append(GetParameterName(Parameter)) + else: + Parameters = [GetProtocolParameter(Record[0], Index)] + StartLine = Record[1] + for Parameter in Parameters: + if Parameter.startswith('g') or Parameter.endswith('Guid') or Parameter == 'ShellEnvProtocol' or Parameter == 'ShellInterfaceProtocol': + GuidName = GetParameterName(Parameter) + Db.Insert(-1, '', '', SourceFileID, SourceFileFullPath, ItemName, ItemType, ItemMode, GuidName, GuidMacro, GuidValue, BelongsToFunction, 0) + IsFound = True + + if not IsFound: + EotGlobalData.gOP_UN_MATCHED.write('%s, %s, %s, %s, %s, %s\n' % (ItemType, ItemMode, SourceFileID, SourceFileFullPath, StartLine, Parameter)) + +## FindProtocols() method +# +# Find defined protocols +# +# @param SqlCommand: SQL command statement +# @param Table: Table id +# @param SourceFileID: Source file id +# @param SourceFileFullPath: Source file full path +# @param ItemName: String of protocol definition +# @param ItemType: Type of the item, PPI or PROTOCOL +# @param ItemMode: Mode of item +# +#def FindProtocols(Db, SqlCommand, Table, SourceFileID, SourceFileFullPath, ItemName, ItemType, ItemMode, GuidName, GuidMacro, GuidValue): +# BelongsToFunction = '' +# RecordSet = Db.Exec(SqlCommand) +# for Record in RecordSet: +# IsFound = True +# Parameter = GetProtocolParameter(Record[0]) + +## GetProtocolParameter() method +# +# Parse string of protocol and find parameters +# +# @param Parameter: Parameter to be parsed +# @param Index: The index of the parameter +# +# @return: call common GetParameter +# +def GetProtocolParameter(Parameter, Index = 1): + return GetParameter(Parameter, Index) + +## GetPpiParameter() method +# +# Parse string of ppi and find parameters +# +# @param Parameter: Parameter to be parsed +# @param Index: The index of the parameter +# +# @return: call common GetParameter +# +def GetPpiParameter(Parameter, Index = 1): + return GetParameter(Parameter, Index) + +## GetParameter() method +# +# Get a parameter by index +# +# @param Parameter: Parameter to be parsed +# @param Index: The index of the parameter +# +# @return Parameter: The found parameter +# +def GetParameter(Parameter, Index = 1): + ParameterList = GetSplitValueList(Parameter, TAB_COMMA_SPLIT) + if len(ParameterList) > Index: + Parameter = GetParameterName(ParameterList[Index]) + + return Parameter + + return '' + +## GetParameterName() method +# +# Get a parameter name +# +# @param Parameter: Parameter to be parsed +# +# @return: The name of parameter +# +def GetParameterName(Parameter): + if type(Parameter) == type('') and Parameter.startswith('&'): + return Parameter[1:].replace('{', '').replace('}', '').replace('\r', '').replace('\n', '').strip() + else: + return Parameter.strip() + +## FindKeyValue() method +# +# Find key value of a variable +# +# @param Db: Database to be searched +# @param Table: Table to be searched +# @param Key: The keyword +# +# @return Value: The value of the the keyword +# +def FindKeyValue(Db, Table, Key): + SqlCommand = """select Value from %s where Name = '%s' and (Model = %s or Model = %s)""" % (Table, Key, MODEL_IDENTIFIER_VARIABLE, MODEL_IDENTIFIER_ASSIGNMENT_EXPRESSION) + RecordSet = Db.Exec(SqlCommand) + Value = '' + for Record in RecordSet: + if Record[0] != 'NULL': + Value = FindKeyValue(Db, Table, GetParameterName(Record[0])) + + if Value != '': + return Value + else: + return Key + +## ParseMapFile() method +# +# Parse map files to get a dict of 'ModuleName' : {FunName : FunAddress} +# +# @param Files: A list of map files +# +# @return AllMaps: An object of all map files +# +def ParseMapFile(Files): + AllMaps = {} + CurrentModule = '' + CurrentMaps = {} + for File in Files: + Content = open(File, 'r').readlines() + for Line in Content: + Line = CleanString(Line) + # skip empty line + if Line == '': + continue + + if Line.find('(') > -1 and Line.find(')') > -1: + if CurrentModule != '' and CurrentMaps != {}: + AllMaps[CurrentModule] = CurrentMaps + CurrentModule = Line[:Line.find('(')] + CurrentMaps = {} + continue + else: + Name = '' + Address = '' + List = Line.split() + Address = List[0] + if List[1] == 'F' or List[1] == 'FS': + Name = List[2] + else: + Name = List[1] + CurrentMaps[Name] = Address + continue + + return AllMaps + +## ConvertGuid +# +# Convert a GUID to a GUID with all upper letters +# +# @param guid: The GUID to be converted +# +# @param newGuid: The GUID with all upper letters. +# +def ConvertGuid(guid): + numList = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'] + newGuid = '' + if guid.startswith('g'): + guid = guid[1:] + for i in guid: + if i.upper() == i and i not in numList: + newGuid = newGuid + ('_' + i) + else: + newGuid = newGuid + i.upper() + if newGuid.startswith('_'): + newGuid = newGuid[1:] + if newGuid.endswith('_'): + newGuid = newGuid[:-1] + + return newGuid + +## ConvertGuid2() method +# +# Convert a GUID to a GUID with new string instead of old string +# +# @param guid: The GUID to be converted +# @param old: Old string to be replaced +# @param new: New string to replace the old one +# +# @param newGuid: The GUID after replacement +# +def ConvertGuid2(guid, old, new): + newGuid = ConvertGuid(guid) + newGuid = newGuid.replace(old, new) + + return newGuid + +## +# +# This acts like the main() function for the script, unless it is 'import'ed into another +# script. +# +if __name__ == '__main__': + pass diff --git a/BaseTools/Source/Python/Eot/ParserWarning.py b/BaseTools/Source/Python/Eot/ParserWarning.py new file mode 100644 index 0000000000..af8333af23 --- /dev/null +++ b/BaseTools/Source/Python/Eot/ParserWarning.py @@ -0,0 +1,26 @@ +## @file +# Warning information of Eot +# +# Copyright (c) 2007 - 2010, Intel Corporation +# +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +class Warning (Exception): + ## The constructor + # + # @param self The object pointer + # @param Str The message to record + # @param File The FDF name + # @param Line The Line number that error occurs + # + def __init__(self, Str, File = None, Line = None): + self.message = Str + self.FileName = File + self.LineNumber = Line + self.ToolName = 'EOT' \ No newline at end of file diff --git a/BaseTools/Source/Python/Eot/Report.py b/BaseTools/Source/Python/Eot/Report.py new file mode 100644 index 0000000000..34002ba7d8 --- /dev/null +++ b/BaseTools/Source/Python/Eot/Report.py @@ -0,0 +1,472 @@ +## @file +# This file is used to create report for Eot tool +# +# Copyright (c) 2008 - 2010, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# + +## +# Import Modules +# +import os +import EotGlobalData + +## Report() class +# +# This class defined Report +# +# @param object: Inherited from object class +# +class Report(object): + ## The constructor + # + # @param self: The object pointer + # @param ReportName: name of the report + # @param FvObj: FV object after parsing FV images + # + def __init__(self, ReportName = 'Report.html', FvObj = None, DispatchName=None): + self.ReportName = ReportName + self.Op = open(ReportName, 'w+') + self.DispatchList = None + if DispatchName: + self.DispatchList = open(DispatchName, 'w+') + self.FvObj = FvObj + self.FfsIndex = 0 + self.PpiIndex = 0 + self.ProtocolIndex = 0 + if EotGlobalData.gMACRO['EFI_SOURCE'] == '': + EotGlobalData.gMACRO['EFI_SOURCE'] = EotGlobalData.gMACRO['EDK_SOURCE'] + + ## WriteLn() method + # + # Write a line in the report + # + # @param self: The object pointer + # @param Line: The lint to be written into + # + def WriteLn(self, Line): + self.Op.write('%s\n' % Line) + + ## GenerateReport() method + # + # A caller to generate report + # + # @param self: The object pointer + # + def GenerateReport(self): + self.GenerateHeader() + self.GenerateFv() + self.GenerateTail() + self.Op.close() + self.GenerateUnDispatchedList() + + ## GenerateUnDispatchedList() method + # + # Create a list for not dispatched items + # + # @param self: The object pointer + # + def GenerateUnDispatchedList(self): + FvObj = self.FvObj + EotGlobalData.gOP_UN_DISPATCHED.write('%s\n' % FvObj.Name) + for Item in FvObj.UnDispatchedFfsDict: + EotGlobalData.gOP_UN_DISPATCHED.write('%s\n' % FvObj.UnDispatchedFfsDict[Item]) + + ## GenerateFv() method + # + # Generate FV information + # + # @param self: The object pointer + # + def GenerateFv(self): + FvObj = self.FvObj + Content = """ + Name + Guid + Size + """ + self.WriteLn(Content) + + for Info in FvObj.BasicInfo: + FvName = Info[0] + FvGuid = Info[1] + FvSize = Info[2] + + Content = """ + %s + %s + %s + """ % (FvName, FvGuid, FvSize) + self.WriteLn(Content) + + Content = """ + """ + self.WriteLn(Content) + + EotGlobalData.gOP_DISPATCH_ORDER.write('Dispatched:\n') + for FfsId in FvObj.OrderedFfsDict: + self.GenerateFfs(FvObj.OrderedFfsDict[FfsId]) + Content = """
    + """ + self.WriteLn(Content) + + # For UnDispatched + Content = """ + + UnDispatched""" + self.WriteLn(Content) + + EotGlobalData.gOP_DISPATCH_ORDER.write('\nUnDispatched:\n') + for FfsId in FvObj.UnDispatchedFfsDict: + self.GenerateFfs(FvObj.UnDispatchedFfsDict[FfsId]) + Content = """
    + """ + self.WriteLn(Content) + + ## GenerateDepex() method + # + # Generate Depex information + # + # @param self: The object pointer + # @param DepexString: A DEPEX string needed to be parsed + # + def GenerateDepex(self, DepexString): + NonGuidList = ['AND', 'OR', 'NOT', 'BEFORE', 'AFTER', 'TRUE', 'FALSE'] + ItemList = DepexString.split(' ') + DepexString = '' + for Item in ItemList: + if Item not in NonGuidList: + SqlCommand = """select DISTINCT GuidName from Report where GuidValue like '%s' and ItemMode = 'Produced' group by GuidName""" % (Item) + RecordSet = EotGlobalData.gDb.TblReport.Exec(SqlCommand) + if RecordSet != []: + Item = RecordSet[0][0] + DepexString = DepexString + Item + ' ' + Content = """ + + %s + """ % (DepexString) + self.WriteLn(Content) + + ## GeneratePpi() method + # + # Generate PPI information + # + # @param self: The object pointer + # @param Name: CName of a GUID + # @param Guid: Value of a GUID + # @param Type: Type of a GUID + # + def GeneratePpi(self, Name, Guid, Type): + self.GeneratePpiProtocol('Ppi', Name, Guid, Type, self.PpiIndex) + + ## GenerateProtocol() method + # + # Generate PROTOCOL information + # + # @param self: The object pointer + # @param Name: CName of a GUID + # @param Guid: Value of a GUID + # @param Type: Type of a GUID + # + def GenerateProtocol(self, Name, Guid, Type): + self.GeneratePpiProtocol('Protocol', Name, Guid, Type, self.ProtocolIndex) + + ## GeneratePpiProtocol() method + # + # Generate PPI/PROTOCOL information + # + # @param self: The object pointer + # @param Model: Model of a GUID, PPI or PROTOCOL + # @param Name: Name of a GUID + # @param Guid: Value of a GUID + # @param Type: Type of a GUID + # @param CName: CName(Index) of a GUID + # + def GeneratePpiProtocol(self, Model, Name, Guid, Type, CName): + Content = """ + + %s + %s + + """ % (Model, Name, Guid) + self.WriteLn(Content) + if Type == 'Produced': + SqlCommand = """select DISTINCT SourceFileFullPath, BelongsToFunction from Report where GuidName like '%s' and ItemMode = 'Callback'""" % Name + RecordSet = EotGlobalData.gDb.TblReport.Exec(SqlCommand) + for Record in RecordSet: + SqlCommand = """select FullPath from File + where ID = ( + select DISTINCT BelongsToFile from Inf + where Value1 like '%s')""" % Record[0] + ModuleSet = EotGlobalData.gDb.TblReport.Exec(SqlCommand) + Inf = ModuleSet[0][0].replace(EotGlobalData.gMACRO['WORKSPACE'], '.') + Function = Record[1] + Address = '' + for Item in EotGlobalData.gMap: + if Function in EotGlobalData.gMap[Item]: + Address = EotGlobalData.gMap[Item][Function] + break + if '_' + Function in EotGlobalData.gMap[Item]: + Address = EotGlobalData.gMap[Item]['_' + Function] + break + Content = """ + + %s + %s + %s + %s + """ % ('Callback', Inf, Function, Address) + self.WriteLn(Content) + + ## GenerateFfs() method + # + # Generate FFS information + # + # @param self: The object pointer + # @param FfsObj: FFS object after FV image is parsed + # + def GenerateFfs(self, FfsObj): + self.FfsIndex = self.FfsIndex + 1 + if FfsObj != None and FfsObj.Type in [0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0xA]: + FfsGuid = FfsObj.Guid + FfsOffset = FfsObj._OFF_ + FfsName = 'Unknown-Module' + FfsPath = FfsGuid + FfsType = FfsObj._TypeName[FfsObj.Type] + + # Hard code for Binary INF + if FfsGuid.upper() == '7BB28B99-61BB-11D5-9A5D-0090273FC14D': + FfsName = 'Logo' + + if FfsGuid.upper() == '7E374E25-8E01-4FEE-87F2-390C23C606CD': + FfsName = 'AcpiTables' + + if FfsGuid.upper() == '961578FE-B6B7-44C3-AF35-6BC705CD2B1F': + FfsName = 'Fat' + + # Find FFS Path and Name + SqlCommand = """select Value2 from Inf + where BelongsToFile = (select BelongsToFile from Inf where Value1 = 'FILE_GUID' and lower(Value2) = lower('%s') and Model = %s) + and Model = %s and Value1='BASE_NAME'""" % (FfsGuid, 5001, 5001) + RecordSet = EotGlobalData.gDb.TblReport.Exec(SqlCommand) + if RecordSet != []: + FfsName = RecordSet[0][0] + + SqlCommand = """select FullPath from File + where ID = (select BelongsToFile from Inf where Value1 = 'FILE_GUID' and lower(Value2) = lower('%s') and Model = %s) + and Model = %s""" % (FfsGuid, 5001, 1011) + RecordSet = EotGlobalData.gDb.TblReport.Exec(SqlCommand) + if RecordSet != []: + FfsPath = RecordSet[0][0] + + Content = """ + + %s + %s + + + %s + + + """ % (self.FfsIndex, self.FfsIndex, self.FfsIndex, FfsPath, FfsName, FfsGuid, FfsOffset, FfsType, self.FfsIndex) + + if self.DispatchList: + if FfsObj.Type in [0x04, 0x06]: + self.DispatchList.write("%s %s %s %s\n" % (FfsGuid, "P", FfsName, FfsPath)) + if FfsObj.Type in [0x05, 0x07, 0x08, 0x0A]: + self.DispatchList.write("%s %s %s %s\n" % (FfsGuid, "D", FfsName, FfsPath)) + + self.WriteLn(Content) + + EotGlobalData.gOP_DISPATCH_ORDER.write('%s\n' %FfsName) + + if FfsObj.Depex != '': + Content = """ + + + + + """ + self.WriteLn(Content) + # End of DEPEX + + # Find Consumed Ppi/Protocol + SqlCommand = """select ModuleName, ItemType, GuidName, GuidValue, GuidMacro from Report + where SourceFileFullPath in + (select Value1 from Inf where BelongsToFile = + (select BelongsToFile from Inf + where Value1 = 'FILE_GUID' and Value2 like '%s' and Model = %s) + and Model = %s) + and ItemMode = 'Consumed' group by GuidName order by ItemType""" \ + % (FfsGuid, 5001, 3007) + + RecordSet = EotGlobalData.gDb.TblReport.Exec(SqlCommand) + if RecordSet != []: + Count = len(RecordSet) + Content = """ + + + + + """ + self.WriteLn(Content) + #End of Consumed Ppi/Portocol + + # Find Produced Ppi/Protocol + SqlCommand = """select ModuleName, ItemType, GuidName, GuidValue, GuidMacro from Report + where SourceFileFullPath in + (select Value1 from Inf where BelongsToFile = + (select BelongsToFile from Inf + where Value1 = 'FILE_GUID' and Value2 like '%s' and Model = %s) + and Model = %s) + and ItemMode = 'Produced' group by GuidName order by ItemType""" \ + % (FfsGuid, 5001, 3007) + + RecordSet = EotGlobalData.gDb.TblReport.Exec(SqlCommand) + if RecordSet != []: + Count = len(RecordSet) + Content = """ + + + + + """ + self.WriteLn(Content) + RecordSet = None + # End of Produced Ppi/Protocol + + Content = """
      DEPEX expression
      Consumed Ppis/Protocols List (%s)
      Produced Ppis/Protocols List (%s)
    + """ + self.WriteLn(Content) + + ## GenerateTail() method + # + # Generate end tags of HTML report + # + # @param self: The object pointer + # + def GenerateTail(self): + Tail = """ + +""" + self.WriteLn(Tail) + + ## GenerateHeader() method + # + # Generate start tags of HTML report + # + # @param self: The object pointer + # + def GenerateHeader(self): + Header = """ + + +Execution Order Tool Report + + + + + + +""" + self.WriteLn(Header) + +## +# +# This acts like the main() function for the script, unless it is 'import'ed into another +# script. +# +if __name__ == '__main__': + # Initialize log system + FilePath = 'FVRECOVERYFLOPPY.fv' + if FilePath.lower().endswith(".fv"): + fd = open(FilePath, 'rb') + buf = array('B') + try: + buf.fromfile(fd, os.path.getsize(FilePath)) + except EOFError: + pass + + fv = FirmwareVolume("FVRECOVERY", buf, 0) + + report = Report('Report.html', fv) + report.GenerateReport() diff --git a/BaseTools/Source/Python/Eot/__init__.py b/BaseTools/Source/Python/Eot/__init__.py new file mode 100644 index 0000000000..ecd6a071f7 --- /dev/null +++ b/BaseTools/Source/Python/Eot/__init__.py @@ -0,0 +1,15 @@ +## @file +# Python 'Eot' package initialization file. +# +# This file is required to make Python interpreter treat the directory +# as containing package. +# +# Copyright (c) 2010, Intel Corporation
    +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# diff --git a/BaseTools/Source/Python/Eot/c.py b/BaseTools/Source/Python/Eot/c.py new file mode 100644 index 0000000000..71d2b626db --- /dev/null +++ b/BaseTools/Source/Python/Eot/c.py @@ -0,0 +1,394 @@ +## @file +# preprocess source file +# +# Copyright (c) 2007 - 2010, Intel Corporation +# +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# + +## +# Import Modules +# +import sys +import os +import re +import CodeFragmentCollector +import FileProfile +from CommonDataClass import DataClass +from Common import EdkLogger +from EotToolError import * +import EotGlobalData + +# Global Dicts +IncludeFileListDict = {} +IncludePathListDict = {} +ComplexTypeDict = {} +SUDict = {} + +## GetIgnoredDirListPattern() method +# +# Get the pattern of ignored direction list +# +# @return p: the pattern of ignored direction list +# +def GetIgnoredDirListPattern(): + p = re.compile(r'.*[\\/](?:BUILD|INTELRESTRICTEDTOOLS|INTELRESTRICTEDPKG|PCCTS)[\\/].*') + return p + +## GetFuncDeclPattern() method +# +# Get the pattern of function declaration +# +# @return p: the pattern of function declaration +# +def GetFuncDeclPattern(): + p = re.compile(r'(EFIAPI|EFI_BOOT_SERVICE|EFI_RUNTIME_SERVICE)?\s*[_\w]+\s*\(.*\).*', re.DOTALL) + return p + +## GetArrayPattern() method +# +# Get the pattern of array +# +# @return p: the pattern of array +# +def GetArrayPattern(): + p = re.compile(r'[_\w]*\s*[\[.*\]]+') + return p + +## GetTypedefFuncPointerPattern() method +# +# Get the pattern of function pointer +# +# @return p: the pattern of function pointer +# +def GetTypedefFuncPointerPattern(): + p = re.compile('[_\w\s]*\([\w\s]*\*+\s*[_\w]+\s*\)\s*\(.*\)', re.DOTALL) + return p + +## GetDB() method +# +# Get global database instance +# +# @return EotGlobalData.gDb: the global database instance +# +def GetDB(): + return EotGlobalData.gDb + +## PrintErrorMsg() method +# +# print error message +# +# @param ErrorType: Type of error +# @param Msg: Error message +# @param TableName: table name of error found +# @param ItemId: id of item +# +def PrintErrorMsg(ErrorType, Msg, TableName, ItemId): + Msg = Msg.replace('\n', '').replace('\r', '') + MsgPartList = Msg.split() + Msg = '' + for Part in MsgPartList: + Msg += Part + Msg += ' ' + GetDB().TblReport.Insert(ErrorType, OtherMsg = Msg, BelongsToTable = TableName, BelongsToItem = ItemId) + +## GetIdType() method +# +# Find type of input string +# +# @param Str: String to be parsed +# +# @return Type: The type of the string +# +def GetIdType(Str): + Type = DataClass.MODEL_UNKNOWN + Str = Str.replace('#', '# ') + List = Str.split() + if List[1] == 'include': + Type = DataClass.MODEL_IDENTIFIER_INCLUDE + elif List[1] == 'define': + Type = DataClass.MODEL_IDENTIFIER_MACRO_DEFINE + elif List[1] == 'ifdef': + Type = DataClass.MODEL_IDENTIFIER_MACRO_IFDEF + elif List[1] == 'ifndef': + Type = DataClass.MODEL_IDENTIFIER_MACRO_IFNDEF + elif List[1] == 'endif': + Type = DataClass.MODEL_IDENTIFIER_MACRO_ENDIF + elif List[1] == 'pragma': + Type = DataClass.MODEL_IDENTIFIER_MACRO_PROGMA + else: + Type = DataClass.MODEL_UNKNOWN + return Type + +## GetIdentifierList() method +# +# Get id of all files +# +# @return IdList: The list of all id of files +# +def GetIdentifierList(): + IdList = [] + + for pp in FileProfile.PPDirectiveList: + Type = GetIdType(pp.Content) + IdPP = DataClass.IdentifierClass(-1, '', '', '', pp.Content, Type, -1, -1, pp.StartPos[0],pp.StartPos[1],pp.EndPos[0],pp.EndPos[1]) + IdList.append(IdPP) + + for ae in FileProfile.AssignmentExpressionList: + IdAE = DataClass.IdentifierClass(-1, ae.Operator, '', ae.Name, ae.Value, DataClass.MODEL_IDENTIFIER_ASSIGNMENT_EXPRESSION, -1, -1, ae.StartPos[0],ae.StartPos[1],ae.EndPos[0],ae.EndPos[1]) + IdList.append(IdAE) + + FuncDeclPattern = GetFuncDeclPattern() + ArrayPattern = GetArrayPattern() + for var in FileProfile.VariableDeclarationList: + DeclText = var.Declarator.strip() + while DeclText.startswith('*'): + var.Modifier += '*' + DeclText = DeclText.lstrip('*').strip() + var.Declarator = DeclText + if FuncDeclPattern.match(var.Declarator): + DeclSplitList = var.Declarator.split('(') + FuncName = DeclSplitList[0] + FuncNamePartList = FuncName.split() + if len(FuncNamePartList) > 1: + FuncName = FuncNamePartList[-1] + Index = 0 + while Index < len(FuncNamePartList) - 1: + var.Modifier += ' ' + FuncNamePartList[Index] + var.Declarator = var.Declarator.lstrip().lstrip(FuncNamePartList[Index]) + Index += 1 + IdVar = DataClass.IdentifierClass(-1, var.Modifier, '', var.Declarator, '', DataClass.MODEL_IDENTIFIER_FUNCTION_DECLARATION, -1, -1, var.StartPos[0],var.StartPos[1],var.EndPos[0],var.EndPos[1]) + IdList.append(IdVar) + continue + + if var.Declarator.find('{') == -1: + for decl in var.Declarator.split(','): + DeclList = decl.split('=') + Name = DeclList[0].strip() + if ArrayPattern.match(Name): + LSBPos = var.Declarator.find('[') + var.Modifier += ' ' + Name[LSBPos:] + Name = Name[0:LSBPos] + + IdVar = DataClass.IdentifierClass(-1, var.Modifier, '', Name, (len(DeclList) > 1 and [DeclList[1]]or [''])[0], DataClass.MODEL_IDENTIFIER_VARIABLE, -1, -1, var.StartPos[0],var.StartPos[1],var.EndPos[0],var.EndPos[1]) + IdList.append(IdVar) + else: + DeclList = var.Declarator.split('=') + Name = DeclList[0].strip() + if ArrayPattern.match(Name): + LSBPos = var.Declarator.find('[') + var.Modifier += ' ' + Name[LSBPos:] + Name = Name[0:LSBPos] + IdVar = DataClass.IdentifierClass(-1, var.Modifier, '', Name, (len(DeclList) > 1 and [DeclList[1]]or [''])[0], DataClass.MODEL_IDENTIFIER_VARIABLE, -1, -1, var.StartPos[0],var.StartPos[1],var.EndPos[0],var.EndPos[1]) + IdList.append(IdVar) + + for enum in FileProfile.EnumerationDefinitionList: + LBPos = enum.Content.find('{') + RBPos = enum.Content.find('}') + Name = enum.Content[4:LBPos].strip() + Value = enum.Content[LBPos+1:RBPos] + IdEnum = DataClass.IdentifierClass(-1, '', '', Name, Value, DataClass.MODEL_IDENTIFIER_ENUMERATE, -1, -1, enum.StartPos[0],enum.StartPos[1],enum.EndPos[0],enum.EndPos[1]) + IdList.append(IdEnum) + + for su in FileProfile.StructUnionDefinitionList: + Type = DataClass.MODEL_IDENTIFIER_STRUCTURE + SkipLen = 6 + if su.Content.startswith('union'): + Type = DataClass.MODEL_IDENTIFIER_UNION + SkipLen = 5 + LBPos = su.Content.find('{') + RBPos = su.Content.find('}') + if LBPos == -1 or RBPos == -1: + Name = su.Content[SkipLen:].strip() + Value = '' + else: + Name = su.Content[SkipLen:LBPos].strip() + Value = su.Content[LBPos+1:RBPos] + IdPE = DataClass.IdentifierClass(-1, '', '', Name, Value, Type, -1, -1, su.StartPos[0],su.StartPos[1],su.EndPos[0],su.EndPos[1]) + IdList.append(IdPE) + + TdFuncPointerPattern = GetTypedefFuncPointerPattern() + for td in FileProfile.TypedefDefinitionList: + Modifier = '' + Name = td.ToType + Value = td.FromType + if TdFuncPointerPattern.match(td.ToType): + Modifier = td.FromType + LBPos = td.ToType.find('(') + TmpStr = td.ToType[LBPos+1:].strip() + StarPos = TmpStr.find('*') + if StarPos != -1: + Modifier += ' ' + TmpStr[0:StarPos] + while TmpStr[StarPos] == '*': + Modifier += ' ' + '*' + StarPos += 1 + TmpStr = TmpStr[StarPos:].strip() + RBPos = TmpStr.find(')') + Name = TmpStr[0:RBPos] + Value = 'FP' + TmpStr[RBPos + 1:] + + IdTd = DataClass.IdentifierClass(-1, Modifier, '', Name, Value, DataClass.MODEL_IDENTIFIER_TYPEDEF, -1, -1, td.StartPos[0],td.StartPos[1],td.EndPos[0],td.EndPos[1]) + IdList.append(IdTd) + + for funcCall in FileProfile.FunctionCallingList: + IdFC = DataClass.IdentifierClass(-1, '', '', funcCall.FuncName, funcCall.ParamList, DataClass.MODEL_IDENTIFIER_FUNCTION_CALLING, -1, -1, funcCall.StartPos[0],funcCall.StartPos[1],funcCall.EndPos[0],funcCall.EndPos[1]) + IdList.append(IdFC) + return IdList + +## GetParamList() method +# +# Get a list of parameters +# +# @param FuncDeclarator: Function declarator +# @param FuncNameLine: Line number of function name +# @param FuncNameOffset: Offset of function name +# +# @return ParamIdList: A list of parameters +# +def GetParamList(FuncDeclarator, FuncNameLine = 0, FuncNameOffset = 0): + ParamIdList = [] + DeclSplitList = FuncDeclarator.split('(') + if len(DeclSplitList) < 2: + return ParamIdList + FuncName = DeclSplitList[0] + ParamStr = DeclSplitList[1].rstrip(')') + LineSkipped = 0 + OffsetSkipped = 0 + Start = 0 + while FuncName.find('\n', Start) != -1: + LineSkipped += 1 + OffsetSkipped = 0 + Start += FuncName.find('\n', Start) + Start += 1 + OffsetSkipped += len(FuncName[Start:]) + OffsetSkipped += 1 #skip '(' + ParamBeginLine = FuncNameLine + LineSkipped + ParamBeginOffset = OffsetSkipped + for p in ParamStr.split(','): + ListP = p.split() + if len(ListP) == 0: + continue + ParamName = ListP[-1] + DeclText = ParamName.strip() + RightSpacePos = p.rfind(ParamName) + ParamModifier = p[0:RightSpacePos] + if ParamName == 'OPTIONAL': + if ParamModifier == '': + ParamModifier += ' ' + 'OPTIONAL' + DeclText = '' + else: + ParamName = ListP[-2] + DeclText = ParamName.strip() + RightSpacePos = p.rfind(ParamName) + ParamModifier = p[0:RightSpacePos] + ParamModifier += 'OPTIONAL' + while DeclText.startswith('*'): + ParamModifier += ' ' + '*' + DeclText = DeclText.lstrip('*').strip() + ParamName = DeclText + + Start = 0 + while p.find('\n', Start) != -1: + LineSkipped += 1 + OffsetSkipped = 0 + Start += p.find('\n', Start) + Start += 1 + OffsetSkipped += len(p[Start:]) + + ParamEndLine = ParamBeginLine + LineSkipped + ParamEndOffset = OffsetSkipped + IdParam = DataClass.IdentifierClass(-1, ParamModifier, '', ParamName, '', DataClass.MODEL_IDENTIFIER_PARAMETER, -1, -1, ParamBeginLine, ParamBeginOffset, ParamEndLine, ParamEndOffset) + ParamIdList.append(IdParam) + ParamBeginLine = ParamEndLine + ParamBeginOffset = OffsetSkipped + 1 #skip ',' + + return ParamIdList + +## GetFunctionList() +# +# Get a list of functions +# +# @return FuncObjList: A list of function objects +# +def GetFunctionList(): + FuncObjList = [] + for FuncDef in FileProfile.FunctionDefinitionList: + ParamIdList = [] + DeclText = FuncDef.Declarator.strip() + while DeclText.startswith('*'): + FuncDef.Modifier += '*' + DeclText = DeclText.lstrip('*').strip() + + FuncDef.Declarator = FuncDef.Declarator.lstrip('*') + DeclSplitList = FuncDef.Declarator.split('(') + if len(DeclSplitList) < 2: + continue + + FuncName = DeclSplitList[0] + FuncNamePartList = FuncName.split() + if len(FuncNamePartList) > 1: + FuncName = FuncNamePartList[-1] + Index = 0 + while Index < len(FuncNamePartList) - 1: + FuncDef.Modifier += ' ' + FuncNamePartList[Index] + Index += 1 + + FuncObj = DataClass.FunctionClass(-1, FuncDef.Declarator, FuncDef.Modifier, FuncName.strip(), '', FuncDef.StartPos[0],FuncDef.StartPos[1],FuncDef.EndPos[0],FuncDef.EndPos[1], FuncDef.LeftBracePos[0], FuncDef.LeftBracePos[1], -1, ParamIdList, []) + FuncObjList.append(FuncObj) + + return FuncObjList + +## CreateCCodeDB() method +# +# Create database for all c code +# +# @param FileNameList: A list of all c code file names +# +def CreateCCodeDB(FileNameList): + FileObjList = [] + ParseErrorFileList = [] + + for FullName in FileNameList: + if os.path.splitext(FullName)[1] in ('.h', '.c'): + EdkLogger.info("Parsing " + FullName) + model = FullName.endswith('c') and DataClass.MODEL_FILE_C or DataClass.MODEL_FILE_H + collector = CodeFragmentCollector.CodeFragmentCollector(FullName) + try: + collector.ParseFile() + except UnicodeError: + ParseErrorFileList.append(FullName) + BaseName = os.path.basename(FullName) + DirName = os.path.dirname(FullName) + Ext = os.path.splitext(BaseName)[1].lstrip('.') + ModifiedTime = os.path.getmtime(FullName) + FileObj = DataClass.FileClass(-1, BaseName, Ext, DirName, FullName, model, ModifiedTime, GetFunctionList(), GetIdentifierList(), []) + FileObjList.append(FileObj) + collector.CleanFileProfileBuffer() + + if len(ParseErrorFileList) > 0: + EdkLogger.info("Found unrecoverable error during parsing:\n\t%s\n" % "\n\t".join(ParseErrorFileList)) + + Db = EotGlobalData.gDb + for file in FileObjList: + Db.InsertOneFile(file) + + Db.UpdateIdentifierBelongsToFunction() + +## +# +# This acts like the main() function for the script, unless it is 'import'ed into another +# script. +# +if __name__ == '__main__': + + EdkLogger.Initialize() + EdkLogger.SetLevel(EdkLogger.QUIET) + CollectSourceCodeDataIntoDB(sys.argv[1]) + + print 'Done!' diff --git a/BaseTools/Source/Python/Fdb/__init__.py b/BaseTools/Source/Python/Fdb/__init__.py index e69de29bb2..8d79301f3e 100644 --- a/BaseTools/Source/Python/Fdb/__init__.py +++ b/BaseTools/Source/Python/Fdb/__init__.py @@ -0,0 +1,15 @@ +## @file +# Python 'Fdb' package initialization file. +# +# This file is required to make Python interpreter treat the directory +# as containing package. +# +# Copyright (c) 2007 - 2010, Intel Corporation
    +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# diff --git a/BaseTools/Source/Python/FixFlash/__init__.py b/BaseTools/Source/Python/FixFlash/__init__.py index e69de29bb2..df2630319f 100644 --- a/BaseTools/Source/Python/FixFlash/__init__.py +++ b/BaseTools/Source/Python/FixFlash/__init__.py @@ -0,0 +1,15 @@ +## @file +# Python 'FixFlash' package initialization file. +# +# This file is required to make Python interpreter treat the directory +# as containing package. +# +# Copyright (c) 2007 - 2010, Intel Corporation
    +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# diff --git a/BaseTools/Source/Python/GenFds/CompressSection.py b/BaseTools/Source/Python/GenFds/CompressSection.py index 4a32ea4458..7e126678a2 100644 --- a/BaseTools/Source/Python/GenFds/CompressSection.py +++ b/BaseTools/Source/Python/GenFds/CompressSection.py @@ -29,8 +29,8 @@ class CompressSection (CompressSectionClassObject) : ## compress types: PI standard and non PI standard CompTypeDict = { - 'PI_STD' : 'PI_STD', - 'NON_PI_STD' : 'NON_PI_STD' + 'PI_STD' : 'PI_STD', + 'PI_NONE' : 'PI_NONE' } ## The constructor diff --git a/BaseTools/Source/Python/GenFds/DepexSection.py b/BaseTools/Source/Python/GenFds/DepexSection.py index a0a1905dfa..8650a73eb5 100644 --- a/BaseTools/Source/Python/GenFds/DepexSection.py +++ b/BaseTools/Source/Python/GenFds/DepexSection.py @@ -62,24 +62,27 @@ class DepexSection (DepexSectionClassObject): # @retval tuple (Generated file name list, section alignment) # def GenSection(self, OutputPath, ModuleName, SecNum, keyStringList, FfsFile = None, Dict = {}): + + if self.ExpressionProcessed == False: + self.Expression = self.Expression.replace("\n", " ").replace("\r", " ") + ExpList = self.Expression.split() + ExpGuidDict = {} - self.Expression = self.Expression.replace("\n", " ").replace("\r", " ") - ExpList = self.Expression.split() - ExpGuidDict = {} + for Exp in ExpList: + if Exp.upper() not in ('AND', 'OR', 'NOT', 'TRUE', 'FALSE', 'SOR', 'BEFORE', 'AFTER', 'END'): + GuidStr = self.__FindGuidValue(Exp) + if GuidStr == None: + EdkLogger.error("GenFds", RESOURCE_NOT_AVAILABLE, + "Depex GUID %s could not be found in build DB! (ModuleName: %s)" % (Exp, ModuleName)) - for Exp in ExpList: - if Exp.upper() not in ('AND', 'OR', 'NOT', 'TRUE', 'FALSE', 'SOR', 'BEFORE', 'AFTER', 'END'): - GuidStr = self.__FindGuidValue(Exp) - if GuidStr == None: - EdkLogger.error("GenFds", RESOURCE_NOT_AVAILABLE, - "Depex GUID %s could not be found in build DB! (ModuleName: %s)" % (Exp, ModuleName)) + ExpGuidDict[Exp] = GuidStr - ExpGuidDict[Exp] = GuidStr + for Item in ExpGuidDict: + self.Expression = self.Expression.replace(Item, ExpGuidDict[Item]) - for Item in ExpGuidDict: - self.Expression = self.Expression.replace(Item, ExpGuidDict[Item]) + self.Expression = self.Expression.strip() + self.ExpressionProcessed = True - self.Expression = self.Expression.strip() if self.DepexType == 'PEI_DEPEX_EXP': ModuleType = 'PEIM' SecType = 'PEI_DEPEX' diff --git a/BaseTools/Source/Python/GenFds/EfiSection.py b/BaseTools/Source/Python/GenFds/EfiSection.py index 2c112ed5cb..ad953facb9 100644 --- a/BaseTools/Source/Python/GenFds/EfiSection.py +++ b/BaseTools/Source/Python/GenFds/EfiSection.py @@ -15,6 +15,7 @@ ## # Import Modules # +from struct import * import Section from GenFdsGlobalVariable import GenFdsGlobalVariable import subprocess @@ -24,6 +25,7 @@ from CommonDataClass.FdfClass import EfiSectionClassObject import shutil from Common import EdkLogger from Common.BuildToolError import * +from Common.Misc import PeImageClass ## generate rule section # @@ -78,6 +80,12 @@ class EfiSection (EfiSectionClassObject): FileList = [] if Filename != None: Filename = GenFdsGlobalVariable.MacroExtend(Filename, Dict) + # check if the path is absolute or relative + if os.path.isabs(Filename): + Filename = os.path.normpath(Filename) + else: + Filename = os.path.normpath(os.path.join(FfsInf.EfiOutputPath, Filename)) + if not self.Optional: FileList.append(Filename) elif os.path.exists(Filename): @@ -121,7 +129,6 @@ class EfiSection (EfiSectionClassObject): f = open(File, 'r') VerString = f.read() f.close() -# VerTuple = ('-n', '"' + VerString + '"') BuildNum = VerString if BuildNum != None and BuildNum != '': BuildNumTuple = ('-j', BuildNum) @@ -131,11 +138,6 @@ class EfiSection (EfiSectionClassObject): OutputFileList.append(OutputFile) else: -# if StringData != None and len(StringData) > 0: -# VerTuple = ('-n', '"' + StringData + '"') -# else: -# VerTuple = tuple() -# VerString = ' ' + ' '.join(VerTuple) BuildNum = StringData if BuildNum != None and BuildNum != '': BuildNumTuple = ('-j', BuildNum) @@ -221,6 +223,15 @@ class EfiSection (EfiSectionClassObject): Num = '%s.%d' %(SecNum , Index) OutputFile = os.path.join( OutputPath, ModuleName + 'SEC' + Num + Ffs.SectionSuffix.get(SectionType)) File = GenFdsGlobalVariable.MacroExtend(File, Dict) + + #Get PE Section alignment when align is set to AUTO + if self.Alignment == 'Auto' and (SectionType == 'PE32' or SectionType == 'TE'): + ImageObj = PeImageClass (File) + if ImageObj.SectionAlignment < 0x400: + self.Alignment = str (ImageObj.SectionAlignment) + else: + self.Alignment = str (ImageObj.SectionAlignment / 0x400) + 'K' + if File[(len(File)-4):] == '.efi': MapFile = File.replace('.efi', '.map') if os.path.exists(MapFile): @@ -237,24 +248,25 @@ class EfiSection (EfiSectionClassObject): StrippedFile = os.path.join(OutputPath, ModuleName + '.stripped') GenFdsGlobalVariable.GenerateFirmwareImage( StrippedFile, - [GenFdsGlobalVariable.MacroExtend(File, Dict)], + [File], Strip=True ) File = StrippedFile + """For TE Section call GenFw to generate TE image""" if SectionType == 'TE': TeFile = os.path.join( OutputPath, ModuleName + 'Te.raw') GenFdsGlobalVariable.GenerateFirmwareImage( TeFile, - [GenFdsGlobalVariable.MacroExtend(File, Dict)], + [File], Type='te' ) File = TeFile """Call GenSection""" GenFdsGlobalVariable.GenerateSection(OutputFile, - [GenFdsGlobalVariable.MacroExtend(File)], + [File], Section.Section.SectionType.get (SectionType) ) OutputFileList.append(OutputFile) diff --git a/BaseTools/Source/Python/GenFds/FdfParser.py b/BaseTools/Source/Python/GenFds/FdfParser.py index 24732a0d5e..4ce2761243 100644 --- a/BaseTools/Source/Python/GenFds/FdfParser.py +++ b/BaseTools/Source/Python/GenFds/FdfParser.py @@ -40,6 +40,7 @@ import OptionRom import OptRomInfStatement import OptRomFileStatement +from GenFdsGlobalVariable import GenFdsGlobalVariable from Common.BuildToolError import * from Common import EdkLogger @@ -172,6 +173,7 @@ class FileProfile : self.InfList = [] self.FdDict = {} + self.FdNameNotSet = False self.FvDict = {} self.CapsuleDict = {} self.VtfList = [] @@ -1300,7 +1302,16 @@ class FdfParser: raise Warning("expected [FD.]", self.FileName, self.CurrentLineNumber) FdName = self.__GetUiName() + if FdName == "": + if len (self.Profile.FdDict) == 0: + FdName = GenFdsGlobalVariable.PlatformName + self.Profile.FdNameNotSet = True + else: + raise Warning("expected FdName in [FD.] section", self.FileName, self.CurrentLineNumber) self.CurrentFdName = FdName.upper() + + if self.CurrentFdName in self.Profile.FdDict: + raise Warning("Unexpected the same FD name", self.FileName, self.CurrentLineNumber) if not self.__IsToken( "]"): raise Warning("expected ']'", self.FileName, self.CurrentLineNumber) @@ -1308,12 +1319,15 @@ class FdfParser: FdObj = Fd.FD() FdObj.FdUiName = self.CurrentFdName self.Profile.FdDict[self.CurrentFdName] = FdObj + + if len (self.Profile.FdDict) > 1 and self.Profile.FdNameNotSet: + raise Warning("expected all FDs have their name", self.FileName, self.CurrentLineNumber) + Status = self.__GetCreateFile(FdObj) if not Status: raise Warning("FD name error", self.FileName, self.CurrentLineNumber) - if not self.__GetTokenStatements(FdObj): - return False + self.__GetTokenStatements(FdObj) self.__GetDefineStatements(FdObj) @@ -1368,8 +1382,6 @@ class FdfParser: # # @param self The object pointer # @param Obj for whom token statement is got - # @retval True Successfully find a token statement - # @retval False Not able to find a token statement # def __GetTokenStatements(self, Obj): if not self.__IsKeyword( "BaseAddress"): @@ -1419,8 +1431,7 @@ class FdfParser: Obj.ErasePolarity = self.__Token - Status = self.__GetBlockStatements(Obj) - return Status + self.__GetBlockStatements(Obj) ## __GetAddressStatements() method # @@ -1459,17 +1470,20 @@ class FdfParser: # # @param self The object pointer # @param Obj for whom block statement is got - # @retval True Successfully find - # @retval False Not able to find # def __GetBlockStatements(self, Obj): if not self.__GetBlockStatement(Obj): - raise Warning("expected block statement", self.FileName, self.CurrentLineNumber) + #set default block size is 1 + Obj.BlockSizeList.append((1, Obj.Size, None)) + return while self.__GetBlockStatement(Obj): pass - return True + + for Item in Obj.BlockSizeList: + if Item[0] == None or Item[1] == None: + raise Warning("expected block statement for Fd Section", self.FileName, self.CurrentLineNumber) ## __GetBlockStatement() method # @@ -1496,7 +1510,7 @@ class FdfParser: PcdPair = self.__GetNextPcdName() BlockSizePcd = PcdPair self.Profile.PcdDict[PcdPair] = BlockSize - BlockSize = long(self.__Token, 0) + BlockSize = long(BlockSize, 0) BlockNumber = None if self.__IsKeyword( "NumBlocks"): @@ -2113,9 +2127,6 @@ class FdfParser: raise Warning("expected INF file path", self.FileName, self.CurrentLineNumber) ffsInf.InfFileName = self.__Token -# if ffsInf.InfFileName.find('$') >= 0: -# ffsInf.InfFileName = GenFdsGlobalVariable.GenFdsGlobalVariable.MacroExtend(ffsInf.InfFileName, MacroDict) - if not ffsInf.InfFileName in self.Profile.InfList: self.Profile.InfList.append(ffsInf.InfFileName) @@ -2427,6 +2438,8 @@ class FdfParser: AlignValue = None if self.__GetAlignment(): + if self.__Token not in ("Auto", "8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K"): + raise Warning("Incorrect alignment '%s'" % self.__Token, self.FileName, self.CurrentLineNumber) AlignValue = self.__Token BuildNum = None @@ -2440,6 +2453,8 @@ class FdfParser: BuildNum = self.__Token if self.__IsKeyword( "VERSION"): + if AlignValue == 'Auto': + raise Warning("Auto alignment can only be used in PE32 or TE section ", self.FileName, self.CurrentLineNumber) if not self.__IsToken( "="): raise Warning("expected '='", self.FileName, self.CurrentLineNumber) if not self.__GetNextToken(): @@ -2452,8 +2467,10 @@ class FdfParser: else: VerSectionObj.FileName = self.__Token Obj.SectionList.append(VerSectionObj) - + elif self.__IsKeyword( "UI"): + if AlignValue == 'Auto': + raise Warning("Auto alignment can only be used in PE32 or TE section ", self.FileName, self.CurrentLineNumber) if not self.__IsToken( "="): raise Warning("expected '='", self.FileName, self.CurrentLineNumber) if not self.__GetNextToken(): @@ -2467,6 +2484,8 @@ class FdfParser: Obj.SectionList.append(UiSectionObj) elif self.__IsKeyword( "FV_IMAGE"): + if AlignValue == 'Auto': + raise Warning("Auto alignment can only be used in PE32 or TE section ", self.FileName, self.CurrentLineNumber) if not self.__IsToken( "="): raise Warning("expected '='", self.FileName, self.CurrentLineNumber) if not self.__GetNextToken(): @@ -2508,6 +2527,8 @@ class FdfParser: Obj.SectionList.append(FvImageSectionObj) elif self.__IsKeyword("PEI_DEPEX_EXP") or self.__IsKeyword("DXE_DEPEX_EXP") or self.__IsKeyword("SMM_DEPEX_EXP"): + if AlignValue == 'Auto': + raise Warning("Auto alignment can only be used in PE32 or TE section ", self.FileName, self.CurrentLineNumber) DepexSectionObj = DepexSection.DepexSection() DepexSectionObj.Alignment = AlignValue DepexSectionObj.DepexType = self.__Token @@ -2523,7 +2544,6 @@ class FdfParser: Obj.SectionList.append(DepexSectionObj) else: - if not self.__GetNextWord(): raise Warning("expected section type", self.FileName, self.CurrentLineNumber) @@ -2535,6 +2555,9 @@ class FdfParser: if self.__Token not in ("COMPAT16", "PE32", "PIC", "TE", "FV_IMAGE", "RAW", "DXE_DEPEX",\ "UI", "VERSION", "PEI_DEPEX", "SUBTYPE_GUID", "SMM_DEPEX"): raise Warning("Unknown section type '%s'" % self.__Token, self.FileName, self.CurrentLineNumber) + if AlignValue == 'Auto'and (not self.__Token == 'PE32') and (not self.__Token == 'TE'): + raise Warning("Auto alignment can only be used in PE32 or TE section ", self.FileName, self.CurrentLineNumber) + # DataSection DataSectionObj = DataSection.DataSection() DataSectionObj.Alignment = AlignValue @@ -2684,6 +2707,8 @@ class FdfParser: AlignValue = None if self.__GetAlignment(): + if self.__Token not in ("8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K"): + raise Warning("Incorrect alignment '%s'" % self.__Token, self.FileName, self.CurrentLineNumber) AlignValue = self.__Token if not self.__GetCglSection(FfsFileObj, AlignValue): @@ -3013,9 +3038,11 @@ class FdfParser: AlignValue = "" if self.__GetAlignment(): - if self.__Token not in ("8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K"): + if self.__Token not in ("Auto", "8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K"): raise Warning("Incorrect alignment '%s'" % self.__Token, self.FileName, self.CurrentLineNumber) - AlignValue = self.__Token + #For FFS, Auto is default option same to "" + if not self.__Token == "Auto": + AlignValue = self.__Token if self.__IsToken("{"): # Complex file rule expected @@ -3040,24 +3067,6 @@ class FdfParser: return Rule - elif self.__IsToken("|"): - # Ext rule expected - Ext = self.__GetFileExtension() - - Rule = RuleSimpleFile.RuleSimpleFile() - - Rule.FvFileType = Type - Rule.NameGuid = NameGuid - Rule.Alignment = AlignValue - Rule.CheckSum = CheckSum - Rule.Fixed = Fixed - Rule.FileExtension = Ext - Rule.KeyStringList = KeyStringList - if KeepReloc != None: - Rule.KeepReloc = KeepReloc - - return Rule - else: # Simple file rule expected if not self.__GetNextWord(): @@ -3076,12 +3085,18 @@ class FdfParser: if self.__IsKeyword("CheckSum", True): CheckSum = True + SectAlignment = "" if self.__GetAlignment(): - if self.__Token not in ("8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K"): + if self.__Token not in ("Auto", "8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K"): raise Warning("Incorrect alignment '%s'" % self.__Token, self.FileName, self.CurrentLineNumber) - AlignValue = self.__Token + if self.__Token == 'Auto' and (not SectionName == 'PE32') and (not SectionName == 'TE'): + raise Warning("Auto alignment can only be used in PE32 or TE section ", self.FileName, self.CurrentLineNumber) + SectAlignment = self.__Token - if not self.__GetNextToken(): + Ext = None + if self.__IsToken('|'): + Ext = self.__GetFileExtension() + elif not self.__GetNextToken(): raise Warning("expected File name", self.FileName, self.CurrentLineNumber) Rule = RuleSimpleFile.RuleSimpleFile() @@ -3089,12 +3104,14 @@ class FdfParser: Rule.FvFileType = Type Rule.NameGuid = NameGuid Rule.Alignment = AlignValue + Rule.SectAlignment = SectAlignment Rule.CheckSum = CheckSum Rule.Fixed = Fixed - Rule.FileName = self.__Token Rule.KeyStringList = KeyStringList if KeepReloc != None: Rule.KeepReloc = KeepReloc + Rule.FileExtension = Ext + Rule.FileName = self.__Token return Rule ## __GetEfiSection() method @@ -3148,14 +3165,6 @@ class FdfParser: raise Warning("expected 'FV'", self.FileName, self.CurrentLineNumber) FvImageSectionObj.FvFileType = self.__Token - if self.__GetAlignment(): - if self.__Token not in ("8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K"): - raise Warning("Incorrect alignment '%s'" % self.__Token, self.FileName, self.CurrentLineNumber) - FvImageSectionObj.Alignment = self.__Token - - if self.__IsKeyword("FV"): - FvImageSectionObj.FvFileType = self.__Token - if self.__GetAlignment(): if self.__Token not in ("8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K"): raise Warning("Incorrect alignment '%s'" % self.__Token, self.FileName, self.CurrentLineNumber) @@ -3224,6 +3233,10 @@ class FdfParser: EfiSectionObj.BuildNum = self.__Token if self.__GetAlignment(): + if self.__Token not in ("Auto", "8", "16", "32", "64", "128", "512", "1K", "4K", "32K" ,"64K"): + raise Warning("Incorrect alignment '%s'" % self.__Token, self.FileName, self.CurrentLineNumber) + if self.__Token == 'Auto' and (not SectionName == 'PE32') and (not SectionName == 'TE'): + raise Warning("Auto alignment can only be used in PE32 or TE section ", self.FileName, self.CurrentLineNumber) EfiSectionObj.Alignment = self.__Token if self.__IsKeyword('RELOCS_STRIPPED') or self.__IsKeyword('RELOCS_RETAINED'): diff --git a/BaseTools/Source/Python/GenFds/FfsFileStatement.py b/BaseTools/Source/Python/GenFds/FfsFileStatement.py index e3f2e68fb8..b0b1b00c7e 100644 --- a/BaseTools/Source/Python/GenFds/FfsFileStatement.py +++ b/BaseTools/Source/Python/GenFds/FfsFileStatement.py @@ -1,7 +1,7 @@ ## @file # process FFS generation from FILE statement # -# Copyright (c) 2007, Intel Corporation +# Copyright (c) 2007 - 2010, Intel Corporation # # All rights reserved. This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License @@ -17,14 +17,17 @@ # import Ffs import Rule -from GenFdsGlobalVariable import GenFdsGlobalVariable import os import StringIO import subprocess + +from GenFdsGlobalVariable import GenFdsGlobalVariable from CommonDataClass.FdfClass import FileStatementClassObject from Common import EdkLogger from Common.BuildToolError import * from Common.Misc import GuidStructureByteArrayToGuidString +from GuidSection import GuidSection +from FvImageSection import FvImageSection ## generate FFS from FILE # @@ -41,11 +44,13 @@ class FileStatement (FileStatementClassObject) : # # Generate FFS # - # @param self The object pointer - # @param Dict dictionary contains macro and value pair - # @retval string Generated FFS file name + # @param self The object pointer + # @param Dict dictionary contains macro and value pair + # @param FvChildAddr Array of the inside FvImage base address + # @param FvParentAddr Parent Fv base address + # @retval string Generated FFS file name # - def GenFfs(self, Dict = {}): + def GenFfs(self, Dict = {}, FvChildAddr=[], FvParentAddr=None): if self.NameGuid != None and self.NameGuid.startswith('PCD('): PcdValue = GenFdsGlobalVariable.GetPcdValue(self.NameGuid) @@ -92,6 +97,15 @@ class FileStatement (FileStatementClassObject) : for section in self.SectionList : Index = Index + 1 SecIndex = '%d' %Index + # process the inside FvImage from FvSection or GuidSection + if FvChildAddr != []: + if isinstance(section, FvImageSection): + section.FvAddr = FvChildAddr.pop(0) + elif isinstance(section, GuidSection): + section.FvAddr = FvChildAddr + if FvParentAddr != None and isinstance(section, GuidSection): + section.FvParentAddr = FvParentAddr + sectList, align = section.GenSection(OutputDir, self.NameGuid, SecIndex, self.KeyStringList, None, Dict) if sectList != []: for sect in sectList: diff --git a/BaseTools/Source/Python/GenFds/FfsInfStatement.py b/BaseTools/Source/Python/GenFds/FfsInfStatement.py index ac13e4d7d9..b00e5a2178 100644 --- a/BaseTools/Source/Python/GenFds/FfsInfStatement.py +++ b/BaseTools/Source/Python/GenFds/FfsInfStatement.py @@ -1,7 +1,7 @@ ## @file # process FFS generation from INF statement # -# Copyright (c) 2007, Intel Corporation +# Copyright (c) 2007 - 2010, Intel Corporation # # All rights reserved. This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License @@ -31,6 +31,9 @@ from Common.Misc import PathClass from Common.Misc import GuidStructureByteArrayToGuidString from Common import EdkLogger from Common.BuildToolError import * +from GuidSection import GuidSection +from FvImageSection import FvImageSection +from Common.Misc import PeImageClass ## generate FFS from INF # @@ -90,7 +93,7 @@ class FfsInfStatement(FfsInfStatementClassObject): self.BaseName = Inf.BaseName self.ModuleGuid = Inf.Guid self.ModuleType = Inf.ModuleType - if Inf.Specification != None and 'PI_SPECIFICATION_VERSION' in Inf.Specification: + if Inf.Specification != None and 'PI_SPECIFICATION_VERSION' in Inf.Specification: self.PiSpecVersion = Inf.Specification['PI_SPECIFICATION_VERSION'] if Inf.AutoGenVersion < 0x00010005: self.ModuleType = Inf.ComponentType @@ -105,7 +108,7 @@ class FfsInfStatement(FfsInfStatementClassObject): self.BaseName = Inf.BaseName self.ModuleGuid = Inf.Guid self.ModuleType = Inf.ModuleType - if Inf.Specification != None and 'PI_SPECIFICATION_VERSION' in Inf.Specification: + if Inf.Specification != None and 'PI_SPECIFICATION_VERSION' in Inf.Specification: self.PiSpecVersion = Inf.Specification['PI_SPECIFICATION_VERSION'] self.VersionString = Inf.Version self.BinFileList = Inf.Binaries @@ -118,7 +121,7 @@ class FfsInfStatement(FfsInfStatementClassObject): if len(self.SourceFileList) != 0 and not self.InDsc: EdkLogger.warn("GenFds", GENFDS_ERROR, "Module %s NOT found in DSC file; Is it really a binary module?" % (self.InfFileName)) - if self.ModuleType == 'SMM_CORE' and self.PiSpecVersion < 0x0001000A: + if self.ModuleType == 'SMM_CORE' and self.PiSpecVersion < 0x0001000A: EdkLogger.error("GenFds", FORMAT_NOT_SUPPORTED, "SMM_CORE module type can't be used in the module with PI_SPECIFICATION_VERSION less than 0x0001000A", File=self.InfFileName) if Inf._Defs != None and len(Inf._Defs) > 0: @@ -146,11 +149,13 @@ class FfsInfStatement(FfsInfStatementClassObject): # # Generate FFS # - # @param self The object pointer - # @param Dict dictionary contains macro and value pair - # @retval string Generated FFS file name + # @param self The object pointer + # @param Dict dictionary contains macro and value pair + # @param FvChildAddr Array of the inside FvImage base address + # @param FvParentAddr Parent Fv base address + # @retval string Generated FFS file name # - def GenFfs(self, Dict = {}): + def GenFfs(self, Dict = {}, FvChildAddr = [], FvParentAddr=None): # # Parse Inf file get Module related information # @@ -184,7 +189,7 @@ class FfsInfStatement(FfsInfStatementClassObject): # For Rule has ComplexFile # elif isinstance(Rule, RuleComplexFile.RuleComplexFile): - InputSectList, InputSectAlignments = self.__GenComplexFileSection__(Rule) + InputSectList, InputSectAlignments = self.__GenComplexFileSection__(Rule, FvChildAddr, FvParentAddr) FfsOutput = self.__GenComplexFileFfs__(Rule, InputSectList, InputSectAlignments) return FfsOutput @@ -393,8 +398,13 @@ class FfsInfStatement(FfsInfStatementClassObject): # FileList = [] OutputFileList = [] + GenSecInputFile = None if Rule.FileName != None: GenSecInputFile = self.__ExtendMacro__(Rule.FileName) + if os.path.isabs(GenSecInputFile): + GenSecInputFile = os.path.normpath(GenSecInputFile) + else: + GenSecInputFile = os.path.normpath(os.path.join(self.EfiOutputPath, GenSecInputFile)) else: FileList, IsSect = Section.Section.GetFileList(self, '', Rule.FileExtension) @@ -429,6 +439,15 @@ class FfsInfStatement(FfsInfStatementClassObject): Ffs.Ffs.SectionSuffix[SectionType] + 'SEC' + SecNum Index = Index + 1 OutputFile = os.path.join(self.OutputPath, GenSecOutputFile) + File = GenFdsGlobalVariable.MacroExtend(File, Dict, self.CurrentArch) + + #Get PE Section alignment when align is set to AUTO + if self.Alignment == 'Auto' and (SectionType == 'PE32' or SectionType == 'TE'): + ImageObj = PeImageClass (File) + if ImageObj.SectionAlignment < 0x400: + self.Alignment = str (ImageObj.SectionAlignment) + else: + self.Alignment = str (ImageObj.SectionAlignment / 0x400) + 'K' if not NoStrip: FileBeforeStrip = os.path.join(self.OutputPath, ModuleName + '.reloc') @@ -438,7 +457,7 @@ class FfsInfStatement(FfsInfStatementClassObject): StrippedFile = os.path.join(self.OutputPath, ModuleName + '.stipped') GenFdsGlobalVariable.GenerateFirmwareImage( StrippedFile, - [GenFdsGlobalVariable.MacroExtend(File, Dict, self.CurrentArch)], + [File], Strip=True ) File = StrippedFile @@ -447,7 +466,7 @@ class FfsInfStatement(FfsInfStatementClassObject): TeFile = os.path.join( self.OutputPath, self.ModuleGuid + 'Te.raw') GenFdsGlobalVariable.GenerateFirmwareImage( TeFile, - [GenFdsGlobalVariable.MacroExtend(File, Dict, self.CurrentArch)], + [File], Type='te' ) File = TeFile @@ -459,6 +478,15 @@ class FfsInfStatement(FfsInfStatementClassObject): GenSecOutputFile= self.__ExtendMacro__(Rule.NameGuid) + \ Ffs.Ffs.SectionSuffix[SectionType] + 'SEC' + SecNum OutputFile = os.path.join(self.OutputPath, GenSecOutputFile) + GenSecInputFile = GenFdsGlobalVariable.MacroExtend(GenSecInputFile, Dict, self.CurrentArch) + + #Get PE Section alignment when align is set to AUTO + if self.Alignment == 'Auto' and (SectionType == 'PE32' or SectionType == 'TE'): + ImageObj = PeImageClass (GenSecInputFile) + if ImageObj.SectionAlignment < 0x400: + self.Alignment = str (ImageObj.SectionAlignment) + else: + self.Alignment = str (ImageObj.SectionAlignment / 0x400) + 'K' if not NoStrip: FileBeforeStrip = os.path.join(self.OutputPath, ModuleName + '.reloc') @@ -468,7 +496,7 @@ class FfsInfStatement(FfsInfStatementClassObject): StrippedFile = os.path.join(self.OutputPath, ModuleName + '.stipped') GenFdsGlobalVariable.GenerateFirmwareImage( StrippedFile, - [GenFdsGlobalVariable.MacroExtend(GenSecInputFile, Dict, self.CurrentArch)], + [GenSecInputFile], Strip=True ) GenSecInputFile = StrippedFile @@ -477,7 +505,7 @@ class FfsInfStatement(FfsInfStatementClassObject): TeFile = os.path.join( self.OutputPath, self.ModuleGuid + 'Te.raw') GenFdsGlobalVariable.GenerateFirmwareImage( TeFile, - [GenFdsGlobalVariable.MacroExtend(File, Dict, self.CurrentArch)], + [GenSecInputFile], Type='te' ) GenSecInputFile = TeFile @@ -507,7 +535,7 @@ class FfsInfStatement(FfsInfStatementClassObject): SectionAlignments = [] for InputFile in InputFileList: InputSection.append(InputFile) - SectionAlignments.append(Rule.Alignment) + SectionAlignments.append(Rule.SectAlignment) if Rule.NameGuid != None and Rule.NameGuid.startswith('PCD('): PcdValue = GenFdsGlobalVariable.GetPcdValue(Rule.NameGuid) @@ -534,11 +562,13 @@ class FfsInfStatement(FfsInfStatementClassObject): # # Generate section by sections in Rule # - # @param self The object pointer - # @param Rule The rule object used to generate section - # @retval string File name of the generated section file + # @param self The object pointer + # @param Rule The rule object used to generate section + # @param FvChildAddr Array of the inside FvImage base address + # @param FvParentAddr Parent Fv base address + # @retval string File name of the generated section file # - def __GenComplexFileSection__(self, Rule): + def __GenComplexFileSection__(self, Rule, FvChildAddr, FvParentAddr): if self.ModuleType in ('SEC', 'PEI_CORE', 'PEIM'): if Rule.KeepReloc != None: self.KeepRelocFromRule = Rule.KeepReloc @@ -560,6 +590,17 @@ class FfsInfStatement(FfsInfStatementClassObject): if self.ModuleType == 'DXE_SMM_DRIVER' and self.PiSpecVersion < 0x0001000A: if Sect.SectionType == 'SMM_DEPEX': EdkLogger.error("GenFds", FORMAT_NOT_SUPPORTED, "Framework SMM module doesn't support SMM_DEPEX section type", File=self.InfFileName) + # + # process the inside FvImage from FvSection or GuidSection + # + if FvChildAddr != []: + if isinstance(Sect, FvImageSection): + Sect.FvAddr = FvChildAddr.pop(0) + elif isinstance(Sect, GuidSection): + Sect.FvAddr = FvChildAddr + if FvParentAddr != None and isinstance(Sect, GuidSection): + Sect.FvParentAddr = FvParentAddr + if Rule.KeyStringList != []: SectList, Align = Sect.GenSection(self.OutputPath , self.ModuleGuid, SecIndex, Rule.KeyStringList, self) else : diff --git a/BaseTools/Source/Python/GenFds/Fv.py b/BaseTools/Source/Python/GenFds/Fv.py index 6190bceba8..8d2ef1d874 100644 --- a/BaseTools/Source/Python/GenFds/Fv.py +++ b/BaseTools/Source/Python/GenFds/Fv.py @@ -1,7 +1,7 @@ ## @file # process FV generation # -# Copyright (c) 2007, Intel Corporation +# Copyright (c) 2007 - 2010, Intel Corporation # # All rights reserved. This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License @@ -63,7 +63,7 @@ class FV (FvClassObject): # def AddToBuffer (self, Buffer, BaseAddress=None, BlockSize= None, BlockNum=None, ErasePloarity='1', VtfDict=None, MacroDict = {}) : - if self.UiFvName.upper() + 'fv' in GenFds.ImageBinDict.keys(): + if BaseAddress == None and self.UiFvName.upper() + 'fv' in GenFds.ImageBinDict.keys(): return GenFds.ImageBinDict[self.UiFvName.upper() + 'fv'] # @@ -103,7 +103,7 @@ class FV (FvClassObject): # Process Modules in FfsList for FfsFile in self.FfsList : - FileName = FfsFile.GenFfs(MacroDict) + FileName = FfsFile.GenFfs(MacroDict, FvParentAddr=BaseAddress) FfsFileList.append(FileName) self.FvInfFile.writelines("EFI_FILE_NAME = " + \ FileName + \ @@ -122,6 +122,9 @@ class FV (FvClassObject): FvInfoFileName = os.path.join(GenFdsGlobalVariable.FfsDir, self.UiFvName + '.inf') shutil.copy(GenFdsGlobalVariable.FvAddressFileName, FvInfoFileName) + OrigFvInfo = None + if os.path.exists (FvInfoFileName): + OrigFvInfo = open(FvInfoFileName, 'r').read() GenFdsGlobalVariable.GenerateFirmwareVolume( FvOutputFile, [self.InfFileName], @@ -129,6 +132,35 @@ class FV (FvClassObject): FfsList=FfsFileList ) + NewFvInfo = None + if os.path.exists (FvInfoFileName): + NewFvInfo = open(FvInfoFileName, 'r').read() + if NewFvInfo != None and NewFvInfo != OrigFvInfo: + FvChildAddr = [] + AddFileObj = open(FvInfoFileName, 'r') + AddrStrings = AddFileObj.readlines() + AddrKeyFound = False + for AddrString in AddrStrings: + if AddrKeyFound: + #get base address for the inside FvImage + FvChildAddr.append (AddrString) + elif AddrString.find ("[FV_BASE_ADDRESS]") != -1: + AddrKeyFound = True + AddFileObj.close() + + if FvChildAddr != []: + # Update Ffs again + for FfsFile in self.FfsList : + FileName = FfsFile.GenFfs(MacroDict, FvChildAddr, BaseAddress) + + #Update GenFv again + GenFdsGlobalVariable.GenerateFirmwareVolume( + FvOutputFile, + [self.InfFileName], + AddressFile=FvInfoFileName, + FfsList=FfsFileList + ) + # # Write the Fv contents to Buffer # @@ -138,6 +170,21 @@ class FV (FvClassObject): GenFdsGlobalVariable.SharpCounter = 0 Buffer.write(FvFileObj.read()) + FvFileObj.seek(0) + # PI FvHeader is 0x48 byte + FvHeaderBuffer = FvFileObj.read(0x48) + # FV alignment position. + FvAlignmentValue = 1 << (ord (FvHeaderBuffer[0x2E]) & 0x1F) + # FvAlignmentValue is larger than or equal to 1K + if FvAlignmentValue >= 0x400: + if FvAlignmentValue >= 0x10000: + #The max alignment supported by FFS is 64K. + self.FvAlignment = "64K" + else: + self.FvAlignment = str (FvAlignmentValue / 0x400) + "K" + else: + # FvAlignmentValue is less than 1K + self.FvAlignment = str (FvAlignmentValue) FvFileObj.close() GenFds.ImageBinDict[self.UiFvName.upper() + 'fv'] = FvOutputFile return FvOutputFile @@ -179,6 +226,10 @@ class FV (FvClassObject): ' 0x%X' %BlockNum + \ T_CHAR_LF) else: + if self.BlockSizeList == []: + #set default block size is 1 + self.FvInfFile.writelines("EFI_BLOCK_SIZE = 0x1" + T_CHAR_LF) + for BlockSize in self.BlockSizeList : if BlockSize[0] != None: self.FvInfFile.writelines("EFI_BLOCK_SIZE = " + \ diff --git a/BaseTools/Source/Python/GenFds/FvImageSection.py b/BaseTools/Source/Python/GenFds/FvImageSection.py index 3a3e714228..c945ce9b9b 100644 --- a/BaseTools/Source/Python/GenFds/FvImageSection.py +++ b/BaseTools/Source/Python/GenFds/FvImageSection.py @@ -73,7 +73,13 @@ class FvImageSection(FvImageSectionClassObject): Fv = GenFdsGlobalVariable.FdfParser.Profile.FvDict.get(self.FvName) if Fv != None: self.Fv = Fv - FvFileName = self.Fv.AddToBuffer(Buffer, MacroDict = Dict) + FvFileName = Fv.AddToBuffer(Buffer, self.FvAddr, MacroDict = Dict) + if Fv.FvAlignment != None: + if self.Alignment == None: + self.Alignment = Fv.FvAlignment + else: + if GenFdsGlobalVariable.GetAlignment (Fv.FvAlignment) > GenFdsGlobalVariable.GetAlignment (self.Alignment): + self.Alignment = Fv.FvAlignment else: if self.FvFileName != None: FvFileName = GenFdsGlobalVariable.ReplaceWorkspaceMacro(self.FvFileName) diff --git a/BaseTools/Source/Python/GenFds/GenFds.py b/BaseTools/Source/Python/GenFds/GenFds.py index 1df19100d3..1285103f5e 100644 --- a/BaseTools/Source/Python/GenFds/GenFds.py +++ b/BaseTools/Source/Python/GenFds/GenFds.py @@ -1,7 +1,7 @@ ## @file # generate flash image # -# Copyright (c) 2007, Intel Corporation +# Copyright (c) 2007 - 2010, Intel Corporation # # All rights reserved. This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License @@ -39,7 +39,7 @@ from Common.Misc import DirCache,PathClass ## Version and Copyright versionNumber = "1.0" __version__ = "%prog Version " + versionNumber -__copyright__ = "Copyright (c) 2007, Intel Corporation All rights reserved." +__copyright__ = "Copyright (c) 2007 - 2010, Intel Corporation All rights reserved." ## Tool entrance method # @@ -94,6 +94,18 @@ def main(): if (Options.filename): FdfFilename = Options.filename FdfFilename = GenFdsGlobalVariable.ReplaceWorkspaceMacro(FdfFilename) + + if FdfFilename[0:2] == '..': + FdfFilename = os.path.realpath(FdfFilename) + if not os.path.isabs (FdfFilename): + FdfFilename = os.path.join(GenFdsGlobalVariable.WorkSpaceDir, FdfFilename) + if not os.path.exists(FdfFilename): + EdkLogger.error("GenFds", FILE_NOT_FOUND, ExtraData=FdfFilename) + if os.path.normcase (FdfFilename).find(Workspace) != 0: + EdkLogger.error("GenFds", FILE_NOT_FOUND, "FdfFile doesn't exist in Workspace!") + + GenFdsGlobalVariable.FdfFile = FdfFilename + GenFdsGlobalVariable.FdfFileTimeStamp = os.path.getmtime(FdfFilename) else: EdkLogger.error("GenFds", OPTION_MISSING, "Missing FDF filename") @@ -107,16 +119,6 @@ def main(): else: EdkLogger.error("GenFds", OPTION_MISSING, "Missing tool chain tag") - if FdfFilename[0:2] == '..': - FdfFilename = os.path.realpath(FdfFilename) - if FdfFilename[1] != ':': - FdfFilename = os.path.join(GenFdsGlobalVariable.WorkSpaceDir, FdfFilename) - - if not os.path.exists(FdfFilename): - EdkLogger.error("GenFds", FILE_NOT_FOUND, ExtraData=FdfFilename) - GenFdsGlobalVariable.FdfFile = FdfFilename - GenFdsGlobalVariable.FdfFileTimeStamp = os.path.getmtime(FdfFilename) - if (Options.activePlatform): ActivePlatform = Options.activePlatform ActivePlatform = GenFdsGlobalVariable.ReplaceWorkspaceMacro(ActivePlatform) @@ -124,22 +126,22 @@ def main(): if ActivePlatform[0:2] == '..': ActivePlatform = os.path.realpath(ActivePlatform) - if ActivePlatform[1] != ':': + if not os.path.isabs (ActivePlatform): ActivePlatform = os.path.join(GenFdsGlobalVariable.WorkSpaceDir, ActivePlatform) if not os.path.exists(ActivePlatform) : EdkLogger.error("GenFds", FILE_NOT_FOUND, "ActivePlatform doesn't exist!") - if ActivePlatform.find(Workspace) == -1: + if os.path.normcase (ActivePlatform).find(Workspace) != 0: EdkLogger.error("GenFds", FILE_NOT_FOUND, "ActivePlatform doesn't exist in Workspace!") - ActivePlatform = ActivePlatform.replace(Workspace, '') + ActivePlatform = ActivePlatform[len(Workspace):] if len(ActivePlatform) > 0 : if ActivePlatform[0] == '\\' or ActivePlatform[0] == '/': ActivePlatform = ActivePlatform[1:] else: EdkLogger.error("GenFds", FILE_NOT_FOUND, "ActivePlatform doesn't exist!") - else : + else: EdkLogger.error("GenFds", OPTION_MISSING, "Missing active platform") GenFdsGlobalVariable.ActivePlatform = PathClass(NormPath(ActivePlatform), Workspace) @@ -190,9 +192,14 @@ def main(): for Arch in ArchList: GenFdsGlobalVariable.OutputDirFromDscDict[Arch] = NormPath(BuildWorkSpace.BuildObject[GenFdsGlobalVariable.ActivePlatform, Arch].OutputDirectory) + GenFdsGlobalVariable.PlatformName = BuildWorkSpace.BuildObject[GenFdsGlobalVariable.ActivePlatform, Arch].PlatformName if (Options.outputDir): OutputDirFromCommandLine = GenFdsGlobalVariable.ReplaceWorkspaceMacro(Options.outputDir) + if not os.path.isabs (Options.outputDir): + Options.outputDir = os.path.join(GenFdsGlobalVariable.WorkSpaceDir, Options.outputDir) + if os.path.normcase (Options.outputDir).find(Workspace) != 0: + EdkLogger.error("GenFds", FILE_NOT_FOUND, "OutputDir doesn't exist in Workspace!") for Arch in ArchList: GenFdsGlobalVariable.OutputDirDict[Arch] = OutputDirFromCommandLine else: @@ -237,10 +244,13 @@ def main(): GenFds.PreprocessImage(BuildWorkSpace, GenFdsGlobalVariable.ActivePlatform) """Call GenFds""" GenFds.GenFd('', FdfParserObj, BuildWorkSpace, ArchList) - + + """Generate GUID cross reference file""" + GenFds.GenerateGuidXRefFile(BuildWorkSpace, ArchList) + """Display FV space info.""" GenFds.DisplayFvSpaceInfo(FdfParserObj) - + except FdfParser.Warning, X: EdkLogger.error(X.ToolName, FORMAT_INVALID, File=X.FileName, Line=X.LineNumber, ExtraData=X.Message, RaiseError = False) ReturnCode = FORMAT_INVALID @@ -352,7 +362,7 @@ class GenFds : # Get FV base Address FvObj.AddToBuffer(Buffer, None, GenFds.GetFvBlockSize(FvObj)) Buffer.close() - + if GenFds.OnlyGenerateThisFv == None and GenFds.OnlyGenerateThisFd == None: if GenFdsGlobalVariable.FdfParser.Profile.CapsuleDict != {}: GenFdsGlobalVariable.VerboseLogger("\n Generate other Capsule images!") @@ -372,7 +382,7 @@ class GenFds : # @retval int Block size value # def GetFvBlockSize(FvObj): - DefaultBlockSize = 0x10000 + DefaultBlockSize = 0x1 FdObj = None if GenFds.OnlyGenerateThisFd != None and GenFds.OnlyGenerateThisFd.upper() in GenFdsGlobalVariable.FdfParser.Profile.FdDict.keys(): FdObj = GenFdsGlobalVariable.FdfParser.Profile.FdDict[GenFds.OnlyGenerateThisFd.upper()] @@ -476,11 +486,23 @@ class GenFds : ModuleObj = BuildDb.BuildObject[Key, 'COMMON'] print ModuleObj.BaseName + ' ' + ModuleObj.ModuleType + def GenerateGuidXRefFile(BuildDb, ArchList): + GuidXRefFileName = os.path.join(GenFdsGlobalVariable.FvDir, "Guid.xref") + GuidXRefFile = open(GuidXRefFileName, "w+") + for Arch in ArchList: + PlatformDataBase = BuildDb.BuildObject[GenFdsGlobalVariable.ActivePlatform, Arch] + for ModuleFile in PlatformDataBase.Modules: + Module = BuildDb.BuildObject[ModuleFile, Arch] + GuidXRefFile.write("%s %s\n" % (Module.Guid, Module.BaseName)) + GuidXRefFile.close() + GenFdsGlobalVariable.InfLogger("\nGUID cross reference file saved to %s" % GuidXRefFileName) + ##Define GenFd as static function GenFd = staticmethod(GenFd) GetFvBlockSize = staticmethod(GetFvBlockSize) DisplayFvSpaceInfo = staticmethod(DisplayFvSpaceInfo) PreprocessImage = staticmethod(PreprocessImage) + GenerateGuidXRefFile = staticmethod(GenerateGuidXRefFile) if __name__ == '__main__': r = main() diff --git a/BaseTools/Source/Python/GenFds/GenFdsGlobalVariable.py b/BaseTools/Source/Python/GenFds/GenFdsGlobalVariable.py index b54e8c88e2..cad2758627 100644 --- a/BaseTools/Source/Python/GenFds/GenFdsGlobalVariable.py +++ b/BaseTools/Source/Python/GenFds/GenFdsGlobalVariable.py @@ -1,7 +1,7 @@ ## @file # Global variables for GenFds # -# Copyright (c) 2007, Intel Corporation +# Copyright (c) 2007 - 2010, Intel Corporation # # All rights reserved. This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License @@ -54,6 +54,7 @@ class GenFdsGlobalVariable: FdfFile = '' FdfFileTimeStamp = 0 FixedLoadAddress = False + PlatformName = '' SectionHeader = struct.Struct("3B 1B") @@ -154,7 +155,7 @@ class GenFdsGlobalVariable: @staticmethod def GenerateSection(Output, Input, Type=None, CompressionType=None, Guid=None, - GuidHdrLen=None, GuidAttr=None, Ui=None, Ver=None): + GuidHdrLen=None, GuidAttr=[], Ui=None, Ver=None, InputAlign=None): if not GenFdsGlobalVariable.NeedsUpdate(Output, Input): return GenFdsGlobalVariable.DebugLogger(EdkLogger.DEBUG_5, "%s needs update because of newer %s" % (Output, Input)) @@ -168,8 +169,14 @@ class GenFdsGlobalVariable: Cmd += ["-g", Guid] if GuidHdrLen not in [None, '']: Cmd += ["-l", GuidHdrLen] - if GuidAttr not in [None, '']: - Cmd += ["-r", GuidAttr] + if len(GuidAttr) != 0: + #Add each guided attribute + for Attr in GuidAttr: + Cmd += ["-r", Attr] + if InputAlign != None: + #Section Align is only for dummy section without section type + for SecAlign in InputAlign: + Cmd += ["--sectionalign", SecAlign] if Ui not in [None, '']: #Cmd += ["-n", '"' + Ui + '"'] @@ -194,6 +201,15 @@ class GenFdsGlobalVariable: Cmd += Input GenFdsGlobalVariable.CallExternalTool(Cmd, "Failed to generate section") + @staticmethod + def GetAlignment (AlignString): + if AlignString == None: + return 0 + if AlignString in ("1K", "2K", "4K", "8K", "16K", "32K", "64K"): + return int (AlignString.rstrip('K')) * 1024 + else: + return int (AlignString) + @staticmethod def GenerateFfs(Output, Input, Type, Guid, Fixed=False, CheckSum=False, Align=None, SectionAlign=None): @@ -331,18 +347,19 @@ class GenFdsGlobalVariable: GenFdsGlobalVariable.CallExternalTool(Cmd, "Failed to generate option rom") @staticmethod - def GuidTool(Output, Input, ToolPath, Options=''): + def GuidTool(Output, Input, ToolPath, Options='', returnValue=[]): if not GenFdsGlobalVariable.NeedsUpdate(Output, Input): return GenFdsGlobalVariable.DebugLogger(EdkLogger.DEBUG_5, "%s needs update because of newer %s" % (Output, Input)) - Cmd = [ToolPath, Options] + Cmd = [ToolPath, ] + Cmd += Options.split(' ') Cmd += ["-o", Output] Cmd += Input - GenFdsGlobalVariable.CallExternalTool(Cmd, "Failed to call " + ToolPath) + GenFdsGlobalVariable.CallExternalTool(Cmd, "Failed to call " + ToolPath, returnValue) - def CallExternalTool (cmd, errorMess): + def CallExternalTool (cmd, errorMess, returnValue=[]): if type(cmd) not in (tuple, list): GenFdsGlobalVariable.ErrorLogger("ToolError! Invalid parameter type in call to CallExternalTool") @@ -369,6 +386,10 @@ class GenFdsGlobalVariable: while PopenObject.returncode == None : PopenObject.wait() + if returnValue != [] and returnValue[0] != 0: + #get command return value + returnValue[0] = PopenObject.returncode + return if PopenObject.returncode != 0 or GenFdsGlobalVariable.VerboseMode or GenFdsGlobalVariable.DebugLevel != -1: GenFdsGlobalVariable.InfLogger ("Return Value = %d" %PopenObject.returncode) GenFdsGlobalVariable.InfLogger (out) diff --git a/BaseTools/Source/Python/GenFds/GuidSection.py b/BaseTools/Source/Python/GenFds/GuidSection.py index e111e0fe50..d967880472 100644 --- a/BaseTools/Source/Python/GenFds/GuidSection.py +++ b/BaseTools/Source/Python/GenFds/GuidSection.py @@ -1,7 +1,7 @@ ## @file # process GUIDed section generation # -# Copyright (c) 2007, Intel Corporation +# Copyright (c) 2007 - 2010, Intel Corporation # # All rights reserved. This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License @@ -25,6 +25,7 @@ from Common import ToolDefClassObject import sys from Common import EdkLogger from Common.BuildToolError import * +from FvImageSection import FvImageSection ## generate GUIDed section # @@ -63,16 +64,57 @@ class GuidSection(GuidSectionClassObject) : self.SectionType = FfsInf.__ExtendMacro__(self.SectionType) self.CurrentArchList = [FfsInf.CurrentArch] - SectFile = tuple() + SectFile = tuple() + SectAlign = [] Index = 0 + MaxAlign = None + if self.FvAddr != []: + FvAddrIsSet = True + else: + FvAddrIsSet = False + + if self.ProcessRequired in ("TRUE", "1"): + if self.FvAddr != []: + #no use FvAddr when the image is processed. + self.FvAddr = [] + if self.FvParentAddr != None: + #no use Parent Addr when the image is processed. + self.FvParentAddr = None + for Sect in self.SectionList: Index = Index + 1 SecIndex = '%s.%d' %(SecNum,Index) + # set base address for inside FvImage + if isinstance(Sect, FvImageSection): + if self.FvAddr != []: + Sect.FvAddr = self.FvAddr.pop(0) + self.IncludeFvSection = True + elif isinstance(Sect, GuidSection): + Sect.FvAddr = self.FvAddr + Sect.FvParentAddr = self.FvParentAddr ReturnSectList, align = Sect.GenSection(OutputPath, ModuleName, SecIndex, KeyStringList,FfsInf, Dict) + if isinstance(Sect, GuidSection): + if Sect.IncludeFvSection: + self.IncludeFvSection = Sect.IncludeFvSection + + if align != None: + if MaxAlign == None: + MaxAlign = align + if GenFdsGlobalVariable.GetAlignment (align) > GenFdsGlobalVariable.GetAlignment (MaxAlign): + MaxAlign = align if ReturnSectList != []: + if align == None: + align = "1" for file in ReturnSectList: SectFile += (file,) + SectAlign.append(align) + if MaxAlign != None: + if self.Alignment == None: + self.Alignment = MaxAlign + else: + if GenFdsGlobalVariable.GetAlignment (MaxAlign) > GenFdsGlobalVariable.GetAlignment (self.Alignment): + self.Alignment = MaxAlign OutputFile = OutputPath + \ os.sep + \ @@ -83,15 +125,17 @@ class GuidSection(GuidSectionClassObject) : OutputFile = os.path.normpath(OutputFile) ExternalTool = None + ExternalOption = None if self.NameGuid != None: - ExternalTool = self.__FindExtendTool__() + ExternalTool, ExternalOption = self.__FindExtendTool__() + # # If not have GUID , call default # GENCRC32 section # if self.NameGuid == None : GenFdsGlobalVariable.VerboseLogger( "Use GenSection function Generate CRC32 Section") - GenFdsGlobalVariable.GenerateSection(OutputFile, SectFile, Section.Section.SectionType[self.SectionType]) + GenFdsGlobalVariable.GenerateSection(OutputFile, SectFile, Section.Section.SectionType[self.SectionType], InputAlign=SectAlign) OutputFileList = [] OutputFileList.append(OutputFile) return OutputFileList, self.Alignment @@ -99,14 +143,14 @@ class GuidSection(GuidSectionClassObject) : elif ExternalTool == None: EdkLogger.error("GenFds", GENFDS_ERROR, "No tool found with GUID %s" % self.NameGuid) else: + DummyFile = OutputFile+".dummy" # # Call GenSection with DUMMY section type. # - GenFdsGlobalVariable.GenerateSection(OutputFile+".dummy", SectFile) + GenFdsGlobalVariable.GenerateSection(DummyFile, SectFile, InputAlign=SectAlign) # # Use external tool process the Output # - InputFile = OutputFile+".dummy" TempFile = OutputPath + \ os.sep + \ ModuleName + \ @@ -115,30 +159,76 @@ class GuidSection(GuidSectionClassObject) : '.tmp' TempFile = os.path.normpath(TempFile) - ExternalToolCmd = ( - ExternalTool, - '-e', - '-o', TempFile, - InputFile, - ) - + FirstCall = False + CmdOption = '-e' + if ExternalOption != None: + CmdOption = CmdOption + ' ' + ExternalOption + if self.ProcessRequired not in ("TRUE", "1") and self.IncludeFvSection and not FvAddrIsSet and self.FvParentAddr != None: + #FirstCall is only set for the encapsulated flash FV image without process required attribute. + FirstCall = True # # Call external tool # - GenFdsGlobalVariable.GuidTool(TempFile, [InputFile], ExternalTool, '-e') + ReturnValue = [1] + if FirstCall: + #first try to call the guided tool with -z option and CmdOption for the no process required guided tool. + GenFdsGlobalVariable.GuidTool(TempFile, [DummyFile], ExternalTool, '-z' + ' ' + CmdOption, ReturnValue) # - # Call Gensection Add Secntion Header + # when no call or first call failed, ReturnValue are not 1. + # Call the guided tool with CmdOption # - Attribute = None - if self.ProcessRequired == True: - Attribute = 'PROCSSING_REQUIRED' - if self.AuthStatusValid == True: - Attribute = 'AUTH_STATUS_VALID' + if ReturnValue[0] != 0: + FirstCall = False + ReturnValue[0] = 0 + GenFdsGlobalVariable.GuidTool(TempFile, [DummyFile], ExternalTool, CmdOption) + + FileHandleIn = open(DummyFile,'rb') + FileHandleIn.seek(0,2) + InputFileSize = FileHandleIn.tell() + + FileHandleOut = open(TempFile,'rb') + FileHandleOut.seek(0,2) + TempFileSize = FileHandleOut.tell() + + Attribute = [] + HeaderLength = None + if TempFileSize > InputFileSize and TempFileSize % 4 == 0: + FileHandleIn.seek(0) + BufferIn = FileHandleIn.read() + FileHandleOut.seek(0) + BufferOut = FileHandleOut.read() + if BufferIn == BufferOut[TempFileSize - InputFileSize:]: + HeaderLength = str(TempFileSize - InputFileSize) + #auto sec guided attribute with process required + if HeaderLength == None: + Attribute.append('PROCESSING_REQUIRED') + + FileHandleIn.close() + FileHandleOut.close() + + if FirstCall and 'PROCESSING_REQUIRED' in Attribute: + # Guided data by -z option on first call is the process required data. Call the guided tool with the real option. + GenFdsGlobalVariable.GuidTool(TempFile, [DummyFile], ExternalTool, CmdOption) + + # + # Call Gensection Add Section Header + # + if self.ProcessRequired in ("TRUE", "1"): + if 'PROCESSING_REQUIRED' not in Attribute: + Attribute.append('PROCESSING_REQUIRED') + HeaderLength = None + if self.AuthStatusValid in ("TRUE", "1"): + Attribute.append('AUTH_STATUS_VALID') GenFdsGlobalVariable.GenerateSection(OutputFile, [TempFile], Section.Section.SectionType['GUIDED'], - Guid=self.NameGuid, GuidAttr=Attribute) + Guid=self.NameGuid, GuidAttr=Attribute, GuidHdrLen=HeaderLength) OutputFileList = [] OutputFileList.append(OutputFile) + if 'PROCESSING_REQUIRED' in Attribute: + # reset guided section alignment to none for the processed required guided data + self.Alignment = None + self.IncludeFvSection = False + self.ProcessRequired = "TRUE" return OutputFileList, self.Alignment ## __FindExtendTool() @@ -177,6 +267,12 @@ class GuidSection(GuidSectionClassObject) : KeyList[3] + \ '_' + \ 'PATH') + + ToolOption = ToolDefinition.get( Key + \ + '_' + \ + KeyList[3] + \ + '_' + \ + 'FLAGS') if ToolPathTmp == None: ToolPathTmp = ToolPath else: @@ -184,7 +280,7 @@ class GuidSection(GuidSectionClassObject) : EdkLogger.error("GenFds", GENFDS_ERROR, "Don't know which tool to use, %s or %s ?" % (ToolPathTmp, ToolPath)) - return ToolPathTmp + return ToolPathTmp, ToolOption diff --git a/BaseTools/Source/Python/GenFds/Section.py b/BaseTools/Source/Python/GenFds/Section.py index 1905935ebf..2e24697a3d 100644 --- a/BaseTools/Source/Python/GenFds/Section.py +++ b/BaseTools/Source/Python/GenFds/Section.py @@ -140,7 +140,6 @@ class Section (SectionClassObject): GenFdsGlobalVariable.InfLogger ("\nCurrent ARCH \'%s\' of File %s is not in the Support Arch Scope of %s specified by INF %s in FDF" %(FfsInf.CurrentArch, File.File, File.Arch, FfsInf.InfFileName)) if Suffix != None and os.path.exists(FfsInf.EfiOutputPath): -# FileList.extend(glob.glob(os.path.join(FfsInf.EfiOutputPath, "*" + Suffix))) # Update to search files with suffix in all sub-dirs. Tuple = os.walk(FfsInf.EfiOutputPath) for Dirpath, Dirnames, Filenames in Tuple: @@ -149,5 +148,9 @@ class Section (SectionClassObject): FullName = os.path.join(Dirpath, F) FileList.append(FullName) + #Process the file lists is alphabetical for a same section type + if len (FileList) > 1: + FileList.sort() + return FileList, IsSect GetFileList = staticmethod(GetFileList) diff --git a/BaseTools/Source/Python/GenFds/__init__.py b/BaseTools/Source/Python/GenFds/__init__.py index e69de29bb2..1c5796affe 100644 --- a/BaseTools/Source/Python/GenFds/__init__.py +++ b/BaseTools/Source/Python/GenFds/__init__.py @@ -0,0 +1,15 @@ +## @file +# Python 'GenFds' package initialization file. +# +# This file is required to make Python interpreter treat the directory +# as containing package. +# +# Copyright (c) 2007 - 2010, Intel Corporation
    +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# diff --git a/BaseTools/Source/Python/GenPatchPcdTable/GenPatchPcdTable.py b/BaseTools/Source/Python/GenPatchPcdTable/GenPatchPcdTable.py new file mode 100644 index 0000000000..38398221dc --- /dev/null +++ b/BaseTools/Source/Python/GenPatchPcdTable/GenPatchPcdTable.py @@ -0,0 +1,189 @@ +## @file +# Generate PCD table for 'Patchable In Module' type PCD with given .map file. +# The Patch PCD table like: +# +# PCD Name Offset in binary +# ======== ================ +# +# Copyright (c) 2008 - 2010, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# + +#====================================== External Libraries ======================================== +import optparse +import os +import re +import array + +from Common.BuildToolError import * +import Common.EdkLogger as EdkLogger +from Common.Misc import PeImageClass + +# Version and Copyright +__version_number__ = "0.10" +__version__ = "%prog Version " + __version_number__ +__copyright__ = "Copyright (c) 2008 - 2010, Intel Corporation. All rights reserved." + +#====================================== Internal Libraries ======================================== + +#============================================== Code =============================================== +secRe = re.compile('^([\da-fA-F]+):([\da-fA-F]+) +([\da-fA-F]+)[Hh]? +([.\w\$]+) +(\w+)', re.UNICODE) +symRe = re.compile('^([\da-fA-F]+):([\da-fA-F]+) +([\.:\\\\\w\?@\$]+) +([\da-fA-F]+)', re.UNICODE) + +def parsePcdInfoFromMapFile(mapfilepath, efifilepath): + """ Parse map file to get binary patch pcd information + @param path Map file absolution path + + @return a list which element hold (PcdName, Offset, SectionName) + """ + lines = [] + try: + f = open(mapfilepath, 'r') + lines = f.readlines() + f.close() + except: + return None + + if len(lines) == 0: return None + if lines[0].strip().find("Archive member included because of file (symbol)") != -1: + return _parseForGCC(lines) + return _parseGeneral(lines, efifilepath) + +def _parseForGCC(lines): + """ Parse map file generated by GCC linker """ + status = 0 + imageBase = -1 + lastSectionName = None + pcds = [] + for line in lines: + line = line.strip() + # status machine transection + if status == 0 and line == "Linker script and memory map": + status = 1 + continue + elif status == 1 and line == 'START GROUP': + status = 2 + continue + + # status handler: + if status == 1: + m = re.match('^[\da-fA-FxhH]+ +__image_base__ += +([\da-fA-FhxH]+)', line) + if m != None: + imageBase = int(m.groups(0)[0], 16) + if status == 2: + m = re.match('^([\w_\.]+) +([\da-fA-Fx]+) +([\da-fA-Fx]+)', line) + if m != None: + lastSectionName = m.groups(0)[0] + if status == 2: + m = re.match("^([\da-fA-Fx]+) +[_]+gPcd_BinaryPatch_([\w_\d]+)", line) + if m != None: + assert imageBase != -1, "Fail to get Binary PCD offsest for unknown image base address" + pcds.append((m.groups(0)[1], int(m.groups(0)[0], 16) - imageBase, lastSectionName)) + return pcds + +def _parseGeneral(lines, efifilepath): + """ For MSFT, ICC, EBC + @param lines line array for map file + + @return a list which element hold (PcdName, Offset, SectionName) + """ + status = 0 #0 - beginning of file; 1 - PE section definition; 2 - symbol table + secs = [] # key = section name + bPcds = [] + + + for line in lines: + line = line.strip() + if re.match("^Start[' ']+Length[' ']+Name[' ']+Class", line): + status = 1 + continue + if re.match("^Address[' ']+Publics by Value[' ']+Rva\+Base", line): + status = 2 + continue + if re.match("^entry point at", line): + status = 3 + continue + if status == 1 and len(line) != 0: + m = secRe.match(line) + assert m != None, "Fail to parse the section in map file , line is %s" % line + sec_no, sec_start, sec_length, sec_name, sec_class = m.groups(0) + secs.append([int(sec_no, 16), int(sec_start, 16), int(sec_length, 16), sec_name, sec_class]) + if status == 2 and len(line) != 0: + m = symRe.match(line) + assert m != None, "Fail to parse the symbol in map file, line is %s" % line + sec_no, sym_offset, sym_name, vir_addr = m.groups(0) + sec_no = int(sec_no, 16) + sym_offset = int(sym_offset, 16) + vir_addr = int(vir_addr, 16) + m2 = re.match('^[_]+gPcd_BinaryPatch_([\w]+)', sym_name) + if m2 != None: + # fond a binary pcd entry in map file + for sec in secs: + if sec[0] == sec_no and (sym_offset >= sec[1] and sym_offset < sec[1] + sec[2]): + bPcds.append([m2.groups(0)[0], sec[3], sym_offset, vir_addr, sec_no]) + + if len(bPcds) == 0: return None + + # get section information from efi file + efisecs = PeImageClass(efifilepath).SectionHeaderList + if efisecs == None or len(efisecs) == 0: + return None + + pcds = [] + for pcd in bPcds: + index = 0 + for efisec in efisecs: + index = index + 1 + if pcd[1].strip() == efisec[0].strip(): + pcds.append([pcd[0], efisec[2] + pcd[2], efisec[0]]) + elif pcd[4] == index: + pcds.append([pcd[0], efisec[2] + pcd[2], efisec[0]]) + return pcds + +def generatePcdTable(list, pcdpath): + try: + f = open(pcdpath, 'w') + except: + pass + + f.write('PCD Name Offset Section Name\r\n') + + for pcditem in list: + f.write('%-30s 0x%-08X %-6s\r\n' % (pcditem[0], pcditem[1], pcditem[2])) + f.close() + + #print 'Success to generate Binary Patch PCD table at %s!' % pcdpath + +if __name__ == '__main__': + UsageString = "%prog -m -e -o " + AdditionalNotes = "\nPCD table is generated in file name with .BinaryPcdTable.txt postfix" + parser = optparse.OptionParser(description=__copyright__, version=__version__, usage=UsageString) + parser.add_option('-m', '--mapfile', action='store', dest='mapfile', + help='Absolute path of module map file.') + parser.add_option('-e', '--efifile', action='store', dest='efifile', + help='Absolute path of EFI binary file.') + parser.add_option('-o', '--outputfile', action='store', dest='outfile', + help='Absolute path of output file to store the got patchable PCD table.') + + (options, args) = parser.parse_args() + + if options.mapfile == None or options.efifile == None: + print parser.get_usage() + elif os.path.exists(options.mapfile) and os.path.exists(options.efifile): + list = parsePcdInfoFromMapFile(options.mapfile, options.efifile) + if list != None: + if options.outfile != None: + generatePcdTable(list, options.outfile) + else: + generatePcdTable(list, options.mapfile.replace('.map', '.BinaryPcdTable.txt')) + else: + print 'Fail to generate Patch PCD Table based on map file and efi file' + else: + print 'Fail to generate Patch PCD Table for fail to find map file or efi file!' diff --git a/BaseTools/Source/Python/GenPatchPcdTable/__init__.py b/BaseTools/Source/Python/GenPatchPcdTable/__init__.py new file mode 100644 index 0000000000..d6a199f7d5 --- /dev/null +++ b/BaseTools/Source/Python/GenPatchPcdTable/__init__.py @@ -0,0 +1,15 @@ +## @file +# Python 'GenPatchPcdTable' package initialization file. +# +# This file is required to make Python interpreter treat the directory +# as containing package. +# +# Copyright (c) 2010, Intel Corporation
    +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# diff --git a/BaseTools/Source/Python/Makefile b/BaseTools/Source/Python/Makefile index a4e76592ab..dd2780f840 100644 --- a/BaseTools/Source/Python/Makefile +++ b/BaseTools/Source/Python/Makefile @@ -10,7 +10,7 @@ MODULES=encodings.cp437,encodings.gbk,encodings.utf_16,encodings.utf_8,encodings BIN_DIR=$(EDK_TOOLS_PATH)\Bin\Win32 -APPLICATIONS=$(BIN_DIR)\build.exe $(BIN_DIR)\GenFds.exe $(BIN_DIR)\Trim.exe $(BIN_DIR)\MigrationMsa2Inf.exe $(BIN_DIR)\Fpd2Dsc.exe $(BIN_DIR)\TargetTool.exe $(BIN_DIR)\spd2dec.exe $(BIN_DIR)\GenDepex.exe +APPLICATIONS=$(BIN_DIR)\build.exe $(BIN_DIR)\GenFds.exe $(BIN_DIR)\Trim.exe $(BIN_DIR)\MigrationMsa2Inf.exe $(BIN_DIR)\Fpd2Dsc.exe $(BIN_DIR)\TargetTool.exe $(BIN_DIR)\spd2dec.exe $(BIN_DIR)\GenDepex.exe $(BIN_DIR)\GenPatchPcdTable.exe $(BIN_DIR)\PatchPcdValue.exe COMMON_PYTHON=$(BASE_TOOLS_PATH)\Source\Python\Common\BuildToolError.py \ $(BASE_TOOLS_PATH)\Source\Python\Common\Database.py \ @@ -82,6 +82,12 @@ $(BIN_DIR)\GenDepex.exe: $(BASE_TOOLS_PATH)\Source\Python\AutoGen\GenDepex.py $( $(BIN_DIR)\TargetTool.exe: $(BASE_TOOLS_PATH)\Source\Python\TargetTool\TargetTool.py $(COMMON_PYTHON) @pushd . & @cd TargetTool & @$(FREEZE) --include-modules=$(MODULES) --install-dir=$(BIN_DIR) TargetTool.py & @popd +$(BIN_DIR)\GenPatchPcdTable.exe: $(BASE_TOOLS_PATH)\Source\Python\GenPatchPcdTable\GenPatchPcdTable.py $(COMMON_PYTHON) + @pushd . & @cd GenPatchPcdTable & @$(FREEZE) --include-modules=$(MODULES) --install-dir=$(BIN_DIR) GenPatchPcdTable.py & @popd + +$(BIN_DIR)\PatchPcdValue.exe: $(BASE_TOOLS_PATH)\Source\Python\PatchPcdValue\PatchPcdValue.py $(COMMON_PYTHON) + @pushd . & @cd PatchPcdValue & @$(FREEZE) --include-modules=$(MODULES) --install-dir=$(BIN_DIR) PatchPcdValue.py & @popd + clean: cleanall: @del /f /q $(BIN_DIR)\*.pyd $(BIN_DIR)\*.dll diff --git a/BaseTools/Source/Python/MigrationMsa2Inf/MigrationMsa2Inf.py b/BaseTools/Source/Python/MigrationMsa2Inf/MigrationMsa2Inf.py index 01de21239c..09245344a1 100644 --- a/BaseTools/Source/Python/MigrationMsa2Inf/MigrationMsa2Inf.py +++ b/BaseTools/Source/Python/MigrationMsa2Inf/MigrationMsa2Inf.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # # -# Copyright (c) 2007, Intel Corporation +# Copyright (c) 2007 - 2010, Intel Corporation # All rights reserved. This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License # which accompanies this distribution. The full text of the license may be found at @@ -21,7 +21,7 @@ from Common.EdkIIWorkspace import * versionNumber = "0.9" __version__ = "%prog Version " + versionNumber -__copyright__ = "Copyright (c) 2007, Intel Corporation All rights reserved." +__copyright__ = "Copyright (c) 2007 - 2010, Intel Corporation All rights reserved." commonHeaderFilename = "CommonHeader.h" entryPointFilename = "EntryPoint.c" diff --git a/BaseTools/Source/Python/MigrationMsa2Inf/__init__.py b/BaseTools/Source/Python/MigrationMsa2Inf/__init__.py index e69de29bb2..6eb8a1e573 100644 --- a/BaseTools/Source/Python/MigrationMsa2Inf/__init__.py +++ b/BaseTools/Source/Python/MigrationMsa2Inf/__init__.py @@ -0,0 +1,15 @@ +## @file +# Python 'MigrationMsa2Inf' package initialization file. +# +# This file is required to make Python interpreter treat the directory +# as containing package. +# +# Copyright (c) 2007 - 2010, Intel Corporation
    +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# diff --git a/BaseTools/Source/Python/MkBOM/__init__.py b/BaseTools/Source/Python/MkBOM/__init__.py index e69de29bb2..6b2e9b2857 100644 --- a/BaseTools/Source/Python/MkBOM/__init__.py +++ b/BaseTools/Source/Python/MkBOM/__init__.py @@ -0,0 +1,15 @@ +## @file +# Python 'MkBOM' package initialization file. +# +# This file is required to make Python interpreter treat the directory +# as containing package. +# +# Copyright (c) 2007 - 2010, Intel Corporation
    +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# diff --git a/BaseTools/Source/Python/PackagingTool/InstallPkg.py b/BaseTools/Source/Python/PackagingTool/InstallPkg.py index 963a654ea1..ebf9077840 100644 --- a/BaseTools/Source/Python/PackagingTool/InstallPkg.py +++ b/BaseTools/Source/Python/PackagingTool/InstallPkg.py @@ -288,7 +288,7 @@ def Main(): "\nInstallPkg", CODE_ERROR, "Unknown fatal error when installing [%s]" % Options.PackageFile, - ExtraData="\n(Please send email to dev@buildtools.tianocore.org for help, attaching following call stack trace!)\n", + ExtraData="\n(Please send email to edk2-buildtools-devel@lists.sourceforge.net for help, attaching following call stack trace!)\n", RaiseError=False ) EdkLogger.quiet("(Python %s on %s) " % (platform.python_version(), sys.platform) + traceback.format_exc()) diff --git a/BaseTools/Source/Python/PackagingTool/MkPkg.py b/BaseTools/Source/Python/PackagingTool/MkPkg.py index 660f48f05f..ec2136811d 100644 --- a/BaseTools/Source/Python/PackagingTool/MkPkg.py +++ b/BaseTools/Source/Python/PackagingTool/MkPkg.py @@ -281,7 +281,7 @@ def Main(): "\nMkPkg", CODE_ERROR, "Unknown fatal error when creating [%s]" % Options.DistributionFile, - ExtraData="\n(Please send email to dev@buildtools.tianocore.org for help, attaching following call stack trace!)\n", + ExtraData="\n(Please send email to edk2-buildtools-devel@lists.sourceforge.net for help, attaching following call stack trace!)\n", RaiseError=False ) EdkLogger.quiet("(Python %s on %s) " % (platform.python_version(), sys.platform) + traceback.format_exc()) diff --git a/BaseTools/Source/Python/PackagingTool/RmPkg.py b/BaseTools/Source/Python/PackagingTool/RmPkg.py index e7eedd0776..ffe34bd924 100644 --- a/BaseTools/Source/Python/PackagingTool/RmPkg.py +++ b/BaseTools/Source/Python/PackagingTool/RmPkg.py @@ -206,7 +206,7 @@ def Main(): "\nRmPkg", CODE_ERROR, "Unknown fatal error when removing package", - ExtraData="\n(Please send email to dev@buildtools.tianocore.org for help, attaching following call stack trace!)\n", + ExtraData="\n(Please send email to edk2-buildtools-devel@lists.sourceforge.net for help, attaching following call stack trace!)\n", RaiseError=False ) EdkLogger.quiet("(Python %s on %s) " % (platform.python_version(), sys.platform) + traceback.format_exc()) diff --git a/BaseTools/Source/Python/PatchPcdValue/PatchPcdValue.py b/BaseTools/Source/Python/PatchPcdValue/PatchPcdValue.py new file mode 100644 index 0000000000..9a9f1d0468 --- /dev/null +++ b/BaseTools/Source/Python/PatchPcdValue/PatchPcdValue.py @@ -0,0 +1,287 @@ +## @file +# Patch value into the binary file. +# +# Copyright (c) 2010, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# + +## +# Import Modules +# +import os +import sys +import re + +from optparse import OptionParser +from optparse import make_option +from Common.BuildToolError import * +import Common.EdkLogger as EdkLogger +import array + +# Version and Copyright +__version_number__ = "0.10" +__version__ = "%prog Version " + __version_number__ +__copyright__ = "Copyright (c) 2010, Intel Corporation. All rights reserved." + +## PatchBinaryFile method +# +# This method mainly patches the data into binary file. +# +# @param FileName File path of the binary file +# @param ValueOffset Offset value +# @param TypeName DataType Name +# @param Value Value String +# @param MaxSize MaxSize value +# +# @retval 0 File is updated successfully. +# @retval not 0 File is updated failed. +# +def PatchBinaryFile(FileName, ValueOffset, TypeName, ValueString, MaxSize=0): + # + # Length of Binary File + # + FileHandle = open (FileName, 'rb') + FileHandle.seek (0, 2) + FileLength = FileHandle.tell() + FileHandle.close() + # + # Unify string to upper string + # + TypeName = TypeName.upper() + # + # Get PCD value data length + # + ValueLength = 0 + if TypeName == 'BOOLEAN': + ValueLength = 1 + elif TypeName == 'UINT8': + ValueLength = 1 + elif TypeName == 'UINT16': + ValueLength = 2 + elif TypeName == 'UINT32': + ValueLength = 4 + elif TypeName == 'UINT64': + ValueLength = 8 + elif TypeName == 'VOID*': + if MaxSize == 0: + return OPTION_MISSING, "PcdMaxSize is not specified for VOID* type PCD." + ValueLength = MaxSize + else: + return PARAMETER_INVALID, "PCD type %s is not valid." %(CommandOptions.PcdTypeName) + # + # Check PcdValue is in the input binary file. + # + if ValueOffset + ValueLength > FileLength: + return PARAMETER_INVALID, "PcdOffset + PcdMaxSize(DataType) is larger than the input file size." + # + # Read binary file into array + # + FileHandle = open (FileName, 'rb') + ByteArray = array.array('B') + ByteArray.fromfile(FileHandle, FileLength) + FileHandle.close() + OrigByteList = ByteArray.tolist() + ByteList = ByteArray.tolist() + # + # Clear the data in file + # + for Index in range(ValueLength): + ByteList[ValueOffset + Index] = 0 + # + # Patch value into offset + # + ValueString = ValueString.upper() + ValueNumber = 0 + if TypeName == 'BOOLEAN': + # + # Get PCD value for BOOLEAN data type + # + try: + if ValueString == 'TRUE': + ValueNumber = 1 + elif ValueString == 'FALSE': + ValueNumber = 0 + elif ValueString.startswith('0X'): + ValueNumber = int (Value, 16) + else: + ValueNumber = int (Value) + if ValueNumber != 0: + ValueNumber = 1 + except: + return PARAMETER_INVALID, "PCD Value %s is not valid dec or hex string." %(ValueString) + # + # Set PCD value into binary data + # + ByteList[ValueOffset] = ValueNumber + elif TypeName in ['UINT8', 'UINT16', 'UINT32', 'UINT64']: + # + # Get PCD value for UINT* data type + # + try: + if ValueString.startswith('0X'): + ValueNumber = int (ValueString, 16) + else: + ValueNumber = int (ValueString) + except: + return PARAMETER_INVALID, "PCD Value %s is not valid dec or hex string." %(ValueString) + # + # Set PCD value into binary data + # + for Index in range(ValueLength): + ByteList[ValueOffset + Index] = ValueNumber % 0x100 + ValueNumber = ValueNumber / 0x100 + elif TypeName == 'VOID*': + if ValueString.startswith("L "): + # + # Patch Unicode String + # + Index = 0 + for ByteString in ValueString[2:]: + # + # Reserve zero as unicode tail + # + if Index + 2 >= ValueLength: + break + # + # Set string value one by one + # + ByteList[ValueOffset + Index] = ord(ByteString) + Index = Index + 2 + elif ValueString.startswith("{") and ValueString.endswith("}"): + # + # Patch {0x1, 0x2, ...} byte by byte + # + ValueList = ValueString[1 : len(ValueString) - 1].split(', ') + Index = 0 + try: + for ByteString in ValueList: + if ByteString.upper().startswith('0X'): + ByteValue = int(ByteString, 16) + else: + ByteValue = int(ByteString) + ByteList[ValueOffset + Index] = ByteValue % 0x100 + Index = Index + 1 + if Index >= ValueLength: + break + except: + return PARAMETER_INVALID, "PCD Value %s is not valid dec or hex string array." %(ValueString) + else: + # + # Patch ascii string + # + Index = 0 + for ByteString in ValueString: + # + # Reserve zero as string tail + # + if Index + 1 >= ValueLength: + break + # + # Set string value one by one + # + ByteList[ValueOffset + Index] = ord(ByteString) + Index = Index + 1 + # + # Update new data into input file. + # + if ByteList != OrigByteList: + ByteArray = array.array('B') + ByteArray.fromlist(ByteList) + FileHandle = open (FileName, 'wb') + ByteArray.tofile(FileHandle) + FileHandle.close() + return 0, "Patch Value into File %s successfully." %(FileName) + +## Parse command line options +# +# Using standard Python module optparse to parse command line option of this tool. +# +# @retval Options A optparse.Values object containing the parsed options +# @retval InputFile Path of file to be trimmed +# +def Options(): + OptionList = [ + make_option("-f", "--offset", dest="PcdOffset", action="store", type="int", + help="Start offset to the image is used to store PCD value."), + make_option("-u", "--value", dest="PcdValue", action="store", + help="PCD value will be updated into the image."), + make_option("-t", "--type", dest="PcdTypeName", action="store", + help="The name of PCD data type may be one of VOID*,BOOLEAN, UINT8, UINT16, UINT32, UINT64."), + make_option("-s", "--maxsize", dest="PcdMaxSize", action="store", type="int", + help="Max size of data buffer is taken by PCD value.It must be set when PCD type is VOID*."), + make_option("-v", "--verbose", dest="LogLevel", action="store_const", const=EdkLogger.VERBOSE, + help="Run verbosely"), + make_option("-d", "--debug", dest="LogLevel", type="int", + help="Run with debug information"), + make_option("-q", "--quiet", dest="LogLevel", action="store_const", const=EdkLogger.QUIET, + help="Run quietly"), + make_option("-?", action="help", help="show this help message and exit"), + ] + + # use clearer usage to override default usage message + UsageString = "%prog -f Offset -u Value -t Type [-s MaxSize] " + + Parser = OptionParser(description=__copyright__, version=__version__, option_list=OptionList, usage=UsageString) + Parser.set_defaults(LogLevel=EdkLogger.INFO) + + Options, Args = Parser.parse_args() + + # error check + if len(Args) == 0: + EdkLogger.error("PatchPcdValue", PARAMETER_INVALID, ExtraData=Parser.get_usage()) + + InputFile = Args[len(Args) - 1] + return Options, InputFile + +## Entrance method +# +# This method mainly dispatch specific methods per the command line options. +# If no error found, return zero value so the caller of this tool can know +# if it's executed successfully or not. +# +# @retval 0 Tool was successful +# @retval 1 Tool failed +# +def Main(): + try: + # + # Check input parameter + # + EdkLogger.Initialize() + CommandOptions, InputFile = Options() + if CommandOptions.LogLevel < EdkLogger.DEBUG_9: + EdkLogger.SetLevel(CommandOptions.LogLevel + 1) + else: + EdkLogger.SetLevel(CommandOptions.LogLevel) + if not os.path.exists (InputFile): + EdkLogger.error("PatchPcdValue", FILE_NOT_FOUND, ExtraData=InputFile) + return 1 + if CommandOptions.PcdOffset == None or CommandOptions.PcdValue == None or CommandOptions.PcdTypeName == None: + EdkLogger.error("PatchPcdValue", OPTION_MISSING, ExtraData="PcdOffset or PcdValue of PcdTypeName is not specified.") + return 1 + if CommandOptions.PcdTypeName.upper() not in ["BOOLEAN", "UINT8", "UINT16", "UINT32", "UINT64", "VOID*"]: + EdkLogger.error("PatchPcdValue", PARAMETER_INVALID, ExtraData="PCD type %s is not valid." %(CommandOptions.PcdTypeName)) + return 1 + if CommandOptions.PcdTypeName.upper() == "VOID*" and CommandOptions.PcdMaxSize == None: + EdkLogger.error("PatchPcdValue", OPTION_MISSING, ExtraData="PcdMaxSize is not specified for VOID* type PCD.") + return 1 + # + # Patch value into binary image. + # + ReturnValue, ErrorInfo = PatchBinaryFile (InputFile, CommandOptions.PcdOffset, CommandOptions.PcdTypeName, CommandOptions.PcdValue, CommandOptions.PcdMaxSize) + if ReturnValue != 0: + EdkLogger.error("PatchPcdValue", ReturnValue, ExtraData=ErrorInfo) + return 1 + return 0 + except: + return 1 + +if __name__ == '__main__': + r = Main() + sys.exit(r) diff --git a/BaseTools/Source/Python/PatchPcdValue/__init__.py b/BaseTools/Source/Python/PatchPcdValue/__init__.py new file mode 100644 index 0000000000..7ec3e7e672 --- /dev/null +++ b/BaseTools/Source/Python/PatchPcdValue/__init__.py @@ -0,0 +1,15 @@ +## @file +# Python 'PatchPcdValue' package initialization file. +# +# This file is required to make Python interpreter treat the directory +# as containing package. +# +# Copyright (c) 2010, Intel Corporation
    +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# diff --git a/BaseTools/Source/Python/Table/TableEotReport.py b/BaseTools/Source/Python/Table/TableEotReport.py index cdae3b2e39..2d98129e4f 100644 --- a/BaseTools/Source/Python/Table/TableEotReport.py +++ b/BaseTools/Source/Python/Table/TableEotReport.py @@ -18,8 +18,8 @@ import Common.EdkLogger as EdkLogger import os, time from Table import Table from Common.String import ConvertToSqlString2 -import EotToolError as EotToolError -import EotGlobalData as EotGlobalData +import Eot.EotToolError as EotToolError +import Eot.EotGlobalData as EotGlobalData ## TableReport # diff --git a/BaseTools/Source/Python/Table/TableQuery.py b/BaseTools/Source/Python/Table/TableQuery.py index 9a9a66ccb6..4ad9dc5e55 100644 --- a/BaseTools/Source/Python/Table/TableQuery.py +++ b/BaseTools/Source/Python/Table/TableQuery.py @@ -21,7 +21,7 @@ from Table import Table ## TableQuery # # This class defined a table used for Query -# +# # @param object: Inherited from object class # # @@ -29,19 +29,21 @@ class TableQuery(Table): def __init__(self, Cursor): Table.__init__(self, Cursor) self.Table = 'Query' - + ## Create table # # Create table Query # # @param ID: ID of a Query - # @param Name: Modifier of a Query + # @param Name: Name of a Query + # @param Modifer: Modifier of a Query # @param Value: Type of a Query # @param Model: Model of a Query # def Create(self): SqlCommand = """create table IF NOT EXISTS %s(ID INTEGER PRIMARY KEY, Name TEXT DEFAULT '', + Modifier TEXT DEFAULT '', Value TEXT DEFAULT '', Model INTEGER DEFAULT 0 )""" % self.Table @@ -52,15 +54,15 @@ class TableQuery(Table): # Insert a record into table Query # # @param ID: ID of a Query - # @param Name: Modifier of a Query - # @param Value: Type of a Query + # @param Name: Name of a Query + # @param Modifier: Modifier of a Query + # @param Value: Value of a Query # @param Model: Model of a Query # - def Insert(self, Name, Value, Model): + def Insert(self, Name, Modifier, Value, Model): self.ID = self.ID + 1 - SqlCommand = """insert into %s values(%s, '%s', '%s', %s)""" \ - % (self.Table, self.ID, Name, Value, Model) + SqlCommand = """insert into %s values(%s, '%s', '%s', '%s', %s)""" \ + % (self.Table, self.ID, Name, Modifier, Value, Model) Table.Insert(self, SqlCommand) return self.ID - \ No newline at end of file diff --git a/BaseTools/Source/Python/Table/TableReport.py b/BaseTools/Source/Python/Table/TableReport.py index 042c1b7e9e..777a479156 100644 --- a/BaseTools/Source/Python/Table/TableReport.py +++ b/BaseTools/Source/Python/Table/TableReport.py @@ -1,7 +1,7 @@ ## @file # This file is used to create/update/query/erase table for ECC reports # -# Copyright (c) 2008, Intel Corporation +# Copyright (c) 2008 - 2010, Intel Corporation # All rights reserved. This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License # which accompanies this distribution. The full text of the license may be found at @@ -114,7 +114,8 @@ class TableReport(Table): NewRecord = self.Exec(SqlCommand) if NewRecord != []: File.write("""%s,%s,"%s",%s,%s,"%s"\n""" % (Index, ErrorID, EccToolError.gEccErrorMessage[ErrorID], NewRecord[0][1], NewRecord[0][0], OtherMsg)) - + EdkLogger.quiet("%s(%s): [%s]%s %s" % (NewRecord[0][1], NewRecord[0][0], ErrorID, EccToolError.gEccErrorMessage[ErrorID], OtherMsg)) + File.close() except IOError: NewFilename = 'Report_' + time.strftime("%Y%m%d_%H%M%S.csv", time.localtime()) diff --git a/BaseTools/Source/Python/Table/__init__.py b/BaseTools/Source/Python/Table/__init__.py index e69de29bb2..ea0b26743f 100644 --- a/BaseTools/Source/Python/Table/__init__.py +++ b/BaseTools/Source/Python/Table/__init__.py @@ -0,0 +1,15 @@ +## @file +# Python 'Table' package initialization file. +# +# This file is required to make Python interpreter treat the directory +# as containing package. +# +# Copyright (c) 2008 - 2010, Intel Corporation
    +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# diff --git a/BaseTools/Source/Python/TargetTool/TargetTool.py b/BaseTools/Source/Python/TargetTool/TargetTool.py index 69cac95d4f..df3ed2f6bb 100644 --- a/BaseTools/Source/Python/TargetTool/TargetTool.py +++ b/BaseTools/Source/Python/TargetTool/TargetTool.py @@ -1,5 +1,5 @@ # -# Copyright (c) 2007, Intel Corporation +# Copyright (c) 2007 - 2010, Intel Corporation # # All rights reserved. This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License @@ -175,7 +175,7 @@ def GetConfigureKeyValue(self, Key): VersionNumber = "0.01" __version__ = "%prog Version " + VersionNumber -__copyright__ = "Copyright (c) 2007, Intel Corporation All rights reserved." +__copyright__ = "Copyright (c) 2007 - 2010, Intel Corporation All rights reserved." __usage__ = "%prog [options] {args} \ \nArgs: \ \n Clean clean the all default configuration of target.txt. \ diff --git a/BaseTools/Source/Python/TargetTool/__init__.py b/BaseTools/Source/Python/TargetTool/__init__.py index e69de29bb2..cbc78a7322 100644 --- a/BaseTools/Source/Python/TargetTool/__init__.py +++ b/BaseTools/Source/Python/TargetTool/__init__.py @@ -0,0 +1,15 @@ +## @file +# Python 'TargetTool' package initialization file. +# +# This file is required to make Python interpreter treat the directory +# as containing package. +# +# Copyright (c) 2007 - 2010, Intel Corporation
    +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# diff --git a/BaseTools/Source/Python/Trim/Trim.py b/BaseTools/Source/Python/Trim/Trim.py index a55c136edb..dbfa84a5da 100644 --- a/BaseTools/Source/Python/Trim/Trim.py +++ b/BaseTools/Source/Python/Trim/Trim.py @@ -1,7 +1,7 @@ ## @file # Trim files preprocessed by compiler # -# Copyright (c) 2007, Intel Corporation +# Copyright (c) 2007 - 2010, Intel Corporation # All rights reserved. This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License # which accompanies this distribution. The full text of the license may be found at @@ -28,7 +28,7 @@ import Common.EdkLogger as EdkLogger # Version and Copyright __version_number__ = "0.10" __version__ = "%prog Version " + __version_number__ -__copyright__ = "Copyright (c) 2007-2008, Intel Corporation. All rights reserved." +__copyright__ = "Copyright (c) 2007-2010, Intel Corporation. All rights reserved." ## Regular expression for matching Line Control directive like "#line xxx" gLineControlDirective = re.compile('^\s*#(?:line)?\s+([0-9]+)\s+"*([^"]*)"') @@ -81,6 +81,21 @@ gImportCodePatterns = [ '#include ' ], + [ + re.compile('#include\s+EFI_GUID_DEFINITION\s*\(FirmwareFileSystem\)', re.MULTILINE), + '#include EFI_GUID_DEFINITION (FirmwareFileSystem)\n#include EFI_GUID_DEFINITION (FirmwareFileSystem2)' + ], + + [ + re.compile('gEfiFirmwareFileSystemGuid', re.MULTILINE), + 'gEfiFirmwareFileSystem2Guid' + ], + + [ + re.compile('EFI_FVH_REVISION', re.MULTILINE), + 'EFI_FVH_PI_REVISION' + ], + [ re.compile("(\s*)\S*CreateEvent\s*\([\s\n]*EFI_EVENT_SIGNAL_READY_TO_BOOT[^,]*,((?:[^;]+\n)+)(\s*\));", re.MULTILINE), '\\1EfiCreateEventReadyToBoot (\\2\\3;' @@ -504,7 +519,7 @@ def Main(): "\nTrim", CODE_ERROR, "Unknown fatal error when trimming [%s]" % InputFile, - ExtraData="\n(Please send email to dev@buildtools.tianocore.org for help, attaching following call stack trace!)\n", + ExtraData="\n(Please send email to edk2-buildtools-devel@lists.sourceforge.net for help, attaching following call stack trace!)\n", RaiseError=False ) EdkLogger.quiet("(Python %s on %s) " % (platform.python_version(), sys.platform) + traceback.format_exc()) diff --git a/BaseTools/Source/Python/Workspace/WorkspaceDatabase.py b/BaseTools/Source/Python/Workspace/WorkspaceDatabase.py index 11b649658e..5b20c4091c 100644 --- a/BaseTools/Source/Python/Workspace/WorkspaceDatabase.py +++ b/BaseTools/Source/Python/Workspace/WorkspaceDatabase.py @@ -1,2353 +1,2375 @@ -## @file -# This file is used to create a database used by build tool -# -# Copyright (c) 2008 - 2009, Intel Corporation -# All rights reserved. This program and the accompanying materials -# are licensed and made available under the terms and conditions of the BSD License -# which accompanies this distribution. The full text of the license may be found at -# http://opensource.org/licenses/bsd-license.php -# -# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. -# - -## -# Import Modules -# -import sqlite3 -import os -import os.path -import pickle - -import Common.EdkLogger as EdkLogger -import Common.GlobalData as GlobalData - -from Common.String import * -from Common.DataType import * -from Common.Misc import * -from types import * - -from CommonDataClass.CommonClass import SkuInfoClass - -from MetaDataTable import * -from MetaFileTable import * -from MetaFileParser import * -from BuildClassObject import * - -## Platform build information from DSC file -# -# This class is used to retrieve information stored in database and convert them -# into PlatformBuildClassObject form for easier use for AutoGen. -# -class DscBuildData(PlatformBuildClassObject): - # dict used to convert PCD type in database to string used by build tool - _PCD_TYPE_STRING_ = { - MODEL_PCD_FIXED_AT_BUILD : "FixedAtBuild", - MODEL_PCD_PATCHABLE_IN_MODULE : "PatchableInModule", - MODEL_PCD_FEATURE_FLAG : "FeatureFlag", - MODEL_PCD_DYNAMIC : "Dynamic", - MODEL_PCD_DYNAMIC_DEFAULT : "Dynamic", - MODEL_PCD_DYNAMIC_HII : "DynamicHii", - MODEL_PCD_DYNAMIC_VPD : "DynamicVpd", - MODEL_PCD_DYNAMIC_EX : "DynamicEx", - MODEL_PCD_DYNAMIC_EX_DEFAULT : "DynamicEx", - MODEL_PCD_DYNAMIC_EX_HII : "DynamicExHii", - MODEL_PCD_DYNAMIC_EX_VPD : "DynamicExVpd", - } - - # dict used to convert part of [Defines] to members of DscBuildData directly - _PROPERTY_ = { - # - # Required Fields - # - TAB_DSC_DEFINES_PLATFORM_NAME : "_PlatformName", - TAB_DSC_DEFINES_PLATFORM_GUID : "_Guid", - TAB_DSC_DEFINES_PLATFORM_VERSION : "_Version", - TAB_DSC_DEFINES_DSC_SPECIFICATION : "_DscSpecification", - #TAB_DSC_DEFINES_OUTPUT_DIRECTORY : "_OutputDirectory", - #TAB_DSC_DEFINES_SUPPORTED_ARCHITECTURES : "_SupArchList", - #TAB_DSC_DEFINES_BUILD_TARGETS : "_BuildTargets", - #TAB_DSC_DEFINES_SKUID_IDENTIFIER : "_SkuName", - #TAB_DSC_DEFINES_FLASH_DEFINITION : "_FlashDefinition", - TAB_DSC_DEFINES_BUILD_NUMBER : "_BuildNumber", - TAB_DSC_DEFINES_MAKEFILE_NAME : "_MakefileName", - TAB_DSC_DEFINES_BS_BASE_ADDRESS : "_BsBaseAddress", - TAB_DSC_DEFINES_RT_BASE_ADDRESS : "_RtBaseAddress", - } - - # used to compose dummy library class name for those forced library instances - _NullLibraryNumber = 0 - - ## Constructor of DscBuildData - # - # Initialize object of DscBuildData - # - # @param FilePath The path of platform description file - # @param RawData The raw data of DSC file - # @param BuildDataBase Database used to retrieve module/package information - # @param Arch The target architecture - # @param Platform (not used for DscBuildData) - # @param Macros Macros used for replacement in DSC file - # - def __init__(self, FilePath, RawData, BuildDataBase, Arch='COMMON', Platform='DUMMY', Macros={}): - self.MetaFile = FilePath - self._RawData = RawData - self._Bdb = BuildDataBase - self._Arch = Arch - self._Macros = Macros - self._Clear() - RecordList = self._RawData[MODEL_META_DATA_DEFINE, self._Arch] - for Record in RecordList: - GlobalData.gEdkGlobal[Record[0]] = Record[1] - - ## XXX[key] = value - def __setitem__(self, key, value): - self.__dict__[self._PROPERTY_[key]] = value - - ## value = XXX[key] - def __getitem__(self, key): - return self.__dict__[self._PROPERTY_[key]] - - ## "in" test support - def __contains__(self, key): - return key in self._PROPERTY_ - - ## Set all internal used members of DscBuildData to None - def _Clear(self): - self._Header = None - self._PlatformName = None - self._Guid = None - self._Version = None - self._DscSpecification = None - self._OutputDirectory = None - self._SupArchList = None - self._BuildTargets = None - self._SkuName = None - self._FlashDefinition = None - self._BuildNumber = None - self._MakefileName = None - self._BsBaseAddress = None - self._RtBaseAddress = None - self._SkuIds = None - self._Modules = None - self._LibraryInstances = None - self._LibraryClasses = None - self._Pcds = None - self._BuildOptions = None - - ## Get architecture - def _GetArch(self): - return self._Arch - - ## Set architecture - # - # Changing the default ARCH to another may affect all other information - # because all information in a platform may be ARCH-related. That's - # why we need to clear all internal used members, in order to cause all - # information to be re-retrieved. - # - # @param Value The value of ARCH - # - def _SetArch(self, Value): - if self._Arch == Value: - return - self._Arch = Value - self._Clear() - - ## Retrieve all information in [Defines] section - # - # (Retriving all [Defines] information in one-shot is just to save time.) - # - def _GetHeaderInfo(self): - RecordList = self._RawData[MODEL_META_DATA_HEADER, self._Arch] - for Record in RecordList: - Name = Record[0] - # items defined _PROPERTY_ don't need additional processing - if Name in self: - self[Name] = Record[1] - # some special items in [Defines] section need special treatment - elif Name == TAB_DSC_DEFINES_OUTPUT_DIRECTORY: - self._OutputDirectory = NormPath(Record[1], self._Macros) - if ' ' in self._OutputDirectory: - EdkLogger.error("build", FORMAT_NOT_SUPPORTED, "No space is allowed in OUTPUT_DIRECTORY", - File=self.MetaFile, Line=Record[-1], - ExtraData=self._OutputDirectory) - elif Name == TAB_DSC_DEFINES_FLASH_DEFINITION: - self._FlashDefinition = PathClass(NormPath(Record[1], self._Macros), GlobalData.gWorkspace) - ErrorCode, ErrorInfo = self._FlashDefinition.Validate('.fdf') - if ErrorCode != 0: - EdkLogger.error('build', ErrorCode, File=self.MetaFile, Line=Record[-1], - ExtraData=ErrorInfo) - elif Name == TAB_DSC_DEFINES_SUPPORTED_ARCHITECTURES: - self._SupArchList = GetSplitValueList(Record[1], TAB_VALUE_SPLIT) - elif Name == TAB_DSC_DEFINES_BUILD_TARGETS: - self._BuildTargets = GetSplitValueList(Record[1]) - elif Name == TAB_DSC_DEFINES_SKUID_IDENTIFIER: - if self._SkuName == None: - self._SkuName = Record[1] - # set _Header to non-None in order to avoid database re-querying - self._Header = 'DUMMY' - - ## Retrieve platform name - def _GetPlatformName(self): - if self._PlatformName == None: - if self._Header == None: - self._GetHeaderInfo() - if self._PlatformName == None: - EdkLogger.error('build', ATTRIBUTE_NOT_AVAILABLE, "No PLATFORM_NAME", File=self.MetaFile) - return self._PlatformName - - ## Retrieve file guid - def _GetFileGuid(self): - if self._Guid == None: - if self._Header == None: - self._GetHeaderInfo() - if self._Guid == None: - EdkLogger.error('build', ATTRIBUTE_NOT_AVAILABLE, "No FILE_GUID", File=self.MetaFile) - return self._Guid - - ## Retrieve platform version - def _GetVersion(self): - if self._Version == None: - if self._Header == None: - self._GetHeaderInfo() - if self._Version == None: - self._Version = '' - return self._Version - - ## Retrieve platform description file version - def _GetDscSpec(self): - if self._DscSpecification == None: - if self._Header == None: - self._GetHeaderInfo() - if self._DscSpecification == None: - self._DscSpecification = '' - return self._DscSpecification - - ## Retrieve OUTPUT_DIRECTORY - def _GetOutpuDir(self): - if self._OutputDirectory == None: - if self._Header == None: - self._GetHeaderInfo() - if self._OutputDirectory == None: - self._OutputDirectory = os.path.join("Build", self._PlatformName) - return self._OutputDirectory - - ## Retrieve SUPPORTED_ARCHITECTURES - def _GetSupArch(self): - if self._SupArchList == None: - if self._Header == None: - self._GetHeaderInfo() - if self._SupArchList == None: - self._SupArchList = ARCH_LIST - return self._SupArchList - - ## Retrieve BUILD_TARGETS - def _GetBuildTarget(self): - if self._BuildTargets == None: - if self._Header == None: - self._GetHeaderInfo() - if self._BuildTargets == None: - self._BuildTargets = ['DEBUG', 'RELEASE'] - return self._BuildTargets - - ## Retrieve SKUID_IDENTIFIER - def _GetSkuName(self): - if self._SkuName == None: - if self._Header == None: - self._GetHeaderInfo() - if self._SkuName == None or self._SkuName not in self.SkuIds: - self._SkuName = 'DEFAULT' - return self._SkuName - - ## Override SKUID_IDENTIFIER - def _SetSkuName(self, Value): - if Value in self.SkuIds: - self._SkuName = Value - - def _GetFdfFile(self): - if self._FlashDefinition == None: - if self._Header == None: - self._GetHeaderInfo() - if self._FlashDefinition == None: - self._FlashDefinition = '' - return self._FlashDefinition - - ## Retrieve FLASH_DEFINITION - def _GetBuildNumber(self): - if self._BuildNumber == None: - if self._Header == None: - self._GetHeaderInfo() - if self._BuildNumber == None: - self._BuildNumber = '' - return self._BuildNumber - - ## Retrieve MAKEFILE_NAME - def _GetMakefileName(self): - if self._MakefileName == None: - if self._Header == None: - self._GetHeaderInfo() - if self._MakefileName == None: - self._MakefileName = '' - return self._MakefileName - - ## Retrieve BsBaseAddress - def _GetBsBaseAddress(self): - if self._BsBaseAddress == None: - if self._Header == None: - self._GetHeaderInfo() - if self._BsBaseAddress == None: - self._BsBaseAddress = '' - return self._BsBaseAddress - - ## Retrieve RtBaseAddress - def _GetRtBaseAddress(self): - if self._RtBaseAddress == None: - if self._Header == None: - self._GetHeaderInfo() - if self._RtBaseAddress == None: - self._RtBaseAddress = '' - return self._RtBaseAddress - - ## Retrieve [SkuIds] section information - def _GetSkuIds(self): - if self._SkuIds == None: - self._SkuIds = {} - RecordList = self._RawData[MODEL_EFI_SKU_ID] - for Record in RecordList: - if Record[0] in [None, '']: - EdkLogger.error('build', FORMAT_INVALID, 'No Sku ID number', - File=self.MetaFile, Line=Record[-1]) - if Record[1] in [None, '']: - EdkLogger.error('build', FORMAT_INVALID, 'No Sku ID name', - File=self.MetaFile, Line=Record[-1]) - self._SkuIds[Record[1]] = Record[0] - if 'DEFAULT' not in self._SkuIds: - self._SkuIds['DEFAULT'] = 0 - return self._SkuIds - - ## Retrieve [Components] section information - def _GetModules(self): - if self._Modules != None: - return self._Modules - - self._Modules = sdict() - RecordList = self._RawData[MODEL_META_DATA_COMPONENT, self._Arch] - Macros = {"EDK_SOURCE":GlobalData.gEcpSource, "EFI_SOURCE":GlobalData.gEfiSource} - Macros.update(self._Macros) - for Record in RecordList: - ModuleFile = PathClass(NormPath(Record[0], Macros), GlobalData.gWorkspace, Arch=self._Arch) - ModuleId = Record[5] - LineNo = Record[6] - - # check the file validation - ErrorCode, ErrorInfo = ModuleFile.Validate('.inf') - if ErrorCode != 0: - EdkLogger.error('build', ErrorCode, File=self.MetaFile, Line=LineNo, - ExtraData=ErrorInfo) - # Check duplication - if ModuleFile in self._Modules: - EdkLogger.error('build', FILE_DUPLICATED, File=self.MetaFile, ExtraData=str(ModuleFile), Line=LineNo) - - Module = ModuleBuildClassObject() - Module.MetaFile = ModuleFile - - # get module override path - RecordList = self._RawData[MODEL_META_DATA_COMPONENT_SOURCE_OVERRIDE_PATH, self._Arch, None, ModuleId] - if RecordList != []: - Module.SourceOverridePath = os.path.join(GlobalData.gWorkspace, NormPath(RecordList[0][0], Macros)) - - # Check if the source override path exists - if not os.path.isdir(Module.SourceOverridePath): - EdkLogger.error('build', FILE_NOT_FOUND, Message = 'Source override path does not exist:', File=self.MetaFile, ExtraData=Module.SourceOverridePath, Line=LineNo) - - #Add to GlobalData Variables - GlobalData.gOverrideDir[ModuleFile.Key] = Module.SourceOverridePath - - # get module private library instance - RecordList = self._RawData[MODEL_EFI_LIBRARY_CLASS, self._Arch, None, ModuleId] - for Record in RecordList: - LibraryClass = Record[0] - LibraryPath = PathClass(NormPath(Record[1], Macros), GlobalData.gWorkspace, Arch=self._Arch) - LineNo = Record[-1] - - # check the file validation - ErrorCode, ErrorInfo = LibraryPath.Validate('.inf') - if ErrorCode != 0: - EdkLogger.error('build', ErrorCode, File=self.MetaFile, Line=LineNo, - ExtraData=ErrorInfo) - - if LibraryClass == '' or LibraryClass == 'NULL': - self._NullLibraryNumber += 1 - LibraryClass = 'NULL%d' % self._NullLibraryNumber - EdkLogger.verbose("Found forced library for %s\n\t%s [%s]" % (ModuleFile, LibraryPath, LibraryClass)) - Module.LibraryClasses[LibraryClass] = LibraryPath - if LibraryPath not in self.LibraryInstances: - self.LibraryInstances.append(LibraryPath) - - # get module private PCD setting - for Type in [MODEL_PCD_FIXED_AT_BUILD, MODEL_PCD_PATCHABLE_IN_MODULE, \ - MODEL_PCD_FEATURE_FLAG, MODEL_PCD_DYNAMIC, MODEL_PCD_DYNAMIC_EX]: - RecordList = self._RawData[Type, self._Arch, None, ModuleId] - for TokenSpaceGuid, PcdCName, Setting, Dummy1, Dummy2, Dummy3, Dummy4 in RecordList: - TokenList = GetSplitValueList(Setting) - DefaultValue = TokenList[0] - if len(TokenList) > 1: - MaxDatumSize = TokenList[1] - else: - MaxDatumSize = '' - TypeString = self._PCD_TYPE_STRING_[Type] - Pcd = PcdClassObject( - PcdCName, - TokenSpaceGuid, - TypeString, - '', - DefaultValue, - '', - MaxDatumSize, - {}, - None - ) - Module.Pcds[PcdCName, TokenSpaceGuid] = Pcd - - # get module private build options - RecordList = self._RawData[MODEL_META_DATA_BUILD_OPTION, self._Arch, None, ModuleId] - for ToolChainFamily, ToolChain, Option, Dummy1, Dummy2, Dummy3, Dummy4 in RecordList: - if (ToolChainFamily, ToolChain) not in Module.BuildOptions: - Module.BuildOptions[ToolChainFamily, ToolChain] = Option - else: - OptionString = Module.BuildOptions[ToolChainFamily, ToolChain] - Module.BuildOptions[ToolChainFamily, ToolChain] = OptionString + " " + Option - - self._Modules[ModuleFile] = Module - return self._Modules - - ## Retrieve all possible library instances used in this platform - def _GetLibraryInstances(self): - if self._LibraryInstances == None: - self._GetLibraryClasses() - return self._LibraryInstances - - ## Retrieve [LibraryClasses] information - def _GetLibraryClasses(self): - if self._LibraryClasses == None: - self._LibraryInstances = [] - # - # tdict is a special dict kind of type, used for selecting correct - # library instance for given library class and module type - # - LibraryClassDict = tdict(True, 3) - # track all library class names - LibraryClassSet = set() - RecordList = self._RawData[MODEL_EFI_LIBRARY_CLASS, self._Arch] - Macros = {"EDK_SOURCE":GlobalData.gEcpSource, "EFI_SOURCE":GlobalData.gEfiSource} - Macros.update(self._Macros) - for Record in RecordList: - LibraryClass, LibraryInstance, Dummy, Arch, ModuleType, Dummy, LineNo = Record - if LibraryClass == '' or LibraryClass == 'NULL': - self._NullLibraryNumber += 1 - LibraryClass = 'NULL%d' % self._NullLibraryNumber - EdkLogger.verbose("Found forced library for arch=%s\n\t%s [%s]" % (Arch, LibraryInstance, LibraryClass)) - LibraryClassSet.add(LibraryClass) - LibraryInstance = PathClass(NormPath(LibraryInstance, Macros), GlobalData.gWorkspace, Arch=self._Arch) - # check the file validation - ErrorCode, ErrorInfo = LibraryInstance.Validate('.inf') - if ErrorCode != 0: - EdkLogger.error('build', ErrorCode, File=self.MetaFile, Line=LineNo, - ExtraData=ErrorInfo) - - if ModuleType != 'COMMON' and ModuleType not in SUP_MODULE_LIST: - EdkLogger.error('build', OPTION_UNKNOWN, "Unknown module type [%s]" % ModuleType, - File=self.MetaFile, ExtraData=LibraryInstance, Line=LineNo) - LibraryClassDict[Arch, ModuleType, LibraryClass] = LibraryInstance - if LibraryInstance not in self._LibraryInstances: - self._LibraryInstances.append(LibraryInstance) - - # resolve the specific library instance for each class and each module type - self._LibraryClasses = tdict(True) - for LibraryClass in LibraryClassSet: - # try all possible module types - for ModuleType in SUP_MODULE_LIST: - LibraryInstance = LibraryClassDict[self._Arch, ModuleType, LibraryClass] - if LibraryInstance == None: - continue - self._LibraryClasses[LibraryClass, ModuleType] = LibraryInstance - - # for R8 style library instances, which are listed in different section - RecordList = self._RawData[MODEL_EFI_LIBRARY_INSTANCE, self._Arch] - for Record in RecordList: - File = PathClass(NormPath(Record[0], Macros), GlobalData.gWorkspace, Arch=self._Arch) - LineNo = Record[-1] - # check the file validation - ErrorCode, ErrorInfo = File.Validate('.inf') - if ErrorCode != 0: - EdkLogger.error('build', ErrorCode, File=self.MetaFile, Line=LineNo, - ExtraData=ErrorInfo) - if File not in self._LibraryInstances: - self._LibraryInstances.append(File) - # - # we need the module name as the library class name, so we have - # to parse it here. (self._Bdb[] will trigger a file parse if it - # hasn't been parsed) - # - Library = self._Bdb[File, self._Arch] - self._LibraryClasses[Library.BaseName, ':dummy:'] = Library - return self._LibraryClasses - - ## Retrieve all PCD settings in platform - def _GetPcds(self): - if self._Pcds == None: - self._Pcds = {} - self._Pcds.update(self._GetPcd(MODEL_PCD_FIXED_AT_BUILD)) - self._Pcds.update(self._GetPcd(MODEL_PCD_PATCHABLE_IN_MODULE)) - self._Pcds.update(self._GetPcd(MODEL_PCD_FEATURE_FLAG)) - self._Pcds.update(self._GetDynamicPcd(MODEL_PCD_DYNAMIC_DEFAULT)) - self._Pcds.update(self._GetDynamicHiiPcd(MODEL_PCD_DYNAMIC_HII)) - self._Pcds.update(self._GetDynamicVpdPcd(MODEL_PCD_DYNAMIC_VPD)) - self._Pcds.update(self._GetDynamicPcd(MODEL_PCD_DYNAMIC_EX_DEFAULT)) - self._Pcds.update(self._GetDynamicHiiPcd(MODEL_PCD_DYNAMIC_EX_HII)) - self._Pcds.update(self._GetDynamicVpdPcd(MODEL_PCD_DYNAMIC_EX_VPD)) - return self._Pcds - - ## Retrieve [BuildOptions] - def _GetBuildOptions(self): - if self._BuildOptions == None: - self._BuildOptions = {} - RecordList = self._RawData[MODEL_META_DATA_BUILD_OPTION] - for ToolChainFamily, ToolChain, Option, Dummy1, Dummy2, Dummy3, Dummy4 in RecordList: - self._BuildOptions[ToolChainFamily, ToolChain] = Option - return self._BuildOptions - - ## Retrieve non-dynamic PCD settings - # - # @param Type PCD type - # - # @retval a dict object contains settings of given PCD type - # - def _GetPcd(self, Type): - Pcds = {} - # - # tdict is a special dict kind of type, used for selecting correct - # PCD settings for certain ARCH - # - PcdDict = tdict(True, 3) - PcdSet = set() - # Find out all possible PCD candidates for self._Arch - RecordList = self._RawData[Type, self._Arch] - for TokenSpaceGuid, PcdCName, Setting, Arch, SkuName, Dummy3, Dummy4 in RecordList: - PcdSet.add((PcdCName, TokenSpaceGuid)) - PcdDict[Arch, PcdCName, TokenSpaceGuid] = Setting - # Remove redundant PCD candidates - for PcdCName, TokenSpaceGuid in PcdSet: - ValueList = ['', '', ''] - Setting = PcdDict[self._Arch, PcdCName, TokenSpaceGuid] - if Setting == None: - continue - TokenList = Setting.split(TAB_VALUE_SPLIT) - ValueList[0:len(TokenList)] = TokenList - PcdValue, DatumType, MaxDatumSize = ValueList - Pcds[PcdCName, TokenSpaceGuid] = PcdClassObject( - PcdCName, - TokenSpaceGuid, - self._PCD_TYPE_STRING_[Type], - DatumType, - PcdValue, - '', - MaxDatumSize, - {}, - None - ) - return Pcds - - ## Retrieve dynamic PCD settings - # - # @param Type PCD type - # - # @retval a dict object contains settings of given PCD type - # - def _GetDynamicPcd(self, Type): - Pcds = {} - # - # tdict is a special dict kind of type, used for selecting correct - # PCD settings for certain ARCH and SKU - # - PcdDict = tdict(True, 4) - PcdSet = set() - # Find out all possible PCD candidates for self._Arch - RecordList = self._RawData[Type, self._Arch] - for TokenSpaceGuid, PcdCName, Setting, Arch, SkuName, Dummy3, Dummy4 in RecordList: - PcdSet.add((PcdCName, TokenSpaceGuid)) - PcdDict[Arch, SkuName, PcdCName, TokenSpaceGuid] = Setting - # Remove redundant PCD candidates, per the ARCH and SKU - for PcdCName, TokenSpaceGuid in PcdSet: - ValueList = ['', '', ''] - Setting = PcdDict[self._Arch, self.SkuName, PcdCName, TokenSpaceGuid] - if Setting == None: - continue - TokenList = Setting.split(TAB_VALUE_SPLIT) - ValueList[0:len(TokenList)] = TokenList - PcdValue, DatumType, MaxDatumSize = ValueList - - SkuInfo = SkuInfoClass(self.SkuName, self.SkuIds[self.SkuName], '', '', '', '', '', PcdValue) - Pcds[PcdCName, TokenSpaceGuid] = PcdClassObject( - PcdCName, - TokenSpaceGuid, - self._PCD_TYPE_STRING_[Type], - DatumType, - PcdValue, - '', - MaxDatumSize, - {self.SkuName : SkuInfo}, - None - ) - return Pcds - - ## Retrieve dynamic HII PCD settings - # - # @param Type PCD type - # - # @retval a dict object contains settings of given PCD type - # - def _GetDynamicHiiPcd(self, Type): - Pcds = {} - # - # tdict is a special dict kind of type, used for selecting correct - # PCD settings for certain ARCH and SKU - # - PcdDict = tdict(True, 4) - PcdSet = set() - RecordList = self._RawData[Type, self._Arch] - # Find out all possible PCD candidates for self._Arch - for TokenSpaceGuid, PcdCName, Setting, Arch, SkuName, Dummy3, Dummy4 in RecordList: - PcdSet.add((PcdCName, TokenSpaceGuid)) - PcdDict[Arch, SkuName, PcdCName, TokenSpaceGuid] = Setting - # Remove redundant PCD candidates, per the ARCH and SKU - for PcdCName, TokenSpaceGuid in PcdSet: - ValueList = ['', '', '', ''] - Setting = PcdDict[self._Arch, self.SkuName, PcdCName, TokenSpaceGuid] - if Setting == None: - continue - TokenList = Setting.split(TAB_VALUE_SPLIT) - ValueList[0:len(TokenList)] = TokenList - VariableName, VariableGuid, VariableOffset, DefaultValue = ValueList - SkuInfo = SkuInfoClass(self.SkuName, self.SkuIds[self.SkuName], VariableName, VariableGuid, VariableOffset, DefaultValue) - Pcds[PcdCName, TokenSpaceGuid] = PcdClassObject( - PcdCName, - TokenSpaceGuid, - self._PCD_TYPE_STRING_[Type], - '', - DefaultValue, - '', - '', - {self.SkuName : SkuInfo}, - None - ) - return Pcds - - ## Retrieve dynamic VPD PCD settings - # - # @param Type PCD type - # - # @retval a dict object contains settings of given PCD type - # - def _GetDynamicVpdPcd(self, Type): - Pcds = {} - # - # tdict is a special dict kind of type, used for selecting correct - # PCD settings for certain ARCH and SKU - # - PcdDict = tdict(True, 4) - PcdSet = set() - # Find out all possible PCD candidates for self._Arch - RecordList = self._RawData[Type, self._Arch] - for TokenSpaceGuid, PcdCName, Setting, Arch, SkuName, Dummy3, Dummy4 in RecordList: - PcdSet.add((PcdCName, TokenSpaceGuid)) - PcdDict[Arch, SkuName, PcdCName, TokenSpaceGuid] = Setting - # Remove redundant PCD candidates, per the ARCH and SKU - for PcdCName, TokenSpaceGuid in PcdSet: - ValueList = ['', ''] - Setting = PcdDict[self._Arch, self.SkuName, PcdCName, TokenSpaceGuid] - if Setting == None: - continue - TokenList = Setting.split(TAB_VALUE_SPLIT) - ValueList[0:len(TokenList)] = TokenList - VpdOffset, MaxDatumSize = ValueList - - SkuInfo = SkuInfoClass(self.SkuName, self.SkuIds[self.SkuName], '', '', '', '', VpdOffset) - Pcds[PcdCName, TokenSpaceGuid] = PcdClassObject( - PcdCName, - TokenSpaceGuid, - self._PCD_TYPE_STRING_[Type], - '', - '', - '', - MaxDatumSize, - {self.SkuName : SkuInfo}, - None - ) - return Pcds - - ## Add external modules - # - # The external modules are mostly those listed in FDF file, which don't - # need "build". - # - # @param FilePath The path of module description file - # - def AddModule(self, FilePath): - FilePath = NormPath(FilePath) - if FilePath not in self.Modules: - Module = ModuleBuildClassObject() - Module.MetaFile = FilePath - self.Modules.append(Module) - - ## Add external PCDs - # - # The external PCDs are mostly those listed in FDF file to specify address - # or offset information. - # - # @param Name Name of the PCD - # @param Guid Token space guid of the PCD - # @param Value Value of the PCD - # - def AddPcd(self, Name, Guid, Value): - if (Name, Guid) not in self.Pcds: - self.Pcds[Name, Guid] = PcdClassObject(Name, Guid, '', '', '', '', '', {}, None) - self.Pcds[Name, Guid].DefaultValue = Value - - Arch = property(_GetArch, _SetArch) - Platform = property(_GetPlatformName) - PlatformName = property(_GetPlatformName) - Guid = property(_GetFileGuid) - Version = property(_GetVersion) - DscSpecification = property(_GetDscSpec) - OutputDirectory = property(_GetOutpuDir) - SupArchList = property(_GetSupArch) - BuildTargets = property(_GetBuildTarget) - SkuName = property(_GetSkuName, _SetSkuName) - FlashDefinition = property(_GetFdfFile) - BuildNumber = property(_GetBuildNumber) - MakefileName = property(_GetMakefileName) - BsBaseAddress = property(_GetBsBaseAddress) - RtBaseAddress = property(_GetRtBaseAddress) - - SkuIds = property(_GetSkuIds) - Modules = property(_GetModules) - LibraryInstances = property(_GetLibraryInstances) - LibraryClasses = property(_GetLibraryClasses) - Pcds = property(_GetPcds) - BuildOptions = property(_GetBuildOptions) - -## Platform build information from DSC file -# -# This class is used to retrieve information stored in database and convert them -# into PackageBuildClassObject form for easier use for AutoGen. -# -class DecBuildData(PackageBuildClassObject): - # dict used to convert PCD type in database to string used by build tool - _PCD_TYPE_STRING_ = { - MODEL_PCD_FIXED_AT_BUILD : "FixedAtBuild", - MODEL_PCD_PATCHABLE_IN_MODULE : "PatchableInModule", - MODEL_PCD_FEATURE_FLAG : "FeatureFlag", - MODEL_PCD_DYNAMIC : "Dynamic", - MODEL_PCD_DYNAMIC_DEFAULT : "Dynamic", - MODEL_PCD_DYNAMIC_HII : "DynamicHii", - MODEL_PCD_DYNAMIC_VPD : "DynamicVpd", - MODEL_PCD_DYNAMIC_EX : "DynamicEx", - MODEL_PCD_DYNAMIC_EX_DEFAULT : "DynamicEx", - MODEL_PCD_DYNAMIC_EX_HII : "DynamicExHii", - MODEL_PCD_DYNAMIC_EX_VPD : "DynamicExVpd", - } - - # dict used to convert part of [Defines] to members of DecBuildData directly - _PROPERTY_ = { - # - # Required Fields - # - TAB_DEC_DEFINES_PACKAGE_NAME : "_PackageName", - TAB_DEC_DEFINES_PACKAGE_GUID : "_Guid", - TAB_DEC_DEFINES_PACKAGE_VERSION : "_Version", - } - - - ## Constructor of DecBuildData - # - # Initialize object of DecBuildData - # - # @param FilePath The path of package description file - # @param RawData The raw data of DEC file - # @param BuildDataBase Database used to retrieve module information - # @param Arch The target architecture - # @param Platform (not used for DecBuildData) - # @param Macros Macros used for replacement in DSC file - # - def __init__(self, File, RawData, BuildDataBase, Arch='COMMON', Platform='DUMMY', Macros={}): - self.MetaFile = File - self._PackageDir = File.Dir - self._RawData = RawData - self._Bdb = BuildDataBase - self._Arch = Arch - self._Macros = Macros - self._Clear() - - ## XXX[key] = value - def __setitem__(self, key, value): - self.__dict__[self._PROPERTY_[key]] = value - - ## value = XXX[key] - def __getitem__(self, key): - return self.__dict__[self._PROPERTY_[key]] - - ## "in" test support - def __contains__(self, key): - return key in self._PROPERTY_ - - ## Set all internal used members of DecBuildData to None - def _Clear(self): - self._Header = None - self._PackageName = None - self._Guid = None - self._Version = None - self._Protocols = None - self._Ppis = None - self._Guids = None - self._Includes = None - self._LibraryClasses = None - self._Pcds = None - - ## Get architecture - def _GetArch(self): - return self._Arch - - ## Set architecture - # - # Changing the default ARCH to another may affect all other information - # because all information in a platform may be ARCH-related. That's - # why we need to clear all internal used members, in order to cause all - # information to be re-retrieved. - # - # @param Value The value of ARCH - # - def _SetArch(self, Value): - if self._Arch == Value: - return - self._Arch = Value - self._Clear() - - ## Retrieve all information in [Defines] section - # - # (Retriving all [Defines] information in one-shot is just to save time.) - # - def _GetHeaderInfo(self): - RecordList = self._RawData[MODEL_META_DATA_HEADER] - for Record in RecordList: - Name = Record[0] - if Name in self: - self[Name] = Record[1] - self._Header = 'DUMMY' - - ## Retrieve package name - def _GetPackageName(self): - if self._PackageName == None: - if self._Header == None: - self._GetHeaderInfo() - if self._PackageName == None: - EdkLogger.error("build", ATTRIBUTE_NOT_AVAILABLE, "No PACKAGE_NAME", File=self.MetaFile) - return self._PackageName - - ## Retrieve file guid - def _GetFileGuid(self): - if self._Guid == None: - if self._Header == None: - self._GetHeaderInfo() - if self._Guid == None: - EdkLogger.error("build", ATTRIBUTE_NOT_AVAILABLE, "No PACKAGE_GUID", File=self.MetaFile) - return self._Guid - - ## Retrieve package version - def _GetVersion(self): - if self._Version == None: - if self._Header == None: - self._GetHeaderInfo() - if self._Version == None: - self._Version = '' - return self._Version - - ## Retrieve protocol definitions (name/value pairs) - def _GetProtocol(self): - if self._Protocols == None: - # - # tdict is a special kind of dict, used for selecting correct - # protocol defition for given ARCH - # - ProtocolDict = tdict(True) - NameList = [] - # find out all protocol definitions for specific and 'common' arch - RecordList = self._RawData[MODEL_EFI_PROTOCOL, self._Arch] - for Name, Guid, Dummy, Arch, ID, LineNo in RecordList: - if Name not in NameList: - NameList.append(Name) - ProtocolDict[Arch, Name] = Guid - # use sdict to keep the order - self._Protocols = sdict() - for Name in NameList: - # - # limit the ARCH to self._Arch, if no self._Arch found, tdict - # will automatically turn to 'common' ARCH for trying - # - self._Protocols[Name] = ProtocolDict[self._Arch, Name] - return self._Protocols - - ## Retrieve PPI definitions (name/value pairs) - def _GetPpi(self): - if self._Ppis == None: - # - # tdict is a special kind of dict, used for selecting correct - # PPI defition for given ARCH - # - PpiDict = tdict(True) - NameList = [] - # find out all PPI definitions for specific arch and 'common' arch - RecordList = self._RawData[MODEL_EFI_PPI, self._Arch] - for Name, Guid, Dummy, Arch, ID, LineNo in RecordList: - if Name not in NameList: - NameList.append(Name) - PpiDict[Arch, Name] = Guid - # use sdict to keep the order - self._Ppis = sdict() - for Name in NameList: - # - # limit the ARCH to self._Arch, if no self._Arch found, tdict - # will automatically turn to 'common' ARCH for trying - # - self._Ppis[Name] = PpiDict[self._Arch, Name] - return self._Ppis - - ## Retrieve GUID definitions (name/value pairs) - def _GetGuid(self): - if self._Guids == None: - # - # tdict is a special kind of dict, used for selecting correct - # GUID defition for given ARCH - # - GuidDict = tdict(True) - NameList = [] - # find out all protocol definitions for specific and 'common' arch - RecordList = self._RawData[MODEL_EFI_GUID, self._Arch] - for Name, Guid, Dummy, Arch, ID, LineNo in RecordList: - if Name not in NameList: - NameList.append(Name) - GuidDict[Arch, Name] = Guid - # use sdict to keep the order - self._Guids = sdict() - for Name in NameList: - # - # limit the ARCH to self._Arch, if no self._Arch found, tdict - # will automatically turn to 'common' ARCH for trying - # - self._Guids[Name] = GuidDict[self._Arch, Name] - return self._Guids - - ## Retrieve public include paths declared in this package - def _GetInclude(self): - if self._Includes == None: - self._Includes = [] - RecordList = self._RawData[MODEL_EFI_INCLUDE, self._Arch] - Macros = {"EDK_SOURCE":GlobalData.gEcpSource, "EFI_SOURCE":GlobalData.gEfiSource} - Macros.update(self._Macros) - for Record in RecordList: - File = PathClass(NormPath(Record[0], Macros), self._PackageDir, Arch=self._Arch) - LineNo = Record[-1] - # validate the path - ErrorCode, ErrorInfo = File.Validate() - if ErrorCode != 0: - EdkLogger.error('build', ErrorCode, ExtraData=ErrorInfo, File=self.MetaFile, Line=LineNo) - - # avoid duplicate include path - if File not in self._Includes: - self._Includes.append(File) - return self._Includes - - ## Retrieve library class declarations (not used in build at present) - def _GetLibraryClass(self): - if self._LibraryClasses == None: - # - # tdict is a special kind of dict, used for selecting correct - # library class declaration for given ARCH - # - LibraryClassDict = tdict(True) - LibraryClassSet = set() - RecordList = self._RawData[MODEL_EFI_LIBRARY_CLASS, self._Arch] - Macros = {"EDK_SOURCE":GlobalData.gEcpSource, "EFI_SOURCE":GlobalData.gEfiSource} - Macros.update(self._Macros) - for LibraryClass, File, Dummy, Arch, ID, LineNo in RecordList: - File = PathClass(NormPath(File, Macros), self._PackageDir, Arch=self._Arch) - # check the file validation - ErrorCode, ErrorInfo = File.Validate() - if ErrorCode != 0: - EdkLogger.error('build', ErrorCode, ExtraData=ErrorInfo, File=self.MetaFile, Line=LineNo) - LibraryClassSet.add(LibraryClass) - LibraryClassDict[Arch, LibraryClass] = File - self._LibraryClasses = sdict() - for LibraryClass in LibraryClassSet: - self._LibraryClasses[LibraryClass] = LibraryClassDict[self._Arch, LibraryClass] - return self._LibraryClasses - - ## Retrieve PCD declarations - def _GetPcds(self): - if self._Pcds == None: - self._Pcds = {} - self._Pcds.update(self._GetPcd(MODEL_PCD_FIXED_AT_BUILD)) - self._Pcds.update(self._GetPcd(MODEL_PCD_PATCHABLE_IN_MODULE)) - self._Pcds.update(self._GetPcd(MODEL_PCD_FEATURE_FLAG)) - self._Pcds.update(self._GetPcd(MODEL_PCD_DYNAMIC)) - self._Pcds.update(self._GetPcd(MODEL_PCD_DYNAMIC_EX)) - return self._Pcds - - ## Retrieve PCD declarations for given type - def _GetPcd(self, Type): - Pcds = {} - # - # tdict is a special kind of dict, used for selecting correct - # PCD declaration for given ARCH - # - PcdDict = tdict(True, 3) - # for summarizing PCD - PcdSet = set() - # find out all PCDs of the 'type' - RecordList = self._RawData[Type, self._Arch] - for TokenSpaceGuid, PcdCName, Setting, Arch, Dummy1, Dummy2 in RecordList: - PcdDict[Arch, PcdCName, TokenSpaceGuid] = Setting - PcdSet.add((PcdCName, TokenSpaceGuid)) - - for PcdCName, TokenSpaceGuid in PcdSet: - ValueList = ['', '', ''] - # - # limit the ARCH to self._Arch, if no self._Arch found, tdict - # will automatically turn to 'common' ARCH and try again - # - Setting = PcdDict[self._Arch, PcdCName, TokenSpaceGuid] - if Setting == None: - continue - TokenList = Setting.split(TAB_VALUE_SPLIT) - ValueList[0:len(TokenList)] = TokenList - DefaultValue, DatumType, TokenNumber = ValueList - Pcds[PcdCName, TokenSpaceGuid, self._PCD_TYPE_STRING_[Type]] = PcdClassObject( - PcdCName, - TokenSpaceGuid, - self._PCD_TYPE_STRING_[Type], - DatumType, - DefaultValue, - TokenNumber, - '', - {}, - None - ) - return Pcds - - - Arch = property(_GetArch, _SetArch) - PackageName = property(_GetPackageName) - Guid = property(_GetFileGuid) - Version = property(_GetVersion) - - Protocols = property(_GetProtocol) - Ppis = property(_GetPpi) - Guids = property(_GetGuid) - Includes = property(_GetInclude) - LibraryClasses = property(_GetLibraryClass) - Pcds = property(_GetPcds) - -## Module build information from INF file -# -# This class is used to retrieve information stored in database and convert them -# into ModuleBuildClassObject form for easier use for AutoGen. -# -class InfBuildData(ModuleBuildClassObject): - # dict used to convert PCD type in database to string used by build tool - _PCD_TYPE_STRING_ = { - MODEL_PCD_FIXED_AT_BUILD : "FixedAtBuild", - MODEL_PCD_PATCHABLE_IN_MODULE : "PatchableInModule", - MODEL_PCD_FEATURE_FLAG : "FeatureFlag", - MODEL_PCD_DYNAMIC : "Dynamic", - MODEL_PCD_DYNAMIC_DEFAULT : "Dynamic", - MODEL_PCD_DYNAMIC_HII : "DynamicHii", - MODEL_PCD_DYNAMIC_VPD : "DynamicVpd", - MODEL_PCD_DYNAMIC_EX : "DynamicEx", - MODEL_PCD_DYNAMIC_EX_DEFAULT : "DynamicEx", - MODEL_PCD_DYNAMIC_EX_HII : "DynamicExHii", - MODEL_PCD_DYNAMIC_EX_VPD : "DynamicExVpd", - } - - # dict used to convert part of [Defines] to members of InfBuildData directly - _PROPERTY_ = { - # - # Required Fields - # - TAB_INF_DEFINES_BASE_NAME : "_BaseName", - TAB_INF_DEFINES_FILE_GUID : "_Guid", - TAB_INF_DEFINES_MODULE_TYPE : "_ModuleType", - # - # Optional Fields - # - TAB_INF_DEFINES_INF_VERSION : "_AutoGenVersion", - TAB_INF_DEFINES_COMPONENT_TYPE : "_ComponentType", - TAB_INF_DEFINES_MAKEFILE_NAME : "_MakefileName", - #TAB_INF_DEFINES_CUSTOM_MAKEFILE : "_CustomMakefile", - TAB_INF_DEFINES_VERSION_NUMBER : "_Version", - TAB_INF_DEFINES_VERSION_STRING : "_Version", - TAB_INF_DEFINES_VERSION : "_Version", - TAB_INF_DEFINES_PCD_IS_DRIVER : "_PcdIsDriver", - TAB_INF_DEFINES_SHADOW : "_Shadow", - - TAB_COMPONENTS_SOURCE_OVERRIDE_PATH : "_SourceOverridePath", - } - - # dict used to convert Component type to Module type - _MODULE_TYPE_ = { - "LIBRARY" : "BASE", - "SECURITY_CORE" : "SEC", - "PEI_CORE" : "PEI_CORE", - "COMBINED_PEIM_DRIVER" : "PEIM", - "PIC_PEIM" : "PEIM", - "RELOCATABLE_PEIM" : "PEIM", - "PE32_PEIM" : "PEIM", - "BS_DRIVER" : "DXE_DRIVER", - "RT_DRIVER" : "DXE_RUNTIME_DRIVER", - "SAL_RT_DRIVER" : "DXE_SAL_DRIVER", - "DXE_SMM_DRIVER" : "DXE_SMM_DRIVER", - # "SMM_DRIVER" : "DXE_SMM_DRIVER", - # "BS_DRIVER" : "DXE_SMM_DRIVER", - # "BS_DRIVER" : "UEFI_DRIVER", - "APPLICATION" : "UEFI_APPLICATION", - "LOGO" : "BASE", - } - - # regular expression for converting XXX_FLAGS in [nmake] section to new type - _NMAKE_FLAG_PATTERN_ = re.compile("(?:EBC_)?([A-Z]+)_(?:STD_|PROJ_|ARCH_)?FLAGS(?:_DLL|_ASL|_EXE)?", re.UNICODE) - # dict used to convert old tool name used in [nmake] section to new ones - _TOOL_CODE_ = { - "C" : "CC", - "LIB" : "SLINK", - "LINK" : "DLINK", - } - - - ## Constructor of DscBuildData - # - # Initialize object of DscBuildData - # - # @param FilePath The path of platform description file - # @param RawData The raw data of DSC file - # @param BuildDataBase Database used to retrieve module/package information - # @param Arch The target architecture - # @param Platform The name of platform employing this module - # @param Macros Macros used for replacement in DSC file - # - def __init__(self, FilePath, RawData, BuildDatabase, Arch='COMMON', Platform='COMMON', Macros={}): - self.MetaFile = FilePath - self._ModuleDir = FilePath.Dir - self._RawData = RawData - self._Bdb = BuildDatabase - self._Arch = Arch - self._Platform = 'COMMON' - self._Macros = Macros - self._SourceOverridePath = None - if FilePath.Key in GlobalData.gOverrideDir: - self._SourceOverridePath = GlobalData.gOverrideDir[FilePath.Key] - self._Clear() - - ## XXX[key] = value - def __setitem__(self, key, value): - self.__dict__[self._PROPERTY_[key]] = value - - ## value = XXX[key] - def __getitem__(self, key): - return self.__dict__[self._PROPERTY_[key]] - - ## "in" test support - def __contains__(self, key): - return key in self._PROPERTY_ - - ## Set all internal used members of InfBuildData to None - def _Clear(self): - self._Header_ = None - self._AutoGenVersion = None - self._BaseName = None - self._ModuleType = None - self._ComponentType = None - self._BuildType = None - self._Guid = None - self._Version = None - self._PcdIsDriver = None - self._BinaryModule = None - self._Shadow = None - self._MakefileName = None - self._CustomMakefile = None - self._Specification = None - self._LibraryClass = None - self._ModuleEntryPointList = None - self._ModuleUnloadImageList = None - self._ConstructorList = None - self._DestructorList = None - self._Defs = None - self._Binaries = None - self._Sources = None - self._LibraryClasses = None - self._Libraries = None - self._Protocols = None - self._Ppis = None - self._Guids = None - self._Includes = None - self._Packages = None - self._Pcds = None - self._BuildOptions = None - self._Depex = None - self._DepexExpression = None - #self._SourceOverridePath = None - - ## Get architecture - def _GetArch(self): - return self._Arch - - ## Set architecture - # - # Changing the default ARCH to another may affect all other information - # because all information in a platform may be ARCH-related. That's - # why we need to clear all internal used members, in order to cause all - # information to be re-retrieved. - # - # @param Value The value of ARCH - # - def _SetArch(self, Value): - if self._Arch == Value: - return - self._Arch = Value - self._Clear() - - ## Return the name of platform employing this module - def _GetPlatform(self): - return self._Platform - - ## Change the name of platform employing this module - # - # Changing the default name of platform to another may affect some information - # because they may be PLATFORM-related. That's why we need to clear all internal - # used members, in order to cause all information to be re-retrieved. - # - def _SetPlatform(self, Value): - if self._Platform == Value: - return - self._Platform = Value - self._Clear() - - ## Retrieve all information in [Defines] section - # - # (Retriving all [Defines] information in one-shot is just to save time.) - # - def _GetHeaderInfo(self): - RecordList = self._RawData[MODEL_META_DATA_HEADER, self._Arch, self._Platform] - for Record in RecordList: - Record = ReplaceMacros(Record, GlobalData.gEdkGlobal, False) - Name = Record[0] - # items defined _PROPERTY_ don't need additional processing - if Name in self: - self[Name] = Record[1] - # some special items in [Defines] section need special treatment - elif Name == 'EFI_SPECIFICATION_VERSION': - if self._Specification == None: - self._Specification = sdict() - self._Specification[Name] = Record[1] - elif Name == 'EDK_RELEASE_VERSION': - if self._Specification == None: - self._Specification = sdict() - self._Specification[Name] = Record[1] - elif Name == 'PI_SPECIFICATION_VERSION': - if self._Specification == None: - self._Specification = sdict() - self._Specification[Name] = Record[1] - elif Name == 'LIBRARY_CLASS': - if self._LibraryClass == None: - self._LibraryClass = [] - ValueList = GetSplitValueList(Record[1]) - LibraryClass = ValueList[0] - if len(ValueList) > 1: - SupModuleList = GetSplitValueList(ValueList[1], ' ') - else: - SupModuleList = SUP_MODULE_LIST - self._LibraryClass.append(LibraryClassObject(LibraryClass, SupModuleList)) - elif Name == 'ENTRY_POINT': - if self._ModuleEntryPointList == None: - self._ModuleEntryPointList = [] - self._ModuleEntryPointList.append(Record[1]) - elif Name == 'UNLOAD_IMAGE': - if self._ModuleUnloadImageList == None: - self._ModuleUnloadImageList = [] - if Record[1] == '': - continue - self._ModuleUnloadImageList.append(Record[1]) - elif Name == 'CONSTRUCTOR': - if self._ConstructorList == None: - self._ConstructorList = [] - if Record[1] == '': - continue - self._ConstructorList.append(Record[1]) - elif Name == 'DESTRUCTOR': - if self._DestructorList == None: - self._DestructorList = [] - if Record[1] == '': - continue - self._DestructorList.append(Record[1]) - elif Name == TAB_INF_DEFINES_CUSTOM_MAKEFILE: - TokenList = GetSplitValueList(Record[1]) - if self._CustomMakefile == None: - self._CustomMakefile = {} - if len(TokenList) < 2: - self._CustomMakefile['MSFT'] = TokenList[0] - self._CustomMakefile['GCC'] = TokenList[0] - else: - if TokenList[0] not in ['MSFT', 'GCC']: - EdkLogger.error("build", FORMAT_NOT_SUPPORTED, - "No supported family [%s]" % TokenList[0], - File=self.MetaFile, Line=Record[-1]) - self._CustomMakefile[TokenList[0]] = TokenList[1] - else: - if self._Defs == None: - self._Defs = sdict() - self._Defs[Name] = Record[1] - - # - # Retrieve information in sections specific to R8.x modules - # - if self._AutoGenVersion >= 0x00010005: # _AutoGenVersion may be None, which is less than anything - if not self._ModuleType: - EdkLogger.error("build", ATTRIBUTE_NOT_AVAILABLE, - "MODULE_TYPE is not given", File=self.MetaFile) - if (self._Specification == None) or (not 'PI_SPECIFICATION_VERSION' in self._Specification) or (self._Specification['PI_SPECIFICATION_VERSION'] < 0x0001000A): - if self._ModuleType == SUP_MODULE_SMM_CORE: - EdkLogger.error("build", FORMAT_NOT_SUPPORTED, "SMM_CORE module type can't be used in the module with PI_SPECIFICATION_VERSION less than 0x0001000A", File=self.MetaFile) - if self._Defs and 'PCI_DEVICE_ID' in self._Defs and 'PCI_VENDOR_ID' in self._Defs \ - and 'PCI_CLASS_CODE' in self._Defs: - self._BuildType = 'UEFI_OPTIONROM' - elif self._Defs and 'UEFI_HII_RESOURCE_SECTION' in self._Defs \ - and self._Defs['UEFI_HII_RESOURCE_SECTION'] == 'TRUE': - self._BuildType = 'UEFI_HII' - else: - self._BuildType = self._ModuleType.upper() - else: - self._BuildType = self._ComponentType.upper() - if not self._ComponentType: - EdkLogger.error("build", ATTRIBUTE_NOT_AVAILABLE, - "COMPONENT_TYPE is not given", File=self.MetaFile) - if self._ComponentType in self._MODULE_TYPE_: - self._ModuleType = self._MODULE_TYPE_[self._ComponentType] - if self._ComponentType == 'LIBRARY': - self._LibraryClass = [LibraryClassObject(self._BaseName, SUP_MODULE_LIST)] - # make use some [nmake] section macros - RecordList = self._RawData[MODEL_META_DATA_NMAKE, self._Arch, self._Platform] - for Name,Value,Dummy,Arch,Platform,ID,LineNo in RecordList: - Value = Value.replace('$(PROCESSOR)', self._Arch) - Name = Name.replace('$(PROCESSOR)', self._Arch) - Name, Value = ReplaceMacros((Name, Value), GlobalData.gEdkGlobal, True) - if Name == "IMAGE_ENTRY_POINT": - if self._ModuleEntryPointList == None: - self._ModuleEntryPointList = [] - self._ModuleEntryPointList.append(Value) - elif Name == "DPX_SOURCE": - Macros = {"EDK_SOURCE":GlobalData.gEcpSource, "EFI_SOURCE":GlobalData.gEfiSource} - Macros.update(self._Macros) - File = PathClass(NormPath(Value, Macros), self._ModuleDir, Arch=self._Arch) - # check the file validation - ErrorCode, ErrorInfo = File.Validate(".dxs", CaseSensitive=False) - if ErrorCode != 0: - EdkLogger.error('build', ErrorCode, ExtraData=ErrorInfo, - File=self.MetaFile, Line=LineNo) - if self.Sources == None: - self._Sources = [] - self._Sources.append(File) - else: - ToolList = self._NMAKE_FLAG_PATTERN_.findall(Name) - if len(ToolList) == 0 or len(ToolList) != 1: - pass -# EdkLogger.warn("build", "Don't know how to do with macro [%s]" % Name, -# File=self.MetaFile, Line=LineNo) - else: - if self._BuildOptions == None: - self._BuildOptions = sdict() - - if ToolList[0] in self._TOOL_CODE_: - Tool = self._TOOL_CODE_[ToolList[0]] - else: - Tool = ToolList[0] - ToolChain = "*_*_*_%s_FLAGS" % Tool - ToolChainFamily = 'MSFT' # R8.x only support MSFT tool chain - #ignore not replaced macros in value - ValueList = GetSplitValueList(' ' + Value, '/D') - Dummy = ValueList[0] - for Index in range(1, len(ValueList)): - if ValueList[Index][-1] == '=' or ValueList[Index] == '': - continue - Dummy = Dummy + ' /D ' + ValueList[Index] - Value = Dummy.strip() - if (ToolChainFamily, ToolChain) not in self._BuildOptions: - self._BuildOptions[ToolChainFamily, ToolChain] = Value - else: - OptionString = self._BuildOptions[ToolChainFamily, ToolChain] - self._BuildOptions[ToolChainFamily, ToolChain] = OptionString + " " + Value - # set _Header to non-None in order to avoid database re-querying - self._Header_ = 'DUMMY' - - ## Retrieve file version - def _GetInfVersion(self): - if self._AutoGenVersion == None: - if self._Header_ == None: - self._GetHeaderInfo() - if self._AutoGenVersion == None: - self._AutoGenVersion = 0x00010000 - return self._AutoGenVersion - - ## Retrieve BASE_NAME - def _GetBaseName(self): - if self._BaseName == None: - if self._Header_ == None: - self._GetHeaderInfo() - if self._BaseName == None: - EdkLogger.error('build', ATTRIBUTE_NOT_AVAILABLE, "No BASE_NAME name", File=self.MetaFile) - return self._BaseName - - ## Retrieve MODULE_TYPE - def _GetModuleType(self): - if self._ModuleType == None: - if self._Header_ == None: - self._GetHeaderInfo() - if self._ModuleType == None: - self._ModuleType = 'BASE' - if self._ModuleType not in SUP_MODULE_LIST: - self._ModuleType = "USER_DEFINED" - return self._ModuleType - - ## Retrieve COMPONENT_TYPE - def _GetComponentType(self): - if self._ComponentType == None: - if self._Header_ == None: - self._GetHeaderInfo() - if self._ComponentType == None: - self._ComponentType = 'USER_DEFINED' - return self._ComponentType - - ## Retrieve "BUILD_TYPE" - def _GetBuildType(self): - if self._BuildType == None: - if self._Header_ == None: - self._GetHeaderInfo() - if not self._BuildType: - self._BuildType = "BASE" - return self._BuildType - - ## Retrieve file guid - def _GetFileGuid(self): - if self._Guid == None: - if self._Header_ == None: - self._GetHeaderInfo() - if self._Guid == None: - self._Guid = '00000000-0000-0000-000000000000' - return self._Guid - - ## Retrieve module version - def _GetVersion(self): - if self._Version == None: - if self._Header_ == None: - self._GetHeaderInfo() - if self._Version == None: - self._Version = '0.0' - return self._Version - - ## Retrieve PCD_IS_DRIVER - def _GetPcdIsDriver(self): - if self._PcdIsDriver == None: - if self._Header_ == None: - self._GetHeaderInfo() - if self._PcdIsDriver == None: - self._PcdIsDriver = '' - return self._PcdIsDriver - - ## Retrieve SHADOW - def _GetShadow(self): - if self._Shadow == None: - if self._Header_ == None: - self._GetHeaderInfo() - if self._Shadow != None and self._Shadow.upper() == 'TRUE': - self._Shadow = True - else: - self._Shadow = False - return self._Shadow - - ## Retrieve CUSTOM_MAKEFILE - def _GetMakefile(self): - if self._CustomMakefile == None: - if self._Header_ == None: - self._GetHeaderInfo() - if self._CustomMakefile == None: - self._CustomMakefile = {} - return self._CustomMakefile - - ## Retrieve EFI_SPECIFICATION_VERSION - def _GetSpec(self): - if self._Specification == None: - if self._Header_ == None: - self._GetHeaderInfo() - if self._Specification == None: - self._Specification = {} - return self._Specification - - ## Retrieve LIBRARY_CLASS - def _GetLibraryClass(self): - if self._LibraryClass == None: - if self._Header_ == None: - self._GetHeaderInfo() - if self._LibraryClass == None: - self._LibraryClass = [] - return self._LibraryClass - - ## Retrieve ENTRY_POINT - def _GetEntryPoint(self): - if self._ModuleEntryPointList == None: - if self._Header_ == None: - self._GetHeaderInfo() - if self._ModuleEntryPointList == None: - self._ModuleEntryPointList = [] - return self._ModuleEntryPointList - - ## Retrieve UNLOAD_IMAGE - def _GetUnloadImage(self): - if self._ModuleUnloadImageList == None: - if self._Header_ == None: - self._GetHeaderInfo() - if self._ModuleUnloadImageList == None: - self._ModuleUnloadImageList = [] - return self._ModuleUnloadImageList - - ## Retrieve CONSTRUCTOR - def _GetConstructor(self): - if self._ConstructorList == None: - if self._Header_ == None: - self._GetHeaderInfo() - if self._ConstructorList == None: - self._ConstructorList = [] - return self._ConstructorList - - ## Retrieve DESTRUCTOR - def _GetDestructor(self): - if self._DestructorList == None: - if self._Header_ == None: - self._GetHeaderInfo() - if self._DestructorList == None: - self._DestructorList = [] - return self._DestructorList - - ## Retrieve definies other than above ones - def _GetDefines(self): - if self._Defs == None: - if self._Header_ == None: - self._GetHeaderInfo() - if self._Defs == None: - self._Defs = sdict() - return self._Defs - - ## Retrieve binary files - def _GetBinaryFiles(self): - if self._Binaries == None: - self._Binaries = [] - RecordList = self._RawData[MODEL_EFI_BINARY_FILE, self._Arch, self._Platform] - Macros = {"EDK_SOURCE":GlobalData.gEcpSource, "EFI_SOURCE":GlobalData.gEfiSource, 'PROCESSOR':self._Arch} - Macros.update(self._Macros) - for Record in RecordList: - Record = ReplaceMacros(Record, GlobalData.gEdkGlobal, False) - FileType = Record[0] - LineNo = Record[-1] - Target = 'COMMON' - FeatureFlag = [] - if Record[2]: - TokenList = GetSplitValueList(Record[2], TAB_VALUE_SPLIT) - if TokenList: - Target = TokenList[0] - if len(TokenList) > 1: - FeatureFlag = Record[1:] - - File = PathClass(NormPath(Record[1], Macros), self._ModuleDir, '', FileType, True, self._Arch, '', Target) - # check the file validation - ErrorCode, ErrorInfo = File.Validate() - if ErrorCode != 0: - EdkLogger.error('build', ErrorCode, ExtraData=ErrorInfo, File=self.MetaFile, Line=LineNo) - self._Binaries.append(File) - return self._Binaries - - ## Retrieve source files - def _GetSourceFiles(self): - if self._Sources == None: - self._Sources = [] - RecordList = self._RawData[MODEL_EFI_SOURCE_FILE, self._Arch, self._Platform] - Macros = {"EDK_SOURCE":GlobalData.gEcpSource, "EFI_SOURCE":GlobalData.gEfiSource, 'PROCESSOR':self._Arch} - Macros.update(self._Macros) - for Record in RecordList: - Record = ReplaceMacros(Record, GlobalData.gEdkGlobal, False) - LineNo = Record[-1] - ToolChainFamily = Record[1] - TagName = Record[2] - ToolCode = Record[3] - FeatureFlag = Record[4] - if self._AutoGenVersion < 0x00010005: - # old module source files (R8) - File = PathClass(NormPath(Record[0], Macros), self._ModuleDir, self._SourceOverridePath, - '', False, self._Arch, ToolChainFamily, '', TagName, ToolCode) - # check the file validation - ErrorCode, ErrorInfo = File.Validate(CaseSensitive=False) - if ErrorCode != 0: - if File.Ext.lower() == '.h': - EdkLogger.warn('build', 'Include file not found', ExtraData=ErrorInfo, - File=self.MetaFile, Line=LineNo) - continue - else: - EdkLogger.error('build', ErrorCode, ExtraData=File, File=self.MetaFile, Line=LineNo) - else: - File = PathClass(NormPath(Record[0], Macros), self._ModuleDir, '', - '', False, self._Arch, ToolChainFamily, '', TagName, ToolCode) - # check the file validation - ErrorCode, ErrorInfo = File.Validate() - if ErrorCode != 0: - EdkLogger.error('build', ErrorCode, ExtraData=ErrorInfo, File=self.MetaFile, Line=LineNo) - - self._Sources.append(File) - return self._Sources - - ## Retrieve library classes employed by this module - def _GetLibraryClassUses(self): - if self._LibraryClasses == None: - self._LibraryClasses = sdict() - RecordList = self._RawData[MODEL_EFI_LIBRARY_CLASS, self._Arch, self._Platform] - for Record in RecordList: - Record = ReplaceMacros(Record, GlobalData.gEdkGlobal, False) - Lib = Record[0] - Instance = Record[1] - if Instance != None and Instance != '': - Instance = NormPath(Instance, self._Macros) - self._LibraryClasses[Lib] = Instance - return self._LibraryClasses - - ## Retrieve library names (for R8.x style of modules) - def _GetLibraryNames(self): - if self._Libraries == None: - self._Libraries = [] - RecordList = self._RawData[MODEL_EFI_LIBRARY_INSTANCE, self._Arch, self._Platform] - for Record in RecordList: - # in case of name with '.lib' extension, which is unusual in R8.x inf - Record = ReplaceMacros(Record, GlobalData.gEdkGlobal, False) - LibraryName = os.path.splitext(Record[0])[0] - if LibraryName not in self._Libraries: - self._Libraries.append(LibraryName) - return self._Libraries - - ## Retrieve protocols consumed/produced by this module - def _GetProtocols(self): - if self._Protocols == None: - self._Protocols = sdict() - RecordList = self._RawData[MODEL_EFI_PROTOCOL, self._Arch, self._Platform] - for Record in RecordList: - CName = Record[0] - Value = ProtocolValue(CName, self.Packages) - if Value == None: - PackageList = "\n\t".join([str(P) for P in self.Packages]) - EdkLogger.error('build', RESOURCE_NOT_AVAILABLE, - "Value of Protocol [%s] is not found under [Protocols] section in" % CName, - ExtraData=PackageList, File=self.MetaFile, Line=Record[-1]) - self._Protocols[CName] = Value - return self._Protocols - - ## Retrieve PPIs consumed/produced by this module - def _GetPpis(self): - if self._Ppis == None: - self._Ppis = sdict() - RecordList = self._RawData[MODEL_EFI_PPI, self._Arch, self._Platform] - for Record in RecordList: - CName = Record[0] - Value = PpiValue(CName, self.Packages) - if Value == None: - PackageList = "\n\t".join([str(P) for P in self.Packages]) - EdkLogger.error('build', RESOURCE_NOT_AVAILABLE, - "Value of PPI [%s] is not found under [Ppis] section in " % CName, - ExtraData=PackageList, File=self.MetaFile, Line=Record[-1]) - self._Ppis[CName] = Value - return self._Ppis - - ## Retrieve GUIDs consumed/produced by this module - def _GetGuids(self): - if self._Guids == None: - self._Guids = sdict() - RecordList = self._RawData[MODEL_EFI_GUID, self._Arch, self._Platform] - for Record in RecordList: - CName = Record[0] - Value = GuidValue(CName, self.Packages) - if Value == None: - PackageList = "\n\t".join([str(P) for P in self.Packages]) - EdkLogger.error('build', RESOURCE_NOT_AVAILABLE, - "Value of Guid [%s] is not found under [Guids] section in" % CName, - ExtraData=PackageList, File=self.MetaFile, Line=Record[-1]) - self._Guids[CName] = Value - return self._Guids - - ## Retrieve include paths necessary for this module (for R8.x style of modules) - def _GetIncludes(self): - if self._Includes == None: - self._Includes = [] - if self._SourceOverridePath: - self._Includes.append(self._SourceOverridePath) - RecordList = self._RawData[MODEL_EFI_INCLUDE, self._Arch, self._Platform] - # [includes] section must be used only in old (R8.x) inf file - if self.AutoGenVersion >= 0x00010005 and len(RecordList) > 0: - EdkLogger.error('build', FORMAT_NOT_SUPPORTED, "No [include] section allowed", - File=self.MetaFile, Line=RecordList[0][-1]-1) - for Record in RecordList: - Record = ReplaceMacros(Record, GlobalData.gEdkGlobal, False) - Record[0] = Record[0].replace('$(PROCESSOR)', self._Arch) - Record[0] = ReplaceMacro(Record[0], {'EFI_SOURCE' : GlobalData.gEfiSource}, False) - if Record[0].find('EDK_SOURCE') > -1: - File = NormPath(ReplaceMacro(Record[0], {'EDK_SOURCE' : GlobalData.gEcpSource}, False), self._Macros) - if File[0] == '.': - File = os.path.join(self._ModuleDir, File) - else: - File = os.path.join(GlobalData.gWorkspace, File) - File = RealPath(os.path.normpath(File)) - if File: - self._Includes.append(File) - - #TRICK: let compiler to choose correct header file - File = NormPath(ReplaceMacro(Record[0], {'EDK_SOURCE' : GlobalData.gEdkSource}, False), self._Macros) - if File[0] == '.': - File = os.path.join(self._ModuleDir, File) - else: - File = os.path.join(GlobalData.gWorkspace, File) - File = RealPath(os.path.normpath(File)) - if File: - self._Includes.append(File) - else: - File = NormPath(Record[0], self._Macros) - if File[0] == '.': - File = os.path.join(self._ModuleDir, File) - else: - File = os.path.join(GlobalData.gWorkspace, File) - File = RealPath(os.path.normpath(File)) - if File: - self._Includes.append(File) - return self._Includes - - ## Retrieve packages this module depends on - def _GetPackages(self): - if self._Packages == None: - self._Packages = [] - RecordList = self._RawData[MODEL_META_DATA_PACKAGE, self._Arch, self._Platform] - Macros = {"EDK_SOURCE":GlobalData.gEcpSource, "EFI_SOURCE":GlobalData.gEfiSource} - Macros.update(self._Macros) - for Record in RecordList: - File = PathClass(NormPath(Record[0], Macros), GlobalData.gWorkspace, Arch=self._Arch) - LineNo = Record[-1] - # check the file validation - ErrorCode, ErrorInfo = File.Validate('.dec') - if ErrorCode != 0: - EdkLogger.error('build', ErrorCode, ExtraData=ErrorInfo, File=self.MetaFile, Line=LineNo) - # parse this package now. we need it to get protocol/ppi/guid value - Package = self._Bdb[File, self._Arch] - self._Packages.append(Package) - return self._Packages - - ## Retrieve PCDs used in this module - def _GetPcds(self): - if self._Pcds == None: - self._Pcds = {} - self._Pcds.update(self._GetPcd(MODEL_PCD_FIXED_AT_BUILD)) - self._Pcds.update(self._GetPcd(MODEL_PCD_PATCHABLE_IN_MODULE)) - self._Pcds.update(self._GetPcd(MODEL_PCD_FEATURE_FLAG)) - self._Pcds.update(self._GetPcd(MODEL_PCD_DYNAMIC)) - self._Pcds.update(self._GetPcd(MODEL_PCD_DYNAMIC_EX)) - return self._Pcds - - ## Retrieve build options specific to this module - def _GetBuildOptions(self): - if self._BuildOptions == None: - self._BuildOptions = sdict() - RecordList = self._RawData[MODEL_META_DATA_BUILD_OPTION, self._Arch, self._Platform] - for Record in RecordList: - ToolChainFamily = Record[0] - ToolChain = Record[1] - Option = Record[2] - if (ToolChainFamily, ToolChain) not in self._BuildOptions: - self._BuildOptions[ToolChainFamily, ToolChain] = Option - else: - # concatenate the option string if they're for the same tool - OptionString = self._BuildOptions[ToolChainFamily, ToolChain] - self._BuildOptions[ToolChainFamily, ToolChain] = OptionString + " " + Option - return self._BuildOptions - - ## Retrieve depedency expression - def _GetDepex(self): - if self._Depex == None: - self._Depex = tdict(False, 2) - RecordList = self._RawData[MODEL_EFI_DEPEX, self._Arch] - - # PEIM and DXE drivers must have a valid [Depex] section - if len(self.LibraryClass) == 0 and len(RecordList) == 0: - if self.ModuleType == 'DXE_DRIVER' or self.ModuleType == 'PEIM' or self.ModuleType == 'DXE_SMM_DRIVER' or \ - self.ModuleType == 'DXE_SAL_DRIVER' or self.ModuleType == 'DXE_RUNTIME_DRIVER': - EdkLogger.error('build', RESOURCE_NOT_AVAILABLE, "No [Depex] section or no valid expression in [Depex] section for [%s] module" \ - % self.ModuleType, File=self.MetaFile) - - Depex = {} - for Record in RecordList: - Record = ReplaceMacros(Record, GlobalData.gEdkGlobal, False) - Arch = Record[3] - ModuleType = Record[4] - TokenList = Record[0].split() - if (Arch, ModuleType) not in Depex: - Depex[Arch, ModuleType] = [] - DepexList = Depex[Arch, ModuleType] - for Token in TokenList: - if Token in DEPEX_SUPPORTED_OPCODE: - DepexList.append(Token) - elif Token.endswith(".inf"): # module file name - ModuleFile = os.path.normpath(Token) - Module = self.BuildDatabase[ModuleFile] - if Module == None: - EdkLogger.error('build', RESOURCE_NOT_AVAILABLE, "Module is not found in active platform", - ExtraData=Token, File=self.MetaFile, Line=Record[-1]) - DepexList.append(Module.Guid) - else: - # get the GUID value now - Value = ProtocolValue(Token, self.Packages) - if Value == None: - Value = PpiValue(Token, self.Packages) - if Value == None: - Value = GuidValue(Token, self.Packages) - if Value == None: - PackageList = "\n\t".join([str(P) for P in self.Packages]) - EdkLogger.error('build', RESOURCE_NOT_AVAILABLE, - "Value of [%s] is not found in" % Token, - ExtraData=PackageList, File=self.MetaFile, Line=Record[-1]) - DepexList.append(Value) - for Arch, ModuleType in Depex: - self._Depex[Arch, ModuleType] = Depex[Arch, ModuleType] - return self._Depex - - ## Retrieve depedency expression - def _GetDepexExpression(self): - if self._DepexExpression == None: - self._DepexExpression = tdict(False, 2) - RecordList = self._RawData[MODEL_EFI_DEPEX, self._Arch] - DepexExpression = {} - for Record in RecordList: - Record = ReplaceMacros(Record, GlobalData.gEdkGlobal, False) - Arch = Record[3] - ModuleType = Record[4] - TokenList = Record[0].split() - if (Arch, ModuleType) not in DepexExpression: - DepexExpression[Arch, ModuleType] = '' - for Token in TokenList: - DepexExpression[Arch, ModuleType] = DepexExpression[Arch, ModuleType] + Token.strip() + ' ' - for Arch, ModuleType in DepexExpression: - self._DepexExpression[Arch, ModuleType] = DepexExpression[Arch, ModuleType] - return self._DepexExpression - - ## Retrieve PCD for given type - def _GetPcd(self, Type): - Pcds = {} - PcdDict = tdict(True, 4) - PcdSet = set() - RecordList = self._RawData[Type, self._Arch, self._Platform] - for TokenSpaceGuid, PcdCName, Setting, Arch, Platform, Dummy1, LineNo in RecordList: - PcdDict[Arch, Platform, PcdCName, TokenSpaceGuid] = (Setting, LineNo) - PcdSet.add((PcdCName, TokenSpaceGuid)) - # get the guid value - if TokenSpaceGuid not in self.Guids: - Value = GuidValue(TokenSpaceGuid, self.Packages) - if Value == None: - PackageList = "\n\t".join([str(P) for P in self.Packages]) - EdkLogger.error('build', RESOURCE_NOT_AVAILABLE, - "Value of Guid [%s] is not found under [Guids] section in" % TokenSpaceGuid, - ExtraData=PackageList, File=self.MetaFile, Line=LineNo) - self.Guids[TokenSpaceGuid] = Value - - # resolve PCD type, value, datum info, etc. by getting its definition from package - for PcdCName, TokenSpaceGuid in PcdSet: - ValueList = ['', ''] - Setting, LineNo = PcdDict[self._Arch, self.Platform, PcdCName, TokenSpaceGuid] - if Setting == None: - continue - TokenList = Setting.split(TAB_VALUE_SPLIT) - ValueList[0:len(TokenList)] = TokenList - DefaultValue = ValueList[0] - Pcd = PcdClassObject( - PcdCName, - TokenSpaceGuid, - '', - '', - DefaultValue, - '', - '', - {}, - self.Guids[TokenSpaceGuid] - ) - - # get necessary info from package declaring this PCD - for Package in self.Packages: - # - # 'dynamic' in INF means its type is determined by platform; - # if platform doesn't give its type, use 'lowest' one in the - # following order, if any - # - # "FixedAtBuild", "PatchableInModule", "FeatureFlag", "Dynamic", "DynamicEx" - # - PcdType = self._PCD_TYPE_STRING_[Type] - if Type in [MODEL_PCD_DYNAMIC, MODEL_PCD_DYNAMIC_EX]: - Pcd.Pending = True - for T in ["FixedAtBuild", "PatchableInModule", "FeatureFlag", "Dynamic", "DynamicEx"]: - if (PcdCName, TokenSpaceGuid, T) in Package.Pcds: - PcdType = T - break - else: - Pcd.Pending = False - - if (PcdCName, TokenSpaceGuid, PcdType) in Package.Pcds: - PcdInPackage = Package.Pcds[PcdCName, TokenSpaceGuid, PcdType] - Pcd.Type = PcdType - Pcd.TokenValue = PcdInPackage.TokenValue - Pcd.DatumType = PcdInPackage.DatumType - Pcd.MaxDatumSize = PcdInPackage.MaxDatumSize - Pcd.InfDefaultValue = Pcd.DefaultValue - if Pcd.DefaultValue in [None, '']: - Pcd.DefaultValue = PcdInPackage.DefaultValue - break - else: - EdkLogger.error( - 'build', - PARSER_ERROR, - "PCD [%s.%s] in [%s] is not found in dependent packages:" % (TokenSpaceGuid, PcdCName, self.MetaFile), - File =self.MetaFile, Line=LineNo, - ExtraData="\t%s" % '\n\t'.join([str(P) for P in self.Packages]) - ) - Pcds[PcdCName, TokenSpaceGuid] = Pcd - return Pcds - - Arch = property(_GetArch, _SetArch) - Platform = property(_GetPlatform, _SetPlatform) - - AutoGenVersion = property(_GetInfVersion) - BaseName = property(_GetBaseName) - ModuleType = property(_GetModuleType) - ComponentType = property(_GetComponentType) - BuildType = property(_GetBuildType) - Guid = property(_GetFileGuid) - Version = property(_GetVersion) - PcdIsDriver = property(_GetPcdIsDriver) - Shadow = property(_GetShadow) - CustomMakefile = property(_GetMakefile) - Specification = property(_GetSpec) - LibraryClass = property(_GetLibraryClass) - ModuleEntryPointList = property(_GetEntryPoint) - ModuleUnloadImageList = property(_GetUnloadImage) - ConstructorList = property(_GetConstructor) - DestructorList = property(_GetDestructor) - Defines = property(_GetDefines) - - Binaries = property(_GetBinaryFiles) - Sources = property(_GetSourceFiles) - LibraryClasses = property(_GetLibraryClassUses) - Libraries = property(_GetLibraryNames) - Protocols = property(_GetProtocols) - Ppis = property(_GetPpis) - Guids = property(_GetGuids) - Includes = property(_GetIncludes) - Packages = property(_GetPackages) - Pcds = property(_GetPcds) - BuildOptions = property(_GetBuildOptions) - Depex = property(_GetDepex) - DepexExpression = property(_GetDepexExpression) - -## Database -# -# This class defined the build databse for all modules, packages and platform. -# It will call corresponding parser for the given file if it cannot find it in -# the database. -# -# @param DbPath Path of database file -# @param GlobalMacros Global macros used for replacement during file parsing -# @prarm RenewDb=False Create new database file if it's already there -# -class WorkspaceDatabase(object): - # file parser - _FILE_PARSER_ = { - MODEL_FILE_INF : InfParser, - MODEL_FILE_DEC : DecParser, - MODEL_FILE_DSC : DscParser, - MODEL_FILE_FDF : None, #FdfParser, - MODEL_FILE_CIF : None - } - - # file table - _FILE_TABLE_ = { - MODEL_FILE_INF : ModuleTable, - MODEL_FILE_DEC : PackageTable, - MODEL_FILE_DSC : PlatformTable, - } - - # default database file path - _DB_PATH_ = "Conf/.cache/build.db" - - # - # internal class used for call corresponding file parser and caching the result - # to avoid unnecessary re-parsing - # - class BuildObjectFactory(object): - _FILE_TYPE_ = { - ".inf" : MODEL_FILE_INF, - ".dec" : MODEL_FILE_DEC, - ".dsc" : MODEL_FILE_DSC, - ".fdf" : MODEL_FILE_FDF, - } - - # convert to xxxBuildData object - _GENERATOR_ = { - MODEL_FILE_INF : InfBuildData, - MODEL_FILE_DEC : DecBuildData, - MODEL_FILE_DSC : DscBuildData, - MODEL_FILE_FDF : None #FlashDefTable, - } - - _CACHE_ = {} # (FilePath, Arch) : - - # constructor - def __init__(self, WorkspaceDb): - self.WorkspaceDb = WorkspaceDb - - # key = (FilePath, Arch='COMMON') - def __contains__(self, Key): - FilePath = Key[0] - Arch = 'COMMON' - if len(Key) > 1: - Arch = Key[1] - return (FilePath, Arch) in self._CACHE_ - - # key = (FilePath, Arch='COMMON') - def __getitem__(self, Key): - FilePath = Key[0] - Arch = 'COMMON' - Platform = 'COMMON' - if len(Key) > 1: - Arch = Key[1] - if len(Key) > 2: - Platform = Key[2] - - # if it's generated before, just return the cached one - Key = (FilePath, Arch) - if Key in self._CACHE_: - return self._CACHE_[Key] - - # check file type - Ext = FilePath.Ext.lower() - if Ext not in self._FILE_TYPE_: - return None - FileType = self._FILE_TYPE_[Ext] - if FileType not in self._GENERATOR_: - return None - - # get table for current file - MetaFile = self.WorkspaceDb[FilePath, FileType, self.WorkspaceDb._GlobalMacros] - BuildObject = self._GENERATOR_[FileType]( - FilePath, - MetaFile, - self, - Arch, - Platform, - self.WorkspaceDb._GlobalMacros, - ) - self._CACHE_[Key] = BuildObject - return BuildObject - - # placeholder for file format conversion - class TransformObjectFactory: - def __init__(self, WorkspaceDb): - self.WorkspaceDb = WorkspaceDb - - # key = FilePath, Arch - def __getitem__(self, Key): - pass - - ## Constructor of WorkspaceDatabase - # - # @param DbPath Path of database file - # @param GlobalMacros Global macros used for replacement during file parsing - # @prarm RenewDb=False Create new database file if it's already there - # - def __init__(self, DbPath, GlobalMacros={}, RenewDb=False): - self._GlobalMacros = GlobalMacros - - if DbPath == None or DbPath == '': - DbPath = os.path.normpath(os.path.join(GlobalData.gWorkspace, self._DB_PATH_)) - - # don't create necessary path for db in memory - if DbPath != ':memory:': - DbDir = os.path.split(DbPath)[0] - if not os.path.exists(DbDir): - os.makedirs(DbDir) - - # remove db file in case inconsistency between db and file in file system - if self._CheckWhetherDbNeedRenew(RenewDb, DbPath): - os.remove(DbPath) - - # create db with optimized parameters - self.Conn = sqlite3.connect(DbPath, isolation_level='DEFERRED') - self.Conn.execute("PRAGMA synchronous=OFF") - self.Conn.execute("PRAGMA temp_store=MEMORY") - self.Conn.execute("PRAGMA count_changes=OFF") - self.Conn.execute("PRAGMA cache_size=8192") - #self.Conn.execute("PRAGMA page_size=8192") - - # to avoid non-ascii character conversion issue - self.Conn.text_factory = str - self.Cur = self.Conn.cursor() - - # create table for internal uses - self.TblDataModel = TableDataModel(self.Cur) - self.TblFile = TableFile(self.Cur) - - # conversion object for build or file format conversion purpose - self.BuildObject = WorkspaceDatabase.BuildObjectFactory(self) - self.TransformObject = WorkspaceDatabase.TransformObjectFactory(self) - - ## Check whether workspace database need to be renew. - # The renew reason maybe: - # 1) If user force to renew; - # 2) If user do not force renew, and - # a) If the time of last modified python source is newer than database file; - # b) If the time of last modified frozen executable file is newer than database file; - # - # @param force User force renew database - # @param DbPath The absolute path of workspace database file - # - # @return Bool value for whether need renew workspace databse - # - def _CheckWhetherDbNeedRenew (self, force, DbPath): - DbDir = os.path.split(DbPath)[0] - MacroFilePath = os.path.normpath(os.path.join(DbDir, "build.mac")) - MacroMatch = False - if os.path.exists(MacroFilePath) and os.path.isfile(MacroFilePath): - LastMacros = None - try: - f = open(MacroFilePath,'r') - LastMacros = pickle.load(f) - f.close() - except IOError: - pass - except: - f.close() - - if LastMacros != None and type(LastMacros) is DictType: - if LastMacros == self._GlobalMacros: - MacroMatch = True - for Macro in LastMacros.keys(): - if not (Macro in self._GlobalMacros and LastMacros[Macro] == self._GlobalMacros[Macro]): - MacroMatch = False; - break; - - if not MacroMatch: - # save command line macros to file - try: - f = open(MacroFilePath,'w') - pickle.dump(self._GlobalMacros, f, 2) - f.close() - except IOError: - pass - except: - f.close() - - force = True - - # if database does not exist, we need do nothing - if not os.path.exists(DbPath): return False - - # if user force to renew database, then not check whether database is out of date - if force: return True - - # - # Check the time of last modified source file or build.exe - # if is newer than time of database, then database need to be re-created. - # - timeOfToolModified = 0 - if hasattr(sys, "frozen"): - exePath = os.path.abspath(sys.executable) - timeOfToolModified = os.stat(exePath).st_mtime - else: - curPath = os.path.dirname(__file__) # curPath is the path of WorkspaceDatabase.py - rootPath = os.path.split(curPath)[0] # rootPath is root path of python source, such as /BaseTools/Source/Python - if rootPath == "" or rootPath == None: - EdkLogger.verbose("\nFail to find the root path of build.exe or python sources, so can not \ -determine whether database file is out of date!\n") - - # walk the root path of source or build's binary to get the time last modified. - - for root, dirs, files in os.walk (rootPath): - for dir in dirs: - # bypass source control folder - if dir.lower() in [".svn", "_svn", "cvs"]: - dirs.remove(dir) - - for file in files: - ext = os.path.splitext(file)[1] - if ext.lower() == ".py": # only check .py files - fd = os.stat(os.path.join(root, file)) - if timeOfToolModified < fd.st_mtime: - timeOfToolModified = fd.st_mtime - if timeOfToolModified > os.stat(DbPath).st_mtime: - EdkLogger.verbose("\nWorkspace database is out of data!") - return True - - return False - - ## Initialize build database - def InitDatabase(self): - EdkLogger.verbose("\nInitialize build database started ...") - - # - # Create new tables - # - self.TblDataModel.Create(False) - self.TblFile.Create(False) - - # - # Initialize table DataModel - # - self.TblDataModel.InitTable() - EdkLogger.verbose("Initialize build database ... DONE!") - - ## Query a table - # - # @param Table: The instance of the table to be queried - # - def QueryTable(self, Table): - Table.Query() - - ## Close entire database - # - # Commit all first - # Close the connection and cursor - # - def Close(self): - self.Conn.commit() - self.Cur.close() - self.Conn.close() - - ## Get unique file ID for the gvien file - def GetFileId(self, FilePath): - return self.TblFile.GetFileId(FilePath) - - ## Get file type value for the gvien file ID - def GetFileType(self, FileId): - return self.TblFile.GetFileType(FileId) - - ## Get time stamp stored in file table - def GetTimeStamp(self, FileId): - return self.TblFile.GetFileTimeStamp(FileId) - - ## Update time stamp in file table - def SetTimeStamp(self, FileId, TimeStamp): - return self.TblFile.SetFileTimeStamp(FileId, TimeStamp) - - ## Check if a table integrity flag exists or not - def CheckIntegrity(self, TableName): - try: - Result = self.Cur.execute("select min(ID) from %s" % (TableName)).fetchall() - if Result[0][0] != -1: - return False - except: - return False - return True - - ## Compose table name for given file type and file ID - def GetTableName(self, FileType, FileId): - return "_%s_%s" % (FileType, FileId) - - ## Return a temp table containing all content of the given file - # - # @param FileInfo The tuple containing path and type of a file - # - def __getitem__(self, FileInfo): - FilePath, FileType, Macros = FileInfo - if FileType not in self._FILE_TABLE_: - return None - - # flag used to indicate if it's parsed or not - FilePath = str(FilePath) - Parsed = False - FileId = self.GetFileId(FilePath) - if FileId != None: - TimeStamp = os.stat(FilePath)[8] - TableName = self.GetTableName(FileType, FileId) - if TimeStamp != self.GetTimeStamp(FileId): - # update the timestamp in database - self.SetTimeStamp(FileId, TimeStamp) - else: - # if the table exists and is integrity, don't parse it - Parsed = self.CheckIntegrity(TableName) - else: - FileId = self.TblFile.InsertFile(FilePath, FileType) - TableName = self.GetTableName(FileType, FileId) - - FileTable = self._FILE_TABLE_[FileType](self.Cur, TableName, FileId) - FileTable.Create(not Parsed) - Parser = self._FILE_PARSER_[FileType](FilePath, FileType, FileTable, Macros) - # set the "Finished" flag in parser in order to avoid re-parsing (if parsed) - Parser.Finished = Parsed - return Parser - - ## Summarize all packages in the database - def _GetPackageList(self): - PackageList = [] - for Module in self.ModuleList: - for Package in Module.Packages: - if Package not in PackageList: - PackageList.append(Package) - return PackageList - - ## Summarize all platforms in the database - def _GetPlatformList(self): - PlatformList = [] - for PlatformFile in self.TblFile.GetFileList(MODEL_FILE_DSC): - try: - Platform = self.BuildObject[PathClass(PlatformFile), 'COMMON'] - except: - Platform = None - if Platform != None: - PlatformList.append(Platform) - return PlatformList - - ## Summarize all modules in the database - def _GetModuleList(self): - ModuleList = [] - for ModuleFile in self.TblFile.GetFileList(MODEL_FILE_INF): - try: - Module = self.BuildObject[PathClass(ModuleFile), 'COMMON'] - except: - Module = None - if Module != None: - ModuleList.append(Module) - return ModuleList - - PlatformList = property(_GetPlatformList) - PackageList = property(_GetPackageList) - ModuleList = property(_GetModuleList) - -## -# -# This acts like the main() function for the script, unless it is 'import'ed into another -# script. -# -if __name__ == '__main__': - pass - +## @file +# This file is used to create a database used by build tool +# +# Copyright (c) 2008 - 2010, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# + +## +# Import Modules +# +import sqlite3 +import os +import os.path +import pickle + +import Common.EdkLogger as EdkLogger +import Common.GlobalData as GlobalData + +from Common.String import * +from Common.DataType import * +from Common.Misc import * +from types import * + +from CommonDataClass.CommonClass import SkuInfoClass + +from MetaDataTable import * +from MetaFileTable import * +from MetaFileParser import * +from BuildClassObject import * + +## Platform build information from DSC file +# +# This class is used to retrieve information stored in database and convert them +# into PlatformBuildClassObject form for easier use for AutoGen. +# +class DscBuildData(PlatformBuildClassObject): + # dict used to convert PCD type in database to string used by build tool + _PCD_TYPE_STRING_ = { + MODEL_PCD_FIXED_AT_BUILD : "FixedAtBuild", + MODEL_PCD_PATCHABLE_IN_MODULE : "PatchableInModule", + MODEL_PCD_FEATURE_FLAG : "FeatureFlag", + MODEL_PCD_DYNAMIC : "Dynamic", + MODEL_PCD_DYNAMIC_DEFAULT : "Dynamic", + MODEL_PCD_DYNAMIC_HII : "DynamicHii", + MODEL_PCD_DYNAMIC_VPD : "DynamicVpd", + MODEL_PCD_DYNAMIC_EX : "DynamicEx", + MODEL_PCD_DYNAMIC_EX_DEFAULT : "DynamicEx", + MODEL_PCD_DYNAMIC_EX_HII : "DynamicExHii", + MODEL_PCD_DYNAMIC_EX_VPD : "DynamicExVpd", + } + + # dict used to convert part of [Defines] to members of DscBuildData directly + _PROPERTY_ = { + # + # Required Fields + # + TAB_DSC_DEFINES_PLATFORM_NAME : "_PlatformName", + TAB_DSC_DEFINES_PLATFORM_GUID : "_Guid", + TAB_DSC_DEFINES_PLATFORM_VERSION : "_Version", + TAB_DSC_DEFINES_DSC_SPECIFICATION : "_DscSpecification", + #TAB_DSC_DEFINES_OUTPUT_DIRECTORY : "_OutputDirectory", + #TAB_DSC_DEFINES_SUPPORTED_ARCHITECTURES : "_SupArchList", + #TAB_DSC_DEFINES_BUILD_TARGETS : "_BuildTargets", + #TAB_DSC_DEFINES_SKUID_IDENTIFIER : "_SkuName", + #TAB_DSC_DEFINES_FLASH_DEFINITION : "_FlashDefinition", + TAB_DSC_DEFINES_BUILD_NUMBER : "_BuildNumber", + TAB_DSC_DEFINES_MAKEFILE_NAME : "_MakefileName", + TAB_DSC_DEFINES_BS_BASE_ADDRESS : "_BsBaseAddress", + TAB_DSC_DEFINES_RT_BASE_ADDRESS : "_RtBaseAddress", + } + + # used to compose dummy library class name for those forced library instances + _NullLibraryNumber = 0 + + ## Constructor of DscBuildData + # + # Initialize object of DscBuildData + # + # @param FilePath The path of platform description file + # @param RawData The raw data of DSC file + # @param BuildDataBase Database used to retrieve module/package information + # @param Arch The target architecture + # @param Platform (not used for DscBuildData) + # @param Macros Macros used for replacement in DSC file + # + def __init__(self, FilePath, RawData, BuildDataBase, Arch='COMMON', Platform='DUMMY', Macros={}): + self.MetaFile = FilePath + self._RawData = RawData + self._Bdb = BuildDataBase + self._Arch = Arch + self._Macros = Macros + self._Clear() + RecordList = self._RawData[MODEL_META_DATA_DEFINE, self._Arch] + for Record in RecordList: + GlobalData.gEdkGlobal[Record[0]] = Record[1] + + ## XXX[key] = value + def __setitem__(self, key, value): + self.__dict__[self._PROPERTY_[key]] = value + + ## value = XXX[key] + def __getitem__(self, key): + return self.__dict__[self._PROPERTY_[key]] + + ## "in" test support + def __contains__(self, key): + return key in self._PROPERTY_ + + ## Set all internal used members of DscBuildData to None + def _Clear(self): + self._Header = None + self._PlatformName = None + self._Guid = None + self._Version = None + self._DscSpecification = None + self._OutputDirectory = None + self._SupArchList = None + self._BuildTargets = None + self._SkuName = None + self._FlashDefinition = None + self._BuildNumber = None + self._MakefileName = None + self._BsBaseAddress = None + self._RtBaseAddress = None + self._SkuIds = None + self._Modules = None + self._LibraryInstances = None + self._LibraryClasses = None + self._Pcds = None + self._BuildOptions = None + self._LoadFixAddress = None + + ## Get architecture + def _GetArch(self): + return self._Arch + + ## Set architecture + # + # Changing the default ARCH to another may affect all other information + # because all information in a platform may be ARCH-related. That's + # why we need to clear all internal used members, in order to cause all + # information to be re-retrieved. + # + # @param Value The value of ARCH + # + def _SetArch(self, Value): + if self._Arch == Value: + return + self._Arch = Value + self._Clear() + + ## Retrieve all information in [Defines] section + # + # (Retriving all [Defines] information in one-shot is just to save time.) + # + def _GetHeaderInfo(self): + RecordList = self._RawData[MODEL_META_DATA_HEADER, self._Arch] + for Record in RecordList: + Name = Record[0] + # items defined _PROPERTY_ don't need additional processing + if Name in self: + self[Name] = Record[1] + # some special items in [Defines] section need special treatment + elif Name == TAB_DSC_DEFINES_OUTPUT_DIRECTORY: + self._OutputDirectory = NormPath(Record[1], self._Macros) + if ' ' in self._OutputDirectory: + EdkLogger.error("build", FORMAT_NOT_SUPPORTED, "No space is allowed in OUTPUT_DIRECTORY", + File=self.MetaFile, Line=Record[-1], + ExtraData=self._OutputDirectory) + elif Name == TAB_DSC_DEFINES_FLASH_DEFINITION: + self._FlashDefinition = PathClass(NormPath(Record[1], self._Macros), GlobalData.gWorkspace) + ErrorCode, ErrorInfo = self._FlashDefinition.Validate('.fdf') + if ErrorCode != 0: + EdkLogger.error('build', ErrorCode, File=self.MetaFile, Line=Record[-1], + ExtraData=ErrorInfo) + elif Name == TAB_DSC_DEFINES_SUPPORTED_ARCHITECTURES: + self._SupArchList = GetSplitValueList(Record[1], TAB_VALUE_SPLIT) + elif Name == TAB_DSC_DEFINES_BUILD_TARGETS: + self._BuildTargets = GetSplitValueList(Record[1]) + elif Name == TAB_DSC_DEFINES_SKUID_IDENTIFIER: + if self._SkuName == None: + self._SkuName = Record[1] + elif Name == TAB_FIX_LOAD_TOP_MEMORY_ADDRESS: + self._LoadFixAddress = Record[1] + # set _Header to non-None in order to avoid database re-querying + self._Header = 'DUMMY' + + ## Retrieve platform name + def _GetPlatformName(self): + if self._PlatformName == None: + if self._Header == None: + self._GetHeaderInfo() + if self._PlatformName == None: + EdkLogger.error('build', ATTRIBUTE_NOT_AVAILABLE, "No PLATFORM_NAME", File=self.MetaFile) + return self._PlatformName + + ## Retrieve file guid + def _GetFileGuid(self): + if self._Guid == None: + if self._Header == None: + self._GetHeaderInfo() + if self._Guid == None: + EdkLogger.error('build', ATTRIBUTE_NOT_AVAILABLE, "No FILE_GUID", File=self.MetaFile) + return self._Guid + + ## Retrieve platform version + def _GetVersion(self): + if self._Version == None: + if self._Header == None: + self._GetHeaderInfo() + if self._Version == None: + self._Version = '' + return self._Version + + ## Retrieve platform description file version + def _GetDscSpec(self): + if self._DscSpecification == None: + if self._Header == None: + self._GetHeaderInfo() + if self._DscSpecification == None: + self._DscSpecification = '' + return self._DscSpecification + + ## Retrieve OUTPUT_DIRECTORY + def _GetOutpuDir(self): + if self._OutputDirectory == None: + if self._Header == None: + self._GetHeaderInfo() + if self._OutputDirectory == None: + self._OutputDirectory = os.path.join("Build", self._PlatformName) + return self._OutputDirectory + + ## Retrieve SUPPORTED_ARCHITECTURES + def _GetSupArch(self): + if self._SupArchList == None: + if self._Header == None: + self._GetHeaderInfo() + if self._SupArchList == None: + self._SupArchList = ARCH_LIST + return self._SupArchList + + ## Retrieve BUILD_TARGETS + def _GetBuildTarget(self): + if self._BuildTargets == None: + if self._Header == None: + self._GetHeaderInfo() + if self._BuildTargets == None: + self._BuildTargets = ['DEBUG', 'RELEASE'] + return self._BuildTargets + + ## Retrieve SKUID_IDENTIFIER + def _GetSkuName(self): + if self._SkuName == None: + if self._Header == None: + self._GetHeaderInfo() + if self._SkuName == None or self._SkuName not in self.SkuIds: + self._SkuName = 'DEFAULT' + return self._SkuName + + ## Override SKUID_IDENTIFIER + def _SetSkuName(self, Value): + if Value in self.SkuIds: + self._SkuName = Value + + def _GetFdfFile(self): + if self._FlashDefinition == None: + if self._Header == None: + self._GetHeaderInfo() + if self._FlashDefinition == None: + self._FlashDefinition = '' + return self._FlashDefinition + + ## Retrieve FLASH_DEFINITION + def _GetBuildNumber(self): + if self._BuildNumber == None: + if self._Header == None: + self._GetHeaderInfo() + if self._BuildNumber == None: + self._BuildNumber = '' + return self._BuildNumber + + ## Retrieve MAKEFILE_NAME + def _GetMakefileName(self): + if self._MakefileName == None: + if self._Header == None: + self._GetHeaderInfo() + if self._MakefileName == None: + self._MakefileName = '' + return self._MakefileName + + ## Retrieve BsBaseAddress + def _GetBsBaseAddress(self): + if self._BsBaseAddress == None: + if self._Header == None: + self._GetHeaderInfo() + if self._BsBaseAddress == None: + self._BsBaseAddress = '' + return self._BsBaseAddress + + ## Retrieve RtBaseAddress + def _GetRtBaseAddress(self): + if self._RtBaseAddress == None: + if self._Header == None: + self._GetHeaderInfo() + if self._RtBaseAddress == None: + self._RtBaseAddress = '' + return self._RtBaseAddress + + ## Retrieve the top address for the load fix address + def _GetLoadFixAddress(self): + if self._LoadFixAddress == None: + if self._Header == None: + self._GetHeaderInfo() + if self._LoadFixAddress == None: + self._LoadFixAddress = '' + return self._LoadFixAddress + + ## Retrieve [SkuIds] section information + def _GetSkuIds(self): + if self._SkuIds == None: + self._SkuIds = {} + RecordList = self._RawData[MODEL_EFI_SKU_ID] + for Record in RecordList: + if Record[0] in [None, '']: + EdkLogger.error('build', FORMAT_INVALID, 'No Sku ID number', + File=self.MetaFile, Line=Record[-1]) + if Record[1] in [None, '']: + EdkLogger.error('build', FORMAT_INVALID, 'No Sku ID name', + File=self.MetaFile, Line=Record[-1]) + self._SkuIds[Record[1]] = Record[0] + if 'DEFAULT' not in self._SkuIds: + self._SkuIds['DEFAULT'] = 0 + return self._SkuIds + + ## Retrieve [Components] section information + def _GetModules(self): + if self._Modules != None: + return self._Modules + + self._Modules = sdict() + RecordList = self._RawData[MODEL_META_DATA_COMPONENT, self._Arch] + Macros = {"EDK_SOURCE":GlobalData.gEcpSource, "EFI_SOURCE":GlobalData.gEfiSource} + Macros.update(self._Macros) + for Record in RecordList: + ModuleFile = PathClass(NormPath(Record[0], Macros), GlobalData.gWorkspace, Arch=self._Arch) + ModuleId = Record[5] + LineNo = Record[6] + + # check the file validation + ErrorCode, ErrorInfo = ModuleFile.Validate('.inf') + if ErrorCode != 0: + EdkLogger.error('build', ErrorCode, File=self.MetaFile, Line=LineNo, + ExtraData=ErrorInfo) + # Check duplication + if ModuleFile in self._Modules: + EdkLogger.error('build', FILE_DUPLICATED, File=self.MetaFile, ExtraData=str(ModuleFile), Line=LineNo) + + Module = ModuleBuildClassObject() + Module.MetaFile = ModuleFile + + # get module override path + RecordList = self._RawData[MODEL_META_DATA_COMPONENT_SOURCE_OVERRIDE_PATH, self._Arch, None, ModuleId] + if RecordList != []: + Module.SourceOverridePath = os.path.join(GlobalData.gWorkspace, NormPath(RecordList[0][0], Macros)) + + # Check if the source override path exists + if not os.path.isdir(Module.SourceOverridePath): + EdkLogger.error('build', FILE_NOT_FOUND, Message = 'Source override path does not exist:', File=self.MetaFile, ExtraData=Module.SourceOverridePath, Line=LineNo) + + #Add to GlobalData Variables + GlobalData.gOverrideDir[ModuleFile.Key] = Module.SourceOverridePath + + # get module private library instance + RecordList = self._RawData[MODEL_EFI_LIBRARY_CLASS, self._Arch, None, ModuleId] + for Record in RecordList: + LibraryClass = Record[0] + LibraryPath = PathClass(NormPath(Record[1], Macros), GlobalData.gWorkspace, Arch=self._Arch) + LineNo = Record[-1] + + # check the file validation + ErrorCode, ErrorInfo = LibraryPath.Validate('.inf') + if ErrorCode != 0: + EdkLogger.error('build', ErrorCode, File=self.MetaFile, Line=LineNo, + ExtraData=ErrorInfo) + + if LibraryClass == '' or LibraryClass == 'NULL': + self._NullLibraryNumber += 1 + LibraryClass = 'NULL%d' % self._NullLibraryNumber + EdkLogger.verbose("Found forced library for %s\n\t%s [%s]" % (ModuleFile, LibraryPath, LibraryClass)) + Module.LibraryClasses[LibraryClass] = LibraryPath + if LibraryPath not in self.LibraryInstances: + self.LibraryInstances.append(LibraryPath) + + # get module private PCD setting + for Type in [MODEL_PCD_FIXED_AT_BUILD, MODEL_PCD_PATCHABLE_IN_MODULE, \ + MODEL_PCD_FEATURE_FLAG, MODEL_PCD_DYNAMIC, MODEL_PCD_DYNAMIC_EX]: + RecordList = self._RawData[Type, self._Arch, None, ModuleId] + for TokenSpaceGuid, PcdCName, Setting, Dummy1, Dummy2, Dummy3, Dummy4 in RecordList: + TokenList = GetSplitValueList(Setting) + DefaultValue = TokenList[0] + if len(TokenList) > 1: + MaxDatumSize = TokenList[1] + else: + MaxDatumSize = '' + TypeString = self._PCD_TYPE_STRING_[Type] + Pcd = PcdClassObject( + PcdCName, + TokenSpaceGuid, + TypeString, + '', + DefaultValue, + '', + MaxDatumSize, + {}, + None + ) + Module.Pcds[PcdCName, TokenSpaceGuid] = Pcd + + # get module private build options + RecordList = self._RawData[MODEL_META_DATA_BUILD_OPTION, self._Arch, None, ModuleId] + for ToolChainFamily, ToolChain, Option, Dummy1, Dummy2, Dummy3, Dummy4 in RecordList: + if (ToolChainFamily, ToolChain) not in Module.BuildOptions: + Module.BuildOptions[ToolChainFamily, ToolChain] = Option + else: + OptionString = Module.BuildOptions[ToolChainFamily, ToolChain] + Module.BuildOptions[ToolChainFamily, ToolChain] = OptionString + " " + Option + + self._Modules[ModuleFile] = Module + return self._Modules + + ## Retrieve all possible library instances used in this platform + def _GetLibraryInstances(self): + if self._LibraryInstances == None: + self._GetLibraryClasses() + return self._LibraryInstances + + ## Retrieve [LibraryClasses] information + def _GetLibraryClasses(self): + if self._LibraryClasses == None: + self._LibraryInstances = [] + # + # tdict is a special dict kind of type, used for selecting correct + # library instance for given library class and module type + # + LibraryClassDict = tdict(True, 3) + # track all library class names + LibraryClassSet = set() + RecordList = self._RawData[MODEL_EFI_LIBRARY_CLASS, self._Arch] + Macros = {"EDK_SOURCE":GlobalData.gEcpSource, "EFI_SOURCE":GlobalData.gEfiSource} + Macros.update(self._Macros) + for Record in RecordList: + LibraryClass, LibraryInstance, Dummy, Arch, ModuleType, Dummy, LineNo = Record + if LibraryClass == '' or LibraryClass == 'NULL': + self._NullLibraryNumber += 1 + LibraryClass = 'NULL%d' % self._NullLibraryNumber + EdkLogger.verbose("Found forced library for arch=%s\n\t%s [%s]" % (Arch, LibraryInstance, LibraryClass)) + LibraryClassSet.add(LibraryClass) + LibraryInstance = PathClass(NormPath(LibraryInstance, Macros), GlobalData.gWorkspace, Arch=self._Arch) + # check the file validation + ErrorCode, ErrorInfo = LibraryInstance.Validate('.inf') + if ErrorCode != 0: + EdkLogger.error('build', ErrorCode, File=self.MetaFile, Line=LineNo, + ExtraData=ErrorInfo) + + if ModuleType != 'COMMON' and ModuleType not in SUP_MODULE_LIST: + EdkLogger.error('build', OPTION_UNKNOWN, "Unknown module type [%s]" % ModuleType, + File=self.MetaFile, ExtraData=LibraryInstance, Line=LineNo) + LibraryClassDict[Arch, ModuleType, LibraryClass] = LibraryInstance + if LibraryInstance not in self._LibraryInstances: + self._LibraryInstances.append(LibraryInstance) + + # resolve the specific library instance for each class and each module type + self._LibraryClasses = tdict(True) + for LibraryClass in LibraryClassSet: + # try all possible module types + for ModuleType in SUP_MODULE_LIST: + LibraryInstance = LibraryClassDict[self._Arch, ModuleType, LibraryClass] + if LibraryInstance == None: + continue + self._LibraryClasses[LibraryClass, ModuleType] = LibraryInstance + + # for R8 style library instances, which are listed in different section + RecordList = self._RawData[MODEL_EFI_LIBRARY_INSTANCE, self._Arch] + for Record in RecordList: + File = PathClass(NormPath(Record[0], Macros), GlobalData.gWorkspace, Arch=self._Arch) + LineNo = Record[-1] + # check the file validation + ErrorCode, ErrorInfo = File.Validate('.inf') + if ErrorCode != 0: + EdkLogger.error('build', ErrorCode, File=self.MetaFile, Line=LineNo, + ExtraData=ErrorInfo) + if File not in self._LibraryInstances: + self._LibraryInstances.append(File) + # + # we need the module name as the library class name, so we have + # to parse it here. (self._Bdb[] will trigger a file parse if it + # hasn't been parsed) + # + Library = self._Bdb[File, self._Arch] + self._LibraryClasses[Library.BaseName, ':dummy:'] = Library + return self._LibraryClasses + + ## Retrieve all PCD settings in platform + def _GetPcds(self): + if self._Pcds == None: + self._Pcds = {} + self._Pcds.update(self._GetPcd(MODEL_PCD_FIXED_AT_BUILD)) + self._Pcds.update(self._GetPcd(MODEL_PCD_PATCHABLE_IN_MODULE)) + self._Pcds.update(self._GetPcd(MODEL_PCD_FEATURE_FLAG)) + self._Pcds.update(self._GetDynamicPcd(MODEL_PCD_DYNAMIC_DEFAULT)) + self._Pcds.update(self._GetDynamicHiiPcd(MODEL_PCD_DYNAMIC_HII)) + self._Pcds.update(self._GetDynamicVpdPcd(MODEL_PCD_DYNAMIC_VPD)) + self._Pcds.update(self._GetDynamicPcd(MODEL_PCD_DYNAMIC_EX_DEFAULT)) + self._Pcds.update(self._GetDynamicHiiPcd(MODEL_PCD_DYNAMIC_EX_HII)) + self._Pcds.update(self._GetDynamicVpdPcd(MODEL_PCD_DYNAMIC_EX_VPD)) + return self._Pcds + + ## Retrieve [BuildOptions] + def _GetBuildOptions(self): + if self._BuildOptions == None: + self._BuildOptions = {} + # + # Retrieve build option for EDKII style module + # + RecordList = self._RawData[MODEL_META_DATA_BUILD_OPTION, 'COMMON', EDKII_NAME] + for ToolChainFamily, ToolChain, Option, Dummy1, Dummy2, Dummy3, Dummy4 in RecordList: + self._BuildOptions[ToolChainFamily, ToolChain, EDKII_NAME] = Option + # + # Retrieve build option for EDK style module + # + RecordList = self._RawData[MODEL_META_DATA_BUILD_OPTION, 'COMMON', EDK_NAME] + for ToolChainFamily, ToolChain, Option, Dummy1, Dummy2, Dummy3, Dummy4 in RecordList: + self._BuildOptions[ToolChainFamily, ToolChain, EDK_NAME] = Option + return self._BuildOptions + + ## Retrieve non-dynamic PCD settings + # + # @param Type PCD type + # + # @retval a dict object contains settings of given PCD type + # + def _GetPcd(self, Type): + Pcds = {} + # + # tdict is a special dict kind of type, used for selecting correct + # PCD settings for certain ARCH + # + PcdDict = tdict(True, 3) + PcdSet = set() + # Find out all possible PCD candidates for self._Arch + RecordList = self._RawData[Type, self._Arch] + for TokenSpaceGuid, PcdCName, Setting, Arch, SkuName, Dummy3, Dummy4 in RecordList: + PcdSet.add((PcdCName, TokenSpaceGuid)) + PcdDict[Arch, PcdCName, TokenSpaceGuid] = Setting + # Remove redundant PCD candidates + for PcdCName, TokenSpaceGuid in PcdSet: + ValueList = ['', '', ''] + Setting = PcdDict[self._Arch, PcdCName, TokenSpaceGuid] + if Setting == None: + continue + TokenList = Setting.split(TAB_VALUE_SPLIT) + ValueList[0:len(TokenList)] = TokenList + PcdValue, DatumType, MaxDatumSize = ValueList + Pcds[PcdCName, TokenSpaceGuid] = PcdClassObject( + PcdCName, + TokenSpaceGuid, + self._PCD_TYPE_STRING_[Type], + DatumType, + PcdValue, + '', + MaxDatumSize, + {}, + None + ) + return Pcds + + ## Retrieve dynamic PCD settings + # + # @param Type PCD type + # + # @retval a dict object contains settings of given PCD type + # + def _GetDynamicPcd(self, Type): + Pcds = {} + # + # tdict is a special dict kind of type, used for selecting correct + # PCD settings for certain ARCH and SKU + # + PcdDict = tdict(True, 4) + PcdSet = set() + # Find out all possible PCD candidates for self._Arch + RecordList = self._RawData[Type, self._Arch] + for TokenSpaceGuid, PcdCName, Setting, Arch, SkuName, Dummy3, Dummy4 in RecordList: + PcdSet.add((PcdCName, TokenSpaceGuid)) + PcdDict[Arch, SkuName, PcdCName, TokenSpaceGuid] = Setting + # Remove redundant PCD candidates, per the ARCH and SKU + for PcdCName, TokenSpaceGuid in PcdSet: + ValueList = ['', '', ''] + Setting = PcdDict[self._Arch, self.SkuName, PcdCName, TokenSpaceGuid] + if Setting == None: + continue + TokenList = Setting.split(TAB_VALUE_SPLIT) + ValueList[0:len(TokenList)] = TokenList + PcdValue, DatumType, MaxDatumSize = ValueList + + SkuInfo = SkuInfoClass(self.SkuName, self.SkuIds[self.SkuName], '', '', '', '', '', PcdValue) + Pcds[PcdCName, TokenSpaceGuid] = PcdClassObject( + PcdCName, + TokenSpaceGuid, + self._PCD_TYPE_STRING_[Type], + DatumType, + PcdValue, + '', + MaxDatumSize, + {self.SkuName : SkuInfo}, + None + ) + return Pcds + + ## Retrieve dynamic HII PCD settings + # + # @param Type PCD type + # + # @retval a dict object contains settings of given PCD type + # + def _GetDynamicHiiPcd(self, Type): + Pcds = {} + # + # tdict is a special dict kind of type, used for selecting correct + # PCD settings for certain ARCH and SKU + # + PcdDict = tdict(True, 4) + PcdSet = set() + RecordList = self._RawData[Type, self._Arch] + # Find out all possible PCD candidates for self._Arch + for TokenSpaceGuid, PcdCName, Setting, Arch, SkuName, Dummy3, Dummy4 in RecordList: + PcdSet.add((PcdCName, TokenSpaceGuid)) + PcdDict[Arch, SkuName, PcdCName, TokenSpaceGuid] = Setting + # Remove redundant PCD candidates, per the ARCH and SKU + for PcdCName, TokenSpaceGuid in PcdSet: + ValueList = ['', '', '', ''] + Setting = PcdDict[self._Arch, self.SkuName, PcdCName, TokenSpaceGuid] + if Setting == None: + continue + TokenList = Setting.split(TAB_VALUE_SPLIT) + ValueList[0:len(TokenList)] = TokenList + VariableName, VariableGuid, VariableOffset, DefaultValue = ValueList + SkuInfo = SkuInfoClass(self.SkuName, self.SkuIds[self.SkuName], VariableName, VariableGuid, VariableOffset, DefaultValue) + Pcds[PcdCName, TokenSpaceGuid] = PcdClassObject( + PcdCName, + TokenSpaceGuid, + self._PCD_TYPE_STRING_[Type], + '', + DefaultValue, + '', + '', + {self.SkuName : SkuInfo}, + None + ) + return Pcds + + ## Retrieve dynamic VPD PCD settings + # + # @param Type PCD type + # + # @retval a dict object contains settings of given PCD type + # + def _GetDynamicVpdPcd(self, Type): + Pcds = {} + # + # tdict is a special dict kind of type, used for selecting correct + # PCD settings for certain ARCH and SKU + # + PcdDict = tdict(True, 4) + PcdSet = set() + # Find out all possible PCD candidates for self._Arch + RecordList = self._RawData[Type, self._Arch] + for TokenSpaceGuid, PcdCName, Setting, Arch, SkuName, Dummy3, Dummy4 in RecordList: + PcdSet.add((PcdCName, TokenSpaceGuid)) + PcdDict[Arch, SkuName, PcdCName, TokenSpaceGuid] = Setting + # Remove redundant PCD candidates, per the ARCH and SKU + for PcdCName, TokenSpaceGuid in PcdSet: + ValueList = ['', ''] + Setting = PcdDict[self._Arch, self.SkuName, PcdCName, TokenSpaceGuid] + if Setting == None: + continue + TokenList = Setting.split(TAB_VALUE_SPLIT) + ValueList[0:len(TokenList)] = TokenList + VpdOffset, MaxDatumSize = ValueList + + SkuInfo = SkuInfoClass(self.SkuName, self.SkuIds[self.SkuName], '', '', '', '', VpdOffset) + Pcds[PcdCName, TokenSpaceGuid] = PcdClassObject( + PcdCName, + TokenSpaceGuid, + self._PCD_TYPE_STRING_[Type], + '', + '', + '', + MaxDatumSize, + {self.SkuName : SkuInfo}, + None + ) + return Pcds + + ## Add external modules + # + # The external modules are mostly those listed in FDF file, which don't + # need "build". + # + # @param FilePath The path of module description file + # + def AddModule(self, FilePath): + FilePath = NormPath(FilePath) + if FilePath not in self.Modules: + Module = ModuleBuildClassObject() + Module.MetaFile = FilePath + self.Modules.append(Module) + + ## Add external PCDs + # + # The external PCDs are mostly those listed in FDF file to specify address + # or offset information. + # + # @param Name Name of the PCD + # @param Guid Token space guid of the PCD + # @param Value Value of the PCD + # + def AddPcd(self, Name, Guid, Value): + if (Name, Guid) not in self.Pcds: + self.Pcds[Name, Guid] = PcdClassObject(Name, Guid, '', '', '', '', '', {}, None) + self.Pcds[Name, Guid].DefaultValue = Value + + Arch = property(_GetArch, _SetArch) + Platform = property(_GetPlatformName) + PlatformName = property(_GetPlatformName) + Guid = property(_GetFileGuid) + Version = property(_GetVersion) + DscSpecification = property(_GetDscSpec) + OutputDirectory = property(_GetOutpuDir) + SupArchList = property(_GetSupArch) + BuildTargets = property(_GetBuildTarget) + SkuName = property(_GetSkuName, _SetSkuName) + FlashDefinition = property(_GetFdfFile) + BuildNumber = property(_GetBuildNumber) + MakefileName = property(_GetMakefileName) + BsBaseAddress = property(_GetBsBaseAddress) + RtBaseAddress = property(_GetRtBaseAddress) + LoadFixAddress = property(_GetLoadFixAddress) + + SkuIds = property(_GetSkuIds) + Modules = property(_GetModules) + LibraryInstances = property(_GetLibraryInstances) + LibraryClasses = property(_GetLibraryClasses) + Pcds = property(_GetPcds) + BuildOptions = property(_GetBuildOptions) + +## Platform build information from DSC file +# +# This class is used to retrieve information stored in database and convert them +# into PackageBuildClassObject form for easier use for AutoGen. +# +class DecBuildData(PackageBuildClassObject): + # dict used to convert PCD type in database to string used by build tool + _PCD_TYPE_STRING_ = { + MODEL_PCD_FIXED_AT_BUILD : "FixedAtBuild", + MODEL_PCD_PATCHABLE_IN_MODULE : "PatchableInModule", + MODEL_PCD_FEATURE_FLAG : "FeatureFlag", + MODEL_PCD_DYNAMIC : "Dynamic", + MODEL_PCD_DYNAMIC_DEFAULT : "Dynamic", + MODEL_PCD_DYNAMIC_HII : "DynamicHii", + MODEL_PCD_DYNAMIC_VPD : "DynamicVpd", + MODEL_PCD_DYNAMIC_EX : "DynamicEx", + MODEL_PCD_DYNAMIC_EX_DEFAULT : "DynamicEx", + MODEL_PCD_DYNAMIC_EX_HII : "DynamicExHii", + MODEL_PCD_DYNAMIC_EX_VPD : "DynamicExVpd", + } + + # dict used to convert part of [Defines] to members of DecBuildData directly + _PROPERTY_ = { + # + # Required Fields + # + TAB_DEC_DEFINES_PACKAGE_NAME : "_PackageName", + TAB_DEC_DEFINES_PACKAGE_GUID : "_Guid", + TAB_DEC_DEFINES_PACKAGE_VERSION : "_Version", + } + + + ## Constructor of DecBuildData + # + # Initialize object of DecBuildData + # + # @param FilePath The path of package description file + # @param RawData The raw data of DEC file + # @param BuildDataBase Database used to retrieve module information + # @param Arch The target architecture + # @param Platform (not used for DecBuildData) + # @param Macros Macros used for replacement in DSC file + # + def __init__(self, File, RawData, BuildDataBase, Arch='COMMON', Platform='DUMMY', Macros={}): + self.MetaFile = File + self._PackageDir = File.Dir + self._RawData = RawData + self._Bdb = BuildDataBase + self._Arch = Arch + self._Macros = Macros + self._Clear() + + ## XXX[key] = value + def __setitem__(self, key, value): + self.__dict__[self._PROPERTY_[key]] = value + + ## value = XXX[key] + def __getitem__(self, key): + return self.__dict__[self._PROPERTY_[key]] + + ## "in" test support + def __contains__(self, key): + return key in self._PROPERTY_ + + ## Set all internal used members of DecBuildData to None + def _Clear(self): + self._Header = None + self._PackageName = None + self._Guid = None + self._Version = None + self._Protocols = None + self._Ppis = None + self._Guids = None + self._Includes = None + self._LibraryClasses = None + self._Pcds = None + + ## Get architecture + def _GetArch(self): + return self._Arch + + ## Set architecture + # + # Changing the default ARCH to another may affect all other information + # because all information in a platform may be ARCH-related. That's + # why we need to clear all internal used members, in order to cause all + # information to be re-retrieved. + # + # @param Value The value of ARCH + # + def _SetArch(self, Value): + if self._Arch == Value: + return + self._Arch = Value + self._Clear() + + ## Retrieve all information in [Defines] section + # + # (Retriving all [Defines] information in one-shot is just to save time.) + # + def _GetHeaderInfo(self): + RecordList = self._RawData[MODEL_META_DATA_HEADER] + for Record in RecordList: + Name = Record[0] + if Name in self: + self[Name] = Record[1] + self._Header = 'DUMMY' + + ## Retrieve package name + def _GetPackageName(self): + if self._PackageName == None: + if self._Header == None: + self._GetHeaderInfo() + if self._PackageName == None: + EdkLogger.error("build", ATTRIBUTE_NOT_AVAILABLE, "No PACKAGE_NAME", File=self.MetaFile) + return self._PackageName + + ## Retrieve file guid + def _GetFileGuid(self): + if self._Guid == None: + if self._Header == None: + self._GetHeaderInfo() + if self._Guid == None: + EdkLogger.error("build", ATTRIBUTE_NOT_AVAILABLE, "No PACKAGE_GUID", File=self.MetaFile) + return self._Guid + + ## Retrieve package version + def _GetVersion(self): + if self._Version == None: + if self._Header == None: + self._GetHeaderInfo() + if self._Version == None: + self._Version = '' + return self._Version + + ## Retrieve protocol definitions (name/value pairs) + def _GetProtocol(self): + if self._Protocols == None: + # + # tdict is a special kind of dict, used for selecting correct + # protocol defition for given ARCH + # + ProtocolDict = tdict(True) + NameList = [] + # find out all protocol definitions for specific and 'common' arch + RecordList = self._RawData[MODEL_EFI_PROTOCOL, self._Arch] + for Name, Guid, Dummy, Arch, ID, LineNo in RecordList: + if Name not in NameList: + NameList.append(Name) + ProtocolDict[Arch, Name] = Guid + # use sdict to keep the order + self._Protocols = sdict() + for Name in NameList: + # + # limit the ARCH to self._Arch, if no self._Arch found, tdict + # will automatically turn to 'common' ARCH for trying + # + self._Protocols[Name] = ProtocolDict[self._Arch, Name] + return self._Protocols + + ## Retrieve PPI definitions (name/value pairs) + def _GetPpi(self): + if self._Ppis == None: + # + # tdict is a special kind of dict, used for selecting correct + # PPI defition for given ARCH + # + PpiDict = tdict(True) + NameList = [] + # find out all PPI definitions for specific arch and 'common' arch + RecordList = self._RawData[MODEL_EFI_PPI, self._Arch] + for Name, Guid, Dummy, Arch, ID, LineNo in RecordList: + if Name not in NameList: + NameList.append(Name) + PpiDict[Arch, Name] = Guid + # use sdict to keep the order + self._Ppis = sdict() + for Name in NameList: + # + # limit the ARCH to self._Arch, if no self._Arch found, tdict + # will automatically turn to 'common' ARCH for trying + # + self._Ppis[Name] = PpiDict[self._Arch, Name] + return self._Ppis + + ## Retrieve GUID definitions (name/value pairs) + def _GetGuid(self): + if self._Guids == None: + # + # tdict is a special kind of dict, used for selecting correct + # GUID defition for given ARCH + # + GuidDict = tdict(True) + NameList = [] + # find out all protocol definitions for specific and 'common' arch + RecordList = self._RawData[MODEL_EFI_GUID, self._Arch] + for Name, Guid, Dummy, Arch, ID, LineNo in RecordList: + if Name not in NameList: + NameList.append(Name) + GuidDict[Arch, Name] = Guid + # use sdict to keep the order + self._Guids = sdict() + for Name in NameList: + # + # limit the ARCH to self._Arch, if no self._Arch found, tdict + # will automatically turn to 'common' ARCH for trying + # + self._Guids[Name] = GuidDict[self._Arch, Name] + return self._Guids + + ## Retrieve public include paths declared in this package + def _GetInclude(self): + if self._Includes == None: + self._Includes = [] + RecordList = self._RawData[MODEL_EFI_INCLUDE, self._Arch] + Macros = {"EDK_SOURCE":GlobalData.gEcpSource, "EFI_SOURCE":GlobalData.gEfiSource} + Macros.update(self._Macros) + for Record in RecordList: + File = PathClass(NormPath(Record[0], Macros), self._PackageDir, Arch=self._Arch) + LineNo = Record[-1] + # validate the path + ErrorCode, ErrorInfo = File.Validate() + if ErrorCode != 0: + EdkLogger.error('build', ErrorCode, ExtraData=ErrorInfo, File=self.MetaFile, Line=LineNo) + + # avoid duplicate include path + if File not in self._Includes: + self._Includes.append(File) + return self._Includes + + ## Retrieve library class declarations (not used in build at present) + def _GetLibraryClass(self): + if self._LibraryClasses == None: + # + # tdict is a special kind of dict, used for selecting correct + # library class declaration for given ARCH + # + LibraryClassDict = tdict(True) + LibraryClassSet = set() + RecordList = self._RawData[MODEL_EFI_LIBRARY_CLASS, self._Arch] + Macros = {"EDK_SOURCE":GlobalData.gEcpSource, "EFI_SOURCE":GlobalData.gEfiSource} + Macros.update(self._Macros) + for LibraryClass, File, Dummy, Arch, ID, LineNo in RecordList: + File = PathClass(NormPath(File, Macros), self._PackageDir, Arch=self._Arch) + # check the file validation + ErrorCode, ErrorInfo = File.Validate() + if ErrorCode != 0: + EdkLogger.error('build', ErrorCode, ExtraData=ErrorInfo, File=self.MetaFile, Line=LineNo) + LibraryClassSet.add(LibraryClass) + LibraryClassDict[Arch, LibraryClass] = File + self._LibraryClasses = sdict() + for LibraryClass in LibraryClassSet: + self._LibraryClasses[LibraryClass] = LibraryClassDict[self._Arch, LibraryClass] + return self._LibraryClasses + + ## Retrieve PCD declarations + def _GetPcds(self): + if self._Pcds == None: + self._Pcds = {} + self._Pcds.update(self._GetPcd(MODEL_PCD_FIXED_AT_BUILD)) + self._Pcds.update(self._GetPcd(MODEL_PCD_PATCHABLE_IN_MODULE)) + self._Pcds.update(self._GetPcd(MODEL_PCD_FEATURE_FLAG)) + self._Pcds.update(self._GetPcd(MODEL_PCD_DYNAMIC)) + self._Pcds.update(self._GetPcd(MODEL_PCD_DYNAMIC_EX)) + return self._Pcds + + ## Retrieve PCD declarations for given type + def _GetPcd(self, Type): + Pcds = {} + # + # tdict is a special kind of dict, used for selecting correct + # PCD declaration for given ARCH + # + PcdDict = tdict(True, 3) + # for summarizing PCD + PcdSet = set() + # find out all PCDs of the 'type' + RecordList = self._RawData[Type, self._Arch] + for TokenSpaceGuid, PcdCName, Setting, Arch, Dummy1, Dummy2 in RecordList: + PcdDict[Arch, PcdCName, TokenSpaceGuid] = Setting + PcdSet.add((PcdCName, TokenSpaceGuid)) + + for PcdCName, TokenSpaceGuid in PcdSet: + ValueList = ['', '', ''] + # + # limit the ARCH to self._Arch, if no self._Arch found, tdict + # will automatically turn to 'common' ARCH and try again + # + Setting = PcdDict[self._Arch, PcdCName, TokenSpaceGuid] + if Setting == None: + continue + TokenList = Setting.split(TAB_VALUE_SPLIT) + ValueList[0:len(TokenList)] = TokenList + DefaultValue, DatumType, TokenNumber = ValueList + Pcds[PcdCName, TokenSpaceGuid, self._PCD_TYPE_STRING_[Type]] = PcdClassObject( + PcdCName, + TokenSpaceGuid, + self._PCD_TYPE_STRING_[Type], + DatumType, + DefaultValue, + TokenNumber, + '', + {}, + None + ) + return Pcds + + + Arch = property(_GetArch, _SetArch) + PackageName = property(_GetPackageName) + Guid = property(_GetFileGuid) + Version = property(_GetVersion) + + Protocols = property(_GetProtocol) + Ppis = property(_GetPpi) + Guids = property(_GetGuid) + Includes = property(_GetInclude) + LibraryClasses = property(_GetLibraryClass) + Pcds = property(_GetPcds) + +## Module build information from INF file +# +# This class is used to retrieve information stored in database and convert them +# into ModuleBuildClassObject form for easier use for AutoGen. +# +class InfBuildData(ModuleBuildClassObject): + # dict used to convert PCD type in database to string used by build tool + _PCD_TYPE_STRING_ = { + MODEL_PCD_FIXED_AT_BUILD : "FixedAtBuild", + MODEL_PCD_PATCHABLE_IN_MODULE : "PatchableInModule", + MODEL_PCD_FEATURE_FLAG : "FeatureFlag", + MODEL_PCD_DYNAMIC : "Dynamic", + MODEL_PCD_DYNAMIC_DEFAULT : "Dynamic", + MODEL_PCD_DYNAMIC_HII : "DynamicHii", + MODEL_PCD_DYNAMIC_VPD : "DynamicVpd", + MODEL_PCD_DYNAMIC_EX : "DynamicEx", + MODEL_PCD_DYNAMIC_EX_DEFAULT : "DynamicEx", + MODEL_PCD_DYNAMIC_EX_HII : "DynamicExHii", + MODEL_PCD_DYNAMIC_EX_VPD : "DynamicExVpd", + } + + # dict used to convert part of [Defines] to members of InfBuildData directly + _PROPERTY_ = { + # + # Required Fields + # + TAB_INF_DEFINES_BASE_NAME : "_BaseName", + TAB_INF_DEFINES_FILE_GUID : "_Guid", + TAB_INF_DEFINES_MODULE_TYPE : "_ModuleType", + # + # Optional Fields + # + TAB_INF_DEFINES_INF_VERSION : "_AutoGenVersion", + TAB_INF_DEFINES_COMPONENT_TYPE : "_ComponentType", + TAB_INF_DEFINES_MAKEFILE_NAME : "_MakefileName", + #TAB_INF_DEFINES_CUSTOM_MAKEFILE : "_CustomMakefile", + TAB_INF_DEFINES_VERSION_NUMBER : "_Version", + TAB_INF_DEFINES_VERSION_STRING : "_Version", + TAB_INF_DEFINES_VERSION : "_Version", + TAB_INF_DEFINES_PCD_IS_DRIVER : "_PcdIsDriver", + TAB_INF_DEFINES_SHADOW : "_Shadow", + + TAB_COMPONENTS_SOURCE_OVERRIDE_PATH : "_SourceOverridePath", + } + + # dict used to convert Component type to Module type + _MODULE_TYPE_ = { + "LIBRARY" : "BASE", + "SECURITY_CORE" : "SEC", + "PEI_CORE" : "PEI_CORE", + "COMBINED_PEIM_DRIVER" : "PEIM", + "PIC_PEIM" : "PEIM", + "RELOCATABLE_PEIM" : "PEIM", + "PE32_PEIM" : "PEIM", + "BS_DRIVER" : "DXE_DRIVER", + "RT_DRIVER" : "DXE_RUNTIME_DRIVER", + "SAL_RT_DRIVER" : "DXE_SAL_DRIVER", + "DXE_SMM_DRIVER" : "DXE_SMM_DRIVER", + # "SMM_DRIVER" : "DXE_SMM_DRIVER", + # "BS_DRIVER" : "DXE_SMM_DRIVER", + # "BS_DRIVER" : "UEFI_DRIVER", + "APPLICATION" : "UEFI_APPLICATION", + "LOGO" : "BASE", + } + + # regular expression for converting XXX_FLAGS in [nmake] section to new type + _NMAKE_FLAG_PATTERN_ = re.compile("(?:EBC_)?([A-Z]+)_(?:STD_|PROJ_|ARCH_)?FLAGS(?:_DLL|_ASL|_EXE)?", re.UNICODE) + # dict used to convert old tool name used in [nmake] section to new ones + _TOOL_CODE_ = { + "C" : "CC", + "LIB" : "SLINK", + "LINK" : "DLINK", + } + + + ## Constructor of DscBuildData + # + # Initialize object of DscBuildData + # + # @param FilePath The path of platform description file + # @param RawData The raw data of DSC file + # @param BuildDataBase Database used to retrieve module/package information + # @param Arch The target architecture + # @param Platform The name of platform employing this module + # @param Macros Macros used for replacement in DSC file + # + def __init__(self, FilePath, RawData, BuildDatabase, Arch='COMMON', Platform='COMMON', Macros={}): + self.MetaFile = FilePath + self._ModuleDir = FilePath.Dir + self._RawData = RawData + self._Bdb = BuildDatabase + self._Arch = Arch + self._Platform = 'COMMON' + self._Macros = Macros + self._SourceOverridePath = None + if FilePath.Key in GlobalData.gOverrideDir: + self._SourceOverridePath = GlobalData.gOverrideDir[FilePath.Key] + self._Clear() + + ## XXX[key] = value + def __setitem__(self, key, value): + self.__dict__[self._PROPERTY_[key]] = value + + ## value = XXX[key] + def __getitem__(self, key): + return self.__dict__[self._PROPERTY_[key]] + + ## "in" test support + def __contains__(self, key): + return key in self._PROPERTY_ + + ## Set all internal used members of InfBuildData to None + def _Clear(self): + self._Header_ = None + self._AutoGenVersion = None + self._BaseName = None + self._ModuleType = None + self._ComponentType = None + self._BuildType = None + self._Guid = None + self._Version = None + self._PcdIsDriver = None + self._BinaryModule = None + self._Shadow = None + self._MakefileName = None + self._CustomMakefile = None + self._Specification = None + self._LibraryClass = None + self._ModuleEntryPointList = None + self._ModuleUnloadImageList = None + self._ConstructorList = None + self._DestructorList = None + self._Defs = None + self._Binaries = None + self._Sources = None + self._LibraryClasses = None + self._Libraries = None + self._Protocols = None + self._Ppis = None + self._Guids = None + self._Includes = None + self._Packages = None + self._Pcds = None + self._BuildOptions = None + self._Depex = None + self._DepexExpression = None + #self._SourceOverridePath = None + + ## Get architecture + def _GetArch(self): + return self._Arch + + ## Set architecture + # + # Changing the default ARCH to another may affect all other information + # because all information in a platform may be ARCH-related. That's + # why we need to clear all internal used members, in order to cause all + # information to be re-retrieved. + # + # @param Value The value of ARCH + # + def _SetArch(self, Value): + if self._Arch == Value: + return + self._Arch = Value + self._Clear() + + ## Return the name of platform employing this module + def _GetPlatform(self): + return self._Platform + + ## Change the name of platform employing this module + # + # Changing the default name of platform to another may affect some information + # because they may be PLATFORM-related. That's why we need to clear all internal + # used members, in order to cause all information to be re-retrieved. + # + def _SetPlatform(self, Value): + if self._Platform == Value: + return + self._Platform = Value + self._Clear() + + ## Retrieve all information in [Defines] section + # + # (Retriving all [Defines] information in one-shot is just to save time.) + # + def _GetHeaderInfo(self): + RecordList = self._RawData[MODEL_META_DATA_HEADER, self._Arch, self._Platform] + for Record in RecordList: + Record = ReplaceMacros(Record, GlobalData.gEdkGlobal, False) + Name = Record[0] + # items defined _PROPERTY_ don't need additional processing + if Name in self: + self[Name] = Record[1] + # some special items in [Defines] section need special treatment + elif Name in ('EFI_SPECIFICATION_VERSION', 'UEFI_SPECIFICATION_VERSION'): + if self._Specification == None: + self._Specification = sdict() + self._Specification['UEFI_SPECIFICATION_VERSION'] = Record[1] + elif Name == 'EDK_RELEASE_VERSION': + if self._Specification == None: + self._Specification = sdict() + self._Specification[Name] = Record[1] + elif Name == 'PI_SPECIFICATION_VERSION': + if self._Specification == None: + self._Specification = sdict() + self._Specification[Name] = Record[1] + elif Name == 'LIBRARY_CLASS': + if self._LibraryClass == None: + self._LibraryClass = [] + ValueList = GetSplitValueList(Record[1]) + LibraryClass = ValueList[0] + if len(ValueList) > 1: + SupModuleList = GetSplitValueList(ValueList[1], ' ') + else: + SupModuleList = SUP_MODULE_LIST + self._LibraryClass.append(LibraryClassObject(LibraryClass, SupModuleList)) + elif Name == 'ENTRY_POINT': + if self._ModuleEntryPointList == None: + self._ModuleEntryPointList = [] + self._ModuleEntryPointList.append(Record[1]) + elif Name == 'UNLOAD_IMAGE': + if self._ModuleUnloadImageList == None: + self._ModuleUnloadImageList = [] + if Record[1] == '': + continue + self._ModuleUnloadImageList.append(Record[1]) + elif Name == 'CONSTRUCTOR': + if self._ConstructorList == None: + self._ConstructorList = [] + if Record[1] == '': + continue + self._ConstructorList.append(Record[1]) + elif Name == 'DESTRUCTOR': + if self._DestructorList == None: + self._DestructorList = [] + if Record[1] == '': + continue + self._DestructorList.append(Record[1]) + elif Name == TAB_INF_DEFINES_CUSTOM_MAKEFILE: + TokenList = GetSplitValueList(Record[1]) + if self._CustomMakefile == None: + self._CustomMakefile = {} + if len(TokenList) < 2: + self._CustomMakefile['MSFT'] = TokenList[0] + self._CustomMakefile['GCC'] = TokenList[0] + else: + if TokenList[0] not in ['MSFT', 'GCC']: + EdkLogger.error("build", FORMAT_NOT_SUPPORTED, + "No supported family [%s]" % TokenList[0], + File=self.MetaFile, Line=Record[-1]) + self._CustomMakefile[TokenList[0]] = TokenList[1] + else: + if self._Defs == None: + self._Defs = sdict() + self._Defs[Name] = Record[1] + + # + # Retrieve information in sections specific to R8.x modules + # + if self._AutoGenVersion >= 0x00010005: # _AutoGenVersion may be None, which is less than anything + if not self._ModuleType: + EdkLogger.error("build", ATTRIBUTE_NOT_AVAILABLE, + "MODULE_TYPE is not given", File=self.MetaFile) + if (self._Specification == None) or (not 'PI_SPECIFICATION_VERSION' in self._Specification) or (self._Specification['PI_SPECIFICATION_VERSION'] < 0x0001000A): + if self._ModuleType == SUP_MODULE_SMM_CORE: + EdkLogger.error("build", FORMAT_NOT_SUPPORTED, "SMM_CORE module type can't be used in the module with PI_SPECIFICATION_VERSION less than 0x0001000A", File=self.MetaFile) + if self._Defs and 'PCI_DEVICE_ID' in self._Defs and 'PCI_VENDOR_ID' in self._Defs \ + and 'PCI_CLASS_CODE' in self._Defs: + self._BuildType = 'UEFI_OPTIONROM' + elif self._Defs and 'UEFI_HII_RESOURCE_SECTION' in self._Defs \ + and self._Defs['UEFI_HII_RESOURCE_SECTION'] == 'TRUE': + self._BuildType = 'UEFI_HII' + else: + self._BuildType = self._ModuleType.upper() + else: + self._BuildType = self._ComponentType.upper() + if not self._ComponentType: + EdkLogger.error("build", ATTRIBUTE_NOT_AVAILABLE, + "COMPONENT_TYPE is not given", File=self.MetaFile) + if self._ComponentType in self._MODULE_TYPE_: + self._ModuleType = self._MODULE_TYPE_[self._ComponentType] + if self._ComponentType == 'LIBRARY': + self._LibraryClass = [LibraryClassObject(self._BaseName, SUP_MODULE_LIST)] + # make use some [nmake] section macros + RecordList = self._RawData[MODEL_META_DATA_NMAKE, self._Arch, self._Platform] + for Name,Value,Dummy,Arch,Platform,ID,LineNo in RecordList: + Value = Value.replace('$(PROCESSOR)', self._Arch) + Name = Name.replace('$(PROCESSOR)', self._Arch) + Name, Value = ReplaceMacros((Name, Value), GlobalData.gEdkGlobal, True) + if Name == "IMAGE_ENTRY_POINT": + if self._ModuleEntryPointList == None: + self._ModuleEntryPointList = [] + self._ModuleEntryPointList.append(Value) + elif Name == "DPX_SOURCE": + Macros = {"EDK_SOURCE":GlobalData.gEcpSource, "EFI_SOURCE":GlobalData.gEfiSource} + Macros.update(self._Macros) + File = PathClass(NormPath(Value, Macros), self._ModuleDir, Arch=self._Arch) + # check the file validation + ErrorCode, ErrorInfo = File.Validate(".dxs", CaseSensitive=False) + if ErrorCode != 0: + EdkLogger.error('build', ErrorCode, ExtraData=ErrorInfo, + File=self.MetaFile, Line=LineNo) + if self.Sources == None: + self._Sources = [] + self._Sources.append(File) + else: + ToolList = self._NMAKE_FLAG_PATTERN_.findall(Name) + if len(ToolList) == 0 or len(ToolList) != 1: + pass +# EdkLogger.warn("build", "Don't know how to do with macro [%s]" % Name, +# File=self.MetaFile, Line=LineNo) + else: + if self._BuildOptions == None: + self._BuildOptions = sdict() + + if ToolList[0] in self._TOOL_CODE_: + Tool = self._TOOL_CODE_[ToolList[0]] + else: + Tool = ToolList[0] + ToolChain = "*_*_*_%s_FLAGS" % Tool + ToolChainFamily = 'MSFT' # R8.x only support MSFT tool chain + #ignore not replaced macros in value + ValueList = GetSplitValueList(' ' + Value, '/D') + Dummy = ValueList[0] + for Index in range(1, len(ValueList)): + if ValueList[Index][-1] == '=' or ValueList[Index] == '': + continue + Dummy = Dummy + ' /D ' + ValueList[Index] + Value = Dummy.strip() + if (ToolChainFamily, ToolChain) not in self._BuildOptions: + self._BuildOptions[ToolChainFamily, ToolChain] = Value + else: + OptionString = self._BuildOptions[ToolChainFamily, ToolChain] + self._BuildOptions[ToolChainFamily, ToolChain] = OptionString + " " + Value + # set _Header to non-None in order to avoid database re-querying + self._Header_ = 'DUMMY' + + ## Retrieve file version + def _GetInfVersion(self): + if self._AutoGenVersion == None: + if self._Header_ == None: + self._GetHeaderInfo() + if self._AutoGenVersion == None: + self._AutoGenVersion = 0x00010000 + return self._AutoGenVersion + + ## Retrieve BASE_NAME + def _GetBaseName(self): + if self._BaseName == None: + if self._Header_ == None: + self._GetHeaderInfo() + if self._BaseName == None: + EdkLogger.error('build', ATTRIBUTE_NOT_AVAILABLE, "No BASE_NAME name", File=self.MetaFile) + return self._BaseName + + ## Retrieve MODULE_TYPE + def _GetModuleType(self): + if self._ModuleType == None: + if self._Header_ == None: + self._GetHeaderInfo() + if self._ModuleType == None: + self._ModuleType = 'BASE' + if self._ModuleType not in SUP_MODULE_LIST: + self._ModuleType = "USER_DEFINED" + return self._ModuleType + + ## Retrieve COMPONENT_TYPE + def _GetComponentType(self): + if self._ComponentType == None: + if self._Header_ == None: + self._GetHeaderInfo() + if self._ComponentType == None: + self._ComponentType = 'USER_DEFINED' + return self._ComponentType + + ## Retrieve "BUILD_TYPE" + def _GetBuildType(self): + if self._BuildType == None: + if self._Header_ == None: + self._GetHeaderInfo() + if not self._BuildType: + self._BuildType = "BASE" + return self._BuildType + + ## Retrieve file guid + def _GetFileGuid(self): + if self._Guid == None: + if self._Header_ == None: + self._GetHeaderInfo() + if self._Guid == None: + self._Guid = '00000000-0000-0000-000000000000' + return self._Guid + + ## Retrieve module version + def _GetVersion(self): + if self._Version == None: + if self._Header_ == None: + self._GetHeaderInfo() + if self._Version == None: + self._Version = '0.0' + return self._Version + + ## Retrieve PCD_IS_DRIVER + def _GetPcdIsDriver(self): + if self._PcdIsDriver == None: + if self._Header_ == None: + self._GetHeaderInfo() + if self._PcdIsDriver == None: + self._PcdIsDriver = '' + return self._PcdIsDriver + + ## Retrieve SHADOW + def _GetShadow(self): + if self._Shadow == None: + if self._Header_ == None: + self._GetHeaderInfo() + if self._Shadow != None and self._Shadow.upper() == 'TRUE': + self._Shadow = True + else: + self._Shadow = False + return self._Shadow + + ## Retrieve CUSTOM_MAKEFILE + def _GetMakefile(self): + if self._CustomMakefile == None: + if self._Header_ == None: + self._GetHeaderInfo() + if self._CustomMakefile == None: + self._CustomMakefile = {} + return self._CustomMakefile + + ## Retrieve EFI_SPECIFICATION_VERSION + def _GetSpec(self): + if self._Specification == None: + if self._Header_ == None: + self._GetHeaderInfo() + if self._Specification == None: + self._Specification = {} + return self._Specification + + ## Retrieve LIBRARY_CLASS + def _GetLibraryClass(self): + if self._LibraryClass == None: + if self._Header_ == None: + self._GetHeaderInfo() + if self._LibraryClass == None: + self._LibraryClass = [] + return self._LibraryClass + + ## Retrieve ENTRY_POINT + def _GetEntryPoint(self): + if self._ModuleEntryPointList == None: + if self._Header_ == None: + self._GetHeaderInfo() + if self._ModuleEntryPointList == None: + self._ModuleEntryPointList = [] + return self._ModuleEntryPointList + + ## Retrieve UNLOAD_IMAGE + def _GetUnloadImage(self): + if self._ModuleUnloadImageList == None: + if self._Header_ == None: + self._GetHeaderInfo() + if self._ModuleUnloadImageList == None: + self._ModuleUnloadImageList = [] + return self._ModuleUnloadImageList + + ## Retrieve CONSTRUCTOR + def _GetConstructor(self): + if self._ConstructorList == None: + if self._Header_ == None: + self._GetHeaderInfo() + if self._ConstructorList == None: + self._ConstructorList = [] + return self._ConstructorList + + ## Retrieve DESTRUCTOR + def _GetDestructor(self): + if self._DestructorList == None: + if self._Header_ == None: + self._GetHeaderInfo() + if self._DestructorList == None: + self._DestructorList = [] + return self._DestructorList + + ## Retrieve definies other than above ones + def _GetDefines(self): + if self._Defs == None: + if self._Header_ == None: + self._GetHeaderInfo() + if self._Defs == None: + self._Defs = sdict() + return self._Defs + + ## Retrieve binary files + def _GetBinaryFiles(self): + if self._Binaries == None: + self._Binaries = [] + RecordList = self._RawData[MODEL_EFI_BINARY_FILE, self._Arch, self._Platform] + Macros = {"EDK_SOURCE":GlobalData.gEcpSource, "EFI_SOURCE":GlobalData.gEfiSource, 'PROCESSOR':self._Arch} + Macros.update(self._Macros) + for Record in RecordList: + Record = ReplaceMacros(Record, GlobalData.gEdkGlobal, False) + FileType = Record[0] + LineNo = Record[-1] + Target = 'COMMON' + FeatureFlag = [] + if Record[2]: + TokenList = GetSplitValueList(Record[2], TAB_VALUE_SPLIT) + if TokenList: + Target = TokenList[0] + if len(TokenList) > 1: + FeatureFlag = Record[1:] + + File = PathClass(NormPath(Record[1], Macros), self._ModuleDir, '', FileType, True, self._Arch, '', Target) + # check the file validation + ErrorCode, ErrorInfo = File.Validate() + if ErrorCode != 0: + EdkLogger.error('build', ErrorCode, ExtraData=ErrorInfo, File=self.MetaFile, Line=LineNo) + self._Binaries.append(File) + return self._Binaries + + ## Retrieve source files + def _GetSourceFiles(self): + if self._Sources == None: + self._Sources = [] + RecordList = self._RawData[MODEL_EFI_SOURCE_FILE, self._Arch, self._Platform] + Macros = {"EDK_SOURCE":GlobalData.gEcpSource, "EFI_SOURCE":GlobalData.gEfiSource, 'PROCESSOR':self._Arch} + Macros.update(self._Macros) + for Record in RecordList: + Record = ReplaceMacros(Record, GlobalData.gEdkGlobal, False) + LineNo = Record[-1] + ToolChainFamily = Record[1] + TagName = Record[2] + ToolCode = Record[3] + FeatureFlag = Record[4] + if self._AutoGenVersion < 0x00010005: + # old module source files (R8) + File = PathClass(NormPath(Record[0], Macros), self._ModuleDir, self._SourceOverridePath, + '', False, self._Arch, ToolChainFamily, '', TagName, ToolCode) + # check the file validation + ErrorCode, ErrorInfo = File.Validate(CaseSensitive=False) + if ErrorCode != 0: + if File.Ext.lower() == '.h': + EdkLogger.warn('build', 'Include file not found', ExtraData=ErrorInfo, + File=self.MetaFile, Line=LineNo) + continue + else: + EdkLogger.error('build', ErrorCode, ExtraData=File, File=self.MetaFile, Line=LineNo) + else: + File = PathClass(NormPath(Record[0], Macros), self._ModuleDir, '', + '', False, self._Arch, ToolChainFamily, '', TagName, ToolCode) + # check the file validation + ErrorCode, ErrorInfo = File.Validate() + if ErrorCode != 0: + EdkLogger.error('build', ErrorCode, ExtraData=ErrorInfo, File=self.MetaFile, Line=LineNo) + + self._Sources.append(File) + return self._Sources + + ## Retrieve library classes employed by this module + def _GetLibraryClassUses(self): + if self._LibraryClasses == None: + self._LibraryClasses = sdict() + RecordList = self._RawData[MODEL_EFI_LIBRARY_CLASS, self._Arch, self._Platform] + for Record in RecordList: + Record = ReplaceMacros(Record, GlobalData.gEdkGlobal, False) + Lib = Record[0] + Instance = Record[1] + if Instance != None and Instance != '': + Instance = NormPath(Instance, self._Macros) + self._LibraryClasses[Lib] = Instance + return self._LibraryClasses + + ## Retrieve library names (for R8.x style of modules) + def _GetLibraryNames(self): + if self._Libraries == None: + self._Libraries = [] + RecordList = self._RawData[MODEL_EFI_LIBRARY_INSTANCE, self._Arch, self._Platform] + for Record in RecordList: + # in case of name with '.lib' extension, which is unusual in R8.x inf + Record = ReplaceMacros(Record, GlobalData.gEdkGlobal, False) + LibraryName = os.path.splitext(Record[0])[0] + if LibraryName not in self._Libraries: + self._Libraries.append(LibraryName) + return self._Libraries + + ## Retrieve protocols consumed/produced by this module + def _GetProtocols(self): + if self._Protocols == None: + self._Protocols = sdict() + RecordList = self._RawData[MODEL_EFI_PROTOCOL, self._Arch, self._Platform] + for Record in RecordList: + CName = Record[0] + Value = ProtocolValue(CName, self.Packages) + if Value == None: + PackageList = "\n\t".join([str(P) for P in self.Packages]) + EdkLogger.error('build', RESOURCE_NOT_AVAILABLE, + "Value of Protocol [%s] is not found under [Protocols] section in" % CName, + ExtraData=PackageList, File=self.MetaFile, Line=Record[-1]) + self._Protocols[CName] = Value + return self._Protocols + + ## Retrieve PPIs consumed/produced by this module + def _GetPpis(self): + if self._Ppis == None: + self._Ppis = sdict() + RecordList = self._RawData[MODEL_EFI_PPI, self._Arch, self._Platform] + for Record in RecordList: + CName = Record[0] + Value = PpiValue(CName, self.Packages) + if Value == None: + PackageList = "\n\t".join([str(P) for P in self.Packages]) + EdkLogger.error('build', RESOURCE_NOT_AVAILABLE, + "Value of PPI [%s] is not found under [Ppis] section in " % CName, + ExtraData=PackageList, File=self.MetaFile, Line=Record[-1]) + self._Ppis[CName] = Value + return self._Ppis + + ## Retrieve GUIDs consumed/produced by this module + def _GetGuids(self): + if self._Guids == None: + self._Guids = sdict() + RecordList = self._RawData[MODEL_EFI_GUID, self._Arch, self._Platform] + for Record in RecordList: + CName = Record[0] + Value = GuidValue(CName, self.Packages) + if Value == None: + PackageList = "\n\t".join([str(P) for P in self.Packages]) + EdkLogger.error('build', RESOURCE_NOT_AVAILABLE, + "Value of Guid [%s] is not found under [Guids] section in" % CName, + ExtraData=PackageList, File=self.MetaFile, Line=Record[-1]) + self._Guids[CName] = Value + return self._Guids + + ## Retrieve include paths necessary for this module (for R8.x style of modules) + def _GetIncludes(self): + if self._Includes == None: + self._Includes = [] + if self._SourceOverridePath: + self._Includes.append(self._SourceOverridePath) + RecordList = self._RawData[MODEL_EFI_INCLUDE, self._Arch, self._Platform] + # [includes] section must be used only in old (R8.x) inf file + if self.AutoGenVersion >= 0x00010005 and len(RecordList) > 0: + EdkLogger.error('build', FORMAT_NOT_SUPPORTED, "No [include] section allowed", + File=self.MetaFile, Line=RecordList[0][-1]-1) + for Record in RecordList: + Record = ReplaceMacros(Record, GlobalData.gEdkGlobal, False) + Record[0] = Record[0].replace('$(PROCESSOR)', self._Arch) + Record[0] = ReplaceMacro(Record[0], {'EFI_SOURCE' : GlobalData.gEfiSource}, False) + if Record[0].find('EDK_SOURCE') > -1: + File = NormPath(ReplaceMacro(Record[0], {'EDK_SOURCE' : GlobalData.gEcpSource}, False), self._Macros) + if File[0] == '.': + File = os.path.join(self._ModuleDir, File) + else: + File = os.path.join(GlobalData.gWorkspace, File) + File = RealPath(os.path.normpath(File)) + if File: + self._Includes.append(File) + + #TRICK: let compiler to choose correct header file + File = NormPath(ReplaceMacro(Record[0], {'EDK_SOURCE' : GlobalData.gEdkSource}, False), self._Macros) + if File[0] == '.': + File = os.path.join(self._ModuleDir, File) + else: + File = os.path.join(GlobalData.gWorkspace, File) + File = RealPath(os.path.normpath(File)) + if File: + self._Includes.append(File) + else: + File = NormPath(Record[0], self._Macros) + if File[0] == '.': + File = os.path.join(self._ModuleDir, File) + else: + File = os.path.join(GlobalData.gWorkspace, File) + File = RealPath(os.path.normpath(File)) + if File: + self._Includes.append(File) + return self._Includes + + ## Retrieve packages this module depends on + def _GetPackages(self): + if self._Packages == None: + self._Packages = [] + RecordList = self._RawData[MODEL_META_DATA_PACKAGE, self._Arch, self._Platform] + Macros = {"EDK_SOURCE":GlobalData.gEcpSource, "EFI_SOURCE":GlobalData.gEfiSource} + Macros.update(self._Macros) + for Record in RecordList: + File = PathClass(NormPath(Record[0], Macros), GlobalData.gWorkspace, Arch=self._Arch) + LineNo = Record[-1] + # check the file validation + ErrorCode, ErrorInfo = File.Validate('.dec') + if ErrorCode != 0: + EdkLogger.error('build', ErrorCode, ExtraData=ErrorInfo, File=self.MetaFile, Line=LineNo) + # parse this package now. we need it to get protocol/ppi/guid value + Package = self._Bdb[File, self._Arch] + self._Packages.append(Package) + return self._Packages + + ## Retrieve PCDs used in this module + def _GetPcds(self): + if self._Pcds == None: + self._Pcds = {} + self._Pcds.update(self._GetPcd(MODEL_PCD_FIXED_AT_BUILD)) + self._Pcds.update(self._GetPcd(MODEL_PCD_PATCHABLE_IN_MODULE)) + self._Pcds.update(self._GetPcd(MODEL_PCD_FEATURE_FLAG)) + self._Pcds.update(self._GetPcd(MODEL_PCD_DYNAMIC)) + self._Pcds.update(self._GetPcd(MODEL_PCD_DYNAMIC_EX)) + return self._Pcds + + ## Retrieve build options specific to this module + def _GetBuildOptions(self): + if self._BuildOptions == None: + self._BuildOptions = sdict() + RecordList = self._RawData[MODEL_META_DATA_BUILD_OPTION, self._Arch, self._Platform] + for Record in RecordList: + ToolChainFamily = Record[0] + ToolChain = Record[1] + Option = Record[2] + if (ToolChainFamily, ToolChain) not in self._BuildOptions: + self._BuildOptions[ToolChainFamily, ToolChain] = Option + else: + # concatenate the option string if they're for the same tool + OptionString = self._BuildOptions[ToolChainFamily, ToolChain] + self._BuildOptions[ToolChainFamily, ToolChain] = OptionString + " " + Option + return self._BuildOptions + + ## Retrieve depedency expression + def _GetDepex(self): + if self._Depex == None: + self._Depex = tdict(False, 2) + RecordList = self._RawData[MODEL_EFI_DEPEX, self._Arch] + + # PEIM and DXE drivers must have a valid [Depex] section + if len(self.LibraryClass) == 0 and len(RecordList) == 0: + if self.ModuleType == 'DXE_DRIVER' or self.ModuleType == 'PEIM' or self.ModuleType == 'DXE_SMM_DRIVER' or \ + self.ModuleType == 'DXE_SAL_DRIVER' or self.ModuleType == 'DXE_RUNTIME_DRIVER': + EdkLogger.error('build', RESOURCE_NOT_AVAILABLE, "No [Depex] section or no valid expression in [Depex] section for [%s] module" \ + % self.ModuleType, File=self.MetaFile) + + Depex = {} + for Record in RecordList: + Record = ReplaceMacros(Record, GlobalData.gEdkGlobal, False) + Arch = Record[3] + ModuleType = Record[4] + TokenList = Record[0].split() + if (Arch, ModuleType) not in Depex: + Depex[Arch, ModuleType] = [] + DepexList = Depex[Arch, ModuleType] + for Token in TokenList: + if Token in DEPEX_SUPPORTED_OPCODE: + DepexList.append(Token) + elif Token.endswith(".inf"): # module file name + ModuleFile = os.path.normpath(Token) + Module = self.BuildDatabase[ModuleFile] + if Module == None: + EdkLogger.error('build', RESOURCE_NOT_AVAILABLE, "Module is not found in active platform", + ExtraData=Token, File=self.MetaFile, Line=Record[-1]) + DepexList.append(Module.Guid) + else: + # get the GUID value now + Value = ProtocolValue(Token, self.Packages) + if Value == None: + Value = PpiValue(Token, self.Packages) + if Value == None: + Value = GuidValue(Token, self.Packages) + if Value == None: + PackageList = "\n\t".join([str(P) for P in self.Packages]) + EdkLogger.error('build', RESOURCE_NOT_AVAILABLE, + "Value of [%s] is not found in" % Token, + ExtraData=PackageList, File=self.MetaFile, Line=Record[-1]) + DepexList.append(Value) + for Arch, ModuleType in Depex: + self._Depex[Arch, ModuleType] = Depex[Arch, ModuleType] + return self._Depex + + ## Retrieve depedency expression + def _GetDepexExpression(self): + if self._DepexExpression == None: + self._DepexExpression = tdict(False, 2) + RecordList = self._RawData[MODEL_EFI_DEPEX, self._Arch] + DepexExpression = {} + for Record in RecordList: + Record = ReplaceMacros(Record, GlobalData.gEdkGlobal, False) + Arch = Record[3] + ModuleType = Record[4] + TokenList = Record[0].split() + if (Arch, ModuleType) not in DepexExpression: + DepexExpression[Arch, ModuleType] = '' + for Token in TokenList: + DepexExpression[Arch, ModuleType] = DepexExpression[Arch, ModuleType] + Token.strip() + ' ' + for Arch, ModuleType in DepexExpression: + self._DepexExpression[Arch, ModuleType] = DepexExpression[Arch, ModuleType] + return self._DepexExpression + + ## Retrieve PCD for given type + def _GetPcd(self, Type): + Pcds = {} + PcdDict = tdict(True, 4) + PcdSet = set() + RecordList = self._RawData[Type, self._Arch, self._Platform] + for TokenSpaceGuid, PcdCName, Setting, Arch, Platform, Dummy1, LineNo in RecordList: + PcdDict[Arch, Platform, PcdCName, TokenSpaceGuid] = (Setting, LineNo) + PcdSet.add((PcdCName, TokenSpaceGuid)) + # get the guid value + if TokenSpaceGuid not in self.Guids: + Value = GuidValue(TokenSpaceGuid, self.Packages) + if Value == None: + PackageList = "\n\t".join([str(P) for P in self.Packages]) + EdkLogger.error('build', RESOURCE_NOT_AVAILABLE, + "Value of Guid [%s] is not found under [Guids] section in" % TokenSpaceGuid, + ExtraData=PackageList, File=self.MetaFile, Line=LineNo) + self.Guids[TokenSpaceGuid] = Value + + # resolve PCD type, value, datum info, etc. by getting its definition from package + for PcdCName, TokenSpaceGuid in PcdSet: + ValueList = ['', ''] + Setting, LineNo = PcdDict[self._Arch, self.Platform, PcdCName, TokenSpaceGuid] + if Setting == None: + continue + TokenList = Setting.split(TAB_VALUE_SPLIT) + ValueList[0:len(TokenList)] = TokenList + DefaultValue = ValueList[0] + Pcd = PcdClassObject( + PcdCName, + TokenSpaceGuid, + '', + '', + DefaultValue, + '', + '', + {}, + self.Guids[TokenSpaceGuid] + ) + + # get necessary info from package declaring this PCD + for Package in self.Packages: + # + # 'dynamic' in INF means its type is determined by platform; + # if platform doesn't give its type, use 'lowest' one in the + # following order, if any + # + # "FixedAtBuild", "PatchableInModule", "FeatureFlag", "Dynamic", "DynamicEx" + # + PcdType = self._PCD_TYPE_STRING_[Type] + if Type in [MODEL_PCD_DYNAMIC, MODEL_PCD_DYNAMIC_EX]: + Pcd.Pending = True + for T in ["FixedAtBuild", "PatchableInModule", "FeatureFlag", "Dynamic", "DynamicEx"]: + if (PcdCName, TokenSpaceGuid, T) in Package.Pcds: + PcdType = T + break + else: + Pcd.Pending = False + + if (PcdCName, TokenSpaceGuid, PcdType) in Package.Pcds: + PcdInPackage = Package.Pcds[PcdCName, TokenSpaceGuid, PcdType] + Pcd.Type = PcdType + Pcd.TokenValue = PcdInPackage.TokenValue + Pcd.DatumType = PcdInPackage.DatumType + Pcd.MaxDatumSize = PcdInPackage.MaxDatumSize + Pcd.InfDefaultValue = Pcd.DefaultValue + if Pcd.DefaultValue in [None, '']: + Pcd.DefaultValue = PcdInPackage.DefaultValue + break + else: + EdkLogger.error( + 'build', + PARSER_ERROR, + "PCD [%s.%s] in [%s] is not found in dependent packages:" % (TokenSpaceGuid, PcdCName, self.MetaFile), + File =self.MetaFile, Line=LineNo, + ExtraData="\t%s" % '\n\t'.join([str(P) for P in self.Packages]) + ) + Pcds[PcdCName, TokenSpaceGuid] = Pcd + return Pcds + + Arch = property(_GetArch, _SetArch) + Platform = property(_GetPlatform, _SetPlatform) + + AutoGenVersion = property(_GetInfVersion) + BaseName = property(_GetBaseName) + ModuleType = property(_GetModuleType) + ComponentType = property(_GetComponentType) + BuildType = property(_GetBuildType) + Guid = property(_GetFileGuid) + Version = property(_GetVersion) + PcdIsDriver = property(_GetPcdIsDriver) + Shadow = property(_GetShadow) + CustomMakefile = property(_GetMakefile) + Specification = property(_GetSpec) + LibraryClass = property(_GetLibraryClass) + ModuleEntryPointList = property(_GetEntryPoint) + ModuleUnloadImageList = property(_GetUnloadImage) + ConstructorList = property(_GetConstructor) + DestructorList = property(_GetDestructor) + Defines = property(_GetDefines) + + Binaries = property(_GetBinaryFiles) + Sources = property(_GetSourceFiles) + LibraryClasses = property(_GetLibraryClassUses) + Libraries = property(_GetLibraryNames) + Protocols = property(_GetProtocols) + Ppis = property(_GetPpis) + Guids = property(_GetGuids) + Includes = property(_GetIncludes) + Packages = property(_GetPackages) + Pcds = property(_GetPcds) + BuildOptions = property(_GetBuildOptions) + Depex = property(_GetDepex) + DepexExpression = property(_GetDepexExpression) + +## Database +# +# This class defined the build databse for all modules, packages and platform. +# It will call corresponding parser for the given file if it cannot find it in +# the database. +# +# @param DbPath Path of database file +# @param GlobalMacros Global macros used for replacement during file parsing +# @prarm RenewDb=False Create new database file if it's already there +# +class WorkspaceDatabase(object): + # file parser + _FILE_PARSER_ = { + MODEL_FILE_INF : InfParser, + MODEL_FILE_DEC : DecParser, + MODEL_FILE_DSC : DscParser, + MODEL_FILE_FDF : None, #FdfParser, + MODEL_FILE_CIF : None + } + + # file table + _FILE_TABLE_ = { + MODEL_FILE_INF : ModuleTable, + MODEL_FILE_DEC : PackageTable, + MODEL_FILE_DSC : PlatformTable, + } + + # default database file path + _DB_PATH_ = "Conf/.cache/build.db" + + # + # internal class used for call corresponding file parser and caching the result + # to avoid unnecessary re-parsing + # + class BuildObjectFactory(object): + _FILE_TYPE_ = { + ".inf" : MODEL_FILE_INF, + ".dec" : MODEL_FILE_DEC, + ".dsc" : MODEL_FILE_DSC, + ".fdf" : MODEL_FILE_FDF, + } + + # convert to xxxBuildData object + _GENERATOR_ = { + MODEL_FILE_INF : InfBuildData, + MODEL_FILE_DEC : DecBuildData, + MODEL_FILE_DSC : DscBuildData, + MODEL_FILE_FDF : None #FlashDefTable, + } + + _CACHE_ = {} # (FilePath, Arch) : + + # constructor + def __init__(self, WorkspaceDb): + self.WorkspaceDb = WorkspaceDb + + # key = (FilePath, Arch='COMMON') + def __contains__(self, Key): + FilePath = Key[0] + Arch = 'COMMON' + if len(Key) > 1: + Arch = Key[1] + return (FilePath, Arch) in self._CACHE_ + + # key = (FilePath, Arch='COMMON') + def __getitem__(self, Key): + FilePath = Key[0] + Arch = 'COMMON' + Platform = 'COMMON' + if len(Key) > 1: + Arch = Key[1] + if len(Key) > 2: + Platform = Key[2] + + # if it's generated before, just return the cached one + Key = (FilePath, Arch) + if Key in self._CACHE_: + return self._CACHE_[Key] + + # check file type + Ext = FilePath.Ext.lower() + if Ext not in self._FILE_TYPE_: + return None + FileType = self._FILE_TYPE_[Ext] + if FileType not in self._GENERATOR_: + return None + + # get table for current file + MetaFile = self.WorkspaceDb[FilePath, FileType, self.WorkspaceDb._GlobalMacros] + BuildObject = self._GENERATOR_[FileType]( + FilePath, + MetaFile, + self, + Arch, + Platform, + self.WorkspaceDb._GlobalMacros, + ) + self._CACHE_[Key] = BuildObject + return BuildObject + + # placeholder for file format conversion + class TransformObjectFactory: + def __init__(self, WorkspaceDb): + self.WorkspaceDb = WorkspaceDb + + # key = FilePath, Arch + def __getitem__(self, Key): + pass + + ## Constructor of WorkspaceDatabase + # + # @param DbPath Path of database file + # @param GlobalMacros Global macros used for replacement during file parsing + # @prarm RenewDb=False Create new database file if it's already there + # + def __init__(self, DbPath, GlobalMacros={}, RenewDb=False): + self._GlobalMacros = GlobalMacros + + if DbPath == None or DbPath == '': + DbPath = os.path.normpath(os.path.join(GlobalData.gWorkspace, self._DB_PATH_)) + + # don't create necessary path for db in memory + if DbPath != ':memory:': + DbDir = os.path.split(DbPath)[0] + if not os.path.exists(DbDir): + os.makedirs(DbDir) + + # remove db file in case inconsistency between db and file in file system + if self._CheckWhetherDbNeedRenew(RenewDb, DbPath): + os.remove(DbPath) + + # create db with optimized parameters + self.Conn = sqlite3.connect(DbPath, isolation_level='DEFERRED') + self.Conn.execute("PRAGMA synchronous=OFF") + self.Conn.execute("PRAGMA temp_store=MEMORY") + self.Conn.execute("PRAGMA count_changes=OFF") + self.Conn.execute("PRAGMA cache_size=8192") + #self.Conn.execute("PRAGMA page_size=8192") + + # to avoid non-ascii character conversion issue + self.Conn.text_factory = str + self.Cur = self.Conn.cursor() + + # create table for internal uses + self.TblDataModel = TableDataModel(self.Cur) + self.TblFile = TableFile(self.Cur) + + # conversion object for build or file format conversion purpose + self.BuildObject = WorkspaceDatabase.BuildObjectFactory(self) + self.TransformObject = WorkspaceDatabase.TransformObjectFactory(self) + + ## Check whether workspace database need to be renew. + # The renew reason maybe: + # 1) If user force to renew; + # 2) If user do not force renew, and + # a) If the time of last modified python source is newer than database file; + # b) If the time of last modified frozen executable file is newer than database file; + # + # @param force User force renew database + # @param DbPath The absolute path of workspace database file + # + # @return Bool value for whether need renew workspace databse + # + def _CheckWhetherDbNeedRenew (self, force, DbPath): + DbDir = os.path.split(DbPath)[0] + MacroFilePath = os.path.normpath(os.path.join(DbDir, "build.mac")) + MacroMatch = False + if os.path.exists(MacroFilePath) and os.path.isfile(MacroFilePath): + LastMacros = None + try: + f = open(MacroFilePath,'r') + LastMacros = pickle.load(f) + f.close() + except IOError: + pass + except: + f.close() + + if LastMacros != None and type(LastMacros) is DictType: + if LastMacros == self._GlobalMacros: + MacroMatch = True + for Macro in LastMacros.keys(): + if not (Macro in self._GlobalMacros and LastMacros[Macro] == self._GlobalMacros[Macro]): + MacroMatch = False; + break; + + if not MacroMatch: + # save command line macros to file + try: + f = open(MacroFilePath,'w') + pickle.dump(self._GlobalMacros, f, 2) + f.close() + except IOError: + pass + except: + f.close() + + force = True + + # if database does not exist, we need do nothing + if not os.path.exists(DbPath): return False + + # if user force to renew database, then not check whether database is out of date + if force: return True + + # + # Check the time of last modified source file or build.exe + # if is newer than time of database, then database need to be re-created. + # + timeOfToolModified = 0 + if hasattr(sys, "frozen"): + exePath = os.path.abspath(sys.executable) + timeOfToolModified = os.stat(exePath).st_mtime + else: + curPath = os.path.dirname(__file__) # curPath is the path of WorkspaceDatabase.py + rootPath = os.path.split(curPath)[0] # rootPath is root path of python source, such as /BaseTools/Source/Python + if rootPath == "" or rootPath == None: + EdkLogger.verbose("\nFail to find the root path of build.exe or python sources, so can not \ +determine whether database file is out of date!\n") + + # walk the root path of source or build's binary to get the time last modified. + + for root, dirs, files in os.walk (rootPath): + for dir in dirs: + # bypass source control folder + if dir.lower() in [".svn", "_svn", "cvs"]: + dirs.remove(dir) + + for file in files: + ext = os.path.splitext(file)[1] + if ext.lower() == ".py": # only check .py files + fd = os.stat(os.path.join(root, file)) + if timeOfToolModified < fd.st_mtime: + timeOfToolModified = fd.st_mtime + if timeOfToolModified > os.stat(DbPath).st_mtime: + EdkLogger.verbose("\nWorkspace database is out of data!") + return True + + return False + + ## Initialize build database + def InitDatabase(self): + EdkLogger.verbose("\nInitialize build database started ...") + + # + # Create new tables + # + self.TblDataModel.Create(False) + self.TblFile.Create(False) + + # + # Initialize table DataModel + # + self.TblDataModel.InitTable() + EdkLogger.verbose("Initialize build database ... DONE!") + + ## Query a table + # + # @param Table: The instance of the table to be queried + # + def QueryTable(self, Table): + Table.Query() + + ## Close entire database + # + # Commit all first + # Close the connection and cursor + # + def Close(self): + self.Conn.commit() + self.Cur.close() + self.Conn.close() + + ## Get unique file ID for the gvien file + def GetFileId(self, FilePath): + return self.TblFile.GetFileId(FilePath) + + ## Get file type value for the gvien file ID + def GetFileType(self, FileId): + return self.TblFile.GetFileType(FileId) + + ## Get time stamp stored in file table + def GetTimeStamp(self, FileId): + return self.TblFile.GetFileTimeStamp(FileId) + + ## Update time stamp in file table + def SetTimeStamp(self, FileId, TimeStamp): + return self.TblFile.SetFileTimeStamp(FileId, TimeStamp) + + ## Check if a table integrity flag exists or not + def CheckIntegrity(self, TableName): + try: + Result = self.Cur.execute("select min(ID) from %s" % (TableName)).fetchall() + if Result[0][0] != -1: + return False + except: + return False + return True + + ## Compose table name for given file type and file ID + def GetTableName(self, FileType, FileId): + return "_%s_%s" % (FileType, FileId) + + ## Return a temp table containing all content of the given file + # + # @param FileInfo The tuple containing path and type of a file + # + def __getitem__(self, FileInfo): + FilePath, FileType, Macros = FileInfo + if FileType not in self._FILE_TABLE_: + return None + + # flag used to indicate if it's parsed or not + FilePath = str(FilePath) + Parsed = False + FileId = self.GetFileId(FilePath) + if FileId != None: + TimeStamp = os.stat(FilePath)[8] + TableName = self.GetTableName(FileType, FileId) + if TimeStamp != self.GetTimeStamp(FileId): + # update the timestamp in database + self.SetTimeStamp(FileId, TimeStamp) + else: + # if the table exists and is integrity, don't parse it + Parsed = self.CheckIntegrity(TableName) + else: + FileId = self.TblFile.InsertFile(FilePath, FileType) + TableName = self.GetTableName(FileType, FileId) + + FileTable = self._FILE_TABLE_[FileType](self.Cur, TableName, FileId) + FileTable.Create(not Parsed) + Parser = self._FILE_PARSER_[FileType](FilePath, FileType, FileTable, Macros) + # set the "Finished" flag in parser in order to avoid re-parsing (if parsed) + Parser.Finished = Parsed + return Parser + + ## Summarize all packages in the database + def _GetPackageList(self): + PackageList = [] + for Module in self.ModuleList: + for Package in Module.Packages: + if Package not in PackageList: + PackageList.append(Package) + return PackageList + + ## Summarize all platforms in the database + def _GetPlatformList(self): + PlatformList = [] + for PlatformFile in self.TblFile.GetFileList(MODEL_FILE_DSC): + try: + Platform = self.BuildObject[PathClass(PlatformFile), 'COMMON'] + except: + Platform = None + if Platform != None: + PlatformList.append(Platform) + return PlatformList + + ## Summarize all modules in the database + def _GetModuleList(self): + ModuleList = [] + for ModuleFile in self.TblFile.GetFileList(MODEL_FILE_INF): + try: + Module = self.BuildObject[PathClass(ModuleFile), 'COMMON'] + except: + Module = None + if Module != None: + ModuleList.append(Module) + return ModuleList + + PlatformList = property(_GetPlatformList) + PackageList = property(_GetPackageList) + ModuleList = property(_GetModuleList) + +## +# +# This acts like the main() function for the script, unless it is 'import'ed into another +# script. +# +if __name__ == '__main__': + pass + diff --git a/BaseTools/Source/Python/Workspace/__init__.py b/BaseTools/Source/Python/Workspace/__init__.py index e69de29bb2..27a969bb27 100644 --- a/BaseTools/Source/Python/Workspace/__init__.py +++ b/BaseTools/Source/Python/Workspace/__init__.py @@ -0,0 +1,15 @@ +## @file +# Python 'Workspace' package initialization file. +# +# This file is required to make Python interpreter treat the directory +# as containing package. +# +# Copyright (c) 2008 - 2010, Intel Corporation
    +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# diff --git a/BaseTools/Source/Python/build/BuildReport.py b/BaseTools/Source/Python/build/BuildReport.py new file mode 100644 index 0000000000..23e819e5ca --- /dev/null +++ b/BaseTools/Source/Python/build/BuildReport.py @@ -0,0 +1,1423 @@ +## @file +# Routines for generating build report. +# +# This module contains the functionality to generate build report after +# build all target completes successfully. +# +# Copyright (c) 2010, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# + +## Import Modules +# +import os +import re +import platform +import textwrap +import traceback +import sys +from datetime import datetime +from Common import EdkLogger +from Common.Misc import GuidStructureByteArrayToGuidString +from Common.Misc import GuidStructureStringToGuidString +from Common.InfClassObject import gComponentType2ModuleType +from Common.BuildToolError import FILE_OPEN_FAILURE +from Common.BuildToolError import FILE_WRITE_FAILURE +from Common.BuildToolError import CODE_ERROR + + +## Pattern to extract contents in EDK DXS files +gDxsDependencyPattern = re.compile(r"DEPENDENCY_START(.+)DEPENDENCY_END", re.DOTALL) + +## Pattern to find total FV total size, occupied size in flash report intermediate file +gFvTotalSizePattern = re.compile(r"EFI_FV_TOTAL_SIZE = (0x[0-9a-fA-F]+)") +gFvTakenSizePattern = re.compile(r"EFI_FV_TAKEN_SIZE = (0x[0-9a-fA-F]+)") + +## Pattern to find module size and time stamp in module summary report intermediate file +gModuleSizePattern = re.compile(r"MODULE_SIZE = (\d+)") +gTimeStampPattern = re.compile(r"TIME_STAMP = (\d+)") + +## Pattern to find GUID value in flash description files +gPcdGuidPattern = re.compile(r"PCD\((\w+)[.](\w+)\)") + +## Pattern to collect offset, GUID value pair in the flash report intermediate file +gOffsetGuidPattern = re.compile(r"(0x[0-9A-Fa-f]+) ([-A-Fa-f0-9]+)") + +## Pattern to find module base address and entry point in fixed flash map file +gModulePattern = r"\n[-\w]+\s*\(([^,]+),\s*BaseAddress=%(Address)s,\s*EntryPoint=%(Address)s\)\s*\(GUID=([-0-9A-Fa-f]+)[^)]*\)" +gMapFileItemPattern = re.compile(gModulePattern % {"Address" : "(-?0[xX][0-9A-Fa-f]+)"}) + +## Pattern to find all module referenced header files in source files +gIncludePattern = re.compile(r'#include\s*["<]([^">]+)[">]') +gIncludePattern2 = re.compile(r"#include\s+EFI_([A-Z_]+)\s*[(]\s*(\w+)\s*[)]") + +## Pattern to find the entry point for EDK module using EDKII Glue library +gGlueLibEntryPoint = re.compile(r"__EDKII_GLUE_MODULE_ENTRY_POINT__\s*=\s*(\w+)") + +## Tags for section start, end and separator +gSectionStart = ">" + "=" * 118 + "<" +gSectionEnd = "<" + "=" * 118 + ">" + "\n" +gSectionSep = "=" * 120 + +## Tags for subsection start, end and separator +gSubSectionStart = ">" + "-" * 118 + "<" +gSubSectionEnd = "<" + "-" * 118 + ">" +gSubSectionSep = "-" * 120 + +## The look up table to map PCD type to pair of report display type and DEC type +gPcdTypeMap = { + 'FixedAtBuild' : ('FIXED', 'FixedAtBuild'), + 'PatchableInModule': ('PATCH', 'PatchableInModule'), + 'FeatureFlag' : ('FLAG', 'FeatureFlag'), + 'Dynamic' : ('DYN', 'Dynamic'), + 'DynamicHii' : ('DYNHII', 'Dynamic'), + 'DynamicVpd' : ('DYNVPD', 'Dynamic'), + 'DynamicEx' : ('DEX', 'Dynamic'), + 'DynamicExHii' : ('DEXHII', 'Dynamic'), + 'DynamicExVpd' : ('DEXVPD', 'Dynamic'), + } + +## The look up table to map module type to driver type +gDriverTypeMap = { + 'SEC' : '0x3 (SECURITY_CORE)', + 'PEI_CORE' : '0x4 (PEI_CORE)', + 'PEIM' : '0x6 (PEIM)', + 'DXE_CORE' : '0x5 (DXE_CORE)', + 'DXE_DRIVER' : '0x7 (DRIVER)', + 'DXE_SAL_DRIVER' : '0x7 (DRIVER)', + 'DXE_SMM_DRIVER' : '0x7 (DRIVER)', + 'DXE_RUNTIME_DRIVER': '0x7 (DRIVER)', + 'UEFI_DRIVER' : '0x7 (DRIVER)', + 'UEFI_APPLICATION' : '0x9 (APPLICATION)', + 'SMM_CORE' : '0xD (SMM_CORE)', + 'SMM_DRIVER' : '0xA (SMM)', # Extension of module type to support PI 1.1 SMM drivers + } + +## +# Writes a string to the file object. +# +# This function writes a string to the file object and a new line is appended +# afterwards. It may optionally wraps the string for better readability. +# +# @File The file object to write +# @String The string to be written to the file +# @Wrapper Indicates whether to wrap the string +# +def FileWrite(File, String, Wrapper=False): + if Wrapper: + String = textwrap.fill(String, 120) + File.write(String + "\r\n") + +## +# Find all the header file that the module source directly includes. +# +# This function scans source code to find all header files the module may +# include. This is not accurate but very effective to find all the header +# file the module might include with #include statement. +# +# @Source The source file name +# @IncludePathList The list of include path to find the source file. +# @IncludeFiles The dictionary of current found include files. +# +def FindIncludeFiles(Source, IncludePathList, IncludeFiles): + FileContents = open(Source).read() + # + # Find header files with pattern #include "XXX.h" or #include + # + for Match in gIncludePattern.finditer(FileContents): + FileName = Match.group(1).strip() + for Dir in [os.path.dirname(Source)] + IncludePathList: + FullFileName = os.path.normpath(os.path.join(Dir, FileName)) + if os.path.exists(FullFileName): + IncludeFiles[FullFileName.lower().replace("\\", "/")] = FullFileName + break + + # + # Find header files with pattern like #include EFI_PPI_CONSUMER(XXX) + # + for Match in gIncludePattern2.finditer(FileContents): + Key = Match.group(2) + Type = Match.group(1) + if "ARCH_PROTOCOL" in Type: + FileName = "ArchProtocol/%(Key)s/%(Key)s.h" % {"Key" : Key} + elif "PROTOCOL" in Type: + FileName = "Protocol/%(Key)s/%(Key)s.h" % {"Key" : Key} + elif "PPI" in Type: + FileName = "Ppi/%(Key)s/%(Key)s.h" % {"Key" : Key} + elif "GUID" in Type: + FileName = "Guid/%(Key)s/%(Key)s.h" % {"Key" : Key} + else: + continue + for Dir in IncludePathList: + FullFileName = os.path.normpath(os.path.join(Dir, FileName)) + if os.path.exists(FullFileName): + IncludeFiles[FullFileName.lower().replace("\\", "/")] = FullFileName + break + +## +# Reports library information +# +# This class reports the module library subsection in the build report file. +# +class LibraryReport(object): + ## + # Constructor function for class LibraryReport + # + # This constructor function generates LibraryReport object for + # a module. + # + # @param self The object pointer + # @param M Module context information + # + def __init__(self, M): + self.LibraryList = [] + if int(str(M.AutoGenVersion), 0) >= 0x00010005: + self._EdkIIModule = True + else: + self._EdkIIModule = False + + for Lib in M.DependentLibraryList: + LibInfPath = str(Lib) + LibClassList = Lib.LibraryClass[0].LibraryClass + LibConstructorList = Lib.ConstructorList + LibDesstructorList = Lib.DestructorList + LibDepexList = Lib.DepexExpression[M.Arch, M.ModuleType] + self.LibraryList.append((LibInfPath, LibClassList, LibConstructorList, LibDesstructorList, LibDepexList)) + + ## + # Generate report for module library information + # + # This function generates report for the module library. + # If the module is EDKII style one, the additional library class, library + # constructor/destructor and dependency expression may also be reported. + # + # @param self The object pointer + # @param File The file object for report + # + def GenerateReport(self, File): + FileWrite(File, gSubSectionStart) + FileWrite(File, "Library") + if len(self.LibraryList) > 0: + FileWrite(File, gSubSectionSep) + for LibraryItem in self.LibraryList: + LibInfPath = LibraryItem[0] + FileWrite(File, LibInfPath) + + # + # Report library class, library constructor and destructor for + # EDKII style module. + # + if self._EdkIIModule: + LibClass = LibraryItem[1] + EdkIILibInfo = "" + LibConstructor = " ".join(LibraryItem[2]) + if LibConstructor: + EdkIILibInfo += " C = " + LibConstructor + LibDestructor = " ".join(LibraryItem[3]) + if LibDestructor: + EdkIILibInfo += " D = " + LibConstructor + LibDepex = " ".join(LibraryItem[4]) + if LibDepex: + EdkIILibInfo += " Depex = " + LibDepex + if EdkIILibInfo: + FileWrite(File, "{%s: %s}" % (LibClass, EdkIILibInfo)) + else: + FileWrite(File, "{%s}" % LibClass) + + FileWrite(File, gSubSectionEnd) + +## +# Reports dependency expression information +# +# This class reports the module dependency expression subsection in the build report file. +# +class DepexReport(object): + ## + # Constructor function for class DepexReport + # + # This constructor function generates DepexReport object for + # a module. If the module source contains the DXS file (usually EDK + # style module), it uses the dependency in DXS file; otherwise, + # it uses the dependency expression from its own INF [Depex] section + # and then merges with the ones from its dependent library INF. + # + # @param self The object pointer + # @param M Module context information + # + def __init__(self, M): + self.Depex = "" + ModuleType = M.ModuleType + if not ModuleType: + ModuleType = gComponentType2ModuleType.get(M.ComponentType, "") + if ModuleType in ["SEC", "PEI_CORE", "DXE_CORE"]: + return + + for Source in M.SourceFileList: + if os.path.splitext(Source.Path)[1].lower() == ".dxs": + Match = gDxsDependencyPattern.search(open(Source.Path).read()) + if Match: + self.Depex = Match.group(1).strip() + self.Source = "DXS" + break + else: + self.Depex = M.DepexExpressionList.get(M.ModuleType, "") + self.ModuleDepex = " ".join(M.Module.DepexExpression[M.Arch, M.ModuleType]) + if not self.ModuleDepex: + self.ModuleDepex = "(None)" + + LibDepexList = [] + for Lib in M.DependentLibraryList: + LibDepex = " ".join(Lib.DepexExpression[M.Arch, M.ModuleType]).strip() + if LibDepex != "": + LibDepexList.append("(" + LibDepex + ")") + self.LibraryDepex = " AND ".join(LibDepexList) + if not self.LibraryDepex: + self.LibraryDepex = "(None)" + self.Source = "INF" + + ## + # Generate report for module dependency expression information + # + # This function generates report for the module dependency expression. + # + # @param self The object pointer + # @param File The file object for report + # + def GenerateReport(self, File): + if not self.Depex: + return + + FileWrite(File, gSubSectionStart) + FileWrite(File, "Dependency Expression (DEPEX) from %s" % self.Source) + + if self.Source == "INF": + FileWrite(File, "%s" % self.Depex, True) + FileWrite(File, gSubSectionSep) + FileWrite(File, "From Module INF: %s" % self.ModuleDepex, True) + FileWrite(File, "From Library INF: %s" % self.LibraryDepex, True) + else: + FileWrite(File, "%s" % self.Depex) + FileWrite(File, gSubSectionEnd) + +## +# Reports dependency expression information +# +# This class reports the module build flags subsection in the build report file. +# +class BuildFlagsReport(object): + ## + # Constructor function for class BuildFlagsReport + # + # This constructor function generates BuildFlagsReport object for + # a module. It reports the build tool chain tag and all relevant + # build flags to build the module. + # + # @param self The object pointer + # @param M Module context information + # + def __init__(self, M): + BuildOptions = {} + # + # Add build flags according to source file extension so that + # irrelevant ones can be filtered out. + # + for Source in M.SourceFileList: + Ext = os.path.splitext(Source.File)[1].lower() + if Ext in [".c", ".cc", ".cpp"]: + BuildOptions["CC"] = 1 + elif Ext in [".s", ".asm"]: + BuildOptions["PP"] = 1 + BuildOptions["ASM"] = 1 + elif Ext in [".vfr"]: + BuildOptions["VFRPP"] = 1 + BuildOptions["VFR"] = 1 + elif Ext in [".dxs"]: + BuildOptions["APP"] = 1 + BuildOptions["CC"] = 1 + elif Ext in [".asl"]: + BuildOptions["ASLPP"] = 1 + BuildOptions["ASL"] = 1 + elif Ext in [".aslc"]: + BuildOptions["ASLCC"] = 1 + BuildOptions["ASLDLINK"] = 1 + BuildOptions["CC"] = 1 + elif Ext in [".asm16"]: + BuildOptions["ASMLINK"] = 1 + BuildOptions["SLINK"] = 1 + BuildOptions["DLINK"] = 1 + + # + # Save module build flags. + # + self.ToolChainTag = M.ToolChain + self.BuildFlags = {} + for Tool in BuildOptions: + self.BuildFlags[Tool + "_FLAGS"] = M.BuildOption.get(Tool, {}).get("FLAGS", "") + + ## + # Generate report for module build flags information + # + # This function generates report for the module build flags expression. + # + # @param self The object pointer + # @param File The file object for report + # + def GenerateReport(self, File): + FileWrite(File, gSubSectionStart) + FileWrite(File, "Build Flags") + FileWrite(File, "Tool Chain Tag: %s" % self.ToolChainTag) + for Tool in self.BuildFlags: + FileWrite(File, gSubSectionSep) + FileWrite(File, "%s = %s" % (Tool, self.BuildFlags[Tool]), True) + + FileWrite(File, gSubSectionEnd) + + +## +# Reports individual module information +# +# This class reports the module section in the build report file. +# It comprises of module summary, module PCD, library, dependency expression, +# build flags sections. +# +class ModuleReport(object): + ## + # Constructor function for class ModuleReport + # + # This constructor function generates ModuleReport object for + # a separate module in a platform build. + # + # @param self The object pointer + # @param M Module context information + # @param ReportType The kind of report items in the final report file + # + def __init__(self, M, ReportType): + self.ModuleName = M.Module.BaseName + self.ModuleInfPath = M.MetaFile.File + self.FileGuid = M.Guid + self.Size = 0 + self.BuildTimeStamp = None + self.DriverType = "" + ModuleType = M.ModuleType + if not ModuleType: + ModuleType = gComponentType2ModuleType.get(M.ComponentType, "") + # + # If a module complies to PI 1.1, promote Module type to "SMM_DRIVER" + # + if ModuleType == "DXE_SMM_DRIVER": + PiSpec = M.Module.Specification.get("PI_SPECIFICATION_VERSION", "0x00010000") + if int(PiSpec, 0) >= 0x0001000A: + ModuleType = "SMM_DRIVER" + self.DriverType = gDriverTypeMap.get(ModuleType, "") + self.UefiSpecVersion = M.Module.Specification.get("UEFI_SPECIFICATION_VERSION", "") + self.PiSpecVersion = M.Module.Specification.get("PI_SPECIFICATION_VERSION", "") + self.PciDeviceId = M.Module.Defines.get("PCI_DEVICE_ID", "") + self.PciVendorId = M.Module.Defines.get("PCI_VENDOR_ID", "") + self.PciClassCode = M.Module.Defines.get("PCI_CLASS_CODE", "") + + self._BuildDir = M.BuildDir + self.ModulePcdSet = {} + if "PCD" in ReportType: + # + # Collect all module used PCD set: module INF referenced directly or indirectly. + # It also saves module INF default values of them in case they exist. + # + for Pcd in M.ModulePcdList + M.LibraryPcdList: + self.ModulePcdSet.setdefault((Pcd.TokenCName, Pcd.TokenSpaceGuidCName, Pcd.Type), (Pcd.InfDefaultValue, Pcd.DefaultValue)) + + self.LibraryReport = None + if "LIBRARY" in ReportType: + self.LibraryReport = LibraryReport(M) + + self.DepexReport = None + if "DEPEX" in ReportType: + self.DepexReport = DepexReport(M) + + if "BUILD_FLAGS" in ReportType: + self.BuildFlagsReport = BuildFlagsReport(M) + + + ## + # Generate report for module information + # + # This function generates report for separate module expression + # in a platform build. + # + # @param self The object pointer + # @param File The file object for report + # @param GlobalPcdReport The platform global PCD class object + # @param ReportType The kind of report items in the final report file + # + def GenerateReport(self, File, GlobalPcdReport, GlobalPredictionReport, ReportType): + FileWrite(File, gSectionStart) + + FwReportFileName = os.path.join(self._BuildDir, "DEBUG", self.ModuleName + ".txt") + if os.path.isfile(FwReportFileName): + try: + FileContents = open(FwReportFileName).read() + Match = gModuleSizePattern.search(FileContents) + if Match: + self.Size = int(Match.group(1)) + + Match = gTimeStampPattern.search(FileContents) + if Match: + self.BuildTimeStamp = datetime.fromtimestamp(int(Match.group(1))) + except IOError: + EdkLogger.warn(None, "Fail to read report file", FwReportFileName) + + FileWrite(File, "Module Summary") + FileWrite(File, "Module Name: %s" % self.ModuleName) + FileWrite(File, "Module INF Path: %s" % self.ModuleInfPath) + FileWrite(File, "File GUID: %s" % self.FileGuid) + if self.Size: + FileWrite(File, "Size: 0x%X (%.2fK)" % (self.Size, self.Size / 1024.0)) + if self.BuildTimeStamp: + FileWrite(File, "Build Time Stamp: %s" % self.BuildTimeStamp) + if self.DriverType: + FileWrite(File, "Driver Type: %s" % self.DriverType) + if self.UefiSpecVersion: + FileWrite(File, "UEFI Spec Version: %s" % self.UefiSpecVersion) + if self.PiSpecVersion: + FileWrite(File, "PI Spec Version: %s" % self.PiSpecVersion) + if self.PciDeviceId: + FileWrite(File, "PCI Device ID: %s" % self.PciDeviceId) + if self.PciVendorId: + FileWrite(File, "PCI Vendor ID: %s" % self.PciVendorId) + if self.PciClassCode: + FileWrite(File, "PCI Class Code: %s" % self.PciClassCode) + + FileWrite(File, gSectionSep) + + if "PCD" in ReportType: + GlobalPcdReport.GenerateReport(File, self.ModulePcdSet) + + if "LIBRARY" in ReportType: + self.LibraryReport.GenerateReport(File) + + if "DEPEX" in ReportType: + self.DepexReport.GenerateReport(File) + + if "BUILD_FLAGS" in ReportType: + self.BuildFlagsReport.GenerateReport(File) + + if "FIXED_ADDRESS" in ReportType and self.FileGuid: + GlobalPredictionReport.GenerateReport(File, self.FileGuid) + + FileWrite(File, gSectionEnd) + +## +# Reports platform and module PCD information +# +# This class reports the platform PCD section and module PCD subsection +# in the build report file. +# +class PcdReport(object): + ## + # Constructor function for class PcdReport + # + # This constructor function generates PcdReport object a platform build. + # It collects the whole PCD database from platform DSC files, platform + # flash description file and package DEC files. + # + # @param self The object pointer + # @param Wa Workspace context information + # + def __init__(self, Wa): + self.AllPcds = {} + self.MaxLen = 0 + if Wa.FdfProfile: + self.FdfPcdSet = Wa.FdfProfile.PcdDict + else: + self.FdfPcdSet = {} + + self.ModulePcdOverride = {} + for Pa in Wa.AutoGenObjectList: + # + # Collect all platform referenced PCDs and grouped them by PCD token space + # GUID C Names + # + for Pcd in Pa.AllPcdList: + PcdList = self.AllPcds.setdefault(Pcd.TokenSpaceGuidCName, {}).setdefault(Pcd.Type, []) + if Pcd not in PcdList: + PcdList.append(Pcd) + if len(Pcd.TokenCName) > self.MaxLen: + self.MaxLen = len(Pcd.TokenCName) + + for Module in Pa.Platform.Modules.values(): + # + # Collect module override PCDs + # + for ModulePcd in Module.M.ModulePcdList + Module.M.LibraryPcdList: + TokenCName = ModulePcd.TokenCName + TokenSpaceGuid = ModulePcd.TokenSpaceGuidCName + ModuleDefault = ModulePcd.DefaultValue + ModulePath = os.path.basename(Module.M.MetaFile.File) + self.ModulePcdOverride.setdefault((TokenCName, TokenSpaceGuid), {})[ModulePath] = ModuleDefault + + + # + # Collect PCD DEC default value. + # + self.DecPcdDefault = {} + for Package in Wa.BuildDatabase.WorkspaceDb.PackageList: + for (TokenCName, TokenSpaceGuidCName, DecType) in Package.Pcds: + DecDefaultValue = Package.Pcds[TokenCName, TokenSpaceGuidCName, DecType].DefaultValue + self.DecPcdDefault.setdefault((TokenCName, TokenSpaceGuidCName, DecType), DecDefaultValue) + # + # Collect PCDs defined in DSC common section + # + self.DscPcdDefault = {} + for Platform in Wa.BuildDatabase.WorkspaceDb.PlatformList: + for (TokenCName, TokenSpaceGuidCName) in Platform.Pcds: + DscDefaultValue = Platform.Pcds[(TokenCName, TokenSpaceGuidCName)].DefaultValue + self.DscPcdDefault[(TokenCName, TokenSpaceGuidCName)] = DscDefaultValue + + ## + # Generate report for PCD information + # + # This function generates report for separate module expression + # in a platform build. + # + # @param self The object pointer + # @param File The file object for report + # @param ModulePcdSet Set of all PCDs referenced by module or None for + # platform PCD report + # @param DscOverridePcds Module DSC override PCDs set + # + def GenerateReport(self, File, ModulePcdSet): + if ModulePcdSet == None: + # + # For platform global PCD section + # + FileWrite(File, gSectionStart) + FileWrite(File, "Platform Configuration Database Report") + FileWrite(File, " *P - Platform scoped PCD override in DSC file") + FileWrite(File, " *F - Platform scoped PCD override in FDF file") + FileWrite(File, " *M - Module scoped PCD override in DSC file") + FileWrite(File, gSectionSep) + else: + # + # For module PCD sub-section + # + FileWrite(File, gSubSectionStart) + FileWrite(File, "PCD") + FileWrite(File, gSubSectionSep) + + for Key in self.AllPcds: + # + # Group PCD by their token space GUID C Name + # + First = True + for Type in self.AllPcds[Key]: + # + # Group PCD by their usage type + # + TypeName, DecType = gPcdTypeMap.get(Type, ("", Type)) + for Pcd in self.AllPcds[Key][Type]: + # + # Get PCD default value and their override relationship + # + DecDefaultValue = self.DecPcdDefault.get((Pcd.TokenCName, Pcd.TokenSpaceGuidCName, DecType)) + DscDefaultValue = self.DscPcdDefault.get((Pcd.TokenCName, Pcd.TokenSpaceGuidCName)) + DscDefaultValue = self.FdfPcdSet.get((Pcd.TokenCName, Key), DscDefaultValue) + InfDefaultValue = None + + PcdValue = DecDefaultValue + if DscDefaultValue: + PcdValue = DscDefaultValue + if ModulePcdSet != None: + if (Pcd.TokenCName, Pcd.TokenSpaceGuidCName, Type) not in ModulePcdSet: + continue + InfDefault, PcdValue = ModulePcdSet[Pcd.TokenCName, Pcd.TokenSpaceGuidCName, Type] + if InfDefault == "": + InfDefault = None + if First: + if ModulePcdSet == None: + FileWrite(File, "") + FileWrite(File, Key) + First = False + + + if Pcd.DatumType in ('UINT8', 'UINT16', 'UINT32', 'UINT64'): + PcdValueNumber = int(PcdValue.strip(), 0) + if DecDefaultValue == None: + DecMatch = True + else: + DecDefaultValueNumber = int(DecDefaultValue.strip(), 0) + DecMatch = (DecDefaultValueNumber == PcdValueNumber) + + if InfDefaultValue == None: + InfMatch = True + else: + InfDefaultValueNumber = int(InfDefaultValue.strip(), 0) + InfMatch = (InfDefaultValueNumber == PcdValueNumber) + + if DscDefaultValue == None: + DscMatch = True + else: + DscDefaultValueNumber = int(DscDefaultValue.strip(), 0) + DscMatch = (DscDefaultValueNumber == PcdValueNumber) + else: + if DecDefaultValue == None: + DecMatch = True + else: + DecMatch = (DecDefaultValue == PcdValue) + + if InfDefaultValue == None: + InfMatch = True + else: + InfMatch = (InfDefaultValue == PcdValue) + + if DscDefaultValue == None: + DscMatch = True + else: + DscMatch = (DscDefaultValue == PcdValue) + + # + # Report PCD item according to their override relationship + # + if DecMatch and InfMatch: + FileWrite(File, ' %-*s: %6s %10s = %-22s' % (self.MaxLen, Pcd.TokenCName, TypeName, '('+Pcd.DatumType+')', PcdValue)) + else: + if DscMatch: + if (Pcd.TokenCName, Key) in self.FdfPcdSet: + FileWrite(File, ' *F %-*s: %6s %10s = %-22s' % (self.MaxLen, Pcd.TokenCName, TypeName, '('+Pcd.DatumType+')', PcdValue)) + else: + FileWrite(File, ' *P %-*s: %6s %10s = %-22s' % (self.MaxLen, Pcd.TokenCName, TypeName, '('+Pcd.DatumType+')', PcdValue)) + else: + FileWrite(File, ' *M %-*s: %6s %10s = %-22s' % (self.MaxLen, Pcd.TokenCName, TypeName, '('+Pcd.DatumType+')', PcdValue)) + + if TypeName in ('DYNHII', 'DEXHII', 'DYNVPD', 'DEXVPD'): + for SkuInfo in Pcd.SkuInfoList.values(): + if TypeName in ('DYNHII', 'DEXHII'): + FileWrite(File, '%*s: %s: %s' % (self.MaxLen + 4, SkuInfo.VariableGuid, SkuInfo.VariableName, SkuInfo.VariableOffset)) + else: + FileWrite(File, '%*s' % (self.MaxLen + 4, SkuInfo.VpdOffset)) + + if not DscMatch and DscDefaultValue != None: + FileWrite(File, ' %*s = %s' % (self.MaxLen + 19, 'DSC DEFAULT', DscDefaultValue)) + + if not InfMatch and InfDefaultValue != None: + FileWrite(File, ' %*s = %s' % (self.MaxLen + 19, 'INF DEFAULT', InfDefaultValue)) + + if not DecMatch and DecDefaultValue != None: + FileWrite(File, ' %*s = %s' % (self.MaxLen + 19, 'DEC DEFAULT', DecDefaultValue)) + + if ModulePcdSet == None: + ModuleOverride = self.ModulePcdOverride.get((Pcd.TokenCName, Pcd.TokenSpaceGuidCName), {}) + for ModulePath in ModuleOverride: + ModuleDefault = ModuleOverride[ModulePath] + if Pcd.DatumType in ('UINT8', 'UINT16', 'UINT32', 'UINT64'): + ModulePcdDefaultValueNumber = int(ModuleDefault.strip(), 0) + Match = (ModulePcdDefaultValueNumber == PcdValueNumber) + else: + Match = (ModuleDefault == PcdValue) + if Match: + continue + FileWrite(File, ' *M %-*s = %s' % (self.MaxLen + 19, ModulePath, ModuleDefault)) + + if ModulePcdSet == None: + FileWrite(File, gSectionEnd) + else: + FileWrite(File, gSubSectionEnd) + + + +## +# Reports platform and module Prediction information +# +# This class reports the platform execution order prediction section and +# module load fixed address prediction subsection in the build report file. +# +class PredictionReport(object): + ## + # Constructor function for class PredictionReport + # + # This constructor function generates PredictionReport object for the platform. + # + # @param self: The object pointer + # @param Wa Workspace context information + # + def __init__(self, Wa): + self._MapFileName = os.path.join(Wa.BuildDir, Wa.Name + ".map") + self._MapFileParsed = False + self._EotToolInvoked = False + self._FvDir = Wa.FvDir + self._EotDir = Wa.BuildDir + self._FfsEntryPoint = {} + self._GuidMap = {} + self._SourceList = [] + self.FixedMapDict = {} + self.ItemList = [] + self.MaxLen = 0 + + # + # Collect all platform reference source files and GUID C Name + # + for Pa in Wa.AutoGenObjectList: + for Module in Pa.LibraryAutoGenList + Pa.ModuleAutoGenList: + # + # Add module referenced source files + # + self._SourceList.append(str(Module)) + IncludeList = {} + for Source in Module.SourceFileList: + if os.path.splitext(str(Source))[1].lower() == ".c": + self._SourceList.append(" " + str(Source)) + FindIncludeFiles(Source.Path, Module.IncludePathList, IncludeList) + for IncludeFile in IncludeList.values(): + self._SourceList.append(" " + IncludeFile) + + for Guid in Module.PpiList: + self._GuidMap[Guid] = GuidStructureStringToGuidString(Module.PpiList[Guid]) + for Guid in Module.ProtocolList: + self._GuidMap[Guid] = GuidStructureStringToGuidString(Module.ProtocolList[Guid]) + for Guid in Module.GuidList: + self._GuidMap[Guid] = GuidStructureStringToGuidString(Module.GuidList[Guid]) + + if Module.Guid and not Module.IsLibrary: + EntryPoint = " ".join(Module.Module.ModuleEntryPointList) + if int(str(Module.AutoGenVersion), 0) >= 0x00010005: + RealEntryPoint = "_ModuleEntryPoint" + else: + RealEntryPoint = EntryPoint + if EntryPoint == "_ModuleEntryPoint": + CCFlags = Module.BuildOption.get("CC", {}).get("FLAGS", "") + Match = gGlueLibEntryPoint.search(CCFlags) + if Match: + EntryPoint = Match.group(1) + + self._FfsEntryPoint[Module.Guid.upper()] = (EntryPoint, RealEntryPoint) + + + # + # Collect platform firmware volume list as the input of EOT. + # + self._FvList = [] + if Wa.FdfProfile: + for Fd in Wa.FdfProfile.FdDict: + for FdRegion in Wa.FdfProfile.FdDict[Fd].RegionList: + if FdRegion.RegionType != "FV": + continue + for FvName in FdRegion.RegionDataList: + if FvName in self._FvList: + continue + self._FvList.append(FvName) + for Ffs in Wa.FdfProfile.FvDict[FvName.upper()].FfsList: + for Section in Ffs.SectionList: + try: + for FvSection in Section.SectionList: + if FvSection.FvName in self._FvList: + continue + self._FvList.append(FvSection.FvName) + except AttributeError: + pass + + + ## + # Parse platform fixed address map files + # + # This function parses the platform final fixed address map file to get + # the database of predicted fixed address for module image base, entry point + # etc. + # + # @param self: The object pointer + # + def _ParseMapFile(self): + if self._MapFileParsed: + return + self._MapFileParsed = True + if os.path.isfile(self._MapFileName): + try: + FileContents = open(self._MapFileName).read() + for Match in gMapFileItemPattern.finditer(FileContents): + AddressType = Match.group(1) + BaseAddress = Match.group(2) + EntryPoint = Match.group(3) + Guid = Match.group(4).upper() + List = self.FixedMapDict.setdefault(Guid, []) + List.append((AddressType, BaseAddress, "*I")) + List.append((AddressType, EntryPoint, "*E")) + except: + EdkLogger.warn(None, "Cannot open file to read", self._MapFileName) + + ## + # Invokes EOT tool to get the predicted the execution order. + # + # This function invokes EOT tool to calculate the predicted dispatch order + # + # @param self: The object pointer + # + def _InvokeEotTool(self): + if self._EotToolInvoked: + return + + self._EotToolInvoked = True + FvFileList = [] + for FvName in self._FvList: + FvFile = os.path.join(self._FvDir, FvName + ".Fv") + if os.path.isfile(FvFile): + FvFileList.append(FvFile) + + if len(FvFileList) == 0: + return + # + # Write source file list and GUID file list to an intermediate file + # as the input for EOT tool and dispatch List as the output file + # from EOT tool. + # + SourceList = os.path.join(self._EotDir, "SourceFile.txt") + GuidList = os.path.join(self._EotDir, "GuidList.txt") + DispatchList = os.path.join(self._EotDir, "Dispatch.txt") + + TempFile = open(SourceList, "w+") + for Item in self._SourceList: + FileWrite(TempFile, Item) + TempFile.close() + TempFile = open(GuidList, "w+") + for Key in self._GuidMap: + FileWrite(TempFile, "%s %s" % (Key, self._GuidMap[Key])) + TempFile.close() + + try: + from Eot.Eot import Eot + # + # Invoke EOT tool + # + Eot(CommandLineOption=False, SourceFileList=SourceList, GuidList=GuidList, + FvFileList=' '.join(FvFileList), Dispatch=DispatchList, IsInit=True) + + # + # Parse the output of EOT tool + # + for Line in open(DispatchList): + if len(Line.split()) < 4: + continue + (Guid, Phase, FfsName, FilePath) = Line.split() + Symbol = self._FfsEntryPoint.get(Guid, [FfsName, ""])[0] + if len(Symbol) > self.MaxLen: + self.MaxLen = len(Symbol) + self.ItemList.append((Phase, Symbol, FilePath)) + except: + EdkLogger.quiet("(Python %s on %s\n%s)" % (platform.python_version(), sys.platform, traceback.format_exc())) + EdkLogger.warn(None, "Failed to generate execution order prediction report, for some error occurred in executing EOT.") + + + ## + # Generate platform execution order report + # + # This function generates the predicted module execution order. + # + # @param self The object pointer + # @param File The file object for report + # + def _GenerateExecutionOrderReport(self, File): + self._InvokeEotTool() + if len(self.ItemList) == 0: + return + FileWrite(File, gSectionStart) + FileWrite(File, "Execution Order Prediction") + FileWrite(File, "*P PEI phase") + FileWrite(File, "*D DXE phase") + FileWrite(File, "*E Module INF entry point name") + FileWrite(File, "*N Module notification function name") + + FileWrite(File, "Type %-*s %s" % (self.MaxLen, "Symbol", "Module INF Path")) + FileWrite(File, gSectionSep) + for Item in self.ItemList: + FileWrite(File, "*%sE %-*s %s" % (Item[0], self.MaxLen, Item[1], Item[2])) + + FileWrite(File, gSectionStart) + + ## + # Generate Fixed Address report. + # + # This function generate the predicted fixed address report for a module + # specified by Guid. + # + # @param self The object pointer + # @param File The file object for report + # @param Guid The module Guid value. + # @param NotifyList The list of all notify function in a module + # + def _GenerateFixedAddressReport(self, File, Guid, NotifyList): + self._ParseMapFile() + FixedAddressList = self.FixedMapDict.get(Guid) + if not FixedAddressList: + return + + FileWrite(File, gSubSectionStart) + FileWrite(File, "Fixed Address Prediction") + FileWrite(File, "*I Image Loading Address") + FileWrite(File, "*E Entry Point Address") + FileWrite(File, "*N Notification Function Address") + FileWrite(File, "*F Flash Address") + FileWrite(File, "*M Memory Address") + FileWrite(File, "*S SMM RAM Offset") + FileWrite(File, "TOM Top of Memory") + + FileWrite(File, "Type Address Name") + FileWrite(File, gSubSectionSep) + for Item in FixedAddressList: + Type = Item[0] + Value = Item[1] + Symbol = Item[2] + if Symbol == "*I": + Name = "(Image Base)" + elif Symbol == "*E": + Name = self._FfsEntryPoint.get(Guid, ["", "_ModuleEntryPoint"])[1] + elif Symbol in NotifyList: + Name = Symbol + Symbol = "*N" + else: + continue + + if "Flash" in Type: + Symbol += "F" + elif "Memory" in Type: + Symbol += "M" + else: + Symbol += "S" + + if Value[0] == "-": + Value = "TOM" + Value + + FileWrite(File, "%s %-16s %s" % (Symbol, Value, Name)) + + ## + # Generate report for the prediction part + # + # This function generate the predicted fixed address report for a module or + # predicted module execution order for a platform. + # If the input Guid is None, then, it generates the predicted module execution order; + # otherwise it generated the module fixed loading address for the module specified by + # Guid. + # + # @param self The object pointer + # @param File The file object for report + # @param Guid The module Guid value. + # + def GenerateReport(self, File, Guid): + if Guid: + self._GenerateFixedAddressReport(File, Guid.upper(), []) + else: + self._GenerateExecutionOrderReport(File) + +## +# Reports FD region information +# +# This class reports the FD subsection in the build report file. +# It collects region information of platform flash device. +# If the region is a firmware volume, it lists the set of modules +# and its space information; otherwise, it only lists its region name, +# base address and size in its sub-section header. +# If there are nesting FVs, the nested FVs will list immediate after +# this FD region subsection +# +class FdRegionReport(object): + ## + # Discover all the nested FV name list. + # + # This is an internal worker function to discover the all the nested FV information + # in the parent firmware volume. It uses deep first search algorithm recursively to + # find all the FV list name and append them to the list. + # + # @param self The object pointer + # @param FvName The name of current firmware file system + # @param Wa Workspace context information + # + def _DiscoverNestedFvList(self, FvName, Wa): + for Ffs in Wa.FdfProfile.FvDict[FvName.upper()].FfsList: + for Section in Ffs.SectionList: + try: + for FvSection in Section.SectionList: + if FvSection.FvName in self.FvList: + continue + self._GuidsDb[Ffs.NameGuid.upper()] = FvSection.FvName + self.FvList.append(FvSection.FvName) + self.FvInfo[FvSection.FvName] = ("Nested FV", 0, 0) + self._DiscoverNestedFvList(FvSection.FvName, Wa) + except AttributeError: + pass + + ## + # Constructor function for class FdRegionReport + # + # This constructor function generates FdRegionReport object for a specified FdRegion. + # If the FdRegion is a firmware volume, it will recursively find all its nested Firmware + # volume list. This function also collects GUID map in order to dump module identification + # in the final report. + # + # @param self: The object pointer + # @param FdRegion The current FdRegion object + # @param Wa Workspace context information + # + def __init__(self, FdRegion, Wa): + self.Type = FdRegion.RegionType + self.BaseAddress = FdRegion.Offset + self.Size = FdRegion.Size + self.FvList = [] + self.FvInfo = {} + self._GuidsDb = {} + self._FvDir = Wa.FvDir + + # + # If the input FdRegion is not a firmware volume, + # we are done. + # + if self.Type != "FV": + return + + # + # Find all nested FVs in the FdRegion + # + for FvName in FdRegion.RegionDataList: + if FvName in self.FvList: + continue + self.FvList.append(FvName) + self.FvInfo[FvName] = ("Fd Region", self.BaseAddress, self.Size) + self._DiscoverNestedFvList(FvName, Wa) + + PlatformPcds = {} + + # + # Collect PCDs declared in DEC files. + # + for Package in Wa.BuildDatabase.WorkspaceDb.PackageList: + for (TokenCName, TokenSpaceGuidCName, DecType) in Package.Pcds: + DecDefaultValue = Package.Pcds[TokenCName, TokenSpaceGuidCName, DecType].DefaultValue + PlatformPcds[(TokenCName, TokenSpaceGuidCName)] = DecDefaultValue + # + # Collect PCDs defined in DSC common section + # + for Platform in Wa.BuildDatabase.WorkspaceDb.PlatformList: + for (TokenCName, TokenSpaceGuidCName) in Platform.Pcds: + DscDefaultValue = Platform.Pcds[(TokenCName, TokenSpaceGuidCName)].DefaultValue + PlatformPcds[(TokenCName, TokenSpaceGuidCName)] = DscDefaultValue + + # + # Add PEI and DXE a priori files GUIDs defined in PI specification. + # + self._GuidsDb["1B45CC0A-156A-428A-AF62-49864DA0E6E6"] = "PEI Apriori" + self._GuidsDb["FC510EE7-FFDC-11D4-BD41-0080C73C8881"] = "DXE Apriori" + # + # Add ACPI table storage file + # + self._GuidsDb["7E374E25-8E01-4FEE-87F2-390C23C606CD"] = "ACPI table storage" + + for Pa in Wa.AutoGenObjectList: + for ModuleKey in Pa.Platform.Modules: + M = Pa.Platform.Modules[ModuleKey].M + InfPath = os.path.join(Wa.WorkspaceDir, M.MetaFile.File) + self._GuidsDb[M.Guid.upper()] = "%s (%s)" % (M.Module.BaseName, InfPath) + + # + # Collect the GUID map in the FV firmware volume + # + for FvName in self.FvList: + for Ffs in Wa.FdfProfile.FvDict[FvName.upper()].FfsList: + try: + # + # collect GUID map for binary EFI file in FDF file. + # + Guid = Ffs.NameGuid.upper() + Match = gPcdGuidPattern.match(Ffs.NameGuid) + if Match: + PcdTokenspace = Match.group(1) + PcdToken = Match.group(2) + if (PcdToken, PcdTokenspace) in PlatformPcds: + GuidValue = PlatformPcds[(PcdToken, PcdTokenspace)] + Guid = GuidStructureByteArrayToGuidString(GuidValue).upper() + for Section in Ffs.SectionList: + try: + ModuleSectFile = os.path.join(Wa.WorkspaceDir, Section.SectFileName) + self._GuidsDb[Guid] = ModuleSectFile + except AttributeError: + pass + except AttributeError: + pass + + + ## + # Internal worker function to generate report for the FD region + # + # This internal worker function to generate report for the FD region. + # It the type is firmware volume, it lists offset and module identification. + # + # @param self The object pointer + # @param File The file object for report + # @param Title The title for the FD subsection + # @param BaseAddress The base address for the FD region + # @param Size The size of the FD region + # @param FvName The FV name if the FD region is a firmware volume + # + def _GenerateReport(self, File, Title, Type, BaseAddress, Size=0, FvName=None): + FileWrite(File, gSubSectionStart) + FileWrite(File, Title) + FileWrite(File, "Type: %s" % Type) + FileWrite(File, "Base Address: 0x%X" % BaseAddress) + + if self.Type == "FV": + FvTotalSize = 0 + FvTakenSize = 0 + FvFreeSize = 0 + FvReportFileName = os.path.join(self._FvDir, FvName + ".fv.txt") + try: + # + # Collect size info in the firmware volume. + # + FvReport = open(FvReportFileName).read() + Match = gFvTotalSizePattern.search(FvReport) + if Match: + FvTotalSize = int(Match.group(1), 16) + Match = gFvTakenSizePattern.search(FvReport) + if Match: + FvTakenSize = int(Match.group(1), 16) + FvFreeSize = FvTotalSize - FvTakenSize + # + # Write size information to the report file. + # + FileWrite(File, "Size: 0x%X (%.0fK)" % (FvTotalSize, FvTotalSize / 1024.0)) + FileWrite(File, "Fv Name: %s (%.1f%% Full)" % (FvName, FvTakenSize * 100.0 / FvTotalSize)) + FileWrite(File, "Occupied Size: 0x%X (%.0fK)" % (FvTakenSize, FvTakenSize / 1024.0)) + FileWrite(File, "Free Size: 0x%X (%.0fK)" % (FvFreeSize, FvFreeSize / 1024.0)) + FileWrite(File, "Offset Module") + FileWrite(File, gSubSectionSep) + # + # Write module offset and module identification to the report file. + # + OffsetInfo = {} + for Match in gOffsetGuidPattern.finditer(FvReport): + Guid = Match.group(2).upper() + OffsetInfo[Match.group(1)] = self._GuidsDb.get(Guid, Guid) + OffsetList = OffsetInfo.keys() + OffsetList.sort() + for Offset in OffsetList: + FileWrite (File, "%s %s" % (Offset, OffsetInfo[Offset])) + except IOError: + EdkLogger.warn(None, "Fail to read report file", FvReportFileName) + else: + FileWrite(File, "Size: 0x%X (%.0fK)" % (Size, Size / 1024.0)) + FileWrite(File, gSubSectionEnd) + + ## + # Generate report for the FD region + # + # This function generates report for the FD region. + # + # @param self The object pointer + # @param File The file object for report + # + def GenerateReport(self, File): + if (len(self.FvList) > 0): + for FvItem in self.FvList: + Info = self.FvInfo[FvItem] + self._GenerateReport(File, Info[0], "FV", Info[1], Info[2], FvItem) + else: + self._GenerateReport(File, "FD Region", self.Type, self.BaseAddress, self.Size) + +## +# Reports FD information +# +# This class reports the FD section in the build report file. +# It collects flash device information for a platform. +# +class FdReport(object): + ## + # Constructor function for class FdReport + # + # This constructor function generates FdReport object for a specified + # firmware device. + # + # @param self The object pointer + # @param Fd The current Firmware device object + # @param Wa Workspace context information + # + def __init__(self, Fd, Wa): + self.FdName = Fd.FdUiName + self.BaseAddress = Fd.BaseAddress + self.Size = Fd.Size + self.FdRegionList = [FdRegionReport(FdRegion, Wa) for FdRegion in Fd.RegionList] + + ## + # Generate report for the firmware device. + # + # This function generates report for the firmware device. + # + # @param self The object pointer + # @param File The file object for report + # + def GenerateReport(self, File): + FileWrite(File, gSectionStart) + FileWrite(File, "Firmware Device (FD)") + FileWrite(File, "FD Name: %s" % self.FdName) + FileWrite(File, "Base Address: %s" % self.BaseAddress) + FileWrite(File, "Size: 0x%X (%.0fK)" % (self.Size, self.Size / 1024.0)) + if len(self.FdRegionList) > 0: + FileWrite(File, gSectionSep) + for FdRegionItem in self.FdRegionList: + FdRegionItem.GenerateReport(File) + + FileWrite(File, gSectionEnd) + + + +## +# Reports platform information +# +# This class reports the whole platform information +# +class PlatformReport(object): + ## + # Constructor function for class PlatformReport + # + # This constructor function generates PlatformReport object a platform build. + # It generates report for platform summary, flash, global PCDs and detailed + # module information for modules involved in platform build. + # + # @param self The object pointer + # @param Wa Workspace context information + # + def __init__(self, Wa, ReportType): + self._WorkspaceDir = Wa.WorkspaceDir + self.PlatformName = Wa.Name + self.PlatformDscPath = Wa.Platform + self.Architectures = " ".join(Wa.ArchList) + self.ToolChain = Wa.ToolChain + self.Target = Wa.BuildTarget + self.OutputPath = os.path.join(Wa.WorkspaceDir, Wa.OutputDir) + self.BuildEnvironment = platform.platform() + + self.PcdReport = None + if "PCD" in ReportType: + self.PcdReport = PcdReport(Wa) + + self.FdReportList = [] + if "FLASH" in ReportType and Wa.FdfProfile: + for Fd in Wa.FdfProfile.FdDict: + self.FdReportList.append(FdReport(Wa.FdfProfile.FdDict[Fd], Wa)) + + self.PredictionReport = None + if "FIXED_ADDRESS" in ReportType or "EXECUTION_ORDER" in ReportType: + self.PredictionReport = PredictionReport(Wa) + + self.ModuleReportList = [] + for Pa in Wa.AutoGenObjectList: + for ModuleKey in Pa.Platform.Modules: + self.ModuleReportList.append(ModuleReport(Pa.Platform.Modules[ModuleKey].M, ReportType)) + + + + ## + # Generate report for the whole platform. + # + # This function generates report for platform information. + # It comprises of platform summary, global PCD, flash and + # module list sections. + # + # @param self The object pointer + # @param File The file object for report + # @param BuildDuration The total time to build the modules + # @param ReportType The kind of report items in the final report file + # + def GenerateReport(self, File, BuildDuration, ReportType): + FileWrite(File, "Platform Summary") + FileWrite(File, "Platform Name: %s" % self.PlatformName) + FileWrite(File, "Platform DSC Path: %s" % self.PlatformDscPath) + FileWrite(File, "Architectures: %s" % self.Architectures) + FileWrite(File, "Tool Chain: %s" % self.ToolChain) + FileWrite(File, "Target: %s" % self.Target) + FileWrite(File, "Output Path: %s" % self.OutputPath) + FileWrite(File, "Build Environment: %s" % self.BuildEnvironment) + FileWrite(File, "Build Duration: %s" % BuildDuration) + FileWrite(File, "Report Content: %s" % ", ".join(ReportType)) + + if "PCD" in ReportType: + self.PcdReport.GenerateReport(File, None) + + if "FLASH" in ReportType: + for FdReportListItem in self.FdReportList: + FdReportListItem.GenerateReport(File) + + for ModuleReportItem in self.ModuleReportList: + ModuleReportItem.GenerateReport(File, self.PcdReport, self.PredictionReport, ReportType) + + if "EXECUTION_ORDER" in ReportType: + self.PredictionReport.GenerateReport(File, None) + +## BuildReport class +# +# This base class contain the routines to collect data and then +# applies certain format to the output report +# +class BuildReport(object): + ## + # Constructor function for class BuildReport + # + # This constructor function generates BuildReport object a platform build. + # It generates report for platform summary, flash, global PCDs and detailed + # module information for modules involved in platform build. + # + # @param self The object pointer + # @param ReportFile The file name to save report file + # @param ReportType The kind of report items in the final report file + # + def __init__(self, ReportFile, ReportType): + self.ReportFile = ReportFile + if ReportFile: + self.ReportList = [] + self.ReportType = [] + if ReportType: + for ReportTypeItem in ReportType: + if ReportTypeItem not in self.ReportType: + self.ReportType.append(ReportTypeItem) + else: + self.ReportType = ["PCD", "LIBRARY", "BUILD_FLAGS", "DEPEX", "FLASH", "FIXED_ADDRESS"] + ## + # Adds platform report to the list + # + # This function adds a platform report to the final report list. + # + # @param self The object pointer + # @param Wa Workspace context information + # + def AddPlatformReport(self, Wa): + if self.ReportFile: + self.ReportList.append(Wa) + + ## + # Generates the final report. + # + # This function generates platform build report. It invokes GenerateReport() + # method for every platform report in the list. + # + # @param self The object pointer + # @param BuildDuration The total time to build the modules + # + def GenerateReport(self, BuildDuration): + if self.ReportFile: + try: + File = open(self.ReportFile, "w+") + except IOError: + EdkLogger.error(None, FILE_OPEN_FAILURE, ExtraData=self.ReportFile) + try: + for Wa in self.ReportList: + PlatformReport(Wa, self.ReportType).GenerateReport(File, BuildDuration, self.ReportType) + EdkLogger.quiet("Report successfully saved to %s" % os.path.abspath(self.ReportFile)) + except IOError: + EdkLogger.error(None, FILE_WRITE_FAILURE, ExtraData=self.ReportFile) + except: + EdkLogger.error("BuildReport", CODE_ERROR, "Unknown fatal error when generating build report", ExtraData=self.ReportFile, RaiseError=False) + EdkLogger.quiet("(Python %s on %s\n%s)" % (platform.python_version(), sys.platform, traceback.format_exc())) + File.close() + +# This acts like the main() function for the script, unless it is 'import'ed into another script. +if __name__ == '__main__': + pass + diff --git a/BaseTools/Source/Python/build/__init__.py b/BaseTools/Source/Python/build/__init__.py index e69de29bb2..1c7f31a8bc 100644 --- a/BaseTools/Source/Python/build/__init__.py +++ b/BaseTools/Source/Python/build/__init__.py @@ -0,0 +1,15 @@ +## @file +# Python 'build' package initialization file. +# +# This file is required to make Python interpreter treat the directory +# as containing package. +# +# Copyright (c) 2007 - 2010, Intel Corporation
    +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# diff --git a/BaseTools/Source/Python/build/build.py b/BaseTools/Source/Python/build/build.py index 624d941b0f..9705097606 100644 --- a/BaseTools/Source/Python/build/build.py +++ b/BaseTools/Source/Python/build/build.py @@ -1,1447 +1,1873 @@ -## @file -# build a platform or a module -# -# Copyright (c) 2007, Intel Corporation -# -# All rights reserved. This program and the accompanying materials -# are licensed and made available under the terms and conditions of the BSD License -# which accompanies this distribution. The full text of the license may be found at -# http://opensource.org/licenses/bsd-license.php -# -# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. -# - -## -# Import Modules -# -import os -import re -import sys -import glob -import time -import platform -import traceback - -from threading import * -from optparse import OptionParser -from subprocess import * -from Common import Misc as Utils - -from Common.TargetTxtClassObject import * -from Common.ToolDefClassObject import * -from Common.DataType import * -from AutoGen.AutoGen import * -from Common.BuildToolError import * -from Workspace.WorkspaceDatabase import * - -import Common.EdkLogger -import Common.GlobalData as GlobalData - -# Version and Copyright -VersionNumber = "0.5" -__version__ = "%prog Version " + VersionNumber -__copyright__ = "Copyright (c) 2007, Intel Corporation All rights reserved." - -## standard targets of build command -gSupportedTarget = ['all', 'genc', 'genmake', 'modules', 'libraries', 'fds', 'clean', 'cleanall', 'cleanlib', 'run'] - -## build configuration file -gBuildConfiguration = "Conf/target.txt" -gBuildCacheDir = "Conf/.cache" -gToolsDefinition = "Conf/tools_def.txt" - -## Check environment PATH variable to make sure the specified tool is found -# -# If the tool is found in the PATH, then True is returned -# Otherwise, False is returned -# -def IsToolInPath(tool): - if os.environ.has_key('PATHEXT'): - extns = os.environ['PATHEXT'].split(os.path.pathsep) - else: - extns = ('',) - for pathDir in os.environ['PATH'].split(os.path.pathsep): - for ext in extns: - if os.path.exists(os.path.join(pathDir, tool + ext)): - return True - return False - -## Check environment variables -# -# Check environment variables that must be set for build. Currently they are -# -# WORKSPACE The directory all packages/platforms start from -# EDK_TOOLS_PATH The directory contains all tools needed by the build -# PATH $(EDK_TOOLS_PATH)/Bin/ must be set in PATH -# -# If any of above environment variable is not set or has error, the build -# will be broken. -# -def CheckEnvVariable(): - # check WORKSPACE - if "WORKSPACE" not in os.environ: - EdkLogger.error("build", ATTRIBUTE_NOT_AVAILABLE, "Environment variable not found", - ExtraData="WORKSPACE") - - WorkspaceDir = os.path.normcase(os.path.normpath(os.environ["WORKSPACE"])) - if not os.path.exists(WorkspaceDir): - EdkLogger.error("build", FILE_NOT_FOUND, "WORKSPACE doesn't exist", ExtraData="%s" % WorkspaceDir) - elif ' ' in WorkspaceDir: - EdkLogger.error("build", FORMAT_NOT_SUPPORTED, "No space is allowed in WORKSPACE path", - ExtraData=WorkspaceDir) - os.environ["WORKSPACE"] = WorkspaceDir - - # - # Check EFI_SOURCE (R8 build convention). EDK_SOURCE will always point to ECP - # - os.environ["ECP_SOURCE"] = os.path.join(WorkspaceDir, GlobalData.gEdkCompatibilityPkg) - if "EFI_SOURCE" not in os.environ: - os.environ["EFI_SOURCE"] = os.environ["ECP_SOURCE"] - if "EDK_SOURCE" not in os.environ: - os.environ["EDK_SOURCE"] = os.environ["ECP_SOURCE"] - - # - # Unify case of characters on case-insensitive systems - # - EfiSourceDir = os.path.normcase(os.path.normpath(os.environ["EFI_SOURCE"])) - EdkSourceDir = os.path.normcase(os.path.normpath(os.environ["EDK_SOURCE"])) - EcpSourceDir = os.path.normcase(os.path.normpath(os.environ["ECP_SOURCE"])) - - os.environ["EFI_SOURCE"] = EfiSourceDir - os.environ["EDK_SOURCE"] = EdkSourceDir - os.environ["ECP_SOURCE"] = EcpSourceDir - os.environ["EDK_TOOLS_PATH"] = os.path.normcase(os.environ["EDK_TOOLS_PATH"]) - - if not os.path.exists(EcpSourceDir): - EdkLogger.verbose("ECP_SOURCE = %s doesn't exist. R8 modules could not be built." % EcpSourceDir) - elif ' ' in EcpSourceDir: - EdkLogger.error("build", FORMAT_NOT_SUPPORTED, "No space is allowed in ECP_SOURCE path", - ExtraData=EcpSourceDir) - if not os.path.exists(EdkSourceDir): - if EdkSourceDir == EcpSourceDir: - EdkLogger.verbose("EDK_SOURCE = %s doesn't exist. R8 modules could not be built." % EdkSourceDir) - else: - EdkLogger.error("build", PARAMETER_INVALID, "EDK_SOURCE does not exist", - ExtraData=EdkSourceDir) - elif ' ' in EdkSourceDir: - EdkLogger.error("build", FORMAT_NOT_SUPPORTED, "No space is allowed in EDK_SOURCE path", - ExtraData=EdkSourceDir) - if not os.path.exists(EfiSourceDir): - if EfiSourceDir == EcpSourceDir: - EdkLogger.verbose("EFI_SOURCE = %s doesn't exist. R8 modules could not be built." % EfiSourceDir) - else: - EdkLogger.error("build", PARAMETER_INVALID, "EFI_SOURCE does not exist", - ExtraData=EfiSourceDir) - elif ' ' in EfiSourceDir: - EdkLogger.error("build", FORMAT_NOT_SUPPORTED, "No space is allowed in EFI_SOURCE path", - ExtraData=EfiSourceDir) - - # change absolute path to relative path to WORKSPACE - if EfiSourceDir.upper().find(WorkspaceDir.upper()) != 0: - EdkLogger.error("build", PARAMETER_INVALID, "EFI_SOURCE is not under WORKSPACE", - ExtraData="WORKSPACE = %s\n EFI_SOURCE = %s" % (WorkspaceDir, EfiSourceDir)) - if EdkSourceDir.upper().find(WorkspaceDir.upper()) != 0: - EdkLogger.error("build", PARAMETER_INVALID, "EDK_SOURCE is not under WORKSPACE", - ExtraData="WORKSPACE = %s\n EDK_SOURCE = %s" % (WorkspaceDir, EdkSourceDir)) - if EcpSourceDir.upper().find(WorkspaceDir.upper()) != 0: - EdkLogger.error("build", PARAMETER_INVALID, "ECP_SOURCE is not under WORKSPACE", - ExtraData="WORKSPACE = %s\n ECP_SOURCE = %s" % (WorkspaceDir, EcpSourceDir)) - - # check EDK_TOOLS_PATH - if "EDK_TOOLS_PATH" not in os.environ: - EdkLogger.error("build", ATTRIBUTE_NOT_AVAILABLE, "Environment variable not found", - ExtraData="EDK_TOOLS_PATH") - - # check PATH - if "PATH" not in os.environ: - EdkLogger.error("build", ATTRIBUTE_NOT_AVAILABLE, "Environment variable not found", - ExtraData="PATH") - - GlobalData.gWorkspace = WorkspaceDir - GlobalData.gEfiSource = EfiSourceDir - GlobalData.gEdkSource = EdkSourceDir - GlobalData.gEcpSource = EcpSourceDir - -## Get normalized file path -# -# Convert the path to be local format, and remove the WORKSPACE path at the -# beginning if the file path is given in full path. -# -# @param FilePath File path to be normalized -# @param Workspace Workspace path which the FilePath will be checked against -# -# @retval string The normalized file path -# -def NormFile(FilePath, Workspace): - # check if the path is absolute or relative - if os.path.isabs(FilePath): - FileFullPath = os.path.normpath(FilePath) - else: - FileFullPath = os.path.normpath(os.path.join(Workspace, FilePath)) - - # check if the file path exists or not - if not os.path.isfile(FileFullPath): - EdkLogger.error("build", FILE_NOT_FOUND, ExtraData="\t%s (Please give file in absolute path or relative to WORKSPACE)" % FileFullPath) - - # remove workspace directory from the beginning part of the file path - if Workspace[-1] in ["\\", "/"]: - return FileFullPath[len(Workspace):] - else: - return FileFullPath[(len(Workspace) + 1):] - -## Get the output of an external program -# -# This is the entrance method of thread reading output of an external program and -# putting them in STDOUT/STDERR of current program. -# -# @param From The stream message read from -# @param To The stream message put on -# @param ExitFlag The flag used to indicate stopping reading -# -def ReadMessage(From, To, ExitFlag): - while True: - # read one line a time - Line = From.readline() - # empty string means "end" - if Line != None and Line != "": - To(Line.rstrip()) - else: - break - if ExitFlag.isSet(): - break - -## Launch an external program -# -# This method will call subprocess.Popen to execute an external program with -# given options in specified directory. Because of the dead-lock issue during -# redirecting output of the external program, threads are used to to do the -# redirection work. -# -# @param Command A list or string containing the call of the program -# @param WorkingDir The directory in which the program will be running -# -def LaunchCommand(Command, WorkingDir): - # if working directory doesn't exist, Popen() will raise an exception - if not os.path.isdir(WorkingDir): - EdkLogger.error("build", FILE_NOT_FOUND, ExtraData=WorkingDir) - - Proc = None - EndOfProcedure = None - try: - # launch the command - Proc = Popen(Command, stdout=PIPE, stderr=PIPE, env=os.environ, cwd=WorkingDir, bufsize=-1) - - # launch two threads to read the STDOUT and STDERR - EndOfProcedure = Event() - EndOfProcedure.clear() - if Proc.stdout: - StdOutThread = Thread(target=ReadMessage, args=(Proc.stdout, EdkLogger.info, EndOfProcedure)) - StdOutThread.setName("STDOUT-Redirector") - StdOutThread.setDaemon(False) - StdOutThread.start() - - if Proc.stderr: - StdErrThread = Thread(target=ReadMessage, args=(Proc.stderr, EdkLogger.quiet, EndOfProcedure)) - StdErrThread.setName("STDERR-Redirector") - StdErrThread.setDaemon(False) - StdErrThread.start() - - # waiting for program exit - Proc.wait() - except: # in case of aborting - # terminate the threads redirecting the program output - if EndOfProcedure != None: - EndOfProcedure.set() - if Proc == None: - if type(Command) != type(""): - Command = " ".join(Command) - EdkLogger.error("build", COMMAND_FAILURE, "Failed to start command", ExtraData="%s [%s]" % (Command, WorkingDir)) - - if Proc.stdout: - StdOutThread.join() - if Proc.stderr: - StdErrThread.join() - - # check the return code of the program - if Proc.returncode != 0: - if type(Command) != type(""): - Command = " ".join(Command) - EdkLogger.error("build", COMMAND_FAILURE, ExtraData="%s [%s]" % (Command, WorkingDir)) - -## The smallest unit that can be built in multi-thread build mode -# -# This is the base class of build unit. The "Obj" parameter must provide -# __str__(), __eq__() and __hash__() methods. Otherwise there could be build units -# missing build. -# -# Currently the "Obj" should be only ModuleAutoGen or PlatformAutoGen objects. -# -class BuildUnit: - ## The constructor - # - # @param self The object pointer - # @param Obj The object the build is working on - # @param Target The build target name, one of gSupportedTarget - # @param Dependency The BuildUnit(s) which must be completed in advance - # @param WorkingDir The directory build command starts in - # - def __init__(self, Obj, BuildCommand, Target, Dependency, WorkingDir="."): - self.BuildObject = Obj - self.Dependency = Dependency - self.WorkingDir = WorkingDir - self.Target = Target - self.BuildCommand = BuildCommand - if BuildCommand == None or len(BuildCommand) == 0: - EdkLogger.error("build", OPTION_MISSING, "No build command found for", - ExtraData=str(Obj)) - - ## str() method - # - # It just returns the string representaion of self.BuildObject - # - # @param self The object pointer - # - def __str__(self): - return str(self.BuildObject) - - ## "==" operator method - # - # It just compares self.BuildObject with "Other". So self.BuildObject must - # provide its own __eq__() method. - # - # @param self The object pointer - # @param Other The other BuildUnit object compared to - # - def __eq__(self, Other): - return Other != None and self.BuildObject == Other.BuildObject \ - and self.BuildObject.Arch == Other.BuildObject.Arch - - ## hash() method - # - # It just returns the hash value of self.BuildObject which must be hashable. - # - # @param self The object pointer - # - def __hash__(self): - return hash(self.BuildObject) + hash(self.BuildObject.Arch) - - def __repr__(self): - return repr(self.BuildObject) - -## The smallest module unit that can be built by nmake/make command in multi-thread build mode -# -# This class is for module build by nmake/make build system. The "Obj" parameter -# must provide __str__(), __eq__() and __hash__() methods. Otherwise there could -# be make units missing build. -# -# Currently the "Obj" should be only ModuleAutoGen object. -# -class ModuleMakeUnit(BuildUnit): - ## The constructor - # - # @param self The object pointer - # @param Obj The ModuleAutoGen object the build is working on - # @param Target The build target name, one of gSupportedTarget - # - def __init__(self, Obj, Target): - Dependency = [ModuleMakeUnit(La, Target) for La in Obj.LibraryAutoGenList] - BuildUnit.__init__(self, Obj, Obj.BuildCommand, Target, Dependency, Obj.MakeFileDir) - if Target in [None, "", "all"]: - self.Target = "tbuild" - -## The smallest platform unit that can be built by nmake/make command in multi-thread build mode -# -# This class is for platform build by nmake/make build system. The "Obj" parameter -# must provide __str__(), __eq__() and __hash__() methods. Otherwise there could -# be make units missing build. -# -# Currently the "Obj" should be only PlatformAutoGen object. -# -class PlatformMakeUnit(BuildUnit): - ## The constructor - # - # @param self The object pointer - # @param Obj The PlatformAutoGen object the build is working on - # @param Target The build target name, one of gSupportedTarget - # - def __init__(self, Obj, Target): - Dependency = [ModuleMakeUnit(Lib, Target) for Lib in self.BuildObject.LibraryAutoGenList] - Dependency.extend([ModuleMakeUnit(Mod, Target) for Mod in self.BuildObject.ModuleAutoGenList]) - BuildUnit.__init__(self, Obj, Obj.BuildCommand, Target, Dependency, Obj.MakeFileDir) - -## The class representing the task of a module build or platform build -# -# This class manages the build tasks in multi-thread build mode. Its jobs include -# scheduling thread running, catching thread error, monitor the thread status, etc. -# -class BuildTask: - # queue for tasks waiting for schedule - _PendingQueue = sdict() - _PendingQueueLock = threading.Lock() - - # queue for tasks ready for running - _ReadyQueue = sdict() - _ReadyQueueLock = threading.Lock() - - # queue for run tasks - _RunningQueue = sdict() - _RunningQueueLock = threading.Lock() - - # queue containing all build tasks, in case duplicate build - _TaskQueue = sdict() - - # flag indicating error occurs in a running thread - _ErrorFlag = threading.Event() - _ErrorFlag.clear() - _ErrorMessage = "" - - # BoundedSemaphore object used to control the number of running threads - _Thread = None - - # flag indicating if the scheduler is started or not - _SchedulerStopped = threading.Event() - _SchedulerStopped.set() - - ## Start the task scheduler thread - # - # @param MaxThreadNumber The maximum thread number - # @param ExitFlag Flag used to end the scheduler - # - @staticmethod - def StartScheduler(MaxThreadNumber, ExitFlag): - SchedulerThread = Thread(target=BuildTask.Scheduler, args=(MaxThreadNumber, ExitFlag)) - SchedulerThread.setName("Build-Task-Scheduler") - SchedulerThread.setDaemon(False) - SchedulerThread.start() - # wait for the scheduler to be started, especially useful in Linux - while not BuildTask.IsOnGoing(): - time.sleep(0.01) - - ## Scheduler method - # - # @param MaxThreadNumber The maximum thread number - # @param ExitFlag Flag used to end the scheduler - # - @staticmethod - def Scheduler(MaxThreadNumber, ExitFlag): - BuildTask._SchedulerStopped.clear() - try: - # use BoundedSemaphore to control the maximum running threads - BuildTask._Thread = BoundedSemaphore(MaxThreadNumber) - # - # scheduling loop, which will exits when no pending/ready task and - # indicated to do so, or there's error in running thread - # - while (len(BuildTask._PendingQueue) > 0 or len(BuildTask._ReadyQueue) > 0 \ - or not ExitFlag.isSet()) and not BuildTask._ErrorFlag.isSet(): - EdkLogger.debug(EdkLogger.DEBUG_8, "Pending Queue (%d), Ready Queue (%d)" - % (len(BuildTask._PendingQueue), len(BuildTask._ReadyQueue))) - - # get all pending tasks - BuildTask._PendingQueueLock.acquire() - BuildObjectList = BuildTask._PendingQueue.keys() - # - # check if their dependency is resolved, and if true, move them - # into ready queue - # - for BuildObject in BuildObjectList: - Bt = BuildTask._PendingQueue[BuildObject] - if Bt.IsReady(): - BuildTask._ReadyQueue[BuildObject] = BuildTask._PendingQueue.pop(BuildObject) - BuildTask._PendingQueueLock.release() - - # launch build thread until the maximum number of threads is reached - while not BuildTask._ErrorFlag.isSet(): - # empty ready queue, do nothing further - if len(BuildTask._ReadyQueue) == 0: - break - - # wait for active thread(s) exit - BuildTask._Thread.acquire(True) - - # start a new build thread - Bo = BuildTask._ReadyQueue.keys()[0] - Bt = BuildTask._ReadyQueue.pop(Bo) - - # move into running queue - BuildTask._RunningQueueLock.acquire() - BuildTask._RunningQueue[Bo] = Bt - BuildTask._RunningQueueLock.release() - - Bt.Start() - # avoid tense loop - time.sleep(0.01) - - # avoid tense loop - time.sleep(0.01) - - # wait for all running threads exit - if BuildTask._ErrorFlag.isSet(): - EdkLogger.quiet("\nWaiting for all build threads exit...") - # while not BuildTask._ErrorFlag.isSet() and \ - while len(BuildTask._RunningQueue) > 0: - EdkLogger.verbose("Waiting for thread ending...(%d)" % len(BuildTask._RunningQueue)) - EdkLogger.debug(EdkLogger.DEBUG_8, "Threads [%s]" % ", ".join([Th.getName() for Th in threading.enumerate()])) - # avoid tense loop - time.sleep(0.1) - except BaseException, X: - # - # TRICK: hide the output of threads left runing, so that the user can - # catch the error message easily - # - EdkLogger.SetLevel(EdkLogger.ERROR) - BuildTask._ErrorFlag.set() - BuildTask._ErrorMessage = "build thread scheduler error\n\t%s" % str(X) - - BuildTask._PendingQueue.clear() - BuildTask._ReadyQueue.clear() - BuildTask._RunningQueue.clear() - BuildTask._TaskQueue.clear() - BuildTask._SchedulerStopped.set() - - ## Wait for all running method exit - # - @staticmethod - def WaitForComplete(): - BuildTask._SchedulerStopped.wait() - - ## Check if the scheduler is running or not - # - @staticmethod - def IsOnGoing(): - return not BuildTask._SchedulerStopped.isSet() - - ## Abort the build - @staticmethod - def Abort(): - if BuildTask.IsOnGoing(): - BuildTask._ErrorFlag.set() - BuildTask.WaitForComplete() - - ## Check if there's error in running thread - # - # Since the main thread cannot catch exceptions in other thread, we have to - # use threading.Event to communicate this formation to main thread. - # - @staticmethod - def HasError(): - return BuildTask._ErrorFlag.isSet() - - ## Get error message in running thread - # - # Since the main thread cannot catch exceptions in other thread, we have to - # use a static variable to communicate this message to main thread. - # - @staticmethod - def GetErrorMessage(): - return BuildTask._ErrorMessage - - ## Factory method to create a BuildTask object - # - # This method will check if a module is building or has been built. And if - # true, just return the associated BuildTask object in the _TaskQueue. If - # not, create and return a new BuildTask object. The new BuildTask object - # will be appended to the _PendingQueue for scheduling later. - # - # @param BuildItem A BuildUnit object representing a build object - # @param Dependency The dependent build object of BuildItem - # - @staticmethod - def New(BuildItem, Dependency=None): - if BuildItem in BuildTask._TaskQueue: - Bt = BuildTask._TaskQueue[BuildItem] - return Bt - - Bt = BuildTask() - Bt._Init(BuildItem, Dependency) - BuildTask._TaskQueue[BuildItem] = Bt - - BuildTask._PendingQueueLock.acquire() - BuildTask._PendingQueue[BuildItem] = Bt - BuildTask._PendingQueueLock.release() - - return Bt - - ## The real constructor of BuildTask - # - # @param BuildItem A BuildUnit object representing a build object - # @param Dependency The dependent build object of BuildItem - # - def _Init(self, BuildItem, Dependency=None): - self.BuildItem = BuildItem - - self.DependencyList = [] - if Dependency == None: - Dependency = BuildItem.Dependency - else: - Dependency.extend(BuildItem.Dependency) - self.AddDependency(Dependency) - # flag indicating build completes, used to avoid unnecessary re-build - self.CompleteFlag = False - - ## Check if all dependent build tasks are completed or not - # - def IsReady(self): - ReadyFlag = True - for Dep in self.DependencyList: - if Dep.CompleteFlag == True: - continue - ReadyFlag = False - break - - return ReadyFlag - - ## Add dependent build task - # - # @param Dependency The list of dependent build objects - # - def AddDependency(self, Dependency): - for Dep in Dependency: - self.DependencyList.append(BuildTask.New(Dep)) # BuildTask list - - ## The thread wrapper of LaunchCommand function - # - # @param Command A list or string contains the call of the command - # @param WorkingDir The directory in which the program will be running - # - def _CommandThread(self, Command, WorkingDir): - try: - LaunchCommand(Command, WorkingDir) - self.CompleteFlag = True - except: - # - # TRICK: hide the output of threads left runing, so that the user can - # catch the error message easily - # - if not BuildTask._ErrorFlag.isSet(): - GlobalData.gBuildingModule = "%s [%s, %s, %s]" % (str(self.BuildItem.BuildObject), - self.BuildItem.BuildObject.Arch, - self.BuildItem.BuildObject.ToolChain, - self.BuildItem.BuildObject.BuildTarget - ) - EdkLogger.SetLevel(EdkLogger.ERROR) - BuildTask._ErrorFlag.set() - BuildTask._ErrorMessage = "%s broken\n %s [%s]" % \ - (threading.currentThread().getName(), Command, WorkingDir) - # indicate there's a thread is available for another build task - BuildTask._RunningQueueLock.acquire() - BuildTask._RunningQueue.pop(self.BuildItem) - BuildTask._RunningQueueLock.release() - BuildTask._Thread.release() - - ## Start build task thread - # - def Start(self): - EdkLogger.quiet("Building ... %s" % repr(self.BuildItem)) - Command = self.BuildItem.BuildCommand + [self.BuildItem.Target] - self.BuildTread = Thread(target=self._CommandThread, args=(Command, self.BuildItem.WorkingDir)) - self.BuildTread.setName("build thread") - self.BuildTread.setDaemon(False) - self.BuildTread.start() - -## The class implementing the EDK2 build process -# -# The build process includes: -# 1. Load configuration from target.txt and tools_def.txt in $(WORKSPACE)/Conf -# 2. Parse DSC file of active platform -# 3. Parse FDF file if any -# 4. Establish build database, including parse all other files (module, package) -# 5. Create AutoGen files (C code file, depex file, makefile) if necessary -# 6. Call build command -# -class Build(): - ## Constructor - # - # Constructor will load all necessary configurations, parse platform, modules - # and packages and the establish a database for AutoGen. - # - # @param Target The build command target, one of gSupportedTarget - # @param WorkspaceDir The directory of workspace - # @param Platform The DSC file of active platform - # @param Module The INF file of active module, if any - # @param Arch The Arch list of platform or module - # @param ToolChain The name list of toolchain - # @param BuildTarget The "DEBUG" or "RELEASE" build - # @param FlashDefinition The FDF file of active platform - # @param FdList=[] The FD names to be individually built - # @param FvList=[] The FV names to be individually built - # @param MakefileType The type of makefile (for MSFT make or GNU make) - # @param SilentMode Indicate multi-thread build mode - # @param ThreadNumber The maximum number of thread if in multi-thread build mode - # @param SkipAutoGen Skip AutoGen step - # @param Reparse Re-parse all meta files - # @param SkuId SKU id from command line - # - def __init__(self, Target, WorkspaceDir, Platform, Module, Arch, ToolChain, - BuildTarget, FlashDefinition, FdList=[], FvList=[], - MakefileType="nmake", SilentMode=False, ThreadNumber=2, - SkipAutoGen=False, Reparse=False, SkuId=None, - ReportFile=None, ReportType=None): - - self.WorkspaceDir = WorkspaceDir - self.Target = Target - self.PlatformFile = Platform - self.ModuleFile = Module - self.ArchList = Arch - self.ToolChainList = ToolChain - self.BuildTargetList= BuildTarget - self.Fdf = FlashDefinition - self.FdList = FdList - self.FvList = FvList - self.MakefileType = MakefileType - self.SilentMode = SilentMode - self.ThreadNumber = ThreadNumber - self.SkipAutoGen = SkipAutoGen - self.Reparse = Reparse - self.SkuId = SkuId - self.SpawnMode = True - self.ReportFile = ReportFile - if ReportType == None: - self.ReportType = ['ALL'] - else: - self.ReportType = ReportType - - self.TargetTxt = TargetTxtClassObject() - self.ToolDef = ToolDefClassObject() - self.Db = WorkspaceDatabase(None, GlobalData.gGlobalDefines, self.Reparse) - #self.Db = WorkspaceDatabase(None, {}, self.Reparse) - self.BuildDatabase = self.Db.BuildObject - self.Platform = None - - # print dot charater during doing some time-consuming work - self.Progress = Utils.Progressor() - - # parse target.txt, tools_def.txt, and platform file - #self.RestoreBuildData() - self.LoadConfiguration() - self.InitBuild() - - # print current build environment and configuration - EdkLogger.quiet("%-24s = %s" % ("WORKSPACE", os.environ["WORKSPACE"])) - EdkLogger.quiet("%-24s = %s" % ("ECP_SOURCE", os.environ["ECP_SOURCE"])) - EdkLogger.quiet("%-24s = %s" % ("EDK_SOURCE", os.environ["EDK_SOURCE"])) - EdkLogger.quiet("%-24s = %s" % ("EFI_SOURCE", os.environ["EFI_SOURCE"])) - EdkLogger.quiet("%-24s = %s" % ("EDK_TOOLS_PATH", os.environ["EDK_TOOLS_PATH"])) - - EdkLogger.info('\n%-24s = %s' % ("TARGET_ARCH", ' '.join(self.ArchList))) - EdkLogger.info('%-24s = %s' % ("TARGET", ' '.join(self.BuildTargetList))) - EdkLogger.info('%-24s = %s' % ("TOOL_CHAIN_TAG", ' '.join(self.ToolChainList))) - - EdkLogger.info('\n%-24s = %s' % ("Active Platform", self.PlatformFile)) - - if self.Fdf != None and self.Fdf != "": - EdkLogger.info('%-24s = %s' % ("Flash Image Definition", self.Fdf)) - - if self.ModuleFile != None and self.ModuleFile != "": - EdkLogger.info('%-24s = %s' % ("Active Module", self.ModuleFile)) - - os.chdir(self.WorkspaceDir) - self.Progress.Start("\nProcessing meta-data") - - ## Load configuration - # - # This method will parse target.txt and get the build configurations. - # - def LoadConfiguration(self): - # - # Check target.txt and tools_def.txt and Init them - # - BuildConfigurationFile = os.path.normpath(os.path.join(self.WorkspaceDir, gBuildConfiguration)) - if os.path.isfile(BuildConfigurationFile) == True: - StatusCode = self.TargetTxt.LoadTargetTxtFile(BuildConfigurationFile) - - ToolDefinitionFile = self.TargetTxt.TargetTxtDictionary[DataType.TAB_TAT_DEFINES_TOOL_CHAIN_CONF] - if ToolDefinitionFile == '': - ToolDefinitionFile = gToolsDefinition - ToolDefinitionFile = os.path.normpath(os.path.join(self.WorkspaceDir, ToolDefinitionFile)) - if os.path.isfile(ToolDefinitionFile) == True: - StatusCode = self.ToolDef.LoadToolDefFile(ToolDefinitionFile) - else: - EdkLogger.error("build", FILE_NOT_FOUND, ExtraData=ToolDefinitionFile) - else: - EdkLogger.error("build", FILE_NOT_FOUND, ExtraData=BuildConfigurationFile) - - # if no ARCH given in command line, get it from target.txt - if self.ArchList == None or len(self.ArchList) == 0: - self.ArchList = self.TargetTxt.TargetTxtDictionary[DataType.TAB_TAT_DEFINES_TARGET_ARCH] - - # if no build target given in command line, get it from target.txt - if self.BuildTargetList == None or len(self.BuildTargetList) == 0: - self.BuildTargetList = self.TargetTxt.TargetTxtDictionary[DataType.TAB_TAT_DEFINES_TARGET] - - # if no tool chain given in command line, get it from target.txt - if self.ToolChainList == None or len(self.ToolChainList) == 0: - self.ToolChainList = self.TargetTxt.TargetTxtDictionary[DataType.TAB_TAT_DEFINES_TOOL_CHAIN_TAG] - if self.ToolChainList == None or len(self.ToolChainList) == 0: - EdkLogger.error("build", RESOURCE_NOT_AVAILABLE, ExtraData="No toolchain given. Don't know how to build.\n") - - # check if the tool chains are defined or not - NewToolChainList = [] - for ToolChain in self.ToolChainList: - if ToolChain not in self.ToolDef.ToolsDefTxtDatabase[TAB_TOD_DEFINES_TOOL_CHAIN_TAG]: - EdkLogger.warn("build", "Tool chain [%s] is not defined" % ToolChain) - else: - NewToolChainList.append(ToolChain) - # if no tool chain available, break the build - if len(NewToolChainList) == 0: - EdkLogger.error("build", RESOURCE_NOT_AVAILABLE, - ExtraData="[%s] not defined. No toolchain available for build!\n" % ", ".join(self.ToolChainList)) - else: - self.ToolChainList = NewToolChainList - - if self.ThreadNumber == None: - self.ThreadNumber = self.TargetTxt.TargetTxtDictionary[DataType.TAB_TAT_DEFINES_MAX_CONCURRENT_THREAD_NUMBER] - if self.ThreadNumber == '': - self.ThreadNumber = 0 - else: - self.ThreadNumber = int(self.ThreadNumber, 0) - - if self.ThreadNumber == 0: - self.ThreadNumber = 1 - - if not self.PlatformFile: - PlatformFile = self.TargetTxt.TargetTxtDictionary[DataType.TAB_TAT_DEFINES_ACTIVE_PLATFORM] - if not PlatformFile: - # Try to find one in current directory - WorkingDirectory = os.getcwd() - FileList = glob.glob(os.path.normpath(os.path.join(WorkingDirectory, '*.dsc'))) - FileNum = len(FileList) - if FileNum >= 2: - EdkLogger.error("build", OPTION_MISSING, - ExtraData="There are %d DSC files in %s. Use '-p' to specify one.\n" % (FileNum, WorkingDirectory)) - elif FileNum == 1: - PlatformFile = FileList[0] - else: - EdkLogger.error("build", RESOURCE_NOT_AVAILABLE, - ExtraData="No active platform specified in target.txt or command line! Nothing can be built.\n") - - self.PlatformFile = PathClass(NormFile(PlatformFile, self.WorkspaceDir), self.WorkspaceDir) - ErrorCode, ErrorInfo = self.PlatformFile.Validate(".dsc", False) - if ErrorCode != 0: - EdkLogger.error("build", ErrorCode, ExtraData=ErrorInfo) - - ## Initialize build configuration - # - # This method will parse DSC file and merge the configurations from - # command line and target.txt, then get the final build configurations. - # - def InitBuild(self): - ErrorCode, ErrorInfo = self.PlatformFile.Validate(".dsc") - if ErrorCode != 0: - EdkLogger.error("build", ErrorCode, ExtraData=ErrorInfo) - - # create metafile database - self.Db.InitDatabase() - - # we need information in platform description file to determine how to build - self.Platform = self.BuildDatabase[self.PlatformFile, 'COMMON'] - if not self.Fdf: - self.Fdf = self.Platform.FlashDefinition - - if self.SkuId == None or self.SkuId == '': - self.SkuId = self.Platform.SkuName - - # check FD/FV build target - if self.Fdf == None or self.Fdf == "": - if self.FdList != []: - EdkLogger.info("No flash definition file found. FD [%s] will be ignored." % " ".join(self.FdList)) - self.FdList = [] - if self.FvList != []: - EdkLogger.info("No flash definition file found. FV [%s] will be ignored." % " ".join(self.FvList)) - self.FvList = [] - else: - FdfParserObj = FdfParser(str(self.Fdf)) - FdfParserObj.ParseFile() - for fvname in self.FvList: - if fvname.upper() not in FdfParserObj.Profile.FvDict.keys(): - EdkLogger.error("build", OPTION_VALUE_INVALID, - "No such an FV in FDF file: %s" % fvname) - - # - # Merge Arch - # - if self.ArchList == None or len(self.ArchList) == 0: - ArchList = set(self.Platform.SupArchList) - else: - ArchList = set(self.ArchList) & set(self.Platform.SupArchList) - if len(ArchList) == 0: - EdkLogger.error("build", PARAMETER_INVALID, - ExtraData = "Active platform supports [%s] only, but [%s] is given." - % (" ".join(self.Platform.SupArchList), " ".join(self.ArchList))) - elif len(ArchList) != len(self.ArchList): - SkippedArchList = set(self.ArchList).symmetric_difference(set(self.Platform.SupArchList)) - EdkLogger.verbose("\nArch [%s] is ignored because active platform supports [%s] but [%s] is specified !" - % (" ".join(SkippedArchList), " ".join(self.Platform.SupArchList), " ".join(self.ArchList))) - self.ArchList = tuple(ArchList) - - # Merge build target - if self.BuildTargetList == None or len(self.BuildTargetList) == 0: - BuildTargetList = self.Platform.BuildTargets - else: - BuildTargetList = list(set(self.BuildTargetList) & set(self.Platform.BuildTargets)) - if BuildTargetList == []: - EdkLogger.error("build", PARAMETER_INVALID, "Active platform only supports [%s], but [%s] is given" - % (" ".join(self.Platform.BuildTargets), " ".join(self.BuildTargetList))) - self.BuildTargetList = BuildTargetList - - ## Build a module or platform - # - # Create autogen code and makfile for a module or platform, and the launch - # "make" command to build it - # - # @param Target The target of build command - # @param Platform The platform file - # @param Module The module file - # @param BuildTarget The name of build target, one of "DEBUG", "RELEASE" - # @param ToolChain The name of toolchain to build - # @param Arch The arch of the module/platform - # @param CreateDepModuleCodeFile Flag used to indicate creating code - # for dependent modules/Libraries - # @param CreateDepModuleMakeFile Flag used to indicate creating makefile - # for dependent modules/Libraries - # - def _Build(self, Target, AutoGenObject, CreateDepsCodeFile=True, CreateDepsMakeFile=True): - if AutoGenObject == None: - return False - - # skip file generation for cleanxxx targets, run and fds target - if Target not in ['clean', 'cleanlib', 'cleanall', 'run', 'fds']: - # for target which must generate AutoGen code and makefile - if not self.SkipAutoGen or Target == 'genc': - self.Progress.Start("Generating code") - AutoGenObject.CreateCodeFile(CreateDepsCodeFile) - self.Progress.Stop("done!") - if Target == "genc": - return True - - if not self.SkipAutoGen or Target == 'genmake': - self.Progress.Start("Generating makefile") - AutoGenObject.CreateMakeFile(CreateDepsMakeFile) - self.Progress.Stop("done!") - if Target == "genmake": - return True - else: - # always recreate top/platform makefile when clean, just in case of inconsistency - AutoGenObject.CreateCodeFile(False) - AutoGenObject.CreateMakeFile(False) - - if EdkLogger.GetLevel() == EdkLogger.QUIET: - EdkLogger.quiet("Building ... %s" % repr(AutoGenObject)) - - BuildCommand = AutoGenObject.BuildCommand - if BuildCommand == None or len(BuildCommand) == 0: - EdkLogger.error("build", OPTION_MISSING, ExtraData="No MAKE command found for [%s, %s, %s]" % Key) - - BuildCommand = BuildCommand + [Target] - LaunchCommand(BuildCommand, AutoGenObject.MakeFileDir) - if Target == 'cleanall': - try: - #os.rmdir(AutoGenObject.BuildDir) - RemoveDirectory(AutoGenObject.BuildDir, True) - except WindowsError, X: - EdkLogger.error("build", FILE_DELETE_FAILURE, ExtraData=str(X)) - return True - - ## Build active platform for different build targets and different tool chains - # - def _BuildPlatform(self): - for BuildTarget in self.BuildTargetList: - for ToolChain in self.ToolChainList: - Wa = WorkspaceAutoGen( - self.WorkspaceDir, - self.Platform, - BuildTarget, - ToolChain, - self.ArchList, - self.BuildDatabase, - self.TargetTxt, - self.ToolDef, - self.Fdf, - self.FdList, - self.FvList, - self.SkuId, - self.ReportFile, - self.ReportType - ) - self.Progress.Stop("done!") - self._Build(self.Target, Wa) - - ## Build active module for different build targets, different tool chains and different archs - # - def _BuildModule(self): - for BuildTarget in self.BuildTargetList: - for ToolChain in self.ToolChainList: - # - # module build needs platform build information, so get platform - # AutoGen first - # - Wa = WorkspaceAutoGen( - self.WorkspaceDir, - self.Platform, - BuildTarget, - ToolChain, - self.ArchList, - self.BuildDatabase, - self.TargetTxt, - self.ToolDef, - self.Fdf, - self.FdList, - self.FvList, - self.SkuId, - self.ReportFile, - self.ReportType - ) - Wa.CreateMakeFile(False) - self.Progress.Stop("done!") - MaList = [] - for Arch in self.ArchList: - Ma = ModuleAutoGen(Wa, self.ModuleFile, BuildTarget, ToolChain, Arch, self.PlatformFile) - if Ma == None: continue - MaList.append(Ma) - self._Build(self.Target, Ma) - if MaList == []: - EdkLogger.error( - 'build', - BUILD_ERROR, - "Module for [%s] is not a component of active platform."\ - " Please make sure that the ARCH and inf file path are"\ - " given in the same as in [%s]" %\ - (', '.join(self.ArchList), self.Platform), - ExtraData=self.ModuleFile - ) - - ## Build a platform in multi-thread mode - # - def _MultiThreadBuildPlatform(self): - for BuildTarget in self.BuildTargetList: - for ToolChain in self.ToolChainList: - Wa = WorkspaceAutoGen( - self.WorkspaceDir, - self.Platform, - BuildTarget, - ToolChain, - self.ArchList, - self.BuildDatabase, - self.TargetTxt, - self.ToolDef, - self.Fdf, - self.FdList, - self.FvList, - self.SkuId, - self.ReportFile, - self.ReportType - ) - Wa.CreateMakeFile(False) - - # multi-thread exit flag - ExitFlag = threading.Event() - ExitFlag.clear() - for Arch in self.ArchList: - Pa = PlatformAutoGen(Wa, self.PlatformFile, BuildTarget, ToolChain, Arch) - if Pa == None: - continue - for Module in Pa.Platform.Modules: - # Get ModuleAutoGen object to generate C code file and makefile - Ma = ModuleAutoGen(Wa, Module, BuildTarget, ToolChain, Arch, self.PlatformFile) - if Ma == None: - continue - # Not to auto-gen for targets 'clean', 'cleanlib', 'cleanall', 'run', 'fds' - if self.Target not in ['clean', 'cleanlib', 'cleanall', 'run', 'fds']: - # for target which must generate AutoGen code and makefile - if not self.SkipAutoGen or self.Target == 'genc': - Ma.CreateCodeFile(True) - if self.Target == "genc": - continue - - if not self.SkipAutoGen or self.Target == 'genmake': - Ma.CreateMakeFile(True) - if self.Target == "genmake": - continue - self.Progress.Stop("done!") - # Generate build task for the module - Bt = BuildTask.New(ModuleMakeUnit(Ma, self.Target)) - # Break build if any build thread has error - if BuildTask.HasError(): - # we need a full version of makefile for platform - ExitFlag.set() - BuildTask.WaitForComplete() - Pa.CreateMakeFile(False) - EdkLogger.error("build", BUILD_ERROR, "Failed to build module", ExtraData=GlobalData.gBuildingModule) - # Start task scheduler - if not BuildTask.IsOnGoing(): - BuildTask.StartScheduler(self.ThreadNumber, ExitFlag) - - # in case there's an interruption. we need a full version of makefile for platform - Pa.CreateMakeFile(False) - if BuildTask.HasError(): - EdkLogger.error("build", BUILD_ERROR, "Failed to build module", ExtraData=GlobalData.gBuildingModule) - - # - # All modules have been put in build tasks queue. Tell task scheduler - # to exit if all tasks are completed - # - ExitFlag.set() - BuildTask.WaitForComplete() - - # - # Check for build error, and raise exception if one - # has been signaled. - # - if BuildTask.HasError(): - EdkLogger.error("build", BUILD_ERROR, "Failed to build module", ExtraData=GlobalData.gBuildingModule) - - # Generate FD image if there's a FDF file found - if self.Fdf != '' and self.Target in ["", "all", "fds"]: - LaunchCommand(Wa.BuildCommand + ["fds"], Wa.MakeFileDir) - - ## Generate GuidedSectionTools.txt in the FV directories. - # - def CreateGuidedSectionToolsFile(self): - for Arch in self.ArchList: - for BuildTarget in self.BuildTargetList: - for ToolChain in self.ToolChainList: - FvDir = os.path.join( - self.WorkspaceDir, - self.Platform.OutputDirectory, - '_'.join((BuildTarget, ToolChain)), - 'FV' - ) - if not os.path.exists(FvDir): - continue - # Build up the list of supported architectures for this build - prefix = '%s_%s_%s_' % (BuildTarget, ToolChain, Arch) - - # Look through the tool definitions for GUIDed tools - guidAttribs = [] - for (attrib, value) in self.ToolDef.ToolsDefTxtDictionary.iteritems(): - if attrib.upper().endswith('_GUID'): - split = attrib.split('_') - thisPrefix = '_'.join(split[0:3]) + '_' - if thisPrefix == prefix: - guid = self.ToolDef.ToolsDefTxtDictionary[attrib] - guid = guid.lower() - toolName = split[3] - path = '_'.join(split[0:4]) + '_PATH' - path = self.ToolDef.ToolsDefTxtDictionary[path] - path = self.GetFullPathOfTool(path) - guidAttribs.append((guid, toolName, path)) - - # Write out GuidedSecTools.txt - toolsFile = os.path.join(FvDir, 'GuidedSectionTools.txt') - toolsFile = open(toolsFile, 'wt') - for guidedSectionTool in guidAttribs: - print >> toolsFile, ' '.join(guidedSectionTool) - toolsFile.close() - - ## Returns the full path of the tool. - # - def GetFullPathOfTool (self, tool): - if os.path.exists(tool): - return os.path.realpath(tool) - else: - # We need to search for the tool using the - # PATH environment variable. - for dirInPath in os.environ['PATH'].split(os.pathsep): - foundPath = os.path.join(dirInPath, tool) - if os.path.exists(foundPath): - return os.path.realpath(foundPath) - - # If the tool was not found in the path then we just return - # the input tool. - return tool - - ## Launch the module or platform build - # - def Launch(self): - if self.ModuleFile == None or self.ModuleFile == "": - if not self.SpawnMode or self.Target not in ["", "all"]: - self.SpawnMode = False - self._BuildPlatform() - else: - self._MultiThreadBuildPlatform() - self.CreateGuidedSectionToolsFile() - else: - self.SpawnMode = False - self._BuildModule() - - ## Do some clean-up works when error occurred - def Relinquish(self): - OldLogLevel = EdkLogger.GetLevel() - EdkLogger.SetLevel(EdkLogger.ERROR) - #self.DumpBuildData() - Utils.Progressor.Abort() - if self.SpawnMode == True: - BuildTask.Abort() - EdkLogger.SetLevel(OldLogLevel) - - def DumpBuildData(self): - CacheDirectory = os.path.join(self.WorkspaceDir, gBuildCacheDir) - Utils.CreateDirectory(CacheDirectory) - Utils.DataDump(Utils.gFileTimeStampCache, os.path.join(CacheDirectory, "gFileTimeStampCache")) - Utils.DataDump(Utils.gDependencyDatabase, os.path.join(CacheDirectory, "gDependencyDatabase")) - - def RestoreBuildData(self): - FilePath = os.path.join(self.WorkspaceDir, gBuildCacheDir, "gFileTimeStampCache") - if Utils.gFileTimeStampCache == {} and os.path.isfile(FilePath): - Utils.gFileTimeStampCache = Utils.DataRestore(FilePath) - if Utils.gFileTimeStampCache == None: - Utils.gFileTimeStampCache = {} - - FilePath = os.path.join(self.WorkspaceDir, gBuildCacheDir, "gDependencyDatabase") - if Utils.gDependencyDatabase == {} and os.path.isfile(FilePath): - Utils.gDependencyDatabase = Utils.DataRestore(FilePath) - if Utils.gDependencyDatabase == None: - Utils.gDependencyDatabase = {} - -def ParseDefines(DefineList=[]): - DefineDict = {} - if DefineList != None: - for Define in DefineList: - DefineTokenList = Define.split("=", 1) - if len(DefineTokenList) == 1: - DefineDict[DefineTokenList[0]] = "" - else: - DefineDict[DefineTokenList[0]] = DefineTokenList[1].strip() - return DefineDict - -gParamCheck = [] -def SingleCheckCallback(option, opt_str, value, parser): - if option not in gParamCheck: - setattr(parser.values, option.dest, value) - gParamCheck.append(option) - else: - parser.error("Option %s only allows one instance in command line!" % option) - -## Parse command line options -# -# Using standard Python module optparse to parse command line option of this tool. -# -# @retval Opt A optparse.Values object containing the parsed options -# @retval Args Target of build command -# -def MyOptionParser(): - Parser = OptionParser(description=__copyright__,version=__version__,prog="build.exe",usage="%prog [options] [all|fds|genc|genmake|clean|cleanall|cleanlib|modules|libraries|run]") - Parser.add_option("-a", "--arch", action="append", type="choice", choices=['IA32','X64','IPF','EBC','ARM'], dest="TargetArch", - help="ARCHS is one of list: IA32, X64, IPF, ARM or EBC, which overrides target.txt's TARGET_ARCH definition. To specify more archs, please repeat this option.") - Parser.add_option("-p", "--platform", action="callback", type="string", dest="PlatformFile", callback=SingleCheckCallback, - help="Build the platform specified by the DSC file name argument, overriding target.txt's ACTIVE_PLATFORM definition.") - Parser.add_option("-m", "--module", action="callback", type="string", dest="ModuleFile", callback=SingleCheckCallback, - help="Build the module specified by the INF file name argument.") - Parser.add_option("-b", "--buildtarget", action="append", type="choice", choices=['DEBUG','RELEASE'], dest="BuildTarget", - help="BuildTarget is one of list: DEBUG, RELEASE, which overrides target.txt's TARGET definition. To specify more TARGET, please repeat this option.") - Parser.add_option("-t", "--tagname", action="append", type="string", dest="ToolChain", - help="Using the Tool Chain Tagname to build the platform, overriding target.txt's TOOL_CHAIN_TAG definition.") - Parser.add_option("-x", "--sku-id", action="callback", type="string", dest="SkuId", callback=SingleCheckCallback, - help="Using this name of SKU ID to build the platform, overriding SKUID_IDENTIFIER in DSC file.") - - Parser.add_option("-n", action="callback", type="int", dest="ThreadNumber", callback=SingleCheckCallback, - help="Build the platform using multi-threaded compiler. The value overrides target.txt's MAX_CONCURRENT_THREAD_NUMBER. Less than 2 will disable multi-thread builds.") - - Parser.add_option("-f", "--fdf", action="callback", type="string", dest="FdfFile", callback=SingleCheckCallback, - help="The name of the FDF file to use, which overrides the setting in the DSC file.") - Parser.add_option("-r", "--rom-image", action="append", type="string", dest="RomImage", default=[], - help="The name of FD to be generated. The name must be from [FD] section in FDF file.") - Parser.add_option("-i", "--fv-image", action="append", type="string", dest="FvImage", default=[], - help="The name of FV to be generated. The name must be from [FV] section in FDF file.") - - Parser.add_option("-u", "--skip-autogen", action="store_true", dest="SkipAutoGen", help="Skip AutoGen step.") - Parser.add_option("-e", "--re-parse", action="store_true", dest="Reparse", help="Re-parse all meta-data files.") - - Parser.add_option("-c", "--case-insensitive", action="store_true", dest="CaseInsensitive", help="Don't check case of file name.") - - # Parser.add_option("-D", "--define", action="append", dest="Defines", metavar="NAME[=[VALUE]]", - # help="Define global macro which can be used in DSC/DEC/INF files.") - - Parser.add_option("-w", "--warning-as-error", action="store_true", dest="WarningAsError", help="Treat warning in tools as error.") - Parser.add_option("-j", "--log", action="store", dest="LogFile", help="Put log in specified file as well as on console.") - - Parser.add_option("-s", "--silent", action="store_true", type=None, dest="SilentMode", - help="Make use of silent mode of (n)make.") - Parser.add_option("-q", "--quiet", action="store_true", type=None, help="Disable all messages except FATAL ERRORS.") - Parser.add_option("-v", "--verbose", action="store_true", type=None, help="Turn on verbose output with informational messages printed, "\ - "including library instances selected, final dependency expression, "\ - "and warning messages, etc.") - Parser.add_option("-d", "--debug", action="store", type="int", help="Enable debug messages at specified level.") - Parser.add_option("-D", "--define", action="append", type="string", dest="Macros", help="Macro: \"Name [= Value]\".") - - Parser.add_option("-y", "--report-file", action="store", dest="ReportFile", help="Create/overwrite the report to the specified filename.") - Parser.add_option("-Y", "--report-type", action="append", type="choice", choices=['ALL','PCD',], dest="ReportType", - help="Flags that control the type of build report to generate. Must be one of: [ALL, PCD]. To specify more than one flag, repeat this option on the command line.") - - (Opt, Args)=Parser.parse_args() - return (Opt, Args) - -## Tool entrance method -# -# This method mainly dispatch specific methods per the command line options. -# If no error found, return zero value so the caller of this tool can know -# if it's executed successfully or not. -# -# @retval 0 Tool was successful -# @retval 1 Tool failed -# -def Main(): - StartTime = time.time() - - # Initialize log system - EdkLogger.Initialize() - - # - # Parse the options and args - # - (Option, Target) = MyOptionParser() - GlobalData.gOptions = Option - GlobalData.gCaseInsensitive = Option.CaseInsensitive - - # Set log level - if Option.verbose != None: - EdkLogger.SetLevel(EdkLogger.VERBOSE) - elif Option.quiet != None: - EdkLogger.SetLevel(EdkLogger.QUIET) - elif Option.debug != None: - EdkLogger.SetLevel(Option.debug + 1) - else: - EdkLogger.SetLevel(EdkLogger.INFO) - - if Option.LogFile != None: - EdkLogger.SetLogFile(Option.LogFile) - - if Option.WarningAsError == True: - EdkLogger.SetWarningAsError() - - if platform.platform().find("Windows") >= 0: - GlobalData.gIsWindows = True - else: - GlobalData.gIsWindows = False - - EdkLogger.quiet(time.strftime("%H:%M:%S, %b.%d %Y ", time.localtime()) + "[%s]\n" % platform.platform()) - ReturnCode = 0 - MyBuild = None - try: - if len(Target) == 0: - Target = "all" - elif len(Target) >= 2: - EdkLogger.error("build", OPTION_NOT_SUPPORTED, "More than one targets are not supported.", - ExtraData="Please select one of: %s" %(' '.join(gSupportedTarget))) - else: - Target = Target[0].lower() - - if Target not in gSupportedTarget: - EdkLogger.error("build", OPTION_NOT_SUPPORTED, "Not supported target [%s]." % Target, - ExtraData="Please select one of: %s" %(' '.join(gSupportedTarget))) - - GlobalData.gGlobalDefines = ParseDefines(Option.Macros) - # - # Check environment variable: EDK_TOOLS_PATH, WORKSPACE, PATH - # - CheckEnvVariable() - Workspace = os.getenv("WORKSPACE") - # - # Get files real name in workspace dir - # - GlobalData.gAllFiles = Utils.DirCache(Workspace) - - WorkingDirectory = os.getcwd() - if not Option.ModuleFile: - FileList = glob.glob(os.path.normpath(os.path.join(WorkingDirectory, '*.inf'))) - FileNum = len(FileList) - if FileNum >= 2: - EdkLogger.error("build", OPTION_NOT_SUPPORTED, "There are %d INF files in %s." % (FileNum, WorkingDirectory), - ExtraData="Please use '-m ' switch to choose one.") - elif FileNum == 1: - Option.ModuleFile = NormFile(FileList[0], Workspace) - - if Option.ModuleFile: - Option.ModuleFile = PathClass(Option.ModuleFile, Workspace) - ErrorCode, ErrorInfo = Option.ModuleFile.Validate(".inf", False) - if ErrorCode != 0: - EdkLogger.error("build", ErrorCode, ExtraData=ErrorInfo) - - if Option.PlatformFile != None: - Option.PlatformFile = PathClass(Option.PlatformFile, Workspace) - ErrorCode, ErrorInfo = Option.PlatformFile.Validate(".dsc", False) - if ErrorCode != 0: - EdkLogger.error("build", ErrorCode, ExtraData=ErrorInfo) - - if Option.FdfFile != None: - Option.FdfFile = PathClass(Option.FdfFile, Workspace) - ErrorCode, ErrorInfo = Option.FdfFile.Validate(".fdf", False) - if ErrorCode != 0: - EdkLogger.error("build", ErrorCode, ExtraData=ErrorInfo) - - MyBuild = Build(Target, Workspace, Option.PlatformFile, Option.ModuleFile, - Option.TargetArch, Option.ToolChain, Option.BuildTarget, - Option.FdfFile, Option.RomImage, Option.FvImage, - None, Option.SilentMode, Option.ThreadNumber, - Option.SkipAutoGen, Option.Reparse, Option.SkuId, - Option.ReportFile, Option.ReportType) - MyBuild.Launch() - #MyBuild.DumpBuildData() - except FatalError, X: - if MyBuild != None: - # for multi-thread build exits safely - MyBuild.Relinquish() - if Option != None and Option.debug != None: - EdkLogger.quiet("(Python %s on %s) " % (platform.python_version(), sys.platform) + traceback.format_exc()) - ReturnCode = X.args[0] - except Warning, X: - # error from Fdf parser - if MyBuild != None: - # for multi-thread build exits safely - MyBuild.Relinquish() - if Option != None and Option.debug != None: - EdkLogger.quiet("(Python %s on %s) " % (platform.python_version(), sys.platform) + traceback.format_exc()) - else: - EdkLogger.error(X.ToolName, FORMAT_INVALID, File=X.FileName, Line=X.LineNumber, ExtraData=X.Message, RaiseError = False) - ReturnCode = FORMAT_INVALID - except KeyboardInterrupt: - ReturnCode = ABORT_ERROR - if Option != None and Option.debug != None: - EdkLogger.quiet("(Python %s on %s) " % (platform.python_version(), sys.platform) + traceback.format_exc()) - except: - if MyBuild != None: - # for multi-thread build exits safely - MyBuild.Relinquish() - - # try to get the meta-file from the object causing exception - Tb = sys.exc_info()[-1] - MetaFile = GlobalData.gProcessingFile - while Tb != None: - if 'self' in Tb.tb_frame.f_locals and hasattr(Tb.tb_frame.f_locals['self'], 'MetaFile'): - MetaFile = Tb.tb_frame.f_locals['self'].MetaFile - Tb = Tb.tb_next - EdkLogger.error( - "\nbuild", - CODE_ERROR, - "Unknown fatal error when processing [%s]" % MetaFile, - ExtraData="\n(Please send email to dev@buildtools.tianocore.org for help, attaching following call stack trace!)\n", - RaiseError=False - ) - EdkLogger.quiet("(Python %s on %s) " % (platform.python_version(), sys.platform) + traceback.format_exc()) - ReturnCode = CODE_ERROR - finally: - Utils.Progressor.Abort() - - if MyBuild != None: - MyBuild.Db.Close() - - if ReturnCode == 0: - Conclusion = "Done" - elif ReturnCode == ABORT_ERROR: - Conclusion = "Aborted" - else: - Conclusion = "Failed" - FinishTime = time.time() - BuildDuration = time.strftime("%M:%S", time.gmtime(int(round(FinishTime - StartTime)))) - EdkLogger.SetLevel(EdkLogger.QUIET) - EdkLogger.quiet("\n- %s -\n%s [%s]" % (Conclusion, time.strftime("%H:%M:%S, %b.%d %Y", time.localtime()), BuildDuration)) - - return ReturnCode - -if __name__ == '__main__': - r = Main() - ## 0-127 is a safe return range, and 1 is a standard default error - if r < 0 or r > 127: r = 1 - sys.exit(r) - +## @file +# build a platform or a module +# +# Copyright (c) 2007 - 2010, Intel Corporation +# +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# + +## +# Import Modules +# +import os +import re +import StringIO +import sys +import glob +import time +import platform +import traceback + +from struct import * +from threading import * +from optparse import OptionParser +from subprocess import * +from Common import Misc as Utils + +from Common.TargetTxtClassObject import * +from Common.ToolDefClassObject import * +from Common.DataType import * +from AutoGen.AutoGen import * +from Common.BuildToolError import * +from Workspace.WorkspaceDatabase import * + +from BuildReport import BuildReport +from GenPatchPcdTable.GenPatchPcdTable import * +from PatchPcdValue.PatchPcdValue import * + +import Common.EdkLogger +import Common.GlobalData as GlobalData + +# Version and Copyright +VersionNumber = "0.5" +__version__ = "%prog Version " + VersionNumber +__copyright__ = "Copyright (c) 2007 - 2010, Intel Corporation All rights reserved." + +## standard targets of build command +gSupportedTarget = ['all', 'genc', 'genmake', 'modules', 'libraries', 'fds', 'clean', 'cleanall', 'cleanlib', 'run'] + +## build configuration file +gBuildConfiguration = "Conf/target.txt" +gBuildCacheDir = "Conf/.cache" +gToolsDefinition = "Conf/tools_def.txt" + +## Check environment PATH variable to make sure the specified tool is found +# +# If the tool is found in the PATH, then True is returned +# Otherwise, False is returned +# +def IsToolInPath(tool): + if os.environ.has_key('PATHEXT'): + extns = os.environ['PATHEXT'].split(os.path.pathsep) + else: + extns = ('',) + for pathDir in os.environ['PATH'].split(os.path.pathsep): + for ext in extns: + if os.path.exists(os.path.join(pathDir, tool + ext)): + return True + return False + +## Check environment variables +# +# Check environment variables that must be set for build. Currently they are +# +# WORKSPACE The directory all packages/platforms start from +# EDK_TOOLS_PATH The directory contains all tools needed by the build +# PATH $(EDK_TOOLS_PATH)/Bin/ must be set in PATH +# +# If any of above environment variable is not set or has error, the build +# will be broken. +# +def CheckEnvVariable(): + # check WORKSPACE + if "WORKSPACE" not in os.environ: + EdkLogger.error("build", ATTRIBUTE_NOT_AVAILABLE, "Environment variable not found", + ExtraData="WORKSPACE") + + WorkspaceDir = os.path.normcase(os.path.normpath(os.environ["WORKSPACE"])) + if not os.path.exists(WorkspaceDir): + EdkLogger.error("build", FILE_NOT_FOUND, "WORKSPACE doesn't exist", ExtraData="%s" % WorkspaceDir) + elif ' ' in WorkspaceDir: + EdkLogger.error("build", FORMAT_NOT_SUPPORTED, "No space is allowed in WORKSPACE path", + ExtraData=WorkspaceDir) + os.environ["WORKSPACE"] = WorkspaceDir + + # + # Check EFI_SOURCE (R8 build convention). EDK_SOURCE will always point to ECP + # + os.environ["ECP_SOURCE"] = os.path.join(WorkspaceDir, GlobalData.gEdkCompatibilityPkg) + if "EFI_SOURCE" not in os.environ: + os.environ["EFI_SOURCE"] = os.environ["ECP_SOURCE"] + if "EDK_SOURCE" not in os.environ: + os.environ["EDK_SOURCE"] = os.environ["ECP_SOURCE"] + + # + # Unify case of characters on case-insensitive systems + # + EfiSourceDir = os.path.normcase(os.path.normpath(os.environ["EFI_SOURCE"])) + EdkSourceDir = os.path.normcase(os.path.normpath(os.environ["EDK_SOURCE"])) + EcpSourceDir = os.path.normcase(os.path.normpath(os.environ["ECP_SOURCE"])) + + os.environ["EFI_SOURCE"] = EfiSourceDir + os.environ["EDK_SOURCE"] = EdkSourceDir + os.environ["ECP_SOURCE"] = EcpSourceDir + os.environ["EDK_TOOLS_PATH"] = os.path.normcase(os.environ["EDK_TOOLS_PATH"]) + + if not os.path.exists(EcpSourceDir): + EdkLogger.verbose("ECP_SOURCE = %s doesn't exist. R8 modules could not be built." % EcpSourceDir) + elif ' ' in EcpSourceDir: + EdkLogger.error("build", FORMAT_NOT_SUPPORTED, "No space is allowed in ECP_SOURCE path", + ExtraData=EcpSourceDir) + if not os.path.exists(EdkSourceDir): + if EdkSourceDir == EcpSourceDir: + EdkLogger.verbose("EDK_SOURCE = %s doesn't exist. R8 modules could not be built." % EdkSourceDir) + else: + EdkLogger.error("build", PARAMETER_INVALID, "EDK_SOURCE does not exist", + ExtraData=EdkSourceDir) + elif ' ' in EdkSourceDir: + EdkLogger.error("build", FORMAT_NOT_SUPPORTED, "No space is allowed in EDK_SOURCE path", + ExtraData=EdkSourceDir) + if not os.path.exists(EfiSourceDir): + if EfiSourceDir == EcpSourceDir: + EdkLogger.verbose("EFI_SOURCE = %s doesn't exist. R8 modules could not be built." % EfiSourceDir) + else: + EdkLogger.error("build", PARAMETER_INVALID, "EFI_SOURCE does not exist", + ExtraData=EfiSourceDir) + elif ' ' in EfiSourceDir: + EdkLogger.error("build", FORMAT_NOT_SUPPORTED, "No space is allowed in EFI_SOURCE path", + ExtraData=EfiSourceDir) + + # change absolute path to relative path to WORKSPACE + if EfiSourceDir.upper().find(WorkspaceDir.upper()) != 0: + EdkLogger.error("build", PARAMETER_INVALID, "EFI_SOURCE is not under WORKSPACE", + ExtraData="WORKSPACE = %s\n EFI_SOURCE = %s" % (WorkspaceDir, EfiSourceDir)) + if EdkSourceDir.upper().find(WorkspaceDir.upper()) != 0: + EdkLogger.error("build", PARAMETER_INVALID, "EDK_SOURCE is not under WORKSPACE", + ExtraData="WORKSPACE = %s\n EDK_SOURCE = %s" % (WorkspaceDir, EdkSourceDir)) + if EcpSourceDir.upper().find(WorkspaceDir.upper()) != 0: + EdkLogger.error("build", PARAMETER_INVALID, "ECP_SOURCE is not under WORKSPACE", + ExtraData="WORKSPACE = %s\n ECP_SOURCE = %s" % (WorkspaceDir, EcpSourceDir)) + + # check EDK_TOOLS_PATH + if "EDK_TOOLS_PATH" not in os.environ: + EdkLogger.error("build", ATTRIBUTE_NOT_AVAILABLE, "Environment variable not found", + ExtraData="EDK_TOOLS_PATH") + + # check PATH + if "PATH" not in os.environ: + EdkLogger.error("build", ATTRIBUTE_NOT_AVAILABLE, "Environment variable not found", + ExtraData="PATH") + + GlobalData.gWorkspace = WorkspaceDir + GlobalData.gEfiSource = EfiSourceDir + GlobalData.gEdkSource = EdkSourceDir + GlobalData.gEcpSource = EcpSourceDir + +## Get normalized file path +# +# Convert the path to be local format, and remove the WORKSPACE path at the +# beginning if the file path is given in full path. +# +# @param FilePath File path to be normalized +# @param Workspace Workspace path which the FilePath will be checked against +# +# @retval string The normalized file path +# +def NormFile(FilePath, Workspace): + # check if the path is absolute or relative + if os.path.isabs(FilePath): + FileFullPath = os.path.normpath(FilePath) + else: + FileFullPath = os.path.normpath(os.path.join(Workspace, FilePath)) + + # check if the file path exists or not + if not os.path.isfile(FileFullPath): + EdkLogger.error("build", FILE_NOT_FOUND, ExtraData="\t%s (Please give file in absolute path or relative to WORKSPACE)" % FileFullPath) + + # remove workspace directory from the beginning part of the file path + if Workspace[-1] in ["\\", "/"]: + return FileFullPath[len(Workspace):] + else: + return FileFullPath[(len(Workspace) + 1):] + +## Get the output of an external program +# +# This is the entrance method of thread reading output of an external program and +# putting them in STDOUT/STDERR of current program. +# +# @param From The stream message read from +# @param To The stream message put on +# @param ExitFlag The flag used to indicate stopping reading +# +def ReadMessage(From, To, ExitFlag): + while True: + # read one line a time + Line = From.readline() + # empty string means "end" + if Line != None and Line != "": + To(Line.rstrip()) + else: + break + if ExitFlag.isSet(): + break + +## Launch an external program +# +# This method will call subprocess.Popen to execute an external program with +# given options in specified directory. Because of the dead-lock issue during +# redirecting output of the external program, threads are used to to do the +# redirection work. +# +# @param Command A list or string containing the call of the program +# @param WorkingDir The directory in which the program will be running +# +def LaunchCommand(Command, WorkingDir): + # if working directory doesn't exist, Popen() will raise an exception + if not os.path.isdir(WorkingDir): + EdkLogger.error("build", FILE_NOT_FOUND, ExtraData=WorkingDir) + + Proc = None + EndOfProcedure = None + try: + # launch the command + Proc = Popen(Command, stdout=PIPE, stderr=PIPE, env=os.environ, cwd=WorkingDir, bufsize=-1) + + # launch two threads to read the STDOUT and STDERR + EndOfProcedure = Event() + EndOfProcedure.clear() + if Proc.stdout: + StdOutThread = Thread(target=ReadMessage, args=(Proc.stdout, EdkLogger.info, EndOfProcedure)) + StdOutThread.setName("STDOUT-Redirector") + StdOutThread.setDaemon(False) + StdOutThread.start() + + if Proc.stderr: + StdErrThread = Thread(target=ReadMessage, args=(Proc.stderr, EdkLogger.quiet, EndOfProcedure)) + StdErrThread.setName("STDERR-Redirector") + StdErrThread.setDaemon(False) + StdErrThread.start() + + # waiting for program exit + Proc.wait() + except: # in case of aborting + # terminate the threads redirecting the program output + if EndOfProcedure != None: + EndOfProcedure.set() + if Proc == None: + if type(Command) != type(""): + Command = " ".join(Command) + EdkLogger.error("build", COMMAND_FAILURE, "Failed to start command", ExtraData="%s [%s]" % (Command, WorkingDir)) + + if Proc.stdout: + StdOutThread.join() + if Proc.stderr: + StdErrThread.join() + + # check the return code of the program + if Proc.returncode != 0: + if type(Command) != type(""): + Command = " ".join(Command) + EdkLogger.error("build", COMMAND_FAILURE, ExtraData="%s [%s]" % (Command, WorkingDir)) + +## The smallest unit that can be built in multi-thread build mode +# +# This is the base class of build unit. The "Obj" parameter must provide +# __str__(), __eq__() and __hash__() methods. Otherwise there could be build units +# missing build. +# +# Currently the "Obj" should be only ModuleAutoGen or PlatformAutoGen objects. +# +class BuildUnit: + ## The constructor + # + # @param self The object pointer + # @param Obj The object the build is working on + # @param Target The build target name, one of gSupportedTarget + # @param Dependency The BuildUnit(s) which must be completed in advance + # @param WorkingDir The directory build command starts in + # + def __init__(self, Obj, BuildCommand, Target, Dependency, WorkingDir="."): + self.BuildObject = Obj + self.Dependency = Dependency + self.WorkingDir = WorkingDir + self.Target = Target + self.BuildCommand = BuildCommand + if BuildCommand == None or len(BuildCommand) == 0: + EdkLogger.error("build", OPTION_MISSING, "No build command found for", + ExtraData=str(Obj)) + + ## str() method + # + # It just returns the string representaion of self.BuildObject + # + # @param self The object pointer + # + def __str__(self): + return str(self.BuildObject) + + ## "==" operator method + # + # It just compares self.BuildObject with "Other". So self.BuildObject must + # provide its own __eq__() method. + # + # @param self The object pointer + # @param Other The other BuildUnit object compared to + # + def __eq__(self, Other): + return Other != None and self.BuildObject == Other.BuildObject \ + and self.BuildObject.Arch == Other.BuildObject.Arch + + ## hash() method + # + # It just returns the hash value of self.BuildObject which must be hashable. + # + # @param self The object pointer + # + def __hash__(self): + return hash(self.BuildObject) + hash(self.BuildObject.Arch) + + def __repr__(self): + return repr(self.BuildObject) + +## The smallest module unit that can be built by nmake/make command in multi-thread build mode +# +# This class is for module build by nmake/make build system. The "Obj" parameter +# must provide __str__(), __eq__() and __hash__() methods. Otherwise there could +# be make units missing build. +# +# Currently the "Obj" should be only ModuleAutoGen object. +# +class ModuleMakeUnit(BuildUnit): + ## The constructor + # + # @param self The object pointer + # @param Obj The ModuleAutoGen object the build is working on + # @param Target The build target name, one of gSupportedTarget + # + def __init__(self, Obj, Target): + Dependency = [ModuleMakeUnit(La, Target) for La in Obj.LibraryAutoGenList] + BuildUnit.__init__(self, Obj, Obj.BuildCommand, Target, Dependency, Obj.MakeFileDir) + if Target in [None, "", "all"]: + self.Target = "tbuild" + +## The smallest platform unit that can be built by nmake/make command in multi-thread build mode +# +# This class is for platform build by nmake/make build system. The "Obj" parameter +# must provide __str__(), __eq__() and __hash__() methods. Otherwise there could +# be make units missing build. +# +# Currently the "Obj" should be only PlatformAutoGen object. +# +class PlatformMakeUnit(BuildUnit): + ## The constructor + # + # @param self The object pointer + # @param Obj The PlatformAutoGen object the build is working on + # @param Target The build target name, one of gSupportedTarget + # + def __init__(self, Obj, Target): + Dependency = [ModuleMakeUnit(Lib, Target) for Lib in self.BuildObject.LibraryAutoGenList] + Dependency.extend([ModuleMakeUnit(Mod, Target) for Mod in self.BuildObject.ModuleAutoGenList]) + BuildUnit.__init__(self, Obj, Obj.BuildCommand, Target, Dependency, Obj.MakeFileDir) + +## The class representing the task of a module build or platform build +# +# This class manages the build tasks in multi-thread build mode. Its jobs include +# scheduling thread running, catching thread error, monitor the thread status, etc. +# +class BuildTask: + # queue for tasks waiting for schedule + _PendingQueue = sdict() + _PendingQueueLock = threading.Lock() + + # queue for tasks ready for running + _ReadyQueue = sdict() + _ReadyQueueLock = threading.Lock() + + # queue for run tasks + _RunningQueue = sdict() + _RunningQueueLock = threading.Lock() + + # queue containing all build tasks, in case duplicate build + _TaskQueue = sdict() + + # flag indicating error occurs in a running thread + _ErrorFlag = threading.Event() + _ErrorFlag.clear() + _ErrorMessage = "" + + # BoundedSemaphore object used to control the number of running threads + _Thread = None + + # flag indicating if the scheduler is started or not + _SchedulerStopped = threading.Event() + _SchedulerStopped.set() + + ## Start the task scheduler thread + # + # @param MaxThreadNumber The maximum thread number + # @param ExitFlag Flag used to end the scheduler + # + @staticmethod + def StartScheduler(MaxThreadNumber, ExitFlag): + SchedulerThread = Thread(target=BuildTask.Scheduler, args=(MaxThreadNumber, ExitFlag)) + SchedulerThread.setName("Build-Task-Scheduler") + SchedulerThread.setDaemon(False) + SchedulerThread.start() + # wait for the scheduler to be started, especially useful in Linux + while not BuildTask.IsOnGoing(): + time.sleep(0.01) + + ## Scheduler method + # + # @param MaxThreadNumber The maximum thread number + # @param ExitFlag Flag used to end the scheduler + # + @staticmethod + def Scheduler(MaxThreadNumber, ExitFlag): + BuildTask._SchedulerStopped.clear() + try: + # use BoundedSemaphore to control the maximum running threads + BuildTask._Thread = BoundedSemaphore(MaxThreadNumber) + # + # scheduling loop, which will exits when no pending/ready task and + # indicated to do so, or there's error in running thread + # + while (len(BuildTask._PendingQueue) > 0 or len(BuildTask._ReadyQueue) > 0 \ + or not ExitFlag.isSet()) and not BuildTask._ErrorFlag.isSet(): + EdkLogger.debug(EdkLogger.DEBUG_8, "Pending Queue (%d), Ready Queue (%d)" + % (len(BuildTask._PendingQueue), len(BuildTask._ReadyQueue))) + + # get all pending tasks + BuildTask._PendingQueueLock.acquire() + BuildObjectList = BuildTask._PendingQueue.keys() + # + # check if their dependency is resolved, and if true, move them + # into ready queue + # + for BuildObject in BuildObjectList: + Bt = BuildTask._PendingQueue[BuildObject] + if Bt.IsReady(): + BuildTask._ReadyQueue[BuildObject] = BuildTask._PendingQueue.pop(BuildObject) + BuildTask._PendingQueueLock.release() + + # launch build thread until the maximum number of threads is reached + while not BuildTask._ErrorFlag.isSet(): + # empty ready queue, do nothing further + if len(BuildTask._ReadyQueue) == 0: + break + + # wait for active thread(s) exit + BuildTask._Thread.acquire(True) + + # start a new build thread + Bo = BuildTask._ReadyQueue.keys()[0] + Bt = BuildTask._ReadyQueue.pop(Bo) + + # move into running queue + BuildTask._RunningQueueLock.acquire() + BuildTask._RunningQueue[Bo] = Bt + BuildTask._RunningQueueLock.release() + + Bt.Start() + # avoid tense loop + time.sleep(0.01) + + # avoid tense loop + time.sleep(0.01) + + # wait for all running threads exit + if BuildTask._ErrorFlag.isSet(): + EdkLogger.quiet("\nWaiting for all build threads exit...") + # while not BuildTask._ErrorFlag.isSet() and \ + while len(BuildTask._RunningQueue) > 0: + EdkLogger.verbose("Waiting for thread ending...(%d)" % len(BuildTask._RunningQueue)) + EdkLogger.debug(EdkLogger.DEBUG_8, "Threads [%s]" % ", ".join([Th.getName() for Th in threading.enumerate()])) + # avoid tense loop + time.sleep(0.1) + except BaseException, X: + # + # TRICK: hide the output of threads left runing, so that the user can + # catch the error message easily + # + EdkLogger.SetLevel(EdkLogger.ERROR) + BuildTask._ErrorFlag.set() + BuildTask._ErrorMessage = "build thread scheduler error\n\t%s" % str(X) + + BuildTask._PendingQueue.clear() + BuildTask._ReadyQueue.clear() + BuildTask._RunningQueue.clear() + BuildTask._TaskQueue.clear() + BuildTask._SchedulerStopped.set() + + ## Wait for all running method exit + # + @staticmethod + def WaitForComplete(): + BuildTask._SchedulerStopped.wait() + + ## Check if the scheduler is running or not + # + @staticmethod + def IsOnGoing(): + return not BuildTask._SchedulerStopped.isSet() + + ## Abort the build + @staticmethod + def Abort(): + if BuildTask.IsOnGoing(): + BuildTask._ErrorFlag.set() + BuildTask.WaitForComplete() + + ## Check if there's error in running thread + # + # Since the main thread cannot catch exceptions in other thread, we have to + # use threading.Event to communicate this formation to main thread. + # + @staticmethod + def HasError(): + return BuildTask._ErrorFlag.isSet() + + ## Get error message in running thread + # + # Since the main thread cannot catch exceptions in other thread, we have to + # use a static variable to communicate this message to main thread. + # + @staticmethod + def GetErrorMessage(): + return BuildTask._ErrorMessage + + ## Factory method to create a BuildTask object + # + # This method will check if a module is building or has been built. And if + # true, just return the associated BuildTask object in the _TaskQueue. If + # not, create and return a new BuildTask object. The new BuildTask object + # will be appended to the _PendingQueue for scheduling later. + # + # @param BuildItem A BuildUnit object representing a build object + # @param Dependency The dependent build object of BuildItem + # + @staticmethod + def New(BuildItem, Dependency=None): + if BuildItem in BuildTask._TaskQueue: + Bt = BuildTask._TaskQueue[BuildItem] + return Bt + + Bt = BuildTask() + Bt._Init(BuildItem, Dependency) + BuildTask._TaskQueue[BuildItem] = Bt + + BuildTask._PendingQueueLock.acquire() + BuildTask._PendingQueue[BuildItem] = Bt + BuildTask._PendingQueueLock.release() + + return Bt + + ## The real constructor of BuildTask + # + # @param BuildItem A BuildUnit object representing a build object + # @param Dependency The dependent build object of BuildItem + # + def _Init(self, BuildItem, Dependency=None): + self.BuildItem = BuildItem + + self.DependencyList = [] + if Dependency == None: + Dependency = BuildItem.Dependency + else: + Dependency.extend(BuildItem.Dependency) + self.AddDependency(Dependency) + # flag indicating build completes, used to avoid unnecessary re-build + self.CompleteFlag = False + + ## Check if all dependent build tasks are completed or not + # + def IsReady(self): + ReadyFlag = True + for Dep in self.DependencyList: + if Dep.CompleteFlag == True: + continue + ReadyFlag = False + break + + return ReadyFlag + + ## Add dependent build task + # + # @param Dependency The list of dependent build objects + # + def AddDependency(self, Dependency): + for Dep in Dependency: + self.DependencyList.append(BuildTask.New(Dep)) # BuildTask list + + ## The thread wrapper of LaunchCommand function + # + # @param Command A list or string contains the call of the command + # @param WorkingDir The directory in which the program will be running + # + def _CommandThread(self, Command, WorkingDir): + try: + LaunchCommand(Command, WorkingDir) + self.CompleteFlag = True + except: + # + # TRICK: hide the output of threads left runing, so that the user can + # catch the error message easily + # + if not BuildTask._ErrorFlag.isSet(): + GlobalData.gBuildingModule = "%s [%s, %s, %s]" % (str(self.BuildItem.BuildObject), + self.BuildItem.BuildObject.Arch, + self.BuildItem.BuildObject.ToolChain, + self.BuildItem.BuildObject.BuildTarget + ) + EdkLogger.SetLevel(EdkLogger.ERROR) + BuildTask._ErrorFlag.set() + BuildTask._ErrorMessage = "%s broken\n %s [%s]" % \ + (threading.currentThread().getName(), Command, WorkingDir) + # indicate there's a thread is available for another build task + BuildTask._RunningQueueLock.acquire() + BuildTask._RunningQueue.pop(self.BuildItem) + BuildTask._RunningQueueLock.release() + BuildTask._Thread.release() + + ## Start build task thread + # + def Start(self): + EdkLogger.quiet("Building ... %s" % repr(self.BuildItem)) + Command = self.BuildItem.BuildCommand + [self.BuildItem.Target] + self.BuildTread = Thread(target=self._CommandThread, args=(Command, self.BuildItem.WorkingDir)) + self.BuildTread.setName("build thread") + self.BuildTread.setDaemon(False) + self.BuildTread.start() + +## The class contains the information related to EFI image +# +class PeImageInfo(): + ## Constructor + # + # Constructor will load all required image information. + # + # @param BaseName The full file path of image. + # @param Guid The GUID for image. + # @param Arch Arch of this image. + # @param OutpuDir The output directory for image. + # @param ImageClass PeImage Information + # + def __init__(self, BaseName, Guid, Arch, OutpuDir, ImageClass): + self.BaseName = BaseName + self.Guid = Guid + self.Arch = Arch + self.OutpuDir = OutpuDir + self.Image = ImageClass + self.Image.Size = (self.Image.Size / 0x1000 + 1) * 0x1000 + +## The class implementing the EDK2 build process +# +# The build process includes: +# 1. Load configuration from target.txt and tools_def.txt in $(WORKSPACE)/Conf +# 2. Parse DSC file of active platform +# 3. Parse FDF file if any +# 4. Establish build database, including parse all other files (module, package) +# 5. Create AutoGen files (C code file, depex file, makefile) if necessary +# 6. Call build command +# +class Build(): + ## Constructor + # + # Constructor will load all necessary configurations, parse platform, modules + # and packages and the establish a database for AutoGen. + # + # @param Target The build command target, one of gSupportedTarget + # @param WorkspaceDir The directory of workspace + # @param Platform The DSC file of active platform + # @param Module The INF file of active module, if any + # @param Arch The Arch list of platform or module + # @param ToolChain The name list of toolchain + # @param BuildTarget The "DEBUG" or "RELEASE" build + # @param FlashDefinition The FDF file of active platform + # @param FdList=[] The FD names to be individually built + # @param FvList=[] The FV names to be individually built + # @param MakefileType The type of makefile (for MSFT make or GNU make) + # @param SilentMode Indicate multi-thread build mode + # @param ThreadNumber The maximum number of thread if in multi-thread build mode + # @param SkipAutoGen Skip AutoGen step + # @param Reparse Re-parse all meta files + # @param SkuId SKU id from command line + # + def __init__(self, Target, WorkspaceDir, Platform, Module, Arch, ToolChain, + BuildTarget, FlashDefinition, FdList=[], FvList=[], + MakefileType="nmake", SilentMode=False, ThreadNumber=2, + SkipAutoGen=False, Reparse=False, SkuId=None, + ReportFile=None, ReportType=None): + + self.WorkspaceDir = WorkspaceDir + self.Target = Target + self.PlatformFile = Platform + self.ModuleFile = Module + self.ArchList = Arch + self.ToolChainList = ToolChain + self.BuildTargetList= BuildTarget + self.Fdf = FlashDefinition + self.FdList = FdList + self.FvList = FvList + self.MakefileType = MakefileType + self.SilentMode = SilentMode + self.ThreadNumber = ThreadNumber + self.SkipAutoGen = SkipAutoGen + self.Reparse = Reparse + self.SkuId = SkuId + self.SpawnMode = True + self.BuildReport = BuildReport(ReportFile, ReportType) + self.TargetTxt = TargetTxtClassObject() + self.ToolDef = ToolDefClassObject() + self.Db = WorkspaceDatabase(None, GlobalData.gGlobalDefines, self.Reparse) + #self.Db = WorkspaceDatabase(None, {}, self.Reparse) + self.BuildDatabase = self.Db.BuildObject + self.Platform = None + self.LoadFixAddress = 0 + + # print dot charater during doing some time-consuming work + self.Progress = Utils.Progressor() + + # parse target.txt, tools_def.txt, and platform file + #self.RestoreBuildData() + self.LoadConfiguration() + self.InitBuild() + + # print current build environment and configuration + EdkLogger.quiet("%-24s = %s" % ("WORKSPACE", os.environ["WORKSPACE"])) + EdkLogger.quiet("%-24s = %s" % ("ECP_SOURCE", os.environ["ECP_SOURCE"])) + EdkLogger.quiet("%-24s = %s" % ("EDK_SOURCE", os.environ["EDK_SOURCE"])) + EdkLogger.quiet("%-24s = %s" % ("EFI_SOURCE", os.environ["EFI_SOURCE"])) + EdkLogger.quiet("%-24s = %s" % ("EDK_TOOLS_PATH", os.environ["EDK_TOOLS_PATH"])) + + EdkLogger.info('\n%-24s = %s' % ("TARGET_ARCH", ' '.join(self.ArchList))) + EdkLogger.info('%-24s = %s' % ("TARGET", ' '.join(self.BuildTargetList))) + EdkLogger.info('%-24s = %s' % ("TOOL_CHAIN_TAG", ' '.join(self.ToolChainList))) + + EdkLogger.info('\n%-24s = %s' % ("Active Platform", self.PlatformFile)) + + if self.Fdf != None and self.Fdf != "": + EdkLogger.info('%-24s = %s' % ("Flash Image Definition", self.Fdf)) + + if self.ModuleFile != None and self.ModuleFile != "": + EdkLogger.info('%-24s = %s' % ("Active Module", self.ModuleFile)) + + os.chdir(self.WorkspaceDir) + self.Progress.Start("\nProcessing meta-data") + + ## Load configuration + # + # This method will parse target.txt and get the build configurations. + # + def LoadConfiguration(self): + # + # Check target.txt and tools_def.txt and Init them + # + BuildConfigurationFile = os.path.normpath(os.path.join(self.WorkspaceDir, gBuildConfiguration)) + if os.path.isfile(BuildConfigurationFile) == True: + StatusCode = self.TargetTxt.LoadTargetTxtFile(BuildConfigurationFile) + + ToolDefinitionFile = self.TargetTxt.TargetTxtDictionary[DataType.TAB_TAT_DEFINES_TOOL_CHAIN_CONF] + if ToolDefinitionFile == '': + ToolDefinitionFile = gToolsDefinition + ToolDefinitionFile = os.path.normpath(os.path.join(self.WorkspaceDir, ToolDefinitionFile)) + if os.path.isfile(ToolDefinitionFile) == True: + StatusCode = self.ToolDef.LoadToolDefFile(ToolDefinitionFile) + else: + EdkLogger.error("build", FILE_NOT_FOUND, ExtraData=ToolDefinitionFile) + else: + EdkLogger.error("build", FILE_NOT_FOUND, ExtraData=BuildConfigurationFile) + + # if no ARCH given in command line, get it from target.txt + if self.ArchList == None or len(self.ArchList) == 0: + self.ArchList = self.TargetTxt.TargetTxtDictionary[DataType.TAB_TAT_DEFINES_TARGET_ARCH] + + # if no build target given in command line, get it from target.txt + if self.BuildTargetList == None or len(self.BuildTargetList) == 0: + self.BuildTargetList = self.TargetTxt.TargetTxtDictionary[DataType.TAB_TAT_DEFINES_TARGET] + + # if no tool chain given in command line, get it from target.txt + if self.ToolChainList == None or len(self.ToolChainList) == 0: + self.ToolChainList = self.TargetTxt.TargetTxtDictionary[DataType.TAB_TAT_DEFINES_TOOL_CHAIN_TAG] + if self.ToolChainList == None or len(self.ToolChainList) == 0: + EdkLogger.error("build", RESOURCE_NOT_AVAILABLE, ExtraData="No toolchain given. Don't know how to build.\n") + + # check if the tool chains are defined or not + NewToolChainList = [] + for ToolChain in self.ToolChainList: + if ToolChain not in self.ToolDef.ToolsDefTxtDatabase[TAB_TOD_DEFINES_TOOL_CHAIN_TAG]: + EdkLogger.warn("build", "Tool chain [%s] is not defined" % ToolChain) + else: + NewToolChainList.append(ToolChain) + # if no tool chain available, break the build + if len(NewToolChainList) == 0: + EdkLogger.error("build", RESOURCE_NOT_AVAILABLE, + ExtraData="[%s] not defined. No toolchain available for build!\n" % ", ".join(self.ToolChainList)) + else: + self.ToolChainList = NewToolChainList + + if self.ThreadNumber == None: + self.ThreadNumber = self.TargetTxt.TargetTxtDictionary[DataType.TAB_TAT_DEFINES_MAX_CONCURRENT_THREAD_NUMBER] + if self.ThreadNumber == '': + self.ThreadNumber = 0 + else: + self.ThreadNumber = int(self.ThreadNumber, 0) + + if self.ThreadNumber == 0: + self.ThreadNumber = 1 + + if not self.PlatformFile: + PlatformFile = self.TargetTxt.TargetTxtDictionary[DataType.TAB_TAT_DEFINES_ACTIVE_PLATFORM] + if not PlatformFile: + # Try to find one in current directory + WorkingDirectory = os.getcwd() + FileList = glob.glob(os.path.normpath(os.path.join(WorkingDirectory, '*.dsc'))) + FileNum = len(FileList) + if FileNum >= 2: + EdkLogger.error("build", OPTION_MISSING, + ExtraData="There are %d DSC files in %s. Use '-p' to specify one.\n" % (FileNum, WorkingDirectory)) + elif FileNum == 1: + PlatformFile = FileList[0] + else: + EdkLogger.error("build", RESOURCE_NOT_AVAILABLE, + ExtraData="No active platform specified in target.txt or command line! Nothing can be built.\n") + + self.PlatformFile = PathClass(NormFile(PlatformFile, self.WorkspaceDir), self.WorkspaceDir) + ErrorCode, ErrorInfo = self.PlatformFile.Validate(".dsc", False) + if ErrorCode != 0: + EdkLogger.error("build", ErrorCode, ExtraData=ErrorInfo) + + ## Initialize build configuration + # + # This method will parse DSC file and merge the configurations from + # command line and target.txt, then get the final build configurations. + # + def InitBuild(self): + ErrorCode, ErrorInfo = self.PlatformFile.Validate(".dsc") + if ErrorCode != 0: + EdkLogger.error("build", ErrorCode, ExtraData=ErrorInfo) + + # create metafile database + self.Db.InitDatabase() + + # we need information in platform description file to determine how to build + self.Platform = self.BuildDatabase[self.PlatformFile, 'COMMON'] + if not self.Fdf: + self.Fdf = self.Platform.FlashDefinition + + LoadFixAddressString = None + if TAB_FIX_LOAD_TOP_MEMORY_ADDRESS in GlobalData.gGlobalDefines: + LoadFixAddressString = GlobalData.gGlobalDefines[TAB_FIX_LOAD_TOP_MEMORY_ADDRESS] + else: + LoadFixAddressString = self.Platform.LoadFixAddress + + if LoadFixAddressString != None and LoadFixAddressString != '': + try: + if LoadFixAddressString.upper().startswith('0X'): + self.LoadFixAddress = int (LoadFixAddressString, 16) + else: + self.LoadFixAddress = int (LoadFixAddressString) + except: + EdkLogger.error("build", PARAMETER_INVALID, "FIX_LOAD_TOP_MEMORY_ADDRESS %s is not valid dec or hex string" % (LoadFixAddressString)) + if self.LoadFixAddress < 0: + EdkLogger.error("build", PARAMETER_INVALID, "FIX_LOAD_TOP_MEMORY_ADDRESS is set to the invalid negative value %s" % (LoadFixAddressString)) + if self.LoadFixAddress != 0xFFFFFFFFFFFFFFFF and self.LoadFixAddress % 0x1000 != 0: + EdkLogger.error("build", PARAMETER_INVALID, "FIX_LOAD_TOP_MEMORY_ADDRESS is set to the invalid unaligned 4K value %s" % (LoadFixAddressString)) + + if self.SkuId == None or self.SkuId == '': + self.SkuId = self.Platform.SkuName + + # check FD/FV build target + if self.Fdf == None or self.Fdf == "": + if self.FdList != []: + EdkLogger.info("No flash definition file found. FD [%s] will be ignored." % " ".join(self.FdList)) + self.FdList = [] + if self.FvList != []: + EdkLogger.info("No flash definition file found. FV [%s] will be ignored." % " ".join(self.FvList)) + self.FvList = [] + else: + FdfParserObj = FdfParser(str(self.Fdf)) + FdfParserObj.ParseFile() + for fvname in self.FvList: + if fvname.upper() not in FdfParserObj.Profile.FvDict.keys(): + EdkLogger.error("build", OPTION_VALUE_INVALID, + "No such an FV in FDF file: %s" % fvname) + + # + # Merge Arch + # + if self.ArchList == None or len(self.ArchList) == 0: + ArchList = set(self.Platform.SupArchList) + else: + ArchList = set(self.ArchList) & set(self.Platform.SupArchList) + if len(ArchList) == 0: + EdkLogger.error("build", PARAMETER_INVALID, + ExtraData = "Active platform supports [%s] only, but [%s] is given." + % (" ".join(self.Platform.SupArchList), " ".join(self.ArchList))) + elif len(ArchList) != len(self.ArchList): + SkippedArchList = set(self.ArchList).symmetric_difference(set(self.Platform.SupArchList)) + EdkLogger.verbose("\nArch [%s] is ignored because active platform supports [%s] but [%s] is specified !" + % (" ".join(SkippedArchList), " ".join(self.Platform.SupArchList), " ".join(self.ArchList))) + self.ArchList = tuple(ArchList) + + # Merge build target + if self.BuildTargetList == None or len(self.BuildTargetList) == 0: + BuildTargetList = self.Platform.BuildTargets + else: + BuildTargetList = list(set(self.BuildTargetList) & set(self.Platform.BuildTargets)) + if BuildTargetList == []: + EdkLogger.error("build", PARAMETER_INVALID, "Active platform only supports [%s], but [%s] is given" + % (" ".join(self.Platform.BuildTargets), " ".join(self.BuildTargetList))) + self.BuildTargetList = BuildTargetList + + ## Build a module or platform + # + # Create autogen code and makfile for a module or platform, and the launch + # "make" command to build it + # + # @param Target The target of build command + # @param Platform The platform file + # @param Module The module file + # @param BuildTarget The name of build target, one of "DEBUG", "RELEASE" + # @param ToolChain The name of toolchain to build + # @param Arch The arch of the module/platform + # @param CreateDepModuleCodeFile Flag used to indicate creating code + # for dependent modules/Libraries + # @param CreateDepModuleMakeFile Flag used to indicate creating makefile + # for dependent modules/Libraries + # + def _Build(self, Target, AutoGenObject, CreateDepsCodeFile=True, CreateDepsMakeFile=True): + if AutoGenObject == None: + return False + + # skip file generation for cleanxxx targets, run and fds target + if Target not in ['clean', 'cleanlib', 'cleanall', 'run', 'fds']: + # for target which must generate AutoGen code and makefile + if not self.SkipAutoGen or Target == 'genc': + self.Progress.Start("Generating code") + AutoGenObject.CreateCodeFile(CreateDepsCodeFile) + self.Progress.Stop("done!") + if Target == "genc": + return True + + if not self.SkipAutoGen or Target == 'genmake': + self.Progress.Start("Generating makefile") + AutoGenObject.CreateMakeFile(CreateDepsMakeFile) + self.Progress.Stop("done!") + if Target == "genmake": + return True + else: + # always recreate top/platform makefile when clean, just in case of inconsistency + AutoGenObject.CreateCodeFile(False) + AutoGenObject.CreateMakeFile(False) + + if EdkLogger.GetLevel() == EdkLogger.QUIET: + EdkLogger.quiet("Building ... %s" % repr(AutoGenObject)) + + BuildCommand = AutoGenObject.BuildCommand + if BuildCommand == None or len(BuildCommand) == 0: + EdkLogger.error("build", OPTION_MISSING, ExtraData="No MAKE command found for [%s, %s, %s]" % Key) + + BuildCommand = BuildCommand + [Target] + LaunchCommand(BuildCommand, AutoGenObject.MakeFileDir) + if Target == 'cleanall': + try: + #os.rmdir(AutoGenObject.BuildDir) + RemoveDirectory(AutoGenObject.BuildDir, True) + except WindowsError, X: + EdkLogger.error("build", FILE_DELETE_FAILURE, ExtraData=str(X)) + return True + + ## Rebase module image and Get function address for the inpug module list. + # + def _RebaseModule (self, MapBuffer, BaseAddress, ModuleList, AddrIsOffset = True, ModeIsSmm = False): + if ModeIsSmm: + AddrIsOffset = False + InfFileNameList = ModuleList.keys() + #InfFileNameList.sort() + for InfFile in InfFileNameList: + sys.stdout.write (".") + sys.stdout.flush() + ModuleInfo = ModuleList[InfFile] + ModuleName = ModuleInfo.BaseName + ## for SMM module in SMRAM, the SMRAM will be allocated from base to top. + if not ModeIsSmm: + BaseAddress = BaseAddress - ModuleInfo.Image.Size + # + # Update Image to new BaseAddress by GenFw tool + # + LaunchCommand(["GenFw", "--rebase", str(BaseAddress), "-r", ModuleInfo.Image.FileName], ModuleInfo.OutpuDir) + else: + # + # Set new address to the section header only for SMM driver. + # + LaunchCommand(["GenFw", "--address", str(BaseAddress), "-r", ModuleInfo.Image.FileName], ModuleInfo.OutpuDir) + # + # Collect funtion address from Map file + # + ImageMapTable = ModuleInfo.Image.FileName.replace('.efi', '.map') + FunctionList = [] + if os.path.exists(ImageMapTable): + OrigImageBaseAddress = 0 + ImageMap = open (ImageMapTable, 'r') + for LinStr in ImageMap: + if len (LinStr.strip()) == 0: + continue + # + # Get the preferred address set on link time. + # + if LinStr.find ('Preferred load address is') != -1: + StrList = LinStr.split() + OrigImageBaseAddress = int (StrList[len(StrList) - 1], 16) + + StrList = LinStr.split() + if len (StrList) > 4: + if StrList[3] == 'f' or StrList[3] =='F': + Name = StrList[1] + RelativeAddress = int (StrList[2], 16) - OrigImageBaseAddress + FunctionList.append ((Name, RelativeAddress)) + if ModuleInfo.Arch == 'IPF' and Name.endswith('_ModuleEntryPoint'): + # + # Get the real entry point address for IPF image. + # + ModuleInfo.Image.EntryPoint = RelativeAddress + ImageMap.close() + # + # Add general information. + # + if ModeIsSmm: + MapBuffer.write('\n\n%s (Fixed SMRAM Offset, BaseAddress=0x%010X, EntryPoint=0x%010X)\n' % (ModuleName, BaseAddress, BaseAddress + ModuleInfo.Image.EntryPoint)) + elif AddrIsOffset: + MapBuffer.write('\n\n%s (Fixed Memory Offset, BaseAddress=-0x%010X, EntryPoint=-0x%010X)\n' % (ModuleName, 0 - BaseAddress, 0 - (BaseAddress + ModuleInfo.Image.EntryPoint))) + else: + MapBuffer.write('\n\n%s (Fixed Memory Address, BaseAddress=0x%010X, EntryPoint=0x%010X)\n' % (ModuleName, BaseAddress, BaseAddress + ModuleInfo.Image.EntryPoint)) + # + # Add guid and general seciton section. + # + TextSectionAddress = 0 + DataSectionAddress = 0 + for SectionHeader in ModuleInfo.Image.SectionHeaderList: + if SectionHeader[0] == '.text': + TextSectionAddress = SectionHeader[1] + elif SectionHeader[0] in ['.data', '.sdata']: + DataSectionAddress = SectionHeader[1] + if AddrIsOffset: + MapBuffer.write('(GUID=%s, .textbaseaddress=-0x%010X, .databaseaddress=-0x%010X)\n\n' % (ModuleInfo.Guid, 0 - (BaseAddress + TextSectionAddress), 0 - (BaseAddress + DataSectionAddress))) + else: + MapBuffer.write('(GUID=%s, .textbaseaddress=0x%010X, .databaseaddress=0x%010X)\n\n' % (ModuleInfo.Guid, BaseAddress + TextSectionAddress, BaseAddress + DataSectionAddress)) + # + # Add funtion address + # + for Function in FunctionList: + if AddrIsOffset: + MapBuffer.write(' -0x%010X %s\n' % (0 - (BaseAddress + Function[1]), Function[0])) + else: + MapBuffer.write(' 0x%010X %s\n' % (BaseAddress + Function[1], Function[0])) + ImageMap.close() + + # + # for SMM module in SMRAM, the SMRAM will be allocated from base to top. + # + if ModeIsSmm: + BaseAddress = BaseAddress + ModuleInfo.Image.Size + + ## Collect MAP information of all FVs + # + def _CollectFvMapBuffer (self, MapBuffer, Wa): + if self.Fdf != '': + # First get the XIP base address for FV map file. + for FvName in Wa.FdfProfile.FvDict.keys(): + FvMapBuffer = os.path.join(Wa.FvDir, FvName + '.Fv.map') + if not os.path.exists(FvMapBuffer): + continue + FvMap = open (FvMapBuffer, 'r') + #skip FV size information + FvMap.readline() + FvMap.readline() + FvMap.readline() + FvMap.readline() + MapBuffer.write(FvMap.read()) + FvMap.close() + + ## Collect MAP information of all modules + # + def _CollectModuleMapBuffer (self, MapBuffer, ModuleList): + sys.stdout.write ("Generate Load Module At Fix Address Map") + sys.stdout.flush() + PatchEfiImageList = [] + PeiModuleList = {} + BtModuleList = {} + RtModuleList = {} + SmmModuleList = {} + PeiSize = 0 + BtSize = 0 + RtSize = 0 + # reserve 4K size in SMRAM to make SMM module address not from 0. + SmmSize = 0x1000 + IsIpfPlatform = False + if 'IPF' in self.ArchList: + IsIpfPlatform = True + for Module in ModuleList: + GlobalData.gProcessingFile = "%s [%s, %s, %s]" % (Module.MetaFile, Module.Arch, Module.ToolChain, Module.BuildTarget) + + OutputImageFile = '' + for ResultFile in Module.CodaTargetList: + if str(ResultFile.Target).endswith('.efi'): + # + # module list for PEI, DXE, RUNTIME and SMM + # + OutputImageFile = os.path.join(Module.OutputDir, Module.Name + '.efi') + ImageClass = PeImageClass (OutputImageFile) + if not ImageClass.IsValid: + EdkLogger.error("build", FILE_PARSE_FAILURE, ExtraData=ImageClass.ErrorInfo) + ImageInfo = PeImageInfo(Module.Name, Module.Guid, Module.Arch, Module.OutputDir, ImageClass) + if Module.ModuleType in ['PEI_CORE', 'PEIM', 'COMBINED_PEIM_DRIVER','PIC_PEIM', 'RELOCATABLE_PEIM', 'DXE_CORE']: + PeiModuleList[Module.MetaFile] = ImageInfo + PeiSize += ImageInfo.Image.Size + elif Module.ModuleType in ['BS_DRIVER', 'DXE_DRIVER', 'UEFI_DRIVER']: + BtModuleList[Module.MetaFile] = ImageInfo + BtSize += ImageInfo.Image.Size + elif Module.ModuleType in ['DXE_RUNTIME_DRIVER', 'RT_DRIVER', 'DXE_SAL_DRIVER', 'SAL_RT_DRIVER']: + RtModuleList[Module.MetaFile] = ImageInfo + #IPF runtime driver needs to be at 2 page alignment. + if IsIpfPlatform and ImageInfo.Image.Size % 0x2000 != 0: + ImageInfo.Image.Size = (ImageInfo.Image.Size / 0x2000 + 1) * 0x2000 + RtSize += ImageInfo.Image.Size + elif Module.ModuleType in ['SMM_CORE', 'DXE_SMM_DRIVER']: + SmmModuleList[Module.MetaFile] = ImageInfo + SmmSize += ImageInfo.Image.Size + if Module.ModuleType == 'DXE_SMM_DRIVER': + PiSpecVersion = 0 + if 'PI_SPECIFICATION_VERSION' in Module.Module.Specification: + PiSpecVersion = Module.Module.Specification['PI_SPECIFICATION_VERSION'] + # for PI specification < PI1.1, DXE_SMM_DRIVER also runs as BOOT time driver. + if PiSpecVersion < 0x0001000A: + BtModuleList[Module.MetaFile] = ImageInfo + BtSize += ImageInfo.Image.Size + break + # + # EFI image is final target. + # Check EFI image contains patchable FixAddress related PCDs. + # + if OutputImageFile != '': + ModuleIsPatch = False + for Pcd in Module.ModulePcdList: + if Pcd.Type == TAB_PCDS_PATCHABLE_IN_MODULE and Pcd.TokenCName in TAB_PCDS_PATCHABLE_LOAD_FIX_ADDRESS_LIST: + ModuleIsPatch = True + break + if not ModuleIsPatch: + for Pcd in Module.LibraryPcdList: + if Pcd.Type == TAB_PCDS_PATCHABLE_IN_MODULE and Pcd.TokenCName in TAB_PCDS_PATCHABLE_LOAD_FIX_ADDRESS_LIST: + ModuleIsPatch = True + break + + if not ModuleIsPatch: + continue + # + # Module includes the patchable load fix address PCDs. + # It will be fixed up later. + # + PatchEfiImageList.append (OutputImageFile) + + # + # Get Top Memory address + # + ReservedRuntimeMemorySize = 0 + TopMemoryAddress = 0 + if self.LoadFixAddress == 0xFFFFFFFFFFFFFFFF: + TopMemoryAddress = 0 + else: + TopMemoryAddress = self.LoadFixAddress + if TopMemoryAddress < RtSize + BtSize + PeiSize: + EdkLogger.error("build", PARAMETER_INVALID, "FIX_LOAD_TOP_MEMORY_ADDRESS is too low to load driver") + # Make IPF runtime driver at 2 page alignment. + if IsIpfPlatform: + ReservedRuntimeMemorySize = TopMemoryAddress % 0x2000 + RtSize = RtSize + ReservedRuntimeMemorySize + + # + # Patch FixAddress related PCDs into EFI image + # + for EfiImage in PatchEfiImageList: + EfiImageMap = EfiImage.replace('.efi', '.map') + if not os.path.exists(EfiImageMap): + continue + # + # Get PCD offset in EFI image by GenPatchPcdTable function + # + PcdTable = parsePcdInfoFromMapFile(EfiImageMap, EfiImage) + # + # Patch real PCD value by PatchPcdValue tool + # + for PcdInfo in PcdTable: + ReturnValue = 0 + if PcdInfo[0] == TAB_PCDS_PATCHABLE_LOAD_FIX_ADDRESS_PEI_PAGE_SIZE: + ReturnValue, ErrorInfo = PatchBinaryFile (EfiImage, PcdInfo[1], TAB_PCDS_PATCHABLE_LOAD_FIX_ADDRESS_PEI_PAGE_SIZE_DATA_TYPE, str (PeiSize/0x1000)) + elif PcdInfo[0] == TAB_PCDS_PATCHABLE_LOAD_FIX_ADDRESS_DXE_PAGE_SIZE: + ReturnValue, ErrorInfo = PatchBinaryFile (EfiImage, PcdInfo[1], TAB_PCDS_PATCHABLE_LOAD_FIX_ADDRESS_DXE_PAGE_SIZE_DATA_TYPE, str (BtSize/0x1000)) + elif PcdInfo[0] == TAB_PCDS_PATCHABLE_LOAD_FIX_ADDRESS_RUNTIME_PAGE_SIZE: + ReturnValue, ErrorInfo = PatchBinaryFile (EfiImage, PcdInfo[1], TAB_PCDS_PATCHABLE_LOAD_FIX_ADDRESS_RUNTIME_PAGE_SIZE_DATA_TYPE, str (RtSize/0x1000)) + elif PcdInfo[0] == TAB_PCDS_PATCHABLE_LOAD_FIX_ADDRESS_SMM_PAGE_SIZE and len (SmmModuleList) > 0: + ReturnValue, ErrorInfo = PatchBinaryFile (EfiImage, PcdInfo[1], TAB_PCDS_PATCHABLE_LOAD_FIX_ADDRESS_SMM_PAGE_SIZE_DATA_TYPE, str (SmmSize/0x1000)) + if ReturnValue != 0: + EdkLogger.error("build", PARAMETER_INVALID, "Patch PCD value failed", ExtraData=ErrorInfo) + + MapBuffer.write('PEI_CODE_PAGE_NUMBER = 0x%x\n' % (PeiSize/0x1000)) + MapBuffer.write('BOOT_CODE_PAGE_NUMBER = 0x%x\n' % (BtSize/0x1000)) + MapBuffer.write('RUNTIME_CODE_PAGE_NUMBER = 0x%x\n' % (RtSize/0x1000)) + if len (SmmModuleList) > 0: + MapBuffer.write('SMM_CODE_PAGE_NUMBER = 0x%x\n' % (SmmSize/0x1000)) + + PeiBaseAddr = TopMemoryAddress - RtSize - BtSize + BtBaseAddr = TopMemoryAddress - RtSize + RtBaseAddr = TopMemoryAddress - ReservedRuntimeMemorySize + + self._RebaseModule (MapBuffer, PeiBaseAddr, PeiModuleList, TopMemoryAddress == 0) + self._RebaseModule (MapBuffer, BtBaseAddr, BtModuleList, TopMemoryAddress == 0) + self._RebaseModule (MapBuffer, RtBaseAddr, RtModuleList, TopMemoryAddress == 0) + self._RebaseModule (MapBuffer, 0x1000, SmmModuleList, AddrIsOffset = False, ModeIsSmm = True) + MapBuffer.write('\n\n') + sys.stdout.write ("\n") + sys.stdout.flush() + + ## Save platform Map file + # + def _SaveMapFile (self, MapBuffer, Wa): + # + # Map file path is got. + # + MapFilePath = os.path.join(Wa.BuildDir, Wa.Name + '.map') + # + # Save address map into MAP file. + # + SaveFileOnChange(MapFilePath, MapBuffer.getvalue(), False) + MapBuffer.close() + sys.stdout.write ("\nLoad Module At Fix Address Map file saved to %s\n" %(MapFilePath)) + sys.stdout.flush() + + ## Build active platform for different build targets and different tool chains + # + def _BuildPlatform(self): + for BuildTarget in self.BuildTargetList: + for ToolChain in self.ToolChainList: + Wa = WorkspaceAutoGen( + self.WorkspaceDir, + self.Platform, + BuildTarget, + ToolChain, + self.ArchList, + self.BuildDatabase, + self.TargetTxt, + self.ToolDef, + self.Fdf, + self.FdList, + self.FvList, + self.SkuId + ) + self.BuildReport.AddPlatformReport(Wa) + self.Progress.Stop("done!") + self._Build(self.Target, Wa) + + # Create MAP file when Load Fix Address is enabled. + if self.Target in ["", "all", "fds"] and self.LoadFixAddress != 0: + for Arch in self.ArchList: + # + # Check whether the set fix address is above 4G for 32bit image. + # + if (Arch == 'IA32' or Arch == 'ARM') and self.LoadFixAddress != 0xFFFFFFFFFFFFFFFF and self.LoadFixAddress >= 0x100000000: + EdkLogger.error("build", PARAMETER_INVALID, "FIX_LOAD_TOP_MEMORY_ADDRESS can't be set to larger than or equal to 4G for the platorm with IA32 or ARM arch modules") + # + # Get Module List + # + ModuleList = [] + for Pa in Wa.AutoGenObjectList: + for Ma in Pa.ModuleAutoGenList: + if Ma == None: + continue + if not Ma.IsLibrary: + ModuleList.append (Ma) + + MapBuffer = StringIO('') + # + # Rebase module to the preferred memory address before GenFds + # + self._CollectModuleMapBuffer(MapBuffer, ModuleList) + if self.Fdf != '': + # + # create FDS again for the updated EFI image + # + self._Build("fds", Wa) + # + # Create MAP file for all platform FVs after GenFds. + # + self._CollectFvMapBuffer(MapBuffer, Wa) + # + # Save MAP buffer into MAP file. + # + self._SaveMapFile (MapBuffer, Wa) + + ## Build active module for different build targets, different tool chains and different archs + # + def _BuildModule(self): + for BuildTarget in self.BuildTargetList: + for ToolChain in self.ToolChainList: + # + # module build needs platform build information, so get platform + # AutoGen first + # + Wa = WorkspaceAutoGen( + self.WorkspaceDir, + self.Platform, + BuildTarget, + ToolChain, + self.ArchList, + self.BuildDatabase, + self.TargetTxt, + self.ToolDef, + self.Fdf, + self.FdList, + self.FvList, + self.SkuId + ) + self.BuildReport.AddPlatformReport(Wa) + Wa.CreateMakeFile(False) + self.Progress.Stop("done!") + MaList = [] + for Arch in self.ArchList: + Ma = ModuleAutoGen(Wa, self.ModuleFile, BuildTarget, ToolChain, Arch, self.PlatformFile) + if Ma == None: continue + MaList.append(Ma) + self._Build(self.Target, Ma) + if MaList == []: + EdkLogger.error( + 'build', + BUILD_ERROR, + "Module for [%s] is not a component of active platform."\ + " Please make sure that the ARCH and inf file path are"\ + " given in the same as in [%s]" %\ + (', '.join(self.ArchList), self.Platform), + ExtraData=self.ModuleFile + ) + # Create MAP file when Load Fix Address is enabled. + if self.LoadFixAddress != 0 and self.Target == "fds" and self.Fdf != '': + for Arch in self.ArchList: + # + # Check whether the set fix address is above 4G for 32bit image. + # + if (Arch == 'IA32' or Arch == 'ARM') and self.LoadFixAddress != 0xFFFFFFFFFFFFFFFF and self.LoadFixAddress >= 0x100000000: + EdkLogger.error("build", PARAMETER_INVALID, "FIX_LOAD_TOP_MEMORY_ADDRESS can't be set to larger than or equal to 4G for the platorm with IA32 or ARM arch modules") + # + # Get Module List + # + ModuleList = [] + for Pa in Wa.AutoGenObjectList: + for Ma in Pa.ModuleAutoGenList: + if Ma == None: + continue + if not Ma.IsLibrary: + ModuleList.append (Ma) + + MapBuffer = StringIO('') + # + # Rebase module to the preferred memory address before GenFds + # + self._CollectModuleMapBuffer(MapBuffer, ModuleList) + # + # create FDS again for the updated EFI image + # + self._Build("fds", Wa) + # + # Create MAP file for all platform FVs after GenFds. + # + self._CollectFvMapBuffer(MapBuffer, Wa) + # + # Save MAP buffer into MAP file. + # + self._SaveMapFile (MapBuffer, Wa) + + ## Build a platform in multi-thread mode + # + def _MultiThreadBuildPlatform(self): + for BuildTarget in self.BuildTargetList: + for ToolChain in self.ToolChainList: + Wa = WorkspaceAutoGen( + self.WorkspaceDir, + self.Platform, + BuildTarget, + ToolChain, + self.ArchList, + self.BuildDatabase, + self.TargetTxt, + self.ToolDef, + self.Fdf, + self.FdList, + self.FvList, + self.SkuId + ) + self.BuildReport.AddPlatformReport(Wa) + Wa.CreateMakeFile(False) + + # multi-thread exit flag + ExitFlag = threading.Event() + ExitFlag.clear() + for Arch in self.ArchList: + Pa = PlatformAutoGen(Wa, self.PlatformFile, BuildTarget, ToolChain, Arch) + if Pa == None: + continue + for Module in Pa.Platform.Modules: + # Get ModuleAutoGen object to generate C code file and makefile + Ma = ModuleAutoGen(Wa, Module, BuildTarget, ToolChain, Arch, self.PlatformFile) + if Ma == None: + continue + # Not to auto-gen for targets 'clean', 'cleanlib', 'cleanall', 'run', 'fds' + if self.Target not in ['clean', 'cleanlib', 'cleanall', 'run', 'fds']: + # for target which must generate AutoGen code and makefile + if not self.SkipAutoGen or self.Target == 'genc': + Ma.CreateCodeFile(True) + if self.Target == "genc": + continue + + if not self.SkipAutoGen or self.Target == 'genmake': + Ma.CreateMakeFile(True) + if self.Target == "genmake": + continue + self.Progress.Stop("done!") + # Generate build task for the module + Bt = BuildTask.New(ModuleMakeUnit(Ma, self.Target)) + # Break build if any build thread has error + if BuildTask.HasError(): + # we need a full version of makefile for platform + ExitFlag.set() + BuildTask.WaitForComplete() + Pa.CreateMakeFile(False) + EdkLogger.error("build", BUILD_ERROR, "Failed to build module", ExtraData=GlobalData.gBuildingModule) + # Start task scheduler + if not BuildTask.IsOnGoing(): + BuildTask.StartScheduler(self.ThreadNumber, ExitFlag) + + # in case there's an interruption. we need a full version of makefile for platform + Pa.CreateMakeFile(False) + if BuildTask.HasError(): + EdkLogger.error("build", BUILD_ERROR, "Failed to build module", ExtraData=GlobalData.gBuildingModule) + + # + # All modules have been put in build tasks queue. Tell task scheduler + # to exit if all tasks are completed + # + ExitFlag.set() + BuildTask.WaitForComplete() + + # + # Check for build error, and raise exception if one + # has been signaled. + # + if BuildTask.HasError(): + EdkLogger.error("build", BUILD_ERROR, "Failed to build module", ExtraData=GlobalData.gBuildingModule) + + # Create MAP file when Load Fix Address is enabled. + if self.Target in ["", "all", "fds"] and self.LoadFixAddress != 0: + for Arch in self.ArchList: + # + # Check whether the set fix address is above 4G for 32bit image. + # + if (Arch == 'IA32' or Arch == 'ARM') and self.LoadFixAddress != 0xFFFFFFFFFFFFFFFF and self.LoadFixAddress >= 0x100000000: + EdkLogger.error("build", PARAMETER_INVALID, "FIX_LOAD_TOP_MEMORY_ADDRESS can't be set to larger than or equal to 4G for the platorm with IA32 or ARM arch modules") + # + # Get Module List + # + ModuleList = [] + for Pa in Wa.AutoGenObjectList: + for Ma in Pa.ModuleAutoGenList: + if Ma == None: + continue + if not Ma.IsLibrary: + ModuleList.append (Ma) + # + # Rebase module to the preferred memory address before GenFds + # + MapBuffer = StringIO('') + self._CollectModuleMapBuffer(MapBuffer, ModuleList) + + # Generate FD image if there's a FDF file found + if self.Fdf != '' and self.Target in ["", "all", "fds"]: + LaunchCommand(Wa.BuildCommand + ["fds"], Wa.MakeFileDir) + + # Create MAP file for all platform FV after GenFds + if self.Target in ["", "all", "fds"] and self.LoadFixAddress != 0: + if self.Fdf != '': + # + # Create MAP file for all platform FVs after GenFds. + # + self._CollectFvMapBuffer(MapBuffer, Wa) + # + # Save MAP buffer into MAP file. + # + self._SaveMapFile(MapBuffer, Wa) + + ## Generate GuidedSectionTools.txt in the FV directories. + # + def CreateGuidedSectionToolsFile(self): + for Arch in self.ArchList: + for BuildTarget in self.BuildTargetList: + for ToolChain in self.ToolChainList: + FvDir = os.path.join( + self.WorkspaceDir, + self.Platform.OutputDirectory, + '_'.join((BuildTarget, ToolChain)), + 'FV' + ) + if not os.path.exists(FvDir): + continue + # Build up the list of supported architectures for this build + prefix = '%s_%s_%s_' % (BuildTarget, ToolChain, Arch) + + # Look through the tool definitions for GUIDed tools + guidAttribs = [] + for (attrib, value) in self.ToolDef.ToolsDefTxtDictionary.iteritems(): + if attrib.upper().endswith('_GUID'): + split = attrib.split('_') + thisPrefix = '_'.join(split[0:3]) + '_' + if thisPrefix == prefix: + guid = self.ToolDef.ToolsDefTxtDictionary[attrib] + guid = guid.lower() + toolName = split[3] + path = '_'.join(split[0:4]) + '_PATH' + path = self.ToolDef.ToolsDefTxtDictionary[path] + path = self.GetFullPathOfTool(path) + guidAttribs.append((guid, toolName, path)) + + # Write out GuidedSecTools.txt + toolsFile = os.path.join(FvDir, 'GuidedSectionTools.txt') + toolsFile = open(toolsFile, 'wt') + for guidedSectionTool in guidAttribs: + print >> toolsFile, ' '.join(guidedSectionTool) + toolsFile.close() + + ## Returns the full path of the tool. + # + def GetFullPathOfTool (self, tool): + if os.path.exists(tool): + return os.path.realpath(tool) + else: + # We need to search for the tool using the + # PATH environment variable. + for dirInPath in os.environ['PATH'].split(os.pathsep): + foundPath = os.path.join(dirInPath, tool) + if os.path.exists(foundPath): + return os.path.realpath(foundPath) + + # If the tool was not found in the path then we just return + # the input tool. + return tool + + ## Launch the module or platform build + # + def Launch(self): + if self.ModuleFile == None or self.ModuleFile == "": + if not self.SpawnMode or self.Target not in ["", "all"]: + self.SpawnMode = False + self._BuildPlatform() + else: + self._MultiThreadBuildPlatform() + self.CreateGuidedSectionToolsFile() + else: + self.SpawnMode = False + self._BuildModule() + + ## Do some clean-up works when error occurred + def Relinquish(self): + OldLogLevel = EdkLogger.GetLevel() + EdkLogger.SetLevel(EdkLogger.ERROR) + #self.DumpBuildData() + Utils.Progressor.Abort() + if self.SpawnMode == True: + BuildTask.Abort() + EdkLogger.SetLevel(OldLogLevel) + + def DumpBuildData(self): + CacheDirectory = os.path.join(self.WorkspaceDir, gBuildCacheDir) + Utils.CreateDirectory(CacheDirectory) + Utils.DataDump(Utils.gFileTimeStampCache, os.path.join(CacheDirectory, "gFileTimeStampCache")) + Utils.DataDump(Utils.gDependencyDatabase, os.path.join(CacheDirectory, "gDependencyDatabase")) + + def RestoreBuildData(self): + FilePath = os.path.join(self.WorkspaceDir, gBuildCacheDir, "gFileTimeStampCache") + if Utils.gFileTimeStampCache == {} and os.path.isfile(FilePath): + Utils.gFileTimeStampCache = Utils.DataRestore(FilePath) + if Utils.gFileTimeStampCache == None: + Utils.gFileTimeStampCache = {} + + FilePath = os.path.join(self.WorkspaceDir, gBuildCacheDir, "gDependencyDatabase") + if Utils.gDependencyDatabase == {} and os.path.isfile(FilePath): + Utils.gDependencyDatabase = Utils.DataRestore(FilePath) + if Utils.gDependencyDatabase == None: + Utils.gDependencyDatabase = {} + +def ParseDefines(DefineList=[]): + DefineDict = {} + if DefineList != None: + for Define in DefineList: + DefineTokenList = Define.split("=", 1) + if len(DefineTokenList) == 1: + DefineDict[DefineTokenList[0]] = "" + else: + DefineDict[DefineTokenList[0]] = DefineTokenList[1].strip() + return DefineDict + +gParamCheck = [] +def SingleCheckCallback(option, opt_str, value, parser): + if option not in gParamCheck: + setattr(parser.values, option.dest, value) + gParamCheck.append(option) + else: + parser.error("Option %s only allows one instance in command line!" % option) + +## Parse command line options +# +# Using standard Python module optparse to parse command line option of this tool. +# +# @retval Opt A optparse.Values object containing the parsed options +# @retval Args Target of build command +# +def MyOptionParser(): + Parser = OptionParser(description=__copyright__,version=__version__,prog="build.exe",usage="%prog [options] [all|fds|genc|genmake|clean|cleanall|cleanlib|modules|libraries|run]") + Parser.add_option("-a", "--arch", action="append", type="choice", choices=['IA32','X64','IPF','EBC','ARM'], dest="TargetArch", + help="ARCHS is one of list: IA32, X64, IPF, ARM or EBC, which overrides target.txt's TARGET_ARCH definition. To specify more archs, please repeat this option.") + Parser.add_option("-p", "--platform", action="callback", type="string", dest="PlatformFile", callback=SingleCheckCallback, + help="Build the platform specified by the DSC file name argument, overriding target.txt's ACTIVE_PLATFORM definition.") + Parser.add_option("-m", "--module", action="callback", type="string", dest="ModuleFile", callback=SingleCheckCallback, + help="Build the module specified by the INF file name argument.") + Parser.add_option("-b", "--buildtarget", action="append", type="choice", choices=['DEBUG','RELEASE'], dest="BuildTarget", + help="BuildTarget is one of list: DEBUG, RELEASE, which overrides target.txt's TARGET definition. To specify more TARGET, please repeat this option.") + Parser.add_option("-t", "--tagname", action="append", type="string", dest="ToolChain", + help="Using the Tool Chain Tagname to build the platform, overriding target.txt's TOOL_CHAIN_TAG definition.") + Parser.add_option("-x", "--sku-id", action="callback", type="string", dest="SkuId", callback=SingleCheckCallback, + help="Using this name of SKU ID to build the platform, overriding SKUID_IDENTIFIER in DSC file.") + + Parser.add_option("-n", action="callback", type="int", dest="ThreadNumber", callback=SingleCheckCallback, + help="Build the platform using multi-threaded compiler. The value overrides target.txt's MAX_CONCURRENT_THREAD_NUMBER. Less than 2 will disable multi-thread builds.") + + Parser.add_option("-f", "--fdf", action="callback", type="string", dest="FdfFile", callback=SingleCheckCallback, + help="The name of the FDF file to use, which overrides the setting in the DSC file.") + Parser.add_option("-r", "--rom-image", action="append", type="string", dest="RomImage", default=[], + help="The name of FD to be generated. The name must be from [FD] section in FDF file.") + Parser.add_option("-i", "--fv-image", action="append", type="string", dest="FvImage", default=[], + help="The name of FV to be generated. The name must be from [FV] section in FDF file.") + + Parser.add_option("-u", "--skip-autogen", action="store_true", dest="SkipAutoGen", help="Skip AutoGen step.") + Parser.add_option("-e", "--re-parse", action="store_true", dest="Reparse", help="Re-parse all meta-data files.") + + Parser.add_option("-c", "--case-insensitive", action="store_true", dest="CaseInsensitive", help="Don't check case of file name.") + + # Parser.add_option("-D", "--define", action="append", dest="Defines", metavar="NAME[=[VALUE]]", + # help="Define global macro which can be used in DSC/DEC/INF files.") + + Parser.add_option("-w", "--warning-as-error", action="store_true", dest="WarningAsError", help="Treat warning in tools as error.") + Parser.add_option("-j", "--log", action="store", dest="LogFile", help="Put log in specified file as well as on console.") + + Parser.add_option("-s", "--silent", action="store_true", type=None, dest="SilentMode", + help="Make use of silent mode of (n)make.") + Parser.add_option("-q", "--quiet", action="store_true", type=None, help="Disable all messages except FATAL ERRORS.") + Parser.add_option("-v", "--verbose", action="store_true", type=None, help="Turn on verbose output with informational messages printed, "\ + "including library instances selected, final dependency expression, "\ + "and warning messages, etc.") + Parser.add_option("-d", "--debug", action="store", type="int", help="Enable debug messages at specified level.") + Parser.add_option("-D", "--define", action="append", type="string", dest="Macros", help="Macro: \"Name [= Value]\".") + + Parser.add_option("-y", "--report-file", action="store", dest="ReportFile", help="Create/overwrite the report to the specified filename.") + Parser.add_option("-Y", "--report-type", action="append", type="choice", choices=['PCD','LIBRARY','FLASH','DEPEX','BUILD_FLAGS','FIXED_ADDRESS', 'EXECUTION_ORDER'], dest="ReportType", default=[], + help="Flags that control the type of build report to generate. Must be one of: [PCD, LIBRARY, FLASH, DEPEX, BUILD_FLAGS, FIXED_ADDRESS, EXECUTION_ORDER]. "\ + "To specify more than one flag, repeat this option on the command line and the default flag set is [PCD, LIBRARY, FLASH, DEPEX, BUILD_FLAGS, FIXED_ADDRESS]") + + (Opt, Args)=Parser.parse_args() + return (Opt, Args) + +## Tool entrance method +# +# This method mainly dispatch specific methods per the command line options. +# If no error found, return zero value so the caller of this tool can know +# if it's executed successfully or not. +# +# @retval 0 Tool was successful +# @retval 1 Tool failed +# +def Main(): + StartTime = time.time() + + # Initialize log system + EdkLogger.Initialize() + + # + # Parse the options and args + # + (Option, Target) = MyOptionParser() + GlobalData.gOptions = Option + GlobalData.gCaseInsensitive = Option.CaseInsensitive + + # Set log level + if Option.verbose != None: + EdkLogger.SetLevel(EdkLogger.VERBOSE) + elif Option.quiet != None: + EdkLogger.SetLevel(EdkLogger.QUIET) + elif Option.debug != None: + EdkLogger.SetLevel(Option.debug + 1) + else: + EdkLogger.SetLevel(EdkLogger.INFO) + + if Option.LogFile != None: + EdkLogger.SetLogFile(Option.LogFile) + + if Option.WarningAsError == True: + EdkLogger.SetWarningAsError() + + if platform.platform().find("Windows") >= 0: + GlobalData.gIsWindows = True + else: + GlobalData.gIsWindows = False + + EdkLogger.quiet(time.strftime("%H:%M:%S, %b.%d %Y ", time.localtime()) + "[%s]\n" % platform.platform()) + ReturnCode = 0 + MyBuild = None + try: + if len(Target) == 0: + Target = "all" + elif len(Target) >= 2: + EdkLogger.error("build", OPTION_NOT_SUPPORTED, "More than one targets are not supported.", + ExtraData="Please select one of: %s" %(' '.join(gSupportedTarget))) + else: + Target = Target[0].lower() + + if Target not in gSupportedTarget: + EdkLogger.error("build", OPTION_NOT_SUPPORTED, "Not supported target [%s]." % Target, + ExtraData="Please select one of: %s" %(' '.join(gSupportedTarget))) + + GlobalData.gGlobalDefines = ParseDefines(Option.Macros) + # + # Check environment variable: EDK_TOOLS_PATH, WORKSPACE, PATH + # + CheckEnvVariable() + Workspace = os.getenv("WORKSPACE") + # + # Get files real name in workspace dir + # + GlobalData.gAllFiles = Utils.DirCache(Workspace) + + WorkingDirectory = os.getcwd() + if not Option.ModuleFile: + FileList = glob.glob(os.path.normpath(os.path.join(WorkingDirectory, '*.inf'))) + FileNum = len(FileList) + if FileNum >= 2: + EdkLogger.error("build", OPTION_NOT_SUPPORTED, "There are %d INF files in %s." % (FileNum, WorkingDirectory), + ExtraData="Please use '-m ' switch to choose one.") + elif FileNum == 1: + Option.ModuleFile = NormFile(FileList[0], Workspace) + + if Option.ModuleFile: + if os.path.isabs (Option.ModuleFile): + if os.path.normcase (os.path.normpath(Option.ModuleFile)).find (Workspace) == 0: + Option.ModuleFile = NormFile(os.path.normpath(Option.ModuleFile), Workspace) + Option.ModuleFile = PathClass(Option.ModuleFile, Workspace) + ErrorCode, ErrorInfo = Option.ModuleFile.Validate(".inf", False) + if ErrorCode != 0: + EdkLogger.error("build", ErrorCode, ExtraData=ErrorInfo) + + if Option.PlatformFile != None: + if os.path.isabs (Option.PlatformFile): + if os.path.normcase (os.path.normpath(Option.PlatformFile)).find (Workspace) == 0: + Option.PlatformFile = NormFile(os.path.normpath(Option.PlatformFile), Workspace) + Option.PlatformFile = PathClass(Option.PlatformFile, Workspace) + ErrorCode, ErrorInfo = Option.PlatformFile.Validate(".dsc", False) + if ErrorCode != 0: + EdkLogger.error("build", ErrorCode, ExtraData=ErrorInfo) + + if Option.FdfFile != None: + if os.path.isabs (Option.FdfFile): + if os.path.normcase (os.path.normpath(Option.FdfFile)).find (Workspace) == 0: + Option.FdfFile = NormFile(os.path.normpath(Option.FdfFile), Workspace) + Option.FdfFile = PathClass(Option.FdfFile, Workspace) + ErrorCode, ErrorInfo = Option.FdfFile.Validate(".fdf", False) + if ErrorCode != 0: + EdkLogger.error("build", ErrorCode, ExtraData=ErrorInfo) + + MyBuild = Build(Target, Workspace, Option.PlatformFile, Option.ModuleFile, + Option.TargetArch, Option.ToolChain, Option.BuildTarget, + Option.FdfFile, Option.RomImage, Option.FvImage, + None, Option.SilentMode, Option.ThreadNumber, + Option.SkipAutoGen, Option.Reparse, Option.SkuId, + Option.ReportFile, Option.ReportType) + MyBuild.Launch() + #MyBuild.DumpBuildData() + except FatalError, X: + if MyBuild != None: + # for multi-thread build exits safely + MyBuild.Relinquish() + if Option != None and Option.debug != None: + EdkLogger.quiet("(Python %s on %s) " % (platform.python_version(), sys.platform) + traceback.format_exc()) + ReturnCode = X.args[0] + except Warning, X: + # error from Fdf parser + if MyBuild != None: + # for multi-thread build exits safely + MyBuild.Relinquish() + if Option != None and Option.debug != None: + EdkLogger.quiet("(Python %s on %s) " % (platform.python_version(), sys.platform) + traceback.format_exc()) + else: + EdkLogger.error(X.ToolName, FORMAT_INVALID, File=X.FileName, Line=X.LineNumber, ExtraData=X.Message, RaiseError = False) + ReturnCode = FORMAT_INVALID + except KeyboardInterrupt: + ReturnCode = ABORT_ERROR + if Option != None and Option.debug != None: + EdkLogger.quiet("(Python %s on %s) " % (platform.python_version(), sys.platform) + traceback.format_exc()) + except: + if MyBuild != None: + # for multi-thread build exits safely + MyBuild.Relinquish() + + # try to get the meta-file from the object causing exception + Tb = sys.exc_info()[-1] + MetaFile = GlobalData.gProcessingFile + while Tb != None: + if 'self' in Tb.tb_frame.f_locals and hasattr(Tb.tb_frame.f_locals['self'], 'MetaFile'): + MetaFile = Tb.tb_frame.f_locals['self'].MetaFile + Tb = Tb.tb_next + EdkLogger.error( + "\nbuild", + CODE_ERROR, + "Unknown fatal error when processing [%s]" % MetaFile, + ExtraData="\n(Please send email to edk2-buildtools-devel@lists.sourceforge.net for help, attaching following call stack trace!)\n", + RaiseError=False + ) + EdkLogger.quiet("(Python %s on %s) " % (platform.python_version(), sys.platform) + traceback.format_exc()) + ReturnCode = CODE_ERROR + finally: + Utils.Progressor.Abort() + + if ReturnCode == 0: + Conclusion = "Done" + elif ReturnCode == ABORT_ERROR: + Conclusion = "Aborted" + else: + Conclusion = "Failed" + FinishTime = time.time() + BuildDuration = time.strftime("%M:%S", time.gmtime(int(round(FinishTime - StartTime)))) + if MyBuild != None: + MyBuild.BuildReport.GenerateReport(BuildDuration) + MyBuild.Db.Close() + EdkLogger.SetLevel(EdkLogger.QUIET) + EdkLogger.quiet("\n- %s -\n%s [%s]" % (Conclusion, time.strftime("%H:%M:%S, %b.%d %Y", time.localtime()), BuildDuration)) + + return ReturnCode + +if __name__ == '__main__': + r = Main() + ## 0-127 is a safe return range, and 1 is a standard default error + if r < 0 or r > 127: r = 1 + sys.exit(r) + diff --git a/BaseTools/Source/Python/fpd2dsc/__init__.py b/BaseTools/Source/Python/fpd2dsc/__init__.py index e69de29bb2..4831e80db7 100644 --- a/BaseTools/Source/Python/fpd2dsc/__init__.py +++ b/BaseTools/Source/Python/fpd2dsc/__init__.py @@ -0,0 +1,15 @@ +## @file +# Python 'fpd2dsc' package initialization file. +# +# This file is required to make Python interpreter treat the directory +# as containing package. +# +# Copyright (c) 2007 - 2010, Intel Corporation
    +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# diff --git a/BaseTools/Source/Python/fpd2dsc/fpd2dsc.py b/BaseTools/Source/Python/fpd2dsc/fpd2dsc.py index a22ff5a685..496e108b1f 100644 --- a/BaseTools/Source/Python/fpd2dsc/fpd2dsc.py +++ b/BaseTools/Source/Python/fpd2dsc/fpd2dsc.py @@ -1,7 +1,7 @@ ## @file # Convert an XML-based FPD file to a text-based DSC file. # -# Copyright (c) 2007, Intel Corporation +# Copyright (c) 2007 - 2010, Intel Corporation # All rights reserved. This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License # which accompanies this distribution. The full text of the license may be found at @@ -22,7 +22,7 @@ from optparse import OptionParser # Version and Copyright __version_number__ = "1.0" __version__ = "%prog Version " + __version_number__ -__copyright__ = "Copyright (c) 2007, Intel Corporation All rights reserved." +__copyright__ = "Copyright (c) 2007 - 2010, Intel Corporation All rights reserved." ## Parse command line options # diff --git a/BaseTools/Source/Python/msa2inf/ConvertModule.py b/BaseTools/Source/Python/msa2inf/ConvertModule.py index e0d7b88695..af9aa1d8ec 100644 --- a/BaseTools/Source/Python/msa2inf/ConvertModule.py +++ b/BaseTools/Source/Python/msa2inf/ConvertModule.py @@ -2,7 +2,7 @@ # Convert an MSA Module class object ot an INF Module class object by filling # several info required by INF file. # -# Copyright (c) 2007, Intel Corporation +# Copyright (c) 2007 - 2010, Intel Corporation # All rights reserved. This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License # which accompanies this distribution. The full text of the license may be found at @@ -35,7 +35,7 @@ def AddModuleMiscVersion(Module): Module.Header.InfVersion = Version Version = Module.Header.Specification.get("EFI_SPECIFICATION_VERSION", "") - Module.Header.EfiSpecificationVersion = Version + Module.Header.UefiSpecificationVersion = Version Version = Module.Header.Specification.get("EDK_RELEASE_VERSION", "") Module.Header.EdkReleaseVersion = Version diff --git a/BaseTools/Source/Python/msa2inf/StoreInf.py b/BaseTools/Source/Python/msa2inf/StoreInf.py index bb58dc2f2f..6bf46cf0be 100644 --- a/BaseTools/Source/Python/msa2inf/StoreInf.py +++ b/BaseTools/Source/Python/msa2inf/StoreInf.py @@ -64,8 +64,8 @@ def StoreModuleDefinesSection(InfFile, Module): if ModuleHeader.ModuleType != "": DefinesTupleList.append(("MODULE_TYPE", ModuleHeader.ModuleType)) - if ModuleHeader.EfiSpecificationVersion != "": - DefinesTupleList.append(("EFI_SPECIFICATION_VERSION", ModuleHeader.EfiSpecificationVersion)) + if ModuleHeader.UefiSpecificationVersion != "": + DefinesTupleList.append(("UEFI_SPECIFICATION_VERSION", ModuleHeader.UefiSpecificationVersion)) if ModuleHeader.EdkReleaseVersion != "": DefinesTupleList.append(("EDK_RELEASE_VERSION", ModuleHeader.EdkReleaseVersion)) diff --git a/BaseTools/Source/Python/msa2inf/__init__.py b/BaseTools/Source/Python/msa2inf/__init__.py index e69de29bb2..e139a80bdb 100644 --- a/BaseTools/Source/Python/msa2inf/__init__.py +++ b/BaseTools/Source/Python/msa2inf/__init__.py @@ -0,0 +1,15 @@ +## @file +# Python 'msa2inf' package initialization file. +# +# This file is required to make Python interpreter treat the directory +# as containing package. +# +# Copyright (c) 2007 - 2010, Intel Corporation
    +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# diff --git a/BaseTools/Source/Python/sitecustomize.py b/BaseTools/Source/Python/sitecustomize.py index fa5cd40705..cd315e022f 100644 --- a/BaseTools/Source/Python/sitecustomize.py +++ b/BaseTools/Source/Python/sitecustomize.py @@ -1,3 +1,13 @@ +# +# Copyright (c) 2009 - 2010, Apple, Inc. All rights reserved. +# +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. import sys import locale diff --git a/BaseTools/Source/Python/spd2dec/__init__.py b/BaseTools/Source/Python/spd2dec/__init__.py index e69de29bb2..ed0302b48d 100644 --- a/BaseTools/Source/Python/spd2dec/__init__.py +++ b/BaseTools/Source/Python/spd2dec/__init__.py @@ -0,0 +1,15 @@ +## @file +# Python 'spd2dec' package initialization file. +# +# This file is required to make Python interpreter treat the directory +# as containing package. +# +# Copyright (c) 2007 - 2010, Intel Corporation
    +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# diff --git a/BaseTools/UserManuals/Build_Utility_Man_Page.rtf b/BaseTools/UserManuals/Build_Utility_Man_Page.rtf index 88ac30b3a8..ad03608261 100644 --- a/BaseTools/UserManuals/Build_Utility_Man_Page.rtf +++ b/BaseTools/UserManuals/Build_Utility_Man_Page.rtf @@ -1,209 +1,120 @@ -{\rtf1\adeflang1025\ansi\ansicpg936\uc2\adeff0\deff0\stshfdbch13\stshfloch0\stshfhich0\stshfbi0\deflang1033\deflangfe2052{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f13\fnil\fcharset134\fprq2{\*\panose 02010600030101010101}\'cb\'ce\'cc\'e5{\*\falt SimSun};} -{\f37\fswiss\fcharset0\fprq2{\*\panose 020b0604030504040204}Verdana;}{\f38\fnil\fcharset134\fprq2{\*\panose 00000000000000000000}@\'cb\'ce\'cc\'e5;}{\f40\froman\fcharset238\fprq2 Times New Roman CE;}{\f41\froman\fcharset204\fprq2 Times New Roman Cyr;} -{\f43\froman\fcharset161\fprq2 Times New Roman Greek;}{\f44\froman\fcharset162\fprq2 Times New Roman Tur;}{\f45\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f46\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} -{\f47\froman\fcharset186\fprq2 Times New Roman Baltic;}{\f48\froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f172\fnil\fcharset0\fprq2 SimSun Western{\*\falt SimSun};}{\f410\fswiss\fcharset238\fprq2 Verdana CE;} -{\f411\fswiss\fcharset204\fprq2 Verdana Cyr;}{\f413\fswiss\fcharset161\fprq2 Verdana Greek;}{\f414\fswiss\fcharset162\fprq2 Verdana Tur;}{\f417\fswiss\fcharset186\fprq2 Verdana Baltic;}{\f418\fswiss\fcharset163\fprq2 Verdana (Vietnamese);} -{\f422\fnil\fcharset0\fprq2 @\'cb\'ce\'cc\'e5 Western;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255; -\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;\red8\green96\blue168;}{\stylesheet{ -\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\f37\hich\af37\dbch\af13\cgrid\langnp1033\langfenp2052 \snext0 Normal;}{ -\s1\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\outlinelevel0\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\f37\hich\af37\dbch\af13\cgrid\langnp1033\langfenp2052 \sbasedon0 \snext0 heading 1;}{ -\s2\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\outlinelevel1\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\f37\hich\af37\dbch\af13\cgrid\langnp1033\langfenp2052 \sbasedon0 \snext0 heading 2;}{\*\cs10 -\additive \ssemihidden Default Paragraph Font;}{\* -\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\trcbpat1\trcfpat1\tblind0\tblindtype3\tscellwidthfts0\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv -\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs20 \ltrch\fcs0 \fs20\lang1024\langfe1024\loch\f0\hich\af0\dbch\af13\cgrid\langnp1024\langfenp1024 \snext11 \ssemihidden Normal Table;}} -{\*\latentstyles\lsdstimax156\lsdlockeddef0}{\*\rsidtbl \rsid3283161\rsid4088904\rsid6226395\rsid6423319\rsid7497612\rsid10186840\rsid12798734\rsid13729679\rsid15427098}{\*\generator Microsoft Word 11.0.0000;}{\info{\operator jwang36} -{\creatim\yr2008\mo12\dy31\hr14\min36}{\revtim\yr2008\mo12\dy31\hr14\min57}{\version9}{\edmins20}{\nofpages4}{\nofwords936}{\nofchars5341}{\nofcharsws6265}{\vern24613}{\*\password 00000000}}{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/word/20 -03/wordml}{\xmlns2 urn:schemas-microsoft-com:office:smarttags}}\paperw12240\paperh15840\margl1800\margr1800\margt1440\margb1440\gutter0\ltrsect -\ftnbj\aenddoc\donotembedsysfont0\donotembedlingdata1\grfdocevents0\validatexml0\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0\showxmlerrors0\horzdoc\dghspace120\dgvspace120\dghorigin1701\dgvorigin1984\dghshow0\dgvshow3 -\jcompress\viewkind4\viewscale100\rsidroot6226395 \fet0{\*\wgrffmtfilter 013f}\ilfomacatclnup0\ltrpar \sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta \dbch .}}{\*\pnseclvl2 -\pnucltr\pnstart1\pnindent720\pnhang {\pntxta \dbch .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta \dbch .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta \dbch )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb \dbch (} -{\pntxta \dbch )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb \dbch (}{\pntxta \dbch )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb \dbch (}{\pntxta \dbch )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb \dbch (} -{\pntxta \dbch )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb \dbch (}{\pntxta \dbch )}}\pard\plain \ltrpar\s2\ql \li-1440\ri0\sb400\sa60\sl-340\slmult0\keep\keepn\nowidctlpar\tx360\wrapdefault\faauto\outlinelevel1\rin0\lin-1440\itap0 -\rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\af37\hich\af37\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \ab\af37\afs28 \ltrch\fcs0 \b\fs28\cf17\insrsid10186840 \hich\af37\dbch\af13\loch\f37 Name -\par }\pard\plain \ltrpar\ql \li360\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin360\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\af37\hich\af37\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af37\afs18 -\ltrch\fcs0 \fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 Build.exe \hich\f37 \endash \loch\f37 the master command that provides the {\*\xmlopen\xmlns2{\factoidname PersonName}}\hich\af37\dbch\af13\loch\f37 dev{\*\xmlclose}e -\hich\af37\dbch\af13\loch\f37 loper with a single command for selecting various options of a build -\par }\pard\plain \ltrpar\s2\ql \li-1440\ri0\sb400\sa60\sl-340\slmult0\keep\keepn\nowidctlpar\tx360\wrapdefault\faauto\outlinelevel1\rin0\lin-1440\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 -\fs24\lang1033\langfe2052\loch\af37\hich\af37\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \ab\af37\afs28 \ltrch\fcs0 \b\fs28\cf17\insrsid10186840 \hich\af37\dbch\af13\loch\f37 Synopsis -\par }\pard\plain \ltrpar\ql \li360\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin360\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\af37\hich\af37\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \ab\af37\afs18 -\ltrch\fcs0 \b\fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 Build.exe [options] [target] -\par }\pard\plain \ltrpar\s2\ql \li-1440\ri0\sb400\sa60\sl-340\slmult0\keep\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel1\rin0\lin-1440\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 -\fs24\lang1033\langfe2052\loch\af37\hich\af37\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \ab\af37\afs28 \ltrch\fcs0 \b\fs28\cf17\insrsid10186840 \hich\af37\dbch\af13\loch\f37 Description -\par }\pard\plain \ltrpar\ql \li360\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin360\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\af37\hich\af37\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af37\afs18 -\ltrch\fcs0 \fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 Build.exe is the master command line (CLI) tool that provides the {\*\xmlopen\xmlns2{\factoidname PersonName}}\hich\af37\dbch\af13\loch\f37 dev{\*\xmlclose}eloper with a single command -\hich\af37\dbch\af13\loch\f37 for selecting various options of a build. In general, it checks the environment variables, gets the user\hich\f37 \rquote \loch\f37 -s configuration from either the CLI or target.txt, parses the dsc, dec, inf, target.txt, tools_def.txt, generates .C, .H files and the Makefiles for \hich\af37\dbch\af13\loch\f37 o\hich\af37\dbch\af13\loch\f37 -ne or more modules and/or the active platform, calls a make (NMake or make) program to process these Makefiles, then optionally calls GenFds to generate an fd file. -\par \hich\af37\dbch\af13\loch\f37 The build tool supports \hich\af37\dbch\af13\loch\f37 two kinds of path specifications on command line - an absolutely pa\hich\af37\dbch\af13\loch\f37 th or a \hich\af37\dbch\af13\loch\f37 -relative (to the WORKSPACE environment variable) path}{\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid7497612 \hich\af37\dbch\af13\loch\f37 }{\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid7497612 \loch\af37\dbch\af13\hich\f37 \endash }{ -\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid7497612 \hich\af37\dbch\af13\loch\f37 in \hich\af37\dbch\af13\loch\f37 command line}{\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 . -\par }\pard\plain \ltrpar\s2\ql \li-1440\ri0\sb400\sa60\sl-340\slmult0\keep\keepn\nowidctlpar\tx360\tx1440\wrapdefault\faauto\outlinelevel1\rin0\lin-1440\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 -\fs24\lang1033\langfe2052\loch\af37\hich\af37\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \ab\af37\afs28 \ltrch\fcs0 \b\fs28\cf17\insrsid10186840 \hich\af37\dbch\af13\loch\f37 Options -\par }\pard\plain \ltrpar\ql \li360\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin360\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\af37\hich\af37\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af37\afs18 -\ltrch\fcs0 \fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 There are no required options. -\par }{\rtlch\fcs1 \ab\af37\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 -a, --arch -\par }\pard \ltrpar\ql \li720\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin720\itap0 {\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 -ARCH is one of list: IA32, X64, IPF or EBC, which overrides target.txt's TARGET_ARCH definition. To specify more ARCH, please repeat\hich\af37\dbch\af13\loch\f37 this option. -\par }\pard \ltrpar\ql \li360\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin360\itap0 {\rtlch\fcs1 \ab\af37\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 -p, --platform PlatformName.dsc -\par }\pard \ltrpar\ql \li720\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin720\itap0 {\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 -Build the platform specified by the DSC file name argument, overrides target.txt's ACTIVE_PLATFORM definition. -\par }\pard \ltrpar\ql \li360\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin360\itap0 {\rtlch\fcs1 \ab\af37\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 -m, --module ModuleName.inf -\par }\pard \ltrpar\ql \li720\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin720\itap0 {\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 Build the module specified by the INF file name argument. -\par }\pard \ltrpar\ql \li360\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin360\itap0 {\rtlch\fcs1 \ab\af37\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 -b, --build\hich\af37\dbch\af13\loch\f37 target -\par }\pard \ltrpar\ql \li720\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin720\itap0 {\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 -TARGET is one of list: DEBUG, RELEASE, which overrides target.txt's TARGET definition. To specify more TARGET, please repeat this option. -\par }\pard \ltrpar\ql \li360\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin360\itap0 {\rtlch\fcs1 \ab\af37\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 -t, --tagname Tagname -\par }\pard \ltrpar\ql \li720\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin720\itap0 {\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 -Using the Tool Chain Tagname to build the platform, overrides target.txt's TOOL\hich\af37\dbch\af13\loch\f37 _CHAIN_TAG definition. -\par }\pard \ltrpar\ql \li360\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin360\itap0 {\rtlch\fcs1 \ab\af37\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 -f --fdf Filename.fdf -\par }\pard \ltrpar\ql \li720\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin720\itap0 {\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 The name of the FDF file to use, which overrides the setting in the DSC file. - -\par }\pard \ltrpar\ql \li360\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin360\itap0\pararsid6423319 {\rtlch\fcs1 \ab\af37\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid6423319 \hich\af37\dbch\af13\loch\f37 -r --rom-image ROM_IMAGE_NAME -\par }\pard \ltrpar\ql \li720\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin720\itap0\pararsid6423319 {\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid6423319\charrsid6423319 \hich\af37\dbch\af13\loch\f37 -The name of FD to be generated. The name must be from [FD] section in FDF file}{\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid6423319 \hich\af37\dbch\af13\loch\f37 . -\par }\pard \ltrpar\ql \li360\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin360\itap0\pararsid6423319 {\rtlch\fcs1 \ab\af37\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid6423319 \hich\af37\dbch\af13\loch\f37 -i --fv-image\hich\af37\dbch\af13\loch\f37 FV_IMAGE_NAME - -\par }\pard \ltrpar\ql \li720\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin720\itap0\pararsid6423319 {\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid6423319\charrsid6423319 \hich\af37\dbch\af13\loch\f37 -The name of FV to be generated. The name must be from}{\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid6423319 \hich\af37\dbch\af13\loch\f37 }{\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid6423319\charrsid6423319 -\hich\af37\dbch\af13\loch\f37 [FV] section in FDF file}{\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid6423319 \hich\af37\dbch\af13\loch\f37 . -\par }\pard \ltrpar\ql \li360\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin360\itap0 {\rtlch\fcs1 \ab\af37\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 -n NUM -\par }\pard \ltrpar\ql \li720\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin720\itap0 {\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 -Build the platform using multi-threaded compiler. The value overrides target.txt's MULTIPLE_THREAD and MAX_CONCURRENT_THREAD_NUMBER}{\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid6226395 \hich\af37\dbch\af13\loch\f37 .}{\rtlch\fcs1 \af37\afs18 -\ltrch\fcs0 \fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 }{\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid6226395 \hich\af37\dbch\af13\loch\f37 L}{\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid10186840 -\hich\af37\dbch\af13\loch\f37 ess than 2 will disable multi-thread builds. -\par }\pard \ltrpar\ql \li360\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin360\itap0\pararsid3283161 {\rtlch\fcs1 \ab\af37\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid3283161 \hich\af37\dbch\af13\loch\f37 -x }{\rtlch\fcs1 \ab\af37\afs18 \ltrch\fcs0 -\b\fs18\cf1\insrsid15427098 \hich\af37\dbch\af13\loch\f37 --sku-id SKU_ID}{\rtlch\fcs1 \ab\af37\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid3283161 -\par }\pard \ltrpar\ql \li720\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin720\itap0\pararsid15427098 {\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid15427098\charrsid15427098 \hich\af37\dbch\af13\loch\f37 -Using this name of SKU ID to build the platform, overriding SKUID_IDENTIFIER in DSC file}{\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid3283161 \hich\af37\dbch\af13\loch\f37 . -\par }\pard \ltrpar\ql \li360\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin360\itap0\pararsid3283161 {\rtlch\fcs1 \ab\af37\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid3283161 \hich\af37\dbch\af13\loch\f37 -u}{\rtlch\fcs1 \ab\af37\afs18 \ltrch\fcs0 -\b\fs18\cf1\insrsid15427098 \hich\af37\dbch\af13\loch\f37 --skip-autogen}{\rtlch\fcs1 \ab\af37\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid3283161 -\par }\pard \ltrpar\ql \li720\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin720\itap0\pararsid3283161 {\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid15427098 \hich\af37\dbch\af13\loch\f37 Skip AutoGen step. Note the build may fail if there\hich\f37 -\rquote \loch\f37 s no AutoGen-ed files before}{\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid3283161 \hich\af37\dbch\af13\loch\f37 . -\par }\pard \ltrpar\ql \li360\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin360\itap0\pararsid3283161 {\rtlch\fcs1 \ab\af37\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid3283161 \hich\af37\dbch\af13\loch\f37 -e}{\rtlch\fcs1 \ab\af37\afs18 \ltrch\fcs0 -\b\fs18\cf1\insrsid15427098 \hich\af37\dbch\af13\loch\f37 --re-parse}{\rtlch\fcs1 \ab\af37\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid3283161 -\par }\pard \ltrpar\ql \li720\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin720\itap0\pararsid3283161 {\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid15427098\charrsid15427098 \hich\af37\dbch\af13\loch\f37 Re-parse all meta-data files}{\rtlch\fcs1 -\af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid3283161 \hich\af37\dbch\af13\loch\f37 .}{\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid15427098 \hich\af37\dbch\af13\loch\f37 Use this option if you encounter inconsistency issue.}{\rtlch\fcs1 \af37\afs18 -\ltrch\fcs0 \fs18\cf1\insrsid3283161 -\par }\pard \ltrpar\ql \li360\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin360\itap0\pararsid3283161 {\rtlch\fcs1 \ab\af37\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid3283161 \hich\af37\dbch\af13\loch\f37 -w}{\rtlch\fcs1 \ab\af37\afs18 \ltrch\fcs0 -\b\fs18\cf1\insrsid15427098 \hich\af37\dbch\af13\loch\f37 --warning-as-error}{\rtlch\fcs1 \ab\af37\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid3283161 -\par }\pard \ltrpar\ql \li720\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin720\itap0 {\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid15427098 \hich\af37\dbch\af13\loch\f37 Treat warning in tools as error}{\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 -\fs18\cf1\insrsid3283161 \hich\af37\dbch\af13\loch\f37 . -\par }\pard \ltrpar\ql \li360\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin360\itap0\pararsid6423319 {\rtlch\fcs1 \ab\af37\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid6423319 \hich\af37\dbch\af13\loch\f37 -j}{\rtlch\fcs1 \ab\af37\afs18 \ltrch\fcs0 -\b\fs18\cf1\insrsid15427098 \hich\af37\dbch\af13\loch\f37 --log LOGFILE}{\rtlch\fcs1 \ab\af37\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid6423319 -\par }\pard \ltrpar\ql \li720\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin720\itap0\pararsid6423319 {\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid15427098\charrsid15427098 \hich\af37\dbch\af13\loch\f37 Put}{\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 -\fs18\cf1\insrsid15427098 \hich\af37\dbch\af13\loch\f37 screen output}{\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid15427098\charrsid15427098 \hich\af37\dbch\af13\loch\f37 in specified file}{\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 -\fs18\cf1\insrsid6423319 \hich\af37\dbch\af13\loch\f37 . -\par }\pard \ltrpar\ql \li360\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin360\itap0\pararsid6423319 {\rtlch\fcs1 \ab\af37\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid3283161 \hich\af37\dbch\af13\loch\f37 -s \hich\f37 \endash \loch\f37 silent -\par }\pard \ltrpar\ql \li720\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin720\itap0\pararsid3283161 {\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid3283161 \hich\af37\dbch\af13\loch\f37 \hich\f37 Tell \'93\loch\f37 \hich\f37 make\'94\loch\f37 -\hich\f37 tool to run \'93\loch\f37 \hich\f37 silently\'94\loch\f37 . Inte\hich\af37\dbch\af13\loch\f37 rnally, a \hich\f37 \lquote \loch\f37 -s\hich\f37 \rquote \loch\f37 \hich\f37 switch will be passed to \'93\loch\f37 \hich\f37 make\'94\loch\f37 - tool. Don\hich\f37 \rquote \loch\f37 \hich\f37 t use this option if your \'93\loch\f37 \hich\f37 make\'94\loch\f37 tool doesn\hich\f37 \rquote \loch\f37 t support \hich\f37 \lquote \loch\f37 -s\hich\f37 \rquote \loch\f37 \hich\f37 . Instead, if your -\'93\loch\f37 \hich\f37 make\'94\loch\f37 tool uses other option to do the same, you could add it to the XX_XX_XX_MAKE_FLAGS in tools_def.txt. -\par }\pard \ltrpar\ql \li360\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin360\itap0 {\rtlch\fcs1 \ab\af37\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 -d, --debug [#\hich\af37\dbch\af13\loch\f37 ] -\par }\pard \ltrpar\ql \li720\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin720\itap0 {\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 Enable debug messages at specified level. It is used by Tool itself. -\par }\pard \ltrpar\ql \li360\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin360\itap0 {\rtlch\fcs1 \ab\af37\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 -q, --quiet -\par }\pard \ltrpar\ql \li720\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin720\itap0 {\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 Disable all messages except FATAL ERRORS. -\par }\pard \ltrpar\ql \li360\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin360\itap0 {\rtlch\fcs1 \ab\af37\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 -v, --verbose -\par }\pard \ltrpar\ql \li720\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin720\itap0 {\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 Turn on verbose output with informational messages printed. -\par }\pard \ltrpar\ql \li360\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin360\itap0 {\rtlch\fcs1 \ab\af37\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 --version -\par }\pard \ltrpar\ql \li720\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin720\itap0 {\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 Show program's copyright and version number then exit. -\par }\pard \ltrpar\ql \li360\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin360\itap0 {\rtlch\fcs1 \ab\af37\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 -h, --help -\par }\pard \ltrpar\ql \li720\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin720\itap0 {\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 Print the copyright, version and usage of this program then exit. -\par }\pard\plain \ltrpar\s2\ql \li-1440\ri0\sb400\sa60\sl-340\slmult0\keep\keepn\nowidctlpar\tx360\tx1440\wrapdefault\faauto\outlinelevel1\rin0\lin-1440\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 -\fs24\lang1033\langfe2052\loch\af37\hich\af37\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \ab\af37\afs28 \ltrch\fcs0 \b\fs28\cf17\insrsid10186840 \hich\af37\dbch\af13\loch\f37 Target -\par }\pard\plain \ltrpar\ql \li360\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin360\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\af37\hich\af37\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af37\afs18 -\ltrch\fcs0 \fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 If no target is given, then default target is ALL. -\par }{\rtlch\fcs1 \ab\af37\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 ALL}{\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 - Build everything for either the platform or module. -\par }{\rtlch\fcs1 \ab\af37\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 GenC}{\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 - Auto-generate all C files for either the platform or module. -\par }{\rtlch\fcs1 \ab\af37\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 GenMake}{\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 Generate the Makefiles \hich\f37 \endash -\loch\f37 if auto-generated files are missing, -\par }\pard \ltrpar\ql \li360\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin360\itap0 {\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 }{\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid13729679 -\hich\af37\dbch\af13\loch\f37 }{\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 then auto-generate all C files first for either the platform or module. -\par }\pard \ltrpar\ql \li360\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin360\itap0 {\rtlch\fcs1 \ab\af37\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 Fds}{\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid10186840 -\hich\af37\dbch\af13\loch\f37 C\hich\af37\dbch\af13\loch\f37 reate the FD Image files. -\par }{\rtlch\fcs1 \ab\af37\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 Libraries}{\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 - Build all EDK Libraries and EDK II Library Instances which are specified. -\par }{\rtlch\fcs1 \ab\af37\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 Modules}{\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 - Build all EDK components and EDK II modules which are specified. -\par }{\rtlch\fcs1 \ab\af37\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 Clean}{\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 Remove intermediate files generated by the NMAKE -\hich\af37\dbch\af13\loch\f37 command (leaving -\par }\pard \ltrpar\ql \li360\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin360\itap0 {\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 - the auto-generated C format, FD image files, PE32 output files, PCH -\par \hich\af37\dbch\af13\loch\f37 files and LIB files). -\par }\pard \ltrpar\ql \li360\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin360\itap0 {\rtlch\fcs1 \ab\af37\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 CleanAll}{\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid10186840 -\hich\af37\dbch\af13\loch\f37 Remove all intermmediate, auto-generated, FV and FD image files \hich\f37 \endash \loch\f37 -\par }\pard \ltrpar\ql \li360\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin360\itap0 {\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 state o\hich\af37\dbch\af13\loch\f37 -f the tree should be exactly as if a fresh checkout or install has -\par \hich\af37\dbch\af13\loch\f37 occurred. -\par }\pard \ltrpar\ql \li360\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin360\itap0 {\rtlch\fcs1 \ab\af37\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 CleanLib}{\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid10186840 -\hich\af37\dbch\af13\loch\f37 Remove intermediate files generated by the NMAKE command AND LIB -\par }\pard \ltrpar\ql \li360\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin360\itap0 {\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 files (leaving the auto-generated, FV and FD image files, PE3 -\hich\af37\dbch\af13\loch\f37 2 output -\par \hich\af37\dbch\af13\loch\f37 files and PCH files) -\par }\pard \ltrpar\ql \li360\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin360\itap0\pararsid13729679 {\rtlch\fcs1 \ab\af37\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid13729679 \hich\af37\dbch\af13\loch\f37 run}{\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 -\fs18\cf1\insrsid13729679 \hich\af37\dbch\af13\loch\f37 Run }{\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 platform}{\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid13729679 -\hich\af37\dbch\af13\loch\f37 (for emulator platform only) -\par }\pard \ltrpar\ql \li360\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin360\itap0\pararsid13729679 {\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid13729679 -\par }\pard \ltrpar\ql \li360\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin360\itap0 {\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid13729679 -\par }\pard\plain \ltrpar\s2\ql \li-1440\ri0\sb400\sa60\sl-340\slmult0\keep\keepn\nowidctlpar\tx360\tx1440\wrapdefault\faauto\outlinelevel1\rin0\lin-1440\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 -\fs24\lang1033\langfe2052\loch\af37\hich\af37\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \ab\af37\afs28 \ltrch\fcs0 \b\fs28\cf17\insrsid10186840 \hich\af37\dbch\af13\loch\f37 Examples -\par }\pard\plain \ltrpar\ql \li360\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin360\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\af37\hich\af37\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af37\afs18 -\ltrch\fcs0 \fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 Assume that $(WORKSPACE) is C:\\MyWorkspace -\par }\pard \ltrpar\ql \li180\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin180\itap0 {\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 Build platform: Nt32Pkg.dsc -\par }\pard \ltrpar\ql \li360\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin360\itap0 {\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 Specify the platform description file on the command line. -\par }\pard \ltrpar\ql \li720\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin720\itap0 {\rtlch\fcs1 \ab\af37\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 C:\\\hich\af37\dbch\af13\loch\f37 MyWorkspace>build -p Nt32Pkg\\ -Nt32Pkg.dsc \hich\f37 \endash \loch\f37 a IA32 -\par }\pard \ltrpar\ql \li360\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin360\itap0 {\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 -Build the platform in the current working directory if it contains a platform description file. -\par }\pard \ltrpar\ql \li720\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin720\itap0 {\rtlch\fcs1 \ab\af37\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 C:\\MyWorkspace\\Nt32Pkg>build \hich\f37 \endash \loch\f37 a IA32 -\par }\pard \ltrpar\ql \li360\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin360\itap0 {\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 Build the active platform specified in the target.txt file. -\par }\pard \ltrpar\ql \li720\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin720\itap0 {\rtlch\fcs1 \ab\af37\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 C:\\ MyWorkspac\hich\af37\dbch\af13\loch\f37 e>build \hich\f37 \endash -\loch\f37 a Ia32 -\par }\pard \ltrpar\ql \li360\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin360\itap0 {\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid10186840 -\par }\pard \ltrpar\ql \li180\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin180\itap0 {\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 Build Module: HelloWorld.inf -\par }\pard \ltrpar\ql \li360\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin360\itap0 {\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 Specify the platform and Module on the command line. -\par }\pard \ltrpar\ql \li720\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin720\itap0 {\rtlch\fcs1 \ab\af37\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 C:\\MyWorkspace>build -p Nt32Pkg\\Nt32Pkg.dsc \hich\f37 \endash -\loch\f37 a IA32 \\ -\par }\pard \ltrpar\ql \li720\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin720\itap0 {\rtlch\fcs1 \ab\af37\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 \hich\f37 \endash \loch\f37 -m MdeModulePkg/Application/HelloWorld/HelloWorld.inf -\par }\pard \ltrpar\ql \li360\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin360\itap0 {\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 Specify the Module on the command line and use t\hich\af37\dbch\af13\loch\f37 -he active platform specified in the target.txt file. -\par }\pard \ltrpar\ql \li720\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin720\itap0 {\rtlch\fcs1 \ab\af37\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 C:\\MyWorkspace>build \hich\f37 \endash \loch\f37 a IA32 \\ -\par }\pard \ltrpar\ql \li720\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin720\itap0 {\rtlch\fcs1 \ab\af37\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid10186840 \loch\af37\dbch\af13\hich\f37 \endash \loch\f37 m MdeModulePkg/Application/HelloWorld/HelloWorld.inf -\par }\pard \ltrpar\ql \li360\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin360\itap0 {\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 Build the module \hich\af37\dbch\af13\loch\f37 -in the current working directory if it contains a module description file and specify the platform on the command line. -\par }\pard \ltrpar\ql \li720\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin720\itap0 {\rtlch\fcs1 \ab\af37\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 C:\\ MyWorkspace\\MdeModulePkg\\Application\\HelloWorld>build \hich\f37 -\endash \loch\f37 a Ia32 \\ -\par }\pard \ltrpar\ql \li720\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin720\itap0 {\rtlch\fcs1 \ab\af37\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid10186840 \loch\af37\dbch\af13\hich\f37 \endash \loch\f37 p Nt32Pkg\\Nt32Pkg.dsc -\par }\pard \ltrpar\ql \li360\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin360\itap0 {\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 Build the module in the current working direc\hich\af37\dbch\af13\loch\f37 -tory and use the active platform specified in the target.txt file. -\par }\pard \ltrpar\ql \li720\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin720\itap0 {\rtlch\fcs1 \ab\af37\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 C:\\ MyWorkspace\\MdeModulePkg\\Application\\HelloWorld>build \hich\f37 -\endash \loch\f37 a Ia32 -\par }\pard\plain \ltrpar\s2\ql \li-1440\ri0\sb400\sa60\sl-340\slmult0\keep\keepn\nowidctlpar\tx360\tx1440\wrapdefault\faauto\outlinelevel1\rin0\lin-1440\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 -\fs24\lang1033\langfe2052\loch\af37\hich\af37\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \ab\af37\afs28 \ltrch\fcs0 \b\fs28\cf17\insrsid10186840 \hich\af37\dbch\af13\loch\f37 Bugs -\par }\pard\plain \ltrpar\ql \li360\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin360\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\af37\hich\af37\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af37\afs18 -\ltrch\fcs0 \fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 No known bugs. -\par \hich\af37\dbch\af13\loch\f37 Report bugs to issues@buildtools.tianocore.org -\par }\pard\plain \ltrpar\s2\ql \li-1440\ri0\sb400\sa60\sl-340\slmult0\keep\keepn\nowidctlpar\tx360\tx1440\wrapdefault\faauto\outlinelevel1\rin0\lin-1440\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 -\fs24\lang1033\langfe2052\loch\af37\hich\af37\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \ab\af37\afs28 \ltrch\fcs0 \b\fs28\cf17\insrsid10186840 \hich\af37\dbch\af13\loch\f37 Files -\par }\pard\plain \ltrpar\ql \li360\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin360\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\af37\hich\af37\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af37\afs18 -\ltrch\fcs0 \fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 target.txt, tools_def.txt, platform.dsc, flashm\hich\af37\dbch\af13\loch\f37 ap.fdf, package.dec and module.inf. -\par }\pard\plain \ltrpar\s2\ql \li-1440\ri0\sb400\sa60\sl-340\slmult0\keep\keepn\nowidctlpar\tx360\tx1440\wrapdefault\faauto\outlinelevel1\rin0\lin-1440\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 -\fs24\lang1033\langfe2052\loch\af37\hich\af37\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \ab\af37\afs28 \ltrch\fcs0 \b\fs28\cf17\insrsid10186840 \hich\af37\dbch\af13\loch\f37 See also -\par }\pard\plain \ltrpar\ql \li360\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin360\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\af37\hich\af37\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af37\afs18 -\ltrch\fcs0 \fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 GenFds.exe -\par }\pard\plain \ltrpar\s2\ql \li-1440\ri0\sb400\sa60\sl-340\slmult0\keep\keepn\nowidctlpar\tx360\tx1440\wrapdefault\faauto\outlinelevel1\rin0\lin-1440\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 -\fs24\lang1033\langfe2052\loch\af37\hich\af37\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \ab\af37\afs28 \ltrch\fcs0 \b\fs28\cf17\insrsid10186840 \hich\af37\dbch\af13\loch\f37 License -\par }\pard\plain \ltrpar\ql \li360\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin360\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\af37\hich\af37\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 -\fs18\cf1\insrsid10186840 \hich\af37\dbch\af13\loch\f37 Copyright (c) 1999-200}{\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid12798734 \hich\af37\dbch\af13\loch\f37 9}{\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid10186840 -\hich\af37\dbch\af13\loch\f37 Intel Corporation. All rights reserved. -\par -\par \hich\af37\dbch\af13\loch\f37 This program and the accompanying materials are licensed and made available under the terms and -\par \hich\af37\dbch\af13\loch\f37 conditions of the BSD License \hich\af37\dbch\af13\loch\f37 which accompanies this distribution. The full text of the license may be -\par \hich\af37\dbch\af13\loch\f37 found at: -\par \hich\af37\dbch\af13\loch\f37 http://opensource.org/licenses/bsd-license.php -\par -\par \hich\af37\dbch\af13\loch\f37 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTIES -\par \hich\af37\dbch\af13\loch\f37 OR REPRESENTATIONS OF ANY KIND, EIT\hich\af37\dbch\af13\loch\f37 HER EXPRESS OR IMPLIED. -\par }} \ No newline at end of file +{\rtf1\ansi\ansicpg936\deff0\deflang1033\deflangfe2052{\fonttbl{\f0\fswiss\fprq2\fcharset0 Verdana;}{\f1\froman\fprq2\fcharset0 Times New Roman;}} +{\colortbl ;\red8\green96\blue168;\red0\green0\blue0;} +{\stylesheet{ Normal;}{\s1 heading 1;}{\s2 heading 2;}} +{\*\generator Msftedit 5.41.15.1515;}\viewkind4\uc1\pard\keep\keepn\nowidctlpar\s2\li-1440\sb400\sa60\sl-340\slmult0\tx360\cf1\b\f0\fs28 Name\par +\pard\nowidctlpar\li360\sb200\cf2\b0\fs18 Build.exe \endash the master command that provides the developer with a single command for selecting various options of a build\par +\pard\keep\keepn\nowidctlpar\s2\li-1440\sb400\sa60\sl-340\slmult0\tx360\cf1\b\fs28 Synopsis\par +\pard\nowidctlpar\li360\sb200\cf2\fs18 Build.exe [options] [target]\par +\pard\keep\keepn\nowidctlpar\s2\li-1440\sb400\sa60\sl-340\slmult0\cf1\fs28 Description\par +\pard\nowidctlpar\li360\sb200\cf2\b0\fs18 Build.exe is the master command line (CLI) tool that provides the developer with a single command for selecting various options of a build. In general, it checks the environment variables, gets the user\rquote s configuration from either the CLI or target.txt, parses the dsc, dec, inf, target.txt, tools_def.txt, generates .C, .H files and the Makefiles for one or more modules and/or the active platform, calls a make (NMake or make) program to process these Makefiles, then optionally calls GenFds to generate an fd file.\par +The build tool supports two kinds of path specifications on command line - an absolutely path or a relative (to the WORKSPACE environment variable) path \endash in command line.\par +\pard\keep\keepn\nowidctlpar\s2\li-1440\sb400\sa60\sl-340\slmult0\tx360\tx1440\cf1\b\fs28 Options\par +\pard\nowidctlpar\li360\sb200\cf2\b0\fs18 There are no required options. \par +\b -a, --arch \par +\pard\nowidctlpar\li720\sb200\b0 ARCH is one of list: IA32, X64, IPF or EBC, which overrides target.txt's TARGET_ARCH definition. To specify more ARCH, please repeat this option.\par +\pard\nowidctlpar\li360\sb200\b -p, --platform PlatformName.dsc\par +\pard\nowidctlpar\li720\sb200\b0 Build the platform specified by the DSC file name argument, overrides target.txt's ACTIVE_PLATFORM definition.\par +\pard\nowidctlpar\li360\sb200\b -m, --module ModuleName.inf\par +\pard\nowidctlpar\li720\sb200\b0 Build the module specified by the INF file name argument.\par +\pard\nowidctlpar\li360\sb200\b -b, --buildtarget \par +\pard\nowidctlpar\li720\sb200\b0 TARGET is one of list: DEBUG, RELEASE, which overrides target.txt's TARGET definition. To specify more TARGET, please repeat this option.\par +\pard\nowidctlpar\li360\sb200\b -t, --tagname Tagname\par +\pard\nowidctlpar\li720\sb200\b0 Using the Tool Chain Tagname to build the platform, overrides target.txt's TOOL_CHAIN_TAG definition.\par +\pard\nowidctlpar\li360\sb200\b -f --fdf Filename.fdf\par +\pard\nowidctlpar\li720\sb200\b0 The name of the FDF file to use, which overrides the setting in the DSC file.\par +\pard\nowidctlpar\li360\sb200\b -r --rom-image ROM_IMAGE_NAME\par +\pard\nowidctlpar\li720\sb200\b0 The name of FD to be generated. The name must be from [FD] section in FDF file.\par +\pard\nowidctlpar\li360\sb200\b -i --fv-image FV_IMAGE_NAME\par +\pard\nowidctlpar\li720\sb200\b0 The name of FV to be generated. The name must be from [FV] section in FDF file.\par +\pard\nowidctlpar\li360\sb200\b -n NUM\par +\pard\nowidctlpar\li720\sb200\b0 Build the platform using multi-threaded compiler. The value overrides target.txt's MULTIPLE_THREAD and MAX_CONCURRENT_THREAD_NUMBER. Less than 2 will disable multi-thread builds.\par +\pard\nowidctlpar\li360\sb200\b -x --sku-id SKU_ID\f1\par +\pard\nowidctlpar\li720\sb200\b0\f0 Using this name of SKU ID to build the platform, overriding SKUID_IDENTIFIER in DSC file.\par +\pard\nowidctlpar\li360\sb200\b -u --skip-autogen\f1\par +\pard\nowidctlpar\li720\sb200\b0\f0 Skip AutoGen step. Note the build may fail if there\rquote s no AutoGen-ed files before.\par +\pard\nowidctlpar\li360\sb200\b -e --re-parse\f1\par +\pard\nowidctlpar\li720\sb200\b0\f0 Re-parse all meta-data files. Use this option if you encounter inconsistency issue.\f1\par +\pard\nowidctlpar\li360\sb200\b\f0 -w --warning-as-error\f1\par +\pard\nowidctlpar\li720\sb200\b0\f0 Treat warning in tools as error.\par +\pard\nowidctlpar\li360\sb200\b -j --log LOGFILE\f1\par +\pard\nowidctlpar\li720\sb200\b0\f0 Put screen output in specified file.\par +\pard\nowidctlpar\li360\sb200\b -s \endash silent\par +\pard\nowidctlpar\li720\sb200\b0 Tell \ldblquote make\rdblquote tool to run \ldblquote silently\rdblquote . Internally, a \lquote -s\rquote switch will be passed to \ldblquote make\rdblquote tool. Don\rquote t use this option if your \ldblquote make\rdblquote tool doesn\rquote t support \lquote -s\rquote . Instead, if your \ldblquote make\rdblquote tool uses other option to do the same, you could add it to the XX_XX_XX_MAKE_FLAGS in tools_def.txt.\par +\pard\nowidctlpar\li360\sb200\b -d, --debug [#]\par +\pard\nowidctlpar\li720\sb200\b0 Enable debug messages at specified level. It is used by Tool itself.\par +\pard\nowidctlpar\li360\sb200\b -q, --quiet\par +\pard\nowidctlpar\li720\sb200\b0 Disable all messages except FATAL ERRORS.\par +\pard\nowidctlpar\li360\sb200\b -v, --verbose\par +\pard\nowidctlpar\li720\sb200\b0 Turn on verbose output with informational messages printed.\par +\pard\nowidctlpar\li360\sb200\b -D, --define MACROS\par +\pard\nowidctlpar\li720\sb200\b0 Macro: "Name [= Value]".\par +\pard\nowidctlpar\li360\sb200\b -y, --report-file REPORTFILE\f1\par +\pard\nowidctlpar\li720\sb200\b0\f0 Create/overwrite the report to the specified filename.\par +\pard\nowidctlpar\li360\sb200\b -Y, --report-type REPORTTYPE\par +\pard\nowidctlpar\li720\sb200\b0 Flags that control the type of build report to generate. Must be one of: [PCD, LIBRARY, FLASH, DEPEX, BUILD_FLAGS, FIXED_ADDRESS, EXECUTION_ORDER]. To specify more than one flag, repeat this option on the command line and the default flag set is [PCD, LIBRARY, FLASH, DEPEX, BUILD_FLAGS, FIXED_ADDRESS]\par +\pard\nowidctlpar\li360\sb200\b --version\par +\pard\nowidctlpar\li720\sb200\b0 Show program's copyright and version number then exit.\par +\pard\nowidctlpar\li360\sb200\b -h, --help\par +\pard\nowidctlpar\li720\sb200\b0 Print the copyright, version and usage of this program then exit.\par +\pard\keep\keepn\nowidctlpar\s2\li-1440\sb400\sa60\sl-340\slmult0\tx360\tx1440\cf1\b\fs28 Target\par +\pard\nowidctlpar\li360\sb200\cf2\b0\fs18 If no target is given, then default target is ALL.\par +\b ALL\b0 Build everything for either the platform or module.\par +\b GenC\b0 Auto-generate all C files for either the platform or module.\par +\b GenMake\b0 Generate the Makefiles \endash if auto-generated files are missing,\par +\pard\nowidctlpar\li360 then auto-generate all C files first for either the platform or module.\par +\pard\nowidctlpar\li360\sb200\b Fds\b0 Create the FD Image files.\par +\b Libraries\b0 Build all EDK Libraries and EDK II Library Instances which are specified.\par +\b Modules\b0 Build all EDK components and EDK II modules which are specified.\par +\b Clean\b0 Remove intermediate files generated by the NMAKE command (leaving\par +\pard\nowidctlpar\li360 the auto-generated C format, FD image files, PE32 output files, PCH \par + files and LIB files).\par +\pard\nowidctlpar\li360\sb200\b CleanAll\b0 Remove all intermmediate, auto-generated, FV and FD image files \endash \par +\pard\nowidctlpar\li360 state of the tree should be exactly as if a fresh checkout or install has \par + occurred.\par +\pard\nowidctlpar\li360\sb200\b CleanLib\b0 Remove intermediate files generated by the NMAKE command AND LIB \par +\pard\nowidctlpar\li360 files (leaving the auto-generated, FV and FD image files, PE32 output \par + files and PCH files)\par +\pard\nowidctlpar\li360\sb200\b run\b0 Run platform (for emulator platform only)\par +\pard\nowidctlpar\li360\f1\par +\par +\pard\keep\keepn\nowidctlpar\s2\li-1440\sb400\sa60\sl-340\slmult0\tx360\tx1440\cf1\b\f0\fs28 Examples\par +\pard\nowidctlpar\li360\sb200\cf2\b0\fs18 Assume that $(WORKSPACE) is C:\\MyWorkspace\par +\pard\nowidctlpar\li180\sb200 Build platform: Nt32Pkg.dsc\par +\pard\nowidctlpar\li360\sb200 Specify the platform description file on the command line.\par +\pard\nowidctlpar\li720\sb200\b C:\\MyWorkspace>build -p Nt32Pkg\\Nt32Pkg.dsc \endash a IA32\par +\pard\nowidctlpar\li360\sb200\b0 Build the platform in the current working directory if it contains a platform description file.\par +\pard\nowidctlpar\li720\sb200\b C:\\MyWorkspace\\Nt32Pkg>build \endash a IA32\par +\pard\nowidctlpar\li360\sb200\b0 Build the active platform specified in the target.txt file.\par +\pard\nowidctlpar\li720\sb200\b C:\\ MyWorkspace>build \endash a Ia32\par +\pard\nowidctlpar\li360\sb200\b0\f1\par +\pard\nowidctlpar\li180\sb200\f0 Build Module: HelloWorld.inf\par +\pard\nowidctlpar\li360\sb200 Specify the platform and Module on the command line.\par +\pard\nowidctlpar\li720\sb200\b C:\\MyWorkspace>build -p Nt32Pkg\\Nt32Pkg.dsc \endash a IA32 \\\par +\pard\nowidctlpar\li720 \endash m MdeModulePkg/Application/HelloWorld/HelloWorld.inf\par +\pard\nowidctlpar\li360\sb200\b0 Specify the Module on the command line and use the active platform specified in the target.txt file.\par +\pard\nowidctlpar\li720\sb200\b C:\\MyWorkspace>build \endash a IA32 \\\par +\pard\nowidctlpar\li720\endash m MdeModulePkg/Application/HelloWorld/HelloWorld.inf\par +\pard\nowidctlpar\li360\sb200\b0 Build the module in the current working directory if it contains a module description file and specify the platform on the command line.\par +\pard\nowidctlpar\li720\sb200\b C:\\ MyWorkspace\\MdeModulePkg\\Application\\HelloWorld>build \endash a Ia32 \\\par +\pard\nowidctlpar\li720\endash p Nt32Pkg\\Nt32Pkg.dsc\par +\pard\nowidctlpar\li360\sb200\b0 Build the module in the current working directory and use the active platform specified in the target.txt file.\par +\pard\nowidctlpar\li720\sb200\b C:\\ MyWorkspace\\MdeModulePkg\\Application\\HelloWorld>build \endash a Ia32 \par +\pard\keep\keepn\nowidctlpar\s2\li-1440\sb400\sa60\sl-340\slmult0\tx360\tx1440\cf1\fs28 Bugs \par +\pard\nowidctlpar\li360\sb200\cf2\b0\fs18 No known bugs.\par +Report bugs to issues@buildtools.tianocore.org\par +\pard\keep\keepn\nowidctlpar\s2\li-1440\sb400\sa60\sl-340\slmult0\tx360\tx1440\cf1\b\fs28 Files \par +\pard\nowidctlpar\li360\sb200\cf2\b0\fs18 target.txt, tools_def.txt, platform.dsc, flashmap.fdf, package.dec and module.inf.\par +\pard\keep\keepn\nowidctlpar\s2\li-1440\sb400\sa60\sl-340\slmult0\tx360\tx1440\cf1\b\fs28 See also\par +\pard\nowidctlpar\li360\sb200\cf2\b0\fs18 GenFds.exe\par +\pard\keep\keepn\nowidctlpar\s2\li-1440\sb400\sa60\sl-340\slmult0\tx360\tx1440\cf1\b\fs28 License\par +\pard\nowidctlpar\li360\cf2\b0\fs18 Copyright (c) 1999-2010 Intel Corporation. All rights reserved.\par +\par +This program and the accompanying materials are licensed and made available under the terms and\par +conditions of the BSD License which accompanies this distribution. The full text of the license may be\par +found at:\par +http://opensource.org/licenses/bsd-license.php\par +\par +THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTIES\par +OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\par +} + \ No newline at end of file diff --git a/BaseTools/UserManuals/GenVtf_Utility_Man_Page.rtf b/BaseTools/UserManuals/GenVtf_Utility_Man_Page.rtf index e8c3a40047..68a5397ed6 100644 --- a/BaseTools/UserManuals/GenVtf_Utility_Man_Page.rtf +++ b/BaseTools/UserManuals/GenVtf_Utility_Man_Page.rtf @@ -1,101 +1,108 @@ -{\rtf1\adeflang1025\ansi\ansicpg936\uc2\adeff0\deff0\stshfdbch13\stshfloch0\stshfhich0\stshfbi0\deflang1033\deflangfe2052{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f13\fnil\fcharset134\fprq2{\*\panose 02010600030101010101}\'cb\'ce\'cc\'e5{\*\falt SimSun};} -{\f37\fswiss\fcharset0\fprq2{\*\panose 020b0604030504040204}Verdana;}{\f38\fnil\fcharset134\fprq2{\*\panose 02010600030101010101}@\'cb\'ce\'cc\'e5;}{\f39\froman\fcharset238\fprq2 Times New Roman CE;}{\f40\froman\fcharset204\fprq2 Times New Roman Cyr;} -{\f42\froman\fcharset161\fprq2 Times New Roman Greek;}{\f43\froman\fcharset162\fprq2 Times New Roman Tur;}{\f44\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f45\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} -{\f46\froman\fcharset186\fprq2 Times New Roman Baltic;}{\f47\froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f171\fnil\fcharset0\fprq2 SimSun Western{\*\falt SimSun};}{\f409\fswiss\fcharset238\fprq2 Verdana CE;} -{\f410\fswiss\fcharset204\fprq2 Verdana Cyr;}{\f412\fswiss\fcharset161\fprq2 Verdana Greek;}{\f413\fswiss\fcharset162\fprq2 Verdana Tur;}{\f416\fswiss\fcharset186\fprq2 Verdana Baltic;}{\f417\fswiss\fcharset163\fprq2 Verdana (Vietnamese);} -{\f421\fnil\fcharset0\fprq2 @\'cb\'ce\'cc\'e5 Western;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255; -\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;\red0\green127\blue127;}{\stylesheet{ -\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\f37\hich\af37\dbch\af13\cgrid\langnp1033\langfenp2052 \snext0 Normal;}{ -\s1\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\outlinelevel0\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\f37\hich\af37\dbch\af13\cgrid\langnp1033\langfenp2052 \sbasedon0 \snext0 heading 1;}{ -\s2\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\outlinelevel1\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\f37\hich\af37\dbch\af13\cgrid\langnp1033\langfenp2052 \sbasedon0 \snext0 heading 2;}{\*\cs10 -\additive \ssemihidden Default Paragraph Font;}{\* -\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\trcbpat1\trcfpat1\tblind0\tblindtype3\tscellwidthfts0\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv +{\rtf1\adeflang1025\ansi\ansicpg1252\uc2\adeff0\deff0\stshfdbch13\stshfloch0\stshfhich0\stshfbi0\deflang1033\deflangfe2052{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman{\*\falt Times};}{\f13\fnil\fcharset134\fprq2{\*\panose 02010600030101010101}\'cb\'ce\'cc\'e5{\*\falt SimSun};} +{\f39\fnil\fcharset134\fprq2{\*\panose 02010600030101010101}@\'cb\'ce\'cc\'e5;}{\f42\fswiss\fcharset0\fprq2{\*\panose 020b0604030504040204}Verdana{\*\falt Tahoma};}{\f155\froman\fcharset238\fprq2 Times New Roman CE{\*\falt Times};} +{\f156\froman\fcharset204\fprq2 Times New Roman Cyr{\*\falt Times};}{\f158\froman\fcharset161\fprq2 Times New Roman Greek{\*\falt Times};}{\f159\froman\fcharset162\fprq2 Times New Roman Tur{\*\falt Times};} +{\f160\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew){\*\falt Times};}{\f161\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic){\*\falt Times};}{\f162\froman\fcharset186\fprq2 Times New Roman Baltic{\*\falt Times};} +{\f163\froman\fcharset163\fprq2 Times New Roman (Vietnamese){\*\falt Times};}{\f287\fnil\fcharset0\fprq2 SimSun Western{\*\falt SimSun};}{\f547\fnil\fcharset0\fprq2 @\'cb\'ce\'cc\'e5 Western;}{\f575\fswiss\fcharset238\fprq2 Verdana CE{\*\falt Tahoma};} +{\f576\fswiss\fcharset204\fprq2 Verdana Cyr{\*\falt Tahoma};}{\f578\fswiss\fcharset161\fprq2 Verdana Greek{\*\falt Tahoma};}{\f579\fswiss\fcharset162\fprq2 Verdana Tur{\*\falt Tahoma};}{\f582\fswiss\fcharset186\fprq2 Verdana Baltic{\*\falt Tahoma};} +{\f583\fswiss\fcharset163\fprq2 Verdana (Vietnamese){\*\falt Tahoma};}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0; +\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;\red8\green96\blue168;\red0\green127\blue127;} +{\stylesheet{\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\f42\hich\af42\dbch\af13\cgrid\langnp1033\langfenp2052 \snext0 Normal;}{ +\s1\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\outlinelevel0\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\f42\hich\af42\dbch\af13\cgrid\langnp1033\langfenp2052 \sbasedon0 \snext0 heading 1;}{ +\s2\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\outlinelevel1\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\f42\hich\af42\dbch\af13\cgrid\langnp1033\langfenp2052 \sbasedon0 \snext0 heading 2;}{\*\cs10 +\additive \ssemihidden Default Paragraph Font;}{\*\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblind0\tblindtype3\tscellwidthfts0\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv \ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs20 \ltrch\fcs0 \fs20\lang1024\langfe1024\loch\f0\hich\af0\dbch\af13\cgrid\langnp1024\langfenp1024 \snext11 \ssemihidden Normal Table;}} -{\*\latentstyles\lsdstimax156\lsdlockeddef0}{\*\rsidtbl \rsid5839829}{\*\generator Microsoft Word 11.0.0000;}{\info{\operator jwang36}{\creatim\yr2008\mo12\dy31\hr15\min23}{\revtim\yr2008\mo12\dy31\hr15\min24}{\version2}{\edmins1}{\nofpages3} -{\nofwords455}{\nofchars2595}{\nofcharsws3044}{\vern24613}{\*\password 00000000}}{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}}\paperw12240\paperh15840\margl1800\margr1800\margt1440\margb1440\gutter0\ltrsect -\deftab360\ftnbj\aenddoc\donotembedsysfont0\donotembedlingdata1\grfdocevents0\validatexml0\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0\showxmlerrors0\horzdoc\dghspace120\dgvspace120\dghorigin1701\dgvorigin1984\dghshow0\dgvshow3 -\jcompress\viewkind4\viewscale100\rsidroot5839829 \fet0{\*\wgrffmtfilter 013f}\ilfomacatclnup0\ltrpar \sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta \dbch .}}{\*\pnseclvl2 -\pnucltr\pnstart1\pnindent720\pnhang {\pntxta \dbch .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta \dbch .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta \dbch )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb \dbch (} -{\pntxta \dbch )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb \dbch (}{\pntxta \dbch )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb \dbch (}{\pntxta \dbch )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb \dbch (} -{\pntxta \dbch )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb \dbch (}{\pntxta \dbch )}}\pard\plain \ltrpar\s2\ql \fi-1300\li-1440\ri0\sb400\sa60\sl-340\slmult0\keep\keepn\nowidctlpar -\tx1440\wrapdefault\faauto\outlinelevel1\rin0\lin-1440\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\af37\hich\af37\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \ab\af37\afs28 \ltrch\fcs0 -\b\fs28\cf17\insrsid5839829 \hich\af37\dbch\af13\loch\f37 Name -\par }\pard\plain \ltrpar\ql \li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\af37\hich\af37\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 -\fs18\cf1\insrsid5839829 \hich\af37\dbch\af13\loch\f37 GenVtf.exe - generate the Boot Strap File (AKA Volume Top File, or VTF) for IPF images -\par }\pard\plain \ltrpar\s2\ql \fi-1300\li-1440\ri0\sb400\sa60\sl-340\slmult0\keep\keepn\nowidctlpar\tx1440\wrapdefault\faauto\outlinelevel1\rin0\lin-1440\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 -\fs24\lang1033\langfe2052\loch\af37\hich\af37\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \ab\af37\afs28 \ltrch\fcs0 \b\fs28\cf17\lang1036\langfe2052\langnp1036\insrsid5839829 \hich\af37\dbch\af13\loch\f37 Synopsis -\par }\pard\plain \ltrpar\ql \li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\af37\hich\af37\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \ab\af37\afs18 -\ltrch\fcs0 \b\fs18\cf1\insrsid5839829 \hich\af37\dbch\af13\loch\f37 GenVtf.exe [options]}{\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\lang1036\langfe2052\langnp1036\insrsid5839829 -\par }\pard\plain \ltrpar\s2\ql \fi-1300\li-1440\ri0\sb400\sa60\sl-340\slmult0\keep\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel1\rin0\lin-1440\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 -\fs24\lang1033\langfe2052\loch\af37\hich\af37\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \ab\af37\afs28 \ltrch\fcs0 \b\fs28\cf17\insrsid5839829 \hich\af37\dbch\af13\loch\f37 Description -\par }\pard\plain \ltrpar\ql \li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\af37\hich\af37\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 -\fs18\cf1\insrsid5839829 \hich\af37\dbch\af13\loch\f37 +{\*\latentstyles\lsdstimax156\lsdlockeddef0}{\*\rsidtbl \rsid4810562\rsid4946234\rsid5839829\rsid15806093}{\*\generator Microsoft Word 11.0.0000;}{\info{\operator lgao4}{\creatim\yr2008\mo12\dy31\hr15\min23}{\revtim\yr2010\mo2\dy12\hr10\min54}{\version5} +{\edmins3}{\nofpages3}{\nofwords456}{\nofchars2600}{\nofcharsws3050}{\vern24615}{\*\password 00000000}}{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}} +\paperw12240\paperh15840\margl1800\margr1800\margt1440\margb1440\gutter0\ltrsect +\deftab360\widowctrl\ftnbj\aenddoc\donotembedsysfont0\donotembedlingdata1\grfdocevents0\validatexml0\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0\showxmlerrors0\horzdoc\dghspace120\dgvspace120\dghorigin1701\dgvorigin1984\dghshow0\dgvshow3 +\jcompress\viewkind4\viewscale100\rsidroot5839829 \fet0{\*\wgrffmtfilter 013f}\ilfomacatclnup0\ltrpar \sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta \hich .}}{\*\pnseclvl2 +\pnucltr\pnstart1\pnindent720\pnhang {\pntxta \hich .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta \hich .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta \hich )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb \hich (} +{\pntxta \hich )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb \hich (}{\pntxta \hich )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb \hich (}{\pntxta \hich )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb \hich (} +{\pntxta \hich )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb \hich (}{\pntxta \hich )}}\pard\plain \ltrpar\s2\ql \li-1440\ri0\sb400\sa60\sl-340\slmult0 +\keep\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel1\rin0\lin-1440\itap0\pararsid4810562 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\af42\hich\af42\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \ab\af42\afs28 +\ltrch\fcs0 \b\fs28\cf17\insrsid5839829\charrsid4810562 \hich\af42\dbch\af13\loch\f42 Name +\par }\pard\plain \ltrpar\ql \li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\af42\hich\af42\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af42\afs18 \ltrch\fcs0 +\fs18\cf1\insrsid5839829 \hich\af42\dbch\af13\loch\f42 GenVtf.exe - generate the Boot Strap File (AKA Volume Top File, or VTF) for IPF images +\par }\pard\plain \ltrpar\s2\ql \li-1440\ri0\sb400\sa60\sl-340\slmult0\keep\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel1\rin0\lin-1440\itap0\pararsid4810562 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 +\fs24\lang1033\langfe2052\loch\af42\hich\af42\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \ab\af42\afs28 \ltrch\fcs0 \b\fs28\cf17\insrsid5839829\charrsid4810562 \hich\af42\dbch\af13\loch\f42 Synopsis +\par }\pard\plain \ltrpar\ql \li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\af42\hich\af42\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \ab\af42\afs18 +\ltrch\fcs0 \b\fs18\cf1\insrsid5839829 \hich\af42\dbch\af13\loch\f42 GenVtf.exe [options]}{\rtlch\fcs1 \af42\afs18 \ltrch\fcs0 \fs18\cf1\lang1036\langfe2052\langnp1036\insrsid5839829 +\par }\pard\plain \ltrpar\s2\ql \li-1440\ri0\sb400\sa60\sl-340\slmult0\keep\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel1\rin0\lin-1440\itap0\pararsid4810562 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 +\fs24\lang1033\langfe2052\loch\af42\hich\af42\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \ab\af42\afs28 \ltrch\fcs0 \b\fs28\cf17\insrsid5839829\charrsid4810562 \hich\af42\dbch\af13\loch\f42 Description +\par }\pard\plain \ltrpar\ql \li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\af42\hich\af42\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af42\afs18 \ltrch\fcs0 +\fs18\cf1\insrsid5839829 \hich\af42\dbch\af13\loch\f42 GenVtf is used to generate the Boot Strap File (AKA Volume Top File, or VTF) for IPF images. This utility will parse the input BSF inf file and get the component information. If all the components which are required to put into a single VTF file, then onl -\hich\af37\dbch\af13\loch\f37 y\hich\af37\dbch\af13\loch\f37 one VTF Base Address and Size will be needed and only one raw data output file and one symbol output file which is the symbol of raw data. If there\hich\f37 \rquote \loch\f37 -s component which is required to put into the second VTF file but there\hich\f37 \rquote \loch\f37 s no second VTF Base Address and S\hich\af37\dbch\af13\loch\f37 i\hich\af37\dbch\af13\loch\f37 -ze specified in command line interface, then this utility will exit with related error message; if there\hich\f37 \rquote \loch\f37 s second VTF Base Address and Size specified, then there are two raw data output files and one symbol output file. -\par }\pard\plain \ltrpar\s2\ql \fi-1300\li-1440\ri0\sb400\sa60\sl-340\slmult0\keep\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel1\rin0\lin-1440\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 -\fs24\lang1033\langfe2052\loch\af37\hich\af37\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \ab\af37\afs28 \ltrch\fcs0 \b\fs28\cf17\insrsid5839829 \hich\af37\dbch\af13\loch\f37 Options -\par }\pard\plain \ltrpar\ql \li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\af37\hich\af37\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \ab\af37\afs18 -\ltrch\fcs0 \b\fs18\cf1\insrsid5839829 \hich\af37\dbch\af13\loch\f37 -f, --filename BS_INFFile -\par }{\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid5839829 \hich\af37\dbch\af13\loch\f37 \hich\af37\dbch\af13\loch\f37 Name of the BS Image INF file to use -\par }{\rtlch\fcs1 \ab\af37\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid5839829 \hich\af37\dbch\af13\loch\f37 -r, --baseaddr hexaddress -\par }{\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid5839829 \hich\af37\dbch\af13\loch\f37 The Base Address is the starting address of the Firmware Volume where the Boot Strapped Image will reside -\par }{\rtlch\fcs1 \ab\af37\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid5839829 \hich\af37\dbch\af13\loch\f37 -s, --size Size -\par }{\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid5839829 \hich\af37\dbch\af13\loch\f37 The size of the Firmware Volume -\par }{\rtlch\fcs1 \ab\af37\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid5839829 \hich\af37\dbch\af13\loch\f37 -o, --output Filename -\par }{\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid5839829 \hich\af37\dbch\af13\loch\f37 VTF Filename that will be created -\par }{\rtlch\fcs1 \ab\af37\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid5839829 \hich\af37\dbch\af13\loch\f37 --version -\par }{\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid5839829 \tab \hich\af37\dbch\af13\loch\f37 Print version and copyright of this program and exit -\par }{\rtlch\fcs1 \ab\af37\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid5839829 \hich\af37\dbch\af13\loch\f37 -v, --verbose -\par }\pard \ltrpar\ql \li360\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin360\itap0 {\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid5839829 \hich\af37\dbch\af13\loch\f37 -Turn on verbose output with informational messages printed. This is a count value, so specifying \hich\f37 \endash \loch\f37 vv can be used to increase the verbosity\hich\af37\dbch\af13\loch\f37 level. -\par }\pard \ltrpar\ql \li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \ab\af37\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid5839829 \hich\af37\dbch\af13\loch\f37 -q, --quiet -\par }{\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid5839829 \tab \hich\af37\dbch\af13\loch\f37 Disable all messages except FATAL ERRORS -\par }{\rtlch\fcs1 \ab\af37\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid5839829 \hich\af37\dbch\af13\loch\f37 -d, --debug [#] -\par }{\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid5839829 \tab \hich\af37\dbch\af13\loch\f37 Enable debug messages, at level # -\par }{\rtlch\fcs1 \ab\af37\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid5839829 \hich\af37\dbch\af13\loch\f37 -h, --help -\par }{\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid5839829 \tab \hich\af37\dbch\af13\loch\f37 Print copyright, version and usage of this program and exit -\par }\pard\plain \ltrpar\s2\ql \fi-1300\li-1440\ri0\sb400\sa60\sl-340\slmult0\keep\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel1\rin0\lin-1440\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 -\fs24\lang1033\langfe2052\loch\af37\hich\af37\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \ab\af37\afs28 \ltrch\fcs0 \b\fs28\cf17\insrsid5839829 \hich\af37\dbch\af13\loch\f37 Example -\par }\pard\plain \ltrpar\ql \li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\af37\hich\af37\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 -\fs18\cf1\insrsid5839829 \hich\af37\dbch\af13\loch\f37 \hich\f37 Generate one VTF file with inf file name, base address and size specified in command line and without output filename specified. So default filename \'93\loch\f37 \hich\f37 VTF1.RAW\'94 -\loch\f37 will be used. -\par }{\rtlch\fcs1 \ab\af37\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid5839829 \hich\af37\dbch\af13\loch\f37 GenVtf \hich\f37 \endash \loch\f37 f bsf.inf \hich\f37 \endash \loch\f37 r 0xFFE00000 \hich\f37 \endash \loch\f37 s 0x200000 -\par }{\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid5839829 \hich\af37\dbch\af13\loch\f37 Generate two VTF files with inf file n\hich\af37\dbch\af13\loch\f37 \hich\f37 -ame, base address and size specified in command line and without output filename specified. So default filename \'93\loch\f37 \hich\f37 VTF1.RAW\'94\loch\f37 \hich\f37 and \'93\loch\f37 \hich\f37 VTF2.RAW\'94\loch\f37 will be used. -\par }{\rtlch\fcs1 \ab\af37\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid5839829 \hich\af37\dbch\af13\loch\f37 GenVtf \hich\f37 \endash \loch\f37 f bsf.inf \hich\f37 \endash \loch\f37 r 0xFFE00000 \hich\f37 \endash \loch\f37 s 0x200000 \hich\f37 \endash \loch\f37 -r 0xFFD00000 \hich\f37 \endash \loch\f37 s 0x100000 -\par }{\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid5839829 \hich\af37\dbch\af13\loch\f37 Generate one VTF file with inf file\hich\af37\dbch\af13\loch\f37 name, base address and size specified in command line and output filename specified. -\par }{\rtlch\fcs1 \ab\af37\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid5839829 \hich\af37\dbch\af13\loch\f37 GenVtf \hich\f37 \endash \loch\f37 o file.tmp \hich\f37 \endash \loch\f37 f bsf.inf \hich\f37 \endash \loch\f37 r 0xFFE00000 \hich\f37 \endash \loch\f37 +\hich\af42\dbch\af13\loch\f42 y\hich\af42\dbch\af13\loch\f42 one VTF Base Address and Size will be needed and only one raw data output file and one symbol output file which is the symbol of raw data. If there\hich\f42 \rquote \loch\f42 +s component which is required to put into the second VTF file but there\hich\f42 \rquote \loch\f42 s no second VTF Base Address and S\hich\af42\dbch\af13\loch\f42 i\hich\af42\dbch\af13\loch\f42 +ze specified in command line interface, then this utility will exit with related error message; if there\hich\f42 \rquote \loch\f42 s second VTF Base Address and Size specified, then there are two raw data output files and one symbol output file. +\par }\pard\plain \ltrpar\s2\ql \li-1440\ri0\sb400\sa60\sl-340\slmult0\keep\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel1\rin0\lin-1440\itap0\pararsid4810562 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 +\fs24\lang1033\langfe2052\loch\af42\hich\af42\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \ab\af42\afs28 \ltrch\fcs0 \b\fs28\cf17\insrsid5839829\charrsid4810562 \hich\af42\dbch\af13\loch\f42 Options}{\rtlch\fcs1 \ab\af42\afs28 \ltrch\fcs0 +\b\fs28\cf18\insrsid5839829 +\par }\pard\plain \ltrpar\ql \li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\af42\hich\af42\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \ab\af42\afs18 +\ltrch\fcs0 \b\fs18\cf1\insrsid5839829 \hich\af42\dbch\af13\loch\f42 -f, --filename BS_INFFile +\par }{\rtlch\fcs1 \af42\afs18 \ltrch\fcs0 \fs18\cf1\insrsid5839829 \hich\af42\dbch\af13\loch\f42 \hich\af42\dbch\af13\loch\f42 Name of the BS Image INF file to use +\par }{\rtlch\fcs1 \ab\af42\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid5839829 \hich\af42\dbch\af13\loch\f42 -r, --baseaddr hexaddress +\par }{\rtlch\fcs1 \af42\afs18 \ltrch\fcs0 \fs18\cf1\insrsid5839829 \hich\af42\dbch\af13\loch\f42 The Base Address is the starting address of the Firmware Volume where the Boot Strapped Image will reside +\par }{\rtlch\fcs1 \ab\af42\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid5839829 \hich\af42\dbch\af13\loch\f42 -s, --size Size +\par }{\rtlch\fcs1 \af42\afs18 \ltrch\fcs0 \fs18\cf1\insrsid5839829 \hich\af42\dbch\af13\loch\f42 The size of the Firmware Volume +\par }{\rtlch\fcs1 \ab\af42\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid5839829 \hich\af42\dbch\af13\loch\f42 -o, --output Filename +\par }{\rtlch\fcs1 \af42\afs18 \ltrch\fcs0 \fs18\cf1\insrsid5839829 \hich\af42\dbch\af13\loch\f42 VTF Filename that will be created +\par }{\rtlch\fcs1 \ab\af42\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid5839829 \hich\af42\dbch\af13\loch\f42 --version +\par }{\rtlch\fcs1 \af42\afs18 \ltrch\fcs0 \fs18\cf1\insrsid5839829 \tab \hich\af42\dbch\af13\loch\f42 Print version and copyright of this program and exit +\par }{\rtlch\fcs1 \ab\af42\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid5839829 \hich\af42\dbch\af13\loch\f42 -v, --verbose +\par }\pard \ltrpar\ql \li360\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin360\itap0 {\rtlch\fcs1 \af42\afs18 \ltrch\fcs0 \fs18\cf1\insrsid5839829 \hich\af42\dbch\af13\loch\f42 +Turn on verbose output with informational messages printed. This is a count value, so specifying \hich\f42 \endash \loch\f42 vv can be used to increase the verbosity\hich\af42\dbch\af13\loch\f42 level. +\par }\pard \ltrpar\ql \li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \ab\af42\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid5839829 \hich\af42\dbch\af13\loch\f42 -q, --quiet +\par }{\rtlch\fcs1 \af42\afs18 \ltrch\fcs0 \fs18\cf1\insrsid5839829 \tab \hich\af42\dbch\af13\loch\f42 Disable all messages except FATAL ERRORS +\par }{\rtlch\fcs1 \ab\af42\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid5839829 \hich\af42\dbch\af13\loch\f42 -d, --debug [#] +\par }{\rtlch\fcs1 \af42\afs18 \ltrch\fcs0 \fs18\cf1\insrsid5839829 \tab \hich\af42\dbch\af13\loch\f42 Enable debug messages, at level # +\par }{\rtlch\fcs1 \ab\af42\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid5839829 \hich\af42\dbch\af13\loch\f42 -h, --help +\par }{\rtlch\fcs1 \af42\afs18 \ltrch\fcs0 \fs18\cf1\insrsid5839829 \tab \hich\af42\dbch\af13\loch\f42 Print copyright, version and usage of this program and exit +\par }\pard\plain \ltrpar\s2\ql \li-1440\ri0\sb400\sa60\sl-340\slmult0\keep\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel1\rin0\lin-1440\itap0\pararsid4810562 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 +\fs24\lang1033\langfe2052\loch\af42\hich\af42\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \ab\af42\afs28 \ltrch\fcs0 \b\fs28\cf17\insrsid5839829\charrsid4810562 \hich\af42\dbch\af13\loch\f42 Example}{\rtlch\fcs1 \ab\af42\afs28 \ltrch\fcs0 +\b\fs28\cf18\insrsid5839829 +\par }\pard\plain \ltrpar\ql \li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\af42\hich\af42\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af42\afs18 \ltrch\fcs0 +\fs18\cf1\insrsid5839829 \hich\af42\dbch\af13\loch\f42 \hich\f42 Generate one VTF file with inf file name, base address and size specified in command line and without output filename specified. So default filename \'93\loch\f42 \hich\f42 VTF1.RAW\'94 +\loch\f42 will be used. +\par }{\rtlch\fcs1 \ab\af42\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid5839829 \hich\af42\dbch\af13\loch\f42 GenVtf \hich\f42 \endash \loch\f42 f bsf.inf \hich\f42 \endash \loch\f42 r 0xFFE00000 \hich\f42 \endash \loch\f42 s 0x200000 +\par }{\rtlch\fcs1 \af42\afs18 \ltrch\fcs0 \fs18\cf1\insrsid5839829 \hich\af42\dbch\af13\loch\f42 Generate two VTF files with inf file n\hich\af42\dbch\af13\loch\f42 \hich\f42 +ame, base address and size specified in command line and without output filename specified. So default filename \'93\loch\f42 \hich\f42 VTF1.RAW\'94\loch\f42 \hich\f42 and \'93\loch\f42 \hich\f42 VTF2.RAW\'94\loch\f42 will be used. +\par }{\rtlch\fcs1 \ab\af42\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid5839829 \hich\af42\dbch\af13\loch\f42 GenVtf \hich\f42 \endash \loch\f42 f bsf.inf \hich\f42 \endash \loch\f42 r 0xFFE00000 \hich\f42 \endash \loch\f42 s 0x200000 \hich\f42 \endash \loch\f42 +r 0xFFD00000 \hich\f42 \endash \loch\f42 s 0x100000 +\par }{\rtlch\fcs1 \af42\afs18 \ltrch\fcs0 \fs18\cf1\insrsid5839829 \hich\af42\dbch\af13\loch\f42 Generate one VTF file with inf file\hich\af42\dbch\af13\loch\f42 name, base address and size specified in command line and output filename specified. +\par }{\rtlch\fcs1 \ab\af42\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid5839829 \hich\af42\dbch\af13\loch\f42 GenVtf \hich\f42 \endash \loch\f42 o file.tmp \hich\f42 \endash \loch\f42 f bsf.inf \hich\f42 \endash \loch\f42 r 0xFFE00000 \hich\f42 \endash \loch\f42 s 0x200000 -\par }{\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid5839829 \hich\af37\dbch\af13\loch\f37 Generate two VTF files with inf file name, base address and size specified in command line and output filename spe\hich\af37\dbch\af13\loch\f37 cified. -\par }{\rtlch\fcs1 \ab\af37\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid5839829 \hich\af37\dbch\af13\loch\f37 GenVtf \hich\f37 \endash \loch\f37 o file1.tmp \hich\f37 \endash \loch\f37 o file2.tmp \hich\f37 \endash \loch\f37 f bsf.inf \hich\f37 \endash \loch\f37 -r 0xFFE00000 \hich\f37 \endash \loch\f37 s 0x200000 \hich\f37 \endash \loch\f37 r 0xFFD00000 \hich\f37 \endash \loch\f37 s 0x100000 -\par }\pard\plain \ltrpar\s2\ql \fi-1300\li-1440\ri0\sb400\sa60\sl-340\slmult0\keep\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel1\rin0\lin-1440\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 -\fs24\lang1033\langfe2052\loch\af37\hich\af37\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \ab\af37\afs28 \ltrch\fcs0 \b\fs28\cf17\insrsid5839829 \hich\af37\dbch\af13\loch\f37 Bugs -\par }\pard\plain \ltrpar\ql \li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\af37\hich\af37\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 -\fs18\cf1\insrsid5839829 \hich\af37\dbch\af13\loch\f37 No known bugs. -\par \hich\af37\dbch\af13\loch\f37 Report bugs to issues@buildtools.tianocore.org -\par }\pard\plain \ltrpar\s2\ql \fi-1300\li-1440\ri0\sb400\sa60\sl-340\slmult0\keep\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel1\rin0\lin-1440\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 -\fs24\lang1033\langfe2052\loch\af37\hich\af37\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \ab\af37\afs28 \ltrch\fcs0 \b\fs28\cf17\insrsid5839829 \hich\af37\dbch\af13\loch\f37 Files -\par }\pard\plain \ltrpar\ql \li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\af37\hich\af37\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 -\fs18\cf1\insrsid5839829 \hich\af37\dbch\af13\loch\f37 None -\par }\pard\plain \ltrpar\s2\ql \fi-1300\li-1440\ri0\sb400\sa60\sl-340\slmult0\keep\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel1\rin0\lin-1440\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 -\fs24\lang1033\langfe2052\loch\af37\hich\af37\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \ab\af37\afs28 \ltrch\fcs0 \b\fs28\cf17\insrsid5839829 \hich\af37\dbch\af13\loch\f37 See also -\par }\pard\plain \ltrpar\ql \li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\af37\hich\af37\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 -\fs18\cf1\insrsid5839829 \hich\af37\dbch\af13\loch\f37 None -\par }\pard\plain \ltrpar\s2\ql \fi-1300\li-1440\ri0\sb400\sa60\sl-340\slmult0\keep\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel1\rin0\lin-1440\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 -\fs24\lang1033\langfe2052\loch\af37\hich\af37\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \ab\af37\afs28 \ltrch\fcs0 \b\fs28\cf17\insrsid5839829 \hich\af37\dbch\af13\loch\f37 License -\par }\pard\plain \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\af37\hich\af37\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 -\fs18\cf1\insrsid5839829 \hich\af37\dbch\af13\loch\f37 Copyright (c) 1999-200}{\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid5839829 \hich\af37\dbch\af13\loch\f37 9}{\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid5839829 -\hich\af37\dbch\af13\loch\f37 Intel Corporation. All right\hich\af37\dbch\af13\loch\f37 s reserved -\par \hich\af37\dbch\af13\loch\f37 This program and the accompanying materials are licensed and made available -\par \hich\af37\dbch\af13\loch\f37 under the terms and conditions of the BSD License which accompanies this -\par \hich\af37\dbch\af13\loch\f37 distribution. The full text of the license may be found at -\par \hich\af37\dbch\af13\loch\f37 http://opensource.org/licenses/bsd\hich\af37\dbch\af13\loch\f37 -license.php -\par -\par \hich\af37\dbch\af13\loch\f37 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -\par \hich\af37\dbch\af13\loch\f37 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. -\par }\pard \ltrpar\ql \li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af37\afs18 \ltrch\fcs0 \fs18\cf1\insrsid5839829 +\par }{\rtlch\fcs1 \af42\afs18 \ltrch\fcs0 \fs18\cf1\insrsid5839829 \hich\af42\dbch\af13\loch\f42 Generate two VTF files with inf file name, base address and size specified in command line and output filename spe\hich\af42\dbch\af13\loch\f42 cified. +\par }{\rtlch\fcs1 \ab\af42\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid5839829 \hich\af42\dbch\af13\loch\f42 GenVtf \hich\f42 \endash \loch\f42 o file1.tmp \hich\f42 \endash \loch\f42 o file2.tmp \hich\f42 \endash \loch\f42 f bsf.inf \hich\f42 \endash \loch\f42 +r 0xFFE00000 \hich\f42 \endash \loch\f42 s 0x200000 \hich\f42 \endash \loch\f42 r 0xFFD00000 \hich\f42 \endash \loch\f42 s 0x100000 +\par }\pard\plain \ltrpar\s2\ql \li-1440\ri0\sb400\sa60\sl-340\slmult0\keep\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel1\rin0\lin-1440\itap0\pararsid4810562 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 +\fs24\lang1033\langfe2052\loch\af42\hich\af42\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \ab\af42\afs28 \ltrch\fcs0 \b\fs28\cf17\insrsid5839829\charrsid4810562 \hich\af42\dbch\af13\loch\f42 Bugs}{\rtlch\fcs1 \ab\af42\afs28 \ltrch\fcs0 +\b\fs28\cf18\insrsid5839829 +\par }\pard\plain \ltrpar\ql \li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\af42\hich\af42\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af42\afs18 \ltrch\fcs0 +\fs18\cf1\insrsid5839829 \hich\af42\dbch\af13\loch\f42 No known bugs. +\par \hich\af42\dbch\af13\loch\f42 Report bugs to issues@buildtools.tianocore.org +\par }\pard\plain \ltrpar\s2\ql \li-1440\ri0\sb400\sa60\sl-340\slmult0\keep\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel1\rin0\lin-1440\itap0\pararsid4810562 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 +\fs24\lang1033\langfe2052\loch\af42\hich\af42\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \ab\af42\afs28 \ltrch\fcs0 \b\fs28\cf17\insrsid5839829\charrsid4810562 \hich\af42\dbch\af13\loch\f42 Files}{\rtlch\fcs1 \ab\af42\afs28 \ltrch\fcs0 +\b\fs28\cf18\insrsid5839829 +\par }\pard\plain \ltrpar\ql \li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\af42\hich\af42\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af42\afs18 \ltrch\fcs0 +\fs18\cf1\insrsid5839829 \hich\af42\dbch\af13\loch\f42 None +\par }\pard\plain \ltrpar\s2\ql \li-1440\ri0\sb400\sa60\sl-340\slmult0\keep\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel1\rin0\lin-1440\itap0\pararsid4810562 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 +\fs24\lang1033\langfe2052\loch\af42\hich\af42\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \ab\af42\afs28 \ltrch\fcs0 \b\fs28\cf17\insrsid5839829\charrsid4810562 \hich\af42\dbch\af13\loch\f42 See}{\rtlch\fcs1 \ab\af42\afs28 \ltrch\fcs0 +\b\fs28\cf18\insrsid5839829 \hich\af42\dbch\af13\loch\f42 }{\rtlch\fcs1 \ab\af42\afs28 \ltrch\fcs0 \b\fs28\cf17\insrsid5839829\charrsid15806093 \hich\af42\dbch\af13\loch\f42 also}{\rtlch\fcs1 \ab\af42\afs28 \ltrch\fcs0 \b\fs28\cf18\insrsid5839829 +\par }\pard\plain \ltrpar\ql \li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\af42\hich\af42\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af42\afs18 \ltrch\fcs0 +\fs18\cf1\insrsid5839829 \hich\af42\dbch\af13\loch\f42 None +\par }\pard\plain \ltrpar\s2\ql \li-1440\ri0\sb400\sa60\sl-340\slmult0\keep\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel1\rin0\lin-1440\itap0\pararsid4810562 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 +\fs24\lang1033\langfe2052\loch\af42\hich\af42\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \ab\af42\afs28 \ltrch\fcs0 \b\fs28\cf17\insrsid5839829\charrsid4810562 \hich\af42\dbch\af13\loch\f42 License}{\rtlch\fcs1 \ab\af42\afs28 \ltrch\fcs0 +\b\fs28\cf18\insrsid5839829 +\par }\pard\plain \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid4946234 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\af42\hich\af42\dbch\af13\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af42\afs18 +\ltrch\fcs0 \fs18\cf1\insrsid4946234 \hich\af42\dbch\af13\loch\f42 Copyright (c) }{\rtlch\fcs1 \af42\afs18 \ltrch\fcs0 \fs18\cf1\insrsid4946234 \hich\af42\dbch\af13\loch\f42 1999}{\rtlch\fcs1 \af42\afs18 \ltrch\fcs0 \fs18\cf1\insrsid4946234 +\hich\af42\dbch\af13\loch\f42 - 2009, Intel Corporation<\hich\af42\dbch\af13\loch\f42 BR> +\par \hich\af42\dbch\af13\loch\f42 All rights reserved. This program and the accompanying materials +\par \hich\af42\dbch\af13\loch\f42 are licensed and made available under the terms and conditions of the BSD License +\par \hich\af42\dbch\af13\loch\f42 which accompanies this distribution. The full text of the license may be found at +\par \hich\af42\dbch\af13\loch\f42 http://opensource.org/\hich\af42\dbch\af13\loch\f42 licenses/bsd-license.php}{\rtlch\fcs1 \af42\afs18 \ltrch\fcs0 \fs18\cf1\insrsid4946234 \tab +\par }{\rtlch\fcs1 \af42\afs18 \ltrch\fcs0 \fs18\cf1\insrsid4946234 +\par \hich\af42\dbch\af13\loch\f42 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +\par \hich\af42\dbch\af13\loch\f42 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +\par }\pard \ltrpar\ql \li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af42\afs18 \ltrch\fcs0 \fs18\cf1\insrsid5839829 \par }} \ No newline at end of file diff --git a/BaseTools/gcc/mingw-gcc-build.py b/BaseTools/gcc/mingw-gcc-build.py index 0edec75bc4..f01bedc7bc 100755 --- a/BaseTools/gcc/mingw-gcc-build.py +++ b/BaseTools/gcc/mingw-gcc-build.py @@ -1,10 +1,21 @@ #!/usr/bin/env python +## @file # # Automation of instructions from: # http://mingw-w64.svn.sourceforge.net/viewvc/mingw-w64/trunk/mingw-w64-doc/ # howto-build/mingw-w64-howto-build.txt?revision=216&view=markup # +# Copyright (c) 2008 - 2010, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# + from optparse import OptionParser import os @@ -31,7 +42,7 @@ if sys.version_info < (2, 5): # VersionNumber = "0.01" __version__ = "%prog Version " + VersionNumber -__copyright__ = "Copyright (c) 2008, Intel Corporation. All rights reserved." +__copyright__ = "Copyright (c) 2008 - 2010, Intel Corporation. All rights reserved." class Config: """class Config @@ -81,6 +92,18 @@ class Config: default = os.path.join(self.base_dir, 'install'), help = "Prefix to install binutils/gcc into" ) + Parser.add_option( + "--skip-binutils", + action = "store_true", dest = "skip_binutils", + default = False, + help = "Will skip building binutils" + ) + Parser.add_option( + "--skip-gcc", + action = "store_true", dest = "skip_gcc", + default = False, + help = "Will skip building GCC" + ) Parser.add_option( "--symlinks", action = "store", type = "string", dest = "symlinks", @@ -116,13 +139,25 @@ class Config: self.symlinks = os.path.realpath(os.path.expanduser(self.options.symlinks)) def IsConfigOk(self): - + + building = [] + if not self.options.skip_binutils: + building.append('binutils') + if not self.options.skip_gcc: + building.append('gcc') + if len(building) == 0: + print "Nothing will be built!" + print + print "Please try using --help and then change the configuration." + return False + print "Current directory:" print " ", self.base_dir print "Sources download/extraction:", self.Relative(self.src_dir) print "Build directory :", self.Relative(self.build_dir) print "Prefix (install) directory :", self.Relative(self.prefix) print "Create symlinks directory :", self.Relative(self.symlinks) + print "Building :", ', '.join(building) print answer = raw_input("Is this configuration ok? (default = no): ") if (answer.lower() not in ('y', 'yes')): @@ -164,12 +199,19 @@ class SourceFiles: self.config = config self.source_files = self.source_files[config.arch] + if config.options.skip_binutils: + del self.source_files['binutils'] + + if config.options.skip_gcc: + del self.source_files['gcc'] + del self.source_files['mingw_hdr'] + source_files_common = { 'binutils': { 'url': 'http://www.kernel.org/pub/linux/devel/binutils/' + \ 'binutils-$version.tar.bz2', - 'version': '2.18.50.0.5', - 'md5': 'daee18dbbf0a6ccfc186141bee18bf62', + 'version': '2.20.51.0.5', + 'md5': '6d2de7cdf7a8389e70b124e3d73b4d37', }, } @@ -183,10 +225,10 @@ class SourceFiles: 'mingw_hdr': { 'url': 'http://sourceforge.net/projects/' + \ 'mingw-w64/files/mingw-w64/mingw-w64-snapshot/' + \ - 'mingw-w64-snapshot-$version.tar.bz2/download', + 'mingw-w64-trunk-snapshot-$version.tar.bz2/download', 'extract-dir': os.path.join('trunk', 'mingw-w64-headers'), - 'version': '20090419', - 'md5': '9146ecfabaf172e4cc427b88e8d218c1', + 'version': '20091222', + 'md5': 'fbcf282d1a05df121088d775e02095d6', }, } @@ -261,7 +303,7 @@ class SourceFiles: self.dots = 0 local_file = os.path.join(self.config.src_dir, fdata['filename']) url = fdata['url'] - print 'Downloading %s:' % fname, + print 'Downloading %s:' % fname, url if retries > 0: print '(retry)', sys.stdout.flush() @@ -312,8 +354,8 @@ class SourceFiles: print '[KeyboardInterrupt]' return False - except: - pass + except Exception, e: + print e if not completed: return False @@ -394,10 +436,12 @@ class Builder: self.config = config def Build(self): - self.BuildModule('binutils') - self.CopyIncludeDirectory() - self.BuildModule('gcc') - self.MakeSymLinks() + if not self.config.options.skip_binutils: + self.BuildModule('binutils') + if not self.config.options.skip_gcc: + self.CopyIncludeDirectory() + self.BuildModule('gcc') + self.MakeSymLinks() def IsBuildStepComplete(self, step): return \ -- 2.39.2