- for I in range((TmpValue.bit_length() + 7) / 8):\r
- TmpList.append('0x%02x' % ((TmpValue >> I * 8) & 0xff))\r
- PcdValue = '{' + ', '.join(TmpList) + '}'\r
- except:\r
- if PcdValue.strip().startswith('{'):\r
- PcdValue = PcdValue.strip()[1:-1].strip()\r
- Size = 0\r
- ValueStr = ''\r
- TokenSpaceGuidName = ''\r
- if PcdValue.startswith('GUID') and PcdValue.endswith(')'):\r
- try:\r
- TokenSpaceGuidName = re.search('GUID\((\w+)\)', PcdValue).group(1)\r
- except:\r
- pass\r
- if TokenSpaceGuidName and TokenSpaceGuidName in self._Symb:\r
- PcdValue = 'GUID(' + self._Symb[TokenSpaceGuidName] + ')'\r
- elif TokenSpaceGuidName:\r
- raise BadExpression('%s not found in DEC file' % TokenSpaceGuidName)\r
-\r
- ListItem, Size = ParseFieldValue(PcdValue)\r
- elif PcdValue.startswith('DEVICE_PATH') and PcdValue.endswith(')'):\r
- ListItem, Size = ParseFieldValue(PcdValue)\r
- else:\r
- ListItem = PcdValue.split(',')\r
-\r
- if type(ListItem) == type(0) or type(ListItem) == type(0L):\r
- for Index in range(0, Size):\r
- ValueStr += '0x%02X' % (int(ListItem) & 255)\r
- ListItem >>= 8\r
- ValueStr += ', '\r
- PcdValue = '{' + ValueStr[:-2] + '}'\r
- elif type(ListItem) == type(''):\r
- if ListItem.startswith('{') and ListItem.endswith('}'):\r
- PcdValue = ListItem\r
+ try:\r
+ TmpValue, Size = ParseFieldValue(PcdValue)\r
+ except BadExpression, Value:\r
+ raise BadExpression("Type: %s, Value: %s, %s" % (self.PcdType, PcdValue, Value))\r
+ if type(TmpValue) == type(''):\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
+ raise BadExpression('Type %s PCD Value is negative' % self.PcdType)\r
+ if self.PcdType == 'UINT8' and Size > 1:\r
+ raise BadExpression('Type %s PCD Value Size is Larger than 1 byte' % self.PcdType)\r
+ if self.PcdType == 'UINT16' and Size > 2:\r
+ raise BadExpression('Type %s PCD Value Size is Larger than 2 byte' % self.PcdType)\r
+ if self.PcdType == 'UINT32' and Size > 4:\r
+ raise BadExpression('Type %s PCD Value Size is Larger than 4 byte' % self.PcdType)\r
+ if self.PcdType == 'UINT64' and Size > 8:\r
+ raise BadExpression('Type %s PCD Value Size is Larger than 8 byte' % self.PcdType)\r
+ else:\r
+ try:\r
+ TmpValue = long(PcdValue)\r
+ TmpList = []\r
+ if TmpValue.bit_length() == 0:\r
+ PcdValue = '{0x00}'\r