* [Patch V2] BaseTools: Fix parsing multiple nest !include issue @ 2018-06-28 6:27 Yonghong Zhu 2018-06-28 20:48 ` Carsey, Jaben 0 siblings, 1 reply; 3+ messages in thread From: Yonghong Zhu @ 2018-06-28 6:27 UTC (permalink / raw) To: edk2-devel; +Cc: Yunhua Feng, Liming Gao From: Yunhua Feng <yunhuax.feng@intel.com> Fix the bug !include file in Components subsection meet syntax error. Case example: DSC components: !include Test1.txt Test1.txt: TestPkg/TestDriver.inf { <PcdsFixedAtBuild> PcdToken.PcdTest1 | "A" !include Test2.txt } Test2.txt: !include Test3.txt Test3.txt: PcdToken.PcdTest2 | "B" Cc: Liming Gao <liming.gao@intel.com> Cc: Yonghong Zhu <yonghong.zhu@intel.com> Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Yunhua Feng <yunhuax.feng@intel.com> --- .../Source/Python/Workspace/MetaFileParser.py | 28 ++++++++++------------ 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/BaseTools/Source/Python/Workspace/MetaFileParser.py b/BaseTools/Source/Python/Workspace/MetaFileParser.py index 8c860d594b..75ca630806 100644 --- a/BaseTools/Source/Python/Workspace/MetaFileParser.py +++ b/BaseTools/Source/Python/Workspace/MetaFileParser.py @@ -942,11 +942,18 @@ class DscParser(MetaFileParser): # subsection header elif Line[0] == TAB_OPTION_START and Line[-1] == TAB_OPTION_END: self._SubsectionType = MODEL_META_DATA_SUBSECTION_HEADER # directive line elif Line[0] == '!': - self._DirectiveParser() + TokenList = GetSplitValueList(Line, ' ', 1) + if TokenList[0].upper() == "!INCLUDE": + for Arch, ModuleType, DefaultStore in self._Scope: + if self._SubsectionType != MODEL_UNKNOWN and Arch in OwnerId: + self._Owner[-1] = OwnerId[Arch] + self._DirectiveParser() + else: + self._DirectiveParser() continue if Line[0] == TAB_OPTION_START and not self._InSubsection: EdkLogger.error("Parser", FILE_READ_FAILURE, "Missing the '{' before %s in Line %s" % (Line, Index+1), ExtraData=self.MetaFile) if self._InSubsection: @@ -963,11 +970,11 @@ class DscParser(MetaFileParser): # Model, Value1, Value2, Value3, Arch, ModuleType, BelongsToItem=-1, BelongsToFile=-1, # LineBegin=-1, ColumnBegin=-1, LineEnd=-1, ColumnEnd=-1, Enabled=-1 # for Arch, ModuleType, DefaultStore in self._Scope: Owner = self._Owner[-1] - if self._SubsectionType != MODEL_UNKNOWN: + if self._SubsectionType != MODEL_UNKNOWN and Arch in OwnerId: Owner = OwnerId[Arch] self._LastItem = self._Store( self._ItemType, self._ValueList[0], self._ValueList[1], @@ -1188,10 +1195,11 @@ class DscParser(MetaFileParser): @ParseMacro def _ComponentParser(self): if self._CurrentLine[-1] == '{': self._ValueList[0] = self._CurrentLine[0:-1].strip() self._InSubsection = True + self._SubsectionType = MODEL_UNKNOWN else: self._ValueList[0] = self._CurrentLine ## [LibraryClasses] section @ParseMacro @@ -1560,28 +1568,18 @@ class DscParser(MetaFileParser): self.IncludedFiles.add (IncludedFile1) # set the parser status with current status Parser._SectionName = self._SectionName - if self._InSubsection: - Parser._SectionType = self._SubsectionType - else: - Parser._SectionType = self._SectionType + Parser._SubsectionType = self._SubsectionType + Parser._InSubsection = self._InSubsection + Parser._SectionType = self._SectionType Parser._Scope = self._Scope Parser._Enabled = self._Enabled # Parse the included file Parser.Start() - # update current status with sub-parser's status - self._SectionName = Parser._SectionName - if not self._InSubsection: - self._SectionType = Parser._SectionType - self._SubsectionType = Parser._SubsectionType - self._InSubsection = Parser._InSubsection - - self._Scope = Parser._Scope - self._Enabled = Parser._Enabled # Insert all records in the table for the included file into dsc file table Records = IncludedFileTable.GetAll() if Records: self._Content[self._ContentIndex:self._ContentIndex] = Records -- 2.12.2.windows.2 ^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [Patch V2] BaseTools: Fix parsing multiple nest !include issue 2018-06-28 6:27 [Patch V2] BaseTools: Fix parsing multiple nest !include issue Yonghong Zhu @ 2018-06-28 20:48 ` Carsey, Jaben 2018-06-29 5:41 ` Zhu, Yonghong 0 siblings, 1 reply; 3+ messages in thread From: Carsey, Jaben @ 2018-06-28 20:48 UTC (permalink / raw) To: Zhu, Yonghong, edk2-devel@lists.01.org; +Cc: Feng, YunhuaX, Gao, Liming If you change the raw string ("!INCLUDE) to use the one defined in DataType.py (TAB_INCLUDE), then I like it. Note that you will need to lower() instead of upper() to support this change. Reviewed-by: Jaben Carsey <jaben.carsey@intel.com> > -----Original Message----- > From: edk2-devel [mailto:edk2-devel-bounces@lists.01.org] On Behalf Of > Yonghong Zhu > Sent: Wednesday, June 27, 2018 11:27 PM > To: edk2-devel@lists.01.org > Cc: Feng, YunhuaX <yunhuax.feng@intel.com>; Gao, Liming > <liming.gao@intel.com> > Subject: [edk2] [Patch V2] BaseTools: Fix parsing multiple nest !include issue > > From: Yunhua Feng <yunhuax.feng@intel.com> > > Fix the bug !include file in Components subsection meet syntax error. > > Case example: > DSC components: > !include Test1.txt > > Test1.txt: > TestPkg/TestDriver.inf { > <PcdsFixedAtBuild> > PcdToken.PcdTest1 | "A" > !include Test2.txt > } > > Test2.txt: > !include Test3.txt > > Test3.txt: > PcdToken.PcdTest2 | "B" > > Cc: Liming Gao <liming.gao@intel.com> > Cc: Yonghong Zhu <yonghong.zhu@intel.com> > Contributed-under: TianoCore Contribution Agreement 1.1 > Signed-off-by: Yunhua Feng <yunhuax.feng@intel.com> > --- > .../Source/Python/Workspace/MetaFileParser.py | 28 ++++++++++-------- > ---- > 1 file changed, 13 insertions(+), 15 deletions(-) > > diff --git a/BaseTools/Source/Python/Workspace/MetaFileParser.py > b/BaseTools/Source/Python/Workspace/MetaFileParser.py > index 8c860d594b..75ca630806 100644 > --- a/BaseTools/Source/Python/Workspace/MetaFileParser.py > +++ b/BaseTools/Source/Python/Workspace/MetaFileParser.py > @@ -942,11 +942,18 @@ class DscParser(MetaFileParser): > # subsection header > elif Line[0] == TAB_OPTION_START and Line[-1] == TAB_OPTION_END: > self._SubsectionType = MODEL_META_DATA_SUBSECTION_HEADER > # directive line > elif Line[0] == '!': > - self._DirectiveParser() > + TokenList = GetSplitValueList(Line, ' ', 1) > + if TokenList[0].upper() == "!INCLUDE": > + for Arch, ModuleType, DefaultStore in self._Scope: > + if self._SubsectionType != MODEL_UNKNOWN and Arch in > OwnerId: > + self._Owner[-1] = OwnerId[Arch] > + self._DirectiveParser() > + else: > + self._DirectiveParser() > continue > if Line[0] == TAB_OPTION_START and not self._InSubsection: > EdkLogger.error("Parser", FILE_READ_FAILURE, "Missing the '{' > before %s in Line %s" % (Line, Index+1), ExtraData=self.MetaFile) > > if self._InSubsection: > @@ -963,11 +970,11 @@ class DscParser(MetaFileParser): > # Model, Value1, Value2, Value3, Arch, ModuleType, BelongsToItem=- > 1, BelongsToFile=-1, > # LineBegin=-1, ColumnBegin=-1, LineEnd=-1, ColumnEnd=-1, > Enabled=-1 > # > for Arch, ModuleType, DefaultStore in self._Scope: > Owner = self._Owner[-1] > - if self._SubsectionType != MODEL_UNKNOWN: > + if self._SubsectionType != MODEL_UNKNOWN and Arch in > OwnerId: > Owner = OwnerId[Arch] > self._LastItem = self._Store( > self._ItemType, > self._ValueList[0], > self._ValueList[1], > @@ -1188,10 +1195,11 @@ class DscParser(MetaFileParser): > @ParseMacro > def _ComponentParser(self): > if self._CurrentLine[-1] == '{': > self._ValueList[0] = self._CurrentLine[0:-1].strip() > self._InSubsection = True > + self._SubsectionType = MODEL_UNKNOWN > else: > self._ValueList[0] = self._CurrentLine > > ## [LibraryClasses] section > @ParseMacro > @@ -1560,28 +1568,18 @@ class DscParser(MetaFileParser): > > self.IncludedFiles.add (IncludedFile1) > > # set the parser status with current status > Parser._SectionName = self._SectionName > - if self._InSubsection: > - Parser._SectionType = self._SubsectionType > - else: > - Parser._SectionType = self._SectionType > + Parser._SubsectionType = self._SubsectionType > + Parser._InSubsection = self._InSubsection > + Parser._SectionType = self._SectionType > Parser._Scope = self._Scope > Parser._Enabled = self._Enabled > # Parse the included file > Parser.Start() > > - # update current status with sub-parser's status > - self._SectionName = Parser._SectionName > - if not self._InSubsection: > - self._SectionType = Parser._SectionType > - self._SubsectionType = Parser._SubsectionType > - self._InSubsection = Parser._InSubsection > - > - self._Scope = Parser._Scope > - self._Enabled = Parser._Enabled > > # Insert all records in the table for the included file into dsc file table > Records = IncludedFileTable.GetAll() > if Records: > self._Content[self._ContentIndex:self._ContentIndex] = Records > -- > 2.12.2.windows.2 > > _______________________________________________ > edk2-devel mailing list > edk2-devel@lists.01.org > https://lists.01.org/mailman/listinfo/edk2-devel ^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [Patch V2] BaseTools: Fix parsing multiple nest !include issue 2018-06-28 20:48 ` Carsey, Jaben @ 2018-06-29 5:41 ` Zhu, Yonghong 0 siblings, 0 replies; 3+ messages in thread From: Zhu, Yonghong @ 2018-06-29 5:41 UTC (permalink / raw) To: Carsey, Jaben, edk2-devel@lists.01.org Cc: Feng, YunhuaX, Gao, Liming, Zhu, Yonghong When I commit this patch, I will change it to use TAB_INCLUDE. Thanks. Best Regards, Zhu Yonghong -----Original Message----- From: Carsey, Jaben Sent: Friday, June 29, 2018 4:48 AM To: Zhu, Yonghong <yonghong.zhu@intel.com>; edk2-devel@lists.01.org Cc: Feng, YunhuaX <yunhuax.feng@intel.com>; Gao, Liming <liming.gao@intel.com> Subject: RE: [edk2] [Patch V2] BaseTools: Fix parsing multiple nest !include issue If you change the raw string ("!INCLUDE) to use the one defined in DataType.py (TAB_INCLUDE), then I like it. Note that you will need to lower() instead of upper() to support this change. Reviewed-by: Jaben Carsey <jaben.carsey@intel.com> > -----Original Message----- > From: edk2-devel [mailto:edk2-devel-bounces@lists.01.org] On Behalf Of > Yonghong Zhu > Sent: Wednesday, June 27, 2018 11:27 PM > To: edk2-devel@lists.01.org > Cc: Feng, YunhuaX <yunhuax.feng@intel.com>; Gao, Liming > <liming.gao@intel.com> > Subject: [edk2] [Patch V2] BaseTools: Fix parsing multiple nest > !include issue > > From: Yunhua Feng <yunhuax.feng@intel.com> > > Fix the bug !include file in Components subsection meet syntax error. > > Case example: > DSC components: > !include Test1.txt > > Test1.txt: > TestPkg/TestDriver.inf { > <PcdsFixedAtBuild> > PcdToken.PcdTest1 | "A" > !include Test2.txt > } > > Test2.txt: > !include Test3.txt > > Test3.txt: > PcdToken.PcdTest2 | "B" > > Cc: Liming Gao <liming.gao@intel.com> > Cc: Yonghong Zhu <yonghong.zhu@intel.com> > Contributed-under: TianoCore Contribution Agreement 1.1 > Signed-off-by: Yunhua Feng <yunhuax.feng@intel.com> > --- > .../Source/Python/Workspace/MetaFileParser.py | 28 ++++++++++-------- > ---- > 1 file changed, 13 insertions(+), 15 deletions(-) > > diff --git a/BaseTools/Source/Python/Workspace/MetaFileParser.py > b/BaseTools/Source/Python/Workspace/MetaFileParser.py > index 8c860d594b..75ca630806 100644 > --- a/BaseTools/Source/Python/Workspace/MetaFileParser.py > +++ b/BaseTools/Source/Python/Workspace/MetaFileParser.py > @@ -942,11 +942,18 @@ class DscParser(MetaFileParser): > # subsection header > elif Line[0] == TAB_OPTION_START and Line[-1] == TAB_OPTION_END: > self._SubsectionType = MODEL_META_DATA_SUBSECTION_HEADER > # directive line > elif Line[0] == '!': > - self._DirectiveParser() > + TokenList = GetSplitValueList(Line, ' ', 1) > + if TokenList[0].upper() == "!INCLUDE": > + for Arch, ModuleType, DefaultStore in self._Scope: > + if self._SubsectionType != MODEL_UNKNOWN and > + Arch in > OwnerId: > + self._Owner[-1] = OwnerId[Arch] > + self._DirectiveParser() > + else: > + self._DirectiveParser() > continue > if Line[0] == TAB_OPTION_START and not self._InSubsection: > EdkLogger.error("Parser", FILE_READ_FAILURE, "Missing the '{' > before %s in Line %s" % (Line, Index+1), ExtraData=self.MetaFile) > > if self._InSubsection: > @@ -963,11 +970,11 @@ class DscParser(MetaFileParser): > # Model, Value1, Value2, Value3, Arch, ModuleType, > BelongsToItem=- 1, BelongsToFile=-1, > # LineBegin=-1, ColumnBegin=-1, LineEnd=-1, ColumnEnd=-1, > Enabled=-1 > # > for Arch, ModuleType, DefaultStore in self._Scope: > Owner = self._Owner[-1] > - if self._SubsectionType != MODEL_UNKNOWN: > + if self._SubsectionType != MODEL_UNKNOWN and Arch in > OwnerId: > Owner = OwnerId[Arch] > self._LastItem = self._Store( > self._ItemType, > self._ValueList[0], > self._ValueList[1], @@ > -1188,10 +1195,11 @@ class DscParser(MetaFileParser): > @ParseMacro > def _ComponentParser(self): > if self._CurrentLine[-1] == '{': > self._ValueList[0] = self._CurrentLine[0:-1].strip() > self._InSubsection = True > + self._SubsectionType = MODEL_UNKNOWN > else: > self._ValueList[0] = self._CurrentLine > > ## [LibraryClasses] section > @ParseMacro > @@ -1560,28 +1568,18 @@ class DscParser(MetaFileParser): > > self.IncludedFiles.add (IncludedFile1) > > # set the parser status with current status > Parser._SectionName = self._SectionName > - if self._InSubsection: > - Parser._SectionType = self._SubsectionType > - else: > - Parser._SectionType = self._SectionType > + Parser._SubsectionType = self._SubsectionType > + Parser._InSubsection = self._InSubsection > + Parser._SectionType = self._SectionType > Parser._Scope = self._Scope > Parser._Enabled = self._Enabled > # Parse the included file > Parser.Start() > > - # update current status with sub-parser's status > - self._SectionName = Parser._SectionName > - if not self._InSubsection: > - self._SectionType = Parser._SectionType > - self._SubsectionType = Parser._SubsectionType > - self._InSubsection = Parser._InSubsection > - > - self._Scope = Parser._Scope > - self._Enabled = Parser._Enabled > > # Insert all records in the table for the included file into dsc file table > Records = IncludedFileTable.GetAll() > if Records: > self._Content[self._ContentIndex:self._ContentIndex] > = Records > -- > 2.12.2.windows.2 > > _______________________________________________ > edk2-devel mailing list > edk2-devel@lists.01.org > https://lists.01.org/mailman/listinfo/edk2-devel ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2018-06-29 5:41 UTC | newest] Thread overview: 3+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2018-06-28 6:27 [Patch V2] BaseTools: Fix parsing multiple nest !include issue Yonghong Zhu 2018-06-28 20:48 ` Carsey, Jaben 2018-06-29 5:41 ` Zhu, Yonghong
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox