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`.
This commit is contained in:
yui-knk 2024-01-12 22:26:54 +09:00 committed by Yuichiro Kaneko
parent 706eea9d3c
commit ee7f63ebba
5 changed files with 158 additions and 49 deletions

View file

@ -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);
}