private void HandleParserEvent(SymParserBase aParser, SymBuildParsingLib.Parser.Framework.Parser.SymParserBase.TEvent aEvent) { if (aEvent == SymParserBase.TEvent.EEventParsingComplete) { iSemaphore.Signal(); } }
protected override void HandleTerminatingConditionMatch(SymToken aToken) { // Update the include so that it contains a fully resolved path iIncludeNode.IncludeDefinition.AdjustRelativeInclude(WorkerContext.Parser.FileName); // We've now a fully resolved file name which we can parse, should // we desire... string includeFile = iIncludeNode.IncludeDefinition.Location; if (Utils.SymFileSystemUtils.FileExists(includeFile)) { // Make a new document context SymParserDocumentContext subDocumentContext = new SymParserDocumentContext(includeFile, WorkerContext); // Use the existing document, but with a new context WorkerContext.Document.PushContext(subDocumentContext); // Make a new carbon copy of this parser (whatever concrete type it may be) SymParserBase subParser = WorkerContext.Parser.CarbonCopy(new object[] { WorkerContext.Document }); // Make the waiting object SymParserWaiter waiter = new SymParserWaiter(subParser); // Now parse the file and wait for the result subParser.Parse(); waiter.Wait(); // Restore the original context WorkerContext.Document.PopContext(); } }
public SymParserWaiter(SymParserBase aParser) { iParser = aParser; // iParser.ParserObservers += new SymBuildParsingLib.Parser.Framework.Parser.SymParserBase.ParserObserver(HandleParserEvent); }