mruby-compiler: rename NODE_DSTR/NODE_DXSTR to NODE_STR/NODE_XSTR

Rename NODE_DSTR to NODE_STR and NODE_DXSTR to NODE_XSTR to reflect
that all strings now use dynamic (cons list) representation. Also
rename all associated functions for consistency:

- gen_dstr_var() -> gen_str_var()
- gen_dxstr_var() -> gen_xstr_var()
- codegen_heredoc_dstr() -> codegen_heredoc_str()
- codegen_dxstr() -> codegen_xstr()

The "D" prefix is no longer meaningful since all strings use the
variable-sized cons list format ((len . ptr) (-1 . node)...).

Co-authored-by: Claude <noreply@anthropic.com>
This commit is contained in:
Yukihiro "Matz" Matsumoto
2025-09-01 19:42:03 +09:00
parent 5f43603c52
commit 815bac77fb
4 changed files with 52 additions and 66 deletions
+18 -18
View File
@@ -4300,7 +4300,7 @@ codegen_int(codegen_scope *s, node *tree, int val)
static void
codegen_dxstr(codegen_scope *s, node *tree, int val)
codegen_xstr(codegen_scope *s, node *tree, int val)
{
int sym;
@@ -4329,7 +4329,7 @@ codegen_symbols(codegen_scope *s, node *tree, int val)
/* codegen_cons_list_string forward declaration moved to top of file */
static void
codegen_heredoc_dstr(codegen_scope *s, node *tree, int val)
codegen_heredoc_str(codegen_scope *s, node *tree, int val)
{
/* Use common cons list string codegen since tree is now in cons list format */
codegen_cons_list_string(s, tree, val);
@@ -4864,7 +4864,7 @@ static void
codegen_heredoc(codegen_scope *s, node *tree, int val)
{
tree = ((struct mrb_parser_heredoc_info*)tree)->doc;
codegen_heredoc_dstr(s, tree, val);
codegen_heredoc_str(s, tree, val);
}
static void
@@ -5517,10 +5517,10 @@ gen_super_var(codegen_scope *s, node *varnode, int val)
/* Variable-sized literal node generation functions */
static void
gen_dstr_var(codegen_scope *s, node *varnode, int val)
gen_str_var(codegen_scope *s, node *varnode, int val)
{
struct mrb_ast_dstr_node *dstr_n = dstr_node(varnode);
node *list = dstr_n->list;
struct mrb_ast_str_node *str_n = str_node(varnode);
node *list = str_n->list;
/* Use common cons list string codegen */
codegen_cons_list_string(s, list, val);
@@ -5727,9 +5727,9 @@ gen_until_mod_var(codegen_scope *s, node *varnode, int val)
static void
gen_dxstr_var(codegen_scope *s, node *varnode, int val)
gen_xstr_var(codegen_scope *s, node *varnode, int val)
{
struct mrb_ast_dxstr_node *n = dxstr_node(varnode);
struct mrb_ast_xstr_node *n = xstr_node(varnode);
node *list = n->list;
int sym;
@@ -5812,9 +5812,9 @@ static void
gen_dsym_var(codegen_scope *s, node *varnode, int val)
{
struct mrb_ast_dsym_node *n = (struct mrb_ast_dsym_node*)varnode;
// Generate dstr first, then convert to symbol
// Generate str first, then convert to symbol
if (val) {
codegen_heredoc_dstr(s, n->list, VAL);
codegen_heredoc_str(s, n->list, VAL);
genop_1(s, OP_INTERN, cursp());
}
}
@@ -6247,8 +6247,8 @@ codegen_variable_node(codegen_scope *s, node *varnode, int val)
gen_super_var(s, varnode, val);
return TRUE;
case NODE_DSTR:
gen_dstr_var(s, varnode, val);
case NODE_STR:
gen_str_var(s, varnode, val);
return TRUE;
case NODE_REGX:
@@ -6323,8 +6323,8 @@ codegen_variable_node(codegen_scope *s, node *varnode, int val)
gen_until_mod_var(s, varnode, val);
return TRUE;
case NODE_DXSTR:
gen_dxstr_var(s, varnode, val);
case NODE_XSTR:
gen_xstr_var(s, varnode, val);
return TRUE;
case NODE_DREGX:
@@ -6677,8 +6677,8 @@ codegen(codegen_scope *s, node *tree, int val)
codegen_heredoc(s, tree, val);
break;
case NODE_DSTR:
codegen_heredoc_dstr(s, tree, val);
case NODE_STR:
codegen_heredoc_str(s, tree, val);
break;
case NODE_WORDS:
@@ -6689,8 +6689,8 @@ codegen(codegen_scope *s, node *tree, int val)
codegen_symbols(s, tree, val);
break;
case NODE_DXSTR:
codegen_dxstr(s, tree, val);
case NODE_XSTR:
codegen_xstr(s, tree, val);
break;
case NODE_REGX:
+8 -22
View File
@@ -57,8 +57,8 @@ enum node_type {
NODE_NEGATE,
NODE_LAMBDA,
NODE_SYM,
NODE_DSTR,
NODE_DXSTR,
NODE_STR,
NODE_XSTR,
NODE_REGX,
NODE_DREGX,
NODE_DREGX_ONCE,
@@ -152,7 +152,7 @@ struct mrb_ast_head_node {
struct mrb_ast_var_header {
uint16_t lineno; /* Line number information */
uint16_t filename_index; /* File index information */
uint8_t node_type; /* NODE_INT, NODE_SYM, NODE_DSTR, etc. */
uint8_t node_type; /* NODE_INT, NODE_SYM, NODE_STR, etc. */
uint8_t size_class; /* Size class for allocation/deallocation */
uint16_t flags; /* Type-specific flags and metadata */
/* Total: 8 bytes header for all variable nodes */
@@ -185,12 +185,10 @@ struct mrb_ast_sym_node {
/* Total: 12-16 bytes vs previous 20+ bytes + indirection */
};
/* Variable-sized string node with inline storage */
/* Variable-sized string node with cons list */
struct mrb_ast_str_node {
struct mrb_ast_var_header header; /* 8 bytes */
size_t len; /* String length */
char data[]; /* Flexible array - inline string storage */
/* Total: Variable (16 + string_length) vs previous 20+ bytes + separate allocation */
struct mrb_ast_var_header hdr;
struct mrb_ast_node *list;
};
/* Variable-sized integer node */
@@ -508,10 +506,6 @@ struct mrb_ast_super_node {
#define SUPER_NODE_ARGS(n) (super_node(n)->args)
/* Variable-sized literal node structures */
struct mrb_ast_dstr_node {
struct mrb_ast_var_header hdr;
struct mrb_ast_node *list;
};
struct mrb_ast_regx_node {
struct mrb_ast_var_header hdr;
@@ -539,14 +533,13 @@ struct mrb_ast_float_node {
};
/* Literal node casting macros */
#define dstr_node(n) ((struct mrb_ast_dstr_node*)(n))
#define regx_node(n) ((struct mrb_ast_regx_node*)(n))
#define dot2_node(n) ((struct mrb_ast_dot2_node*)(n))
#define dot3_node(n) ((struct mrb_ast_dot3_node*)(n))
#define float_node(n) ((struct mrb_ast_float_node*)(n))
/* Literal node value access macros */
#define DSTR_NODE_LIST(n) (dstr_node(n)->list)
#define STR_NODE_LIST(n) (str_node(n)->list)
#define REGX_NODE_PATTERN(n) (regx_node(n)->pattern)
#define REGX_NODE_FLAGS(n) (regx_node(n)->flags)
@@ -695,11 +688,6 @@ struct mrb_ast_until_mod_node {
// Group 9: String and Regex Variants
struct mrb_ast_xstr_node {
struct mrb_ast_var_header hdr;
mrb_sym name;
};
struct mrb_ast_dxstr_node {
struct mrb_ast_var_header hdr;
struct mrb_ast_node *list;
};
@@ -728,14 +716,12 @@ struct mrb_ast_dsym_node {
};
#define xstr_node(n) ((struct mrb_ast_xstr_node*)(n))
#define dxstr_node(n) ((struct mrb_ast_dxstr_node*)(n))
#define dregx_node(n) ((struct mrb_ast_dregx_node*)(n))
#define dregx_once_node(n) ((struct mrb_ast_dregx_once_node*)(n))
#define heredoc_node(n) ((struct mrb_ast_heredoc_node*)(n))
#define dsym_node(n) ((struct mrb_ast_dsym_node*)(n))
#define XSTR_NODE_NAME(n) (xstr_node(n)->name)
#define DXSTR_NODE_LIST(n) (dxstr_node(n)->list)
#define XSTR_NODE_LIST(n) (xstr_node(n)->list)
#define DREGX_NODE_LIST(n) (dregx_node(n)->list)
#define DREGX_NODE_OPTIONS(n) (dregx_node(n)->options)
#define DREGX_ONCE_NODE_LIST(n) (dregx_once_node(n)->list)
+13 -13
View File
@@ -2161,16 +2161,16 @@ new_float(parser_state *p, const char *s, int suffix)
/* Create string node from cons list */
/* (:dstr . a) */
/* (:str . a) */
static node*
new_str(parser_state *p, node *a)
{
size_t total_size = sizeof(struct mrb_ast_dstr_node);
size_t total_size = sizeof(struct mrb_ast_str_node);
enum mrb_ast_size_class class = size_to_class(total_size);
struct mrb_ast_dstr_node *n = (struct mrb_ast_dstr_node*)parser_alloc_var(p, total_size, class);
struct mrb_ast_str_node *n = (struct mrb_ast_str_node*)parser_alloc_var(p, total_size, class);
init_var_header(&n->hdr, p, NODE_DSTR, class);
init_var_header(&n->hdr, p, NODE_STR, class);
n->list = a;
return cons_head((node*)NODE_VARIABLE, (node*)n);
@@ -2181,10 +2181,10 @@ new_str(parser_state *p, node *a)
static node*
new_xstr(parser_state *p, node *a)
{
size_t total_size = sizeof(struct mrb_ast_dxstr_node);
size_t total_size = sizeof(struct mrb_ast_xstr_node);
enum mrb_ast_size_class class = size_to_class(total_size);
struct mrb_ast_dxstr_node *n = (struct mrb_ast_dxstr_node*)parser_alloc_var(p, total_size, class);
init_var_header(&n->hdr, p, NODE_DXSTR, class);
struct mrb_ast_xstr_node *n = (struct mrb_ast_xstr_node*)parser_alloc_var(p, total_size, class);
init_var_header(&n->hdr, p, NODE_XSTR, class);
n->list = a;
return cons_head((node*)NODE_VARIABLE, (node*)n);
}
@@ -2542,8 +2542,8 @@ prohibit_literals(parser_state *p, node *n)
else {
switch (node_to_type(n->car)) {
case NODE_INT:
case NODE_DSTR:
case NODE_DXSTR:
case NODE_STR:
case NODE_XSTR:
case NODE_DREGX:
case NODE_MATCH:
case NODE_FLOAT:
@@ -8724,13 +8724,13 @@ mrb_parser_dump(mrb_state *mrb, node *tree, int offset)
mrb_parser_dump(mrb, tree, offset+1);
break;
case NODE_DSTR:
printf("NODE_DSTR:\n");
case NODE_STR:
printf("NODE_STR:\n");
dump_recur(mrb, tree, offset+1);
break;
case NODE_DXSTR:
printf("NODE_DXSTR:\n");
case NODE_XSTR:
printf("NODE_XSTR:\n");
dump_recur(mrb, tree, offset+1);
break;
+13 -13
View File
@@ -2223,16 +2223,16 @@ new_float(parser_state *p, const char *s, int suffix)
/* Create string node from cons list */
/* (:dstr . a) */
/* (:str . a) */
static node*
new_str(parser_state *p, node *a)
{
size_t total_size = sizeof(struct mrb_ast_dstr_node);
size_t total_size = sizeof(struct mrb_ast_str_node);
enum mrb_ast_size_class class = size_to_class(total_size);
struct mrb_ast_dstr_node *n = (struct mrb_ast_dstr_node*)parser_alloc_var(p, total_size, class);
struct mrb_ast_str_node *n = (struct mrb_ast_str_node*)parser_alloc_var(p, total_size, class);
init_var_header(&n->hdr, p, NODE_DSTR, class);
init_var_header(&n->hdr, p, NODE_STR, class);
n->list = a;
return cons_head((node*)NODE_VARIABLE, (node*)n);
@@ -2243,10 +2243,10 @@ new_str(parser_state *p, node *a)
static node*
new_xstr(parser_state *p, node *a)
{
size_t total_size = sizeof(struct mrb_ast_dxstr_node);
size_t total_size = sizeof(struct mrb_ast_xstr_node);
enum mrb_ast_size_class class = size_to_class(total_size);
struct mrb_ast_dxstr_node *n = (struct mrb_ast_dxstr_node*)parser_alloc_var(p, total_size, class);
init_var_header(&n->hdr, p, NODE_DXSTR, class);
struct mrb_ast_xstr_node *n = (struct mrb_ast_xstr_node*)parser_alloc_var(p, total_size, class);
init_var_header(&n->hdr, p, NODE_XSTR, class);
n->list = a;
return cons_head((node*)NODE_VARIABLE, (node*)n);
}
@@ -2604,8 +2604,8 @@ prohibit_literals(parser_state *p, node *n)
else {
switch (node_to_type(n->car)) {
case NODE_INT:
case NODE_DSTR:
case NODE_DXSTR:
case NODE_STR:
case NODE_XSTR:
case NODE_DREGX:
case NODE_MATCH:
case NODE_FLOAT:
@@ -15549,13 +15549,13 @@ mrb_parser_dump(mrb_state *mrb, node *tree, int offset)
mrb_parser_dump(mrb, tree, offset+1);
break;
case NODE_DSTR:
printf("NODE_DSTR:\n");
case NODE_STR:
printf("NODE_STR:\n");
dump_recur(mrb, tree, offset+1);
break;
case NODE_DXSTR:
printf("NODE_DXSTR:\n");
case NODE_XSTR:
printf("NODE_XSTR:\n");
dump_recur(mrb, tree, offset+1);
break;