This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
optimise $ref1 = $ref2 better
authorDavid Mitchell <davem@iabyn.com>
Tue, 15 Nov 2016 08:27:48 +0000 (08:27 +0000)
committerDavid Mitchell <davem@iabyn.com>
Wed, 16 Nov 2016 09:54:33 +0000 (09:54 +0000)
commita0833292cfd2e6c3e7390b655122d7e033b70793
tree725028ef67a9fb9382e49498a75aa79b6096b700
parent90303eefab11f53890ba7378a38c90ca58b20072
optimise $ref1 = $ref2 better

When assigning to a ref, the old referent is mortalised if its refcount
is 1, to avoid a premature free on things like $r = $$r or $r = $r->[0].

For the shortcut case where $ref1 and $ref2 are simple refs (no magic etc)
it's possible to do the assign then SvREFCNT_dec() the old value without
having to mortalise it. Which is faster.

Even when it doesn't have to be mortalised (RC > 1) this commit makes it
slightly faster as it no longer calls sv_unref_flags().

Conversely, this commit also makes the short-cut integer assign code path
infinitesimally slower.
sv.c
t/perf/benchmarks