diff options
Diffstat (limited to 'node.h')
-rw-r--r-- | node.h | 19 |
1 files changed, 19 insertions, 0 deletions
@@ -26,7 +26,9 @@ enum node_type { NODE_UNLESS, NODE_CASE, NODE_CASE2, + NODE_CASE3, NODE_WHEN, + NODE_IN, NODE_WHILE, NODE_UNTIL, NODE_ITER, @@ -121,6 +123,8 @@ enum node_type { NODE_ATTRASGN, NODE_LAMBDA, NODE_METHREF, + NODE_ARYPTN, + NODE_HSHPTN, NODE_LAST }; @@ -162,6 +166,7 @@ typedef struct RNode { long state; struct rb_global_entry *entry; struct rb_args_info *args; + struct rb_ary_pattern_info *apinfo; VALUE value; } u3; rb_code_location_t nd_loc; @@ -268,6 +273,12 @@ typedef struct RNode { #define nd_brace u2.argc +#define nd_pconst u1.node +#define nd_pkwargs u2.node +#define nd_pkwrestarg u3.node + +#define nd_apinfo u3.apinfo + #define NEW_NODE(t,a0,a1,a2,loc) rb_node_newnode((t),(VALUE)(a0),(VALUE)(a1),(VALUE)(a2),loc) #define NEW_DEFN(i,a,d,loc) NEW_NODE(NODE_DEFN,0,i,NEW_SCOPE(a,d,loc),loc) @@ -278,7 +289,9 @@ typedef struct RNode { #define NEW_UNLESS(c,t,e,loc) NEW_NODE(NODE_UNLESS,c,t,e,loc) #define NEW_CASE(h,b,loc) NEW_NODE(NODE_CASE,h,b,0,loc) #define NEW_CASE2(b,loc) NEW_NODE(NODE_CASE2,0,b,0,loc) +#define NEW_CASE3(h,b,loc) NEW_NODE(NODE_CASE3,h,b,0,loc) #define NEW_WHEN(c,t,e,loc) NEW_NODE(NODE_WHEN,c,t,e,loc) +#define NEW_IN(c,t,e,loc) NEW_NODE(NODE_IN,c,t,e,loc) #define NEW_WHILE(c,b,n,loc) NEW_NODE(NODE_WHILE,c,b,n,loc) #define NEW_UNTIL(c,b,n,loc) NEW_NODE(NODE_UNTIL,c,b,n,loc) #define NEW_FOR(i,b,loc) NEW_NODE(NODE_FOR,0,b,i,loc) @@ -434,6 +447,12 @@ struct rb_args_info { NODE *opt_args; }; +struct rb_ary_pattern_info { + NODE *pre_args; + NODE *rest_arg; + NODE *post_args; +}; + struct parser_params; void *rb_parser_malloc(struct parser_params *, size_t); void *rb_parser_realloc(struct parser_params *, void *, size_t); |