Commit b036dd625e for perl
commit b036dd625eaa0a38f3fbac36c0e5a162c140da7c
Author: Tony Cook <tony@develop-help.com>
Date: Thu Oct 29 13:34:13 2026 +1100
isa: add some benchmarks
includes alternative implementations that use blessed($x) &&
$x->isa($class) per 24997
diff --git a/t/perf/benchmarks b/t/perf/benchmarks
index e39d344324..8a5fdb09fe 100644
--- a/t/perf/benchmarks
+++ b/t/perf/benchmarks
@@ -1822,6 +1822,88 @@
code => 'index $x, "b"',
},
+ # test isa itself
+ 'func::isa::unblessed' => {
+ desc => 'isa on unblessed reference',
+ setup => 'my $x = {}; package X {}; use feature "isa";',
+ code => 'my $y = $x isa X',
+ },
+ 'func::isa::plainfalse' => {
+ desc => 'false isa on blessed non-@ISA',
+ setup => 'package X {} my $x = bless {}, "X"; package Y {} use feature "isa";',
+ code => 'my $y = $x isa Y',
+ },
+ 'func::isa::plaintrue' => {
+ desc => 'true isa on blessed non-@ISA',
+ setup => 'package X {} my $x = bless {}, "X"; use feature "isa";',
+ code => 'my $y = $x isa X',
+ },
+ 'func::isa::5deepfalse' => {
+ desc => 'false isa on blessed 5 deep-@ISA',
+ setup => <<'EOS',
+package A {} package B { our @ISA = "A"; } package C { our @ISA = "B" } package D { our @ISA = "C"; } package E { our @ISA = "D"; }
+package Y {} my $x = bless {}, "Y"; use feature "isa";
+EOS
+ code => 'my $y = $x isa A',
+ },
+ 'func::isa::5deeptruetop' => {
+ desc => 'false isa on blessed 5 deep-@ISA at top',
+ setup => <<'EOS',
+package A {} package B { our @ISA = "A"; } package C { our @ISA = "B" } package D { our @ISA = "C"; } package E { our @ISA = "D"; }
+my $x = bless {}, "E"; use feature "isa";
+EOS
+ code => 'my $y = $x isa E',
+ },
+ 'func::isa::5deeptruebot' => {
+ desc => 'false isa on blessed 5 deep-@ISA at bottom',
+ setup => <<'EOS',
+package A {} package B { our @ISA = "A"; } package C { our @ISA = "B" } package D { our @ISA = "C"; } package E { our @ISA = "D"; }
+my $x = bless {}, "E"; use feature "isa";
+EOS
+ code => 'my $y = $x isa A',
+ },
+
+ # test the not so direct alternative to isa
+ 'func::isa::unblessed_blessedandisa' => {
+ desc => 'isa on unblessed reference',
+ setup => 'my $x = {}; package X {}; use builtin "blessed"',
+ code => 'my $y = blessed($x) && $x->isa("X")',
+ },
+ 'func::isa::plainfalse_blessedandisa' => {
+ desc => 'false isa on blessed non-@ISA',
+ setup => 'package X {} my $x = bless {}, "X"; package Y {} use builtin "blessed";',
+ code => 'my $y = blessed($x) && $x->isa("Y")',
+ },
+ 'func::isa::plaintrue_blessedandisa' => {
+ desc => 'true isa on blessed non-@ISA',
+ setup => 'package X {} my $x = bless {}, "X"; use builtin "blessed";',
+ code => 'my $y = blessed($x) && $x->isa("X")',
+ },
+ 'func::isa::5deepfalse_blessedandisa' => {
+ desc => 'false isa on blessed 5 deep-@ISA',
+ setup => <<'EOS',
+package A {} package B { our @ISA = "A"; } package C { our @ISA = "B" } package D { our @ISA = "C"; } package E { our @ISA = "D"; }
+package Y {} my $x = bless {}, "Y"; use builtin "blessed";
+EOS
+ code => 'my $y = blessed($x) && $x->isa("A")',
+ },
+ 'func::isa::5deeptruetop_blessedandisa' => {
+ desc => 'false isa on blessed 5 deep-@ISA at top',
+ setup => <<'EOS',
+package A {} package B { our @ISA = "A"; } package C { our @ISA = "B" } package D { our @ISA = "C"; } package E { our @ISA = "D"; }
+my $x = bless {}, "E"; use builtin "blessed";
+EOS
+ code => 'my $y = blessed($x) && $x->isa("E")',
+ },
+ 'func::isa::5deeptruebot_blessedandisa' => {
+ desc => 'false isa on blessed 5 deep-@ISA at bottom',
+ setup => <<'EOS',
+package A {} package B { our @ISA = "A"; } package C { our @ISA = "B" } package D { our @ISA = "C"; } package E { our @ISA = "D"; }
+my $x = bless {}, "E"; use builtin "blessed";
+EOS
+ code => 'my $y = blessed($x) && $x->isa("A")',
+ },
+
# SUBSTR
'func::substr::nibble_void' => {
desc => 'substr with a zero offset, empty replacement pattern (void)',