From 84d8ecc1d75f0af4703e9d5fca3d740fa66d2ca1 Mon Sep 17 00:00:00 2001 From: Christopher Aue Date: Wed, 23 Aug 2017 15:17:20 +0200 Subject: Fixed register windows of OP_SENDs generated by NODE_OP_ASGN; ref #3783 --- mrbgems/mruby-compiler/core/codegen.c | 2 +- test/t/codegen.rb | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c index 9d7392c2d..a457705fb 100644 --- a/mrbgems/mruby-compiler/core/codegen.c +++ b/mrbgems/mruby-compiler/core/codegen.c @@ -1841,7 +1841,7 @@ codegen(codegen_scope *s, node *tree, int val) for (i=0; i120, 121=>121, 122=>122, 123=>123, 124=>124, 125=>125, 126=>126) end + # NODE_OP_ASGN + o = Object.new + class << o + attr_accessor :a + end + + o.a = 1 + assert_nothing_raised{ o.a += 1 } + o.a = 1 + assert_nothing_raised{ o.a <<= 1 } + o.a = 1 + assert_nothing_raised{ o.a &&= 1 } + + o = { k: 1 } + assert_nothing_raised{ o[:k] += 1 } + o = { k: 1 } + assert_nothing_raised{ o[:k] <<= 1 } + o = { k: 1 } + assert_nothing_raised{ o[:k] &&= 1 } + + o = { k: 1 } + assert_nothing_raised{ o[*[:k]] += 1 } + o = { k: 1 } + assert_nothing_raised{ o[*[:k]] <<= 1 } + o = { k: 1 } + assert_nothing_raised{ o[*[:k]] &&= 1 } + # NODE_YIELD def check_node_yield yield -- cgit v1.2.3