BaseTools: use set instead of list
as we only do membership (in) testing for this, set is better Cc: Liming Gao <liming.gao@intel.com> Cc: Yonghong Zhu <yonghong.zhu@intel.com> Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Jaben Carsey <jaben.carsey@intel.com> Reviewed-by: Yonghong Zhu <yonghong.zhu@intel.com>
This commit is contained in:
parent
b2aeaf573e
commit
4d601fc6b1
@ -171,7 +171,7 @@ def ReplaceExprMacro(String, Macros, ExceptionList = None):
|
|||||||
RetStr += '0'
|
RetStr += '0'
|
||||||
elif not InQuote:
|
elif not InQuote:
|
||||||
Tklst = RetStr.split()
|
Tklst = RetStr.split()
|
||||||
if Tklst and Tklst[-1] in ['IN', 'in'] and ExceptionList and Macro not in ExceptionList:
|
if Tklst and Tklst[-1] in {'IN', 'in'} and ExceptionList and Macro not in ExceptionList:
|
||||||
raise BadExpression(ERR_IN_OPERAND)
|
raise BadExpression(ERR_IN_OPERAND)
|
||||||
# Make sure the macro in exception list is encapsulated by double quote
|
# Make sure the macro in exception list is encapsulated by double quote
|
||||||
# For example: DEFINE ARCH = IA32 X64
|
# For example: DEFINE ARCH = IA32 X64
|
||||||
@ -243,10 +243,10 @@ class ValueExpression(BaseExpression):
|
|||||||
def Eval(Operator, Oprand1, Oprand2 = None):
|
def Eval(Operator, Oprand1, Oprand2 = None):
|
||||||
WrnExp = None
|
WrnExp = None
|
||||||
|
|
||||||
if Operator not in ["==", "!=", ">=", "<=", ">", "<", "in", "not in"] and \
|
if Operator not in {"==", "!=", ">=", "<=", ">", "<", "in", "not in"} and \
|
||||||
(type(Oprand1) == type('') or type(Oprand2) == type('')):
|
(type(Oprand1) == type('') or type(Oprand2) == type('')):
|
||||||
raise BadExpression(ERR_STRING_EXPR % Operator)
|
raise BadExpression(ERR_STRING_EXPR % Operator)
|
||||||
if Operator in ['in', 'not in']:
|
if Operator in {'in', 'not in'}:
|
||||||
if type(Oprand1) != type(''):
|
if type(Oprand1) != type(''):
|
||||||
Oprand1 = IntToStr(Oprand1)
|
Oprand1 = IntToStr(Oprand1)
|
||||||
if type(Oprand2) != type(''):
|
if type(Oprand2) != type(''):
|
||||||
@ -259,19 +259,19 @@ class ValueExpression(BaseExpression):
|
|||||||
}
|
}
|
||||||
|
|
||||||
EvalStr = ''
|
EvalStr = ''
|
||||||
if Operator in ["!", "NOT", "not"]:
|
if Operator in {"!", "NOT", "not"}:
|
||||||
if type(Oprand1) == type(''):
|
if type(Oprand1) == type(''):
|
||||||
raise BadExpression(ERR_STRING_EXPR % Operator)
|
raise BadExpression(ERR_STRING_EXPR % Operator)
|
||||||
EvalStr = 'not Oprand1'
|
EvalStr = 'not Oprand1'
|
||||||
elif Operator in ["~"]:
|
elif Operator in {"~"}:
|
||||||
if type(Oprand1) == type(''):
|
if type(Oprand1) == type(''):
|
||||||
raise BadExpression(ERR_STRING_EXPR % Operator)
|
raise BadExpression(ERR_STRING_EXPR % Operator)
|
||||||
EvalStr = '~ Oprand1'
|
EvalStr = '~ Oprand1'
|
||||||
else:
|
else:
|
||||||
if Operator in ["+", "-"] and (type(True) in [type(Oprand1), type(Oprand2)]):
|
if Operator in {"+", "-"} and (type(True) in {type(Oprand1), type(Oprand2)}):
|
||||||
# Boolean in '+'/'-' will be evaluated but raise warning
|
# Boolean in '+'/'-' will be evaluated but raise warning
|
||||||
WrnExp = WrnExpression(WRN_BOOL_EXPR)
|
WrnExp = WrnExpression(WRN_BOOL_EXPR)
|
||||||
elif type('') in [type(Oprand1), type(Oprand2)] and type(Oprand1)!= type(Oprand2):
|
elif type('') in {type(Oprand1), type(Oprand2)} and type(Oprand1)!= type(Oprand2):
|
||||||
# == between string and number/boolean will always return False, != return True
|
# == between string and number/boolean will always return False, != return True
|
||||||
if Operator == "==":
|
if Operator == "==":
|
||||||
WrnExp = WrnExpression(WRN_EQCMP_STR_OTHERS)
|
WrnExp = WrnExpression(WRN_EQCMP_STR_OTHERS)
|
||||||
@ -284,10 +284,10 @@ class ValueExpression(BaseExpression):
|
|||||||
else:
|
else:
|
||||||
raise BadExpression(ERR_RELCMP_STR_OTHERS % Operator)
|
raise BadExpression(ERR_RELCMP_STR_OTHERS % Operator)
|
||||||
elif TypeDict[type(Oprand1)] != TypeDict[type(Oprand2)]:
|
elif TypeDict[type(Oprand1)] != TypeDict[type(Oprand2)]:
|
||||||
if Operator in ["==", "!=", ">=", "<=", ">", "<"] and set((TypeDict[type(Oprand1)], TypeDict[type(Oprand2)])) == set((TypeDict[type(True)], TypeDict[type(0)])):
|
if Operator in {"==", "!=", ">=", "<=", ">", "<"} and set((TypeDict[type(Oprand1)], TypeDict[type(Oprand2)])) == set((TypeDict[type(True)], TypeDict[type(0)])):
|
||||||
# comparison between number and boolean is allowed
|
# comparison between number and boolean is allowed
|
||||||
pass
|
pass
|
||||||
elif Operator in ['&', '|', '^', "and", "or"] and set((TypeDict[type(Oprand1)], TypeDict[type(Oprand2)])) == set((TypeDict[type(True)], TypeDict[type(0)])):
|
elif Operator in {'&', '|', '^', "and", "or"} and set((TypeDict[type(Oprand1)], TypeDict[type(Oprand2)])) == set((TypeDict[type(True)], TypeDict[type(0)])):
|
||||||
# bitwise and logical operation between number and boolean is allowed
|
# bitwise and logical operation between number and boolean is allowed
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
@ -310,7 +310,7 @@ class ValueExpression(BaseExpression):
|
|||||||
except Exception, Excpt:
|
except Exception, Excpt:
|
||||||
raise BadExpression(str(Excpt))
|
raise BadExpression(str(Excpt))
|
||||||
|
|
||||||
if Operator in ['and', 'or']:
|
if Operator in {'and', 'or'}:
|
||||||
if Val:
|
if Val:
|
||||||
Val = True
|
Val = True
|
||||||
else:
|
else:
|
||||||
@ -410,13 +410,13 @@ class ValueExpression(BaseExpression):
|
|||||||
|
|
||||||
# Template function to parse binary operators which have same precedence
|
# Template function to parse binary operators which have same precedence
|
||||||
# Expr [Operator Expr]*
|
# Expr [Operator Expr]*
|
||||||
def _ExprFuncTemplate(self, EvalFunc, OpLst):
|
def _ExprFuncTemplate(self, EvalFunc, OpSet):
|
||||||
Val = EvalFunc()
|
Val = EvalFunc()
|
||||||
while self._IsOperator(OpLst):
|
while self._IsOperator(OpSet):
|
||||||
Op = self._Token
|
Op = self._Token
|
||||||
if Op == '?':
|
if Op == '?':
|
||||||
Val2 = EvalFunc()
|
Val2 = EvalFunc()
|
||||||
if self._IsOperator(':'):
|
if self._IsOperator({':'}):
|
||||||
Val3 = EvalFunc()
|
Val3 = EvalFunc()
|
||||||
if Val:
|
if Val:
|
||||||
Val = Val2
|
Val = Val2
|
||||||
@ -431,35 +431,35 @@ class ValueExpression(BaseExpression):
|
|||||||
return Val
|
return Val
|
||||||
# A [? B]*
|
# A [? B]*
|
||||||
def _ConExpr(self):
|
def _ConExpr(self):
|
||||||
return self._ExprFuncTemplate(self._OrExpr, ['?', ':'])
|
return self._ExprFuncTemplate(self._OrExpr, {'?', ':'})
|
||||||
|
|
||||||
# A [|| B]*
|
# A [|| B]*
|
||||||
def _OrExpr(self):
|
def _OrExpr(self):
|
||||||
return self._ExprFuncTemplate(self._AndExpr, ["OR", "or", "||"])
|
return self._ExprFuncTemplate(self._AndExpr, {"OR", "or", "||"})
|
||||||
|
|
||||||
# A [&& B]*
|
# A [&& B]*
|
||||||
def _AndExpr(self):
|
def _AndExpr(self):
|
||||||
return self._ExprFuncTemplate(self._BitOr, ["AND", "and", "&&"])
|
return self._ExprFuncTemplate(self._BitOr, {"AND", "and", "&&"})
|
||||||
|
|
||||||
# A [ | B]*
|
# A [ | B]*
|
||||||
def _BitOr(self):
|
def _BitOr(self):
|
||||||
return self._ExprFuncTemplate(self._BitXor, ["|"])
|
return self._ExprFuncTemplate(self._BitXor, {"|"})
|
||||||
|
|
||||||
# A [ ^ B]*
|
# A [ ^ B]*
|
||||||
def _BitXor(self):
|
def _BitXor(self):
|
||||||
return self._ExprFuncTemplate(self._BitAnd, ["XOR", "xor", "^"])
|
return self._ExprFuncTemplate(self._BitAnd, {"XOR", "xor", "^"})
|
||||||
|
|
||||||
# A [ & B]*
|
# A [ & B]*
|
||||||
def _BitAnd(self):
|
def _BitAnd(self):
|
||||||
return self._ExprFuncTemplate(self._EqExpr, ["&"])
|
return self._ExprFuncTemplate(self._EqExpr, {"&"})
|
||||||
|
|
||||||
# A [ == B]*
|
# A [ == B]*
|
||||||
def _EqExpr(self):
|
def _EqExpr(self):
|
||||||
Val = self._RelExpr()
|
Val = self._RelExpr()
|
||||||
while self._IsOperator(["==", "!=", "EQ", "NE", "IN", "in", "!", "NOT", "not"]):
|
while self._IsOperator({"==", "!=", "EQ", "NE", "IN", "in", "!", "NOT", "not"}):
|
||||||
Op = self._Token
|
Op = self._Token
|
||||||
if Op in ["!", "NOT", "not"]:
|
if Op in {"!", "NOT", "not"}:
|
||||||
if not self._IsOperator(["IN", "in"]):
|
if not self._IsOperator({"IN", "in"}):
|
||||||
raise BadExpression(ERR_REL_NOT_IN)
|
raise BadExpression(ERR_REL_NOT_IN)
|
||||||
Op += ' ' + self._Token
|
Op += ' ' + self._Token
|
||||||
try:
|
try:
|
||||||
@ -471,29 +471,29 @@ class ValueExpression(BaseExpression):
|
|||||||
|
|
||||||
# A [ > B]*
|
# A [ > B]*
|
||||||
def _RelExpr(self):
|
def _RelExpr(self):
|
||||||
return self._ExprFuncTemplate(self._ShiftExpr, ["<=", ">=", "<", ">", "LE", "GE", "LT", "GT"])
|
return self._ExprFuncTemplate(self._ShiftExpr, {"<=", ">=", "<", ">", "LE", "GE", "LT", "GT"})
|
||||||
|
|
||||||
def _ShiftExpr(self):
|
def _ShiftExpr(self):
|
||||||
return self._ExprFuncTemplate(self._AddExpr, ["<<", ">>"])
|
return self._ExprFuncTemplate(self._AddExpr, {"<<", ">>"})
|
||||||
|
|
||||||
# A [ + B]*
|
# A [ + B]*
|
||||||
def _AddExpr(self):
|
def _AddExpr(self):
|
||||||
return self._ExprFuncTemplate(self._MulExpr, ["+", "-"])
|
return self._ExprFuncTemplate(self._MulExpr, {"+", "-"})
|
||||||
|
|
||||||
# A [ * B]*
|
# A [ * B]*
|
||||||
def _MulExpr(self):
|
def _MulExpr(self):
|
||||||
return self._ExprFuncTemplate(self._UnaryExpr, ["*", "/", "%"])
|
return self._ExprFuncTemplate(self._UnaryExpr, {"*", "/", "%"})
|
||||||
|
|
||||||
# [!]*A
|
# [!]*A
|
||||||
def _UnaryExpr(self):
|
def _UnaryExpr(self):
|
||||||
if self._IsOperator(["!", "NOT", "not"]):
|
if self._IsOperator({"!", "NOT", "not"}):
|
||||||
Val = self._UnaryExpr()
|
Val = self._UnaryExpr()
|
||||||
try:
|
try:
|
||||||
return self.Eval('not', Val)
|
return self.Eval('not', Val)
|
||||||
except WrnExpression, Warn:
|
except WrnExpression, Warn:
|
||||||
self._WarnExcept = Warn
|
self._WarnExcept = Warn
|
||||||
return Warn.result
|
return Warn.result
|
||||||
if self._IsOperator(["~"]):
|
if self._IsOperator({"~"}):
|
||||||
Val = self._UnaryExpr()
|
Val = self._UnaryExpr()
|
||||||
try:
|
try:
|
||||||
return self.Eval('~', Val)
|
return self.Eval('~', Val)
|
||||||
@ -531,7 +531,7 @@ class ValueExpression(BaseExpression):
|
|||||||
if self._Token.startswith('"') or self._Token.startswith('L"'):
|
if self._Token.startswith('"') or self._Token.startswith('L"'):
|
||||||
Flag = 0
|
Flag = 0
|
||||||
for Index in range(len(self._Token)):
|
for Index in range(len(self._Token)):
|
||||||
if self._Token[Index] in ['"']:
|
if self._Token[Index] in {'"'}:
|
||||||
if self._Token[Index - 1] == '\\':
|
if self._Token[Index - 1] == '\\':
|
||||||
continue
|
continue
|
||||||
Flag += 1
|
Flag += 1
|
||||||
@ -540,7 +540,7 @@ class ValueExpression(BaseExpression):
|
|||||||
if self._Token.startswith("'") or self._Token.startswith("L'"):
|
if self._Token.startswith("'") or self._Token.startswith("L'"):
|
||||||
Flag = 0
|
Flag = 0
|
||||||
for Index in range(len(self._Token)):
|
for Index in range(len(self._Token)):
|
||||||
if self._Token[Index] in ["'"]:
|
if self._Token[Index] in {"'"}:
|
||||||
if self._Token[Index - 1] == '\\':
|
if self._Token[Index - 1] == '\\':
|
||||||
continue
|
continue
|
||||||
Flag += 1
|
Flag += 1
|
||||||
@ -645,9 +645,9 @@ class ValueExpression(BaseExpression):
|
|||||||
|
|
||||||
if self._Token.startswith('"'):
|
if self._Token.startswith('"'):
|
||||||
self._Token = self._Token[1:-1]
|
self._Token = self._Token[1:-1]
|
||||||
elif self._Token in ["FALSE", "false", "False"]:
|
elif self._Token in {"FALSE", "false", "False"}:
|
||||||
self._Token = False
|
self._Token = False
|
||||||
elif self._Token in ["TRUE", "true", "True"]:
|
elif self._Token in {"TRUE", "true", "True"}:
|
||||||
self._Token = True
|
self._Token = True
|
||||||
else:
|
else:
|
||||||
self.__IsNumberToken()
|
self.__IsNumberToken()
|
||||||
@ -841,7 +841,7 @@ class ValueExpressionEx(ValueExpression):
|
|||||||
elif Item.startswith(TAB_UINT64):
|
elif Item.startswith(TAB_UINT64):
|
||||||
ItemSize = 8
|
ItemSize = 8
|
||||||
ValueType = TAB_UINT64
|
ValueType = TAB_UINT64
|
||||||
elif Item[0] in ['"',"'",'L']:
|
elif Item[0] in {'"',"'",'L'}:
|
||||||
ItemSize = 0
|
ItemSize = 0
|
||||||
ValueType = TAB_VOID
|
ValueType = TAB_VOID
|
||||||
else:
|
else:
|
||||||
@ -998,7 +998,7 @@ class ValueExpressionEx(ValueExpression):
|
|||||||
Item = '0x%x' % TmpValue if type(TmpValue) != type('') else TmpValue
|
Item = '0x%x' % TmpValue if type(TmpValue) != type('') else TmpValue
|
||||||
if ItemSize == 0:
|
if ItemSize == 0:
|
||||||
ItemValue, ItemSize = ParseFieldValue(Item)
|
ItemValue, ItemSize = ParseFieldValue(Item)
|
||||||
if Item[0] not in ['"','L','{'] and ItemSize > 1:
|
if Item[0] not in {'"','L','{'} and ItemSize > 1:
|
||||||
raise BadExpression("Byte array number %s should less than 0xFF." % Item)
|
raise BadExpression("Byte array number %s should less than 0xFF." % Item)
|
||||||
else:
|
else:
|
||||||
ItemValue = ParseFieldValue(Item)[0]
|
ItemValue = ParseFieldValue(Item)[0]
|
||||||
|
@ -416,9 +416,9 @@ class RangeExpression(BaseExpression):
|
|||||||
|
|
||||||
# Template function to parse binary operators which have same precedence
|
# Template function to parse binary operators which have same precedence
|
||||||
# Expr [Operator Expr]*
|
# Expr [Operator Expr]*
|
||||||
def _ExprFuncTemplate(self, EvalFunc, OpLst):
|
def _ExprFuncTemplate(self, EvalFunc, OpSet):
|
||||||
Val = EvalFunc()
|
Val = EvalFunc()
|
||||||
while self._IsOperator(OpLst):
|
while self._IsOperator(OpSet):
|
||||||
Op = self._Token
|
Op = self._Token
|
||||||
try:
|
try:
|
||||||
Val = self.Eval(Op, Val, EvalFunc())
|
Val = self.Eval(Op, Val, EvalFunc())
|
||||||
@ -429,18 +429,18 @@ class RangeExpression(BaseExpression):
|
|||||||
|
|
||||||
# A [|| B]*
|
# A [|| B]*
|
||||||
def _OrExpr(self):
|
def _OrExpr(self):
|
||||||
return self._ExprFuncTemplate(self._AndExpr, ["OR", "or"])
|
return self._ExprFuncTemplate(self._AndExpr, {"OR", "or"})
|
||||||
|
|
||||||
# A [&& B]*
|
# A [&& B]*
|
||||||
def _AndExpr(self):
|
def _AndExpr(self):
|
||||||
return self._ExprFuncTemplate(self._NeExpr, ["AND", "and"])
|
return self._ExprFuncTemplate(self._NeExpr, {"AND", "and"})
|
||||||
|
|
||||||
def _NeExpr(self):
|
def _NeExpr(self):
|
||||||
Val = self._RelExpr()
|
Val = self._RelExpr()
|
||||||
while self._IsOperator([ "!=", "NOT", "not"]):
|
while self._IsOperator({"!=", "NOT", "not"}):
|
||||||
Op = self._Token
|
Op = self._Token
|
||||||
if Op in ["!", "NOT", "not"]:
|
if Op in ["!", "NOT", "not"]:
|
||||||
if not self._IsOperator(["IN", "in"]):
|
if not self._IsOperator({"IN", "in"}):
|
||||||
raise BadExpression(ERR_REL_NOT_IN)
|
raise BadExpression(ERR_REL_NOT_IN)
|
||||||
Op += ' ' + self._Token
|
Op += ' ' + self._Token
|
||||||
try:
|
try:
|
||||||
@ -452,7 +452,7 @@ class RangeExpression(BaseExpression):
|
|||||||
|
|
||||||
# [!]*A
|
# [!]*A
|
||||||
def _RelExpr(self):
|
def _RelExpr(self):
|
||||||
if self._IsOperator(["NOT" , "LE", "GE", "LT", "GT", "EQ", "XOR"]):
|
if self._IsOperator({"NOT" , "LE", "GE", "LT", "GT", "EQ", "XOR"}):
|
||||||
Token = self._Token
|
Token = self._Token
|
||||||
Val = self._NeExpr()
|
Val = self._NeExpr()
|
||||||
try:
|
try:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user