mirror of
https://github.com/ruby/ruby.git
synced 2025-08-15 13:39:04 +02:00
Remove ruby object from string nodes
String nodes holds ruby string object on `VALUE nd_lit`. This commit changes it to `struct rb_parser_string *string` to reduce dependency on ruby object. Sometimes these strings are concatenated with other string therefore string concatenate functions are needed.
This commit is contained in:
parent
f7a407cabd
commit
33c1e082d0
9 changed files with 598 additions and 180 deletions
|
@ -166,6 +166,12 @@ mbclen_charfound_p(int len)
|
|||
return MBCLEN_CHARFOUND_P(len);
|
||||
}
|
||||
|
||||
static int
|
||||
mbclen_charfound_len(int len)
|
||||
{
|
||||
return MBCLEN_CHARFOUND_LEN(len);
|
||||
}
|
||||
|
||||
static const char *
|
||||
enc_name(void *enc)
|
||||
{
|
||||
|
@ -598,6 +604,7 @@ static const rb_parser_config_t rb_global_parser_config = {
|
|||
.enc_isalnum = enc_isalnum,
|
||||
.enc_precise_mbclen = enc_precise_mbclen,
|
||||
.mbclen_charfound_p = mbclen_charfound_p,
|
||||
.mbclen_charfound_len = mbclen_charfound_len,
|
||||
.enc_name = enc_name,
|
||||
.enc_prev_char = enc_prev_char,
|
||||
.enc_get = enc_get,
|
||||
|
@ -988,6 +995,13 @@ rb_node_imaginary_literal_val(const NODE *n)
|
|||
return lit;
|
||||
}
|
||||
|
||||
VALUE
|
||||
rb_node_str_string_val(const NODE *node)
|
||||
{
|
||||
rb_parser_string_t *str = RNODE_STR(node)->string;
|
||||
return rb_str_new_parser_string(str);
|
||||
}
|
||||
|
||||
VALUE
|
||||
rb_node_sym_string_val(const NODE *node)
|
||||
{
|
||||
|
@ -995,6 +1009,20 @@ rb_node_sym_string_val(const NODE *node)
|
|||
return ID2SYM(rb_intern3(str->ptr, str->len, str->enc));
|
||||
}
|
||||
|
||||
VALUE
|
||||
rb_node_dstr_string_val(const NODE *node)
|
||||
{
|
||||
rb_parser_string_t *str = RNODE_DSTR(node)->string;
|
||||
return str ? rb_str_new_parser_string(str) : Qnil;
|
||||
}
|
||||
|
||||
VALUE
|
||||
rb_node_dregx_string_val(const NODE *node)
|
||||
{
|
||||
rb_parser_string_t *str = RNODE_DREGX(node)->string;
|
||||
return rb_str_new_parser_string(str);
|
||||
}
|
||||
|
||||
VALUE
|
||||
rb_node_line_lineno_val(const NODE *node)
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue