X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=opcode.pl;h=70516d0eee1222d0e0c8cece0e0ff4e0c73f7b3d;hb=2799c20625244ac22c03fd0109d9df2488876338;hp=61cd0e8ba3a21bada105e254f87c5d2cab19d5bf;hpb=1e2c6ed7b1d7c43be9a4422286be5333f4f3b7f8;p=p5sagit%2Fp5-mst-13.2.git diff --git a/opcode.pl b/opcode.pl index 61cd0e8..70516d0 100755 --- a/opcode.pl +++ b/opcode.pl @@ -1,4 +1,8 @@ #!/usr/bin/perl +BEGIN { + # Get function prototypes + require 'regen_lib.pl'; +} $opcode_new = 'opcode.h-new'; $opname_new = 'opnames.h-new'; @@ -34,7 +38,8 @@ print <<"END"; /* * opcode.h * - * Copyright (c) 1997-2002, Larry Wall + * Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, + * 2000, 2001, 2002, 2003, 2004, 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. @@ -55,7 +60,7 @@ print ON <<"END"; /* * opnames.h * - * Copyright (c) 1997-2002, Larry Wall + * Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 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. @@ -85,10 +90,10 @@ print <op_type == OP_CUSTOM ? custom_op_name(o) : \\ - PL_op_name[o->op_type]) -#define OP_DESC(o) (o->op_type == OP_CUSTOM ? custom_op_desc(o) : \\ - PL_op_desc[o->op_type]) +#define OP_NAME(o) ((o)->op_type == OP_CUSTOM ? custom_op_name(o) : \\ + PL_op_name[(o)->op_type]) +#define OP_DESC(o) ((o)->op_type == OP_CUSTOM ? custom_op_desc(o) : \\ + PL_op_desc[(o)->op_type]) #ifndef DOINIT EXT char *PL_op_name[]; @@ -278,15 +283,11 @@ if (keys %OP_IS_FILETEST) { close OC or die "Error closing opcode.h: $!"; close ON or die "Error closing opnames.h: $!"; -chmod 0600, 'opcode.h'; # required by dosish filesystems -chmod 0600, 'opnames.h'; # required by dosish filesystems - -# Some dosish systems can't rename over an existing file: -unlink "$_-old" for qw(opcode.h opnames.h); -rename $_, "$_-old" for qw(opcode.h opnames.h); - -rename $opcode_new, 'opcode.h' or die "renaming opcode.h: $!\n"; -rename $opname_new, 'opnames.h' or die "renaming opnames.h: $!\n"; +foreach ('opcode.h', 'opnames.h') { + safer_rename_silent $_, "$_-old"; +} +safer_rename $opcode_new, 'opcode.h'; +safer_rename $opname_new, 'opnames.h'; $pp_proto_new = 'pp_proto.h-new'; $pp_sym_new = 'pp.sym-new'; @@ -330,15 +331,17 @@ 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 - -# Some dosish systems can't rename over an existing file: -unlink "$_-old" for qw(pp_proto.h pp.sym); -rename $_, "$_-old" for qw(pp_proto.h pp.sym); +foreach ('pp_proto.h', 'pp.sym') { + safer_rename_silent $_, "$_-old"; +} +safer_rename $pp_proto_new, 'pp_proto.h'; +safer_rename $pp_sym_new, 'pp.sym'; -rename $pp_proto_new, 'pp_proto.h' or die "rename pp_proto.h: $!\n"; -rename $pp_sym_new, 'pp.sym' or die "rename pp.sym: $!\n"; +END { + foreach ('opcode.h', 'opnames.h', 'pp_proto.h', 'pp.sym') { + 1 while unlink "$_-old"; + } +} ########################################################################### sub tab { @@ -406,7 +409,7 @@ sub tab { __END__ -# New ops always go at the very end +# New ops always go at the end, just before 'custom' # A recapitulation of the format of this file: # The file consists of five columns: the name of the op, an English @@ -420,7 +423,7 @@ __END__ # logop - | listop - @ pmop - / # padop/svop - $ padop - # (unused) loop - { # baseop/unop - % loopexop - } filestatop - - -# pvop/svop - " +# pvop/svop - " cop - ; # Other options are: # needs stack mark - m @@ -490,9 +493,9 @@ regcreset regexp internal reset ck_fun s1 S regcomp regexp compilation ck_null s| S match pattern match (m//) ck_match d/ qr pattern quote (qr//) ck_match s/ -subst substitution (s///) ck_null dis/ S +subst substitution (s///) ck_match dis/ S substcont substitution iterator ck_null dis| -trans transliteration (tr///) ck_null is" S +trans transliteration (tr///) ck_match is" S # Lvalue operators. # sassign is special-cased for op class @@ -630,7 +633,7 @@ hslice hash slice ck_null m@ H L # Explosives and implosives. -unpack unpack ck_fun @ S S +unpack unpack ck_unpack @ S S? pack pack ck_fun mst@ S L split split ck_split t@ S S S join join or string ck_join mst@ S L @@ -644,8 +647,8 @@ anonhash anonymous hash ({}) ck_fun ms@ L splice splice ck_fun m@ A S? S? L push push ck_fun imsT@ A L -pop pop ck_shift s% A -shift shift ck_shift s% A +pop pop ck_shift s% A? +shift shift ck_shift s% A? unshift unshift ck_fun imsT@ A L sort sort ck_sort m@ C? L reverse reverse ck_fun mt@ L @@ -917,11 +920,16 @@ getlogin getlogin ck_null st0 syscall syscall ck_fun imst@ S L # For multi-threading -lock lock ck_rfun s% S +lock lock ck_rfun s% R threadsv per-thread value ck_null ds0 # Control (contd.) setstate set statement info ck_null s; method_named method with known name ck_null d$ +dor defined or (//) ck_null | +dorassign defined or assignment (//=) ck_null s| + +# Add new ops before this, the custom operator. + custom unknown custom operator ck_null 0