- PcdValue = PcdValue.strip()[1:-1].strip()\r
- Size = 0\r
- ValueStr = ''\r
- TokenSpaceGuidName = ''\r
- if PcdValue.startswith('GUID') and PcdValue.endswith(')'):\r
+ PcdValueList = SplitPcdValueString(PcdValue.strip()[1:-1])\r
+ LabelDict = {}\r
+ NewPcdValueList = []\r
+ LabelOffset = 0\r
+ for Item in PcdValueList:\r
+ # compute byte offset of every LABEL\r
+ LabelList = _ReLabel.findall(Item)\r
+ Item = _ReLabel.sub('', Item)\r
+ Item = Item.strip()\r
+ if LabelList:\r
+ for Label in LabelList:\r
+ if not IsValidCName(Label):\r
+ raise BadExpression('%s is not a valid c variable name' % Label)\r
+ if Label not in LabelDict.keys():\r
+ LabelDict[Label] = str(LabelOffset)\r
+ if Item.startswith('UINT8'):\r
+ LabelOffset = LabelOffset + 1\r
+ elif Item.startswith('UINT16'):\r
+ LabelOffset = LabelOffset + 2\r
+ elif Item.startswith('UINT32'):\r
+ LabelOffset = LabelOffset + 4\r
+ elif Item.startswith('UINT64'):\r
+ LabelOffset = LabelOffset + 8\r
+ else:\r
+ try:\r
+ ItemValue, ItemSize = ParseFieldValue(Item)\r
+ LabelOffset = LabelOffset + ItemSize\r
+ except:\r
+ LabelOffset = LabelOffset + 1\r
+\r
+ for Item in PcdValueList:\r
+ # for LABEL parse\r
+ Item = Item.strip()\r