/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.jruby.ast;
import org.jruby.Ruby;
import org.jruby.javasupport.util.RuntimeHelpers;
import org.jruby.lexer.yacc.ISourcePosition;
import org.jruby.runtime.Block;
import org.jruby.runtime.ThreadContext;
import org.jruby.runtime.builtin.IRubyObject;
/**
*
* @author enebo
*/
public class Yield19Node extends YieldNode {
public Yield19Node(ISourcePosition position, Node node) {
super(ISourcePosition.INVALID_POSITION, node, false);
}
@Override
public IRubyObject interpret(Ruby runtime, ThreadContext context, IRubyObject self, Block aBlock) {
Node args = getArgsNode();
IRubyObject argsResult = args.interpret(runtime, context, self, aBlock);
Block yieldToBlock = context.getCurrentFrame().getBlock();
switch (args.getNodeType()) {
case ARGSPUSHNODE:
case ARGSCATNODE:
case SPLATNODE:
argsResult = RuntimeHelpers.unsplatValue19IfArityOne(argsResult, yieldToBlock);
break;
case ARRAYNODE:
// Pass-thru
break;
default:
assert false: "Invalid node found in yield";
}
return yieldToBlock.yieldArray(context, argsResult, null, null);
}
}