From ee7f63ebba542f87e6fa28709e67ace0fefcae90 Mon Sep 17 00:00:00 2001 From: yui-knk Date: Fri, 12 Jan 2024 22:26:54 +0900 Subject: Make lastline and nextline to be rb_parser_string This commit changes `struct parser_params` lastline and nextline from `VALUE` (String object) to `rb_parser_string_t *` so that dependency on Ruby Object is reduced. `parser_string_buffer_t string_buffer` is added to `struct parser_params` to manage `rb_parser_string_t` pointers of each line. All allocated line strings are freed in `rb_ruby_parser_free`. --- ext/ripper/ripper_init.c.tmpl | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'ext') diff --git a/ext/ripper/ripper_init.c.tmpl b/ext/ripper/ripper_init.c.tmpl index b2caef2bd5..a2a5e4b4cf 100644 --- a/ext/ripper/ripper_init.c.tmpl +++ b/ext/ripper/ripper_init.c.tmpl @@ -471,11 +471,13 @@ ripper_token(VALUE self) { struct parser_params *p = ripper_parser_params(self, true); long pos, len; + VALUE str; if (NIL_P(rb_ruby_parser_parsing_thread(p))) return Qnil; pos = rb_ruby_ripper_column(p); len = rb_ruby_ripper_token_len(p); - return rb_str_subseq(rb_ruby_ripper_lex_lastline(p), pos, len); + str = rb_str_new_parser_string(rb_ruby_ripper_lex_lastline(p)); + return rb_str_subseq(str, pos, len); } #ifdef RIPPER_DEBUG -- cgit v1.2.3