$i = 0;
print <<"END";
-#define pp_i_preinc pp_preinc
-#define pp_i_predec pp_predec
-#define pp_i_postinc pp_postinc
-#define pp_i_postdec pp_postdec
+#define Perl_pp_i_preinc Perl_pp_preinc
+#define Perl_pp_i_predec Perl_pp_predec
+#define Perl_pp_i_postinc Perl_pp_postinc
+#define Perl_pp_i_postdec Perl_pp_postdec
typedef enum {
END
print <<END;
#ifndef DOINIT
-EXT char *op_name[];
+EXT char *PL_op_name[];
#else
-EXT char *op_name[] = {
+EXT char *PL_op_name[] = {
END
for (@ops) {
print <<END;
#ifndef DOINIT
-EXT char *op_desc[];
+EXT char *PL_op_desc[];
#else
-EXT char *op_desc[] = {
+EXT char *PL_op_desc[] = {
END
for (@ops) {
#ifndef PERL_OBJECT
START_EXTERN_C
-END
+#undef PERL_CKDEF
+#undef PERL_PPDEF
+#define PERL_CKDEF(s) OP *s (pTHX_ OP *o);
+#define PERL_PPDEF(s) OP *s (pTHX_ ARGSproto);
-# Emit function declarations.
+#include "pp_proto.h"
-for (sort keys %ckname) {
- print "OP *\t", &tab(3,$_),"_((OP* o));\n";
-}
+END
-print "\n";
+# Emit function declarations.
-for (@ops) {
- print "OP *\t", &tab(3, "pp_$_"), "_((ARGSproto));\n";
-}
+#for (sort keys %ckname) {
+# print "OP *\t", &tab(3,$_),"(OP* o);\n";
+#}
+#
+#print "\n";
+#
+#for (@ops) {
+# print "OP *\t", &tab(3, "pp_$_"), "(ARGSproto);\n";
+#}
# Emit ppcode switch array.
#endif /* PERL_OBJECT */
#ifndef DOINIT
-EXT OP * (CPERLscope(*ppaddr)[])(ARGSproto);
+EXT OP * (CPERLscope(*PL_ppaddr)[])(ARGSproto);
#else
-#ifndef PERL_OBJECT
-EXT OP * (CPERLscope(*ppaddr)[])(ARGSproto) = {
+EXT OP * (CPERLscope(*PL_ppaddr)[])(ARGSproto) = {
END
for (@ops) {
- print "\tpp_$_,\n";
+ print "\tPerl_pp_$_,\n";
}
print <<END;
};
-#endif /* PERL_OBJECT */
#endif
END
print <<END;
#ifndef DOINIT
-EXT OP * (CPERLscope(*check)[]) _((OP *op));
+EXT OP * (CPERLscope(*PL_check)[]) (OP *op);
#else
-#ifndef PERL_OBJECT
-EXT OP * (CPERLscope(*check)[]) _((OP *op)) = {
+EXT OP * (CPERLscope(*PL_check)[]) (OP *op) = {
END
for (@ops) {
- print "\t", &tab(3, "$check{$_},"), "/* $_ */\n";
+ print "\t", &tab(3, "Perl_$check{$_},"), "/* $_ */\n";
}
print <<END;
};
-#endif /* PERL_OBJECT */
#endif
END
print <<END;
#ifndef DOINIT
-EXT U32 opargs[];
+EXT U32 PL_opargs[];
#else
-EXT U32 opargs[] = {
+EXT U32 PL_opargs[] = {
END
%argnum = (
'/', 6, # pmop
'$', 7, # svop
'*', 8, # gvop
- '"', 9, # pvop
+ '"', 9, # pvop_or_svop
'{', 10, # loop
';', 11, # cop
'%', 12, # baseop_or_unop
$argsum |= 64 if $flags =~ /d/; # danger, unknown side effects
$argsum |= 128 if $flags =~ /u/; # defaults to $_
- $flags =~ /([^a-zA-Z])/ or die qq[Opcode "$_" has no class indicator];
+ $flags =~ /([\W\d_])/ or die qq[Opcode "$_" has no class indicator];
$argsum |= $opclass{$1} << 8;
$mul = 4096; # 2 ^ OASHIFT
for $arg (split(' ',$args{$_})) {
close OC or die "Error closing opcode.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: $!";
+
+for (sort keys %ckname) {
+ print PP "PERL_CKDEF(Perl_$_)\n";
+ print PPSYM "Perl_$_\n";
+#OP *\t", &tab(3,$_),"(OP* o);\n";
+}
+
+print PP "\n\n";
+
for (@ops) {
- print PP "PPDEF(pp_$_)\n";
+ next if /^i_(pre|post)(inc|dec)$/;
+ print PP "PERL_PPDEF(Perl_pp_$_)\n";
+ print PPSYM "Perl_pp_$_\n";
}
close PP or die "Error closing pp_proto.h: $!";
+close PPSYM or die "Error closing pp.sym: $!";
###########################################################################
sub tab {
padhv private hash ck_null d0
padany private something ck_null d0
-pushre push regexp ck_null /
+pushre push regexp ck_null d/
# References and stuff.
# Bindable operators.
regcmaybe regexp comp once ck_fun s1 S
+regcreset regexp reset interpolation flag ck_fun s1 S
regcomp regexp compilation ck_null s| S
match pattern match ck_match d/
+qr pattern quote ck_match s/
subst substitution ck_null dis/ S
substcont substitution cont ck_null dis|
trans character translation ck_null is" S
schop scalar chop ck_null stu% S?
chomp safe chop ck_spair mts% L
schomp scalar safe chop ck_null stu% S?
-defined defined operator ck_rfun isu% S?
+defined defined operator ck_defined isu% S?
undef undef operator ck_lfun s% S?
study study ck_fun su% S?
pos match position ck_lfun stu% S?
splice splice ck_fun m@ A S? S? L
push push ck_fun imst@ A L
-pop pop ck_shift si% 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
lineseq line sequence ck_null @
nextstate next statement ck_null s;
dbstate debug next statement ck_null s;
-unstack unstack ck_null s0
+unstack iteration finalizer ck_null s0
enter block entry ck_null 0
leave block exit ck_null @
scope block ck_null @
sysopen sysopen ck_fun s@ F S S S?
sysseek sysseek ck_fun s@ F S S
sysread sysread ck_fun imst@ F R S S?
-syswrite syswrite ck_fun imst@ F S S S?
+syswrite syswrite ck_fun imst@ F S S? S?
send send ck_fun imst@ F S S S?
recv recv ck_fun imst@ F R S S