jdk/src/share/classes/java/lang/invoke/MethodHandleImpl.java
changeset 10615 7e211ad476ca
parent 10082 761643c9bebd
child 11007 09d3dddac781
equal deleted inserted replaced
10311:4324f19b187b 10615:7e211ad476ca
   747         assert(AdapterMethodHandle.canCollectArguments(foldTargetType, test.type(), 0, true));
   747         assert(AdapterMethodHandle.canCollectArguments(foldTargetType, test.type(), 0, true));
   748         // working backwards, as usual:
   748         // working backwards, as usual:
   749         assert(target.type().equals(fallback.type()));
   749         assert(target.type().equals(fallback.type()));
   750         MethodHandle tailcall = MethodHandles.exactInvoker(target.type());
   750         MethodHandle tailcall = MethodHandles.exactInvoker(target.type());
   751         MethodHandle select = selectAlternative();
   751         MethodHandle select = selectAlternative();
   752         select = bindArgument(select, 2, fallback);
   752         select = bindArgument(select, 2, CountingMethodHandle.wrap(fallback));
   753         select = bindArgument(select, 1, target);
   753         select = bindArgument(select, 1, CountingMethodHandle.wrap(target));
   754         // select(z: boolean) => (z ? target : fallback)
   754         // select(z: boolean) => (z ? target : fallback)
   755         MethodHandle filter = filterArgument(tailcall, 0, select);
   755         MethodHandle filter = filterArgument(tailcall, 0, select);
   756         assert(filter.type().parameterType(0) == boolean.class);
   756         assert(filter.type().parameterType(0) == boolean.class);
   757         MethodHandle fold = foldArguments(filter, filter.type().dropParameterTypes(0, 1), 0, test);
   757         MethodHandle fold = foldArguments(filter, filter.type().dropParameterTypes(0, 1), 0, test);
   758         return fold;
   758         return fold;