@@ -29,7 +29,9 @@ typedef enum {
31typedef struct Hdr {
31typedef struct Hdr {
32− ClosureType ty;
32+ uint8_t ty;
33 uint32_t sz;
35 uint32_t sz;
@@ -70,6 +72,7 @@ typedef struct Float {
70typedef struct String {
72typedef struct String {
72 size_t slen;
74 size_t slen;
73 char str[0];
76 char str[0];
@@ -231,17 +234,17 @@ typedef void(*func)(VM*, VAL*);
231// Register access
234// Register access
233#define RVAL (vm->ret)
236#define RVAL (vm->ret)
234−#define LOC(x) (*(vm->valstack_base + (x)))
237+#define LOC(x) (vm->valstack_base[x])
235−#define TOP(x) (*(vm->valstack_top + (x)))
238+#define TOP(x) (vm->valstack_top[x])
236#define REG1 (vm->reg1)
239#define REG1 (vm->reg1)
238// Retrieving values
241// Retrieving values
239static inline char * getstr(String * x) {
242static inline char * getstr(String * x) {
240− return x->slen == ~0? NULL : x->str;
243+ return x->__null? NULL : x->str;
243static inline size_t getstrlen(String * x) {
246static inline size_t getstrlen(String * x) {
244− return x->slen == ~0? 0 : x->slen;
247+ return x->slen;
247#define GETSTR(x) (ISSTR(x) ? getstr((String*)(x)) : GETSTROFF(x))
250#define GETSTR(x) (ISSTR(x) ? getstr((String*)(x)) : GETSTROFF(x))
@@ -265,7 +268,7 @@ static inline size_t getstrlen(String * x) {
266#define CELEM(x) (((x)->hdr.sz - sizeof(Array)) / sizeof(VAL))
269#define CELEM(x) (((x)->hdr.sz - sizeof(Array)) / sizeof(VAL))
268−#define GETTY(x) (((x)->hdr.ty))
271+#define GETTY(x) ((ClosureType)((x)->hdr.ty))
269#define SETTY(x,t) ((x)->hdr.ty = t)
272#define SETTY(x,t) ((x)->hdr.ty = t)
271// Integers, floats and operators
274// Integers, floats and operators
@@ -372,7 +375,9 @@ static inline void updateConF(Con * cl, unsigned tag, unsigned arity) {
372static inline Con * allocConF(VM * vm, unsigned tag, unsigned arity, int outer) {
375static inline Con * allocConF(VM * vm, unsigned tag, unsigned arity, int outer) {
373 size_t sz = sizeof(VAL) * arity;
376 size_t sz = sizeof(VAL) * arity;
374 Con * cl = iallocate(vm, sizeof(*cl) + sz, outer);
377 Con * cl = iallocate(vm, sizeof(*cl) + sz, outer);
375− updateConF(cl, tag, arity);
378+ SETTY(cl, CT_CON);
376 return cl;
381 return cl;