@Override public Object interpret(ThreadContext context, StaticScope currScope, DynamicScope currDynScope, IRubyObject self, Object[] temp) { // ENEBO: Can I assume since IR figured this is an internal array it will be RubyArray like this? RubyArray rubyArray = (RubyArray) getArray().retrieve(context, self, currScope, currDynScope, temp); return IRRuntimeHelpers.irReqdArgMultipleAsgn(context, rubyArray, preArgsCount, index, postArgsCount); }
@Override public Object interpret(ThreadContext context, StaticScope currScope, DynamicScope currDynScope, IRubyObject self, Object[] temp) { // ENEBO: Can I assume since IR figured this is an internal array it will be RubyArray like this? RubyArray rubyArray = (RubyArray) getArray().retrieve(context, self, currScope, currDynScope, temp); return IRRuntimeHelpers.irReqdArgMultipleAsgn(context, rubyArray, preArgsCount, index, postArgsCount); }
@Override public Instr clone(CloneInfo ii) { return new ReqdArgMultipleAsgnInstr(ii.getRenamedVariable(result), getArray().cloneForInlining(ii), preArgsCount, postArgsCount, index); }
@Override public Instr clone(CloneInfo ii) { return new ReqdArgMultipleAsgnInstr(ii.getRenamedVariable(result), getArray().cloneForInlining(ii), preArgsCount, postArgsCount, index); }
@Override public Operand simplifyAndGetResult(IRScope scope, Map<Operand, Operand> valueMap) { simplifyOperands(valueMap, false); Operand val = getArray().getValue(valueMap); if (val instanceof Array) { Array a = (Array)val; int n = a.size(); int i = IRRuntimeHelpers.irReqdArgMultipleAsgnIndex(n, preArgsCount, index, postArgsCount); return i == -1 ? scope.getManager().getNil() : a.get(i); } else { return null; } }
@Override public Operand simplifyAndGetResult(IRScope scope, Map<Operand, Operand> valueMap) { simplifyOperands(valueMap, false); Operand val = getArray().getValue(valueMap); if (val instanceof Array) { Array a = (Array)val; int n = a.size(); int i = IRRuntimeHelpers.irReqdArgMultipleAsgnIndex(n, preArgsCount, index, postArgsCount); return i == -1 ? scope.getManager().getNil() : a.get(i); } else { return null; } }
@Override public void encode(IRWriterEncoder e) { super.encode(e); e.encode(getArray()); e.encode(getPreArgsCount()); e.encode(getPostArgsCount()); e.encode(getIndex()); }
@Override public void encode(IRWriterEncoder e) { super.encode(e); e.encode(getArray()); e.encode(getPreArgsCount()); e.encode(getPostArgsCount()); e.encode(getIndex()); }
@Override public void ReqdArgMultipleAsgnInstr(ReqdArgMultipleAsgnInstr reqdargmultipleasgninstr) { jvmMethod().loadContext(); visit(reqdargmultipleasgninstr.getArray()); jvmAdapter().checkcast(p(RubyArray.class)); jvmAdapter().pushInt(reqdargmultipleasgninstr.getPreArgsCount()); jvmAdapter().pushInt(reqdargmultipleasgninstr.getIndex()); jvmAdapter().pushInt(reqdargmultipleasgninstr.getPostArgsCount()); jvmMethod().invokeIRHelper("irReqdArgMultipleAsgn", sig(IRubyObject.class, ThreadContext.class, RubyArray.class, int.class, int.class, int.class)); jvmStoreLocal(reqdargmultipleasgninstr.getResult()); }
@Override public void ReqdArgMultipleAsgnInstr(ReqdArgMultipleAsgnInstr reqdargmultipleasgninstr) { jvmMethod().loadContext(); visit(reqdargmultipleasgninstr.getArray()); jvmAdapter().checkcast(p(RubyArray.class)); jvmAdapter().pushInt(reqdargmultipleasgninstr.getPreArgsCount()); jvmAdapter().pushInt(reqdargmultipleasgninstr.getIndex()); jvmAdapter().pushInt(reqdargmultipleasgninstr.getPostArgsCount()); jvmMethod().invokeIRHelper("irReqdArgMultipleAsgn", sig(IRubyObject.class, ThreadContext.class, RubyArray.class, int.class, int.class, int.class)); jvmStoreLocal(reqdargmultipleasgninstr.getResult()); }