Propagated change in prog_t into vm
main now does error reporting for read errors
This commit is contained in:
14
vm/runtime.c
14
vm/runtime.c
@@ -66,10 +66,10 @@ static_assert(OP_PRINT_LONG - OP_PRINT_BYTE == 5,
|
||||
err_t vm_execute(vm_t *vm)
|
||||
{
|
||||
struct Program *prog = &vm->program;
|
||||
prog_t *program_data = prog->data;
|
||||
if (prog->ptr >= program_data->count)
|
||||
prog_t program_data = prog->data;
|
||||
if (prog->ptr >= program_data.count)
|
||||
return ERR_END_OF_PROGRAM;
|
||||
inst_t instruction = program_data->instructions[prog->ptr];
|
||||
inst_t instruction = program_data.instructions[prog->ptr];
|
||||
|
||||
if (UNSIGNED_OPCODE_IS_TYPE(instruction.opcode, OP_PUSH))
|
||||
{
|
||||
@@ -244,10 +244,10 @@ err_t vm_execute(vm_t *vm)
|
||||
err_t vm_execute_all(vm_t *vm)
|
||||
{
|
||||
struct Program *program = &vm->program;
|
||||
const size_t count = program->data->count;
|
||||
const size_t count = program->data.count;
|
||||
err_t err = ERR_OK;
|
||||
// Setup the initial address according to the program
|
||||
program->ptr = program->data->start_address;
|
||||
program->ptr = program->data.start_address;
|
||||
#if VERBOSE >= 1
|
||||
size_t cycles = 0;
|
||||
#endif
|
||||
@@ -258,7 +258,7 @@ err_t vm_execute_all(vm_t *vm)
|
||||
size_t prev_cptr = 0;
|
||||
#endif
|
||||
while (program->ptr < count &&
|
||||
program->data->instructions[program->ptr].opcode != OP_HALT)
|
||||
program->data.instructions[program->ptr].opcode != OP_HALT)
|
||||
{
|
||||
#if VERBOSE >= 2
|
||||
fprintf(stdout, "[vm_execute_all]: Trace(Cycle %lu)\n", cycles);
|
||||
@@ -326,7 +326,7 @@ err_t vm_execute_all(vm_t *vm)
|
||||
|
||||
err_t vm_jump(vm_t *vm, word_t w)
|
||||
{
|
||||
if (w >= vm->program.data->count)
|
||||
if (w >= vm->program.data.count)
|
||||
return ERR_INVALID_PROGRAM_ADDRESS;
|
||||
vm->program.ptr = w;
|
||||
return ERR_OK;
|
||||
|
||||
Reference in New Issue
Block a user