Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
 package org.jruby.ir.operands;
 
// This represents an array that is used solely during arguments construction
//   * Array + Splat ([1,2,3], *[5,6,7])
// This is a side-effect free operation, hence an operand
//
// NOTE: This operand is only used in the initial stages of optimization.
// Further down the line, this might get built into an actual array object.
public class CompoundArray extends Operand {
    final private Operand a1;
    final private Operand a2;
    private boolean isArgsPush;
    public CompoundArray(Operand a1Operand a2) { 
        this(a1a2false);
    }
    public CompoundArray(Operand a1Operand a2boolean isArgsPush) { 
        this. = a1;
        this. = a2;
        this. = isArgsPush;
    }
    public boolean hasKnownValue() { return false/*return a1.isConstant() && a2.isConstant();*/ }
    public String toString() { return ( ? "ArgsPush:[" : "ArgsCat:[") +  + ", " +  + "]"; }
    public Operand getAppendedArg() { return ; }
    public Operand getSimplifiedOperand(Map<OperandOperandvalueMapboolean force) {
        Operand newA1 = .getSimplifiedOperand(valueMapforce); 
        Operand newA2 = .getSimplifiedOperand(valueMapforce);
/*
 * SSS FIXME:  Cannot convert this to an Array operand!
 *
        // For simplification, get the target value, even if compound
        Operand p1 = a1;
        if (p1 instanceof Variable)
            p1 = ((Variable)p1).getValue(valueMap);
        // For simplification, get the target value, even if compound
        Operand p2 = a2;
        if (p2 instanceof Variable)
            p2 = ((Variable)p2).getValue(valueMap);
        if ((p1 instanceof Array) && (p2 instanceof Array)) {
            // SSS FIXME: Move this code to some utils area .. or probably there is already a method for this in some jruby utils class
            // Holy cow!  Just to append two darned arrays!
            Operand[] p1Elts = ((Array)p1).elts;
            Operand[] p2Elts = ((Array)p2).elts;
            Operand[] newElts = new Operand[p1Elts.length + p2Elts.length];
            System.arraycopy(p1Elts, 0, newElts, 0, p1Elts.length);
            System.arraycopy(p2Elts, 0, newElts, p1Elts.length, p2Elts.length);
            return new Array(newElts);
        }
        else {
            return this;
        }
*/
        return ( == newA1 &&  == newA2) ? this : new CompoundArray(newA1newA2);
    }

    
Append the list of variables used in this operand to the input list
    @Override
    public void addUsedVariables(List<Variablel) {
        .addUsedVariables(l);
        .addUsedVariables(l);
    }
    @Override
    public Operand cloneForInlining(InlinerInfo ii) { 
        return hasKnownValue() ? this : new CompoundArray(.cloneForInlining(ii), .cloneForInlining(ii), );
    }
    @Override
    public Object retrieve(ThreadContext contextIRubyObject selfDynamicScope currDynScopeObject[] temp) {
        IRubyObject v1 = (IRubyObject).retrieve(contextselfcurrDynScopetemp);
        IRubyObject v2 = (IRubyObject).retrieve(contextselfcurrDynScopetemp);
        return  ? RuntimeHelpers.argsPush((RubyArray)v1v2) : RuntimeHelpers.argsCat(v1v2);
    }
    @Override
    public void visit(IRVisitor visitor) {
        visitor.CompoundArray(this);
    }
New to GrepCode? Check out our FAQ X