summaryrefslogtreecommitdiff
path: root/class.c
diff options
context:
space:
mode:
authorPaul "LeoNerd" Evans <leonerd@leonerd.org.uk>2022-11-30 15:34:27 +0000
committerPaul "LeoNerd" Evans <leonerd@leonerd.org.uk>2023-02-10 14:37:25 +0000
commit0bb17957e5474866af5b126cf584f2f7aa6340fb (patch)
tree7d9a4dce57513e3d93cb161f3e8fd424d6d88990 /class.c
parente51627afd15d704290c8201fdfc02bd7951564f3 (diff)
downloadperl-0bb17957e5474866af5b126cf584f2f7aa6340fb.tar.gz
Refuse to create a class if its package already contains a non-empty @ISA array
Diffstat (limited to 'class.c')
-rw-r--r--class.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/class.c b/class.c
index 13cb0bff42..3d088c05fb 100644
--- a/class.c
+++ b/class.c
@@ -258,6 +258,17 @@ Perl_class_setup_stash(pTHX_ HV *stash)
HvNAMEfARG(stash));
}
+ {
+ SV *isaname = newSVpvf("%" HEKf "::ISA", HvNAME_HEK(stash));
+ sv_2mortal(isaname);
+
+ AV *isa = get_av(SvPV_nolen(isaname), (SvFLAGS(isaname) & SVf_UTF8));
+
+ if(isa && av_count(isa) > 0)
+ croak("Cannot create class %" HEKf " as it already has a non-empty @ISA",
+ HvNAME_HEK(stash));
+ }
+
char *classname = HvNAME(stash);
U32 nameflags = HvNAMEUTF8(stash) ? SVf_UTF8 : 0;