How to filter results of a virtual method?

Rémi Forax forax at univ-mlv.fr
Fri Jan 28 06:43:38 PST 2011


  Le 28/01/2011 15:31, Jim Laskey a écrit :
> That appears to be true.

Not exactly (with the latest spec):

   exactInvoker(target.type()).bindTo(target)<==>  target

if target.isVarargsCollector() == false.

Rémi

> On 2011-01-27, at 11:09 PM, Kirill Shirokov wrote:
>
>> By the way, why exactInvoker() is needed? Isn't the following true?
>>
>> exactInvoker(target.type()).bindTo(target) == target
>>
>> Kirill
>>
>> On 01/27/2011 12:01 AM, Jim Laskey wrote:
>>> I think it's a simple issue.  Drop should use 1 instead of 0.
>>>
>>>
>>>      public static
>>>      MethodHandle filterReturnValue(MethodHandle target, MethodHandle filter) {
>>>          MethodType targetType = target.type();
>>>          MethodType filterType = filter.type();
>>>          if (filterType.parameterCount() != 1
>>>              || filterType.parameterType(0) != targetType.returnType())
>>>              System.err.println("target and filter types do not match");
>>>          // FIXME: Too many nodes here.
>>>          MethodHandle returner = dropArguments(filter, 0, targetType.parameterList());<<<    0 should be 1
>>>          return foldArguments(returner, exactInvoker(target.type()).bindTo(target));
>>>      }
>>>
>>> Cheers,
>>>
>>> -- Jim
>> _______________________________________________
>> mlvm-dev mailing list
>> mlvm-dev at openjdk.java.net
>> http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev
> _______________________________________________
> mlvm-dev mailing list
> mlvm-dev at openjdk.java.net
> http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev



More information about the mlvm-dev mailing list