--- JSON-XS/XS.xs 2008/03/26 01:32:53 1.80 +++ JSON-XS/XS.xs 2008/03/26 02:35:45 1.82 @@ -1800,10 +1800,12 @@ { STRLEN offset; - incr_parse (self); - if (!INCR_DONE (self)) - break; + { + incr_parse (self); + if (!INCR_DONE (self)) + break; + } XPUSHs (decode_json (self->incr_text, self, &offset)); @@ -1820,7 +1822,7 @@ CODE: { if (self->incr_pos) - croak ("incr_text can only be called after a successful incr_parse call in scalar context"); + croak ("incr_text can not be called when the incremental parser already started parsing"); RETVAL = self->incr_text ? SvREFCNT_inc (self->incr_text) : &PL_sv_undef; } @@ -1830,10 +1832,13 @@ void incr_skip (JSON *self) CODE: { - sv_chop (self->incr_text, SvPV_nolen (self->incr_text) + self->incr_pos); - self->incr_pos = 0; - self->incr_nest = 0; - self->incr_mode = 0; + if (self->incr_pos) + { + sv_chop (self->incr_text, SvPV_nolen (self->incr_text) + self->incr_pos); + self->incr_pos = 0; + self->incr_nest = 0; + self->incr_mode = 0; + } } void DESTROY (JSON *self)