typedef enum {
EXPR_ADD,
EXPR_NEG
} expression_kind_t;
typedef union expression_t expression_t;
typedef struct {
expression_kind_t kind;
type_t *type;
} expression_base_t;
typedef struct {
expression_base_t base;
expression_t *left;
expression_t *right;
} add_t;
typedef struct {
expression_base_t base;
expression_t *op;
} negate_t;
union expression_t {
expression_kind_t kind;
expression_base_t base;
add_t add;
neg_t neg;
};