From c2a084dff98f234f8a9bc2215bfd406da87e15c9 Mon Sep 17 00:00:00 2001 From: Yukihiro Matsumoto Date: Thu, 24 May 2012 09:24:11 +0900 Subject: wrong number of arguments for self-assignments --- src/codegen.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'src/codegen.c') diff --git a/src/codegen.c b/src/codegen.c index 087dd3165..5e2b7083f 100644 --- a/src/codegen.c +++ b/src/codegen.c @@ -1234,25 +1234,25 @@ codegen(codegen_scope *s, node *tree, int val) int idx = new_msym(s, sym); if (name[0] == '+' && strlen(name) == 1) { - genop(s, MKOP_ABC(OP_ADD, cursp(), idx, 2)); + genop(s, MKOP_ABC(OP_ADD, cursp(), idx, 1)); } else if (name[0] == '-' && strlen(name) == 1) { - genop(s, MKOP_ABC(OP_SUB, cursp(), idx, 2)); + genop(s, MKOP_ABC(OP_SUB, cursp(), idx, 1)); } else if (name[0] == '<' && strlen(name) == 1) { - genop(s, MKOP_ABC(OP_LT, cursp(), idx, 2)); + genop(s, MKOP_ABC(OP_LT, cursp(), idx, 1)); } else if (name[0] == '<' && strlen(name) == 2 && name[1] == '=') { - genop(s, MKOP_ABC(OP_LE, cursp(), idx, 2)); + genop(s, MKOP_ABC(OP_LE, cursp(), idx, 1)); } else if (name[0] == '>' && strlen(name) == 1) { - genop(s, MKOP_ABC(OP_GT, cursp(), idx, 2)); + genop(s, MKOP_ABC(OP_GT, cursp(), idx, 1)); } else if (name[0] == '>' && strlen(name) == 2 && name[1] == '=') { - genop(s, MKOP_ABC(OP_GE, cursp(), idx, 2)); + genop(s, MKOP_ABC(OP_GE, cursp(), idx, 1)); } else { - genop(s, MKOP_ABC(OP_SEND, cursp(), idx, 2)); + genop(s, MKOP_ABC(OP_SEND, cursp(), idx, 1)); } } gen_assignment(s, tree->car, cursp(), val); -- cgit v1.2.3 From f6d539eabd305d40afe18639d2e19e0fb8dafc55 Mon Sep 17 00:00:00 2001 From: Yukihiro Matsumoto Date: Sat, 26 May 2012 11:18:16 +0900 Subject: clear arena_idx after exiting scope; close #195 --- src/codegen.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'src/codegen.c') diff --git a/src/codegen.c b/src/codegen.c index 5e2b7083f..11e9eb236 100644 --- a/src/codegen.c +++ b/src/codegen.c @@ -64,6 +64,7 @@ typedef struct scope { int nlocals; int nregs; + int ai; int idx; } codegen_scope; @@ -1849,6 +1850,7 @@ scope_new(mrb_state *mrb, codegen_scope *prev, node *lv) p->lv = lv; p->sp += node_len(lv)+2; p->nlocals = p->sp; + p->ai = mrb->arena_idx; p->idx = mrb->irep_len++; @@ -1882,6 +1884,7 @@ scope_finish(codegen_scope *s, int idx) irep->nlocals = s->nlocals; irep->nregs = s->nregs; + s->mrb->arena_idx = s->ai; mrb_pool_close(s->mpool); } -- cgit v1.2.3