More research. 1. Here is the output of a recent run in trunk of coverage analysis on the code underlying tools/build/pmc2c.pl:
[parrot] 517 $ PERL5OPT=-MDevel::Cover=-db,coverage/pmc2c prove t/tools/pmc2cutils/*.t "$@" t/tools/pmc2cutils/00-qualify........Devel::Cover: Can't open -e for MD5 digest: No such file or directory t/tools/pmc2cutils/00-qualify........ok 1/10Subroutine prederef redefined at /Users/jimk/ work/parrot/t/tools/pmc2cutils/../../../lib/Parrot/Pmc2c/STMRef.pm line 10. Subroutine raw_deref redefined at /Users/jimk/work/parrot/t/tools/pmc2cutils/../../../lib/ Parrot/Pmc2c/STMRef.pm line 34. t/tools/pmc2cutils/00-qualify........ok t/tools/pmc2cutils/01-pmc2cutils.....ok 1/26Subroutine prederef redefined at /Users/jimk/ work/parrot/lib/Parrot/Pmc2c/STMRef.pm line 10. Subroutine raw_deref redefined at /Users/jimk/work/parrot/lib/Parrot/Pmc2c/STMRef.pm line 34. t/tools/pmc2cutils/01-pmc2cutils.....ok t/tools/pmc2cutils/02-find_file......ok 1/7Subroutine prederef redefined at /Users/jimk/ work/parrot/lib/Parrot/Pmc2c/STMRef.pm line 10. Subroutine raw_deref redefined at /Users/jimk/work/parrot/lib/Parrot/Pmc2c/STMRef.pm line 34. t/tools/pmc2cutils/02-find_file......ok t/tools/pmc2cutils/03-dump_vtable....ok 9/12Subroutine prederef redefined at /Users/jimk/ work/parrot/lib/Parrot/Pmc2c/STMRef.pm line 10. Subroutine raw_deref redefined at /Users/jimk/work/parrot/lib/Parrot/Pmc2c/STMRef.pm line 34. t/tools/pmc2cutils/03-dump_vtable....ok t/tools/pmc2cutils/04-dump_pmc.......ok 113/117Subroutine prederef redefined at /Users/ jimk/work/parrot/lib/Parrot/Pmc2c/STMRef.pm line 10. Subroutine raw_deref redefined at /Users/jimk/work/parrot/lib/Parrot/Pmc2c/STMRef.pm line 34. t/tools/pmc2cutils/04-dump_pmc.......ok t/tools/pmc2cutils/05-gen_c..........ok 66/68Subroutine prederef redefined at /Users/jimk/ work/parrot/lib/Parrot/Pmc2c/STMRef.pm line 10. Subroutine raw_deref redefined at /Users/jimk/work/parrot/lib/Parrot/Pmc2c/STMRef.pm line 34. t/tools/pmc2cutils/05-gen_c..........ok t/tools/pmc2cutils/06-print_tree.....ok 33/55Subroutine prederef redefined at /Users/jimk/ work/parrot/lib/Parrot/Pmc2c/STMRef.pm line 10. Subroutine raw_deref redefined at /Users/jimk/work/parrot/lib/Parrot/Pmc2c/STMRef.pm line 34. t/tools/pmc2cutils/06-print_tree.....ok t/tools/pmc2cutils/07-open_file......ok 1/23Subroutine prederef redefined at /Users/jimk/ work/parrot/lib/Parrot/Pmc2c/STMRef.pm line 10. Subroutine raw_deref redefined at /Users/jimk/work/parrot/lib/Parrot/Pmc2c/STMRef.pm line 34. t/tools/pmc2cutils/07-open_file......ok All tests successful. Files=8, Tests=318, 132 wallclock secs (109.62 cusr + 9.16 csys = 118.78 CPU) 2. Here is the output of 'ack prederef lib/Parrot/': lib/Parrot/OpTrans/CGP.pm:11:C<Parrot::OpTrans::CGoto> to provide predereferenced register addressing lib/Parrot/OpTrans/CGP.pm:70:# define opcode_to_prederef(i, op) \\ lib/Parrot/OpTrans/CGP.pm:94: goto **(cur_opcode = opcode_to_prederef(interp, $addr))"; lib/Parrot/OpTrans/CGP.pm:121: return "goto **(cur_opcode = opcode_to_prederef(interp, lib/Parrot/OpTrans/CPrederef.pm:12:to provide basic functionality for predereferenced run loops (switch, lib/Parrot/OpTrans/CPrederef.pm:39:#define REL_PC ((size_t)(cur_opcode - interp->code- >prederef.code)) lib/Parrot/OpTrans/CPrederef.pm:69: return "opcode_to_prederef(interp, $addr)"; lib/Parrot/OpTrans/CPrederef.pm:79: return "opcode_to_prederef(interp, pop_dest (interp))"; lib/Parrot/OpTrans/CSwitch.pm:11:to provide a mixture of predereferenced register addressing and a lib/Parrot/OpTrans/CSwitch.pm:78:# define opcode_to_prederef(i, op) (op ? \\ lib/Parrot/OpTrans/CSwitch.pm:112: cur_opcode = opcode_to_prederef(interp, $addr); lib/Parrot/OpTrans/CSwitch.pm:141: cur_opcode = opcode_to_prederef(interp, dest); lib/Parrot/OpTrans.pm:86:C<opcode_t>, but the prederef runops core uses an array of C<void*> to lib/Parrot/Pmc2c/Ref.pm:25:=item C<prederef($method)> lib/Parrot/Pmc2c/Ref.pm:32:sub prederef { lib/Parrot/Pmc2c/Ref.pm:88: my $pre = $self->prederef($method); lib/Parrot/Pmc2c/SharedRef.pm:13:=item C<prederef($method)> lib/Parrot/Pmc2c/SharedRef.pm:20:sub prederef { lib/Parrot/Pmc2c/StmRef.pm:10:sub prederef { 3. Here is the output of 'ack raw_deref lib/Parrot/': lib/Parrot/Pmc2c/Ref.pm:47:=item C<raw_deref($method)> lib/Parrot/Pmc2c/Ref.pm:54:sub raw_deref { lib/Parrot/Pmc2c/Ref.pm:90: my $deref = $self->raw_deref($method); lib/Parrot/Pmc2c/StmRef.pm:34:sub raw_deref { Would the warnings emitted while running 'prove' with Devel::Cover be due to the fact that both Parrot::Pmc2c::Ref and Parrot::Pmc2c::StmRef define prederef() and raw_deref() -- and that the latter inherits from the former? [parrot] 520 $ rhead lib/Parrot/Pmc2c/StmRef.pm package Parrot::Pmc2c::STMRef; use base 'Parrot::Pmc2c::Ref'; Thank you very much. kid51
lib/Parrot/OpTrans/CGP.pm:11:C<Parrot::OpTrans::CGoto> to provide predereferenced register addressing lib/Parrot/OpTrans/CGP.pm:70:# define opcode_to_prederef(i, op) \\ lib/Parrot/OpTrans/CGP.pm:94: goto **(cur_opcode = opcode_to_prederef(interp, $addr))"; lib/Parrot/OpTrans/CGP.pm:121: return "goto **(cur_opcode = opcode_to_prederef(interp, lib/Parrot/OpTrans/CPrederef.pm:12:to provide basic functionality for predereferenced run loops (switch, lib/Parrot/OpTrans/CPrederef.pm:39:#define REL_PC ((size_t)(cur_opcode - interp->code->prederef.code)) lib/Parrot/OpTrans/CPrederef.pm:69: return "opcode_to_prederef(interp, $addr)"; lib/Parrot/OpTrans/CPrederef.pm:79: return "opcode_to_prederef(interp, pop_dest(interp))"; lib/Parrot/OpTrans/CSwitch.pm:11:to provide a mixture of predereferenced register addressing and a lib/Parrot/OpTrans/CSwitch.pm:78:# define opcode_to_prederef(i, op) (op ? \\ lib/Parrot/OpTrans/CSwitch.pm:112: cur_opcode = opcode_to_prederef(interp, $addr); lib/Parrot/OpTrans/CSwitch.pm:141: cur_opcode = opcode_to_prederef(interp, dest); lib/Parrot/OpTrans.pm:86:C<opcode_t>, but the prederef runops core uses an array of C<void*> to lib/Parrot/Pmc2c/Ref.pm:25:=item C<prederef($method)> lib/Parrot/Pmc2c/Ref.pm:32:sub prederef { lib/Parrot/Pmc2c/Ref.pm:88: my $pre = $self->prederef($method); lib/Parrot/Pmc2c/SharedRef.pm:13:=item C<prederef($method)> lib/Parrot/Pmc2c/SharedRef.pm:20:sub prederef { lib/Parrot/Pmc2c/StmRef.pm:10:sub prederef {