| 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) |
|
|