497
498
switch (nd_type(node)) {
498
499
case RUBY_VM_METHOD_NODE:{
499
vm_setup_method(th, cfp, num, blockptr, flag, (VALUE)node->nd_body, recv, klass);
500
vm_setup_method(th, cfp, num, blockptr, flag, (VALUE)node->nd_body, recv, klass);
502
503
case NODE_CFUNC:{
503
val = vm_call_cfunc(th, cfp, num, id, recv, mn->nd_clss, flag, node, blockptr);
504
val = vm_call_cfunc(th, cfp, num, id, recv, mn->nd_clss, flag, node, blockptr);
506
507
case NODE_ATTRSET:{
507
val = rb_ivar_set(recv, node->nd_vid, *(cfp->sp - 1));
508
val = rb_ivar_set(recv, node->nd_vid, *(cfp->sp - 1));
512
val = rb_ivar_get(recv, node->nd_vid);
514
rb_raise(rb_eArgError, "wrong number of arguments (%d for 0)",
517
val = rb_attr_get(recv, node->nd_vid);
516
521
case NODE_BMETHOD:{
517
VALUE *argv = cfp->sp - num;
518
val = vm_call_bmethod(th, id, node->nd_cval, recv, klass, num, argv, blockptr);
519
cfp->sp += - num - 1;
522
VALUE *argv = cfp->sp - num;
523
val = vm_call_bmethod(th, id, node->nd_cval, recv, klass, num, argv, blockptr);
524
cfp->sp += - num - 1;
522
527
case NODE_ZSUPER:{
523
klass = RCLASS_SUPER(mn->nd_clss);
524
mn = rb_method_node(klass, id);
528
klass = RCLASS_SUPER(mn->nd_clss);
529
mn = rb_method_node(klass, id);
527
goto normal_method_dispatch;
530
goto start_method_dispatch;
532
goto normal_method_dispatch;
535
goto start_method_dispatch;
534
printf("node: %s\n", ruby_node_name(nd_type(node)));
535
rb_bug("eval_invoke_method: unreachable");
539
printf("node: %s\n", ruby_node_name(nd_type(node)));
540
rb_bug("eval_invoke_method: unreachable");