from Common.LongFilePathSupport import OpenLongFilePath as open\r
\r
from MetaFileTable import MetaFileStorage\r
+from MetaFileCommentParser import CheckInfComment\r
\r
## A decorator used to parse macro definition\r
def ParseMacro(Parser):\r
continue\r
if Comment:\r
Comments.append((Comment, Index + 1))\r
+ if GlobalData.gOptions and GlobalData.gOptions.CheckUsage:\r
+ CheckInfComment(self._SectionType, Comments, str(self.MetaFile), Index + 1, self._ValueList)\r
#\r
# Model, Value1, Value2, Value3, Arch, Platform, BelongsToItem=-1,\r
# LineBegin=-1, ColumnBegin=-1, LineEnd=-1, ColumnEnd=-1, Enabled=-1\r
"FIX_LOAD_TOP_MEMORY_ADDRESS"\r
]\r
\r
+ SubSectionDefineKeywords = [\r
+ "FILE_GUID"\r
+ ]\r
+\r
SymbolPattern = ValueExpression.SymbolPattern\r
\r
## Constructor of DscParser\r
if not self._ValueList[2]:\r
EdkLogger.error('Parser', FORMAT_INVALID, "No value specified",\r
ExtraData=self._CurrentLine, File=self.MetaFile, Line=self._LineIndex + 1)\r
- if not self._ValueList[1] in self.DefineKeywords:\r
+ if (not self._ValueList[1] in self.DefineKeywords and\r
+ (self._InSubsection and self._ValueList[1] not in self.SubSectionDefineKeywords)):\r
EdkLogger.error('Parser', FORMAT_INVALID,\r
"Unknown keyword found: %s. "\r
"If this is a macro you must "\r
"add it as a DEFINE in the DSC" % self._ValueList[1],\r
ExtraData=self._CurrentLine, File=self.MetaFile, Line=self._LineIndex + 1)\r
- self._Defines[self._ValueList[1]] = self._ValueList[2]\r
+ if not self._InSubsection:\r
+ self._Defines[self._ValueList[1]] = self._ValueList[2]\r
self._ItemType = self.DataType[TAB_DSC_DEFINES.upper()]\r
\r
@ParseMacro\r
self.__RetrievePcdValue()\r
self._Content = self._RawTable.GetAll()\r
self._ContentIndex = 0\r
+ self._InSubsection = False\r
while self._ContentIndex < len(self._Content) :\r
Id, self._ItemType, V1, V2, V3, S1, S2, Owner, self._From, \\r
LineStart, ColStart, LineEnd, ColEnd, Enabled = self._Content[self._ContentIndex]\r
self._LineIndex = LineStart - 1\r
self._ValueList = [V1, V2, V3]\r
\r
+ if Owner > 0 and Owner in self._IdMapping:\r
+ self._InSubsection = True\r
+ else:\r
+ self._InSubsection = False\r
try:\r
Processer[self._ItemType]()\r
except EvaluationException, Excpt:\r
\r
Type, Name, Value = self._ValueList\r
Value = ReplaceMacro(Value, self._Macros, False)\r
+ #\r
+ # If it is <Defines>, return\r
+ #\r
+ if self._InSubsection:\r
+ self._ValueList = [Type, Name, Value]\r
+ return\r
+\r
if self._ItemType == MODEL_META_DATA_DEFINE:\r
if self._SectionType == MODEL_META_DATA_HEADER:\r
self._FileLocalMacros[Name] = Value\r