Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
 package org.jruby.ir.operands;
 
 
// Represents a range (1..5) or (a..b) in ruby code
//
// NOTE: This operand is only used in the initial stages of optimization
// Further down the line, this range operand could get converted to calls
// that actually build the Range object
public class Range extends Operand {
    final private Operand begin;
    final private Operand end;
    private boolean exclusive;
    public Range(Operand beginOperand endboolean exclusive) {
        this. = begin;
        this. = end;
        this. = exclusive;
    }
    @Override
    public String toString() {
        return  + ( ? ".." : "...") + ;
    }
// ---------- These methods below are used during compile-time optimizations ------- 
    @Override
    public boolean hasKnownValue() {
        return .hasKnownValue() && .hasKnownValue();
    }
    @Override
    public Operand fetchCompileTimeArrayElement(int argIndexboolean getSubArray) {
        if (!hasKnownValue()) return null;
        // SSS FIXME: Cannot optimize this without assuming that Range.to_ary method has not redefined.
        // So for now, return null!
        return null;
    }
    @Override
    public Operand getSimplifiedOperand(Map<OperandOperandvalueMapboolean force) {
        Operand newBegin = .getSimplifiedOperand(valueMapforce);
        Operand newEnd = .getSimplifiedOperand(valueMapforce);
        return (newBegin ==  && newEnd == ) ? this : new Range(newBeginnewEnd);
    }

    
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 Range(.cloneForInlining(ii), .cloneForInlining(ii), );
    }
    @Override
    public Object retrieve(ThreadContext contextIRubyObject selfDynamicScope currDynScopeObject[] temp) {
        return RubyRange.newRange(context.runtimecontext,
                (IRubyObject.retrieve(contextselfcurrDynScopetemp), 
                (IRubyObject.retrieve(contextselfcurrDynScopetemp), );
    }
    @Override
    public void visit(IRVisitor visitor) {
        visitor.Range(this);
    }
New to GrepCode? Check out our FAQ X