3 /* equivalent to "blessed($x) && $x->isa($klass)" */
5 mouse_is_instance_of(pTHX_ SV* const sv, SV* const klass){
9 if(IsObject(sv) && SvOK(klass)){
15 ok = SvTRUEx(mcall1s(sv, "isa", klass));
28 mouse_is_class_loaded(pTHX_ SV * const klass){
33 if (!(SvPOKp(klass) && SvCUR(klass))) { /* XXX: SvPOK does not work with magical scalars */
37 stash = gv_stashsv(klass, FALSE);
42 if (( gvp = (GV**)hv_fetchs(stash, "VERSION", FALSE) )) {
43 if(isGV(*gvp) && GvSV(*gvp) && SvOK(GvSV(*gvp))){
48 if (( gvp = (GV**)hv_fetchs(stash, "ISA", FALSE) )) {
49 if(isGV(*gvp) && GvAV(*gvp) && av_len(GvAV(*gvp)) != -1){
55 while(( he = hv_iternext(stash) )){
56 GV* const gv = (GV*)HeVAL(he);
72 mouse_call0 (pTHX_ SV *const self, SV *const method)
81 call_sv(method, G_SCALAR | G_METHOD);
91 mouse_call1 (pTHX_ SV *const self, SV *const method, SV* const arg1)
102 call_sv(method, G_SCALAR | G_METHOD);
112 mouse_mg_find(pTHX_ SV* const sv, const MGVTBL* const vtbl, I32 const flags){
116 for(mg = SvMAGIC(sv); mg; mg = mg->mg_moremagic){
117 if(mg->mg_virtual == vtbl){
122 if(flags & MOUSEf_DIE_ON_FAIL){
123 croak("mouse_mg_find: no MAGIC found for %"SVf, sv_2mortal(newRV_inc(sv)));