]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/Common/FdfParserLite.py
BaseTools: change hex parsing to use built in
[mirror_edk2.git] / BaseTools / Source / Python / Common / FdfParserLite.py
index 806fdd8aa5bb487cdbb23da1ffc5ecea51927e44..0e35eb484b9a0370953a2d8a7cfa961e1bb8242b 100644 (file)
@@ -22,6 +22,8 @@ import CommonDataClass.FdfClass
 from Common.LongFilePathSupport import OpenLongFilePath as open\r
 from Common.MultipleWorkspace import MultipleWorkspace as mws\r
 from Common.RangeExpression import RangeExpression\r
 from Common.LongFilePathSupport import OpenLongFilePath as open\r
 from Common.MultipleWorkspace import MultipleWorkspace as mws\r
 from Common.RangeExpression import RangeExpression\r
+from Common.GlobalData import *\r
+import string\r
 \r
 ##define T_CHAR_SPACE                ' '\r
 ##define T_CHAR_NULL                 '\0'\r
 \r
 ##define T_CHAR_SPACE                ' '\r
 ##define T_CHAR_NULL                 '\0'\r
@@ -48,6 +50,7 @@ InputMacroDict = {}
 AllMacroList = []\r
 \r
 FileExtensionPattern = re.compile(r'([a-zA-Z][a-zA-Z0-9]*)')\r
 AllMacroList = []\r
 \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
 def GetRealFileLine (File, Line):\r
     \r
 \r
 def GetRealFileLine (File, Line):\r
     \r
@@ -355,7 +358,7 @@ class FdfParser(object):
                         if Profile.FileName == File and Profile.MacroName == Name and Profile.DefinedAtLine <= Line:\r
                             Value = Profile.MacroValue\r
                             \r
                         if Profile.FileName == File and Profile.MacroName == Name and Profile.DefinedAtLine <= Line:\r
                             Value = Profile.MacroValue\r
                             \r
-                if Value != None:\r
+                if Value is not None:\r
                     Str = Str.replace('$(' + Name + ')', Value)\r
                     MacroEnd = MacroStart + len(Value) \r
                 \r
                     Str = Str.replace('$(' + Name + ')', Value)\r
                     MacroEnd = MacroStart + len(Value) \r
                 \r
@@ -678,8 +681,8 @@ class FdfParser(object):
         FileLineTuple = GetRealFileLine(self.FileName, Line)\r
         if Name in InputMacroDict:\r
             MacroValue = InputMacroDict[Name]\r
         FileLineTuple = GetRealFileLine(self.FileName, Line)\r
         if Name in InputMacroDict:\r
             MacroValue = InputMacroDict[Name]\r
-            if Op == None:\r
-                if Value == 'Bool' and MacroValue == None or MacroValue.upper() == 'FALSE':\r
+            if Op is None:\r
+                if Value == 'Bool' and MacroValue is None or MacroValue.upper() == 'FALSE':\r
                     return False\r
                 return True\r
             elif Op == '!=':\r
                     return False\r
                 return True\r
             elif Op == '!=':\r
@@ -693,7 +696,7 @@ class FdfParser(object):
                 else:\r
                     return False\r
             else:\r
                 else:\r
                     return False\r
             else:\r
-                if (self.__IsHex(Value) or Value.isdigit()) and (self.__IsHex(MacroValue) or (MacroValue != None and MacroValue.isdigit())):\r
+                if (self.__IsHex(Value) or Value.isdigit()) and (self.__IsHex(MacroValue) or (MacroValue is not None and MacroValue.isdigit())):\r
                     InputVal = long(Value, 0)\r
                     MacroVal = long(MacroValue, 0)\r
                     if Op == '>':\r
                     InputVal = long(Value, 0)\r
                     MacroVal = long(MacroValue, 0)\r
                     if Op == '>':\r
@@ -723,8 +726,8 @@ class FdfParser(object):
                 \r
         for Profile in AllMacroList:\r
             if Profile.FileName == FileLineTuple[0] and Profile.MacroName == Name and Profile.DefinedAtLine <= FileLineTuple[1]:\r
                 \r
         for Profile in AllMacroList:\r
             if Profile.FileName == FileLineTuple[0] and Profile.MacroName == Name and Profile.DefinedAtLine <= FileLineTuple[1]:\r
