parse.y: append directly to delayed content
* parse.y (parser_here_document): append byte sequence directly to the delayed content instead of creating an intermediate string object. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48500 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
3a2d2af0f7
commit
595ce95d3c
@ -1,3 +1,9 @@
|
|||||||
|
Thu Nov 20 00:26:37 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||||
|
|
||||||
|
* parse.y (parser_here_document): append byte sequence directly to
|
||||||
|
the delayed content instead of creating an intermediate string
|
||||||
|
object.
|
||||||
|
|
||||||
Wed Nov 19 21:11:01 2014 NARUSE, Yui <naruse@ruby-lang.org>
|
Wed Nov 19 21:11:01 2014 NARUSE, Yui <naruse@ruby-lang.org>
|
||||||
|
|
||||||
* common.mk (ext/json/parser/parser.c): don't touch parse.c,
|
* common.mk (ext/json/parser/parser.c): don't touch parse.c,
|
||||||
|
16
parse.y
16
parse.y
@ -6588,11 +6588,21 @@ parser_here_document(struct parser_params *parser, NODE *here)
|
|||||||
ripper_dispatch_scan_event(parser, tSTRING_CONTENT);
|
ripper_dispatch_scan_event(parser, tSTRING_CONTENT);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (str ||
|
if (str) {
|
||||||
((len = lex_p - parser->tokp) > 0 &&
|
|
||||||
(str = STR_NEW3(parser->tokp, len, enc, func), 1))) {
|
|
||||||
rb_str_append(parser->delayed, str);
|
rb_str_append(parser->delayed, str);
|
||||||
}
|
}
|
||||||
|
else if ((len = lex_p - parser->tokp) > 0) {
|
||||||
|
if (!(func & STR_FUNC_REGEXP) && rb_enc_asciicompat(enc)) {
|
||||||
|
int cr = ENC_CODERANGE_UNKNOWN;
|
||||||
|
rb_str_coderange_scan_restartable(parser->tokp, lex_p, enc, &cr);
|
||||||
|
if (cr != ENC_CODERANGE_7BIT &&
|
||||||
|
current_enc == rb_usascii_encoding() &&
|
||||||
|
enc != rb_utf8_encoding()) {
|
||||||
|
enc = rb_ascii8bit_encoding();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
rb_enc_str_buf_cat(parser->delayed, parser->tokp, len, enc);
|
||||||
|
}
|
||||||
ripper_dispatch_delayed_token(parser, tSTRING_CONTENT);
|
ripper_dispatch_delayed_token(parser, tSTRING_CONTENT);
|
||||||
}
|
}
|
||||||
lex_goto_eol(parser);
|
lex_goto_eol(parser);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user