X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=xs-src%2FMouseAccessor.xs;h=a16b2ae4ee41a8db68d5fadabefdea7a253d865e;hb=8ab2c6ab8d7a229539e3464298c59a8823a18cec;hp=fd4cf684a77fed53b7c4a29b6d333c96e5b54c45;hpb=73d8d597ca6a3ba5d79fde6b9be8e497dbae4bb8;p=gitmo%2FMouse.git diff --git a/xs-src/MouseAccessor.xs b/xs-src/MouseAccessor.xs index fd4cf68..a16b2ae 100644 --- a/xs-src/MouseAccessor.xs +++ b/xs-src/MouseAccessor.xs @@ -144,6 +144,12 @@ mouse_attr_set(pTHX_ SV* const self, MAGIC* const mg, SV* value){ SV* const trigger = mcall0s(MOUSE_mg_attribute(mg), "trigger"); dSP; + /* NOTE: triggers can remove value, so + value must be copied here, + revealed by Net::Google::DataAPI (DANJOU). + */ + value = sv_mortalcopy(value); + PUSHMARK(SP); EXTEND(SP, 2); PUSHs(self); @@ -152,6 +158,8 @@ mouse_attr_set(pTHX_ SV* const self, MAGIC* const mg, SV* value){ PUTBACK; call_sv(trigger, G_VOID | G_DISCARD); /* need not SPAGAIN */ + + assert(SvTYPE(value) != SVTYPEMASK); } PUSH_VALUE(value, flags);