Reviewed-by: Jaben Carsey <[email protected]>

> -----Original Message-----
> From: edk2-devel [mailto:[email protected]] On Behalf Of
> Yonghong Zhu
> Sent: Monday, October 15, 2018 5:45 AM
> To: [email protected]
> Cc: Gao, Liming <[email protected]>
> Subject: [edk2] [Patch] BaseTools: Add check for the string type whether is
> same
> 
> From: zhijufan <[email protected]>
> 
> 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 <[email protected]>
> Cc: Yonghong Zhu <[email protected]>
> Contributed-under: TianoCore Contribution Agreement 1.1
> Signed-off-by: Zhiju.Fan <[email protected]>
> ---
>  BaseTools/Source/Python/Common/Expression.py | 6 ++++--
>  1 file changed, 4 insertions(+), 2 deletions(-)
> 
> diff --git a/BaseTools/Source/Python/Common/Expression.py
> b/BaseTools/Source/Python/Common/Expression.py
> index 78c69fa..84898f7 100644
> --- a/BaseTools/Source/Python/Common/Expression.py
> +++ b/BaseTools/Source/Python/Common/Expression.py
> @@ -295,12 +295,12 @@ class ValueExpression(BaseExpression):
>                      # bitwise and logical operation between number and 
> boolean is
> allowed
>                      pass
>                  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()
>              EvalStr = 'Oprand1 ' + Operator + ' Oprand2'
> 
> @@ -825,10 +825,12 @@ class ValueExpressionEx(ValueExpression):
>          except BadExpression as Value:
>              if self.PcdType in TAB_PCD_NUMERIC_TYPES:
>                  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
>                      ValueType = ''
>                      for Item in PcdValue:
> --
> 2.6.1.windows.1
> 
> _______________________________________________
> edk2-devel mailing list
> [email protected]
> https://lists.01.org/mailman/listinfo/edk2-devel
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to