--- CBOR-XS/XS.xs 2013/12/10 13:54:40 1.40 +++ CBOR-XS/XS.xs 2013/12/10 14:01:52 1.41 @@ -1449,7 +1449,7 @@ PUSHs (sv_2mortal (newSVuv (offset - SvPVX (cborstr)))); } -void incr_parse (CBOR *self, SV *cborstr, int chop = 0) +void incr_parse (CBOR *self, SV *cborstr) PPCODE: { if (SvUTF8 (cborstr)) @@ -1464,7 +1464,7 @@ av_push (self->incr_count, newSViv (1)); } - for (;;) + do { if (!incr_parse (self, cborstr)) { @@ -1475,25 +1475,21 @@ break; } - SV *sv; - char *offset; + SV *sv; + char *offset; - PUTBACK; sv = decode_cbor (cborstr, self, &offset); SPAGAIN; - XPUSHs (sv); + PUTBACK; sv = decode_cbor (cborstr, self, &offset); SPAGAIN; + XPUSHs (sv); - av_clear (self->incr_count); - av_push (self->incr_count, newSViv (1)); + sv_chop (cborstr, offset); - if (chop) - { - self->incr_pos = 0; - sv_chop (cborstr, offset); - } - else - self->incr_pos = offset - SvPVX (cborstr); + av_clear (self->incr_count); + av_push (self->incr_count, newSViv (1)); - self->incr_need = self->incr_pos + 1; + self->incr_pos = 0; + self->incr_need = self->incr_pos + 1; } + while (GIMME_V == G_ARRAY); } void incr_reset (CBOR *self)