my $copy = *PFLAP;
my $copy_gv_size = total_size($copy);
# GV copies point back to the real GV through GvEGV. They share the same GP
- # and GvFILE
- local $TODO = 'EGV is double counted. GV - GP == '
- . ($incremental_gv_size - $gp_size);
- is($copy_gv_size, $real_gv_size + $incremental_gv_size - $gp_size,
- 'GV copies point back to the real GV');
+ # and GvFILE. In 5.10 and later GvNAME is also shared.
+ my $shared_gvname = 0;
+ if ($] >= 5.010) {
+ # Calculate the size of the shared HEK:
+ my %h = (PFLAP => 0);
+ my $shared = (keys %h)[0];
+ $shared_gvname = total_size($shared);
+ undef $shared;
+ $shared_gvname-= total_size($shared);
+ }
+ is($copy_gv_size, $real_gv_size + $incremental_gv_size - $gp_size
+ - $shared_gvname, 'GV copies point back to the real GV');
}
sub gv_grew {
cmp_ok($new_thing_size, '>', 0, "For $type, new item has a size");
is($cv_now_size, $cv_was_size,
- "Under multiplicity, the optree doesn't directly close onto a GV, so CVs won't change size")
- if $Config{usemultiplicity};
+ "Under ithreads, the optree doesn't directly close onto a GV, so CVs won't change size")
+ if $Config{useithreads};
if ($] < 5.010 && $type eq 'SCALAR') {
is($cv_now_size, $cv_was_size, "CV doesn't grow as GV has SCALAR")
- unless $Config{usemultiplicity};
+ unless $Config{useithreads};
is($io_now_size, $io_was_size, "IO doesn't grow as GV has SCALAR");
is($gv_now_size, $gv_was_size, 'GV size unchanged as GV has SCALAR');
- local $TODO = 'total_size double counts GP entries';
is($gv_now_total_size, $gv_was_total_size,
'GV total size unchanged as GV has SCALAR');
} elsif ($type eq 'CODE' || $type eq 'FORMAT') {
# CV like things (effectively) close back over their typeglob, so its
# hard to just get the size of the CV.
cmp_ok($cv_now_size, '>', $cv_was_size, "CV grew for $type")
- unless $Config{usemultiplicity};
+ unless $Config{useithreads};
cmp_ok($io_now_size, '>', $io_was_size, "IO grew for $type");
# Assigning CVs and FORMATs to typeglobs causes the typeglob to get
# weak reference magic
} else {
is($cv_now_size, $cv_was_size + $new_thing_size,
"CV grew by expected amount for $type")
- unless $Config{usemultiplicity};
+ unless $Config{useithreads};
is($io_now_size, $io_was_size + $new_thing_size,
"IO total_size grew by expected amount for $type");
is($gv_now_size, $gv_was_size + $new_thing_size,
"GV size grew by expected amount for $type");
- local $TODO = 'total_size double counts GP entries';
is($gv_now_total_size, $gv_was_total_size + $new_thing_size,
"GV total_size grew by expected amount for $type");
}
gv_grew('glipp', 'zok', 'no strict "vars"; $zok = undef; 1', 'SCALAR');
gv_grew('bang', 'boff', 'no strict "vars"; @boff = (); 1', 'ARRAY');
gv_grew('clange', 'sock', 'no strict "vars"; %sock = (); 1', 'HASH');
-{
+SKIP: {
+ skip("Can't create FORMAT references prior to 5.8.0", 7) if $] < 5.008;
local $Devel::Size::warn = 0;
gv_grew('biff', 'zapeth', "format zapeth =\n.\n1", 'FORMAT');
}