from collections import defaultdict\r
from .MetaFileTable import MetaFileStorage\r
from .MetaFileCommentParser import CheckInfComment\r
+from Common.DataType import TAB_COMMENT_EDK_START, TAB_COMMENT_EDK_END\r
\r
## RegEx for finding file versions\r
hexVersionPattern = re.compile(r'0[xX][\da-f-A-F]{5,8}')\r
## A decorator used to parse macro definition\r
def ParseMacro(Parser):\r
def MacroParser(self):\r
- Match = gMacroDefPattern.match(self._CurrentLine)\r
+ Match = GlobalData.gMacroDefPattern.match(self._CurrentLine)\r
if not Match:\r
# Not 'DEFINE/EDK_GLOBAL' statement, call decorated method\r
Parser(self)\r
EdkLogger.error('Parser', FORMAT_INVALID, "%s can only be defined via environment variable" % Name,\r
ExtraData=self._CurrentLine, File=self.MetaFile, Line=self._LineIndex + 1)\r
# Only upper case letters, digit and '_' are allowed\r
- if not gMacroNamePattern.match(Name):\r
+ if not GlobalData.gMacroNamePattern.match(Name):\r
EdkLogger.error('Parser', FORMAT_INVALID, "The macro name must be in the pattern [A-Z][A-Z0-9_]*",\r
ExtraData=self._CurrentLine, File=self.MetaFile, Line=self._LineIndex + 1)\r
\r
## Set parsing complete flag in both class and table\r
def _Done(self):\r
self._Finished = True\r
- ## Do not set end flag when processing included files\r
- if self._From == -1:\r
- self._Table.SetEndFlag()\r
+ self._Table.SetEndFlag()\r
\r
def _PostProcess(self):\r
self._PostProcessed = True\r
DataInfo = (DataInfo,)\r
\r
# Parse the file first, if necessary\r
- if not self._Finished:\r
- if self._RawTable.IsIntegrity():\r
- self._Finished = True\r
- else:\r
- self._Table = self._RawTable\r
- self._PostProcessed = False\r
- self.Start()\r
+ self.StartParse()\r
\r
# No specific ARCH or Platform given, use raw data\r
if self._RawTable and (len(DataInfo) == 1 or DataInfo[1] is None):\r
\r
return self._FilterRecordList(self._Table.Query(*DataInfo), DataInfo[1])\r
\r
+ def StartParse(self):\r
+ if not self._Finished:\r
+ if self._RawTable.IsIntegrity():\r
+ self._Finished = True\r
+ else:\r
+ self._Table = self._RawTable\r
+ self._PostProcessed = False\r
+ self.Start()\r
## Data parser for the common format in different type of file\r
#\r
# The common format in the meatfile is like\r
SectionComments.extend(Comments)\r
Comments = []\r
continue\r
- if Line.find(DataType.TAB_COMMENT_EDK_START) > -1:\r
+ if Line.find(TAB_COMMENT_EDK_START) > -1:\r
IsFindBlockComment = True\r
continue\r
- if Line.find(DataType.TAB_COMMENT_EDK_END) > -1:\r
+ if Line.find(TAB_COMMENT_EDK_END) > -1:\r
IsFindBlockComment = False\r
continue\r
if IsFindBlockComment:\r
self._PcdCodeValue = ""\r
self._PcdDataTypeCODE = False\r
self._CurrentPcdName = ""\r
+ self._Content = None\r
\r
## Parser starter\r
def Start(self):\r
return\r
TokenList = GetSplitValueList(self._CurrentLine, TAB_VALUE_SPLIT, 1)\r
self._CurrentPcdName = TokenList[0]\r
- if TokenList[1].strip().startswith("{CODE"):\r
+ if len(TokenList) == 2 and TokenList[1].strip().startswith("{CODE"):\r
self._PcdDataTypeCODE = True\r
self._PcdCodeValue = TokenList[1].strip()\r
\r
Parser._Scope = self._Scope\r
Parser._Enabled = self._Enabled\r
# Parse the included file\r
- Parser.Start()\r
-\r
-\r
+ Parser.StartParse()\r
# Insert all records in the table for the included file into dsc file table\r
Records = IncludedFileTable.GetAll()\r
if Records:\r