Piers Cawley <[EMAIL PROTECTED]> wrote:
> Is there any syntactic sugar in IMCC for making a tail call?

No.

> Right now, AFAICT, the trick is to do:

>    .pcc_begin
>    .arg Foo
>    .arg bar
>    .pcc_call sub, P1 # Or whatever the syntax is to get
>                      # the current continuation
>    .pcc_end

> But, looking at the PASM generated by pcc_4.imc (which is where I
> picked this up from) that doesn't seem to actually have any benefit
> because the resulting code still does a 'savetop' and an 'updatecc',
> both of which are utterly unnecessary for a tail call.

Yep. The C<updatecc> is there to get any context changes between
construction of P1 and the call into the context: e.g.

  newcont P1, .Continuation, foo
  ...
  warningson 1
  .pcc_call sub, P1

C<savetop> is from the normal calling sequence.

> ... As Dan's pointed
> out on IRC, having IMCC detect tail calls and automatically optimize
> them is a no no too,

Why?

> ... but it'd be very handy if there were some sugar to
> allow me to specify that it's a tail call (or a continuation
> invokation). How plausible is:

>    foo(...), nosave

What about these low-leval directives:

   .tail_call sub             # .pcc_call
   .tail_meth_call sub        # .meth_call

and:

    foo() tail_call
    obj."meth"() tail_call

leo

Reply via email to