from pathlib import Path from src.safe_subprocess import run from src.generic_eval import main LANG_NAME = "Ada" LANG_EXT = ".adb" def eval_script(path: Path): working_dir: Path = path.parent / (path.stem + "_tmp") working_dir.mkdir() chop_result = run(["gnatchop", "-w", path, working_dir]) if chop_result.exit_code != 0: return { "status": "SyntaxError (gnatchop)", "exit_code": chop_result.exit_code, "stdout": chop_result.stdout, "stderr": chop_result.stderr, } build_result = run( [ "gnatmake", "-gnatW8", "main.adb", "-o", "main", "-g", "-j0", "-gnata", "-gnat2022", "-gnateE", "-bargs", "-Es", ], cwd=str(working_dir), ) if build_result.exit_code != 0: return { "status": "SyntaxError (gnatmake)", "exit_code": build_result.exit_code, "stdout": build_result.stdout, "stderr": build_result.stderr, } status = "OK" run_result = run(["./main"], cwd=str(working_dir)) if run_result.timeout: status = "Timeout" elif run_result.exit_code != 0: status = "Exception" return { "status": status, "exit_code": run_result.exit_code, "stdout": run_result.stdout, "stderr": run_result.stderr, } if __name__ == "__main__": main(eval_script, LANG_NAME, LANG_EXT)