Abbrevations: bc B::ByteCode, c B::C, cc B::CC, 
              -D -DDEBUGGING perl, also used as d version suffix, eg 5.8.8d

Testsuite added, coverage TODO.
Same ok and failures as with 5.8 and 5.9.4
bc PV and PM assertions.
c regex and blead fails.
DEBUGGING: op_free(PL_main_root) endless recursion
Since 1.04_13 and >=5.10 it hangs in op_free(PL_main_root), without or without DEBUGGING.
Minor B::CC bugs fixed.

5.8.8:
t/asmdata........ok
t/assembler......ok
t/b..............ok
t/bblock.........ok
t/bytecode.t.....ok
t/c.t        (Wstat: 0 Tests: 19 Failed: 6)
  FAILED tests 8-10, 14-16
t/cc.t       (Wstat: 0 Tests: 19 Failed: 13)
  Failed tests:  8-10 12 14-16 18-19
t/o..............ok
t/stash..........ok

5.8.8d:
t/asmdata........ok
t/assembler......ok
t/b..............ok
t/bblock.........ok
t/bytecode.t.....ok
  TODO failed:   20 (bc op coverage)
t/c.t        (Wstat: 0 Tests: 19 Failed: 13)
  FAILED tests 5 7-12 14-19
  5,7,11-12,17-19 DEBUGGING only: at op_free destruct
    panic: invalid pad in pad_sv: 0x8c1760[0x8de3b8]
t/cc.t       (Wstat: 0 Tests: 19 Failed: 13)
  Failed tests:  5 7-12 14-19
t/o..............ok
t/stash..........ok

5.10.0:
t/asmdata........ok
t/assembler......ok
t/b..............ok
t/bblock.........ok
t/bytecode   (Wstat: 0 Tests: 19 Failed: 6)
  FAILED tests 2-5, 7, 11, 15, with -D 9-12 fail also.
  Assertion (((PMOP*)(*Perl_Iop_ptr(my_perl))))->op_pmflags & 0x0002
  Modification of a read-only value attempted
  Assertion ((((shplep)->sv_flags & (0x00004000|0x00008000)) == 0x00008000) && (((svtype)((shplep)->sv_flags & 0xff)) == SVt_PVGV || ((svtype)((shplep)->sv_flags & 0xff)) == SVt_PVLV)) failed
t/c.t        (Wstat: 0 Tests: 19 Failed: 6)
  Assertion ((svtype)((_svi)->sv_flags & 0xff)) != SVt_PVCV failed
  Failed tests:  8-10, 14-16 (some segfaulting, some hanging at op_free)
t/cc.t       (Wstat: 0 Tests: 19 Failed: 9)
  Failed tests:  8-10, 12, 14-16, 18-19 (some segfaulting, some hanging at op_free)
t/o..............ok
t/stash..........ok

5.11 @33408 -D
t/asmdata........ok
t/assembler......ok
t/b..............ok
t/bblock.........ok
t/bytecode.t (Wstat: 0 Tests: 20 Failed: 11)
  Failed tests:  2-5, 7, 9-12, 15-16 (all segfaulting in REGEX)
  TODO failed:   20
t/c.t        (Wstat: 0 Tests: 19 Failed: 19)
  Failed tests:  1-19
t/cc.t       (Wstat: 0 Tests: 19 Failed: 19)
  Failed tests:  1-19
t/o..............ok
t/stash..........ok


5.10, 5.11 status
-----------------
With DEBUGGING in perl_destruct: op_free root fails.
  panic: illegal pad in pad_new: 0x18c4368[0x18cf6e8]
pvx: seems to be fixed now in bc, and c
  With the move of the pvx field from xpv to the sv, we have to solve 
  that differently for the Bytecode and C backend.
  Bytecode can simply mimic the old XPV behaviour of a 3 field struct 
  (pvx, cur, len) to simplify pv handling.
hv: crash at invalid entry in hv_store in B::HV::save
hek: new implementation
regexp: new and still broken for 5.11, regex_pad wrong and ignored on 5.11
bc: B::IO::SUBPROCESS missing

5.8 status
----------
I've restored 5.8 backwards compatibility, mainly for test comparison.
CPAN installations will still abort, but that can be easily overridden.
ByteLoader is now backwards compatible: Accepts lower versions also.

Details:

ccode3 - 5.10
-------------
SEGV     $_ = "xyxyx"; %j=(1,2); s/x/$j{print("z")}/g; print $_ 
empty data. cause: no pv flag and refcnt in the sv
#0  0x004a38c3 in Perl_fbm_instr (my_perl=0x18926d0, big=0x18d4bc8 "xyxyx",
    bigend=0x18d4bcd "", littlestr=0x0, flags=0) at util.c:577