-                if Op == None:\r
-                    if Value == 'Bool' and Profile.MacroValue == None or Profile.MacroValue.upper() == 'FALSE':\r
+                if Op is None:\r
+                    if Value == 'Bool' and Profile.MacroValue is None or Profile.MacroValue.upper() == 'FALSE':\r
                         return False\r
                     return True\r
                 elif Op == '!=':\r
                         return False\r
                     return True\r
                 elif Op == '!=':\r
@@ -738,7 +741,7 @@ class FdfParser(object):
                     else:\r
                         return False\r
                 else:\r
                     else:\r
                         return False\r
                 else:\r
-                    if (self.__IsHex(Value) or Value.isdigit()) and (self.__IsHex(Profile.MacroValue) or (Profile.MacroValue != None and Profile.MacroValue.isdigit())):\r
+                    if (self.__IsHex(Value) or Value.isdigit()) and (self.__IsHex(Profile.MacroValue) or (Profile.MacroValue is not None and Profile.MacroValue.isdigit())):\r
                         InputVal = long(Value, 0)\r
                         MacroVal = long(Profile.MacroValue, 0)\r
                         if Op == '>':\r
                         InputVal = long(Value, 0)\r
                         MacroVal = long(Profile.MacroValue, 0)\r
                         if Op == '>':\r
@@ -934,7 +937,7 @@ class FdfParser(object):
         \r
         if not self.__GetNextToken():\r
             return False\r
         \r
         if not self.__GetNextToken():\r
             return False\r
-        if RangeExpression.RegGuidPattern.match(self.__Token) != None:\r
+        if gGuidPattern.match(self.__Token) is not None:\r
             return True\r
         else:\r
             self.__UndoToken()\r
             return True\r
         else:\r
             self.__UndoToken()\r
@@ -973,32 +976,13 @@ class FdfParser(object):
             \r
         self.__GetOneChar()\r
     \r
             \r
         self.__GetOneChar()\r
     \r
-    ## __HexDigit() method\r
-    #\r
-    #   Whether char input is a Hex data bit\r
-    #\r
-    #   @param  self        The object pointer\r
-    #   @param  TempChar    The char to test\r
-    #   @retval True        The char is a Hex data bit\r
-    #   @retval False       The char is NOT a Hex data bit\r
-    #\r
-    def __HexDigit(self, TempChar):\r
-        if (TempChar >= 'a' and TempChar <= 'f') or (TempChar >= 'A' and TempChar <= 'F') \\r
-                or (TempChar >= '0' and TempChar <= '9'):\r
-                    return True\r
-        else:\r
-            return False\r
-    \r
     def __IsHex(self, HexStr):\r
         if not HexStr.upper().startswith("0X"):\r
             return False\r
         if len(self.__Token) <= 2:\r
             return False\r
     def __IsHex(self, HexStr):\r
         if not HexStr.upper().startswith("0X"):\r
             return False\r
         if len(self.__Token) <= 2:\r
             return False\r
-        charList = [c for c in HexStr[2 : ] if not self.__HexDigit( c)]\r
-        if len(charList) == 0:\r
-            return True\r
-        else:\r
-            return False    \r
+        return True if all(x in string.hexdigits for x in HexStr[2:]) else False\r
+\r
     ## __GetNextHexNumber() method\r
     #\r
     #   Get next HEX data before a seperator\r
     ## __GetNextHexNumber() method\r
     #\r
     #   Get next HEX data before a seperator\r
@@ -1453,7 +1437,7 @@ class FdfParser(object):
             pass\r
         \r
         for Item in Obj.BlockSizeList:\r
             pass\r
         \r
         for Item in Obj.BlockSizeList:\r
-            if Item[0] == None or Item[1] == None:\r
+            if Item[0] is None or Item[1] is None:\r
                 raise Warning("expected block statement for Fd Section", self.FileName, self.CurrentLineNumber)\r
 \r
         return True\r
                 raise Warning("expected block statement for Fd Section", self.FileName, self.CurrentLineNumber)\r
 \r
         return True\r
@@ -2093,8 +2077,7 @@ class FdfParser(object):
 \r
                 \r
         if self.__GetNextToken():\r
 \r
                 \r
         if self.__GetNextToken():\r
-            p = re.compile(r'([a-zA-Z0-9\-]+|\$\(TARGET\)|\*)_([a-zA-Z0-9\-]+|\$\(TOOL_CHAIN_TAG\)|\*)_([a-zA-Z0-9\-]+|\$\(ARCH\)|\*)')\r
-            if p.match(self.__Token):\r
+            if TokenFindPattern.match(self.__Token):\r
                 FfsInfObj.KeyStringList.append(self.__Token)\r
                 if not self.__IsToken(","):\r
                     return\r
                 FfsInfObj.KeyStringList.append(self.__Token)\r
                 if not self.__IsToken(","):\r
                     return\r
