diff options
| author | Masamitsu MURASE <[email protected]> | 2013-01-20 17:05:43 +0900 |
|---|---|---|
| committer | Masamitsu MURASE <[email protected]> | 2013-01-20 17:44:28 +0900 |
| commit | 7195fb871665c8b286c76ae0935372c8f5d8f8bc (patch) | |
| tree | eb4c2f813ed168642ce5a76ddf9bcf65848e3020 /src/codegen.c | |
| parent | 583983385b81c21f82704b116eab52d606a609f4 (diff) | |
| download | mruby-7195fb871665c8b286c76ae0935372c8f5d8f8bc.tar.gz mruby-7195fb871665c8b286c76ae0935372c8f5d8f8bc.zip | |
Modify handling of NODE_UNDEF to accept multiple arguments.
Diffstat (limited to 'src/codegen.c')
| -rw-r--r-- | src/codegen.c | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/src/codegen.c b/src/codegen.c index e728da4ca..5c3614814 100644 --- a/src/codegen.c +++ b/src/codegen.c @@ -1938,16 +1938,21 @@ codegen(codegen_scope *s, node *tree, int val) case NODE_UNDEF: { - int sym = new_msym(s, sym(tree)); int undef = new_msym(s, mrb_intern(s->mrb, "undef_method")); + int num = 0; + node *t = tree; genop(s, MKOP_A(OP_TCLASS, cursp())); push(); - genop(s, MKOP_ABx(OP_LOADSYM, cursp(), sym)); - push(); - genop(s, MKOP_A(OP_LOADNIL, cursp())); - pop_n(2); - genop(s, MKOP_ABC(OP_SEND, cursp(), undef, 2)); + while (t) { + int symbol = new_msym(s, sym(t->car)); + genop(s, MKOP_ABx(OP_LOADSYM, cursp(), symbol)); + push(); + t = t->cdr; + num++; + } + pop_n(num + 1); + genop(s, MKOP_ABC(OP_SEND, cursp(), undef, num)); if (val) { push(); } |
