コード例 #1
0
 private void HandleParserEvent(SymParserBase aParser, SymBuildParsingLib.Parser.Framework.Parser.SymParserBase.TEvent aEvent)
 {
     if (aEvent == SymParserBase.TEvent.EEventParsingComplete)
     {
         iSemaphore.Signal();
     }
 }
コード例 #2
0
        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();
            }
        }
コード例 #3
0
 public SymParserWaiter(SymParserBase aParser)
 {
     iParser = aParser;
     //
     iParser.ParserObservers += new SymBuildParsingLib.Parser.Framework.Parser.SymParserBase.ParserObserver(HandleParserEvent);
 }