This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
don't redefine macrosubs in .ph
authorLukas Mai <l.mai@web.de>
Sat, 17 Sep 2011 16:31:00 +0000 (18:31 +0200)
committerFather Chrysostomos <sprout@cpan.org>
Sat, 17 Sep 2011 18:48:40 +0000 (11:48 -0700)
commit5a677310673fcfab45f919bc0ea9b84374ff22f6
tree01285098d84207c4bf68f151dc7d6d6e65c6bb1a
parent2a014a4b51424c9ea9e46c78e7b3840cc28e4aaa
don't redefine macrosubs in .ph

h2ph generates code of the form

 unless(defined(&FOO)) {
     sub FOO () {42;}
 }

for a C macro like '#define FOO 42'.

The problem with that: 'sub' happens at compile time, 'unless' at runtime.
So the sub is unconditionally defined first, then the unless runs with
an empty body. This behavior was introduced in commit
3d271ce79d39df56470393916b3d33ff26db2c8b (the syntax errors there were
fixed in commit 4a8e146e38ec2045f1f817a7cb578e1b1f80f39f).

There are already two code paths there, one for indentation level > 0
(eval), the other for toplevel definitions (straight sub). This patch
unifies them to always use 'eval' / runtime definitions. This change
shortens the code and makes the conditions actually work.
It moves the check for '#define FOO FOO' further up because I don't
see why it only needs to be done if indentation == 0. I changed the
comparison to use a whitespace-agnostic regex because
'" \&$name" eq $new' looks too brittle (the redundant \ doesn't help).
utils/h2ph.PL