Hi,

There's a repeated pattern of

Assert(IsA(ptr, nodetype));
foo = (nodetype *) ptr;

how about adding a castNode() that combines those? Something like:

#if !defined(USE_ASSERT_CHECKING)

#define castNode(nodeptr,_type_) \
        ((_type_ *) (nodeptr))

#elif defined(__GNUC__)

#define castNode(nodeptr,_type_) \
        ((_type_ *) ({ \
                Node   *_result; \
                _result = nodeptr; \
                Assert(IsA(_result, _type_)); \
                _result; \
        }))

#else

extern PGDLLIMPORT Node *newNodeMacroHolder;
#define castNode(nodePtr,_type_) \
        ( \
                newNodeMacroHolder = nodePtr, \
                AssertMacro(IsA(newNodeMacroHolder, _type_)), \
                (_type_ *) newNodeMacroHolder \
        )

#endif

Greetings,

Andres Freund

-- 
 Andres Freund                     http://www.2ndQuadrant.com/
 PostgreSQL Development, 24x7 Support, Training & Services


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to