String outgoingSig; BlockPassType blockPassType = BlockPassType.fromIR(call); boolean blockGiven = blockPassType.given(); if (blockGiven) { switch (arity) { adapter2.invokevirtual(p(CachingCallSite.class), blockPassType.literal() ? "callIter" : "call", outgoingSig); adapter2.areturn(); adapter2.end();
String outgoingSig; BlockPassType blockPassType = BlockPassType.fromIR(call); boolean blockGiven = blockPassType.given(); if (blockGiven) { switch (arity) { adapter2.invokevirtual(p(CachingCallSite.class), blockPassType.literal() ? "callIter" : "call", outgoingSig); adapter2.areturn(); adapter2.end();
@Override public void invokeOther(String file, int line, String scopeFieldName, CallBase call, int arity) { String id = call.getId(); if (arity > MAX_ARGUMENTS) throw new NotCompilableException("call to `" + id + "' has more than " + MAX_ARGUMENTS + " arguments"); if (call.isPotentiallyRefined()) { super.invokeOther(file, line, scopeFieldName, call, arity); return; } BlockPassType blockPassType = BlockPassType.fromIR(call); if (blockPassType.given()) { if (arity == -1) { adapter.invokedynamic("invoke:" + JavaNameMangler.mangleMethodName(id), sig(JVM.OBJECT, params(ThreadContext.class, JVM.OBJECT, JVM.OBJECT, JVM.OBJECT_ARRAY, Block.class)), NormalInvokeSite.BOOTSTRAP, blockPassType.literal(), file, line); } else { adapter.invokedynamic("invoke:" + JavaNameMangler.mangleMethodName(id), sig(JVM.OBJECT, params(ThreadContext.class, JVM.OBJECT, arity + 2, Block.class)), NormalInvokeSite.BOOTSTRAP, blockPassType.literal(), file, line); } } else { if (arity == -1) { adapter.invokedynamic("invoke:" + JavaNameMangler.mangleMethodName(id), sig(JVM.OBJECT, params(ThreadContext.class, JVM.OBJECT, JVM.OBJECT, JVM.OBJECT_ARRAY)), NormalInvokeSite.BOOTSTRAP, false, file, line); } else { adapter.invokedynamic("invoke:" + JavaNameMangler.mangleMethodName(id), sig(JVM.OBJECT, params(ThreadContext.class, JVM.OBJECT, JVM.OBJECT, JVM.OBJECT, arity)), NormalInvokeSite.BOOTSTRAP, false, file, line); } } }
@Override public void invokeOther(String file, int line, String scopeFieldName, CallBase call, int arity) { String id = call.getId(); if (arity > MAX_ARGUMENTS) throw new NotCompilableException("call to `" + id + "' has more than " + MAX_ARGUMENTS + " arguments"); if (call.isPotentiallyRefined()) { super.invokeOther(file, line, scopeFieldName, call, arity); return; } BlockPassType blockPassType = BlockPassType.fromIR(call); if (blockPassType.given()) { if (arity == -1) { adapter.invokedynamic("invoke:" + JavaNameMangler.mangleMethodName(id), sig(JVM.OBJECT, params(ThreadContext.class, JVM.OBJECT, JVM.OBJECT, JVM.OBJECT_ARRAY, Block.class)), NormalInvokeSite.BOOTSTRAP, blockPassType.literal(), file, line); } else { adapter.invokedynamic("invoke:" + JavaNameMangler.mangleMethodName(id), sig(JVM.OBJECT, params(ThreadContext.class, JVM.OBJECT, arity + 2, Block.class)), NormalInvokeSite.BOOTSTRAP, blockPassType.literal(), file, line); } } else { if (arity == -1) { adapter.invokedynamic("invoke:" + JavaNameMangler.mangleMethodName(id), sig(JVM.OBJECT, params(ThreadContext.class, JVM.OBJECT, JVM.OBJECT, JVM.OBJECT_ARRAY)), NormalInvokeSite.BOOTSTRAP, false, file, line); } else { adapter.invokedynamic("invoke:" + JavaNameMangler.mangleMethodName(id), sig(JVM.OBJECT, params(ThreadContext.class, JVM.OBJECT, JVM.OBJECT, JVM.OBJECT, arity)), NormalInvokeSite.BOOTSTRAP, false, file, line); } } }
@Override public void invokeSelf(String file, int line, String scopeFieldName, CallBase call, int arity) { String id = call.getId(); if (arity > MAX_ARGUMENTS) throw new NotCompilableException("call to `" + id + "' has more than " + MAX_ARGUMENTS + " arguments"); if (call.isPotentiallyRefined()) { super.invokeSelf(file, line, scopeFieldName, call, arity); return; } String action = call.getCallType() == CallType.FUNCTIONAL ? "callFunctional" : "callVariable"; BlockPassType blockPassType = BlockPassType.fromIR(call); if (blockPassType != BlockPassType.NONE) { if (arity == -1) { adapter.invokedynamic(action + ":" + JavaNameMangler.mangleMethodName(id), sig(JVM.OBJECT, params(ThreadContext.class, JVM.OBJECT, JVM.OBJECT, JVM.OBJECT_ARRAY, Block.class)), SelfInvokeSite.BOOTSTRAP, blockPassType.literal(), file, line); } else { adapter.invokedynamic(action + ":" + JavaNameMangler.mangleMethodName(id), sig(JVM.OBJECT, params(ThreadContext.class, JVM.OBJECT, arity + 2, Block.class)), SelfInvokeSite.BOOTSTRAP, blockPassType.literal(), file, line); } } else { if (arity == -1) { adapter.invokedynamic(action + ":" + JavaNameMangler.mangleMethodName(id), sig(JVM.OBJECT, params(ThreadContext.class, JVM.OBJECT, JVM.OBJECT, JVM.OBJECT_ARRAY)), SelfInvokeSite.BOOTSTRAP, false, file, line); } else { adapter.invokedynamic(action + ":" + JavaNameMangler.mangleMethodName(id), sig(JVM.OBJECT, params(ThreadContext.class, JVM.OBJECT, JVM.OBJECT, JVM.OBJECT, arity)), SelfInvokeSite.BOOTSTRAP, false, file, line); } } }
@Override public void invokeSelf(String file, int line, String scopeFieldName, CallBase call, int arity) { String id = call.getId(); if (arity > MAX_ARGUMENTS) throw new NotCompilableException("call to `" + id + "' has more than " + MAX_ARGUMENTS + " arguments"); if (call.isPotentiallyRefined()) { super.invokeSelf(file, line, scopeFieldName, call, arity); return; } String action = call.getCallType() == CallType.FUNCTIONAL ? "callFunctional" : "callVariable"; BlockPassType blockPassType = BlockPassType.fromIR(call); if (blockPassType != BlockPassType.NONE) { if (arity == -1) { adapter.invokedynamic(action + ":" + JavaNameMangler.mangleMethodName(id), sig(JVM.OBJECT, params(ThreadContext.class, JVM.OBJECT, JVM.OBJECT, JVM.OBJECT_ARRAY, Block.class)), SelfInvokeSite.BOOTSTRAP, blockPassType.literal(), file, line); } else { adapter.invokedynamic(action + ":" + JavaNameMangler.mangleMethodName(id), sig(JVM.OBJECT, params(ThreadContext.class, JVM.OBJECT, arity + 2, Block.class)), SelfInvokeSite.BOOTSTRAP, blockPassType.literal(), file, line); } } else { if (arity == -1) { adapter.invokedynamic(action + ":" + JavaNameMangler.mangleMethodName(id), sig(JVM.OBJECT, params(ThreadContext.class, JVM.OBJECT, JVM.OBJECT, JVM.OBJECT_ARRAY)), SelfInvokeSite.BOOTSTRAP, false, file, line); } else { adapter.invokedynamic(action + ":" + JavaNameMangler.mangleMethodName(id), sig(JVM.OBJECT, params(ThreadContext.class, JVM.OBJECT, JVM.OBJECT, JVM.OBJECT, arity)), SelfInvokeSite.BOOTSTRAP, false, file, line); } } }