X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=xsutils.c;h=187d9f75c19303be710badc95d8de6611f7bad88;hb=76549fefd07754d43beb1146d96596a36d02db09;hp=7b2157432ffeadbd26d5091cd735f03df0f55537;hpb=4f470f63ec19cae10190b8f3ed622153f261d3b1;p=p5sagit%2Fp5-mst-13.2.git diff --git a/xsutils.c b/xsutils.c index 7b21574..187d9f7 100644 --- a/xsutils.c +++ b/xsutils.c @@ -48,7 +48,7 @@ modify_SV_attributes(pTHXo_ SV *sv, SV **retlist, SV **attrlist, int numattrs) for (nret = 0 ; numattrs && (attr = *attrlist++); numattrs--) { name = SvPV(attr, len); - if ((negated = (*name == '-')) || (*name == '+')) { + if ((negated = (*name == '-'))) { name++; len--; } @@ -84,41 +84,31 @@ modify_SV_attributes(pTHXo_ SV *sv, SV **retlist, SV **attrlist, int numattrs) continue; } break; + case 's': + if (strEQ(name, "shared")) { + if (negated) + GvSHARED_off(CvGV((CV*)sv)); + else + GvSHARED_on(CvGV((CV*)sv)); + continue; + } + break; } break; } - case SVt_IV: - case SVt_NV: - case SVt_PV: - case SVt_PVIV: - case SVt_PVNV: - case SVt_PVAV: - case SVt_PVHV: + break; + default: switch ((int)len) { - case 8: + case 6: switch (*name) { - case 'r': - if (strEQ(name, "readonly")) { - if (negated) - SvREADONLY_off(sv); - else - SvREADONLY_on(sv); - if (SvTYPE(sv) == SVt_PVAV && SvMAGIC(sv) - && mg_find(sv, 'I')) { /* @ISA */ - if (negated) - PL_hints &= ~HINT_CT_MRESOLVE; - else - PL_hints |= HINT_CT_MRESOLVE; - } - continue; + case 's': + if (strEQ(name, "shared")) { + /* toke.c has already marked as GvSHARED */ + continue; } - break; } } break; - default: - /* nothing, yet */ - break; } /* anything recognized had a 'continue' above */ *retlist++ = attr; @@ -196,6 +186,8 @@ usage: #endif if (cvflags & CVf_METHOD) XPUSHs(sv_2mortal(newSVpvn("method", 6))); + if (GvSHARED(CvGV((CV*)sv))) + XPUSHs(sv_2mortal(newSVpvn("shared", 6))); break; default: break;