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.