X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=overload.pl;h=69808c6221314b32cc9bc2bf1104489fd122a2c9;hb=6ada912ce2ec33f8cd53bfc96056ec8617e4a08e;hp=9def29f429a75c9928965a525974388dc7628191;hpb=8261f8eb698db59828f3e3dd7a1ee82976ab259e;p=p5sagit%2Fp5-mst-13.2.git diff --git a/overload.pl b/overload.pl index 9def29f..69808c6 100644 --- a/overload.pl +++ b/overload.pl @@ -22,10 +22,8 @@ while () { } safer_unlink ('overload.h', 'overload.c'); -die "overload.h: $!" unless open(C, ">overload.c"); -binmode C; -die "overload.h: $!" unless open(H, ">overload.h"); -binmode H; +my $c = safer_open("overload.c"); +my $h = safer_open("overload.h"); sub print_header { my $file = shift; @@ -46,10 +44,10 @@ sub print_header { EOF } -select C; +select $c; print_header('overload.c'); -select H; +select $h; print_header('overload.h'); print <<'EOF'; @@ -67,27 +65,40 @@ print <<'EOF'; EOF -print C <<'EOF'; +print $c <<'EOF'; #define AMG_id2name(id) (PL_AMG_names[id]+1) +#define AMG_id2namelen(id) (PL_AMG_namelens[id]-1) -char * const PL_AMG_names[NofAMmeth] = { +static const U8 PL_AMG_namelens[NofAMmeth] = { +EOF + +my $last = pop @names; + +print $c " $_,\n" foreach map { length $_ } @names; + +my $lastlen = length $last; +print $c <<"EOT"; + $lastlen +}; + +static const char * const PL_AMG_names[NofAMmeth] = { /* Names kept in the symbol table. fallback => "()", the rest has "(" prepended. The only other place in perl which knows about this convention is AMG_id2name (used for debugging output and 'nomethod' only), the only other place which has it hardwired is overload.pm. */ -EOF +EOT -my $last = pop @names; -print C " \"$_\",\n" foreach map { s/(["\\"])/\\$1/g; $_ } @names; +print $c " \"$_\",\n" foreach map { s/(["\\"])/\\$1/g; $_ } @names; -print C <<"EOT"; +print $c <<"EOT"; "$last" }; EOT -close H or die $!; +safer_close($h); +safer_close($c); __DATA__ # Fallback should be the first