> #define PARROT_str_local(d) \
> STRING * d = NULL; \
> frame frame_##d; \
> int dummy_##d = ( \
> (frame_##d.ptr = &d), \
> (frame_##d.next = stack_top), \
> (stack_top = &frame_##d), \
> 0);
This triggers the perl5 macro-iitis alarm.
Please don't do this :)
If you need to do things like that, then maybe we need to develop our
own function inliner -- there will still be debugging issues with the
optimizer, but less, if it looks like this:
STRING * concat (STRING* a, STRING* b, STRING* c) {
PARROT_str_local_2(d, e);
foo;
}
Expands into:
#line sourcefile.pmc 50
STRING * concat (STRING* a, STRING* b, STRING* c) {
#line macros.h 50
STRING * d = NULL;
frame frame_d;
frame_d.ptr = &d;
frame_d.next = stack_top;
stack_top = &frame_d;
#line sourcefile.pmc 52
BUT--
We've got enough complicated preprocessor issues right now - I'm
not sure we want to add another one. Defining perl5ish macros
will cause too many troubles down the road.
Or... since C99 supports C function inlining (iirc) - we could
just rely on a C99 compiler....
-R