public bool AnalyzeDfsTree(PhpSourceFile /*!*/ rootSourceFile) { CompilationUnit root = GetNode(rootSourceFile); ScriptCompilationUnit rootScript = root as ScriptCompilationUnit; if (rootScript != null && rootScript.State == CompilationUnit.States.Initial) { Analyzer analyzer = null; try { // builds the tree of parsed units via DFS: ProcessNode(rootScript); // finishes pending inclusions via MFP: ProcessPendingInclusions(); analyzer = new Analyzer(context); // pre-analysis: rootScript.PreAnalyzeRecursively(analyzer); // member analysis: rootScript.AnalyzeMembersRecursively(analyzer); if (context.Errors.AnyFatalError) { return(false); } // full analysis: rootScript.AnalyzeRecursively(analyzer); if (context.Errors.AnyFatalError) { return(false); } // perform post analysis: analyzer.PostAnalyze(); if (context.Errors.AnyError) { return(false); } // TODO: // define constructed types: analyzer.DefineConstructedTypeBuilders(); } catch (CompilerException) { root.State = CompilationUnit.States.Erroneous; return(false); } if (context.Errors.AnyError) { return(false); } } else if (root.State != CompilationUnit.States.Analyzed && root.State != CompilationUnit.States.Reflected) { return(false); } return(true); }