From f98d6414dc31faf607b496daf8d1a31269de05fc Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Mon, 9 Mar 2026 16:47:23 +0900 Subject: [PATCH] codegen.c: chunk array literals at 64 elements to reduce register pressure Array literals were being built by loading all elements into registers before constructing the array, requiring nregs proportional to the array size (e.g. nregs=99 for 100 elements). This exceeds mruby/c's register limit. Restore 3.4-era chunking at GEN_LIT_ARY_MAX (64) elements. fixes mruby/mruby#6731 Co-authored-by: Claude --- mrbgems/mruby-compiler/core/codegen.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c index 60f39ae8a..01f120b55 100644 --- a/mrbgems/mruby-compiler/core/codegen.c +++ b/mrbgems/mruby-compiler/core/codegen.c @@ -3821,7 +3821,7 @@ codegen_array(codegen_scope *s, node *varnode, int val) node *elements = array->elements; int regular_elements = 0; int first = 1; - int slimit = GEN_VAL_STACK_MAX; + int slimit = GEN_LIT_ARY_MAX; if (!val) return; @@ -3831,7 +3831,7 @@ codegen_array(codegen_scope *s, node *varnode, int val) return; } - if (cursp() >= GEN_LIT_ARY_MAX) slimit = INT16_MAX; + if (cursp() >= slimit) slimit = GEN_VAL_STACK_MAX; /* Process each element using cons-list iteration, handling splats */ node *current = elements;