aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/args.h2
-rw-r--r--include/vm.h1
-rw-r--r--src/args.c4
-rw-r--r--src/vm.c6
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
diff --git a/src/args.c b/src/args.c
index b26062c6..9c26b7c1 100644
--- a/src/args.c
+++ b/src/args.c
@@ -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;
}
diff --git a/src/vm.c b/src/vm.c
index d363458b..87036c7b 100644
--- a/src/vm.c
+++ b/src/vm.c
@@ -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);