summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Mitchell <davem@fdisolutions.com>2003-07-17 22:51:12 +0100
committerRafael Garcia-Suarez <rgarciasuarez@gmail.com>2003-07-18 06:21:15 +0000
commita1d407e84f3b3d7067df3576c788e85a4b4857e5 (patch)
treebed478317aa7d4a8a1b0a07b43642dd56ae783a0
parent0615a99403886355a89a1cb45b8c609e4424870a (diff)
downloadperl-a1d407e84f3b3d7067df3576c788e85a4b4857e5.tar.gz
[ PATCH] Re: isa(UNIVERSAL)?
Message-ID: <20030717205112.GA2994@fdgroup.com> p4raw-id: //depot/perl@20168
-rwxr-xr-xt/op/universal.t10
-rw-r--r--universal.c6
2 files changed, 13 insertions, 3 deletions
diff --git a/t/op/universal.t b/t/op/universal.t
index 7d5f59ae6d..71daf675cf 100755
--- a/t/op/universal.t
+++ b/t/op/universal.t
@@ -9,7 +9,7 @@ BEGIN {
$| = 1;
}
-print "1..98\n";
+print "1..100\n";
$a = {};
bless $a, "Bob";
@@ -187,3 +187,11 @@ test ! UNIVERSAL::isa("\xff\xff\xff\0", 'HASH');
::test $x->isa("Human");
::test $x->can("eat");
}
+
+# bugid 3284
+# a second call to isa('UNIVERSAL') when @ISA is null failed due to caching
+
+@X::ISA=();
+my $x = {}; bless $x, 'X';
+test $x->isa('UNIVERSAL');
+test $x->isa('UNIVERSAL');
diff --git a/universal.c b/universal.c
index b4563e41a8..9ee3e21a73 100644
--- a/universal.c
+++ b/universal.c
@@ -45,6 +45,9 @@ S_isa_lookup(pTHX_ HV *stash, const char *name, HV* name_stash,
if (strEQ(HvNAME(stash), name))
return &PL_sv_yes;
+ if (strEQ(name, "UNIVERSAL"))
+ return &PL_sv_yes;
+
if (level > 100)
Perl_croak(aTHX_ "Recursive inheritance detected in package '%s'",
HvNAME(stash));
@@ -112,8 +115,7 @@ S_isa_lookup(pTHX_ HV *stash, const char *name, HV* name_stash,
(void)hv_store(hv,name,len,&PL_sv_no,0);
}
}
-
- return boolSV(strEQ(name, "UNIVERSAL"));
+ return &PL_sv_no;
}
/*