diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-11-30 13:09:51 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-11-30 13:09:51 +0000 |
commit | 5e4b84552286d07c45ad167f0b3127624bda6b4d (patch) | |
tree | 56101924ea19f2369ae950a612dd8832daf9e927 /parse.y | |
parent | 94715bc666f212b3303b4ed23689d8d14b347057 (diff) |
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
Diffstat (limited to 'parse.y')
-rw-r--r-- | parse.y | 44 |
1 files changed, 22 insertions, 22 deletions
@@ -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; |