Coming back to this code after nearly two months, I realized that the
analysis I posted on Nov 05 was slightly inaccurate, though its main
point -- that the control flow of auto::gc is peculiar and confusing --
is still correct.
As currently structured, the control flow inside this step's runstep()
method looks like this:
if (! defined $gc) {
$gc = 'gc';
} elsif ( $gc eq 'libc') {
# set the 'malloc_header' attribute
} else {
# no 'else' defined
}
.... then ....
if ( $gc =~ /^malloc(?:-trace)?$/ ) {
# handle the 'malloc' and 'malloc-trace' options
} elsif ( $gc eq 'libc' ) {
# set some *more* attributes
} else {
$gc = 'gc';
# handle this case
}
As you can see, we handle the case of $gc eq 'libc' twice. This has got
to be wrong. If $gc eq 'libc', then it cannot match the malloc-trace
regex ... in which case setting the malloc_header can be done in the 2nd
elsif stanza and we can reduce the top 'if' block to:
$gc = 'gc if not defined $gc;
Correct? Or am I not seeing something?
Thank you very much.
kid51