summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/codegen.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/codegen.c b/src/codegen.c
index 10bf882a3..1bdc2d21c 100644
--- a/src/codegen.c
+++ b/src/codegen.c
@@ -51,7 +51,8 @@ typedef struct scope {
int sp;
int pc;
int lastlabel;
- int ainfo;
+ int ainfo:15;
+ int mscope:1;
struct loopinfo *loop;
int ensure_level;
@@ -448,6 +449,7 @@ lambda_body(codegen_scope *s, node *tree, int blk)
s = scope_new(s->mrb, s, tree->car);
idx = s->idx;
+ s->mscope = !blk;
if (blk) {
struct loopinfo *lp = loop_push(s, LOOP_BLOCK);
@@ -1346,7 +1348,7 @@ codegen(codegen_scope *s, node *tree, int val)
int lv = 0, ainfo = 0;
push(); /* room for receiver */
- while (s2->ainfo < 0) {
+ while (!s2->mscope) {
lv++;
s2 = s2->prev;
if (!s2) break;
@@ -1381,7 +1383,7 @@ codegen(codegen_scope *s, node *tree, int val)
int lv = 0, ainfo = 0;
int n = 0, sendv = 0;
- while (s2->ainfo < 0) {
+ while (!s2->mscope) {
lv++;
s2 = s2->prev;
if (!s2) break;
@@ -1916,6 +1918,7 @@ scope_new(mrb_state *mrb, codegen_scope *prev, node *lv)
if (!prev) return p;
p->prev = prev;
p->ainfo = -1;
+ p->mscope = 0;
p->mrb = prev->mrb;
p->icapa = 1024;