X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=opcode.pl;h=942d8d2f6d862d2fadef97703cb7988796fa638e;hb=40b7a5f5e789eb31046d021a15e48b502ad8e1e9;hp=5b0933effed06e52a161d9a5f7ca89641638f56c;hpb=847a5fae45dac396d0f9e1bb61d5b4ff9d94cdcd;p=p5sagit%2Fp5-mst-13.2.git diff --git a/opcode.pl b/opcode.pl index 5b0933e..942d8d2 100755 --- a/opcode.pl +++ b/opcode.pl @@ -1,9 +1,7 @@ #!/usr/bin/perl -chmod 0666, "opcode.h", "opnames.h"; -unlink "opcode.h", "opnames.h"; -open(OC, ">opcode.h") || die "Can't create opcode.h: $!\n"; -open(ON, ">opnames.h") || die "Can't create opnames.h: $!\n"; +open(OC, ">opcode.h.new") || die "Can't create opcode.h.new: $!\n"; +open(ON, ">opnames.h.new") || die "Can't create opnames.h.new: $!\n"; select OC; # Read data. @@ -256,10 +254,14 @@ if (keys %OP_IS_FILETEST) { close OC or die "Error closing opcode.h: $!"; close ON or die "Error closing opnames.h: $!"; -unlink "pp_proto.h"; -unlink "pp.sym"; -open PP, '>pp_proto.h' or die "Error creating pp_proto.h: $!"; -open PPSYM, '>pp.sym' or die "Error creating pp.sym: $!"; +chmod 0600, 'opcode.h'; # required by dosish filesystems +chmod 0600, 'opnames.h'; # required by dosish filesystems + +rename 'opcode.h.new', 'opcode.h' or die "renaming opcode.h: $!\n"; +rename 'opnames.h.new', 'opnames.h' or die "renaming opnames.h: $!\n"; + +open PP, '>pp_proto.h.new' or die "Error creating pp_proto.h.new: $!"; +open PPSYM, '>pp.sym.new' or die "Error creating pp.sym.new: $!"; print PP <<"END"; /* !!!!!!! DO NOT EDIT THIS FILE !!!!!!! @@ -296,6 +298,12 @@ for (@ops) { close PP or die "Error closing pp_proto.h: $!"; close PPSYM or die "Error closing pp.sym: $!"; +chmod 0600, 'pp_proto.h'; # required by dosish filesystems +chmod 0600, 'pp.sym'; # required by dosish filesystems + +rename 'pp_proto.h.new', 'pp_proto.h' or die "rename pp_proto.h: $!\n"; +rename 'pp.sym.new', 'pp.sym' or die "rename pp.sym: $!\n"; + ########################################################################### sub tab { local($l, $t) = @_; @@ -364,6 +372,37 @@ __END__ # New ops always go at the very end +# A recapitulation of the format of this file: +# The file consists of five columns: the name of the op, an English +# description, the name of the "check" routine used to optimize this +# operation, some flags, and a description of the operands. + +# The flags consist of options followed by a mandatory op class signifier + +# The classes are: +# baseop - 0 unop - 1 binop - 2 +# logop - | listop - @ pmop - / +# padop/svop - $ padop - # (unused) loop - { +# baseop/unop - % loopexop - } filestatop - - +# pvop/svop - " + +# Other options are: +# needs stack mark - m +# needs constant folding - f +# produces a scalar - s +# produces an integer - i +# needs a target - t +# target can be in a pad - T +# has a corresponding integer version - I +# has side effects - d +# uses $_ if no argument given - u + +# Values for the operands are: +# scalar - S list - L array - A +# hash - H sub (CV) - C file - F +# socket - Fs filetest - F- reference - R +# "?" denotes an optional operand. + # Nothing. null null operation ck_null 0 @@ -405,7 +444,7 @@ bless bless ck_fun s@ S S? backtick quoted execution (``, qx) ck_open t% # glob defaults its first arg to $_ glob glob ck_glob t@ S? -readline ck_null t% +readline ck_null t% F? rcatline append I/O operator ck_null t% # Bindable operators. @@ -480,13 +519,13 @@ i_ne integer ne (!=) ck_null ifs2 S S ncmp numeric comparison (<=>) ck_null Iifst2 S S i_ncmp integer comparison (<=>) ck_null ifst2 S S -slt string lt ck_scmp ifs2 S S -sgt string gt ck_scmp ifs2 S S -sle string le ck_scmp ifs2 S S -sge string ge ck_scmp ifs2 S S +slt string lt ck_null ifs2 S S +sgt string gt ck_null ifs2 S S +sle string le ck_null ifs2 S S +sge string ge ck_null ifs2 S S seq string eq ck_null ifs2 S S sne string ne ck_null ifs2 S S -scmp string comparison (cmp) ck_scmp ifst2 S S +scmp string comparison (cmp) ck_null ifst2 S S bit_and bitwise and (&) ck_bitop fst2 S S bit_xor bitwise xor (^) ck_bitop fst2 S S @@ -524,15 +563,15 @@ vec vec ck_fun ist@ S S S index index ck_index isT@ S S S? rindex rindex ck_index isT@ S S S? -sprintf sprintf ck_fun_locale mfst@ S L +sprintf sprintf ck_fun mfst@ S L formline formline ck_fun ms@ S L ord ord ck_fun ifsTu% S? chr chr ck_fun fsTu% S? crypt crypt ck_fun fsT@ S S -ucfirst ucfirst ck_fun_locale fstu% S? -lcfirst lcfirst ck_fun_locale fstu% S? -uc uc ck_fun_locale fstu% S? -lc lc ck_fun_locale fstu% S? +ucfirst ucfirst ck_fun fstu% S? +lcfirst lcfirst ck_fun fstu% S? +uc uc ck_fun fstu% S? +lc lc ck_fun fstu% S? quotemeta quotemeta ck_fun fstu% S? # Arrays. @@ -635,7 +674,7 @@ close close ck_fun is% F? pipe_op pipe ck_fun is@ F F fileno fileno ck_fun ist% F -umask umask ck_fun ist% S? +umask umask ck_octmode ist% S? binmode binmode ck_fun s@ F S? tie tie ck_fun idms@ R S L @@ -728,13 +767,13 @@ chdir chdir ck_fun isT% S? chown chown ck_fun imsT@ L chroot chroot ck_fun isTu% S? unlink unlink ck_fun imsTu@ L -chmod chmod ck_fun imsT@ L +chmod chmod ck_octmode imsT@ L utime utime ck_fun imsT@ L rename rename ck_fun isT@ S S link link ck_fun isT@ S S symlink symlink ck_fun isT@ S S readlink readlink ck_fun stu% S? -mkdir mkdir ck_fun isT@ S S? +mkdir mkdir ck_octmode isT@ S S? rmdir rmdir ck_fun isTu% S? # Directory calls.