summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authoryui-knk <spiketeika@gmail.com>2024-01-12 22:26:54 +0900
committerYuichiro Kaneko <spiketeika@gmail.com>2024-01-23 08:58:16 +0900
commitee7f63ebba542f87e6fa28709e67ace0fefcae90 (patch)
tree2e6e772d4317bdd3ecbeed81ded30de12c69bb34 /ext
parent706eea9d3c27b9785fc7f650ff9b5d6669908768 (diff)
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`.
Diffstat (limited to 'ext')
-rw-r--r--ext/ripper/ripper_init.c.tmpl4
1 files changed, 3 insertions, 1 deletions
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