PCD_VARIABLE_ATTRIBUTES_CONFLICT_ERROR = 0xF013\r
PCD_STRUCTURE_PCD_INVALID_FIELD_ERROR = 0xF014\r
PCD_STRUCTURE_PCD_ERROR = 0xF015\r
+ERROR_STATEMENT = 0xFFFD\r
ABORT_ERROR = 0xFFFE\r
UNKNOWN_ERROR = 0xFFFF\r
\r
IO_TIMEOUT : "Timeout",\r
IO_UNKNOWN_ERROR : "Unknown error in IO operation",\r
\r
+ ERROR_STATEMENT : "!error statement",\r
UNKNOWN_ERROR : "Unknown error",\r
}\r
\r
\r
try:\r
self.Preprocess()\r
+ self.__GetError()\r
#\r
# Keep processing sections of the FDF until no new sections or a syntax error is found\r
#\r
\r
return False\r
\r
+ ##__GetError() method\r
+ def __GetError(self):\r
+ #save the Current information\r
+ CurrentLine = self.CurrentLineNumber\r
+ CurrentOffset = self.CurrentOffsetWithinLine\r
+ while self.__GetNextToken():\r
+ if self.__Token == TAB_ERROR:\r
+ EdkLogger.error('FdfParser', ERROR_STATEMENT, self.__CurrentLine().replace(TAB_ERROR, '', 1), File=self.FileName, Line=self.CurrentLineNumber)\r
+ self.CurrentLineNumber = CurrentLine\r
+ self.CurrentOffsetWithinLine = CurrentOffset\r
+\r
## __GetFd() method\r
#\r
# Get FD section contents and store its data into FD dictionary of self.Profile\r
TAB_ELSE.upper() : MODEL_META_DATA_CONDITIONAL_STATEMENT_ELSE,\r
TAB_END_IF.upper() : MODEL_META_DATA_CONDITIONAL_STATEMENT_ENDIF,\r
TAB_USER_EXTENSIONS.upper() : MODEL_META_DATA_USER_EXTENSION,\r
+ TAB_ERROR.upper() : MODEL_META_DATA_CONDITIONAL_STATEMENT_ERROR,\r
}\r
\r
# Valid names in define section\r
Scope = [[TAB_COMMON, TAB_COMMON, TAB_COMMON]]\r
if ItemType == MODEL_META_DATA_INCLUDE:\r
Scope = self._Scope\r
+ elif ItemType == MODEL_META_DATA_CONDITIONAL_STATEMENT_ERROR:\r
+ Scope = self._Scope\r
if ItemType == MODEL_META_DATA_CONDITIONAL_STATEMENT_ENDIF:\r
# Remove all directives between !if and !endif, including themselves\r
while self._DirectiveStack:\r
EdkLogger.error("Parser", FORMAT_INVALID, "Redundant '!endif'",\r
File=self.MetaFile, Line=self._LineIndex + 1,\r
ExtraData=self._CurrentLine)\r
- elif ItemType != MODEL_META_DATA_INCLUDE:\r
+ elif ItemType not in {MODEL_META_DATA_INCLUDE, MODEL_META_DATA_CONDITIONAL_STATEMENT_ERROR}:\r
# Break if there's a !else is followed by a !elseif\r
if ItemType == MODEL_META_DATA_CONDITIONAL_STATEMENT_ELSEIF and \\r
self._DirectiveStack and \\r
MODEL_META_DATA_BUILD_OPTION : self.__ProcessBuildOption,\r
MODEL_UNKNOWN : self._Skip,\r
MODEL_META_DATA_USER_EXTENSION : self._SkipUserExtension,\r
+ MODEL_META_DATA_CONDITIONAL_STATEMENT_ERROR : self._ProcessError,\r
}\r
\r
self._Table = MetaFileStorage(self._RawTable.Cur, self.MetaFile, MODEL_FILE_DSC, True)\r
GlobalData.gPlatformDefines.update(self._FileLocalMacros)\r
self._PostProcessed = True\r
self._Content = None\r
+ def _ProcessError(self):\r
+ if not self._Enabled:\r
+ return\r
+ EdkLogger.error('Parser', ERROR_STATEMENT, self._ValueList[1], File=self.MetaFile, Line=self._LineIndex + 1)\r
\r
def __ProcessSectionHeader(self):\r
self._SectionName = self._ValueList[0]\r