]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/GenFds/FdfParser.py
BaseTools: FdfParser refactor to remove a dictionary
[mirror_edk2.git] / BaseTools / Source / Python / GenFds / FdfParser.py
index 4183f318b75b9369e0c7743e58b44940ec5ab2e1..662c232c86e427f97a7be79284644547ab8c1e31 100644 (file)
@@ -61,7 +61,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
@@ -85,6 +84,9 @@ RegionSizePattern = re.compile("\s*(?P<base>(?:0x|0X)?[a-fA-F0-9]+)\s*\|\s*(?P<s
 RegionSizeGuidPattern = re.compile("\s*(?P<base>\w+\.\w+)\s*\|\s*(?P<size>\w+\.\w+)\s*")\r
 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
@@ -275,21 +277,6 @@ class FdfParser:
         if GenFdsGlobalVariable.WorkSpaceDir == '':\r
             GenFdsGlobalVariable.WorkSpaceDir = os.getenv("WORKSPACE")\r
 \r
-    ## __IsWhiteSpace() method\r
-    #\r
-    #   Whether char at current FileBufferPos is whitespace\r
-    #\r
-    #   @param  self        The object pointer\r
-    #   @param  Char        The char to test\r
-    #   @retval True        The char is a kind of white space\r
-    #   @retval False       The char is NOT a kind of white space\r
-    #\r
-    def __IsWhiteSpace(self, Char):\r
-        if Char in (T_CHAR_NULL, T_CHAR_CR, T_CHAR_SPACE, T_CHAR_TAB, T_CHAR_LF):\r
-            return True\r
-        else:\r
-            return False\r
-\r
     ## __SkipWhiteSpace() method\r
     #\r
     #   Skip white spaces from current char, return number of chars skipped\r
@@ -719,7 +706,8 @@ class FdfParser:
         # Preprocess done.\r
         self.Rewind()\r
         \r
-    def __GetIfListCurrentItemStat(self, IfList):\r
+    @staticmethod\r
+    def __GetIfListCurrentItemStat(IfList):\r
         if len(IfList) == 0:\r
             return True\r
         \r
@@ -2170,7 +2158,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
@@ -2225,9 +2213,7 @@ class FdfParser:
         if not self.__GetNextToken():\r
             raise Warning("expected FV base address value", self.FileName, self.CurrentLineNumber)\r
 \r
-        IsValidBaseAddrValue = re.compile('^0[x|X][0-9a-fA-F]+')\r
-\r
-        if not IsValidBaseAddrValue.match(self.__Token.upper()):\r
+        if not BaseAddrValuePattern.match(self.__Token.upper()):\r
             raise Warning("Unknown FV base address value '%s'" % self.__Token, self.FileName, self.CurrentLineNumber)\r
         Obj.FvBaseAddress = self.__Token\r
         return True  \r
@@ -2437,7 +2423,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
@@ -2500,11 +2486,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
@@ -2640,13 +2625,12 @@ class FdfParser:
     #\r
     #   Check whether reloc strip flag can be set for a file type.\r
     #\r
-    #   @param  self        The object pointer\r
     #   @param  FileType    The file type to check with\r
     #   @retval True        This type could have relocation strip flag\r
     #   @retval False       No way to have it\r
     #\r
-\r
-    def __FileCouldHaveRelocFlag (self, FileType):\r
+    @staticmethod\r
+    def __FileCouldHaveRelocFlag (FileType):\r
         if FileType in ('SEC', 'PEI_CORE', 'PEIM', 'PEI_DXE_COMBO'):\r
             return True\r
         else:\r
@@ -2656,13 +2640,12 @@ class FdfParser:
     #\r
     #   Check whether reloc strip flag can be set for a section type.\r
     #\r
-    #   @param  self        The object pointer\r
     #   @param  SectionType The section type to check with\r
     #   @retval True        This type could have relocation strip flag\r
     #   @retval False       No way to have it\r
     #\r
-\r
-    def __SectionCouldHaveRelocFlag (self, SectionType):\r
+    @staticmethod\r
+    def __SectionCouldHaveRelocFlag (SectionType):\r
         if SectionType in ('TE', 'PE32'):\r
             return True\r
         else:\r
@@ -2942,7 +2925,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
@@ -4001,12 +3984,12 @@ class FdfParser:
     #\r
     #   Get whether a section could be optional\r
     #\r
-    #   @param  self        The object pointer\r
     #   @param  SectionType The section type to check\r
     #   @retval True        section could be optional\r
     #   @retval False       section never optional\r
     #\r
-    def __RuleSectionCouldBeOptional(self, SectionType):\r
+    @staticmethod\r
+    def __RuleSectionCouldBeOptional(SectionType):\r
         if SectionType in ("DXE_DEPEX", "UI", "VERSION", "PEI_DEPEX", "RAW", "SMM_DEPEX"):\r
             return True\r
         else:\r
@@ -4016,12 +3999,12 @@ class FdfParser:
     #\r
     #   Get whether a section could have build number information\r
     #\r
-    #   @param  self        The object pointer\r
     #   @param  SectionType The section type to check\r
     #   @retval True        section could have build number information\r
     #   @retval False       section never have build number information\r
     #\r
-    def __RuleSectionCouldHaveBuildNum(self, SectionType):\r
+    @staticmethod\r
+    def __RuleSectionCouldHaveBuildNum(SectionType):\r
         if SectionType in ("VERSION"):\r
             return True\r
         else:\r
@@ -4031,12 +4014,12 @@ class FdfParser:
     #\r
     #   Get whether a section could have string\r
     #\r
-    #   @param  self        The object pointer\r
     #   @param  SectionType The section type to check\r
     #   @retval True        section could have string\r
     #   @retval False       section never have string\r
     #\r
-    def __RuleSectionCouldHaveString(self, SectionType):\r
+    @staticmethod\r
+    def __RuleSectionCouldHaveString(SectionType):\r
         if SectionType in ("UI", "VERSION"):\r
             return True\r
         else:\r