diff --git a/src/forder.c b/src/forder.c index b86f599ee..e7cb7f250 100644 --- a/src/forder.c +++ b/src/forder.c @@ -723,7 +723,7 @@ SEXP forder(SEXP DT, SEXP by, SEXP retGrpArg, SEXP retStatsArg, SEXP sortGroupsA switch(TYPEOF(x)) { case INTSXP : case LGLSXP : { - int32_t *xd = INTEGER(x); + const int32_t *xd = INTEGER_RO(x); #pragma omp parallel for num_threads(getDTthreads(nrow, true)) for (int i=0; i=xd[i-1]) i++; } break; case REALSXP : if (inherits(x,"integer64")) { - int64_t *xd = (int64_t *)REAL(x); + const int64_t *xd = (int64_t *)REAL_RO(x); while (i=xd[i-1]) i++; } else { - double *xd = REAL(x); + const double *xd = REAL_RO(x); while (i=dtwiddle(xd[i-1])) i++; // TODO: change to loop over any NA or -Inf at the beginning and then proceed without dtwiddle() (but rounding) } break; @@ -1565,7 +1565,7 @@ SEXP binary(SEXP x) static bool all1(SEXP x) { if (!isInteger(x)) internal_error_with_cleanup(__func__, "all1 got non-integer"); // # nocov - int *xp = INTEGER(x); + const int *xp = INTEGER_RO(x); for (int i=0; i= 1 && ixi <= nlevels) ? STRING_ELT(levels, ix[i]-1) : NA_STRING); } newx = PROTECT(chmatch(xchar, ulevels, NA_INTEGER)); - int *inewx = INTEGER(newx); + const int *inewx = INTEGER_RO(newx); for (int i=0; i