public override CompilerResults CompileProject(XmlElement config) { Cci.ErrorNodeList errors = new Cci.ErrorNodeList(); Project project = this.GetCompilerProject(config, errors); if (project == null) { return(null); } if (errors.Count > 0 && project.CompilerParameters != null) { CompilerResults results = new CompilerResults(project.CompilerParameters.TempFiles); this.compiler.ProcessErrors(project.CompilerParameters, results, errors); return(results); } return(this.CompileProject(project, errors)); }
public virtual CompilerResults CompileProject(Project project, Cci.ErrorNodeList errors) { if (project == null) { Debug.Assert(false); return(null); } CompilerResults results; Cci.Compilation symbolTableCompilation = project.Compilation; try { Cci.Compilation buildCompilation = this.compiler.CurrentCompilation = symbolTableCompilation.CloneCompilationUnits(); buildCompilation.TargetModule = this.compiler.CreateModule(project.CompilerParameters, errors); this.compiler.CurrentCompilation = buildCompilation; if (project.CompilerParameters is Cci.CompilerOptions && ((Cci.CompilerOptions)project.CompilerParameters).EmitManifest) { results = this.compiler.CompileAssemblyFromIR(buildCompilation, errors); } else { results = this.compiler.CompileModuleFromIR(buildCompilation, errors); } if (buildCompilation.TargetModule is Cci.AssemblyNode && symbolTableCompilation.TargetModule is Cci.AssemblyNode) { ((Cci.AssemblyNode)symbolTableCompilation.TargetModule).Version = ((Cci.AssemblyNode)buildCompilation.TargetModule).Version; } buildCompilation.TargetModule = null; buildCompilation.CompilationUnits = null; buildCompilation = null; }catch (Exception e) { results = new CompilerResults(options.TempFiles); string offendingAssembly = project.CompilerParameters == null ? "" : project.CompilerParameters.OutputAssembly; results.Errors.Add(new CompilerError(offendingAssembly, 1, 1, "", "Internal Compiler Error: " + e.ToString() + "\n")); results.NativeCompilerReturnValue = 1; }finally{ this.compiler.CurrentCompilation = symbolTableCompilation; } return(results); }
public virtual Cci.CompilationList GetReferencedCompilations(XmlElement config, Cci.ErrorNodeList errors) { ArrayList refProjs = this.GetReferencedProjects(config); int n = refProjs == null ? 0 : refProjs.Count; if (n == 0) { return(null); } Cci.CompilationList result = new Cci.CompilationList(n); for (int i = 0; i < n; i++) { ProjectManager proj = refProjs[i] as ProjectManager; if (proj == null) { Debug.Assert(false); continue; } // proj.compiler.OnUpdate += this.updateHandler; XmlElement pconfig = proj.GetActiveConfiguration(); Project cproj = proj.GetCompilerProject(pconfig, errors); if (cproj == null || cproj.Compilation == null) { Debug.Assert(false); continue; } result.Add(cproj.Compilation); } return(result); }
public virtual Project GetCompilerProject(XmlElement config, Cci.ErrorNodeList errors) { if (config == null) { return(null); } lock (ProjectManager.BuildLock){ Project project = this.scProject; if (project == null) { Debug.Assert(false); return(null); } bool refresh = this.LastModifiedTime != project.LastModifiedTime || this.lastConfig != config; if (!refresh) { Debug.Assert(project.CompilerParameters != null); this.RefreshPerBuildCompilerParameters(); return(project); } Cci.Compilation compilation = project.Compilation = this.compiler.CreateCompilation(null, null, null, null); this.compiler.CurrentCompilation = compilation; project.LastModifiedTime = this.LastModifiedTime; Microsoft.VisualStudio.Package.ProjectOptions vscOptions = this.GetProjectOptions(config); Cci.CompilerOptions options = this.GetCompilerOptions(vscOptions); if (options == null) { Debug.Assert(false); return(null); } project.CompilerParameters = options; string dir = this.ProjectFolder; XmlDocument doc = this.projFile; Cci.StringList fileNames = new Cci.StringList(); Cci.CompilationUnitSnippetList cuSnippets = new Cci.CompilationUnitSnippetList(); Cci.CompilationUnitList cUnits = new Cci.CompilationUnitList(); foreach (XmlElement e in doc.SelectNodes("//Files/Include/File")) { if (e == null) { continue; } string relpath = e.GetAttribute("RelPath"); string file = Path.Combine(dir, relpath); Cci.CompilationUnitSnippet snippet = null; int key = Cci.Identifier.For(file).UniqueIdKey; if (!File.Exists(file)) { errors.Add(this.compiler.CreateErrorNode(Cci.Error.NoSuchFile, file)); continue; } snippet = this.GetCompilationUnitSnippetFor(file, e.GetAttribute("BuildAction")); if (snippet == null) { continue; } fileNames.Add(file); cuSnippets.Add(snippet); cUnits.Add(snippet); snippet.Compilation = compilation; } project.CompilationUnitSnippets = cuSnippets; project.FullPathsToSources = fileNames; compilation.CompilationUnits = cUnits; compilation.CompilerParameters = options; compilation.ReferencedCompilations = this.GetReferencedCompilations(config, errors); this.compiler.ConstructSymbolTable(compilation, errors); this.compiler.CurrentCompilation = null; return(project); } }