@@ -2103,7 +2086,7 @@ class FdfParser(object):
                 return\r
                 \r
             while self.__GetNextToken():\r
                 return\r
                 \r
             while self.__GetNextToken():\r
-                if not p.match(self.__Token):\r
+                if not TokenFindPattern.match(self.__Token):\r
                     raise Warning("expected KeyString \"Target_Tag_Arch\" At Line ", self.FileName, self.CurrentLineNumber)\r
                 FfsInfObj.KeyStringList.append(self.__Token)\r
     \r
                     raise Warning("expected KeyString \"Target_Tag_Arch\" At Line ", self.FileName, self.CurrentLineNumber)\r
                 FfsInfObj.KeyStringList.append(self.__Token)\r
     \r
@@ -2251,12 +2234,11 @@ class FdfParser(object):
     def __GetFileOpts(self, FfsFileObj):\r
         \r
         if self.__GetNextToken():\r
     def __GetFileOpts(self, FfsFileObj):\r
         \r
         if self.__GetNextToken():\r
-            Pattern = re.compile(r'([a-zA-Z0-9\-]+|\$\(TARGET\)|\*)_([a-zA-Z0-9\-]+|\$\(TOOL_CHAIN_TAG\)|\*)_([a-zA-Z0-9\-]+|\$\(ARCH\)|\*)')\r
-            if Pattern.match(self.__Token):\r
+            if TokenFindPattern.match(self.__Token):\r
                 FfsFileObj.KeyStringList.append(self.__Token)\r
                 if self.__IsToken(","):\r
                     while self.__GetNextToken():\r
                 FfsFileObj.KeyStringList.append(self.__Token)\r
                 if self.__IsToken(","):\r
                     while self.__GetNextToken():\r
-                        if not Pattern.match(self.__Token):\r
+                        if not TokenFindPattern.match(self.__Token):\r
                             raise Warning("expected KeyString \"Target_Tag_Arch\" At Line ", self.FileName, self.CurrentLineNumber)\r
                         FfsFileObj.KeyStringList.append(self.__Token)\r
 \r
                             raise Warning("expected KeyString \"Target_Tag_Arch\" At Line ", self.FileName, self.CurrentLineNumber)\r
                         FfsFileObj.KeyStringList.append(self.__Token)\r
 \r
@@ -2422,7 +2404,7 @@ class FdfParser(object):
             \r
             FvImageSectionObj = CommonDataClass.FdfClass.FvImageSectionClassObject()\r
             FvImageSectionObj.Alignment = AlignValue\r
             \r
             FvImageSectionObj = CommonDataClass.FdfClass.FvImageSectionClassObject()\r
             FvImageSectionObj.Alignment = AlignValue\r
-            if FvObj != None:\r
+            if FvObj is not None:\r
                 FvImageSectionObj.Fv = FvObj\r
                 FvImageSectionObj.FvName = None\r
             else:\r
                 FvImageSectionObj.Fv = FvObj\r
                 FvImageSectionObj.FvName = None\r
             else:\r
@@ -2901,12 +2883,11 @@ class FdfParser(object):
         \r
         KeyStringList = []\r
         if self.__GetNextToken():\r
         \r
         KeyStringList = []\r
         if self.__GetNextToken():\r
-            Pattern = re.compile(r'([a-zA-Z0-9\-]+|\$\(TARGET\)|\*)_([a-zA-Z0-9\-]+|\$\(TOOL_CHAIN_TAG\)|\*)_([a-zA-Z0-9\-]+|\$\(ARCH\)|\*)')\r
-            if Pattern.match(self.__Token):\r
+            if TokenFindPattern.match(self.__Token):\r
                 KeyStringList.append(self.__Token)\r
                 if self.__IsToken(","):\r
                     while self.__GetNextToken():\r
                 KeyStringList.append(self.__Token)\r
                 if self.__IsToken(","):\r
                     while self.__GetNextToken():\r
-                        if not Pattern.match(self.__Token):\r
+                        if not TokenFindPattern.match(self.__Token):\r
                             raise Warning("expected KeyString \"Target_Tag_Arch\" At Line ", self.FileName, self.CurrentLineNumber)\r
                         KeyStringList.append(self.__Token)\r
 \r
                             raise Warning("expected KeyString \"Target_Tag_Arch\" At Line ", self.FileName, self.CurrentLineNumber)\r
                         KeyStringList.append(self.__Token)\r
 \r
