@Override public Instr cloneForBlockCloning(InlinerInfo ii) { // Added this copy for code clarity // argIndex is relative to start of opt args and not the start of arg array int optArgIndex = this.argIndex; return new ReceiveOptArgInstr(ii.getRenamedVariable(result), numUsedArgs, argOffset, optArgIndex); }
@Override public void encode(IRWriterEncoder e) { super.encode(e); e.encode(requiredArgs); e.encode(getPreArgs()); e.encode(getArgIndex()); }
@Override public String toString() { return (isDead() ? "[DEAD]" : "") + (hasUnusedResult() ? "[DEAD-RESULT]" : "") + getResult() + " = " + getOperation() + "(" + numUsedArgs + "," + argOffset + "," + argIndex + ")"; }
@Override public void ReceiveOptArgInstr(ReceiveOptArgInstr instr) { jvmMethod().loadContext(); jvmMethod().loadArgs(); jvmAdapter().pushInt(instr.requiredArgs); jvmAdapter().pushInt(instr.preArgs); jvmAdapter().pushInt(instr.getArgIndex()); jvmAdapter().ldc(jvm.methodData().scope.receivesKeywordArgs()); jvmMethod().invokeIRHelper("receiveOptArg", sig(IRubyObject.class, ThreadContext.class, IRubyObject[].class, int.class, int.class, int.class, boolean.class)); jvmStoreLocal(instr.getResult()); }
@Override public String[] toStringNonOperandArgs() { return new String[] {"index:" + getArgIndex(), "req: " + requiredArgs, "pre: " + preArgs}; }
break; case RECV_OPT_ARG: result = ((ReceiveOptArgInstr)instr).receiveOptArg(args, kwArgHashCount); break; case RECV_POST_REQD_ARG:
case RECV_KW_ARG: return ReceiveKeywordArgInstr.decode(this); case RECV_KW_REST_ARG: return ReceiveKeywordRestArgInstr.decode(this); case RECV_OPT_ARG: return ReceiveOptArgInstr.decode(this); case RECV_POST_REQD_ARG: return ReceivePostReqdArgInstr.decode(this); case RECV_PRE_REQD_ARG: return ReceivePreReqdArgInstr.decode(this);
@Override public void ReceiveOptArgInstr(ReceiveOptArgInstr instr) { jvmMethod().loadContext(); jvmMethod().loadArgs(); jvmAdapter().pushInt(instr.requiredArgs); jvmAdapter().pushInt(instr.preArgs); jvmAdapter().pushInt(instr.getArgIndex()); jvmAdapter().ldc(jvm.methodData().scope.receivesKeywordArgs()); jvmMethod().invokeIRHelper("receiveOptArg", sig(IRubyObject.class, ThreadContext.class, IRubyObject[].class, int.class, int.class, int.class, boolean.class)); jvmStoreLocal(instr.getResult()); }
@Override public String[] toStringNonOperandArgs() { return new String[] {"index:" + getArgIndex(), "req: " + requiredArgs, "pre: " + preArgs}; }
break; case RECV_OPT_ARG: result = ((ReceiveOptArgInstr)instr).receiveOptArg(args, kwArgHashCount); break; case RECV_POST_REQD_ARG:
case RECV_KW_ARG: return ReceiveKeywordArgInstr.decode(this); case RECV_KW_REST_ARG: return ReceiveKeywordRestArgInstr.decode(this); case RECV_OPT_ARG: return ReceiveOptArgInstr.decode(this); case RECV_POST_REQD_ARG: return ReceivePostReqdArgInstr.decode(this); case RECV_PRE_REQD_ARG: return ReceivePreReqdArgInstr.decode(this);
@Override public String toString() { return (isDead() ? "[DEAD]" : "") + (hasUnusedResult() ? "[DEAD-RESULT]" : "") + getResult() + " = " + getOperation() + "(" + numUsedArgs + "," + argOffset + "," + argIndex + ")"; }
@Override public Instr cloneForBlockCloning(InlinerInfo ii) { // Added this copy for code clarity // argIndex is relative to start of opt args and not the start of arg array int optArgIndex = this.argIndex; return new ReceiveOptArgInstr(ii.getRenamedVariable(result), numUsedArgs, argOffset, optArgIndex); }
@Override public void encode(IRWriterEncoder e) { super.encode(e); e.encode(requiredArgs); e.encode(getPreArgs()); e.encode(getArgIndex()); }
@Override public void ReceiveOptArgInstr(ReceiveOptArgInstr instr) { // FIXME: Only works when args is in an array rather than being flattened out // FIXME: Missing kwargs 2.0 support (kwArgHashCount value) jvm.method().adapter.pushInt(instr.getArgIndex() + instr.numUsedArgs); // MIN reqd args jvm.method().adapter.pushInt(instr.getArgIndex() + instr.argOffset); // args array offset jvm.method().adapter.aload(3); // FIXME: what is the correct lvar index for args[]? jvm.method().invokeHelper("irLoadOptArg", IRubyObject.class, int.class, int.class, IRubyObject[].class); }
public static ReceiveOptArgInstr decode(IRReaderDecoder d) { return new ReceiveOptArgInstr(d.decodeVariable(), d.decodeInt(), d.decodeInt(), d.decodeInt()); }
@Override public void ReceiveOptArgInstr(ReceiveOptArgInstr instr) { // FIXME: Only works when args is in an array rather than being flattened out // FIXME: Missing kwargs 2.0 support (kwArgHashCount value) jvm.method().adapter.pushInt(instr.getArgIndex() + instr.numUsedArgs); // MIN reqd args jvm.method().adapter.pushInt(instr.getArgIndex() + instr.argOffset); // args array offset jvm.method().adapter.aload(3); // FIXME: what is the correct lvar index for args[]? jvm.method().invokeHelper("irLoadOptArg", IRubyObject.class, int.class, int.class, IRubyObject[].class); }
public static ReceiveOptArgInstr decode(IRReaderDecoder d) { return new ReceiveOptArgInstr(d.decodeVariable(), d.decodeInt(), d.decodeInt(), d.decodeInt()); }
@Override public Instr clone(CloneInfo info) { int optArgIndex = this.argIndex; if (info instanceof SimpleCloneInfo) return new ReceiveOptArgInstr(info.getRenamedVariable(result), requiredArgs, preArgs, optArgIndex); InlineCloneInfo ii = (InlineCloneInfo) info; // SSS FIXME: Need to add kwArgLoss information in InlinerInfo // Added this copy for code clarity // argIndex is relative to start of opt args and not the start of arg array int minReqdArgs = optArgIndex + requiredArgs; if (ii.canMapArgsStatically()) { int n = ii.getArgsCount(); return new CopyInstr(ii.getRenamedVariable(result), minReqdArgs < n ? ii.getArg(preArgs + optArgIndex) : UndefinedValue.UNDEFINED); } return new OptArgMultipleAsgnInstr(ii.getRenamedVariable(result), ii.getArgs(), preArgs + optArgIndex, minReqdArgs); }
@Override public Instr clone(CloneInfo info) { int optArgIndex = this.argIndex; if (info instanceof SimpleCloneInfo) return new ReceiveOptArgInstr(info.getRenamedVariable(result), requiredArgs, preArgs, optArgIndex); InlineCloneInfo ii = (InlineCloneInfo) info; // SSS FIXME: Need to add kwArgLoss information in InlinerInfo // Added this copy for code clarity // argIndex is relative to start of opt args and not the start of arg array int minReqdArgs = optArgIndex + requiredArgs; if (ii.canMapArgsStatically()) { int n = ii.getArgsCount(); return new CopyInstr(ii.getRenamedVariable(result), minReqdArgs < n ? ii.getArg(preArgs + optArgIndex) : UndefinedValue.UNDEFINED); } return new OptArgMultipleAsgnInstr(ii.getRenamedVariable(result), ii.getArgs(), preArgs + optArgIndex, minReqdArgs); }