X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=BaseTools%2FSource%2FPython%2FCommon%2FExpression.py;h=9fec10d2bb9c3c89a3e7f7b6295a4470fd57c293;hp=320f0015009b3c28e16562cda31116b179597e8d;hb=31ff1c443e25d6bff758bdcd9a248a907cff651b;hpb=0a014fba41b631258687f56e630518b54817d062 diff --git a/BaseTools/Source/Python/Common/Expression.py b/BaseTools/Source/Python/Common/Expression.py index 320f001500..9fec10d2bb 100644 --- a/BaseTools/Source/Python/Common/Expression.py +++ b/BaseTools/Source/Python/Common/Expression.py @@ -18,6 +18,7 @@ from CommonDataClass.Exceptions import WrnExpression from Misc import GuidStringToGuidStructureString, ParseFieldValue, IsFieldValueAnArray import Common.EdkLogger as EdkLogger import copy +from Common.DataType import * ERR_STRING_EXPR = 'This operator cannot be used in string expression: [%s].' ERR_SNYTAX = 'Syntax error, the rest of expression cannot be evaluated: [%s].' @@ -43,6 +44,7 @@ ERR_IN_OPERAND = 'Macro after IN operator can only be: $(FAMILY), $(ARC __ValidString = re.compile(r'[_a-zA-Z][_0-9a-zA-Z]*$') _ReLabel = re.compile('LABEL\((\w+)\)') _ReOffset = re.compile('OFFSET_OF\((\w+)\)') +PcdPattern = re.compile(r'[_a-zA-Z][0-9A-Za-z_]*\.[_a-zA-Z][0-9A-Za-z_]*$') ## SplitString # Split string to list according double quote @@ -135,7 +137,7 @@ def BuildOptionValue(PcdValue, GuidDict): InputValue = PcdValue if IsFieldValueAnArray(InputValue): try: - PcdValue = ValueExpressionEx(InputValue, 'VOID*', GuidDict)(True) + PcdValue = ValueExpressionEx(InputValue, TAB_VOID, GuidDict)(True) except: pass return PcdValue @@ -150,7 +152,7 @@ def ReplaceExprMacro(String, Macros, ExceptionList = None): InQuote = True MacroStartPos = String.find('$(') if MacroStartPos < 0: - for Pcd in gPlatformPcds.keys(): + for Pcd in gPlatformPcds: if Pcd in String: if Pcd not in gConditionalPcds: gConditionalPcds.append(Pcd) @@ -214,7 +216,6 @@ class ValueExpression(object): NonLetterOpLst = ['+', '-', '*', '/', '%', '&', '|', '^', '~', '<<', '>>', '!', '=', '>', '<', '?', ':'] - PcdPattern = re.compile(r'[_a-zA-Z][0-9A-Za-z_]*\.[_a-zA-Z][0-9A-Za-z_]*$') SymbolPattern = re.compile("(" "\$\([A-Z][A-Z0-9_]*\)|\$\(\w+\.\w+\)|\w+\.\w+|" @@ -616,7 +617,7 @@ class ValueExpression(object): raise BadExpression(ERR_EMPTY_TOKEN) # PCD token - if self.PcdPattern.match(self._Token): + if PcdPattern.match(self._Token): if self._Token not in self._Symb: Ex = BadExpression(ERR_PCD_RESOLVE % self._Token) Ex.Pcd = self._Token @@ -800,22 +801,22 @@ class ValueExpressionEx(ValueExpression): PcdValue = self.PcdValue try: PcdValue = ValueExpression.__call__(self, RealValue, Depth) - if self.PcdType == 'VOID*' and (PcdValue.startswith("'") or PcdValue.startswith("L'")): + if self.PcdType == TAB_VOID and (PcdValue.startswith("'") or PcdValue.startswith("L'")): PcdValue, Size = ParseFieldValue(PcdValue) PcdValueList = [] for I in range(Size): PcdValueList.append('0x%02X'%(PcdValue & 0xff)) PcdValue = PcdValue >> 8 PcdValue = '{' + ','.join(PcdValueList) + '}' - elif self.PcdType in ['UINT8', 'UINT16', 'UINT32', 'UINT64', 'BOOLEAN'] and (PcdValue.startswith("'") or \ + elif self.PcdType in TAB_PCD_NUMERIC_TYPES and (PcdValue.startswith("'") or \ PcdValue.startswith('"') or PcdValue.startswith("L'") or PcdValue.startswith('L"') or PcdValue.startswith('{')): raise BadExpression except WrnExpression, Value: PcdValue = Value.result except BadExpression, Value: - if self.PcdType in ['UINT8', 'UINT16', 'UINT32', 'UINT64', 'BOOLEAN']: + if self.PcdType in TAB_PCD_NUMERIC_TYPES: PcdValue = PcdValue.strip() - if type(PcdValue) == type('') and PcdValue.startswith('{') and PcdValue.endswith('}'): + if PcdValue.startswith('{') and PcdValue.endswith('}'): PcdValue = SplitPcdValueString(PcdValue[1:-1]) if type(PcdValue) == type([]): TmpValue = 0 @@ -823,24 +824,24 @@ class ValueExpressionEx(ValueExpression): ValueType = '' for Item in PcdValue: Item = Item.strip() - if Item.startswith('UINT8'): + if Item.startswith(TAB_UINT8): ItemSize = 1 - ValueType = 'UINT8' - elif Item.startswith('UINT16'): + ValueType = TAB_UINT8 + elif Item.startswith(TAB_UINT16): ItemSize = 2 - ValueType = 'UINT16' - elif Item.startswith('UINT32'): + ValueType = TAB_UINT16 + elif Item.startswith(TAB_UINT32): ItemSize = 4 - ValueType = 'UINT32' - elif Item.startswith('UINT64'): + ValueType = TAB_UINT32 + elif Item.startswith(TAB_UINT64): ItemSize = 8 - ValueType = 'UINT64' + ValueType = TAB_UINT64 elif Item[0] in ['"',"'",'L']: ItemSize = 0 - ValueType = 'VOID*' + ValueType = TAB_VOID else: ItemSize = 0 - ValueType = 'UINT8' + ValueType = TAB_UINT8 Item = ValueExpressionEx(Item, ValueType, self._Symb)(True) if ItemSize == 0: @@ -875,13 +876,13 @@ class ValueExpressionEx(ValueExpression): PcdValue = '0x%0{}X'.format(Size) % (TmpValue) if TmpValue < 0: raise BadExpression('Type %s PCD Value is negative' % self.PcdType) - if self.PcdType == 'UINT8' and Size > 1: + if self.PcdType == TAB_UINT8 and Size > 1: raise BadExpression('Type %s PCD Value Size is Larger than 1 byte' % self.PcdType) - if self.PcdType == 'UINT16' and Size > 2: + if self.PcdType == TAB_UINT16 and Size > 2: raise BadExpression('Type %s PCD Value Size is Larger than 2 byte' % self.PcdType) - if self.PcdType == 'UINT32' and Size > 4: + if self.PcdType == TAB_UINT32 and Size > 4: raise BadExpression('Type %s PCD Value Size is Larger than 4 byte' % self.PcdType) - if self.PcdType == 'UINT64' and Size > 8: + if self.PcdType == TAB_UINT64 and Size > 8: raise BadExpression('Type %s PCD Value Size is Larger than 8 byte' % self.PcdType) else: try: @@ -908,15 +909,15 @@ class ValueExpressionEx(ValueExpression): for Label in LabelList: if not IsValidCName(Label): raise BadExpression('%s is not a valid c variable name' % Label) - if Label not in LabelDict.keys(): + if Label not in LabelDict: LabelDict[Label] = str(LabelOffset) - if Item.startswith('UINT8'): + if Item.startswith(TAB_UINT8): LabelOffset = LabelOffset + 1 - elif Item.startswith('UINT16'): + elif Item.startswith(TAB_UINT16): LabelOffset = LabelOffset + 2 - elif Item.startswith('UINT32'): + elif Item.startswith(TAB_UINT32): LabelOffset = LabelOffset + 4 - elif Item.startswith('UINT64'): + elif Item.startswith(TAB_UINT64): LabelOffset = LabelOffset + 8 else: try: @@ -950,7 +951,7 @@ class ValueExpressionEx(ValueExpression): Size = 0 ValueStr = '' TokenSpaceGuidName = '' - if Item.startswith('GUID') and Item.endswith(')'): + if Item.startswith(TAB_GUID) and Item.endswith(')'): try: TokenSpaceGuidName = re.search('GUID\((\w+)\)', Item).group(1) except: @@ -971,18 +972,18 @@ class ValueExpressionEx(ValueExpression): continue else: ValueType = "" - if Item.startswith('UINT8'): + if Item.startswith(TAB_UINT8): ItemSize = 1 - ValueType = "UINT8" - elif Item.startswith('UINT16'): + ValueType = TAB_UINT8 + elif Item.startswith(TAB_UINT16): ItemSize = 2 - ValueType = "UINT16" - elif Item.startswith('UINT32'): + ValueType = TAB_UINT16 + elif Item.startswith(TAB_UINT32): ItemSize = 4 - ValueType = "UINT32" - elif Item.startswith('UINT64'): + ValueType = TAB_UINT32 + elif Item.startswith(TAB_UINT64): ItemSize = 8 - ValueType = "UINT64" + ValueType = TAB_UINT64 else: ItemSize = 0 if ValueType: