]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/Common/RangeExpression.py
BaseTools: GenFds - simplify testing for Hex number
[mirror_edk2.git] / BaseTools / Source / Python / Common / RangeExpression.py
index 5fcc8a432a565a2bc88947175fc03769f45ff60c..4d07bd752330efb80d2ce80d9f896ccd4dbcbbff 100644 (file)
@@ -16,6 +16,8 @@ from Common.GlobalData import *
 from CommonDataClass.Exceptions import BadExpression\r
 from CommonDataClass.Exceptions import WrnExpression\r
 import uuid\r
+from Common.Expression import PcdPattern\r
+from Common.DataType import *\r
 \r
 ERR_STRING_EXPR = 'This operator cannot be used in string expression: [%s].'\r
 ERR_SNYTAX = 'Syntax error, the rest of expression cannot be evaluated: [%s].'\r
@@ -38,16 +40,6 @@ ERR_ARRAY_ELE = 'This must be HEX value for NList or Array: [%s].'
 ERR_EMPTY_EXPR = 'Empty expression is not allowed.'\r
 ERR_IN_OPERAND = 'Macro after IN operator can only be: $(FAMILY), $(ARCH), $(TOOL_CHAIN_TAG) and $(TARGET).'\r
 \r
-def MaxOfType(DataType):\r
-    if DataType == 'UINT8':\r
-        return int('0xFF', 16)\r
-    if DataType == 'UINT16':\r
-        return int('0xFFFF', 16)\r
-    if DataType == 'UINT32':\r
-        return int('0xFFFFFFFF', 16)\r
-    if DataType == 'UINT64':\r
-        return int('0xFFFFFFFFFFFFFFFF', 16)\r
-\r
 class RangeObject(object):\r
     def __init__(self, start, end, empty = False):\r
         \r
@@ -110,7 +102,7 @@ class XOROperatorObject(object):
         rangeId = str(uuid.uuid1())\r
         rangeContainer = RangeContainer()\r
         rangeContainer.push(RangeObject(0, int(Operand) - 1))\r
-        rangeContainer.push(RangeObject(int(Operand) + 1, MaxOfType(DataType)))\r
+        rangeContainer.push(RangeObject(int(Operand) + 1, MAX_VAL_TYPE[DataType]))\r
         SymbolTable[rangeId] = rangeContainer\r
         return rangeId\r
 \r
@@ -148,7 +140,7 @@ class GEOperatorObject(object):
             raise BadExpression(ERR_SNYTAX % Expr)\r
         rangeId1 = str(uuid.uuid1())\r
         rangeContainer = RangeContainer()\r
-        rangeContainer.push(RangeObject(int(Operand), MaxOfType(DataType)))\r
+        rangeContainer.push(RangeObject(int(Operand), MAX_VAL_TYPE[DataType]))\r
         SymbolTable[rangeId1] = rangeContainer\r
         return rangeId1   \r
       \r
@@ -161,7 +153,7 @@ class GTOperatorObject(object):
             raise BadExpression(ERR_SNYTAX % Expr)\r
         rangeId1 = str(uuid.uuid1())\r
         rangeContainer = RangeContainer()\r
-        rangeContainer.push(RangeObject(int(Operand) + 1, MaxOfType(DataType)))\r
+        rangeContainer.push(RangeObject(int(Operand) + 1, MAX_VAL_TYPE[DataType]))\r
         SymbolTable[rangeId1] = rangeContainer\r
         return rangeId1   \r
     \r
@@ -209,8 +201,6 @@ class RangeExpression(object):
 \r
     NonLetterOpLst = ['+', '-', '&', '|', '^', '!', '=', '>', '<']\r
 \r
-    PcdPattern = re.compile(r'[_a-zA-Z][0-9A-Za-z_]*\.[_a-zA-Z][0-9A-Za-z_]*$')\r
-    \r
     RangePattern = re.compile(r'[0-9]+ - [0-9]+')\r
 \r
     def preProcessRangeExpr(self, expr):\r
@@ -308,18 +298,18 @@ class RangeExpression(object):
             rangeContainer = RangeContainer()\r
             rangeid = str(uuid.uuid1())\r
             if rangeobj.empty:\r
-                rangeContainer.push(RangeObject(0, MaxOfType(self.PcdDataType)))\r
+                rangeContainer.push(RangeObject(0, MAX_VAL_TYPE[self.PcdDataType]))\r
             else:\r
                 if rangeobj.start > 0:\r
                     rangeContainer.push(RangeObject(0, rangeobj.start - 1))\r
-                if rangeobj.end < MaxOfType(self.PcdDataType):\r
-                    rangeContainer.push(RangeObject(rangeobj.end + 1, MaxOfType(self.PcdDataType)))\r
+                if rangeobj.end < MAX_VAL_TYPE[self.PcdDataType]:\r
+                    rangeContainer.push(RangeObject(rangeobj.end + 1, MAX_VAL_TYPE[self.PcdDataType]))\r
             self.operanddict[rangeid] = rangeContainer\r
             rangeids.append(rangeid)\r
 \r
         if len(rangeids) == 0:\r
             rangeContainer = RangeContainer()\r
-            rangeContainer.push(RangeObject(0, MaxOfType(self.PcdDataType)))\r
+            rangeContainer.push(RangeObject(0, MAX_VAL_TYPE[self.PcdDataType]))\r
             rangeid = str(uuid.uuid1())\r
             self.operanddict[rangeid] = rangeContainer\r
             return rangeid\r
@@ -573,7 +563,7 @@ class RangeExpression(object):
             raise BadExpression(ERR_EMPTY_TOKEN)\r
 \r
         # PCD token\r
-        if self.PcdPattern.match(self._Token):\r
+        if PcdPattern.match(self._Token):\r
             if self._Token not in self._Symb:\r
                 Ex = BadExpression(ERR_PCD_RESOLVE % self._Token)\r
                 Ex.Pcd = self._Token\r