Exemplo n.º 1
0
        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();
            }
        }
Exemplo n.º 2
0
        /// <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();
            }
        }
Exemplo n.º 3
0
 /// <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);
 }
Exemplo n.º 4
0
 /// <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);
 }
Exemplo n.º 5
0
 /// <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);
 }
Exemplo n.º 6
0
        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);
        }
Exemplo n.º 7
0
        /// <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();
        }
Exemplo n.º 8
0
        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;
        }