While we seem to be on the subject of hashing out macro semantics,
here's a question I've had awhile.

What do macros do about being passed variables?

Let's say I make a C<square> macro:

    macro square ($x) {
        { $x * $x }
    }

And then I have code.

    my $var = 10;
    print square $var;

Does that turn that into (at compile time):

    print($var * $var);

Or does it use the compile time value of $x, turning it into:

    print(undef * undef);

I would hope the former.  However, what about this compile-time
integral power macro[1]?

    macro power ($x, $p) {
        if $p > 0 {
            { $x * power($x, $p-1) }
        }
        else {
            { 1 }
        }
    }

That would hopefully turn:

    my $var = 10;
    print power $var, 4;

Into

    print($var * $var * $var * $var * 1);

But what about

    my $var = 10;
    my $ex = 4;
    print power $var, $ex;

Thanks.

Luke

[1] That one's kind of interesting actually.  If the macro is called
right upon parsing it, it will be called before it's done compiling
it.  Which is a problem.  Is there a way to get around this, because
recusive macros are useful (as demonstrated above).

Luke

Reply via email to