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:
parent
d5b7e69032
commit
f6147010c7
2 changed files with 14 additions and 1 deletions
|
@ -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().
|
||||
|
||||
|
|
11
vm_eval.c
11
vm_eval.c
|
@ -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)));
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue