summaryrefslogtreecommitdiff
path: root/ruby_parser.c
diff options
context:
space:
mode:
authoryui-knk <[email protected]>2024-02-03 00:50:02 +0900
committerYuichiro Kaneko <[email protected]>2024-02-09 14:20:17 +0900
commit33c1e082d0807db403a2d93cbf0a094c91179d74 ()
tree84213018f402daec6fc167f206c4c3eb4551b699 /ruby_parser.c
parentf7a407cabda6eb787fb95fc6e3c1b2215b1aec19 (diff)
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.
-rw-r--r--ruby_parser.c28
1 files changed, 28 insertions, 0 deletions
@@ -166,6 +166,12 @@ mbclen_charfound_p(int len)
return MBCLEN_CHARFOUND_P(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,
.enc_name = enc_name,
.enc_prev_char = enc_prev_char,
.enc_get = enc_get,
@@ -989,6 +996,13 @@ rb_node_imaginary_literal_val(const NODE *n)
}
VALUE
rb_node_sym_string_val(const NODE *node)
{
rb_parser_string_t *str = RNODE_SYM(node)->string;
@@ -996,6 +1010,20 @@ rb_node_sym_string_val(const NODE *node)
}
VALUE
rb_node_line_lineno_val(const NODE *node)
{
return INT2FIX(node->nd_loc.beg_pos.lineno);