X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=opcode.pl;h=0243847f4cb487a8a850b04829aed28b528dfaf9;hb=f2a260d65825b8794898c1b0c7b02230f7d5398e;hp=1ef36f2fad9d5ad8ec074c1d6e3156bea55f7d1f;hpb=db173bac9b6de7d701a38c2f8b62f2fce229ec77;p=p5sagit%2Fp5-mst-13.2.git diff --git a/opcode.pl b/opcode.pl index 1ef36f2..0243847 100755 --- a/opcode.pl +++ b/opcode.pl @@ -47,9 +47,9 @@ print "\n#define MAXO ", scalar @ops, "\n\n"; print < 0x%x, argsum 0x%x", - $opclass{$1}, $argsum; # debug + $flags =~ /([\W\d_])/ or die qq[Opcode "$_" has no class indicator]; $argsum |= $opclass{$1} << 8; $mul = 4096; # 2 ^ OASHIFT for $arg (split(' ',$args{$_})) { @@ -190,7 +201,6 @@ for (@ops) { $argsum += $argnum * $mul; $mul <<= 4; } - printf STDERR ", argsum now 0x%x\n", $argsum; # debug $argsum = sprintf("0x%08x", $argsum); print "\t", &tab(3, "$argsum,"), "/* $_ */\n"; } @@ -200,6 +210,29 @@ print <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($_)\n"; +#OP *\t", &tab(3,$_),"_((OP* o));\n"; +} + +print PP "\n\n"; + +for (@ops) { + next if /^i_(pre|post)(inc|dec)$/; + print PP "PERL_PPDEF(pp_$_)\n"; + print PPSYM "pp_$_\n"; +} + +close PP or die "Error closing pp_proto.h: $!"; +close PPSYM or die "Error closing pp.sym: $!"; + ########################################################################### sub tab { local($l, $t) = @_; @@ -230,7 +263,7 @@ padav private array ck_null d0 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. @@ -240,8 +273,8 @@ av2arylen array length ck_null is1 rv2cv subroutine deref ck_rvconst d1 anoncode anonymous subroutine ck_anoncode $ prototype subroutine prototype ck_null s% S -refgen reference constructor ck_spair m0 L -srefgen scalar ref constructor ck_null fs0 S +refgen reference constructor ck_spair m1 L +srefgen scalar ref constructor ck_null fs1 S ref reference-type operator ck_fun stu% S? bless bless ck_fun s@ S S? @@ -256,8 +289,10 @@ rcatline append I/O operator ck_null t% # 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 @@ -361,7 +396,7 @@ abs abs ck_fun fstu% S? # String stuff. length length ck_lengthconst istu% S? -substr substr ck_fun st@ S S S? +substr substr ck_fun st@ S S S? S? vec vec ck_fun ist@ S S S index index ck_index ist@ S S S? @@ -412,7 +447,7 @@ 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 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 @@ -499,7 +534,7 @@ print print ck_listiob ims@ F? L 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 @@ -680,3 +715,4 @@ syscall syscall ck_fun imst@ S L # For multi-threading lock lock ck_rfun s% S +threadsv per-thread variable ck_null ds0