static void
moose_push_values(pTHX_ AV* const meta, SV* const value, U16 const flags){
dSP;
- if(flags & MAf_ATTR_SHOULD_AUTO_DEREF && SvROK(value) && GIMME_V == G_ARRAY){
+
+ if(flags & MAf_ATTR_SHOULD_AUTO_DEREF && GIMME_V == G_ARRAY){
+ if(!(value && SvOK(value))){
+ return;
+ }
+
if(flags & MAf_TC_IS_ARRAYREF){
AV* const av = (AV*)SvRV(value);
I32 len;
}
}
else{
- XPUSHs(value);
+ XPUSHs(value ? value : &PL_sv_undef);
}
PUTBACK;
/* get slot value */
value = MOP_mg_vtbl(mg)->get_slot(aTHX_ self, key);
- if(value){
- moose_push_values(aTHX_ meta, value, flags);
- }
+ moose_push_values(aTHX_ meta, value, flags);
}
static void