mirror of https://github.com/acidanthera/audk.git
BaseTools: Add check for the string type whether is same
Relational and equality operators require both operands to be of the same type. Treat the string 'A' and "A" as same type, but for "A" and L"A" are not same type since one is general string, another is unicode string. True:'A'<'B', "A"<"B" 'A'<"B", L'A'<L'B', L"A"<L"B", L'A'<L"B" Error:'A'<L'B', 'A'<L"B", "A'<L'B' Cc: Liming Gao <liming.gao@intel.com> Cc: Yonghong Zhu <yonghong.zhu@intel.com> Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Zhiju.Fan <zhijux.fan@intel.com> Reviewed-by: Jaben Carsey <jaben.carsey@intel.com>
This commit is contained in:
parent
aa52648c1e
commit
03c36c36a3
|
@ -297,8 +297,8 @@ class ValueExpression(BaseExpression):
|
|||
else:
|
||||
raise BadExpression(ERR_EXPR_TYPE)
|
||||
if isinstance(Oprand1, type('')) and isinstance(Oprand2, type('')):
|
||||
if (Oprand1.startswith('L"') and not Oprand2.startswith('L"')) or \
|
||||
(not Oprand1.startswith('L"') and Oprand2.startswith('L"')):
|
||||
if ((Oprand1.startswith('L"') or Oprand1.startswith('L')) and (not Oprand2.startswith('L"')) and (not Oprand2.startswith("L'"))) or \
|
||||
(((not Oprand1.startswith('L"')) and (not Oprand1.startswith("L'"))) and (Oprand2.startswith('L"') or Oprand2.startswith('L'))):
|
||||
raise BadExpression(ERR_STRING_CMP % (Oprand1, Operator, Oprand2))
|
||||
if 'in' in Operator and isinstance(Oprand2, type('')):
|
||||
Oprand2 = Oprand2.split()
|
||||
|
@ -827,6 +827,8 @@ class ValueExpressionEx(ValueExpression):
|
|||
PcdValue = PcdValue.strip()
|
||||
if PcdValue.startswith('{') and PcdValue.endswith('}'):
|
||||
PcdValue = SplitPcdValueString(PcdValue[1:-1])
|
||||
if ERR_STRING_CMP.split(':')[0] in Value.message:
|
||||
raise BadExpression("Type: %s, Value: %s, %s" % (self.PcdType, PcdValue, Value))
|
||||
if isinstance(PcdValue, type([])):
|
||||
TmpValue = 0
|
||||
Size = 0
|
||||
|
|
Loading…
Reference in New Issue