summaryrefslogtreecommitdiff
path: root/sv.c
diff options
context:
space:
mode:
authorRafael Garcia-Suarez <rgarciasuarez@gmail.com>2009-01-20 09:11:18 +0100
committerRafael Garcia-Suarez <rgarciasuarez@gmail.com>2009-01-20 09:11:18 +0100
commitfbb3ee5af3d428706b9b8e224ae54dd344172e02 (patch)
tree5759044438706958809d191a27c2d9a4200c8773 /sv.c
parent85a8a980a9693eec73613792ab6c1f1c4fdd098d (diff)
downloadperl-fbb3ee5af3d428706b9b8e224ae54dd344172e02.tar.gz
Optimize away calls to empty DESTROY methods
Diffstat (limited to 'sv.c')
-rw-r--r--sv.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/sv.c b/sv.c
index d944e2f6fc..ae728b1f27 100644
--- a/sv.c
+++ b/sv.c
@@ -5655,7 +5655,11 @@ Perl_sv_clear(pTHX_ register SV *const sv)
CV* destructor;
stash = SvSTASH(sv);
destructor = StashHANDLER(stash,DESTROY);
- if (destructor) {
+ if (destructor
+ /* Don't bother calling an empty destructor */
+ && (CvISXSUB(destructor)
+ || CvSTART(destructor)->op_next->op_type != OP_LEAVESUB))
+ {
SV* const tmpref = newRV(sv);
SvREADONLY_on(tmpref); /* DESTROY() could be naughty */
ENTER;