Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package org.jruby.ir.operands;
  
 
 import java.util.List;
 import java.util.Map;
 
 // 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 getAppendingArg() { return ; }
 
     public Operand getAppendedArg() { return ; }
 
     public boolean isArgsPush() { 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  ? Helpers.argsPush((RubyArrayv1v2) : Helpers.argsCat(v1v2);
     }
 
     @Override
     public void visit(IRVisitor visitor) {
         visitor.CompoundArray(this);
    }
New to GrepCode? Check out our FAQ X