summaryrefslogtreecommitdiffhomepage
path: root/src/codegen.c
diff options
context:
space:
mode:
authorcremno <[email protected]>2015-06-01 13:54:20 +0200
committercremno <[email protected]>2015-06-01 13:54:20 +0200
commit7e8fb15457f08faf0fd6b7e1d0823140ecee2a60 (patch)
tree93fd0d81967d6fe5e071814c89733a9d7806927f /src/codegen.c
parentbd2686d82d233774003fe683e9396f366b152b6d (diff)
downloadmruby-7e8fb15457f08faf0fd6b7e1d0823140ecee2a60.tar.gz
mruby-7e8fb15457f08faf0fd6b7e1d0823140ecee2a60.zip
only generate gets of non-local vars in VAL mode
This fixes a crash for code like "#{@a;1}". Unlike CRuby globals are excluded too since mruby doesn't implement hooking.
Diffstat (limited to 'src/codegen.c')
-rw-r--r--src/codegen.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/src/codegen.c b/src/codegen.c
index be630b9a8..16233347c 100644
--- a/src/codegen.c
+++ b/src/codegen.c
@@ -1911,7 +1911,7 @@ codegen(codegen_scope *s, node *tree, int val)
break;
case NODE_GVAR:
- {
+ if (val) {
int sym = new_sym(s, sym(tree));
genop(s, MKOP_ABx(OP_GETGLOBAL, cursp(), sym));
@@ -1920,7 +1920,7 @@ codegen(codegen_scope *s, node *tree, int val)
break;
case NODE_IVAR:
- {
+ if (val) {
int sym = new_sym(s, sym(tree));
genop(s, MKOP_ABx(OP_GETIV, cursp(), sym));
@@ -1929,7 +1929,7 @@ codegen(codegen_scope *s, node *tree, int val)
break;
case NODE_CVAR:
- {
+ if (val) {
int sym = new_sym(s, sym(tree));
genop(s, MKOP_ABx(OP_GETCV, cursp(), sym));
@@ -1951,7 +1951,7 @@ codegen(codegen_scope *s, node *tree, int val)
break;
case NODE_BACK_REF:
- {
+ if (val) {
char buf[2] = { '$' };
mrb_value str;
int sym;
@@ -1965,7 +1965,7 @@ codegen(codegen_scope *s, node *tree, int val)
break;
case NODE_NTH_REF:
- {
+ if (val) {
int sym;
mrb_state *mrb = s->mrb;
mrb_value fix = mrb_fixnum_value((intptr_t)tree);