From 3e7078cef3f3eed217d4c22ab7ec4ba9859dd503 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Tue, 30 Sep 2025 21:59:22 +0900 Subject: [PATCH] mruby-compiler: use direct member access instead of macros in codegen.c replaced unnecessary macro usage with direct struct member access when struct pointers are already available: - return_n->args instead of RETURN_NODE_ARGS(return_n) - yield_n->args instead of YIELD_NODE_ARGS(yield_n) - for_n->var/iterable/body instead of FOR_NODE_VAR/ITERABLE/BODY(for_n) - class_n->name/superclass/body instead of CLASS_NODE_* macros - module_n->name/body instead of MODULE_NODE_NAME/BODY(module_n) - sclass_n->obj/body instead of SCLASS_NODE_OBJ/BODY(sclass_n) - hash->pairs instead of HASH_NODE_PAIRS(hash) - call->method_name/safe_call instead of CALL_NODE_METHOD/SAFE(call) - array->elements and an->elements instead of ARRAY_NODE_ELEMENTS macro - splat->value instead of SPLAT_NODE_VALUE macro improves code readability by removing unnecessary indirection. Co-authored-by: Claude --- mrbgems/mruby-compiler/core/codegen.c | 46 ++++++++++++++------------- 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c index b5e721078..a99c78770 100644 --- a/mrbgems/mruby-compiler/core/codegen.c +++ b/mrbgems/mruby-compiler/core/codegen.c @@ -2677,19 +2677,20 @@ gen_values(codegen_scope *s, node *t, int val, int limit) * as normal positional args to avoid building/concatenating arrays. */ if (is_splat) { - node *sv = SPLAT_NODE_VALUE(t->car); + struct mrb_ast_splat_node *splat = splat_node(t->car); + node *sv = splat->value; if (sv) { enum node_type nt = get_node_type(sv); if (nt == NODE_ARRAY) { struct mrb_ast_array_node *an = array_node(sv); - if (ARRAY_NODE_ELEMENTS(an) == NULL) { + if (an->elements == NULL) { /* empty splat; contributes nothing */ t = t->cdr; continue; } - else if (nosplat(ARRAY_NODE_ELEMENTS(an))) { + else if (nosplat(an->elements)) { /* Inline non-empty literal array elements as regular args */ - node *e = ARRAY_NODE_ELEMENTS(an); + node *e = an->elements; while (e) { /* Honor evaluation order */ codegen(s, e->car, val); @@ -3237,7 +3238,7 @@ static void codegen_hash(codegen_scope *s, node *varnode, int val) { struct mrb_ast_hash_node *hash = hash_node(varnode); - node *pairs = HASH_NODE_PAIRS(hash); + node *pairs = hash->pairs; int regular_pairs = 0; mrb_bool update = FALSE; mrb_bool first = TRUE; @@ -3410,10 +3411,10 @@ static void codegen_call(codegen_scope *s, node *varnode, int val) { struct mrb_ast_call_node *call = call_node(varnode); - mrb_sym sym = CALL_NODE_METHOD(call); + mrb_sym sym = call->method_name; int skip = 0, n = 0, nk = 0, noop = no_optimize(s), noself = 0, blk = 0, sp_save = cursp(); enum mrb_insn opt_op = OP_NOP; - int safe = CALL_NODE_SAFE(call); + int safe = call->safe_call; node *args = call->args; if (!noop) { @@ -3679,7 +3680,7 @@ static void codegen_array(codegen_scope *s, node *varnode, int val) { struct mrb_ast_array_node *array = array_node(varnode); - node *elements = ARRAY_NODE_ELEMENTS(array); + node *elements = array->elements; int regular_elements = 0; int first = 1; int slimit = GEN_VAL_STACK_MAX; @@ -3702,12 +3703,13 @@ codegen_array(codegen_scope *s, node *varnode, int val) /* Skip splat of an empty literal array: [*[]] => [] without ARYCAT noise */ if (is_splat) { - node *sv = SPLAT_NODE_VALUE(element); + struct mrb_ast_splat_node *splat = splat_node(element); + node *sv = splat->value; if (sv) { enum node_type nt = get_node_type(sv); if (nt == NODE_ARRAY) { struct mrb_ast_array_node *an = array_node(sv); - if (ARRAY_NODE_ELEMENTS(an) == NULL) { + if (an->elements == NULL) { current = current->cdr; continue; } @@ -4049,9 +4051,9 @@ static void codegen_for(codegen_scope *s, node *varnode, int val) { struct mrb_ast_for_node *for_n = for_node(varnode); - node *var = FOR_NODE_VAR(for_n); - node *iterable = FOR_NODE_ITERABLE(for_n); - node *body = FOR_NODE_BODY(for_n); + node *var = for_n->var; + node *iterable = for_n->iterable; + node *body = for_n->body; codegen_scope *prev = s; int idx; @@ -4284,9 +4286,9 @@ static void codegen_class(codegen_scope *s, node *varnode, int val) { struct mrb_ast_class_node *class_n = class_node(varnode); - node *name = CLASS_NODE_NAME(class_n); - node *superclass = CLASS_NODE_SUPERCLASS(class_n); - node *body = CLASS_NODE_BODY(class_n); + node *name = class_n->name; + node *superclass = class_n->superclass; + node *body = class_n->body; int idx; /* Handle class namespace */ @@ -4319,8 +4321,8 @@ static void codegen_module(codegen_scope *s, node *varnode, int val) { struct mrb_ast_module_node *module_n = module_node(varnode); - node *name = MODULE_NODE_NAME(module_n); - node *body = MODULE_NODE_BODY(module_n); + node *name = module_n->name; + node *body = module_n->body; int idx; /* Handle module namespace */ @@ -4343,8 +4345,8 @@ static void codegen_sclass(codegen_scope *s, node *varnode, int val) { struct mrb_ast_sclass_node *sclass_n = sclass_node(varnode); - node *obj = SCLASS_NODE_OBJ(sclass_n); - node *body = SCLASS_NODE_BODY(sclass_n); + node *obj = sclass_n->obj; + node *body = sclass_n->body; /* Generate code for the singleton object */ codegen(s, obj, VAL); @@ -4654,7 +4656,7 @@ static void codegen_return(codegen_scope *s, node *varnode, int val) { struct mrb_ast_return_node *return_n = return_node(varnode); - node *args = RETURN_NODE_ARGS(return_n); + node *args = return_n->args; if (args) { gen_retval(s, args); @@ -4676,7 +4678,7 @@ static void codegen_yield(codegen_scope *s, node *varnode, int val) { struct mrb_ast_yield_node *yield_n = yield_node(varnode); - node *args = YIELD_NODE_ARGS(yield_n); + node *args = yield_n->args; codegen_scope *s2 = s; int lv = 0, ainfo = -1; int n = 0, nk = 0, sendv = 0;