Branch Coverage

blib/lib/Sub/MultiMethod.pm
Criterion Covered Total %
branch 115 140 82.1


line true false branch
54 66 676 unless ($CANDIDATES{$target})
68 12 690 ref $method_name ? :
77 0 4 ref $method_name ? :
99 0 222 if (@$mmc and $spec->{'method'} != $mmc->[0]{'method'})
117 22 96 if (is_Int($method_name) or is_ScalarRef($method_name)) { }
123 92 4 $is_method ? :
136 168 110 if ($found) { }
110 0 elsif (not $is_coderef_method) { }
141 16 94 if (exists &{"${p}::$method_name";})
144 16 0 unless ($me->known_dispatcher($coderef))
159 16 102 if (defined $final_fallback)
194 0 72 if (ref $target or not defined $target)
199 0 72 unless $args->{'defaults'}
204 44 58 if ($defaults{'no_dispatcher'} eq "auto")
207 12 90 ref $sub_name ? :
252 102 0 if defined $spec->{'method'}
254 51 51 if (is_ArrayRef($spec->{'signature'})) { }
255 1 50 $spec->{'named'} ? :
259 1 50 if ref $spec->{'named'}
266 336 256 if $KNOWN_OPTIONS{$key} or $key =~ /^_/
268 0 256 if ($BAD_OPTIONS{$key})
278 0 4 ref $sub_name ? :
281 102 0 if (is_Int($tp{'method'}))
282 4 98 if ($tp{'method'} > 1)
285 0 4 ref $tp{'head'} ? :
287 86 16 if ($tp{'method'} == 1)
314 130 512 $delete_while_copying{$_} ? :
332 14 0 $first ? :
341 0 4 unless ref $spec{'alias'}
357 94 8 if defined $sub_name
360 16 86 if ($spec{'alias'})
363 4 12 is_ArrayRef($spec{'alias'}) ? :
366 0 16 if (is_CodeRef($spec{'signature'}))
386 0 16 unless eval $code
392 4 12 exists &{"${target}::$alias";} ? :
395 4 12 if ($existing)
396 2 2 $spec{'is_monomethod'} && $alias eq $aliases[0] ? :
407 68 30 if defined $sub_name and not $spec{'no_dispatcher'}
409 10 84 if (not $hooked{$target} and "Role::Hooks"->is_role($target))
413 14 6 unless "Role::Hooks"->is_role($consumerpkg)
426 14 44 if (is_ScalarRef($sub_name)) { }
44 0 elsif (is_Str($sub_name)) { }
427 4 10 if (is_Undef($$sub_name)) { }
10 0 elsif (is_CodeRef($$sub_name) or is_Object($$sub_name)) { }
434 10 0 if ($me->known_dispatcher($$sub_name)) { }
461 0 4 unless $CLEANUP{"$blessed_coderef"}
462 4 0 if ($target and $sub_name)
475 0 82 unless (exists &mro::get_linear_isa or eval {
480 36 46 exists &{"${target}::$sub_name";} ? :
484 0 82 unless defined $sub_name
486 32 50 if ($existing and $me->known_dispatcher($existing)) { }
4 46 elsif ($existing) { }
494 12 34 ref $sub_name ? :
515 0 46 unless eval $code
527 78 40 if ($is_method and is_Object($argv->[0])) { }
10 56 elsif ($is_method and &is_ClassName($argv->[0])) { }
539 6 112 unless (my($winner, $new_argv) = $me->pick_candidate([$me->get_all_multimethod_candidates($pkg, $method_name, $is_method)], $argv))
558 570 174 if $candidate->{'compiled'}
559 16 158 if (is_CodeRef($candidate->{'signature'})) { }
580 14 730 if (defined $candidate->{'compiled'}{'min_args'} and $candidate->{'compiled'}{'min_args'} > $argc) { }
4 726 elsif (defined $candidate->{'compiled'}{'max_args'} and $candidate->{'compiled'}{'max_args'} < $argc) { }
608 56 62 if (@remaining > 1)
612 86 74 if defined $candidate->{'score'}
615 66 156 is_ArrayRef($candidate->{'signature_spec'}{$_}) ? :
618 0 96 unless is_Object($type)
630 20 98 if (@remaining > 1)
638 10 108 if (@remaining > 1)
646 8 110 if (@remaining > 1)
657 0 118 unless wantarray
659 6 112 unless @remaining