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:
		
				
					committed by
					
						 Yonghong Zhu
						Yonghong Zhu
					
				
			
			
				
	
			
			
			
						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: | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user