MODULE = SWISH::3 PACKAGE = SWISH::3::TokenIterator PROTOTYPES: enable swish_Token* next(self) swish_TokenIterator *self; PREINIT: char* CLASS; CODE: CLASS = TOKEN_CLASS; //warn("calling next token"); RETVAL = swish_token_iterator_next_token( self ); //warn("got next token %d", RETVAL); if (RETVAL) RETVAL->ref_cnt++; OUTPUT: RETVAL void DESTROY(self) swish_TokenIterator* self CODE: self->ref_cnt--; if (SWISH_DEBUG) { warn("DESTROY %s [0x%lx] [ref_cnt = %d]", SvPV(ST(0), PL_na), (long)self, self->ref_cnt); } /* if Analyzer ref_cnt == 1 then must free its members before freeing self */ if (self->a->ref_cnt == 1) { sp_Stash_destroy( self->a->stash ); self->a->stash = NULL; //warn("Analyzer regex refcnt = %d", SvREFCNT((SV*)self->a->regex)); SvREFCNT_dec( (SV*)self->a->regex ); self->a->regex = NULL; } if (self->ref_cnt < 1) { swish_token_iterator_free(self); }