]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/GenFds/FdfParser.py
BaseTools: replace 'UINT8','UINT16','UINT32','UINT64','VOID*' with shared constants.
[mirror_edk2.git] / BaseTools / Source / Python / GenFds / FdfParser.py
index 00e03446421d1953725f9f5c6dc0f2cad2cf03c5..6baf875833a8ce4858f8876ce9861ff68963f18a 100644 (file)
@@ -52,6 +52,7 @@ from Common.String import NormPath
 import Common.GlobalData as GlobalData\r
 from Common.Expression import *\r
 from Common import GlobalData\r
+from Common.DataType import *\r
 from Common.String import ReplaceMacro\r
 import uuid\r
 from Common.Misc import tdict\r
@@ -61,7 +62,6 @@ from Common.LongFilePathSupport import OpenLongFilePath as open
 from Capsule import EFI_CERT_TYPE_PKCS7_GUID\r
 from Capsule import EFI_CERT_TYPE_RSA2048_SHA256_GUID\r
 from Common.RangeExpression import RangeExpression\r
-from Common.FdfParserLite import FileExtensionPattern,TokenFindPattern\r
 \r
 ##define T_CHAR_SPACE                ' '\r
 ##define T_CHAR_NULL                 '\0'\r
@@ -86,6 +86,8 @@ RegionSizeGuidPattern = re.compile("\s*(?P<base>\w+\.\w+)\s*\|\s*(?P<size>\w+\.\
 RegionOffsetPcdPattern = re.compile("\s*(?P<base>\w+\.\w+)\s*$")\r
 ShortcutPcdPattern = re.compile("\s*\w+\s*=\s*(?P<value>(?:0x|0X)?[a-fA-F0-9]+)\s*\|\s*(?P<name>\w+\.\w+)\s*")\r
 BaseAddrValuePattern = re.compile('^0[xX][0-9a-fA-F]+')\r
+FileExtensionPattern = re.compile(r'([a-zA-Z][a-zA-Z0-9]*)')\r
+TokenFindPattern = re.compile(r'([a-zA-Z0-9\-]+|\$\(TARGET\)|\*)_([a-zA-Z0-9\-]+|\$\(TOOL_CHAIN_TAG\)|\*)_([a-zA-Z0-9\-]+|\$\(ARCH\)|\*)')\r
 \r
 AllIncludeFileList = []\r
 \r
@@ -510,8 +512,8 @@ class FdfParser:
         if Item == '' or Item == 'RULE':\r
             return\r
 \r
-        if Item == 'DEFINES':\r
-            self.__CurSection = ['COMMON', 'COMMON', 'COMMON']\r
+        if Item == TAB_COMMON_DEFINES.upper():\r
+            self.__CurSection = [TAB_COMMON, TAB_COMMON, TAB_COMMON]\r
         elif Item == 'VTF' and len(ItemList) == 3:\r
             UiName = ItemList[2]\r
             Pos = UiName.find(',')\r
@@ -519,9 +521,9 @@ class FdfParser:
                 UiName = UiName[:Pos]\r
             self.__CurSection = ['VTF', UiName, ItemList[1]]\r
         elif len(ItemList) > 1:\r
-            self.__CurSection = [ItemList[0], ItemList[1], 'COMMON']\r
+            self.__CurSection = [ItemList[0], ItemList[1], TAB_COMMON]\r
         elif len(ItemList) > 0:\r
-            self.__CurSection = [ItemList[0], 'DUMMY', 'COMMON']\r
+            self.__CurSection = [ItemList[0], 'DUMMY', TAB_COMMON]\r
 \r
     ## PreprocessFile() method\r
     #\r
@@ -885,7 +887,7 @@ class FdfParser:
 \r
         if self.__CurSection:\r
             # Defines macro\r
-            ScopeMacro = self.__MacroDict['COMMON', 'COMMON', 'COMMON']\r
+            ScopeMacro = self.__MacroDict[TAB_COMMON, TAB_COMMON, TAB_COMMON]\r
             if ScopeMacro:\r
                 MacroDict.update(ScopeMacro)\r
     \r
@@ -1130,8 +1132,9 @@ class FdfParser:
             self.__UndoToken()\r
             return False\r
 \r
-    def __Verify(self, Name, Value, Scope):\r
-        if Scope in ['UINT64', 'UINT8']:\r
+    @staticmethod\r
+    def __Verify(Name, Value, Scope):\r
+        if Scope in [TAB_UINT64, TAB_UINT8]:\r
             ValueNumber = 0\r
             try:\r
                 ValueNumber = int (Value, 0)\r
@@ -1139,10 +1142,10 @@ class FdfParser:
                 EdkLogger.error("FdfParser", FORMAT_INVALID, "The value is not valid dec or hex number for %s." % Name)\r
             if ValueNumber < 0:\r
                 EdkLogger.error("FdfParser", FORMAT_INVALID, "The value can't be set to negative value for %s." % Name)\r
-            if Scope == 'UINT64':\r
+            if Scope == TAB_UINT64:\r
                 if ValueNumber >= 0x10000000000000000:\r
                     EdkLogger.error("FdfParser", FORMAT_INVALID, "Too large value for %s." % Name)\r
-            if Scope == 'UINT8':\r
+            if Scope == TAB_UINT8:\r
                 if ValueNumber >= 0x100:\r
                     EdkLogger.error("FdfParser", FORMAT_INVALID, "Too large value for %s." % Name)\r
             return True\r
@@ -2157,7 +2160,7 @@ class FdfParser:
         self.__GetAprioriSection(FvObj, FvObj.DefineVarDict.copy())\r
 \r
         while True:\r
-            isInf = self.__GetInfStatement(FvObj, MacroDict = FvObj.DefineVarDict.copy())\r
+            isInf = self.__GetInfStatement(FvObj)\r
             isFile = self.__GetFileStatement(FvObj, MacroDict = FvObj.DefineVarDict.copy())\r
             if not isInf and not isFile:\r
                 break\r
@@ -2422,7 +2425,7 @@ class FdfParser:
         MacroDict.update(AprSectionObj.DefineVarDict)\r
 \r
         while True:\r
-            IsInf = self.__GetInfStatement( AprSectionObj, MacroDict = MacroDict)\r
+            IsInf = self.__GetInfStatement(AprSectionObj)\r
             IsFile = self.__GetFileStatement( AprSectionObj)\r
             if not IsInf and not IsFile:\r
                 break\r
@@ -2485,11 +2488,10 @@ class FdfParser:
     #\r
     #   @param  self        The object pointer\r
     #   @param  Obj         for whom inf statement is got\r
-    #   @param  MacroDict   dictionary used to replace macro\r
     #   @retval True        Successfully find inf statement\r
     #   @retval False       Not able to find inf statement\r
     #\r
-    def __GetInfStatement(self, Obj, ForCapsule=False, MacroDict={}):\r
+    def __GetInfStatement(self, Obj, ForCapsule=False):\r
         ffsInf = self.__ParseInfStatement()\r
         if not ffsInf:\r
             return False\r
@@ -2925,7 +2927,7 @@ class FdfParser:
                 self.__GetAprioriSection(FvObj, MacroDict.copy())\r
 \r
                 while True:\r
-                    IsInf = self.__GetInfStatement(FvObj, MacroDict.copy())\r
+                    IsInf = self.__GetInfStatement(FvObj)\r
                     IsFile = self.__GetFileStatement(FvObj, MacroDict.copy())\r
                     if not IsInf and not IsFile:\r
                         break\r
@@ -3200,16 +3202,16 @@ class FdfParser:
                     raise Warning("expected value of %s" % Name, self.FileName, self.CurrentLineNumber)\r
                 Value = self.__Token\r
                 if Name == 'IMAGE_HEADER_INIT_VERSION':\r
-                    if self.__Verify(Name, Value, 'UINT8'):\r
+                    if FdfParser.__Verify(Name, Value, 'UINT8'):\r
                         FmpData.Version = Value\r
                 elif Name == 'IMAGE_INDEX':\r
-                    if self.__Verify(Name, Value, 'UINT8'):\r
+                    if FdfParser.__Verify(Name, Value, 'UINT8'):\r
                         FmpData.ImageIndex = Value\r
                 elif Name == 'HARDWARE_INSTANCE':\r
-                    if self.__Verify(Name, Value, 'UINT8'):\r
+                    if FdfParser.__Verify(Name, Value, 'UINT8'):\r
                         FmpData.HardwareInstance = Value\r
                 elif Name == 'MONOTONIC_COUNT':\r
-                    if self.__Verify(Name, Value, 'UINT64'):\r
+                    if FdfParser.__Verify(Name, Value, 'UINT64'):\r
                         FmpData.MonotonicCount = Value\r
                         if FmpData.MonotonicCount.upper().startswith('0X'):\r
                             FmpData.MonotonicCount = (long)(FmpData.MonotonicCount, 16)\r
@@ -3400,7 +3402,7 @@ class FdfParser:
         if not self.__GetNextToken():\r
             raise Warning("expected FV name", self.FileName, self.CurrentLineNumber)\r
 \r
-        if self.__Token.upper() not in self.Profile.FvDict.keys():\r
+        if self.__Token.upper() not in self.Profile.FvDict:\r
             raise Warning("FV name does not exist", self.FileName, self.CurrentLineNumber)\r
 \r
         CapsuleFv = CapsuleData.CapsuleFv()\r
@@ -3434,7 +3436,7 @@ class FdfParser:
         if not self.__GetNextToken():\r
             raise Warning("expected FD name", self.FileName, self.CurrentLineNumber)\r
 \r
-        if self.__Token.upper() not in self.Profile.FdDict.keys():\r
+        if self.__Token.upper() not in self.Profile.FdDict:\r
             raise Warning("FD name does not exist", self.FileName, self.CurrentLineNumber)\r
 \r
         CapsuleFd = CapsuleData.CapsuleFd()\r
@@ -3585,7 +3587,7 @@ class FdfParser:
             raise Warning("expected '.'", self.FileName, self.CurrentLineNumber)\r
 \r
         Arch = self.__SkippedChars.rstrip(".")\r
-        if Arch.upper() not in ("IA32", "X64", "IPF", "EBC", "ARM", "AARCH64", "COMMON"):\r
+        if Arch.upper() not in ARCH_LIST_FULL:\r
             raise Warning("Unknown Arch '%s'" % Arch, self.FileName, self.CurrentLineNumber)\r
 \r
         ModuleType = self.__GetModuleType()\r
@@ -4530,7 +4532,7 @@ class FdfParser:
     def __GetCapInFd (self, FdName):\r
 \r
         CapList = []\r
-        if FdName.upper() in self.Profile.FdDict.keys():\r
+        if FdName.upper() in self.Profile.FdDict:\r
             FdObj = self.Profile.FdDict[FdName.upper()]\r
             for elementRegion in FdObj.RegionList:\r
                 if elementRegion.RegionType == 'CAPSULE':\r
@@ -4577,7 +4579,7 @@ class FdfParser:
     def __GetFvInFd (self, FdName):\r
 \r
         FvList = []\r
-        if FdName.upper() in self.Profile.FdDict.keys():\r
+        if FdName.upper() in self.Profile.FdDict:\r
             FdObj = self.Profile.FdDict[FdName.upper()]\r
             for elementRegion in FdObj.RegionList:\r
                 if elementRegion.RegionType == 'FV':\r
@@ -4646,7 +4648,7 @@ class FdfParser:
         # Check the cycle between FV and FD image\r
         #\r
         MaxLength = len (self.Profile.FvDict)\r
-        for FvName in self.Profile.FvDict.keys():\r
+        for FvName in self.Profile.FvDict:\r
             LogStr = "\nCycle Reference Checking for FV: %s\n" % FvName\r
             RefFvStack = []\r
             RefFvStack.append(FvName)\r
@@ -4656,7 +4658,7 @@ class FdfParser:
             while RefFvStack != [] and Index < MaxLength:\r
                 Index = Index + 1\r
                 FvNameFromStack = RefFvStack.pop()\r
-                if FvNameFromStack.upper() in self.Profile.FvDict.keys():\r
+                if FvNameFromStack.upper() in self.Profile.FvDict:\r
                     FvObj = self.Profile.FvDict[FvNameFromStack.upper()]\r
                 else:\r
                     continue\r
@@ -4695,7 +4697,7 @@ class FdfParser:
         # Check the cycle between Capsule and FD image\r
         #\r
         MaxLength = len (self.Profile.CapsuleDict)\r
-        for CapName in self.Profile.CapsuleDict.keys():\r
+        for CapName in self.Profile.CapsuleDict:\r
             #\r
             # Capsule image to be checked.\r
             #\r
@@ -4709,7 +4711,7 @@ class FdfParser:
             while RefCapStack != [] and Index < MaxLength:\r
                 Index = Index + 1\r
                 CapNameFromStack = RefCapStack.pop()\r
-                if CapNameFromStack.upper() in self.Profile.CapsuleDict.keys():\r
+                if CapNameFromStack.upper() in self.Profile.CapsuleDict:\r
                     CapObj = self.Profile.CapsuleDict[CapNameFromStack.upper()]\r
                 else:\r
                     continue\r
@@ -4754,7 +4756,7 @@ class FdfParser:
                         if RefFvName in FvAnalyzedList:\r
                             continue\r
                         LogStr += "Capsule %s contains FV %s\n" % (CapNameFromStack, RefFvName)\r
-                        if RefFvName.upper() in self.Profile.FvDict.keys():\r
+                        if RefFvName.upper() in self.Profile.FvDict:\r
                             FvObj = self.Profile.FvDict[RefFvName.upper()]\r
                         else:\r
                             continue\r