From 2f77657ae97f84edcd665c4cfe00ef91b9cde1bc Mon Sep 17 00:00:00 2001 From: Jo-Philipp Wich Date: Mon, 5 Jul 2021 20:22:39 +0200 Subject: vm: extend API to allow returning result value from VM execution Signed-off-by: Jo-Philipp Wich --- main.c | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) (limited to 'main.c') diff --git a/main.c b/main.c index 88a53f5..6c763cd 100644 --- a/main.c +++ b/main.c @@ -78,7 +78,7 @@ parse(uc_parse_config *config, uc_source *src, uc_value_t *env, uc_value_t *modules, int argc, char **argv) { - uc_value_t *globals = NULL, *arr, *name, *mod; + uc_value_t *globals = NULL, *res = NULL, *arr, *name, *mod; uc_function_t *entry; uc_vm vm = { 0 }; int i, rc = 0; @@ -92,7 +92,7 @@ parse(uc_parse_config *config, uc_source *src, if (!entry) { fprintf(stderr, "%s", err); free(err); - rc = 2; + rc = -1; goto out; } @@ -125,15 +125,25 @@ parse(uc_parse_config *config, uc_source *src, register_variable(globals, ucv_string_get(name), mod); } - rc = uc_vm_execute(&vm, entry); + rc = uc_vm_execute(&vm, entry, &res); - if (rc) { - rc = 1; - goto out; + switch (rc) { + case STATUS_OK: + rc = 0; + break; + + case ERROR_COMPILE: + rc = -1; + break; + + case ERROR_RUNTIME: + rc = -2; + break; } out: uc_vm_free(&vm); + ucv_put(res); return rc; } -- cgit v1.2.3