diff --git a/lang/main.c b/lang/main.c index 26db195..cff9e86 100644 --- a/lang/main.c +++ b/lang/main.c @@ -6,33 +6,25 @@ #include "vm.h" #include -static void test_number(void) { - struct object *stack[16] = {0}; - struct vm_state state; - state.stack_next = (struct object **)&stack; - state.stack_base = state.stack_next; +static void test_number(struct vm_state *state) { struct object *numA = number_create(5); struct object *numB = number_create(3); - vm_stack_push(&state, NULL); - vm_stack_push(&state, numB); + vm_stack_push(state, NULL); + vm_stack_push(state, numB); numB = NULL; - vm_call(numA, "Add", 2, &state); - struct object *numC = vm_stack_get(&state, 0); + vm_call(numA, "Add", 2, state); + struct object *numC = vm_stack_get(state, 0); printf("numC value is %i\n", number_value(numC)); - vm_stack_drop(&state, 2); + vm_stack_drop(state, 2); object_drop(&numA); object_drop(&numC); } -static void test_func(void) { - struct object *stack[16] = {0}; - struct vm_state state; - state.stack_next = (struct object **)&stack; - state.stack_base = state.stack_next; +static void test_func(struct vm_state *state) { struct object *funcA = func_create(); - vm_stack_push(&state, NULL); - vm_call(funcA, "Call", 1, &state); - struct object *numA = vm_stack_pop(&state); + vm_stack_push(state, NULL); + vm_call(funcA, "Call", 1, state); + struct object *numA = vm_stack_pop(state); printf("code return value is %i\n", number_value(numA)); object_drop(&numA); object_drop(&funcA); @@ -40,7 +32,11 @@ int lang_main(void) { printf("Hello world!\n"); - test_number(); - test_func(); + struct object *stack[16] = {0}; + struct vm_state state; + state.stack_next = (struct object **)&stack; + state.stack_base = state.stack_next; + test_number(&state); + test_func(&state); return 0; }