diff options
author | Paul "LeoNerd" Evans <leonerd@leonerd.org.uk> | 2022-11-30 15:34:27 +0000 |
---|---|---|
committer | Paul "LeoNerd" Evans <leonerd@leonerd.org.uk> | 2023-02-10 14:37:25 +0000 |
commit | 0bb17957e5474866af5b126cf584f2f7aa6340fb (patch) | |
tree | 7d9a4dce57513e3d93cb161f3e8fd424d6d88990 /class.c | |
parent | e51627afd15d704290c8201fdfc02bd7951564f3 (diff) | |
download | perl-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.c | 11 |
1 files changed, 11 insertions, 0 deletions
@@ -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; |