#ifndef _val_h #define _val_h #include struct _val; typedef struct _val Val; struct _obj; typedef struct _obj Obj; typedef enum { TY_NUM, TY_BOOL, TY_NIL, } ValTy; struct _val { ValTy ty; union { double d; bool b; Obj *o; } as; }; struct _obj { // some gc shit int foo; }; #define IS_NUM(x) (x.ty == TY_NUM) #define IS_BOOL(x) (x.ty == TY_BOOL) #define IS_NIL(x) (x.ty == NIL) #endif