import Common.EdkLogger as EdkLogger\r
import Common.GlobalData as GlobalData\r
import EccGlobalData\r
+import EccToolError\r
\r
from CommonDataClass.DataClass import *\r
from Common.DataType import *\r
if not IsValid:\r
EdkLogger.error('Parser', FORMAT_INVALID, Cause, ExtraData=self._CurrentLine,\r
File=self.MetaFile, Line=self._LineIndex+1)\r
+ \r
+ if EccGlobalData.gConfig.UniCheckPCDInfo == '1' or EccGlobalData.gConfig.UniCheckAll == '1' or EccGlobalData.gConfig.CheckAll == '1':\r
+ # check Description, Prompt information\r
+ PatternDesc = re.compile('##\s*([\x21-\x7E\s]*)', re.S)\r
+ PatternPrompt = re.compile('#\s+@Prompt\s+([\x21-\x7E\s]*)', re.S)\r
+ Description = None\r
+ Prompt = None\r
+ # check @ValidRange, @ValidList and @Expression format valid\r
+ ErrorCodeValid = '0x0 <= %s <= 0xFFFFFFFF'\r
+ PatternValidRangeIn = '(NOT)?\s*(\d+\s*-\s*\d+|0[xX][a-fA-F0-9]+\s*-\s*0[xX][a-fA-F0-9]+|LT\s*\d+|LT\s*0[xX][a-fA-F0-9]+|GT\s*\d+|GT\s*0[xX][a-fA-F0-9]+|LE\s*\d+|LE\s*0[xX][a-fA-F0-9]+|GE\s*\d+|GE\s*0[xX][a-fA-F0-9]+|XOR\s*\d+|XOR\s*0[xX][a-fA-F0-9]+|EQ\s*\d+|EQ\s*0[xX][a-fA-F0-9]+)'\r
+ PatternValidRng = re.compile('^' + '(NOT)?\s*' + PatternValidRangeIn + '$')\r
+ for Comment in self._Comments:\r
+ Comm = Comment[0].strip()\r
+ if not Comm:\r
+ continue\r
+ if not Description:\r
+ Description = PatternDesc.findall(Comm)\r
+ if not Prompt:\r
+ Prompt = PatternPrompt.findall(Comm)\r
+ if Comm[0] == '#':\r
+ ValidFormt = Comm.lstrip('#')\r
+ ValidFormt = ValidFormt.lstrip()\r
+ if ValidFormt[0:11] == '@ValidRange':\r
+ ValidFormt = ValidFormt[11:]\r
+ ValidFormt = ValidFormt.lstrip()\r
+ try:\r
+ ErrorCode, Expression = ValidFormt.split('|', 1)\r
+ except ValueError:\r
+ ErrorCode = '0x0'\r
+ Expression = ValidFormt\r
+ ErrorCode, Expression = ErrorCode.strip(), Expression.strip()\r
+ try:\r
+ if not eval(ErrorCodeValid % ErrorCode):\r
+ EdkLogger.warn('Parser', '@ValidRange ErrorCode(%s) of PCD %s is not valid UINT32 value.' % (ErrorCode, TokenList[0]))\r
+ except:\r
+ EdkLogger.warn('Parser', '@ValidRange ErrorCode(%s) of PCD %s is not valid UINT32 value.' % (ErrorCode, TokenList[0]))\r
+ if not PatternValidRng.search(Expression):\r
+ EdkLogger.warn('Parser', '@ValidRange Expression(%s) of PCD %s is incorrect format.' % (Expression, TokenList[0]))\r
+ if ValidFormt[0:10] == '@ValidList':\r
+ ValidFormt = ValidFormt[10:]\r
+ ValidFormt = ValidFormt.lstrip()\r
+ try:\r
+ ErrorCode, Expression = ValidFormt.split('|', 1)\r
+ except ValueError:\r
+ ErrorCode = '0x0'\r
+ Expression = ValidFormt\r
+ ErrorCode, Expression = ErrorCode.strip(), Expression.strip()\r
+ try:\r
+ if not eval(ErrorCodeValid % ErrorCode):\r
+ EdkLogger.warn('Parser', '@ValidList ErrorCode(%s) of PCD %s is not valid UINT32 value.' % (ErrorCode, TokenList[0]))\r
+ except:\r
+ EdkLogger.warn('Parser', '@ValidList ErrorCode(%s) of PCD %s is not valid UINT32 value.' % (ErrorCode, TokenList[0]))\r
+ Values = Expression.split(',')\r
+ for Value in Values:\r
+ Value = Value.strip()\r
+ try:\r
+ eval(Value)\r
+ except:\r
+ EdkLogger.warn('Parser', '@ValidList Expression of PCD %s include a invalid value(%s).' % (TokenList[0], Value))\r
+ break\r
+ if ValidFormt[0:11] == '@Expression':\r
+ ValidFormt = ValidFormt[11:]\r
+ ValidFormt = ValidFormt.lstrip()\r
+ try:\r
+ ErrorCode, Expression = ValidFormt.split('|', 1)\r
+ except ValueError:\r
+ ErrorCode = '0x0'\r
+ Expression = ValidFormt\r
+ ErrorCode, Expression = ErrorCode.strip(), Expression.strip()\r
+ try:\r
+ if not eval(ErrorCodeValid % ErrorCode):\r
+ EdkLogger.warn('Parser', '@Expression ErrorCode(%s) of PCD %s is not valid UINT32 value.' % (ErrorCode, TokenList[0]))\r
+ except:\r
+ EdkLogger.warn('Parser', '@Expression ErrorCode(%s) of PCD %s is not valid UINT32 value.' % (ErrorCode, TokenList[0]))\r
+ if not Expression:\r
+ EdkLogger.warn('Parser', '@Expression Expression of PCD %s is incorrect format.' % TokenList[0])\r
+ if not Description:\r
+ EdkLogger.warn('Parser', 'PCD %s Description information is not provided.' % TokenList[0])\r
+ if not Prompt:\r
+ EdkLogger.warn('Parser', 'PCD %s Prompt information is not provided.' % TokenList[0])\r
+ # check Description, Prompt localization information\r
+ if self._UniObj:\r
+ self._UniObj.CheckPcdInfo(TokenList[0])\r
\r
if ValueList[0] in ['True', 'true', 'TRUE']:\r
ValueList[0] = '1'\r