aboutsummaryrefslogtreecommitdiffstats
path: root/parse.y
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-08-26 08:29:18 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-08-26 08:29:18 +0000
commitcf35c7cfcc17765b4eafbdcf340948f64f5344b9 (patch)
tree72359323b6c28317ed256a58311fc9d5ee8cd91b /parse.y
parent3e2893d7a80ebcc735247db430d90151f7da024e (diff)
downloadruby-cf35c7cfcc17765b4eafbdcf340948f64f5344b9.tar.gz
parse.y: new_xstring_gen
* parse.y (new_xstring_gen): extract from the rule. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56011 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'parse.y')
-rw-r--r--parse.y58
1 files changed, 33 insertions, 25 deletions
diff --git a/parse.y b/parse.y
index ccf9c96402..92bf2ca3d1 100644
--- a/parse.y
+++ b/parse.y
@@ -504,6 +504,9 @@ static NODE *new_hash_gen(struct parser_params *parser, NODE *hash);
static NODE *new_regexp_gen(struct parser_params *, NODE *, int);
#define new_regexp(node, opt) new_regexp_gen(parser, node, opt)
+static NODE *new_xstring_gen(struct parser_params *, NODE *);
+#define new_xstring(node) new_xstring_gen(parser, node)
+
static NODE *match_op_gen(struct parser_params*,NODE*,NODE*);
#define match_op(node1,node2) match_op_gen(parser, (node1), (node2))
@@ -564,6 +567,9 @@ static VALUE new_attr_op_assign_gen(struct parser_params *parser, VALUE lhs, VAL
static VALUE new_regexp_gen(struct parser_params *, VALUE, VALUE);
#define new_regexp(node, opt) new_regexp_gen(parser, node, opt)
+static VALUE new_xstring_gen(struct parser_params *, VALUE);
+#define new_xstring(str) new_xstring_gen(parser, str)
+
#define const_path_field(w, n) dispatch2(const_path_field, (w), (n))
#define top_const_field(n) dispatch1(top_const_field, (n))
static VALUE const_decl_gen(struct parser_params *parser, VALUE path);
@@ -3898,33 +3904,9 @@ string1 : tSTRING_BEG string_contents tSTRING_END
xstring : tXSTRING_BEG xstring_contents tSTRING_END
{
- /*%%%*/
- NODE *node = $2;
- /*%
- %*/
heredoc_dedent($2);
heredoc_indent = 0;
- /*%%%*/
- if (!node) {
- node = NEW_XSTR(STR_NEW0());
- }
- else {
- switch (nd_type(node)) {
- case NODE_STR:
- nd_set_type(node, NODE_XSTR);
- break;
- case NODE_DSTR:
- nd_set_type(node, NODE_DXSTR);
- break;
- default:
- node = NEW_NODE(NODE_DXSTR, Qnil, 1, NEW_LIST(node));
- break;
- }
- }
- $$ = node;
- /*%
- $$ = dispatch1(xstring_literal, $2);
- %*/
+ $$ = new_xstring($2);
}
;
@@ -9118,6 +9100,26 @@ new_regexp_gen(struct parser_params *parser, NODE *node, int options)
}
return node;
}
+
+static NODE *
+new_xstring_gen(struct parser_params *parser, NODE *node)
+{
+ if (!node) {
+ return NEW_XSTR(STR_NEW0());
+ }
+ switch (nd_type(node)) {
+ case NODE_STR:
+ nd_set_type(node, NODE_XSTR);
+ break;
+ case NODE_DSTR:
+ nd_set_type(node, NODE_DXSTR);
+ break;
+ default:
+ node = NEW_NODE(NODE_DXSTR, Qnil, 1, NEW_LIST(node));
+ break;
+ }
+ return node;
+}
#else /* !RIPPER */
static int
id_is_var_gen(struct parser_params *parser, ID id)
@@ -9155,6 +9157,12 @@ new_regexp_gen(struct parser_params *parser, VALUE re, VALUE opt)
}
return dispatch2(regexp_literal, re, opt);
}
+
+static VALUE
+new_xstring_gen(struct parser_params *parser, VALUE str)
+{
+ return dispatch1(xstring_literal, str);
+}
#endif /* !RIPPER */
static const char lex_state_names[][13] = {