Re-instate initial dereference in total_size()
authorNicholas Clark <nick@ccl4.org>
Sun, 17 Apr 2011 09:28:37 +0000 (10:28 +0100)
committerNicholas Clark <nick@ccl4.org>
Sun, 17 Apr 2011 09:28:37 +0000 (10:28 +0100)
commit8c394e1251fdfe38e3123a2f20572ed5debba943
tree2d1bf4aecf12de07db340b4d525538c82317e328
parent5f04c81daf0e38670b8dac45bd369bc508da50b6
Re-instate initial dereference in total_size()

We most definitely can push an AV or an HV onto the pending array. Despite
having a comment saying that we can't do that, that was exactly what the
previous code *was* doing, only within the switch statement.

Previously, this code:

    my $a = [];
    my $b = \$a;
    weaken $b;
    total_size($a)

was returning a value which happened to be the size of the magic structure
(but not the object hanging from it - fixme) due to the interaction of two
different bugs. The number it pulled out of its backside was
thing_size(rv, st) - thing_size(rv, NULL), where thing_size(...) called
magic_size(...), and that returned 0 always if the st parameter was NULL,
because check_new(st, p) always returns FALSE (ie not new) if the first
parameter is NULL. Good eh?)
Size.xs
t/basic.t