@Override public String[] toStringNonOperandArgs() { return new String[] { "index: " + getArgIndex(), "req: " + required }; }
@Override public String[] toStringNonOperandArgs() { return new String[] { "index: " + getArgIndex(), "req: " + required }; }
@Override public void encode(IRWriterEncoder e) { super.encode(e); e.encode(required); e.encode(getArgIndex()); }
@Override public void encode(IRWriterEncoder e) { super.encode(e); e.encode(required); e.encode(getArgIndex()); }
@Override public void ReceiveRestArgInstr(ReceiveRestArgInstr 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().loadContext(); jvm.method().adapter.pushInt(instr.numUsedArgs); // MIN reqd args jvm.method().adapter.pushInt(instr.getArgIndex()); // args array offset jvm.method().adapter.aload(3); // FIXME: what is the correct lvar index for args[]? jvm.method().invokeHelper("irLoadRestArg", IRubyObject.class, ThreadContext.class, int.class, int.class, IRubyObject[].class); }
@Override public void ReceiveRestArgInstr(ReceiveRestArgInstr 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().loadContext(); jvm.method().adapter.pushInt(instr.numUsedArgs); // MIN reqd args jvm.method().adapter.pushInt(instr.getArgIndex()); // args array offset jvm.method().adapter.aload(3); // FIXME: what is the correct lvar index for args[]? jvm.method().invokeHelper("irLoadRestArg", IRubyObject.class, ThreadContext.class, int.class, int.class, IRubyObject[].class); }
@Override public void ReceiveRestArgInstr(ReceiveRestArgInstr instr) { jvmMethod().loadContext(); jvmMethod().loadArgs(); jvmAdapter().pushInt(instr.required); jvmAdapter().pushInt(instr.getArgIndex()); jvmAdapter().ldc(jvm.methodData().scope.receivesKeywordArgs()); jvmMethod().invokeIRHelper("receiveRestArg", sig(IRubyObject.class, ThreadContext.class, Object[].class, int.class, int.class, boolean.class)); jvmStoreLocal(instr.getResult()); }
@Override public void ReceiveRestArgInstr(ReceiveRestArgInstr instr) { jvmMethod().loadContext(); jvmMethod().loadArgs(); jvmAdapter().pushInt(instr.required); jvmAdapter().pushInt(instr.getArgIndex()); jvmAdapter().ldc(jvm.methodData().scope.receivesKeywordArgs()); jvmMethod().invokeIRHelper("receiveRestArg", sig(IRubyObject.class, ThreadContext.class, Object[].class, int.class, int.class, boolean.class)); jvmStoreLocal(instr.getResult()); }