From 7195fb871665c8b286c76ae0935372c8f5d8f8bc Mon Sep 17 00:00:00 2001 From: Masamitsu MURASE Date: Sun, 20 Jan 2013 17:05:43 +0900 Subject: Modify handling of NODE_UNDEF to accept multiple arguments. --- src/codegen.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) (limited to 'src/codegen.c') 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(); } -- cgit v1.2.3