]> git.proxmox.com Git - mirror_edk2.git/commitdiff
BaseTools: Add check for the string type whether is same
authorzhijufan <zhijux.fan@intel.com>
Mon, 15 Oct 2018 01:02:31 +0000 (09:02 +0800)
committerYonghong Zhu <yonghong.zhu@intel.com>
Tue, 16 Oct 2018 06:44:50 +0000 (14:44 +0800)
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>
BaseTools/Source/Python/Common/Expression.py

index ff9271031b0e3351e441fdd4ff195212e1b64dd2..e398f7a034319fa9765f75aa8898f9f5fa54ea28 100644 (file)
@@ -297,8 +297,8 @@ class ValueExpression(BaseExpression):
                 else:\r
                     raise BadExpression(ERR_EXPR_TYPE)\r
             if isinstance(Oprand1, type('')) and isinstance(Oprand2, type('')):\r
-                if (Oprand1.startswith('L"') and not Oprand2.startswith('L"')) or \\r
-                    (not Oprand1.startswith('L"') and Oprand2.startswith('L"')):\r
+                if ((Oprand1.startswith('L"') or Oprand1.startswith('L')) and (not Oprand2.startswith('L"')) and (not Oprand2.startswith("L'"))) or \\r
+                        (((not Oprand1.startswith('L"')) and (not Oprand1.startswith("L'"))) and (Oprand2.startswith('L"') or Oprand2.startswith('L'))):\r
                     raise BadExpression(ERR_STRING_CMP % (Oprand1, Operator, Oprand2))\r
             if 'in' in Operator and isinstance(Oprand2, type('')):\r
                 Oprand2 = Oprand2.split()\r
@@ -827,6 +827,8 @@ class ValueExpressionEx(ValueExpression):
                 PcdValue = PcdValue.strip()\r
                 if PcdValue.startswith('{') and PcdValue.endswith('}'):\r
                     PcdValue = SplitPcdValueString(PcdValue[1:-1])\r
+                if ERR_STRING_CMP.split(':')[0] in Value.message:\r
+                    raise BadExpression("Type: %s, Value: %s, %s" % (self.PcdType, PcdValue, Value))\r
                 if isinstance(PcdValue, type([])):\r
                     TmpValue = 0\r
                     Size = 0\r