Added scheme-aware dispatch for in‑memory exec so non‑SchemeRef_DAG_1 refs are rejected, and exposed it via the CLI.
This commit is contained in:
parent
6dfcb2bfc6
commit
d301823c12
|
|
@ -30,6 +30,16 @@ bool amduat_pel_surf_run_with_result(amduat_asl_store_t *store,
|
|||
amduat_reference_t params_ref,
|
||||
amduat_pel_run_result_t *out_run);
|
||||
|
||||
bool amduat_pel_exec_program_artifact_with_scheme(
|
||||
amduat_reference_t scheme_ref,
|
||||
amduat_artifact_t program_artifact,
|
||||
const amduat_artifact_t *inputs,
|
||||
size_t inputs_len,
|
||||
const amduat_artifact_t *params,
|
||||
amduat_artifact_t **out_outputs,
|
||||
size_t *out_outputs_len,
|
||||
amduat_pel_execution_result_value_t *out_result);
|
||||
|
||||
bool amduat_pel_exec_program_artifact(amduat_artifact_t program_artifact,
|
||||
const amduat_artifact_t *inputs,
|
||||
size_t inputs_len,
|
||||
|
|
|
|||
|
|
@ -226,7 +226,8 @@ static bool amduat_pel_exec_program_bytes_unchecked(
|
|||
return ok;
|
||||
}
|
||||
|
||||
bool amduat_pel_exec_program_artifact(amduat_artifact_t program_artifact,
|
||||
static bool amduat_pel_exec_program_artifact_core(
|
||||
amduat_artifact_t program_artifact,
|
||||
const amduat_artifact_t *inputs,
|
||||
size_t inputs_len,
|
||||
const amduat_artifact_t *params,
|
||||
|
|
@ -272,3 +273,54 @@ bool amduat_pel_exec_program_artifact(amduat_artifact_t program_artifact,
|
|||
out_outputs_len,
|
||||
out_result);
|
||||
}
|
||||
|
||||
bool amduat_pel_exec_program_artifact_with_scheme(
|
||||
amduat_reference_t scheme_ref,
|
||||
amduat_artifact_t program_artifact,
|
||||
const amduat_artifact_t *inputs,
|
||||
size_t inputs_len,
|
||||
const amduat_artifact_t *params,
|
||||
amduat_artifact_t **out_outputs,
|
||||
size_t *out_outputs_len,
|
||||
amduat_pel_execution_result_value_t *out_result) {
|
||||
if (out_outputs == NULL || out_outputs_len == NULL || out_result == NULL) {
|
||||
return false;
|
||||
}
|
||||
memset(out_result, 0, sizeof(*out_result));
|
||||
|
||||
if (!amduat_reference_eq(scheme_ref,
|
||||
amduat_pel_program_dag_scheme_ref())) {
|
||||
out_result->pel1_version = 1;
|
||||
out_result->status = AMDUAT_PEL_EXEC_STATUS_SCHEME_UNSUPPORTED;
|
||||
out_result->scheme_ref = scheme_ref;
|
||||
out_result->summary.kind = AMDUAT_PEL_EXEC_ERROR_SCHEME;
|
||||
out_result->summary.status_code = 1;
|
||||
*out_outputs = NULL;
|
||||
*out_outputs_len = 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
return amduat_pel_exec_program_artifact_core(program_artifact,
|
||||
inputs,
|
||||
inputs_len,
|
||||
params,
|
||||
out_outputs,
|
||||
out_outputs_len,
|
||||
out_result);
|
||||
}
|
||||
|
||||
bool amduat_pel_exec_program_artifact(amduat_artifact_t program_artifact,
|
||||
const amduat_artifact_t *inputs,
|
||||
size_t inputs_len,
|
||||
const amduat_artifact_t *params,
|
||||
amduat_artifact_t **out_outputs,
|
||||
size_t *out_outputs_len,
|
||||
amduat_pel_execution_result_value_t *out_result) {
|
||||
return amduat_pel_exec_program_artifact_core(program_artifact,
|
||||
inputs,
|
||||
inputs_len,
|
||||
params,
|
||||
out_outputs,
|
||||
out_outputs_len,
|
||||
out_result);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -84,6 +84,7 @@ static void amduat_pel_cli_print_usage(FILE *stream) {
|
|||
"exec:\n"
|
||||
" amduat-pel exec --program PATH|-\n"
|
||||
" [--program-format raw|artifact]\n"
|
||||
" [--scheme-ref REF|dag]\n"
|
||||
" [--input PATH ...] [--input-format raw|artifact]\n"
|
||||
" [--output-dir DIR] [--output-format raw|artifact]\n"
|
||||
" [--result-out PATH|-] [--format text|json]\n"
|
||||
|
|
@ -665,6 +666,7 @@ static int amduat_pel_cli_cmd_exec(int argc,
|
|||
char **argv,
|
||||
const amduat_pel_cli_global_opts_t *global) {
|
||||
const char *program_path = NULL;
|
||||
const char *scheme_ref_text = "dag";
|
||||
const char **input_paths = NULL;
|
||||
size_t input_paths_len = 0;
|
||||
amduat_asl_io_format_t input_format = AMDUAT_ASL_IO_RAW;
|
||||
|
|
@ -680,6 +682,7 @@ static int amduat_pel_cli_cmd_exec(int argc,
|
|||
amduat_pel_execution_result_value_t result;
|
||||
uint8_t *program_bytes = NULL;
|
||||
size_t program_len = 0;
|
||||
amduat_reference_t scheme_ref;
|
||||
bool stdin_used = false;
|
||||
int exit_code = AMDUAT_PEL_CLI_EXIT_OK;
|
||||
FILE *out_stream = NULL;
|
||||
|
|
@ -732,6 +735,12 @@ static int amduat_pel_cli_cmd_exec(int argc,
|
|||
return AMDUAT_PEL_CLI_EXIT_USAGE;
|
||||
}
|
||||
program_format_set = true;
|
||||
} else if (strcmp(argv[i], "--scheme-ref") == 0) {
|
||||
if (i + 1 >= argc) {
|
||||
fprintf(stderr, "error: --scheme-ref requires a value\n");
|
||||
return AMDUAT_PEL_CLI_EXIT_USAGE;
|
||||
}
|
||||
scheme_ref_text = argv[++i];
|
||||
} else if (strcmp(argv[i], "--output-dir") == 0) {
|
||||
if (i + 1 >= argc) {
|
||||
fprintf(stderr, "error: --output-dir requires a path\n");
|
||||
|
|
@ -792,11 +801,26 @@ static int amduat_pel_cli_cmd_exec(int argc,
|
|||
return AMDUAT_PEL_CLI_EXIT_IO;
|
||||
}
|
||||
|
||||
if (strcmp(scheme_ref_text, "dag") == 0) {
|
||||
scheme_ref = amduat_pel_program_dag_scheme_ref();
|
||||
} else if (!amduat_pel_cli_ref_from_text(scheme_ref_text,
|
||||
global->ref_format,
|
||||
&stdin_used,
|
||||
&scheme_ref)) {
|
||||
fprintf(stderr, "error: invalid --scheme-ref\n");
|
||||
free(program_bytes);
|
||||
free(input_paths);
|
||||
return AMDUAT_PEL_CLI_EXIT_CODEC;
|
||||
}
|
||||
|
||||
if (input_paths_len > 0) {
|
||||
inputs = (amduat_artifact_t *)calloc(
|
||||
input_paths_len, sizeof(*inputs));
|
||||
if (inputs == NULL) {
|
||||
fprintf(stderr, "error: out of memory\n");
|
||||
if (strcmp(scheme_ref_text, "dag") != 0) {
|
||||
amduat_pel_cli_free_reference(&scheme_ref);
|
||||
}
|
||||
free(program_bytes);
|
||||
free(input_paths);
|
||||
return AMDUAT_PEL_CLI_EXIT_STORE;
|
||||
|
|
@ -823,6 +847,9 @@ static int amduat_pel_cli_cmd_exec(int argc,
|
|||
&inputs[i])) {
|
||||
free(bytes);
|
||||
fprintf(stderr, "error: invalid input artifact\n");
|
||||
if (strcmp(scheme_ref_text, "dag") != 0) {
|
||||
amduat_pel_cli_free_reference(&scheme_ref);
|
||||
}
|
||||
free(program_bytes);
|
||||
program_bytes = NULL;
|
||||
exit_code = AMDUAT_PEL_CLI_EXIT_CODEC;
|
||||
|
|
@ -845,12 +872,17 @@ static int amduat_pel_cli_cmd_exec(int argc,
|
|||
amduat_type_tag(0),
|
||||
&program_artifact)) {
|
||||
fprintf(stderr, "error: invalid program artifact\n");
|
||||
if (strcmp(scheme_ref_text, "dag") != 0) {
|
||||
amduat_pel_cli_free_reference(&scheme_ref);
|
||||
}
|
||||
free(program_bytes);
|
||||
program_bytes = NULL;
|
||||
exit_code = AMDUAT_PEL_CLI_EXIT_CODEC;
|
||||
goto exec_cleanup;
|
||||
}
|
||||
if (!amduat_pel_exec_program_artifact(program_artifact,
|
||||
if (!amduat_pel_exec_program_artifact_with_scheme(
|
||||
scheme_ref,
|
||||
program_artifact,
|
||||
inputs,
|
||||
input_paths_len,
|
||||
NULL,
|
||||
|
|
@ -859,6 +891,9 @@ static int amduat_pel_cli_cmd_exec(int argc,
|
|||
&result)) {
|
||||
amduat_asl_artifact_free(&program_artifact);
|
||||
fprintf(stderr, "error: exec failed\n");
|
||||
if (strcmp(scheme_ref_text, "dag") != 0) {
|
||||
amduat_pel_cli_free_reference(&scheme_ref);
|
||||
}
|
||||
free(program_bytes);
|
||||
program_bytes = NULL;
|
||||
exit_code = AMDUAT_PEL_CLI_EXIT_STORE;
|
||||
|
|
@ -868,6 +903,9 @@ static int amduat_pel_cli_cmd_exec(int argc,
|
|||
}
|
||||
free(program_bytes);
|
||||
program_bytes = NULL;
|
||||
if (strcmp(scheme_ref_text, "dag") != 0) {
|
||||
amduat_pel_cli_free_reference(&scheme_ref);
|
||||
}
|
||||
|
||||
for (i = 0; i < (int)outputs_len; ++i) {
|
||||
char path_buf[4096];
|
||||
|
|
@ -988,6 +1026,9 @@ exec_cleanup:
|
|||
amduat_pel_program_dag_free_outputs(outputs, outputs_len);
|
||||
}
|
||||
amduat_pel_execution_result_free(&result);
|
||||
if (strcmp(scheme_ref_text, "dag") != 0) {
|
||||
amduat_pel_cli_free_reference(&scheme_ref);
|
||||
}
|
||||
if (inputs != NULL) {
|
||||
for (i = 0; i < (int)input_paths_len; ++i) {
|
||||
amduat_asl_artifact_free(&inputs[i]);
|
||||
|
|
|
|||
Loading…
Reference in a new issue