I think you should try to implement lamda through .Sub's. Take a look at parrot/t/pmc/sub.t for some examples. However, you might not be able to rely on IMCC to handle arguments and results so much, since I don't think IMCC uses the new cps calling style yet. (but I'm not sure, so don't hold me to that :)
You also might want to take a look at how languages/perl6 generates them, at P6C::IMCC::Sub (actually in the file perl6/P6C/IMCC.pm), although it still uses an older calling style. -----Original Message----- Date: Fri 08/01/03 1:49 PM From: Michal Wallace <[EMAIL PROTECTED]> To: [EMAIL PROTECTED] CC: Subject: imcc's "call" vs first class functions Hey all, I've got lambda (single-expression anonymous subroutine) working in pirate now, but I wasn't sure how to get it to do the correct calling convention with IMCC's "call". For example, pirate turns this: print (lambda x: x+1)(0) # prints "1\n" into this: (the commented line is the important one) .sub __main__ setline 1 $I00002 = addr _sub00001 $I00001 = $I00002 .local object arg00001 arg00001 = new PerlInt arg00001 = 0 .arg arg00001 jsr $I00001 #### :( why can't I "call"?####### .result $P00001 .arg $P00001 call __py__print print "\n" end .end .sub _sub00001 # lambda from line 1 saveall .param object x .local object res00001 $P00001 = new PerlInt $P00001 = x $P00002 = new PerlInt $P00002 = new PerlInt # yes, this is a bug :) $P00002 = 1 $P00003 = new PerlInt $P00003 = $P00001 + $P00002 res00001 = $P00003 .return res00001 restoreall ret .end This code works, but it doesn't follow the convention. I was hoping to use call for this, but I couldn't get it to work, because I'm not directly calling _sub00001. Actually, in this case I probably could do that, since it's anonymous, but python has first-class functions, which means you can do this: a = b = c = lambda x: x+1 assert a(1) == b(1) == c(1) And then you can call a() or b() or whatever. Basically, python needs to look up the function's address at runtime and I couldn't figure out how to make that happen with call... So I just did jsr for now, hoping someone could tell me how to fix it. Is that even possible with "call"? If not, we can just hard code the instructions, but it seems like it really ought to be in imcc. :) Sincerely, Michal J Wallace Sabren Enterprises, Inc. ------------------------------------- contact: [EMAIL PROTECTED] hosting: http://www.cornerhost.com/ my site: http://www.withoutane.com/ -------------------------------------- -- This message was sent using 3wmail. Your fast free POP3 mail client at www.3wmail.com