@@ -2941,7 +2922,7 @@ class FdfParser(object):
             Rule.CheckSum = CheckSum\r
             Rule.Fixed = Fixed\r
             Rule.KeyStringList = KeyStringList\r
             Rule.CheckSum = CheckSum\r
             Rule.Fixed = Fixed\r
             Rule.KeyStringList = KeyStringList\r
-            if KeepReloc != None:\r
+            if KeepReloc is not None:\r
                 Rule.KeepReloc = KeepReloc\r
             \r
             while True:\r
                 Rule.KeepReloc = KeepReloc\r
             \r
             while True:\r
@@ -2968,7 +2949,7 @@ class FdfParser(object):
             Rule.Fixed = Fixed\r
             Rule.FileExtension = Ext\r
             Rule.KeyStringList = KeyStringList\r
             Rule.Fixed = Fixed\r
             Rule.FileExtension = Ext\r
             Rule.KeyStringList = KeyStringList\r
-            if KeepReloc != None:\r
+            if KeepReloc is not None:\r
                 Rule.KeepReloc = KeepReloc\r
             \r
             return Rule\r
                 Rule.KeepReloc = KeepReloc\r
             \r
             return Rule\r
@@ -3011,7 +2992,7 @@ class FdfParser(object):
             Rule.Fixed = Fixed\r
             Rule.FileName = self.__Token\r
             Rule.KeyStringList = KeyStringList\r
             Rule.Fixed = Fixed\r
             Rule.FileName = self.__Token\r
             Rule.KeyStringList = KeyStringList\r
-            if KeepReloc != None:\r
+            if KeepReloc is not None:\r
                 Rule.KeepReloc = KeepReloc\r
             return Rule\r
         \r
                 Rule.KeepReloc = KeepReloc\r
             return Rule\r
         \r
@@ -3148,7 +3129,7 @@ class FdfParser(object):
                     EfiSectionObj.KeepReloc = False\r
                 else:\r
                     EfiSectionObj.KeepReloc = True\r
                     EfiSectionObj.KeepReloc = False\r
                 else:\r
                     EfiSectionObj.KeepReloc = True\r
-                if Obj.KeepReloc != None and Obj.KeepReloc != EfiSectionObj.KeepReloc:\r
+                if Obj.KeepReloc is not None and Obj.KeepReloc != EfiSectionObj.KeepReloc:\r
                     raise Warning("Section type %s has reloc strip flag conflict with Rule At Line %d" % (EfiSectionObj.SectionType, self.CurrentLineNumber), self.FileName, self.CurrentLineNumber)\r
             else:\r
                 raise Warning("Section type %s could not have reloc strip flag At Line %d" % (EfiSectionObj.SectionType, self.CurrentLineNumber), self.FileName, self.CurrentLineNumber)\r
                     raise Warning("Section type %s has reloc strip flag conflict with Rule At Line %d" % (EfiSectionObj.SectionType, self.CurrentLineNumber), self.FileName, self.CurrentLineNumber)\r
             else:\r
                 raise Warning("Section type %s could not have reloc strip flag At Line %d" % (EfiSectionObj.SectionType, self.CurrentLineNumber), self.FileName, self.CurrentLineNumber)\r
@@ -3456,7 +3437,7 @@ class FdfParser(object):
             raise Warning("expected Component type At Line ", self.FileName, self.CurrentLineNumber)\r
         if self.__Token not in ("FIT", "PAL_B", "PAL_A", "OEM"):\r
             if not self.__Token.startswith("0x") or len(self.__Token) < 3 or len(self.__Token) > 4 or \\r
             raise Warning("expected Component type At Line ", self.FileName, self.CurrentLineNumber)\r
         if self.__Token not in ("FIT", "PAL_B", "PAL_A", "OEM"):\r
             if not self.__Token.startswith("0x") or len(self.__Token) < 3 or len(self.__Token) > 4 or \\r
-                not self.__HexDigit(self.__Token[2]) or not self.__HexDigit(self.__Token[-1]):\r
+                not self.__Token[2] in string.hexdigits or not self.__Token[-1] in string.hexdigits:\r
                 raise Warning("Unknown location type At line ", self.FileName, self.CurrentLineNumber)\r
         CompStatementObj.CompType = self.__Token\r
         \r
                 raise Warning("Unknown location type At line ", self.FileName, self.CurrentLineNumber)\r
         CompStatementObj.CompType = self.__Token\r
         \r
