From bfe2e75d7e3b372e55369677028429990c49bc54 Mon Sep 17 00:00:00 2001 From: _ov4 Date: Tue, 20 Oct 2026 11:44:48 +0000 Subject: feat(driver): embed and automatically link the standard library Add -no-std to disable default library loading and linking. Co-Authored-By: Claude Opus 5.5 --- tests/i/no-std/case.json | 1 + tests/i/no-std/expected.txt | 2 ++ tests/i/no-std/notes.md | 3 +++ tests/i/no-std/program.cps | 4 ++++ tests/library/exp-string/case.json | 2 +- tests/run.pl | 6 +++--- 6 files changed, 14 insertions(+), 4 deletions(-) create mode 100644 tests/i/no-std/case.json create mode 100644 tests/i/no-std/expected.txt create mode 100644 tests/i/no-std/notes.md create mode 100644 tests/i/no-std/program.cps (limited to 'tests') diff --git a/tests/i/no-std/case.json b/tests/i/no-std/case.json new file mode 100644 index 0000000..85acec5 --- /dev/null +++ b/tests/i/no-std/case.json @@ -0,0 +1 @@ +{"compiler_args":["-no-std"]} diff --git a/tests/i/no-std/expected.txt b/tests/i/no-std/expected.txt new file mode 100644 index 0000000..1a2735d --- /dev/null +++ b/tests/i/no-std/expected.txt @@ -0,0 +1,2 @@ +C literal without the standard library +42 diff --git a/tests/i/no-std/notes.md b/tests/i/no-std/notes.md new file mode 100644 index 0000000..8fcea00 --- /dev/null +++ b/tests/i/no-std/notes.md @@ -0,0 +1,3 @@ +# No standard library + +Human review: pending. A suffixed literal is C_STRING without loading any pseudocode library. The C puts call writes the supplied text and a newline; integer addition produces 42. diff --git a/tests/i/no-std/program.cps b/tests/i/no-std/program.cps new file mode 100644 index 0000000..feb369f --- /dev/null +++ b/tests/i/no-std/program.cps @@ -0,0 +1,4 @@ +INCLUDE_OBJ "__libc" +EXTERN "C" EXTERN_FUNCTION puts(C_STRING) RETURNS C_INT +CALL puts("C literal without the standard library"C) +OUTPUT 20 + 22 diff --git a/tests/library/exp-string/case.json b/tests/library/exp-string/case.json index a558ad6..e1ed21a 100644 --- a/tests/library/exp-string/case.json +++ b/tests/library/exp-string/case.json @@ -1 +1 @@ -{"sources":["program.cps","../../../pseudocode-lib/_exp_string.cps"]} +{"sources":["program.cps","../../../pseudocode-lib/_exp_string.cps"],"compiler_args":["-no-std"]} diff --git a/tests/run.pl b/tests/run.pl index 8565805..86eff4f 100644 --- a/tests/run.pl +++ b/tests/run.pl @@ -443,7 +443,7 @@ sub main { write_file($target, $sentinel); } my $result = run_command($commands, - [$cpsc_abs, @sources, @flags, '-o', $target], $work, '', 120); + [$cpsc_abs, @sources, @{$config->{compiler_args} // []}, @flags, '-o', $target], $work, '', 120); my $preservation_error; if ($existing && (!-f $target || read_file($target) ne $sentinel)) { $preservation_error = 'compilation failure overwrote existing output'; @@ -541,12 +541,12 @@ sub main { my $target = File::Spec->catfile($work, $IS_WINDOWS ? 'program.exe' : 'program.bin'); my $compiled = run_command($commands, - [$cpsc_abs, @sources, '-o', $target], $work, '', 120); + [$cpsc_abs, @sources, @{$config->{compiler_args} // []}, '-o', $target], $work, '', 120); check_result($compiled, ''); $command = [$target]; } else { - $command = [$cpsc_abs, @sources, '-r']; + $command = [$cpsc_abs, @sources, @{$config->{compiler_args} // []}, '-r']; } my $exec_timeout = exists($config->{timeout}) ? $config->{timeout} + 0 : 30; my $result = run_command($commands, $command, $work, $data, $exec_timeout); -- cgit v1.3.1-4-g156e