diff options
author | yui-knk <[email protected]> | 2024-02-03 00:50:02 +0900 |
---|---|---|
committer | Yuichiro Kaneko <[email protected]> | 2024-02-09 14:20:17 +0900 |
commit | 33c1e082d0807db403a2d93cbf0a094c91179d74 (patch) | |
tree | 84213018f402daec6fc167f206c4c3eb4551b699 /ruby_parser.c | |
parent | f7a407cabda6eb787fb95fc6e3c1b2215b1aec19 (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.
Diffstat (limited to 'ruby_parser.c')
-rw-r--r-- | ruby_parser.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/ruby_parser.c b/ruby_parser.c index 89b2a19d48..04a49da0ec 100644 --- a/ruby_parser.c +++ b/ruby_parser.c @@ -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, @@ -989,6 +996,13 @@ rb_node_imaginary_literal_val(const NODE *n) } 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) { rb_parser_string_t *str = RNODE_SYM(node)->string; @@ -996,6 +1010,20 @@ rb_node_sym_string_val(const NODE *node) } 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) { return INT2FIX(node->nd_loc.beg_pos.lineno); |