push @names, $name;
}
-safer_unlink ('lib/overload/numbers.pm');
-my $c = safer_open("overload.c-new");
-my $h = safer_open("overload.h-new");
-mkdir("lib/overload", 0777) unless -d 'lib/overload';
-my $p = safer_open('lib/overload/numbers.pm');
-
+my ($c, $h) = map {
+ open_new($_, '>',
+ { by => 'regen/overload.pl', file => $_, style => '*',
+ copyright => [1997, 1998, 2000, 2001, 2005 .. 2007, 2011] });
+} 'overload.c', 'overload.h';
-select $p;
+mkdir("lib/overload", 0777) unless -d 'lib/overload';
+my $p = open_new('lib/overload/numbers.pm', '>',
+ { by => 'regen/overload.pl',
+ file => 'lib/overload/numbers.pm', copyright => [2008] });
{
local $" = "\n ";
-print <<"EOF";
-# -*- buffer-read-only: t -*-
-#
-# lib/overload/numbers.pm
-#
-# Copyright (C) 2008 by Larry Wall and others
-#
-# You may distribute under the terms of either the GNU General Public
-# License or the Artistic License, as specified in the README file.
-#
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is built by overload.pl
-#
-
+print $p <<"EOF";
package overload::numbers;
our \@names = qw#
{ my \$i = 0; our %names = map { \$_ => \$i++ } \@names }
{ my \$i = 0; our %enums = map { \$_ => \$i++ } \@enums }
-
EOF
}
-
-sub print_header {
- my $file = shift;
- print <<"EOF";
-/* -*- buffer-read-only: t -*-
- *
- * $file
- *
- * Copyright (C) 1997, 1998, 2000, 2001, 2005, 2006, 2007 by Larry Wall
- * and others
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- *
- * !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
- * This file is built by overload.pl
- */
-EOF
+print $h "enum {\n";
+
+for (0..$#enums) {
+ my $op = $names[$_];
+ $op = 'fallback' if $op eq '()';
+ $op =~ s/^\(//;
+ die if $op =~ m{\*/};
+ my $l = 3 - int((length($enums[$_]) + 9) / 8);
+ $l = 1 if $l < 1;
+ printf $h " %s_amg,%s/* 0x%02x %-8s */\n", $enums[$_],
+ ("\t" x $l), $_, $op;
}
-select $c;
-print_header('overload.c');
-
-select $h;
-print_header('overload.h');
-print <<'EOF';
-
-enum {
-EOF
-
-print map " ${_}_amg,\n", @enums;
-
-print <<'EOF';
+print $h <<'EOF';
max_amg_code
/* Do not leave a trailing comma here. C9X allows it, C89 doesn't. */
};
#define NofAMmeth max_amg_code
-
EOF
print $c <<'EOF';
-
#define AMG_id2name(id) (PL_AMG_names[id]+1)
#define AMG_id2namelen(id) (PL_AMG_namelens[id]-1)
overload.pm. */
EOT
-print $c map { s/(["\\"])/\\$1/g; " \"$_\",\n" } @names;
+for (0..$#names) {
+ my $n = $names[$_];
+ $n =~ s/(["\\])/\\$1/g;
+ my $l = 3 - int((length($n) + 7) / 8);
+ $l = 1 if $l < 1;
+ printf $c " \"%s\",%s/* %-10s */\n", $n, ("\t" x $l), $enums[$_];
+}
print $c <<"EOT";
"$last"
};
EOT
-safer_close($h);
-safer_close($c);
-safer_close($p);
-rename_if_different("overload.c-new", "overload.c");
-rename_if_different("overload.h-new","overload.h");
-
+foreach ($h, $c, $p) {
+ read_only_bottom_close_and_rename($_);
+}
__DATA__
# Fallback should be the first
fallback ()
smart (~~
ftest (-X
regexp (qr
-# Note: Perl_Gv_AMupdate() assumes that DESTROY is the last entry
-DESTROY DESTROY