#include "vmstate.h" #include int vm_pop(struct vm_state *vm, uint64_t *w) { return stack_pop(&vm->data_stack, w); } int vm_pop_integer(struct vm_state *vm, int64_t *v) { int res; uint64_t w; if ((res = stack_pop(&vm->data_stack, &w)) != 0) { return res; } if (w & FLAG_REF) { return -EINVAL; } if (w & (1ULL << 62)) { w |= 1ULL << 63; } *v = w; return 0; } int vm_push_integer(struct vm_state *vm, int64_t v) { return stack_push(&vm->data_stack, v & ~FLAG_REF); } int vm_push_bool(struct vm_state *vm, int v) { if (v) { return stack_push(&vm->data_stack, 1); } else { return stack_push(&vm->data_stack, FLAG_REF); } } int vm_push_ref(struct vm_state *vm, struct vm_value *obj) { return stack_push(&vm->data_stack, encode_ref(obj)); }