> Hey all,
>
> I'm trying to get functions working
> in python, and I'm not sure the best way
> to do this.
>
> What seems natural to me is to define
> subroutines in the middle of the code
> as I walk the parse tree:
>
> .sub __main__
> goto endsub
> .sub _f
> print ":(\n"
> ret
> .end
> endsub:
> $I0 = addr _f
> end
> .end
>
>
> But of course, this prints a sad face. :/
>
> I've read imcc/docs/parsing.pod, so I know
> why it does this... But what's the alternative?
>
> I can store all my subroutine definitions in
> a list or something and then dump them out
> after the "__main__" routine. Is that the
> right approach? It seems strange to me,
> but I'm new at this.
I think your approach may be fine. You can store them in a list and
dump them at the cost of a little extra memory (not a concern at this
point), but you can also put them inline, so long as you have
something like this at the beginning of the file:
.sub __START__
call __main__
.end
So it emits that code right away, because it's the first compilation
unit imcc sees.
> ---
>
> Incidentally, I spent all day working on pirate,
> and it now generates (and runs!) code for a bunch
> of python structures:
>
> - lists, strings, ints
> - assignment and multi-assignment ( x,y=1,2 )
> - while, for, if/elif/else, break, continue
> - math operations (+, -, *, /, %)
> - boolean logic (and, or, not)
> - comparison operators
Very Cool.
> It now runs amk's euclid.py perfectly now.
> Do we have a way to compare the speed vs python? :)
We just modify it to repeat 100,000 times or so, and compare that way.
Which I did. Parrot comes in about 3x slower than python on euclid.
>From looking at the imcc code, though, I think it could be much much
better.
One of my questions is, why do you make so many PerlNums when there
isn't a trace of a floating point number to be found...?
In any case, great work!
Luke
> Also, I wrote a pretty-printer for the lists in
> parrot, and you can call it (and presumably
> other parrot subs) directly from python code:
>
> if 1 > 2:
> _pyprint("one is greater than two...")
> print "neat,huh?"
>
> If I could get this subroutine stuff figured
> out, you could call functions written in
> python, too. :)
>
> http://sixthdev.versionhost.com/viewcvs.cgi/pirate/
>
> Sincerely,
>
> Michal J Wallace
> Sabren Enterprises, Inc.
> -------------------------------------
> contact: [EMAIL PROTECTED]
> hosting: http://www.cornerhost.com/
> my site: http://www.withoutane.com/
> --------------------------------------