| 94 | } |
| 95 | |
| 96 | void hc_vm_eval(struct hc_vm *vm, |
| 97 | const size_t start_pc, |
| 98 | const size_t end_pc) { |
| 99 | const uint8_t *const ep = (end_pc == -1) |
| 100 | ? vm->code.end |
| 101 | : hc_vector_get(&vm->code, end_pc); |
| 102 | |
| 103 | for (uint8_t *p = hc_vector_get(&vm->code, start_pc); |
| 104 | p != ep; |
| 105 | p = (*(hc_op_eval_t *)p)(vm, p + vm->code.item_size)); |
| 106 | } |
| 107 | |
| 108 | static void fun_print(const struct hc_value *v, struct hc_stream *out) { |
| 109 | hc_printf(out, "%p", v->as_other); |