/************************************************ node.h - $Author$ $Date$ created at: Fri May 28 15:14:02 JST 1993 Copyright (C) 1993-1999 Yukihiro Matsumoto ************************************************/ #ifndef NODE_H #define NODE_H enum node_type { NODE_METHOD, NODE_FBODY, NODE_CFUNC, NODE_SCOPE, NODE_BLOCK, NODE_IF, NODE_CASE, NODE_WHEN, NODE_OPT_N, NODE_WHILE, NODE_UNTIL, NODE_ITER, NODE_FOR, NODE_BREAK, NODE_NEXT, NODE_REDO, NODE_RETRY, NODE_BEGIN, NODE_RESCUE, NODE_RESBODY, NODE_ENSURE, NODE_AND, NODE_OR, NODE_NOT, NODE_MASGN, NODE_LASGN, NODE_DASGN, NODE_DASGN_PUSH, NODE_GASGN, NODE_IASGN, NODE_CASGN, NODE_OP_ASGN1, NODE_OP_ASGN2, NODE_OP_ASGN_AND, NODE_OP_ASGN_OR, NODE_CALL, NODE_FCALL, NODE_VCALL, NODE_SUPER, NODE_ZSUPER, NODE_ARRAY, NODE_ZARRAY, NODE_HASH, NODE_RETURN, NODE_YIELD, NODE_LVAR, NODE_DVAR, NODE_GVAR, NODE_IVAR, NODE_CVAR, NODE_NTH_REF, NODE_BACK_REF, NODE_MATCH, NODE_MATCH2, NODE_MATCH3, NODE_LIT, NODE_STR, NODE_DSTR, NODE_XSTR, NODE_DXSTR, NODE_EVSTR, NODE_DREGX, NODE_DREGX_ONCE, NODE_ARGS, NODE_ARGSCAT, NODE_RESTARGS, NODE_BLOCK_ARG, NODE_BLOCK_PASS, NODE_DEFN, NODE_DEFS, NODE_ALIAS, NODE_VALIAS, NODE_UNDEF, NODE_CLASS, NODE_MODULE, NODE_SCLASS, NODE_COLON2, NODE_COLON3, NODE_CNAME, NODE_CREF, NODE_DOT2, NODE_DOT3, NODE_FLIP2, NODE_FLIP3, NODE_ATTRSET, NODE_SELF, NODE_NIL, NODE_TRUE, NODE_FALSE, NODE_DEFINED, NODE_NEWLINE, NODE_POSTEXE, #ifdef C_ALLOCA NODE_ALLOCA, #endif }; typedef struct RNode { unsigned long flags; char *nd_file; union { struct RNode *node; ID id; VALUE value; VALUE (*cfunc)(); ID *tbl; } u1; union { struct RNode *node; ID id; int argc; VALUE value; } u2; union { struct RNode *node; ID id; int state; struct global_entry *entry; int cnt; VALUE value; } u3; } NODE; #define RNODE(obj) (R_CAST(RNode)(obj)) #define nd_type(n) (((RNODE(n))->flags>>FL_USHIFT)&0xff) #define nd_set_type(n,t) \ RNODE(n)->flags=((RNODE(n)->flags&~FL_UMASK)|(((t)<flags>>NODE_LSHIFT)&NODE_LMASK) #define nd_set_line(n,l) \ RNODE(n)->flags=((RNODE(n)->flags&~(-1<cbase)->nd_clss,0,0)) #define NEW_CREF() (cur_cref=rb_node_newnode(NODE_CREF,0,0,cur_cref)) #define NEW_CBODY(b) (cur_cref->nd_body=NEW_SCOPE(b),cur_cref) #define NEW_DOT2(b,e) rb_node_newnode(NODE_DOT2,b,e,0) #define NEW_DOT3(b,e) rb_node_newnode(NODE_DOT3,b,e,0) #define NEW_ATTRSET(a) rb_node_newnode(NODE_ATTRSET,a,0,0) #define NEW_SELF() rb_node_newnode(NODE_SELF,0,0,0) #define NEW_NIL() rb_node_newnode(NODE_NIL,0,0,0) #define NEW_TRUE() rb_node_newnode(NODE_TRUE,0,0,0) #define NEW_FALSE() rb_node_newnode(NODE_FALSE,0,0,0) #define NEW_DEFINED(e) rb_node_newnode(NODE_DEFINED,e,0,0) #define NEW_NEWLINE(n) rb_node_newnode(NODE_NEWLINE,0,0,n) #define NEW_PREEXE(b) NEW_SCOPE(b) #define NEW_POSTEXE() rb_node_newnode(NODE_POSTEXE,0,0,0) NODE *rb_node_newnode(); VALUE rb_method_booundp(); #define NOEX_PUBLIC 0 #define NOEX_UNDEF 1 #define NOEX_CFUNC 1 #define NOEX_PRIVATE 2 #define NOEX_PROTECTED 4 NODE *rb_compile_cstr _((const char*, const char*, int, int)); NODE *rb_compile_string _((const char*, VALUE, int)); NODE *rb_compile_file _((const char*, VALUE, int)); void rb_add_method _((VALUE, ID, NODE *, int)); NODE *rb_node_newnode(); struct global_entry *rb_global_entry _((ID)); VALUE rb_gvar_get _((struct global_entry *)); VALUE rb_gvar_set _((struct global_entry *, VALUE)); VALUE rb_gvar_defined _((struct global_entry *)); #endif