From a1d407e84f3b3d7067df3576c788e85a4b4857e5 Mon Sep 17 00:00:00 2001 From: Dave Mitchell Date: Thu, 17 Jul 2003 22:51:12 +0100 Subject: [ PATCH] Re: isa(UNIVERSAL)? Message-ID: <20030717205112.GA2994@fdgroup.com> p4raw-id: //depot/perl@20168 --- t/op/universal.t | 10 +++++++++- universal.c | 6 ++++-- 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; } /* -- cgit v1.2.1