summaryrefslogtreecommitdiff
path: root/opcode.pl
diff options
context:
space:
mode:
authorNicholas Clark <nick@ccl4.org>2008-03-15 18:37:34 +0000
committerNicholas Clark <nick@ccl4.org>2008-03-15 18:37:34 +0000
commit424a4936e3f61f4e8db394f496a116e698cede85 (patch)
treee19475f64cd932d850b6975251ee284844aaf0d8 /opcode.pl
parentb6b9a09997c80269af874aff41936e014ed728f7 (diff)
downloadperl-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-xopcode.pl80
1 files changed, 38 insertions, 42 deletions
diff --git a/opcode.pl b/opcode.pl
index 69ef23c4b8..08c9e8327f 100755
--- a/opcode.pl
+++ b/opcode.pl
@@ -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') {