private Boolean __CreateProvider(ProgrammingLanguages programmingLanguage, ref CodeDomProvider provider) { Boolean hasTheProvider = new Boolean(); String language = programmingLanguage.ToString(); switch (programmingLanguage) { case ProgrammingLanguages.CSharp: hasTheProvider = CodeDomProvider.IsDefinedLanguage(language); break; case ProgrammingLanguages.VisualBasic: hasTheProvider = CodeDomProvider.IsDefinedLanguage(language); break; default: /* C# Programming Language. */ language = "C#"; hasTheProvider = !hasTheProvider; break; } ; provider = CodeDomProvider.CreateProvider(language); return(hasTheProvider); }
public void Compile(string SourceFile, string OutputFile, ProgrammingLanguages PL, out TestResults Result, int SolutionID = -1, string WorkingDirectory = null) { if (!AvailablePL.Contains(PL)) { throw new NotSupportedException("Compiler " + PL.ToString() + " not supported"); } if (PL != ProgrammingLanguages.Python) { logger.Debug("Begin compiling solution {0} \"{1}\"", SolutionID, Path.GetFileName(SourceFile)); if (logger.IsDebugEnabled) Console.WriteLine(DateTime.Now.ToString(culture) + " - Begin compiling solution {0} \"{1}\"", SolutionID, Path.GetFileName(SourceFile)); } if (File.Exists(OutputFile)) { File.Delete(OutputFile); } string untrustedCode; if (ContainsUntrustedCode(SourceFile, PL, out untrustedCode)) { logger.Debug("Solution {0} \"{1}\" contains untrusted code: {2}", SolutionID, Path.GetFileName(SourceFile), untrustedCode); if (logger.IsDebugEnabled) Console.WriteLine(DateTime.Now.ToString(culture) + " - Solution {0} \"{1}\" contains untrusted code: {2}", SolutionID, Path.GetFileName(SourceFile), untrustedCode); Result = TestResults.CE; return; } // TODO: FL Result = TestResults.RTE; try { switch (PL) { case ProgrammingLanguages.C: CompileC(SourceFile, OutputFile, WorkingDirectory); break; case ProgrammingLanguages.CPP: CompileCPP(SourceFile, OutputFile, WorkingDirectory); break; case ProgrammingLanguages.VCPP: CompileCPP(SourceFile, OutputFile, WorkingDirectory); break; case ProgrammingLanguages.CS: CompileCS(SourceFile, OutputFile, WorkingDirectory); break; case ProgrammingLanguages.VB: CompileVB(SourceFile, OutputFile, WorkingDirectory); break; case ProgrammingLanguages.Java: CompileJava(SourceFile, OutputFile, WorkingDirectory); break; case ProgrammingLanguages.Pascal: case ProgrammingLanguages.Delphi: case ProgrammingLanguages.ObjPas: case ProgrammingLanguages.TurboPas: CompilePascal(SourceFile, OutputFile, PL, WorkingDirectory); break; case ProgrammingLanguages.Python: CompilePython(SourceFile, OutputFile, WorkingDirectory); break; default: throw new NotSupportedException("Compiler not found in case"); } } catch (InvalidDataException ex) { logger.Debug("Compiling solution {0} \"{1}\" fail: {2}", SolutionID, Path.GetFileName(SourceFile), ex.Message); if (logger.IsDebugEnabled) Console.WriteLine(DateTime.Now.ToString(culture) + " - Compiling solution {0} \"{1}\" fail: {2}", SolutionID, Path.GetFileName(SourceFile), ex.Message); Result = TestResults.CE; return; } Result = TestResults.OK; }
public void Compile(string SourceFile, string OutputFile, ProgrammingLanguages PL, out TestResults Result, int SolutionID = -1, string WorkingDirectory = null) { if (!AvailablePL.Contains(PL)) { throw new NotSupportedException("Compiler " + PL.ToString() + " not supported"); } if (PL != ProgrammingLanguages.Python) { logger.Debug("Begin compiling solution {0} \"{1}\"", SolutionID, Path.GetFileName(SourceFile)); if (logger.IsDebugEnabled) { Console.WriteLine(DateTime.Now.ToString(culture) + " - Begin compiling solution {0} \"{1}\"", SolutionID, Path.GetFileName(SourceFile)); } } if (File.Exists(OutputFile)) { File.Delete(OutputFile); } string untrustedCode; if (ContainsUntrustedCode(SourceFile, PL, out untrustedCode)) { logger.Debug("Solution {0} \"{1}\" contains untrusted code: {2}", SolutionID, Path.GetFileName(SourceFile), untrustedCode); if (logger.IsDebugEnabled) { Console.WriteLine(DateTime.Now.ToString(culture) + " - Solution {0} \"{1}\" contains untrusted code: {2}", SolutionID, Path.GetFileName(SourceFile), untrustedCode); } Result = TestResults.CE; return; } // TODO: FL Result = TestResults.RTE; try { switch (PL) { case ProgrammingLanguages.C: CompileC(SourceFile, OutputFile, WorkingDirectory); break; case ProgrammingLanguages.CPP: CompileCPP(SourceFile, OutputFile, WorkingDirectory); break; case ProgrammingLanguages.VCPP: CompileCPP(SourceFile, OutputFile, WorkingDirectory); break; case ProgrammingLanguages.CS: CompileCS(SourceFile, OutputFile, WorkingDirectory); break; case ProgrammingLanguages.VB: CompileVB(SourceFile, OutputFile, WorkingDirectory); break; case ProgrammingLanguages.Java: CompileJava(SourceFile, OutputFile, WorkingDirectory); break; case ProgrammingLanguages.Pascal: case ProgrammingLanguages.Delphi: case ProgrammingLanguages.ObjPas: case ProgrammingLanguages.TurboPas: CompilePascal(SourceFile, OutputFile, PL, WorkingDirectory); break; case ProgrammingLanguages.Python: CompilePython(SourceFile, OutputFile, WorkingDirectory); break; default: throw new NotSupportedException("Compiler not found in case"); } } catch (InvalidDataException ex) { logger.Debug("Compiling solution {0} \"{1}\" fail: {2}", SolutionID, Path.GetFileName(SourceFile), ex.Message); if (logger.IsDebugEnabled) { Console.WriteLine(DateTime.Now.ToString(culture) + " - Compiling solution {0} \"{1}\" fail: {2}", SolutionID, Path.GetFileName(SourceFile), ex.Message); } Result = TestResults.CE; return; } Result = TestResults.OK; }