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
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
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
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
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
\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
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
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