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