|
|
@ -559,23 +559,23 @@ extern PGDLLIMPORT Node *newNodeMacroHolder; |
|
|
|
#define IsA(nodeptr,_type_) (nodeTag(nodeptr) == T_##_type_) |
|
|
|
#define IsA(nodeptr,_type_) (nodeTag(nodeptr) == T_##_type_) |
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
/*
|
|
|
|
* castNode(type, ptr) casts ptr to type and, if cassert is enabled, verifies |
|
|
|
* castNode(type, ptr) casts ptr to "type *", and if assertions are enabled, |
|
|
|
* that the the c actually has the appropriate type (using it's nodeTag()). |
|
|
|
* verifies that the node has the appropriate type (using its nodeTag()). |
|
|
|
* |
|
|
|
* |
|
|
|
* Use an inline function when assertions are enabled, to avoid multiple |
|
|
|
* Use an inline function when assertions are enabled, to avoid multiple |
|
|
|
* evaluations of the ptr argument (which could e.g. be a function call). |
|
|
|
* evaluations of the ptr argument (which could e.g. be a function call). |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
#ifdef USE_ASSERT_CHECKING |
|
|
|
#ifdef USE_ASSERT_CHECKING |
|
|
|
static inline Node * |
|
|
|
static inline Node * |
|
|
|
castNodeImpl(enum NodeTag type, void *ptr) |
|
|
|
castNodeImpl(NodeTag type, void *ptr) |
|
|
|
{ |
|
|
|
{ |
|
|
|
Assert(ptr == NULL || nodeTag(ptr) == type); |
|
|
|
Assert(ptr == NULL || nodeTag(ptr) == type); |
|
|
|
return ptr; |
|
|
|
return (Node *) ptr; |
|
|
|
} |
|
|
|
} |
|
|
|
#define castNode(_type_, nodeptr) ((_type_ *) castNodeImpl(T_##_type_, nodeptr)) |
|
|
|
#define castNode(_type_, nodeptr) ((_type_ *) castNodeImpl(T_##_type_, nodeptr)) |
|
|
|
#else |
|
|
|
#else |
|
|
|
#define castNode(_type_, nodeptr) ((_type_ *) (nodeptr)) |
|
|
|
#define castNode(_type_, nodeptr) ((_type_ *) (nodeptr)) |
|
|
|
#endif |
|
|
|
#endif /* USE_ASSERT_CHECKING */ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* ----------------------------------------------------------------
|
|
|
|
/* ----------------------------------------------------------------
|
|
|
|