1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* vm_eval.c (vm_call0): NODE_ZSUPER supported. [ruby-core:20480]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@20744 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2008-12-15 05:39:39 +00:00
parent d5b7e69032
commit f6147010c7
2 changed files with 14 additions and 1 deletions

View file

@ -1,4 +1,6 @@
Mon Dec 15 14:15:23 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
Mon Dec 15 14:39:37 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
* vm_eval.c (vm_call0): NODE_ZSUPER supported. [ruby-core:20480]
* vm_eval.c (vm_call_super): uses method_missing().

View file

@ -35,6 +35,7 @@ vm_call0(rb_thread_t * th, VALUE klass, VALUE recv, VALUE id, ID oid,
blockptr = th->passed_block;
th->passed_block = 0;
}
again:
switch (nd_type(body)) {
case RUBY_VM_METHOD_NODE:{
rb_control_frame_t *reg_cfp;
@ -99,6 +100,16 @@ vm_call0(rb_thread_t * th, VALUE klass, VALUE recv, VALUE id, ID oid,
recv, klass, argc, (VALUE *)argv, blockptr);
break;
}
case NODE_ZSUPER:{
klass = RCLASS_SUPER(klass);
if (!klass || !(body = rb_method_node(klass, id))) {
return method_missing(recv, id, argc, argv, 0);
}
RUBY_VM_CHECK_INTS();
nosuper = CALL_SUPER;
body = body->nd_body;
goto again;
}
default:
rb_bug("unsupported: vm_call0(%s)", ruby_node_name(nd_type(body)));
}