Fix a bug where bc was endlessly trying to execute code
diff --git a/src/bc/vm.c b/src/bc/vm.c
index 8c94650..0c82dd9 100644
--- a/src/bc/vm.c
+++ b/src/bc/vm.c
@@ -195,34 +195,30 @@
goto read_err;
}
- do {
+ if (BC_PARSE_CAN_EXEC(&vm->parse)) {
- if (BC_PARSE_CAN_EXEC(&vm->parse)) {
+ status = exec(&vm->program);
- status = exec(&vm->program);
+ if (status) goto read_err;
- if (status) goto read_err;
+ if (bc_interactive) {
- if (bc_interactive) {
+ fflush(stdout);
- fflush(stdout);
+ if (bc_signal) {
- if (bc_signal) {
-
- status = bc_vm_handleSignal(vm);
-
- fprintf(stderr, bc_ready_prompt);
- fflush(stderr);
- }
- }
- else if (bc_signal) {
status = bc_vm_handleSignal(vm);
- goto read_err;
+
+ fprintf(stderr, bc_ready_prompt);
+ fflush(stderr);
}
}
- else status = BC_STATUS_EXEC_FILE_NOT_EXECUTABLE;
-
- } while (!status);
+ else if (bc_signal) {
+ status = bc_vm_handleSignal(vm);
+ goto read_err;
+ }
+ }
+ else status = BC_STATUS_EXEC_FILE_NOT_EXECUTABLE;
read_err: