From 7bedd5e05db1a41dcb65b4b5b6a2261eeff2e9b0 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Sun, 23 Jan 2022 23:56:01 +0900 Subject: [PATCH] codegen.c: generate `OP_SETIDX` from attribute assignments. --- 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 1bea0149c..8c906fa21 100644 --- a/mrbgems/mruby-compiler/core/codegen.c +++ b/mrbgems/mruby-compiler/core/codegen.c @@ -1888,7 +1888,12 @@ gen_assignment(codegen_scope *s, node *tree, node *rhs, int sp, int val) genop_2(s, OP_ARYPUSH, cursp(), 1); } s->sp = call; - genop_3(s, noself ? OP_SSEND : OP_SEND, cursp(), new_sym(s, attrsym(s, mid)), n); + if (mid == MRB_OPSYM_2(s->mrb, aref) && n == 2) { + genop_1(s, OP_SETIDX, cursp()); + } + else { + genop_3(s, noself ? OP_SSEND : OP_SEND, cursp(), new_sym(s, attrsym(s, mid)), n); + } if (safe) { dispatch(s, skip); }