X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=MOP.xs;h=4fbf38f2f1a09d1e5f4dc9675fa91236614f5d8b;hb=69b950261dbccf60b607713bc7a4c60a1245b04a;hp=315213e076bc37db52f96742a97f548435a405dc;hpb=1ed67f749ac4f9d4f8e5df0d8184e28aa1a2187f;p=gitmo%2FClass-MOP.git diff --git a/MOP.xs b/MOP.xs index 315213e..4fbf38f 100644 --- a/MOP.xs +++ b/MOP.xs @@ -344,9 +344,9 @@ get_code_info(coderef) PUSHs(newSVpv(name, 0)); } -/* This is some pretty grotty logic. It _should_ be parallel to the - pure Perl version in lib/Class/MOP.pm, so if you want to understand - it we suggest you start there. */ +# This is some pretty grotty logic. It _should_ be parallel to the +# pure Perl version in lib/Class/MOP.pm, so if you want to understand +# it we suggest you start there. void is_class_loaded(klass=&PL_sv_undef) SV *klass @@ -354,7 +354,7 @@ is_class_loaded(klass=&PL_sv_undef) HV *stash; char *key; I32 keylen; - GV *gv; + SV *gv; PPCODE: if (!SvPOK(klass) || !SvCUR(klass)) { XSRETURN_NO; @@ -390,7 +390,7 @@ is_class_loaded(klass=&PL_sv_undef) } (void)hv_iterinit(stash); - while ((gv = (GV *)hv_iternextsv(stash, &key, &keylen))) { + while ((gv = hv_iternextsv(stash, &key, &keylen))) { if (keylen <= 0) { continue; } @@ -399,7 +399,7 @@ is_class_loaded(klass=&PL_sv_undef) continue; } - if (GvCV(gv)) { + if (!isGV(gv) || GvCV(gv)) { XSRETURN_YES; } } @@ -425,7 +425,6 @@ get_all_package_symbols(self, filter=TYPE_FILTER_NONE) XSRETURN_EMPTY; } - PUTBACK; if ( (he = hv_fetch_ent((HV *)SvRV(self), key_package, 0, hash_package)) ) { @@ -434,34 +433,11 @@ get_all_package_symbols(self, filter=TYPE_FILTER_NONE) if (!stash) { - switch (GIMME_V) { - case G_SCALAR: XSRETURN_UNDEF; break; - case G_ARRAY: XSRETURN_EMPTY; break; - } + XSRETURN_UNDEF; } symbols = get_all_package_symbols(stash, filter); - - switch (GIMME_V) { - case G_SCALAR: - PUSHs(sv_2mortal(newRV_inc((SV *)symbols))); - break; - case G_ARRAY: - warn("Class::MOP::Package::get_all_package_symbols in list context is deprecated. use scalar context instead."); - - EXTEND(SP, HvKEYS(symbols) * 2); - - while ((he = hv_iternext(symbols))) { - PUSHs(hv_iterkeysv(he)); - PUSHs(sv_2mortal(SvREFCNT_inc(HeVAL(he)))); - } - - break; - default: - break; - } - - SvREFCNT_dec((SV *)symbols); + PUSHs(sv_2mortal(newRV_noinc((SV *)symbols))); void name(self)