diff options
author | Nicholas Clark <nick@ccl4.org> | 2008-03-15 18:37:34 +0000 |
---|---|---|
committer | Nicholas Clark <nick@ccl4.org> | 2008-03-15 18:37:34 +0000 |
commit | 424a4936e3f61f4e8db394f496a116e698cede85 (patch) | |
tree | e19475f64cd932d850b6975251ee284844aaf0d8 /opcode.pl | |
parent | b6b9a09997c80269af874aff41936e014ed728f7 (diff) | |
download | perl-424a4936e3f61f4e8db394f496a116e698cede85.tar.gz |
Rename safer_rename() to rename_if_different(), to accurately describe
what it does. Use File::Compare rather than Digest::MD5, as the files
are small enough to simply read in. (File::Compare dates from 5.004)
Remove safer_rename_always(), which isn't used.
DRY by replacing the cargo-culted "open or die" with a new function
safer_open(), which uses Gensym (5.002) to create an anonymous file
handle, and opens and binmodes the file, or dies.
This necessitates replacing bareword file handles with lexicals in all
the callers.
Correct the names of files in close or die constructions.
p4raw-id: //depot/perl@33538
Diffstat (limited to 'opcode.pl')
-rwxr-xr-x | opcode.pl | 80 |
1 files changed, 38 insertions, 42 deletions
@@ -8,11 +8,9 @@ BEGIN { my $opcode_new = 'opcode.h-new'; my $opname_new = 'opnames.h-new'; -open(OC, ">$opcode_new") || die "Can't create $opcode_new: $!\n"; -binmode OC; -open(ON, ">$opname_new") || die "Can't create $opname_new: $!\n"; -binmode ON; -select OC; +my $oc = safer_open($opcode_new); +my $on = safer_open($opname_new); +select $oc; # Read data. @@ -128,7 +126,7 @@ PERL_PPDEF(Perl_unimplemented_op) END -print ON <<"END"; +print $on <<"END"; /* -*- buffer-read-only: t -*- * * opnames.h @@ -150,14 +148,14 @@ END my $i = 0; for (@ops) { - # print ON "\t", &tab(3,"OP_\U$_,"), "/* ", $i++, " */\n"; - print ON "\t", &tab(3,"OP_\U$_"), " = ", $i++, ",\n"; + # print $on "\t", &tab(3,"OP_\U$_,"), "/* ", $i++, " */\n"; + print $on "\t", &tab(3,"OP_\U$_"), " = ", $i++, ",\n"; } -print ON "\t", &tab(3,"OP_max"), "\n"; -print ON "} opcode;\n"; -print ON "\n#define MAXO ", scalar @ops, "\n"; -print ON "#define OP_phoney_INPUT_ONLY -1\n"; -print ON "#define OP_phoney_OUTPUT_ONLY -2\n\n"; +print $on "\t", &tab(3,"OP_max"), "\n"; +print $on "} opcode;\n"; +print $on "\n#define MAXO ", scalar @ops, "\n"; +print $on "#define OP_phoney_INPUT_ONLY -1\n"; +print $on "#define OP_phoney_OUTPUT_ONLY -2\n\n"; # Emit op names and descriptions. @@ -395,7 +393,7 @@ END # Emit OP_IS_* macros -print ON <<EO_OP_IS_COMMENT; +print $on <<EO_OP_IS_COMMENT; /* the OP_IS_(SOCKET|FILETEST) macros are optimized to a simple range check because all the member OPs are contiguous in opcode.pl @@ -419,42 +417,40 @@ sub gen_op_is_macro { my $last = pop @rest; # @rest slurped, get its last die "Invalid range of ops: $first .. $last\n" unless $last; - print ON "#define $macname(op) \\\n\t("; + print $on "#define $macname(op) \\\n\t("; # verify that op-ct matches 1st..last range (and fencepost) # (we know there are no dups) if ( $op_is->{$last} - $op_is->{$first} == scalar @rest + 1) { # contiguous ops -> optimized version - print ON "(op) >= OP_" . uc($first) . " && (op) <= OP_" . uc($last); - print ON ")\n\n"; + print $on "(op) >= OP_" . uc($first) . " && (op) <= OP_" . uc($last); + print $on ")\n\n"; } else { - print ON join(" || \\\n\t ", + print $on join(" || \\\n\t ", map { "(op) == OP_" . uc() } sort keys %$op_is); - print ON ")\n\n"; + print $on ")\n\n"; } } } -print OC "/* ex: set ro: */\n"; -print ON "/* ex: set ro: */\n"; +print $oc "/* ex: set ro: */\n"; +print $on "/* ex: set ro: */\n"; -close OC or die "Error closing opcode.h: $!\n"; -close ON or die "Error closing opnames.h: $!\n"; +close $oc or die "Error closing $opcode_new: $!\n"; +close $on or die "Error closing $opname_new: $!\n"; -safer_rename $opcode_new, 'opcode.h'; -safer_rename $opname_new, 'opnames.h'; +rename_if_different $opcode_new, 'opcode.h'; +rename_if_different $opname_new, 'opnames.h'; my $pp_proto_new = 'pp_proto.h-new'; my $pp_sym_new = 'pp.sym-new'; -open PP, ">$pp_proto_new" or die "Error creating $pp_proto_new: $!\n"; -binmode PP; -open PPSYM, ">$pp_sym_new" or die "Error creating $pp_sym_new: $!\n"; -binmode PPSYM; +my $pp = safer_open($pp_proto_new); +my $ppsym = safer_open($pp_sym_new); -print PP <<"END"; +print $pp <<"END"; /* -*- buffer-read-only: t -*- !!!!!!! DO NOT EDIT THIS FILE !!!!!!! This file is built by opcode.pl from its data. Any changes made here @@ -463,7 +459,7 @@ print PP <<"END"; END -print PPSYM <<"END"; +print $ppsym <<"END"; # -*- buffer-read-only: t -*- # # !!!!!!! DO NOT EDIT THIS FILE !!!!!!! @@ -475,27 +471,27 @@ END for (sort keys %ckname) { - print PP "PERL_CKDEF(Perl_$_)\n"; - print PPSYM "Perl_$_\n"; + print $pp "PERL_CKDEF(Perl_$_)\n"; + print $ppsym "Perl_$_\n"; #OP *\t", &tab(3,$_),"(OP* o);\n"; } -print PP "\n\n"; +print $pp "\n\n"; for (@ops) { next if /^i_(pre|post)(inc|dec)$/; next if /^custom$/; - print PP "PERL_PPDEF(Perl_pp_$_)\n"; - print PPSYM "Perl_pp_$_\n"; + print $pp "PERL_PPDEF(Perl_pp_$_)\n"; + print $ppsym "Perl_pp_$_\n"; } -print PP "\n/* ex: set ro: */\n"; -print PPSYM "\n# ex: set ro:\n"; +print $pp "\n/* ex: set ro: */\n"; +print $ppsym "\n# ex: set ro:\n"; -close PP or die "Error closing pp_proto.h: $!\n"; -close PPSYM or die "Error closing pp.sym: $!\n"; +close $pp or die "Error closing pp_proto.h-new: $!\n"; +close $ppsym or die "Error closing pp.sym-new: $!\n"; -safer_rename $pp_proto_new, 'pp_proto.h'; -safer_rename $pp_sym_new, 'pp.sym'; +rename_if_different $pp_proto_new, 'pp_proto.h'; +rename_if_different $pp_sym_new, 'pp.sym'; END { foreach ('opcode.h', 'opnames.h', 'pp_proto.h', 'pp.sym') { |