diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2013-01-20 14:32:40 -0800 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2013-01-20 14:32:40 -0800 |
| commit | cc16bd7c0d70b326ddcf8de8a511116dae9fc30d (patch) | |
| tree | aad0bb92b5b983815527db305d2616244d6d71a1 /src/codegen.c | |
| parent | aaf5f3a0f556626bd401519846cca58d31c99716 (diff) | |
| parent | d16659c7a5c532d9313f3e501743f322a0055dc4 (diff) | |
| download | mruby-cc16bd7c0d70b326ddcf8de8a511116dae9fc30d.tar.gz mruby-cc16bd7c0d70b326ddcf8de8a511116dae9fc30d.zip | |
Merge pull request #754 from masamitsu-murase/modify_undef_node
Modify handling of NODE_UNDEF.
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(); } |
