/*
** Copyright (C) University of Virginia, Massachusetts Institue of Technology 1994-2003.
** See ../LICENSE for license information.
*/
/*
** typeExpr.h
*/
typedef enum
{
TEXPR_BASE, TEXPR_PTR, TEXPR_ARRAY, TEXPR_FCN
} typeExprKind;
struct s_typeExpr
{
int wrapped; /* number of balanced parentheses around this program node */
typeExprKind kind; /* different kinds of type constructors */
union {
ltoken base;
/*@null@*/ typeExpr pointer;
struct {
/*@null@*/ typeExpr elementtype;
/*@null@*/ termNode size;
} array;
struct {
/*@null@*/ typeExpr returntype; /* not really ... return-part maybe */
paramNodeList args;
} function;
} content;
sort sort;
} ;
extern void typeExpr_free (/*@only@*/ /*@null@*/ typeExpr p_x);
extern /*@only@*/ cstring typeExpr_unparse (/*@null@*/ typeExpr p_x);
extern /*@only@*/ cstring typeExpr_unparseNoBase (/*@null@*/ typeExpr p_x);
/* like a declaratorNode but without varId */
typedef typeExpr abstDeclaratorNode;
extern void abstDeclaratorNode_free (/*@only@*/ /*@null@*/ abstDeclaratorNode p_x);
# define abstDeclaratorNode_free(x) typeExpr_free(x);
syntax highlighted by Code2HTML, v. 0.9.1