X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=bytecode.pl;h=2e3f9c6086d6637a4fcb5871dd3118b3d9940b51;hb=dc45a647708b6c5442e1362e6b6e7a2583c30346;hp=8eadbdd9418a4f120e2022d3391f197e03edc7ef;hpb=e21c45ac3eeaa7a94c61f7c376ce867a862637e4;p=p5sagit%2Fp5-mst-13.2.git diff --git a/bytecode.pl b/bytecode.pl index 8eadbdd..2e3f9c6 100644 --- a/bytecode.pl +++ b/bytecode.pl @@ -34,12 +34,12 @@ EOT my $perl_header; ($perl_header = $c_header) =~ s{[/ ]?\*/?}{#}g; -unlink "byterun.c", "byterun.h", "ext/B/Asmdata.pm"; +unlink "byterun.c", "byterun.h", "ext/B/B/Asmdata.pm"; # # Start with boilerplate for Asmdata.pm # -open(ASMDATA_PM, ">ext/B/Asmdata.pm") or die "Asmdata.pm: $!"; +open(ASMDATA_PM, ">ext/B/B/Asmdata.pm") or die "ext/B/B/Asmdata.pm: $!"; print ASMDATA_PM $perl_header, <<'EOT'; package B::Asmdata; use Exporter; @@ -65,20 +65,30 @@ print BYTERUN_C $c_header, <<'EOT'; #include "EXTERN.h" #include "perl.h" -#include "bytecode.h" -#include "byterun.h" + +void * +bset_obj_store(void *obj, I32 ix) +{ + if (ix > obj_list_fill) { + if (obj_list_fill == -1) + New(666, obj_list, ix + 1, void*); + else + Renew(obj_list, ix + 1, void*); + obj_list_fill = ix; + } + obj_list[ix] = obj; + return obj; +} #ifdef INDIRECT_BGET_MACROS -void byterun(bs) -struct bytestream bs; +void byterun(struct bytestream bs) #else -void byterun(fp) -FILE *fp; +void byterun(PerlIO *fp) #endif /* INDIRECT_BGET_MACROS */ { dTHR; int insn; - while ((insn = FGETC()) != EOF) { + while ((insn = BGET_FGETC()) != EOF) { switch (insn) { EOT @@ -155,18 +165,12 @@ struct bytestream { int (*fread)(char *, size_t, size_t, void*); void (*freadpv)(U32, void*); }; -void freadpv _((U32, void *)); void byterun _((struct bytestream)); #else -void byterun _((FILE *)); +void byterun _((PerlIO *)); #endif /* INDIRECT_BGET_MACROS */ -#ifndef PATCHLEVEL -#include "patchlevel.h" -#endif -#if PATCHLEVEL < 4 || (PATCHLEVEL == 4 && SUBVERSION < 50) -#define dTHR extern int errno -#endif +void *bset_obj_store _((void *, I32)); enum { EOT @@ -216,10 +220,10 @@ EXT SV * specialsv_list[%d]; #define INIT_SPECIALSV_LIST STMT_START { \ EOT for ($i = 0; $i < @specialsv; $i++) { - print BYTERUN_H "specialsv_list[$i] = $specialsv[$i]; \\\n"; + print BYTERUN_H "\tspecialsv_list[$i] = $specialsv[$i]; \\\n"; } print BYTERUN_H <<'EOT'; -} STMT_END + } STMT_END EOT #