#!/usr/bin/perl
-unlink "opcode.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";
select OC;
# Read data.
#define Perl_pp_i_postinc Perl_pp_postinc
#define Perl_pp_i_postdec Perl_pp_postdec
-typedef enum {
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!
+*/
+
+typedef enum opcode {
+END
+
for (@ops) {
- print "\t", &tab(3,"OP_\U$_,"), "/* ", $i++, " */\n";
+ print ON "\t", &tab(3,"OP_\U$_,"), "/* ", $i++, " */\n";
}
-print "\t", &tab(3,"OP_max"), "\n";
-print "} opcode;\n";
-print "\n#define MAXO ", scalar @ops, "\n\n";
+print ON "\t", &tab(3,"OP_max"), "\n";
+print ON "} opcode;\n";
+print ON "\n#define MAXO ", scalar @ops, "\n\n";
# Emit op names and descriptions.
END
close OC or die "Error closing opcode.h: $!";
+close ON or die "Error closing opnames.h: $!";
unlink "pp_proto.h";
unlink "pp.sym";
__END__
+# New ops always go at the very end
+
# Nothing.
null null operation ck_null 0
# Hashes.
-each each ck_fun t% H
+each each ck_fun % H
values values ck_fun t% H
keys keys ck_fun t% H
delete delete ck_delete % S
unpack unpack ck_fun @ S S
pack pack ck_fun mst@ S L
split split ck_split t@ S S S
-join join ck_fun msT@ S L
+join join ck_join msT@ S L
# List operators.
and logical and ck_null |
or logical or ck_null |
-xor logical xor ck_null fs| S S
+xor logical xor ck_null fs2 S S
cond_expr conditional expression ck_null d|
andassign logical and assignment ck_null s|
orassign logical or assignment ck_null s|
-method method lookup ck_null d1
+method method lookup ck_method d1
entersub subroutine entry ck_subr dmt1 L
leavesub subroutine exit ck_null 1
+leavesublv lvalue subroutine exit ck_null 1
caller caller ck_fun t% S?
warn warn ck_fun imst@ L
die die ck_fun dimst@ L
dump dump ck_null ds}
goto goto ck_null ds}
exit exit ck_fun ds% S?
+# continued below
#nswitch numeric switch ck_null d
#cswitch character switch ck_null d
# I/O.
-open open ck_fun ist@ F S?
+open open ck_fun ist@ F S? S?
close close ck_fun is% F?
pipe_op pipe ck_fun is@ F F
# For multi-threading
lock lock ck_rfun s% S
threadsv per-thread variable ck_null ds0
+
+# Control (contd.)
+setstate set statement info ck_null s;
+method_named method with known name ck_null d$