#include #include #include "panic.h" #include "value.h" bool is_int(value v) { return v & 0x1; } int64_t to_int(value v) { if (!is_int(v)) { panicf("value 0x%lx is not an int!\n", v); } return (int64_t) v >> 1; } value from_int(int64_t i) { return i << 1 | 0x1; } bool is_pointer(value v) { return v && !(v & 0x7); } value *to_pointer(value v) { if (!is_pointer(v)) { panicf("value 0x%lx is not a pointer!\n", v); } return (value *) v; } value from_pointer(value *p) { return (value) p; }