diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-08-26 08:29:23 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-08-26 08:29:23 +0000 |
commit | 504908996c6eec59f920a9da532a3004cf789568 (patch) | |
tree | 6dfe6286ee483044ced1e5ced6538bc8868d66a3 /parse.y | |
parent | dcaeea4f6b8bff9a83901f351499e0e0a52f68fe (diff) | |
download | ruby-504908996c6eec59f920a9da532a3004cf789568.tar.gz |
parse.y: reset indent in heredoc_dedent
* parse.y (parser_heredoc_dedent): reset heredoc_indent and return
the dedented node.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56013 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'parse.y')
-rw-r--r-- | parse.y | 30 |
1 files changed, 15 insertions, 15 deletions
@@ -525,7 +525,7 @@ static int reg_fragment_check_gen(struct parser_params*, VALUE, int); static NODE *reg_named_capture_assign_gen(struct parser_params* parser, VALUE regexp); #define reg_named_capture_assign(regexp) reg_named_capture_assign_gen(parser,(regexp)) -static void parser_heredoc_dedent(struct parser_params*,NODE*); +static NODE *parser_heredoc_dedent(struct parser_params*,NODE*); # define heredoc_dedent(str) parser_heredoc_dedent(parser, (str)) #define get_id(id) (id) @@ -733,7 +733,7 @@ new_args_tail_gen(struct parser_params *parser, VALUE k, VALUE kr, VALUE b) #define new_defined(expr) dispatch1(defined, (expr)) -static void parser_heredoc_dedent(struct parser_params*,VALUE); +static VALUE parser_heredoc_dedent(struct parser_params*,VALUE); # define heredoc_dedent(str) parser_heredoc_dedent(parser, (str)) #define FIXME 0 @@ -3894,17 +3894,13 @@ string : tCHAR string1 : tSTRING_BEG string_contents tSTRING_END { - heredoc_dedent($2); - heredoc_indent = 0; - $$ = new_string1($2); + $$ = new_string1(heredoc_dedent($2)); } ; xstring : tXSTRING_BEG xstring_contents tSTRING_END { - heredoc_dedent($2); - heredoc_indent = 0; - $$ = new_xstring($2); + $$ = new_xstring(heredoc_dedent($2)); } ; @@ -6506,18 +6502,18 @@ dedent_string(VALUE string, int width) } #ifndef RIPPER -static void +static NODE * parser_heredoc_dedent(struct parser_params *parser, NODE *root) { NODE *node, *str_node; int bol = TRUE; int indent = heredoc_indent; - if (indent <= 0) return; + if (indent <= 0) return root; + heredoc_indent = 0; + if (!root) return root; node = str_node = root; - - if (!root) return; if (nd_type(root) == NODE_ARRAY) str_node = root->nd_head; while (str_node) { @@ -6535,14 +6531,18 @@ parser_heredoc_dedent(struct parser_params *parser, NODE *root) } } } + return root; } #else /* RIPPER */ -static void +static VALUE parser_heredoc_dedent(struct parser_params *parser, VALUE array) { - if (heredoc_indent <= 0) return; + int indent = heredoc_indent; - dispatch2(heredoc_dedent, array, INT2NUM(heredoc_indent)); + if (indent <= 0) return array; + heredoc_indent = 0; + dispatch2(heredoc_dedent, array, INT2NUM(indent)); + return array; } static VALUE |