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`. --- ruby_parser.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'ruby_parser.c') diff --git a/ruby_parser.c b/ruby_parser.c index d932b0f7be..965fe2cc1a 100644 --- a/ruby_parser.c +++ b/ruby_parser.c @@ -848,6 +848,12 @@ rb_parser_set_yydebug(VALUE vparser, VALUE flag) } #endif +VALUE +rb_str_new_parser_string(rb_parser_string_t *str) +{ + return rb_enc_str_new(str->ptr, str->len, str->enc); +} + static VALUE negative_numeric(VALUE val) { @@ -1000,6 +1006,5 @@ rb_node_line_lineno_val(const NODE *node) VALUE rb_node_file_path_val(const NODE *node) { - rb_parser_string_t *str = RNODE_FILE(node)->path; - return rb_enc_str_new(str->ptr, str->len, str->enc); + return rb_str_new_parser_string(RNODE_FILE(node)->path); } -- cgit v1.2.3