]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/Common/Expression.py
BaseTools: Update Expression.py for string comparison and MACRO replace issue
[mirror_edk2.git] / BaseTools / Source / Python / Common / Expression.py
index 6a1103df2ce02097538d3110fc693d22a7dd33df..a19f35d99161fd5ed7eaaae6a09d0fc0ccfc5684 100644 (file)
@@ -157,19 +157,9 @@ class ValueExpression(object):
     def Eval(Operator, Oprand1, Oprand2 = None):\r
         WrnExp = None\r
 \r
-        if Operator not in ["in", "not in"] and (type(Oprand1) == type('') or type(Oprand2) == type('')):\r
-            if type(Oprand1) == type(''):\r
-                if Oprand1[0] in ['"', "'"] or Oprand1.startswith('L"') or Oprand1.startswith("L'")or Oprand1.startswith('UINT'):\r
-                    Oprand1, Size = ParseFieldValue(Oprand1)\r
-                else:\r
-                    Oprand1,Size = ParseFieldValue('"' + Oprand1 + '"')\r
-            if type(Oprand2) == type(''):\r
-                if Oprand2[0] in ['"', "'"] or Oprand2.startswith('L"') or Oprand2.startswith("L'") or Oprand2.startswith('UINT'):\r
-                    Oprand2, Size = ParseFieldValue(Oprand2)\r
-                else:\r
-                    Oprand2, Size = ParseFieldValue('"' + Oprand2 + '"')\r
-            if type(Oprand1) == type('') or type(Oprand2) == type(''):\r
-                raise BadExpression(ERR_STRING_EXPR % Operator)\r
+        if Operator not in ["==", "!=", ">=", "<=", ">", "<", "in", "not in"] and \\r
+            (type(Oprand1) == type('') or type(Oprand2) == type('')):\r
+            raise BadExpression(ERR_STRING_EXPR % Operator)\r
         if Operator in ['in', 'not in']:\r
             if type(Oprand1) != type(''):\r
                 Oprand1 = IntToStr(Oprand1)\r
@@ -296,8 +286,6 @@ class ValueExpression(object):
             except BadExpression:\r
                 pass\r
             if type(Token) == type('') and Token.startswith('{') and Token.endswith('}') and self._Idx >= self._Len:\r
-                if len(Token) != len(self._Expr.replace(' ', '')):\r
-                    raise BadExpression\r
                 return self._Expr\r
 \r
             self._Idx = 0\r
@@ -459,7 +447,6 @@ class ValueExpression(object):
                 if self._Token[Index] in ['"']:\r
                     Flag += 1\r
             if Flag == 2 and self._Token.endswith('"'):\r
-                self._Token = ParseFieldValue(self._Token)[0]\r
                 return True\r
         if self._Token.startswith("'") or self._Token.startswith("L'"):\r
             Flag = 0\r
@@ -467,7 +454,6 @@ class ValueExpression(object):
                 if self._Token[Index] in ["'"]:\r
                     Flag += 1\r
             if Flag == 2 and self._Token.endswith("'"):\r
-                self._Token = ParseFieldValue(self._Token)[0]\r
                 return True\r
         try:\r
             self._Token = int(self._Token, Radix)\r
@@ -622,24 +608,16 @@ class ValueExpression(object):
             self._Idx += 1\r
             UStr = self.__GetString()\r
             self._Token = 'L"' + UStr + '"'\r
-            self._Token, Size = ParseFieldValue(self._Token)\r
             return self._Token\r
         elif Expr.startswith("L'"):\r
             # Skip L\r
             self._Idx += 1\r
             UStr = self.__GetString()\r
             self._Token = "L'" + UStr + "'"\r
-            self._Token, Size = ParseFieldValue(self._Token)\r
-            return self._Token\r
-        elif Expr.startswith('"'):\r
-            UStr = self.__GetString()\r
-            self._Token = '"' + UStr + '"'\r
-            self._Token, Size = ParseFieldValue(self._Token)\r
             return self._Token\r
         elif Expr.startswith("'"):\r
             UStr = self.__GetString()\r
             self._Token = "'" + UStr + "'"\r
-            self._Token, Size = ParseFieldValue(self._Token)\r
             return self._Token\r
         elif Expr.startswith('UINT'):\r
             Re = re.compile('(?:UINT8|UINT16|UINT32|UINT64)\((.+)\)')\r
@@ -751,7 +729,7 @@ class ValueExpressionEx(ValueExpression):
                 raise BadExpression\r
         except WrnExpression, Value:\r
             PcdValue = Value.result\r
-        except BadExpression:\r
+        except BadExpression, Value:\r
             if self.PcdType in ['UINT8', 'UINT16', 'UINT32', 'UINT64', 'BOOLEAN']:\r
                 PcdValue = PcdValue.strip()\r
                 if type(PcdValue) == type('') and PcdValue.startswith('{') and PcdValue.endswith('}'):\r
@@ -785,10 +763,13 @@ class ValueExpressionEx(ValueExpression):
                 else:\r
                     try:\r
                         TmpValue, Size = ParseFieldValue(PcdValue)\r
-                    except BadExpression:\r
-                        raise BadExpression("Type: %s, Value: %s, format or value error" % (self.PcdType, PcdValue))\r
+                    except BadExpression, Value:\r
+                        raise BadExpression("Type: %s, Value: %s, %s" % (self.PcdType, PcdValue, Value))\r
                 if type(TmpValue) == type(''):\r
-                    TmpValue = int(TmpValue)\r
+                    try:\r
+                        TmpValue = int(TmpValue)\r
+                    except:\r
+                        raise  BadExpression(Value)\r
                 else:\r
                     PcdValue = '0x%0{}X'.format(Size) % (TmpValue)\r
                 if TmpValue < 0:\r
@@ -898,7 +879,7 @@ class ValueExpressionEx(ValueExpression):
                             if Size > 0:\r
                                 PcdValue = '{' + ValueStr[:-2] + '}'\r
                     else:\r
-                        raise  BadExpression("Type: %s, Value: %s, format or value error"%(self.PcdType, PcdValue))\r
+                        raise  BadExpression("Type: %s, Value: %s, %s"%(self.PcdType, PcdValue, Value))\r
 \r
         if PcdValue == 'True':\r
             PcdValue = '1'\r