From c37f648552b9697f721b9533bc0e4d173461168d Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Tue, 22 Feb 2022 17:21:51 +0900 Subject: [PATCH] codegen.c: use `OP_ARRAY` instead of `OP_ARRAY2` if possible. `OP_ARRAY` inline elements, i.e: with `OP_ARRAY Rn Rm len`, `Rn` and `Rm` should always be the same register. --- mrbgems/mruby-compiler/core/codegen.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c index 288f54b16..ea383f711 100644 --- a/mrbgems/mruby-compiler/core/codegen.c +++ b/mrbgems/mruby-compiler/core/codegen.c @@ -2739,7 +2739,12 @@ codegen(codegen_scope *s, node *tree, int val) else { rn = len - post - n; } - genop_3(s, OP_ARRAY2, cursp(), rhs+n, rn); + if (cursp() == rhs+n) { + genop_2(s, OP_ARRAY, cursp(), rn); + } + else { + genop_3(s, OP_ARRAY2, cursp(), rhs+n, rn); + } gen_assignment(s, t->car, NULL, cursp(), NOVAL); n += rn; }