diff options
| author | Paolo Bosetti <[email protected]> | 2012-05-29 14:32:05 -0700 |
|---|---|---|
| committer | Paolo Bosetti <[email protected]> | 2012-05-29 14:32:05 -0700 |
| commit | d73517877847dab5b345c7fa98091647737bbfe0 (patch) | |
| tree | 6090a2df49b8093606181e5416e6aa6a5040b0ec /src/codegen.c | |
| parent | 391f8dcef02cdafeb4e0acc693945acb166a8d09 (diff) | |
| parent | 1e5d15dbcb977f6d197c24eca4a973ee1c5bf521 (diff) | |
| download | mruby-d73517877847dab5b345c7fa98091647737bbfe0.tar.gz mruby-d73517877847dab5b345c7fa98091647737bbfe0.zip | |
Merge branch 'master' of git://github.com/mruby/mruby into XCode
Diffstat (limited to 'src/codegen.c')
| -rw-r--r-- | src/codegen.c | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/src/codegen.c b/src/codegen.c index 087dd3165..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; @@ -1234,25 +1235,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); @@ -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); } |
