A simple way to do what you want might be sketched out like this:

* The bootstrap method returns a CallSite + handle for your
multi-dispatch logic contained in another method.
* The multi-dispatch logic receives the actual arguments for that first call.
* Based on those arguments, you build a guarded chain of method
handles that calls the right target for the incoming types, and falls
back on the multi-dispatch lookup logic again if new types come in.

>From here, you can do various combinations of guards, multiple
targets, mechanisms for quickly calculating whether the incoming types
have already been negotiated, and so on.

You want to look at the bootstrap as your way to point future calls
toward your own specialized logic; the bootstrap does not necessarily
contain that logic.

There's an example implementation of multi-dispatch here:
http://code.google.com/p/jsr292-cookbook/source/browse/trunk/multi-dispatch/src/jsr292/cookbook/mdispatch/RT.java

- Charlie

On Sat, Aug 4, 2012 at 11:26 PM, Rob N <rob.nikan...@gmail.com> wrote:
> Hi,
>
> I'm trying to learn about invokedynamic and the supporting classes,
> and I don't yet see how they help implement the dynamically typed
> language I have in mind. From what I've read so far, when you emit an
> invokedynamic instruction, you specify a bootstrap method in your
> language's runtime, but that is only run once, and it must return a
> MethodHandle for the CallSite.  Lets say I wanted to emit something
> for a CLOS-like multiple dispatch method (foo x y), that will select
> an implementation method based on the classes of x and y.  Would I not
> have to return, from the bootstrap method, a handle to a method that
> did that dispatch?  So why not just emit an invokevirtual or
> invokestatic directly to that method?  What is the advantage of
> invokedynamic here?
>
> thanks,
> Rob
>
> --
> 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.
>

-- 
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