summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pp_hot.c16
1 files changed, 3 insertions, 13 deletions
diff --git a/pp_hot.c b/pp_hot.c
index c693b301bb..fcc5e14454 100644
--- a/pp_hot.c
+++ b/pp_hot.c
@@ -1368,24 +1368,14 @@ PP(pp_defined)
}
defined = FALSE;
- switch (SvTYPE(sv)) {
- case SVt_PVAV:
- if (AvMAX(sv) >= 0 || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
- defined = TRUE;
- break;
- case SVt_PVHV:
- if (HvARRAY(sv) || SvGMAGICAL(sv) || (SvRMAGICAL(sv) && mg_find(sv, PERL_MAGIC_tied)))
- defined = TRUE;
- break;
- case SVt_PVCV:
+ if (UNLIKELY(SvTYPE(sv) == SVt_PVCV)) {
if (CvROOT(sv) || CvXSUB(sv))
defined = TRUE;
- break;
- default:
+ }
+ else {
SvGETMAGIC(sv);
if (SvOK(sv))
defined = TRUE;
- break;
}
if (is_dor) {