-/* --- Our sv_magicext ----------------------------------------------------- */
-
-#ifdef sv_magicext
-STATIC MAGIC *vmg_sv_magicext(pTHX_ SV *sv, SV *obj, MGVTBL *vtbl, SV *obj2, I32 flag) {
- return sv_magicext(sv, obj, PERL_MAGIC_ext, vtbl, (const char *) obj2, flag);
-}
-#else /* Stub inspired from 5.7.3's sv_magicext */
-STATIC MAGIC *vmg_sv_magicext(pTHX_ SV *sv, SV *obj, MGVTBL *vtbl, SV *obj2, I32 flag) {
- MAGIC* mg;
-
- if (SvTYPE(sv) < SVt_PVMG) {
- SvUPGRADE(sv, SVt_PVMG);
- }
- Newx(mg, 1, MAGIC);
- mg->mg_moremagic = SvMAGIC(sv);
- SvMAGIC_set(sv, mg);
-
- if (!obj || obj == sv ||
- (SvTYPE(obj) == SVt_PVGV &&
- (GvSV(obj) == sv || GvHV(obj) == (HV *) sv || GvAV(obj) == (AV *) sv ||
- GvCV(obj) == (CV *) sv || GvIOp(obj) == (IO *) sv ||
- GvFORM(obj) == (CV *) sv))) {
- mg->mg_obj = obj;
- } else {
- mg->mg_obj = SvREFCNT_inc(obj);
- mg->mg_flags |= MGf_REFCOUNTED;
- }
-
- mg->mg_type = PERL_MAGIC_ext;
- mg->mg_len = flag;
- if (obj2) {
- if (flag == HEf_SVKEY) {
- mg->mg_ptr = (char *) SvREFCNT_inc((SV *) obj2);
- } else {
- mg->mg_ptr = (char *) obj2;
- }
- }
- mg->mg_virtual = vtbl;
-
- mg_magical(sv);
- if (SvGMAGICAL(sv)) {
- SvFLAGS(sv) &= ~(SVf_IOK | SVf_NOK | SVf_POK);
- }
-
- return mg;
-}
-#endif
-#define vmg_sv_magicext(S, O, V, OO, F) vmg_sv_magicext(aTHX_ (S), (O), (V), (OO), (F))
-