#1  0x006481d4 in Perl_re_intuit_start (my_perl=0x18926d0, prog=0x18d2088,
    sv=0x18d3fb8, strpos=0x18d4bc8 "xyxyx", strend=0x18d4bcd "", flags=0,
    data=0x0) at regexec.c:561
#2  0x005a13f3 in Perl_pp_subst (my_perl=0x18926d0) at pp_hot.c:2105
(gdb) p *rx
$7 = {engine = 0x6a06a0, mother_re = 0x0, extflags = 1126170624, minlen = 0,
  minlenret = 0, gofs = 0, substrs = 0x18c0908, nparens = 0, intflags = 0,
  pprivate = 0x18d1588, lastparen = 0, lastcloseparen = 0, swap = 0x0,
  offs = 0x18cf748, subbeg = 0x0, sublen = 0, prelen = 0,
  precomp = 0x18ab870 ")", wrapped = 0x18ab868 "(?-xism:)", wraplen = 9,
  seen_evals = 0, paren_names = 0x0, refcnt = 1}


TEST COVERAGE
-------------
Bytecode:
no coverage for ret(0) ldsv(1) ldop(2) stsv(3) stop(4) stpv(5) ldspecsv(6) 
ldspecsvx(7) newsv(8) newsvx(9) nop(10) newop(11) newopx(12) newopn(13) 
newpv(14) pv_cur(15) pv_free(16) sv_upgrade(17) sv_refcnt(18) sv_refcnt_add(19) 
sv_flags(20) xrv(21) xpv(22) xpv_cur(23) xpv_len(24) xiv(25) xnv(26) 
xlv_targoff(27) xlv_targlen(28) xlv_targ(29) xlv_type(30) xbm_useful(31) 
xbm_previous(32) xbm_rare(33) xfm_lines(34) comment(35) xio_lines(36) xio_page(37) 
xio_page_len(38) xio_lines_left(39) xio_top_name(40) xio_top_gv(41) xio_fmt_name(42) 
xio_fmt_gv(43) xio_bottom_name(44) xio_bottom_gv(45) xio_type(46) xio_flags(47) 
xcv_xsubany(48) xcv_stash(49) xcv_start(50) xcv_root(51) xcv_gv(52) xcv_file(53) 
xcv_depth(54) xcv_padlist(55) xcv_outside(56) xcv_outside_seq(57) xcv_flags(58) 
av_extend(59) av_pushx(60) av_push(61) xav_fill(62) xav_max(63) xav_flags(64) 
xhv_name(65) hv_store(66) sv_magic(67) mg_obj(68) mg_private(69) mg_flags(70) 
mg_name(71) mg_namex(72) xmg_stash(73) gv_fetchpv(74) gv_fetchpvx(75) gv_stashpv(76) 
gv_stashpvx(77) gp_sv(78) gp_refcnt(79) gp_refcnt_add(80) gp_av(81) gp_hv(82) 
gp_cv(83) gp_file(84) gp_io(85) gp_form(86) gp_cvgen(87) gp_line(88) gp_share(89) 
xgv_flags(90) op_next(91) op_sibling(92) op_ppaddr(93) op_targ(94) op_type(95) 
op_opt(96) op_latefree(97) op_latefreed(98) op_attached(99) op_first(102) op_last(103) 
op_pmreplroot(105) op_pmreplstart(106) op_pmreplrootpo(108) op_pmstash(109) 
op_pmreplrootgv(110) pregcomp(111) op_pmflags(112) unused(113) op_reflags(114) 
op_sv(115) op_pv(117) op_pv_tr(118) op_redoop(119) op_nextop(120) op_lastop(121) 
cop_label(122) cop_stash(125) cop_filegv(126) push_begin(134) push_init(135) 
push_end(136) curstash(137) defstash(138) data(139) incav(140) load_glob(141) 
regex_padav(142) comppad_name(144) xgv_stash(145) signal(146) formfeed(147)

JIT PLANS
---------
B-C-1.04_10:
Playing with the idea to target against parrot pir instead of lightning
and use the parrot jit, with pbc_to_exe or exec_save.
Then we need no jit support in the ByteLoader and get rid of all the Jit 
stuff for now. 
=> B::PIR, Doing mentoring for Google Soc 2008

B-C-1.04_03:
added Jit and Asm layout, with the idea of using either 
lightning as jit backend (Jit), or creating our own assembler (Asm) 
to be able to use a high-level language.

2008-03-14 16:29:55 rurban
