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 {