From 5e4b84552286d07c45ad167f0b3127624bda6b4d Mon Sep 17 00:00:00 2001 From: nobu Date: Wed, 30 Nov 2016 13:09:51 +0000 Subject: parse.y: parser_tokadd_codepoint * parse.y (parser_tokadd_codepoint): extract from parser_tokadd_utf8. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56943 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- parse.y | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) (limited to 'parse.y') diff --git a/parse.y b/parse.y index a06f061388..3c1e88d4e7 100644 --- a/parse.y +++ b/parse.y @@ -5757,6 +5757,24 @@ parser_tok_hex(struct parser_params *parser, size_t *numlen) #define tokcopy(n) memcpy(tokspace(n), lex_p - (n), (n)) +static void +parser_tokadd_codepoint(struct parser_params *parser, rb_encoding **encp, + int string_literal, int regexp_literal, + int codepoint, int numlen) +{ + lex_p += numlen; + if (regexp_literal) { + tokcopy(numlen); + } + else if (codepoint >= 0x80) { + *encp = rb_utf8_encoding(); + if (string_literal) tokaddmbc(codepoint, *encp); + } + else if (string_literal) { + tokadd(codepoint); + } +} + /* return value is for ?\u3042 */ static int parser_tokadd_utf8(struct parser_params *parser, rb_encoding **encp, @@ -5788,17 +5806,8 @@ parser_tokadd_utf8(struct parser_params *parser, rb_encoding **encp, yyerror("invalid Unicode codepoint (too large)"); return 0; } - lex_p += numlen; - if (regexp_literal) { - tokcopy((int)numlen); - } - else if (codepoint >= 0x80) { - *encp = rb_utf8_encoding(); - if (string_literal) tokaddmbc(codepoint, *encp); - } - else if (string_literal) { - tokadd(codepoint); - } + parser_tokadd_codepoint(parser, encp,string_literal, regexp_literal, + codepoint, (int)numlen); } while (string_literal && (peek(' ') || peek('\t'))); if (!peek(close_brace)) { @@ -5815,17 +5824,8 @@ parser_tokadd_utf8(struct parser_params *parser, rb_encoding **encp, yyerror("invalid Unicode escape"); return 0; } - lex_p += 4; - if (regexp_literal) { - tokcopy(4); - } - else if (codepoint >= 0x80) { - *encp = rb_utf8_encoding(); - if (string_literal) tokaddmbc(codepoint, *encp); - } - else if (string_literal) { - tokadd(codepoint); - } + parser_tokadd_codepoint(parser, encp, string_literal, regexp_literal, + codepoint, 4); } return codepoint; -- cgit v1.2.3