On Fri, Jun 10, 2011 at 7:04 PM, Charles Oliver Nutter
<head...@headius.com> wrote:
> Brainstorming ways this could be fixed in JSR-292, if it's not already
> impossible to do so.
>
> 1. A new MethodHandles API postProcess, that receives all incoming
> arguments, invokes the handle, and runs a post-processor on the
> arguments plus the result of the handle

Ok, John Rose pointed out on MLVM list that a finally that does not
return would be the same as foldArguments, by flipping the order:

int foo(Object arg1) {
  ... return some int
}

int postCall(int retVal, Object arg1) {
 post(arg1);
 return retVal;
}

MethodHandle result = MethodHandles.foldArguments(postCall, foo);

foo's return value then gets inserted into postCall's param list, and
you can either use it or not. Clever...I didn't think to reverse the
order of foldArguments.

But unfortunately:

> MethodHandles foo = <get foo() handle>
> MethodHandles postCall = <get postCall() handle>
> MethodHandles postException = <get postException() handle>
>
> MethodHandle result = MethodHandles.postProcess(foo, postCall)
> result = MethodHandles.catchException(result, Throwable.class, postException);
>
> This is *pretty close* to real finally logic; the flaw in this design
> is that exceptions from postCall will *also* end up in postException.

This problem still applies. If I instead use John's pattern and do:

MethodHandle result = MethodHandles.foldArguments(postCall, foo);
result = MethodHandles.catchException(result, Throwable.class, postException);

The postCall logic could raise an exception that postException is not
meant to handle. Am I wrong?

- Charlie

-- 
You received this message because you are subscribed to the Google Groups "JVM 
Languages" group.
To post to this group, send email to jvm-languages@googlegroups.com.
To unsubscribe from this group, send email to 
jvm-languages+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/jvm-languages?hl=en.

Reply via email to