From: Petr P. <pa...@us...> - 2003-04-04 18:43:08
|
Update of /cvsroot/perl-xml/XML-LibXML-XPathContext In directory sc8-pr-cvs1:/tmp/cvs-serv858 Modified Files: XPathContext.xs Changes Log Message: fixed bugs in new(), setContextNode(), and register* causing loosing stored context data passed from a variable if the variable itself gets changed Index: XPathContext.xs =================================================================== RCS file: /cvsroot/perl-xml/XML-LibXML-XPathContext/XPathContext.xs,v retrieving revision 1.30 retrieving revision 1.31 diff -u -d -r1.30 -r1.31 --- XPathContext.xs 4 Apr 2003 11:07:28 -0000 1.30 +++ XPathContext.xs 4 Apr 2003 18:42:59 -0000 1.31 @@ -451,8 +451,11 @@ croak("XPathContext: failed to allocate proxy object"); } - XPathContextDATA(ctxt)->node = pnode; - if (SvOK(pnode)) SvREFCNT_inc(pnode); + if (SvOK(pnode)) { + XPathContextDATA(ctxt)->node = newSVsv(pnode); + } else { + XPathContextDATA(ctxt)->node = &PL_sv_undef; + } XPathContextDATA(ctxt)->lock = 0; XPathContextDATA(ctxt)->pool = NULL; @@ -537,9 +540,10 @@ if (XPathContextDATA(ctxt)->node && SvOK(XPathContextDATA(ctxt)->node)) { SvREFCNT_dec(XPathContextDATA(ctxt)->node); } - XPathContextDATA(ctxt)->node = pnode; if (SvOK(pnode)) { - SvREFCNT_inc(pnode); + XPathContextDATA(ctxt)->node = newSVsv(pnode); + } else { + XPathContextDATA(ctxt)->node = &PL_sv_undef; } void @@ -615,8 +619,8 @@ if (SvOK(lookup_func)) { if ( SvROK(lookup_func) && SvTYPE(SvRV(lookup_func)) == SVt_PVCV ) { pfdr = newRV_inc((SV*) newAV()); - av_push((AV *)SvRV(pfdr), SvREFCNT_inc(lookup_func)); - av_push((AV *)SvRV(pfdr), SvREFCNT_inc(lookup_data)); + av_push((AV *)SvRV(pfdr), newSVsv(lookup_func)); + av_push((AV *)SvRV(pfdr), newSVsv(lookup_data)); } else { croak("XPathContext: 1st argument is not a CODE reference"); } @@ -691,7 +695,7 @@ strkey = SvPV(key, len); /* warn("Trying to store function '%s' in %d\n", strkey, pfdr); */ if (SvOK(func)) { - hv_store((HV *)SvRV(pfdr),strkey, len, SvREFCNT_inc(func), 0); + hv_store((HV *)SvRV(pfdr),strkey, len, newSVsv(func), 0); } else { /* unregister */ hv_delete((HV *)SvRV(pfdr),strkey, len, G_DISCARD); Index: Changes =================================================================== RCS file: /cvsroot/perl-xml/XML-LibXML-XPathContext/Changes,v retrieving revision 1.5 retrieving revision 1.6 diff -u -d -r1.5 -r1.6 --- Changes 4 Apr 2003 11:07:28 -0000 1.5 +++ Changes 4 Apr 2003 18:43:02 -0000 1.6 @@ -4,7 +4,9 @@ Not in CVS -* minor bug fix for new() without context node +* fixed bugs in new(), setContextNode(), and register* causing loosing +stored context data passed from a variable if the variable itself gets +changed 0.02 Fri Apr 4 2003 |