Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
 package org.jruby.ir.operands;
 
 
// Represents a svalue node in Ruby code
//
// According to headius, svalue evaluates its value node and returns:
//  * nil if it does not evaluate to an array or if it evaluates to an empty array
//  * the first element if it evaluates to a one-element array
//  * the array if it evaluates to a >1 element array
//
// NOTE: This operand is only used in the initial stages of optimization
// Further down the line, it could get converted to calls
//
public class SValue extends Operand {
    final private Operand array;
    public SValue(Operand array) {
        this. = array;
    }
    @Override
    public boolean hasKnownValue() {
        return .hasKnownValue();
    }
    @Override
    public String toString() {
        return "SValue:" + ;
    }
    @Override
    public Operand getSimplifiedOperand(Map<OperandOperandvalueMapboolean force) {
        Operand newArray = .getSimplifiedOperand(valueMapforce);
        if (newArray instanceof Array) {
            Array a = (ArraynewArray;
            return (a.elts.length == 1) ? a.elts[0] : a;
        } else {
            return (newArray == ) ? this : new SValue(newArray);
        }
    }

    
Append the list of variables used in this operand to the input list
    @Override
    public void addUsedVariables(List<Variablel) {
        .addUsedVariables(l);
    }
 
    @Override
    public Operand cloneForInlining(InlinerInfo ii) { 
        return hasKnownValue() ? this : new SValue(.cloneForInlining(ii));
    }
    @Override
    public Object retrieve(ThreadContext contextIRubyObject selfDynamicScope currDynScopeObject[] temp) {
        Object val = .retrieve(contextselfcurrDynScopetemp);
        if (context.runtime.is1_9()) {
            return (val instanceof RubyArray) ? val : context.runtime.getNil();
        } else {
            if (val instanceof RubyArray) {
                int n = ((RubyArrayval).getLength();
                
                if (n == 0) return context.nil;
                if (n == 1) return ((RubyArrayval).entry(0);
                
                return val;
            }
            return context.nil;
        }
    }
    @Override
    public void visit(IRVisitor visitor) {
        visitor.SValue(this);
    }
New to GrepCode? Check out our FAQ X