private void button1_Click(object sender, EventArgs e) { DialogResult = DialogResult.None; CompilerSettings settings = new CompilerSettings(); settings.CodeSource = SourceCode; settings.AddReference("mscorlib.dll"); CompilerResults results = Mosa.Utility.CodeDomCompiler.Compiler.ExecuteCompiler(settings); if (results.Errors.HasErrors) { tbErrors.Text = string.Empty; foreach (CompilerError error in results.Errors) { tbErrors.AppendText(error.ToString()); tbErrors.AppendText("\n"); } } else { Assembly = results.PathToAssembly; DialogResult = DialogResult.OK; Close(); } }
/// <summary> /// Initializes a new instance of the <see cref="Compiler" /> class. /// </summary> /// <param name="settings">The settings.</param> /// <returns></returns> public static CompilerResults ExecuteCompiler(CompilerSettings settings) { if (!providerCache.TryGetValue(settings.Language, out CodeDomProvider provider)) { provider = CodeDomProvider.CreateProvider(settings.Language); if (provider == null) { throw new NotSupportedException("The language '" + settings.Language + "' is not supported on this machine."); } providerCache.Add(settings.Language, provider); } string filename = Path.Combine(TempDirectory, Path.ChangeExtension(Path.GetRandomFileName(), "dll")); temps.AddFile(filename, false); var references = new string[settings.References.Count]; settings.References.CopyTo(references, 0); var parameters = new CompilerParameters(references, filename, false) { CompilerOptions = "/optimize-" }; if (settings.UnsafeCode) { if (settings.Language == "C#") { parameters.CompilerOptions += " /unsafe+"; } else { throw new NotSupportedException(); } } if (settings.DoNotReferenceMscorlib) { if (settings.Language == "C#") { parameters.CompilerOptions += " /nostdlib"; } else { throw new NotSupportedException(); } } parameters.GenerateInMemory = false; if (settings.CodeSource != null) { return(provider.CompileAssemblyFromSource(parameters, settings.CodeSource + settings.AdditionalSource)); } else { throw new NotSupportedException(); } }
/// <summary> /// Initializes a new instance of the <see cref="TestCompilerSettings"/> class. /// </summary> /// <param name="settings">The settings.</param> public CompilerSettings(CompilerSettings settings) { language = settings.language; unsafeCode = settings.unsafeCode; doNotReferenceMscorlib = settings.doNotReferenceMscorlib; codeSource = settings.codeSource; additionalSource = settings.additionalSource; references = new List <string>(settings.references); }
/// <summary> /// Initializes a new instance of the <see cref="TestCompilerSettings"/> class. /// </summary> /// <param name="settings">The settings.</param> public CompilerSettings(CompilerSettings settings) { language = settings.language; unsafeCode = settings.unsafeCode; doNotReferenceMscorlib = settings.doNotReferenceMscorlib; codeSource = settings.codeSource; additionalSource = settings.additionalSource; references = new List<string>(settings.references); }
/// <summary> /// Initializes a new instance of the <see cref="TestCompilerSettings"/> class. /// </summary> /// <param name="settings">The settings.</param> public CompilerSettings(CompilerSettings settings) { Language = settings.Language; UnsafeCode = settings.UnsafeCode; DoNotReferenceMscorlib = settings.DoNotReferenceMscorlib; CodeSource = settings.CodeSource; AdditionalSource = settings.AdditionalSource; references = new List <string>(settings.references); }
public bool IsEqual(CompilerSettings other) { if (other == null) { return(false); } if (codeSource != other.codeSource) { return(false); } if (additionalSource != other.additionalSource) { return(false); } if (unsafeCode != other.unsafeCode) { return(false); } if (language != other.language) { return(false); } if (doNotReferenceMscorlib != other.doNotReferenceMscorlib) { return(false); } if (references.Count != other.references.Count) { return(false); } foreach (string file in references) { if (!other.references.Contains(file)) { return(false); } } return(true); }
/// <summary> /// Initializes a new instance of the <see cref="Compiler"/> class. /// </summary> public static CompilerResults ExecuteCompiler(CompilerSettings settings) { CodeDomProvider provider; if (!providerCache.TryGetValue(settings.Language, out provider)) { provider = CodeDomProvider.CreateProvider(settings.Language); if (provider == null) throw new NotSupportedException("The language '" + settings.Language + "' is not supported on this machine."); providerCache.Add(settings.Language, provider); } string filename = Path.Combine(TempDirectory, Path.ChangeExtension(Path.GetRandomFileName(), "dll")); temps.AddFile(filename, false); string[] references = new string[settings.References.Count]; settings.References.CopyTo(references, 0); CompilerParameters parameters = new CompilerParameters(references, filename, false); parameters.CompilerOptions = "/optimize-"; if (settings.UnsafeCode) { if (settings.Language == "C#") parameters.CompilerOptions = parameters.CompilerOptions + " /unsafe+"; else throw new NotSupportedException(); } if (settings.DoNotReferenceMscorlib) { if (settings.Language == "C#") parameters.CompilerOptions = parameters.CompilerOptions + " /nostdlib"; else throw new NotSupportedException(); } parameters.GenerateInMemory = false; if (settings.CodeSource != null) { CompilerResults compileResults = provider.CompileAssemblyFromSource(parameters, settings.CodeSource + settings.AdditionalSource); return compileResults; } else throw new NotSupportedException(); }
public bool IsEqual(CompilerSettings other) { if (other == null) return false; if (this.codeSource != other.codeSource) return false; if (this.additionalSource != other.additionalSource) return false; if (this.unsafeCode != other.unsafeCode) return false; if (this.language != other.language) return false; if (this.doNotReferenceMscorlib != other.doNotReferenceMscorlib) return false; if (this.references.Count != other.references.Count) return false; foreach (string file in this.references) if (!other.references.Contains(file)) return false; return true; }