summaryrefslogtreecommitdiff
path: root/parse.y
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-09-29 11:33:03 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-09-29 11:33:03 +0000
commit46bbb62bed20e93b651a9f19c87634d2732f05a5 (patch)
treec8c3bd61f511d4c9455cebbda44d3db323add7a1 /parse.y
parent15686d6ecca6171652b0ff719592d150cf7a2d13 (diff)
parse.y: deferred_dots_gen
* parse.y (deferred_dots_gen): extract for tDOT2 and tDOT3. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56289 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'parse.y')
-rw-r--r--parse.y25
1 files changed, 17 insertions, 8 deletions
diff --git a/parse.y b/parse.y
index 435e69c1a0..e461249570 100644
--- a/parse.y
+++ b/parse.y
@@ -517,6 +517,9 @@ static NODE *match_op_gen(struct parser_params*,NODE*,NODE*);
static ID *local_tbl_gen(struct parser_params*);
#define local_tbl() local_tbl_gen(parser)
+static NODE *deferred_dots_gen(struct parser_params*,NODE*);
+#define deferred_dots(n) deferred_dots_gen(parser, (n))
+
static void fixup_nodes(NODE **);
static VALUE reg_compile_gen(struct parser_params*, VALUE, int);
@@ -2079,10 +2082,7 @@ arg : lhs '=' arg_rhs
value_expr($1);
value_expr($3);
$$ = NEW_DOT2($1, $3);
- if ($1 && nd_type($1) == NODE_LIT && FIXNUM_P($1->nd_lit) &&
- $3 && nd_type($3) == NODE_LIT && FIXNUM_P($3->nd_lit)) {
- deferred_nodes = list_append(deferred_nodes, $$);
- }
+ deferred_dots($$);
/*%
$$ = dispatch2(dot2, $1, $3);
%*/
@@ -2093,10 +2093,7 @@ arg : lhs '=' arg_rhs
value_expr($1);
value_expr($3);
$$ = NEW_DOT3($1, $3);
- if ($1 && nd_type($1) == NODE_LIT && FIXNUM_P($1->nd_lit) &&
- $3 && nd_type($3) == NODE_LIT && FIXNUM_P($3->nd_lit)) {
- deferred_nodes = list_append(deferred_nodes, $$);
- }
+ deferred_dots($$);
/*%
$$ = dispatch2(dot3, $1, $3);
%*/
@@ -8972,6 +8969,18 @@ match_op_gen(struct parser_params *parser, NODE *node1, NODE *node2)
return NEW_CALL(node1, tMATCH, NEW_LIST(node2));
}
+static NODE *
+deferred_dots_gen(struct parser_params *parser, NODE *n)
+{
+ NODE *b = n->nd_beg;
+ NODE *e = n->nd_end;
+ if (b && nd_type(b) == NODE_LIT && FIXNUM_P(b->nd_lit) &&
+ e && nd_type(e) == NODE_LIT && FIXNUM_P(e->nd_lit)) {
+ deferred_nodes = list_append(deferred_nodes, n);
+ }
+ return n;
+}
+
# if WARN_PAST_SCOPE
static int
past_dvar_p(struct parser_params *parser, ID id)