diff options
| author | Seeker <[email protected]> | 2021-01-06 16:46:44 -0800 |
|---|---|---|
| committer | Seeker <[email protected]> | 2021-01-06 16:46:44 -0800 |
| commit | d52c82d64843cd6cb0a20d21280096143d5784cc (patch) | |
| tree | f6aae44bc732b145d9062a8cee567e025790168a | |
| parent | e279528ff395c062b0cd62f82f0d3bc4c5c97e15 (diff) | |
| download | mruby-d52c82d64843cd6cb0a20d21280096143d5784cc.tar.gz mruby-d52c82d64843cd6cb0a20d21280096143d5784cc.zip | |
Add heredoc_push_indented helper function
| -rw-r--r-- | mrbgems/mruby-compiler/core/parse.y | 28 | ||||
| -rw-r--r-- | mrbgems/mruby-compiler/core/y.tab.c | 28 |
2 files changed, 28 insertions, 28 deletions
diff --git a/mrbgems/mruby-compiler/core/parse.y b/mrbgems/mruby-compiler/core/parse.y index d0ab3bfe2..4f2e30931 100644 --- a/mrbgems/mruby-compiler/core/parse.y +++ b/mrbgems/mruby-compiler/core/parse.y @@ -4694,6 +4694,18 @@ heredoc_remove_indent(parser_state *p, parser_heredoc_info *hinf) } } +static void +heredoc_push_indented(parser_state *p, parser_heredoc_info *hinf, node *pair, node *escaped, node *nspaces, mrb_bool empty_line) +{ + hinf->indented = push(hinf->indented, cons(pair, cons(escaped, nspaces))); + while (nspaces) { + size_t tspaces = (size_t)nspaces->car; + if ((hinf->indent == ~0U || tspaces < hinf->indent) && !empty_line) + hinf->indent = tspaces; + nspaces = nspaces->cdr; + } +} + static int parse_string(parser_state *p) { @@ -4759,13 +4771,7 @@ parse_string(parser_state *p) pylval.nd = nd; if (unindent && head) { nspaces = push(nspaces, (node*)spaces); - hinf->indented = push(hinf->indented, cons(nd->cdr, cons(escaped, nspaces))); - while (nspaces) { - size_t tspaces = (size_t)nspaces->car; - if ((hinf->indent == ~0U || tspaces < hinf->indent) && (!empty || !line_head)) - hinf->indent = tspaces; - nspaces = nspaces->cdr; - } + heredoc_push_indented(p, hinf, nd->cdr, escaped, nspaces, empty && line_head); } return tHD_STRING_MID; } @@ -4859,13 +4865,7 @@ parse_string(parser_state *p) if (hinf) { if (unindent && head) { nspaces = push(nspaces, (node*)spaces); - hinf->indented = push(hinf->indented, cons(nd->cdr, cons(escaped, nspaces))); - while (nspaces) { - size_t tspaces = (size_t)nspaces->car; - if (hinf->indent == ~0U || tspaces < hinf->indent) - hinf->indent = tspaces; - nspaces = nspaces->cdr; - } + heredoc_push_indented(p, hinf, nd->cdr, escaped, nspaces, FALSE); } hinf->line_head = FALSE; return tHD_STRING_PART; diff --git a/mrbgems/mruby-compiler/core/y.tab.c b/mrbgems/mruby-compiler/core/y.tab.c index 3dbd776ba..ca2f5044a 100644 --- a/mrbgems/mruby-compiler/core/y.tab.c +++ b/mrbgems/mruby-compiler/core/y.tab.c @@ -11079,6 +11079,18 @@ heredoc_remove_indent(parser_state *p, parser_heredoc_info *hinf) } } +static void +heredoc_push_indented(parser_state *p, parser_heredoc_info *hinf, node *pair, node *escaped, node *nspaces, mrb_bool empty_line) +{ + hinf->indented = push(hinf->indented, cons(pair, cons(escaped, nspaces))); + while (nspaces) { + size_t tspaces = (size_t)nspaces->car; + if ((hinf->indent == ~0U || tspaces < hinf->indent) && !empty_line) + hinf->indent = tspaces; + nspaces = nspaces->cdr; + } +} + static int parse_string(parser_state *p) { @@ -11144,13 +11156,7 @@ parse_string(parser_state *p) pylval.nd = nd; if (unindent && head) { nspaces = push(nspaces, (node*)spaces); - hinf->indented = push(hinf->indented, cons(nd->cdr, cons(escaped, nspaces))); - while (nspaces) { - size_t tspaces = (size_t)nspaces->car; - if ((hinf->indent == ~0U || tspaces < hinf->indent) && (!empty || !line_head)) - hinf->indent = tspaces; - nspaces = nspaces->cdr; - } + heredoc_push_indented(p, hinf, nd->cdr, escaped, nspaces, empty && line_head); } return tHD_STRING_MID; } @@ -11244,13 +11250,7 @@ parse_string(parser_state *p) if (hinf) { if (unindent && head) { nspaces = push(nspaces, (node*)spaces); - hinf->indented = push(hinf->indented, cons(nd->cdr, cons(escaped, nspaces))); - while (nspaces) { - size_t tspaces = (size_t)nspaces->car; - if (hinf->indent == ~0U || tspaces < hinf->indent) - hinf->indent = tspaces; - nspaces = nspaces->cdr; - } + heredoc_push_indented(p, hinf, nd->cdr, escaped, nspaces, FALSE); } hinf->line_head = FALSE; return tHD_STRING_PART; |
