diff options
| author | yui-knk <spiketeika@gmail.com> | 2024-01-12 22:26:54 +0900 |
|---|---|---|
| committer | Yuichiro Kaneko <spiketeika@gmail.com> | 2024-01-23 08:58:16 +0900 |
| commit | ee7f63ebba542f87e6fa28709e67ace0fefcae90 (patch) | |
| tree | 2e6e772d4317bdd3ecbeed81ded30de12c69bb34 /ext | |
| parent | 706eea9d3c27b9785fc7f650ff9b5d6669908768 (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.tmpl | 4 |
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 |
