public override CompilerResults CompileAssemblyFromDomBatch(CompilerParameters options, CodeCompileUnit[] compilationUnits, ErrorNodeList errorNodes) { if (options == null) { Debug.Assert(false); return null; } this.Options = options; int n = compilationUnits == null ? 0 : compilationUnits.Length; if (options.OutputAssembly == null || options.OutputAssembly.Length == 0) { for (int i = 0; i < n; i++) { CodeSnippetCompileUnit csu = compilationUnits[i] as CodeSnippetCompileUnit; if (csu == null || csu.LinePragma == null || csu.LinePragma.FileName == null) continue; this.SetOutputFileName(options, csu.LinePragma.FileName); break; } } CompilerResults results = new CompilerResults(options.TempFiles); AssemblyNode assem = this.CreateAssembly(options, errorNodes); Compilation compilation = new Compilation(assem, new CompilationUnitList(n), options, this.GetGlobalScope(assem)); CodeDomTranslator cdt = new CodeDomTranslator(); SnippetParser sp = new SnippetParser(this, assem, errorNodes, options); for (int i = 0; i < n; i++) { CompilationUnit cu = cdt.Translate(this, compilationUnits[i], assem, errorNodes); sp.Visit(cu); compilation.CompilationUnits.Add(cu); cu.Compilation = compilation; } this.CompileParseTree(compilation, errorNodes); this.ProcessErrors(options, results, errorNodes); if (results.NativeCompilerReturnValue == 0) this.SetEntryPoint(compilation, results); // The following line is different from the base class method... this.SaveOrLoadAssembly(this.targetModule as AssemblyNode, options, results, errorNodes); return results; }
public override CompilerResults CompileAssemblyFromFileBatch(CompilerParameters options, string[] fileNames, ErrorNodeList errorNodes, bool canUseMemoryMap) { if (options == null) { Debug.Assert(false); return null; } int n = fileNames.Length; if (options.OutputAssembly == null || options.OutputAssembly.Length == 0) { for (int i = 0; i < n; i++) { if (fileNames[i] == null) continue; this.SetOutputFileName(options, fileNames[i]); break; } } CompilerResults results = new CompilerResults(options.TempFiles); AssemblyNode assem = this.CreateAssembly(options, errorNodes); Compilation compilation = new Compilation(assem, new CompilationUnitList(n), options, this.GetGlobalScope(assem)); SnippetParser sp = new SnippetParser(this, assem, errorNodes, options); for (int i = 0; i < n; i++) { string fileName = fileNames[i]; if (fileName == null) continue; DocumentText text = this.CreateDocumentText(fileName, results, options, errorNodes, canUseMemoryMap); CompilationUnitSnippet cu = this.CreateCompilationUnitSnippet(fileName, 1, text, compilation); sp.Visit(cu); compilation.CompilationUnits.Add(cu); cu.Compilation = compilation; } this.CompileParseTree(compilation, errorNodes); this.ProcessErrors(options, results, errorNodes); if (results.NativeCompilerReturnValue == 0) this.SetEntryPoint(compilation, results); // The following line is different from the base class method... this.SaveOrLoadAssembly(this.targetModule as AssemblyNode, options, results, errorNodes); return results; }