Example #1
0
        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);
        }
Example #2
0
        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;
        }
Example #3
0
        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;
        }