From cb1ebf84cc152233e78eb0d59a49ee6e9e379e26 Mon Sep 17 00:00:00 2001 From: nobu Date: Fri, 26 Aug 2016 08:29:18 +0000 Subject: 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 --- parse.y | 58 +++++++++++++++++++++++++++++++++------------------------- 1 file changed, 33 insertions(+), 25 deletions(-) (limited to 'parse.y') 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] = { -- cgit v1.2.3