ReturnInstr.java

  1. package org.jruby.ir.instructions;

  2. import org.jruby.ir.IRVisitor;
  3. import org.jruby.ir.Operation;
  4. import org.jruby.ir.operands.Operand;
  5. import org.jruby.ir.operands.Variable;
  6. import org.jruby.ir.transformations.inlining.CloneInfo;
  7. import org.jruby.ir.transformations.inlining.InlineCloneInfo;
  8. import org.jruby.ir.transformations.inlining.SimpleCloneInfo;

  9. public class ReturnInstr extends ReturnBase implements FixedArityInstr {
  10.     public ReturnInstr(Operand returnValue) {
  11.         super(Operation.RETURN, returnValue);
  12.     }

  13.     @Override
  14.     public String toString() {
  15.         return getOperation() + "(" + returnValue + ")";
  16.     }

  17.     @Override
  18.     public Instr clone(CloneInfo info) {
  19.         if (info instanceof SimpleCloneInfo) return new ReturnInstr(returnValue.cloneForInlining(info));

  20.         InlineCloneInfo ii = (InlineCloneInfo) info;

  21.         if (ii.isClosure()) return new CopyInstr(ii.getYieldResult(), returnValue.cloneForInlining(ii));

  22.         Variable v = ii.getCallResultVariable();
  23.         return v == null ? null : new CopyInstr(v, returnValue.cloneForInlining(ii));
  24.     }

  25.     @Override
  26.     public void visit(IRVisitor visitor) {
  27.         visitor.ReturnInstr(this);
  28.     }
  29. }