#include #include #include "val.h" #include "vm.h" ObjString *objstring_new(char *src, size_t len) { char *d = M(NULL, (1 + len) * sizeof (char)); memcpy(d, src, len); d[len] = '\0'; ObjString *o = M(NULL, sizeof(ObjString)); o->obj.oty = OTY_STRING; o->len = len; o->b = d; return o; } void print_val(Val v) { switch (v.ty) { case TY_NIL: printf("nil"); break; case TY_NUM: printf("%f",AS_NUM(v)); break; case TY_BOOL: printf("%s",AS_BOOL(v) ? "true" : "false"); break; case TY_OBJ: switch (AS_OBJ(v)->oty) { case OTY_STRING: printf("%s", AS_CSTRING(v)); break; } break; } } void println_val(Val v) { print_val(v); putchar('\n'); } const char *typename_str(Val v) { switch(v.ty) { case TY_NIL: return "nil"; case TY_NUM: return "num"; case TY_BOOL: return "bool"; case TY_OBJ: switch (AS_OBJ(v)->oty) { case OTY_STRING: return "String"; } break; } return "???"; }