Chromatic <[EMAIL PROTECTED]> wrote:Hi all,
I'd like to register some subroutines defined in PASM (or better, PIR) as participating in multiple dispatch. This is very handy when writing Test::Builder::is(), for example, which can compare two strings, integers, numbers, or PMCs, or for calling NCI functions which can take various types and numbers of arguments that all do very similar things.
Dan suggested a new op with a scheme similar to:
register_mmd S1, S2, P
- MMD is misleading. MMD is our function dispatching scheme for binary-like vtables.
MMD's more generic than that. We've only got it implemented for binary vtables, but that doesn't mean it's only used for them.
I'd call it
register_multi Smulti, Sreal, Sproto register_multi Pmulti, Preal, Sproto
C<Sproto> is a "runops" prototype specifier like "III" for add_integers. An array is a bit to heavy for that IMHO.
Sproto would be really too restrictive. For subs we need to be checking the types of the PMC parameters. Encoding that in a string's just too much flattening and unflattening.
Besides, these things'll be executed exactly once, so we might as well make them convenient.
> There are other options for declaring the signature. There could be:
register_mmd S1, S2, I1, I2, I3, P
where I1 is the number of arguments in the I register,
Register counts don't say anything about argument order. I don't think that'll work.
Argument order's irrelevant for different register types, so it doesn't much matter. This could be an issue, but I don't think we'll see one here.
--
Dan
--------------------------------------it's like this------------------- Dan Sugalski even samurai [EMAIL PROTECTED] have teddy bears and even teddy bears get drunk