Index: unique.c =================================================================== --- unique.c (revision 48503) +++ unique.c (working copy) @@ -462,16 +462,18 @@ for (i = 0; i < data.M; i++) h[i] = NIL; if(from_last) for (i = n-1; i >= 0; i--) { -#define IS_DUPLICATED_CHECK - if(isDuplicated(x, i, &data)) { - Rboolean isDup = TRUE; - for(j = 0; j < m; j++) - if(data.equal(x, i, incomp, j)) { - isDup = FALSE; break; - } - if(isDup) - return ++i; - /* else continue */ +#define IS_DUPLICATED_CHECK \ + if(isDuplicated(x, i, &data)) { \ + Rboolean isDup = TRUE; \ + for(j = 0; j < m; j++) \ + if(data.equal(x, i, incomp, j)) { \ + isDup = FALSE; break; \ + } \ + if(isDup) { \ + UNPROTECT(1); \ + return ++i; \ + } \ + /* else continue */ \ } IS_DUPLICATED_CHECK; } @@ -480,6 +482,7 @@ IS_DUPLICATED_CHECK; } + UNPROTECT(1) ; return 0; }