On Sep-22, Leopold Toetsch wrote:
> Steve Fink <[EMAIL PROTECTED]> wrote:
> >> Then we need code from HLL to see, how efficient (or not) parameter
> >> passing does look like.
> 
> > I've been trying to implement A6 for languages/perl6. My first cut was
> > to have all calls, prototyped or not, take three parameters:
> 
> suboptimal for sure
> 
> >> Then we can think of some higher level ops to {de,}construct argument
> >> arrays.
> 
> > Well, I'd also like to know what the IMCC syntax will look like for
> > dynamically-sized lists of arguments and parameters,
> 
> Just use a PerlArray:
> 
>   .sym PerlArray params
>   params = new PerlArray
>   push params, arg1
>   push params, arg2
>   ...
>   .arg params
>   .pcc_call ...

Umm... didn't you just call this approach suboptimal?

Just to be sure we're talking about the same thing:

  sub f ($a, $b, $c) { ... }
  $x = phase_of_moon('waxing') ? \&f : \&CORE::print;
  $x->(3, [EMAIL PROTECTED], [EMAIL PROTECTED]);

i.e., I'm calling f() without a prototype.

A builtin that took three parameters would expect them in P5, P6, and
P7. But how do I do that in IMCC for $x->(3, [EMAIL PROTECTED], [EMAIL PROTECTED])? I 
am
suggesting

  .arg 3
  .args _AV_x
  .args _AV_y

with some deep magic going on under the hood to get them into the
correct registers, most probably by means of a new, specialized op
because the current way of doing it is ugly and slow.

You seem to be suggesting something like:

  .sym PerlArray params
  params = new PerlArray
  push params, 3
  append params, _AV_x
  append params, _AV_y
  .arg params

...which doesn't fulfill the requirement of working with a builtin
that expects its three arguments in P5, P6, and P7.

Reply via email to