]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/Common/RangeExpression.py
BaseTools: use new shared GUID regular expressions
[mirror_edk2.git] / BaseTools / Source / Python / Common / RangeExpression.py
index 5da4a476f4fab1fc6d3a5efee94e490ac20a8db5..540f95728072b8b8666e56e0eff757ae11753104 100644 (file)
@@ -1,7 +1,7 @@
 # # @file\r
 # This file is used to parse and evaluate range expression in Pcd declaration.\r
 #\r
-# Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>\r
+# Copyright (c) 2015 - 2018, Intel Corporation. All rights reserved.<BR>\r
 # This program and the accompanying materials\r
 # are licensed and made available under the terms and conditions of the BSD License\r
 # which accompanies this distribution.    The full text of the license may be found at\r
@@ -211,15 +211,6 @@ class RangeExpression(object):
 \r
     PcdPattern = re.compile(r'[_a-zA-Z][0-9A-Za-z_]*\.[_a-zA-Z][0-9A-Za-z_]*$')\r
     HexPattern = re.compile(r'0[xX][0-9a-fA-F]+')\r
-    RegGuidPattern = re.compile(r'[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}')\r
-    ExRegGuidPattern = re.compile(r'[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$')\r
-    \r
-    SymbolPattern = re.compile("("\r
-                                 "\$\([A-Z][A-Z0-9_]*\)|\$\(\w+\.\w+\)|\w+\.\w+|"\r
-                                 "&&|\|\||!(?!=)|"\r
-                                 "(?<=\W)AND(?=\W)|(?<=\W)OR(?=\W)|(?<=\W)NOT(?=\W)|(?<=\W)XOR(?=\W)|"\r
-                                 "(?<=\W)EQ(?=\W)|(?<=\W)NE(?=\W)|(?<=\W)GT(?=\W)|(?<=\W)LT(?=\W)|(?<=\W)GE(?=\W)|(?<=\W)LE(?=\W)"\r
-                               ")")\r
     \r
     RangePattern = re.compile(r'[0-9]+ - [0-9]+')\r
 \r
@@ -263,28 +254,28 @@ class RangeExpression(object):
         rangeContainer = RangeContainer()\r
         for range1 in rangeContainer1.pop():\r
             for range2 in rangeContainer2.pop():\r
-                if range1.start >= range2.start:\r
-                    start = range1.start\r
-                    end = range1.end\r
-                    range1.start = range2.start\r
-                    range1.end = range2.end\r
-                    range2.start = start\r
-                    range2.end = end\r
+                start1 = range1.start\r
+                end1 = range1.end\r
+                start2 = range2.start\r
+                end2 = range2.end\r
+                if start1 >= start2:\r
+                    start1, start2 = start2, start1\r
+                    end1, end2 = end2, end1\r
                 if range1.empty:\r
                     rangeid = str(uuid.uuid1())\r
                     rangeContainer.push(RangeObject(0, 0, True))\r
-                if range1.end < range2.start:\r
+                if end1 < start2:\r
                     rangeid = str(uuid.uuid1())\r
                     rangeContainer.push(RangeObject(0, 0, True))\r
-                elif range1.end == range2.start:\r
+                elif end1 == start2:\r
                     rangeid = str(uuid.uuid1())\r
-                    rangeContainer.push(RangeObject(range1.end, range1.end))\r
-                elif range1.end <= range2.end and range1.end > range2.start:\r
+                    rangeContainer.push(RangeObject(end1, end1))\r
+                elif end1 <= end2 and end1 > start2:\r
                     rangeid = str(uuid.uuid1())\r
-                    rangeContainer.push(RangeObject(range2.start, range1.end))\r
-                elif range1.end >= range2.end:\r
+                    rangeContainer.push(RangeObject(start2, end1))\r
+                elif end1 >= end2:\r
                     rangeid = str(uuid.uuid1())\r
-                    rangeContainer.push(RangeObject(range2.start, range2.end))\r
+                    rangeContainer.push(RangeObject(start2, end2))\r
         \r
         self.operanddict[rangeid] = rangeContainer\r
 #        rangeContainer.dump()\r
@@ -348,18 +339,18 @@ class RangeExpression(object):
     def Eval(self, Operator, Oprand1, Oprand2 = None):\r
         \r
         if Operator in ["!", "NOT", "not"]:\r
-            if not self.RegGuidPattern.match(Oprand1.strip()):\r
+            if not gGuidPattern.match(Oprand1.strip()):\r
                 raise BadExpression(ERR_STRING_EXPR % Operator)\r
             return self.NegtiveRange(Oprand1)\r
         else:\r
             if Operator in ["==", ">=", "<=", ">", "<", '^']:\r
                 return self.EvalRange(Operator, Oprand1)\r
             elif Operator == 'and' :\r
-                if not self.ExRegGuidPattern.match(Oprand1.strip()) or not self.ExRegGuidPattern.match(Oprand2.strip()):\r
+                if not gGuidPatternEnd.match(Oprand1.strip()) or not gGuidPatternEnd.match(Oprand2.strip()):\r
                     raise BadExpression(ERR_STRING_EXPR % Operator)\r
                 return self.Rangeintersection(Oprand1, Oprand2)    \r
             elif Operator == 'or':\r
-                if not self.ExRegGuidPattern.match(Oprand1.strip()) or not self.ExRegGuidPattern.match(Oprand2.strip()):\r
+                if not gGuidPatternEnd.match(Oprand1.strip()) or not gGuidPatternEnd.match(Oprand2.strip()):\r
                     raise BadExpression(ERR_STRING_EXPR % Operator)\r
                 return self.Rangecollections(Oprand1, Oprand2)\r
             else:\r
@@ -417,7 +408,7 @@ class RangeExpression(object):
         # check if the expression does not need to evaluate\r
         if RealValue and Depth == 0:\r
             self._Token = self._Expr\r
-            if self.ExRegGuidPattern.match(self._Expr):\r
+            if gGuidPatternEnd.match(self._Expr):\r
                 return [self.operanddict[self._Expr] ]\r
 \r
             self._Idx = 0\r
@@ -664,7 +655,7 @@ class RangeExpression(object):
         self._Token = ''\r
         if Expr:\r
             Ch = Expr[0]\r
-            Match = self.RegGuidPattern.match(Expr)\r
+            Match = gGuidPattern.match(Expr)\r
             if Match and not Expr[Match.end():Match.end() + 1].isalnum() \\r
                 and Expr[Match.end():Match.end() + 1] != '_':\r
                 self._Idx += Match.end()\r