vm/instructions.rb
# [Operation]
#   Call a method on the superclass with a block
# [Format]
#   \send_super_stack_with_block method argc
# [Stack Before]
#   * block
#   * argN
#   * ...
#   * arg2
#   * arg1
# [Stack After]
#   * retval
#   * ...
# [Description]
#   Pops a block off the stack, and sends the message +method+ with +argc+
#   arguments. The arguments to the method remain on the stack, ready to be
#   converted into locals when the method is activated.
#
#   When the method returns, the return value will be on top of the stack.
# [Notes]
#   The receiver is not specified for a call to super; it is the superclass
#   of the current object that will receive the message.
[Operation]
Call a method on the superclass with a block
[Format]
\send_super_stack_with_block method argc
[Stack Before]
block
argN

arg2
arg1
[Stack After]
retval

[Description]
Pops a block off the stack, and sends the message +method+ with +argc+
arguments. The arguments to the method remain on the stack, ready to be
converted into locals when the method is activated.

When the method returns, the return value will be on top of the stack.
[Notes]
The receiver is not specified for a call to super; it is the superclass
of the current object that will receive the message.
[ Operation ] Call a method on the superclass with a block [ Format ] \ send_super_stack_with_block method argc [ Stack Before ] block argN arg2 arg1 [ Stack After ] retval [ Description ] Pops a block off the stack and sends the message + method + with + argc + arguments . The arguments to the method remain on the stack ready to be converted into locals when the method is activated . When the method returns the return value will be on top of the stack . [ Notes ] The receiver is not specified for a call to super ; it is the superclass of the current object that will receive the message .
def send_super_stack_with_block(index, count)
    <<-CODE
    Object* block = stack_pop();
    SendSite::Internal* cache = reinterpret_cast<SendSite::Internal*>(index);
    Object* const recv = call_frame->self();
    Class* const klass = recv->lookup_begin(state);
    Arguments args(recv, block, count,
                   call_frame->stack_back_position(count - 1));
    if(unlikely(cache->recv_class != klass)) {
      if(SendSite::fill(state, klass, call_frame, cache, true,
                     call_frame->module()->superclass())) {
        args.unshift(state, cache->name);
      }
    }
    SET_ALLOW_PRIVATE(false);
    Object* ret = cache->execute(state, call_frame, *cache, args);
    call_frame->clear_stack(count);
    HANDLE_EXCEPTION(ret);
    stack_push(ret);
    CODE
  end
def send_super_stack_with_block ( index , count ) <<-CODE 
    Object* block = stack_pop();
    SendSite::Internal* cache = reinterpret_cast<SendSite::Internal*>(index);
    Object* const recv = call_frame->self();
    Class* const klass = recv->lookup_begin(state);

    Arguments args(recv, block, count,
                   call_frame->stack_back_position(count - 1));

    if(unlikely(cache->recv_class != klass)) {
      if(SendSite::fill(state, klass, call_frame, cache, true,
                     call_frame->module()->superclass())) {
        args.unshift(state, cache->name);
      }
    }

    SET_ALLOW_PRIVATE(false);

    Object* ret = cache->execute(state, call_frame, *cache, args);

    call_frame->clear_stack(count);

    HANDLE_EXCEPTION(ret);
    stack_push(ret);
     CODE end
[Operation]
Call a method on the superclass with a block
[Format]
\send_super_stack_with_block method argc
[Stack Before]
 block
 argN
 ...
 arg2
 arg1
[Stack After]
 retval
 ...
[Description]
Pops a block off the stack, and sends the message +method+ with +argc+
arguments.
[ Operation ] Call a method on the superclass with a block [ Format ] \ send_super_stack_with_block method argc [ Stack Before ] block argN ... arg2 arg1 [ Stack After ] retval ... [ Description ] Pops a block off the stack and sends the message + method + with + argc + arguments .
index
<not_specific>
count
<not_specific>