Esempio n. 1
0
        void OnFileParsed(string file, ParserResult result)
        {
            switch (result.Kind)
            {
            case ParserResultKind.Success:
                Diagnostics.EmitMessage(DiagnosticId.ParseResult,
                                        "Parsed '{0}'", file);
                break;

            case ParserResultKind.Error:
                Diagnostics.EmitError(DiagnosticId.ParseResult,
                                      "Error parsing '{0}'", file);
                break;

            case ParserResultKind.FileNotFound:
                Diagnostics.EmitError(DiagnosticId.ParseResult,
                                      "File '{0}' was not found", file);
                break;
            }

            foreach (var diag in result.Diagnostics)
            {
                if (Options.IgnoreParseWarnings &&
                    diag.Level == ParserDiagnosticLevel.Warning)
                {
                    continue;
                }

                Diagnostics.EmitMessage(DiagnosticId.ParserDiagnostic,
                                        "{0}({1},{2}): {3}: {4}", diag.FileName, diag.LineNumber,
                                        diag.ColumnNumber, diag.Level.ToString().ToLower(),
                                        diag.Message);
            }
        }
Esempio n. 2
0
        public void CompileCode()
        {
            try
            {
                var assemblyFile = string.IsNullOrEmpty(Options.LibraryName) ?
                                   "out.dll" : Options.LibraryName + ".dll";

                var docFile = Path.ChangeExtension(Path.GetFileName(assemblyFile), ".xml");

                var compilerOptions = new StringBuilder();
                compilerOptions.Append(" /doc:" + docFile);
                compilerOptions.Append(" /debug:pdbonly");
                compilerOptions.Append(" /unsafe");

                var compilerParameters = new CompilerParameters
                {
                    GenerateExecutable    = false,
                    TreatWarningsAsErrors = false,
                    OutputAssembly        = assemblyFile,
                    GenerateInMemory      = false,
                    CompilerOptions       = compilerOptions.ToString()
                };

                compilerParameters.ReferencedAssemblies.Add(typeof(object).Assembly.Location);
                var location        = Assembly.GetExecutingAssembly().Location;
                var locationRuntime = Path.Combine(Path.GetDirectoryName(location),
                                                   "CppSharp.Runtime.dll");
                compilerParameters.ReferencedAssemblies.Add(locationRuntime);

                var codeProvider = new CSharpCodeProvider(
                    new Dictionary <string, string> {
                    { "CompilerVersion", "v4.0" }
                });
                var compilerResults = codeProvider.CompileAssemblyFromFile(
                    compilerParameters, Options.CodeFiles.ToArray());

                var errors = compilerResults.Errors.Cast <CompilerError>();
                foreach (var error in errors.Where(error => !error.IsWarning))
                {
                    Diagnostics.EmitError(error.ToString());
                }
            }
            catch (Exception exception)
            {
                Diagnostics.EmitError("Could not compile the generated source code");
                Diagnostics.EmitMessage(exception.ToString());
            }
        }