Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
 package org.jruby.ir.instructions;
 
public class RestArgMultipleAsgnInstr extends MultipleAsgnBase {
    private final int preArgsCount;       // # of reqd args before rest-arg (-1 if we are fetching a pre-arg)
    private final int postArgsCount;      // # of reqd args after rest-arg  (-1 if we are fetching a pre-arg)
    public RestArgMultipleAsgnInstr(Variable resultOperand arrayint preArgsCountint postArgsCountint index) {
        super(.resultarrayindex);
        this. = preArgsCount;
        this. = postArgsCount;
    }
    public RestArgMultipleAsgnInstr(Variable resultOperand arrayint index) {
        this(resultarray, -1, -1, index);
    }
    @Override
    public String toString() {
        return super.toString() + "(" +  + ", " +  + ", " +  + ", " +  + ")";
    }
    @Override
    public Instr cloneForInlining(InlinerInfo ii) {
    }
    @Override
    public Object interpret(ThreadContext contextDynamicScope currDynScopeIRubyObject selfObject[] tempBlock block) {
        // ENEBO: Can I assume since IR figured this is an internal array it will be RubyArray like this?
        RubyArray rubyArray = (RubyArray.retrieve(contextselfcurrDynScopetemp);
        Object val;
        
        int n = rubyArray.getLength();
        if ( == -1) {
            // Masgn for 1.8 and 1.9 pre-reqd. args always comes down this path!
            if ( >= n) {
                return RubyArray.newEmptyArray(context.runtime);
            } else {
                return RubyArray.newArrayNoCopy(context.runtimerubyArray.toJavaArray(), , (n - ));
            }
        } else {
            // Masgn for 1.9 post-reqd args always come down this path
            if (( >= n) || ( +  >= n)) {
                return RubyArray.newEmptyArray(context.runtime);
            } else {
                // FIXME: Perf win to use COW between source Array and this new one (remove toJavaArray)
                return RubyArray.newArrayNoCopy(context.runtimerubyArray.toJavaArray(), , (n -  - ));
            }
        }
    }
    @Override
    public void visit(IRVisitor visitor) {
        visitor.RestArgMultipleAsgnInstr(this);
    }
New to GrepCode? Check out our FAQ X