Esempio n. 1
0
 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;
 }
Esempio n. 2
0
        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;
        }