#ifndef minimal_node_h #define minimal_node_h #ifdef NEED_MINIMAL_NODE #include "ruby.h" typedef struct RNode { unsigned long flags; void * reserved; union { struct RNode * node; VALUE (*cfunc)(ANYARGS); } u1; union { struct RNode * node; VALUE value; } u2; union { struct RNode * node; } u3; } NODE; #define nd_cfnc u1.cfunc #define nd_rval u2.value #define NEW_NODE(t,a0,a1,a2) rb_node_newnode((t),(VALUE)(a0),(VALUE)(a1),(VALUE)(a2)) /* TODO: No way to know the correct size of node_type */ enum node_type { NODE_FOO, }; void rb_add_method(VALUE, ID, NODE *, int); NODE *rb_node_newnode(enum node_type, VALUE, VALUE, VALUE); extern int NODE_MEMO; extern int NODE_METHOD; extern int NODE_FBODY; extern int NODE_CFUNC; void Init_minimal_node(); #define NOEX_PUBLIC 0x0 #define NEW_METHOD(n,x,v) NEW_NODE(NODE_METHOD,x,n,v) #define NEW_FBODY(n,i) NEW_NODE(NODE_FBODY,i,n,0) #define NEW_CFUNC(f,c) NEW_NODE(NODE_CFUNC,f,c,0) #endif #endif