@@ -3470,7 +3451,7 @@ class FdfParser(object):
             raise Warning("expected Component version At Line ", self.FileName, self.CurrentLineNumber)\r
 \r
         Pattern = re.compile('-$|[0-9]{0,1}[0-9]{1}\.[0-9]{0,1}[0-9]{1}')\r
             raise Warning("expected Component version At Line ", self.FileName, self.CurrentLineNumber)\r
 \r
         Pattern = re.compile('-$|[0-9]{0,1}[0-9]{1}\.[0-9]{0,1}[0-9]{1}')\r
-        if Pattern.match(self.__Token) == None:\r
+        if Pattern.match(self.__Token) is None:\r
             raise Warning("Unknown version format At line ", self.FileName, self.CurrentLineNumber)\r
         CompStatementObj.CompVer = self.__Token\r
         \r
             raise Warning("Unknown version format At line ", self.FileName, self.CurrentLineNumber)\r
         CompStatementObj.CompVer = self.__Token\r
         \r
@@ -3543,7 +3524,7 @@ class FdfParser(object):
             for elementRegion in FdObj.RegionList:\r
                 if elementRegion.RegionType == 'FV':\r
                     for elementRegionData in elementRegion.RegionDataList:\r
             for elementRegion in FdObj.RegionList:\r
                 if elementRegion.RegionType == 'FV':\r
                     for elementRegionData in elementRegion.RegionDataList:\r
-                        if elementRegionData != None and elementRegionData.upper() not in FvList:\r
+                        if elementRegionData is not None and elementRegionData.upper() not in FvList:\r
                             FvList.append(elementRegionData.upper())\r
         return FvList\r
     \r
                             FvList.append(elementRegionData.upper())\r
         return FvList\r
     \r
@@ -3560,9 +3541,9 @@ class FdfParser(object):
         \r
         for FfsObj in FvObj.FfsList:\r
             if isinstance(FfsObj, FfsFileStatement.FileStatement):\r
         \r
         for FfsObj in FvObj.FfsList:\r
             if isinstance(FfsObj, FfsFileStatement.FileStatement):\r
-                if FfsObj.FvName != None and FfsObj.FvName.upper() not in RefFvList:\r
+                if FfsObj.FvName is not None and FfsObj.FvName.upper() not in RefFvList:\r
                     RefFvList.append(FfsObj.FvName.upper())\r
                     RefFvList.append(FfsObj.FvName.upper())\r
-                elif FfsObj.FdName != None and FfsObj.FdName.upper() not in RefFdList:\r
+                elif FfsObj.FdName is not None and FfsObj.FdName.upper() not in RefFdList:\r
                     RefFdList.append(FfsObj.FdName.upper())\r
                 else:\r
                     self.__GetReferencedFdFvTupleFromSection(FfsObj, RefFdList, RefFvList)    \r
                     RefFdList.append(FfsObj.FdName.upper())\r
                 else:\r
                     self.__GetReferencedFdFvTupleFromSection(FfsObj, RefFdList, RefFvList)    \r
@@ -3583,9 +3564,9 @@ class FdfParser(object):
         while SectionStack != []:\r
             SectionObj = SectionStack.pop()\r
             if isinstance(SectionObj, FvImageSection.FvImageSection):\r
         while SectionStack != []:\r
             SectionObj = SectionStack.pop()\r
             if isinstance(SectionObj, FvImageSection.FvImageSection):\r
-                if SectionObj.FvName != None and SectionObj.FvName.upper() not in FvList:\r
+                if SectionObj.FvName is not None and SectionObj.FvName.upper() not in FvList:\r
                     FvList.append(SectionObj.FvName.upper())\r
                     FvList.append(SectionObj.FvName.upper())\r
-                if SectionObj.Fv != None and SectionObj.Fv.UiFvName != None and SectionObj.Fv.UiFvName.upper() not in FvList:\r
+                if SectionObj.Fv is not None and SectionObj.Fv.UiFvName is not None and SectionObj.Fv.UiFvName.upper() not in FvList:\r
                     FvList.append(SectionObj.Fv.UiFvName.upper())\r
                     self.__GetReferencedFdFvTuple(SectionObj.Fv, FdList, FvList)\r
             \r
                     FvList.append(SectionObj.Fv.UiFvName.upper())\r
                     self.__GetReferencedFdFvTuple(SectionObj.Fv, FdList, FvList)\r
             \r