1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

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
This commit is contained in:
nobu 2016-11-30 13:09:51 +00:00
parent 94715bc666
commit 5e4b845522

44
parse.y
View file

@ -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;