diff options
-rw-r--r-- | include/args.h | 2 | ||||
-rw-r--r-- | include/vm.h | 1 | ||||
-rw-r--r-- | src/args.c | 4 | ||||
-rw-r--r-- | src/vm.c | 6 |
4 files changed, 8 insertions, 5 deletions
diff --git a/include/args.h b/include/args.h index 6b68ed30..d5378506 100644 --- a/include/args.h +++ b/include/args.h @@ -39,7 +39,7 @@ #include <status.h> #include <vm.h> -void bc_args(int argc, char *argv[]); +void bc_args(int argc, char *argv[], bool exit_exprs); extern const char* const bc_args_env_name; diff --git a/include/vm.h b/include/vm.h index 8b0babff..80a060ed 100644 --- a/include/vm.h +++ b/include/vm.h @@ -356,6 +356,7 @@ typedef struct BcVm { uint16_t line_len; bool no_exit_exprs; + bool exit_exprs; bool eof; #endif // !BC_ENABLE_LIBRARY @@ -89,7 +89,7 @@ static void bc_args_file(const char *file) { free(buf); } -void bc_args(int argc, char *argv[]) { +void bc_args(int argc, char *argv[], bool exit_exprs) { int c; size_t i; @@ -109,6 +109,7 @@ void bc_args(int argc, char *argv[]) { if (vm.no_exit_exprs) bc_vm_verr(BC_ERR_FATAL_OPTION, "-e (--expression)"); bc_args_exprs(opts.optarg); + vm.exit_exprs = (exit_exprs || vm.exit_exprs); break; } @@ -119,6 +120,7 @@ void bc_args(int argc, char *argv[]) { if (vm.no_exit_exprs) bc_vm_verr(BC_ERR_FATAL_OPTION, "-f (--file)"); bc_args_file(opts.optarg); + vm.exit_exprs = (exit_exprs || vm.exit_exprs); } break; } @@ -315,7 +315,7 @@ static void bc_vm_envArgs(const char* const env_args_name) { buf = NULL; bc_vec_push(&vm.env_args, &buf); - bc_args((int) vm.env_args.len - 1, bc_vec_item(&vm.env_args, 0)); + bc_args((int) vm.env_args.len - 1, bc_vec_item(&vm.env_args, 0), false); } static size_t bc_vm_envLen(const char *var) { @@ -820,7 +820,7 @@ static void bc_vm_exec(void) { BC_SIG_UNLOCK; - if (!vm.no_exit_exprs) return; + if (!vm.no_exit_exprs && vm.exit_exprs) return; } for (i = 0; i < vm.files.len; ++i) { @@ -905,7 +905,7 @@ void bc_vm_boot(int argc, char *argv[], const char *env_len, #endif // BC_ENABLED bc_vm_envArgs(env_args); - bc_args(argc, argv); + bc_args(argc, argv, true); #if BC_ENABLED if (BC_IS_POSIX) vm.flags &= ~(BC_FLAG_G); |