+#include <stdarg.h>
+
+/* TEH MACROS FROM MOUNT DOOM */
+
+#define CL_IS_NODE(X) \
+ (((CLNode*)(X))->type == CL_LIST || \
+ ((CLNode*)(X))->type == CL_BLOCK || \
+ ((CLNode*)(X))->type == CL_LISTBLOCK)
+#define CL_NODE(X) ((CLNode*)(X))
+#define CL_ID(X) (((CLNode*)(X))->u.lb.id)
+#define CL_LIST(X) (((CLNode*)(X))->u.lb.list)
+#define CL_BLOCK(X) (((CLNode*)(X))->u.lb.block)
+#define CL_NUMVAL(X) (((CLNode*)(X))->u.num)
+#define CL_STRVAL(X) (((CLNode*)(X))->u.str)
+#define CL_LINE(X) (((CLNode*)(X))->lineno)
+
+#define CL_ASSERT_NODE(X) \
+ g_assert(CL_IS_NODE(X))
+#define CL_ASSERT_NUM(X) \
+ g_assert(((CLNode*)(X))->type == CL_NUM)
+#define CL_ASSERT_STR(X) \
+ g_assert(((CLNode*)(X))->type == CL_STR)
+
+#define CL_LIST_NTH(X,Y)\
+ CL_NODE(g_list_nth(CL_LIST(X),(Y))->data)