Remove the bc_code global
diff --git a/include/bc.h b/include/bc.h
index 7f4a36a..003f32f 100644
--- a/include/bc.h
+++ b/include/bc.h
@@ -136,7 +136,6 @@
// ** Exclude start. **
typedef struct BcGlobals {
- long bc_code;
long bc_interactive;
long bc_std;
long bc_warn;
diff --git a/include/vm.h b/include/vm.h
index 62e6f49..bbae76b 100644
--- a/include/vm.h
+++ b/include/vm.h
@@ -41,7 +41,7 @@
} BcVm;
// ** Exclude start. **
-BcStatus bc_vm_init(BcVm *vm, int filec, char *filev[]);
+BcStatus bc_vm_init(BcVm *vm, BcProgramExecFunc exec, int filec, char *filev[]);
void bc_vm_free(BcVm *vm);
diff --git a/src/bc/bc.c b/src/bc/bc.c
index 9651acc..d53edd5 100644
--- a/src/bc/bc.c
+++ b/src/bc/bc.c
@@ -94,12 +94,12 @@
BcStatus status;
BcVm vm;
+ BcProgramExecFunc exec;
if ((flags & BC_FLAG_INTERACTIVE) || (isatty(0) && isatty(1))) {
bcg.bc_interactive = 1;
} else bcg.bc_interactive = 0;
- bcg.bc_code = flags & BC_FLAG_CODE;
bcg.bc_std = flags & BC_FLAG_STANDARD;
bcg.bc_warn = flags & BC_FLAG_WARN;
@@ -110,7 +110,8 @@
if (status) return status;
}
- status = bc_vm_init(&vm, filec, filev);
+ exec = (flags & BC_FLAG_CODE) ? bc_program_print : bc_program_exec;
+ status = bc_vm_init(&vm, exec, filec, filev);
if (status) return status;
diff --git a/src/bc/vm.c b/src/bc/vm.c
index ffad061..614998f 100644
--- a/src/bc/vm.c
+++ b/src/bc/vm.c
@@ -403,8 +403,8 @@
return status;
}
-BcStatus bc_vm_init(BcVm *vm, int filec, char *filev[]) {
-
+BcStatus bc_vm_init(BcVm *vm, BcProgramExecFunc exec, int filec, char *filev[])
+{
BcStatus status;
struct sigaction act;
@@ -424,7 +424,7 @@
return status;
}
- vm->exec = bcg.bc_code ? bc_program_print : bc_program_exec;
+ vm->exec = exec;
vm->filec = filec;
vm->filev = filev;
diff --git a/toybox/header.c b/toybox/header.c
index 09504a2..05d002f 100644
--- a/toybox/header.c
+++ b/toybox/header.c
@@ -40,7 +40,6 @@
#include "toys.h"
GLOBALS(
- long bc_code;
long bc_interactive;
long bc_std;
long bc_warn;