summaryrefslogtreecommitdiff
path: root/parse.y
diff options
context:
space:
mode:
authoryui-knk <spiketeika@gmail.com>2024-04-25 16:09:42 +0900
committerYuichiro Kaneko <spiketeika@gmail.com>2024-05-04 11:59:10 +0900
commitcf74ff714aa795a82cc0ea46e26937efcedfaa45 (patch)
tree263ec0d1c57dcf26ccdcc1d378e89263a6a9247d /parse.y
parenta510175e8f95f4d8f7bc56c184996526b530bf94 (diff)
Change return value of `gets` function to be `rb_parser_string_t *` instead of `VALUE`
This change reduces parser's dependency on ruby object.
Diffstat (limited to 'parse.y')
-rw-r--r--parse.y18
1 files changed, 8 insertions, 10 deletions
diff --git a/parse.y b/parse.y
index f2b406bce7..5dec8e01f9 100644
--- a/parse.y
+++ b/parse.y
@@ -486,7 +486,7 @@ struct parser_params {
struct {
rb_strterm_t *strterm;
- VALUE (*gets)(struct parser_params*,rb_parser_input_data,int);
+ rb_parser_lex_gets_func *gets;
rb_parser_input_data input;
parser_string_buffer_t string_buffer;
rb_parser_string_t *lastline;
@@ -7783,9 +7783,9 @@ yycompile(struct parser_params *p, const char *fname_ptr, long fname_len, rb_enc
#endif /* !RIPPER */
static rb_encoding *
-must_be_ascii_compatible(struct parser_params *p, VALUE s)
+must_be_ascii_compatible(struct parser_params *p, rb_parser_string_t *s)
{
- rb_encoding *enc = rb_enc_get(s);
+ rb_encoding *enc = rb_parser_str_get_encoding(s);
if (!rb_enc_asciicompat(enc)) {
rb_raise(rb_eArgError, "invalid source encoding");
}
@@ -7795,14 +7795,12 @@ must_be_ascii_compatible(struct parser_params *p, VALUE s)
static rb_parser_string_t *
lex_getline(struct parser_params *p)
{
- rb_parser_string_t *str;
- VALUE line = (*p->lex.gets)(p, p->lex.input, p->line_count);
- if (NIL_P(line)) return 0;
- must_be_ascii_compatible(p, line);
+ rb_parser_string_t *line = (*p->lex.gets)(p, p->lex.input, p->line_count);
+ if (!line) return 0;
p->line_count++;
- str = rb_str_to_parser_string(p, line);
- string_buffer_append(p, str);
- return str;
+ string_buffer_append(p, line);
+ must_be_ascii_compatible(p, line);
+ return line;
}
#ifndef RIPPER