X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/afd1eb533c8ea286efcac6fd054ae7cebaf0dfe3..4ad16c232af72afff4d7d0d37f532c709df5d9f0:/opcode.pl diff --git a/opcode.pl b/opcode.pl index 942d8d2..70516d0 100755 --- a/opcode.pl +++ b/opcode.pl @@ -1,7 +1,13 @@ #!/usr/bin/perl +BEGIN { + # Get function prototypes + require 'regen_lib.pl'; +} -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"; +$opcode_new = 'opcode.h-new'; +$opname_new = 'opnames.h-new'; +open(OC, ">$opcode_new") || die "Can't create $opcode_new: $!\n"; +open(ON, ">$opname_new") || die "Can't create $opname_new: $!\n"; select OC; # Read data. @@ -29,10 +35,19 @@ while () { $i = 0; print <<"END"; -/* !!!!!!! DO NOT EDIT THIS FILE !!!!!!! - This file is built by opcode.pl from its data. Any changes made here - will be lost! -*/ +/* + * opcode.h + * + * 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. + * + * !!!!!!! DO NOT EDIT THIS FILE !!!!!!! + * This file is built by opcode.pl from its data. Any changes made here + * will be lost! + */ #define Perl_pp_i_preinc Perl_pp_preinc #define Perl_pp_i_predec Perl_pp_predec @@ -42,10 +57,19 @@ print <<"END"; END print ON <<"END"; -/* !!!!!!! DO NOT EDIT THIS FILE !!!!!!! - This file is built by opcode.pl from its data. Any changes made here - will be lost! -*/ +/* + * opnames.h + * + * 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. + * + * + * !!!!!!! DO NOT EDIT THIS FILE !!!!!!! + * This file is built by opcode.pl from its data. Any changes made here + * will be lost! + */ typedef enum opcode { END @@ -65,6 +89,12 @@ 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]) + #ifndef DOINIT EXT char *PL_op_name[]; #else @@ -130,7 +160,7 @@ EXT OP * (CPERLscope(*PL_ppaddr)[])(pTHX) = { END for (@ops) { - print "\tMEMBER_TO_FPTR(Perl_pp_$_),\n"; + print "\tMEMBER_TO_FPTR(Perl_pp_$_),\n" unless $_ eq "custom"; } print <pp_proto.h.new' or die "Error creating pp_proto.h.new: $!"; -open PPSYM, '>pp.sym.new' or die "Error creating pp.sym.new: $!"; +open PP, ">$pp_proto_new" or die "Error creating $pp_proto_new: $!"; +open PPSYM, ">$pp_sym_new" or die "Error creating $pp_sym_new: $!"; print PP <<"END"; /* !!!!!!! DO NOT EDIT THIS FILE !!!!!!! @@ -291,6 +323,7 @@ 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"; } @@ -298,11 +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 +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.h.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 { @@ -370,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 @@ -384,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 @@ -445,7 +484,7 @@ backtick quoted execution (``, qx) ck_open t% # glob defaults its first arg to $_ glob glob ck_glob t@ S? readline ck_null t% F? -rcatline append I/O operator ck_null t% +rcatline append I/O operator ck_null t$ # Bindable operators. @@ -454,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 @@ -594,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 @@ -608,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 @@ -641,7 +680,7 @@ leavesub subroutine exit ck_null 1 leavesublv lvalue subroutine return ck_null 1 caller caller ck_fun t% S? warn warn ck_fun imst@ L -die die ck_fun dimst@ L +die die ck_die dimst@ L reset symbol reset ck_fun is% S? lineseq line sequence ck_null @ @@ -674,7 +713,7 @@ close close ck_fun is% F? pipe_op pipe ck_fun is@ F F fileno fileno ck_fun ist% F -umask umask ck_octmode ist% S? +umask umask ck_fun ist% S? binmode binmode ck_fun s@ F S? tie tie ck_fun idms@ R S L @@ -767,13 +806,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_octmode imsT@ L +chmod chmod ck_fun 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_octmode isT@ S S? +mkdir mkdir ck_fun isT@ S S? rmdir rmdir ck_fun isTu% S? # Directory calls. @@ -881,9 +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