summaryrefslogtreecommitdiff
path: root/node.h
diff options
context:
space:
mode:
Diffstat (limited to 'node.h')
-rw-r--r--node.h19
1 files changed, 19 insertions, 0 deletions
diff --git a/node.h b/node.h
index 5b917daae4..f70cdc959a 100644
--- a/node.h
+++ b/node.h
@@ -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);