From 4ef6ab5fdddb4016c4b3015ff764c262bd616a91 Mon Sep 17 00:00:00 2001 From: badasahog <52379863+badasahog@users.noreply.github.com> Date: Wed, 10 Sep 2025 04:16:33 -0400 Subject: [PATCH 1/3] Data desegregation + minor formatting improvements + constness improvements --- src/assign.c | 49 ++++++++++++++++++++++--------------------------- 1 file changed, 22 insertions(+), 27 deletions(-) diff --git a/src/assign.c b/src/assign.c index eee00cc0f5..6c48a88828 100644 --- a/src/assign.c +++ b/src/assign.c @@ -2,21 +2,19 @@ static void finalizer(SEXP p) { - SEXP x; - R_len_t n, l, tl; if(!R_ExternalPtrAddr(p)) internal_error(__func__, "didn't receive an ExternalPtr"); // # nocov p = R_ExternalPtrTag(p); if (!isString(p)) internal_error(__func__, "ExternalPtr doesn't see names in tag"); // # nocov - l = LENGTH(p); - tl = TRUELENGTH(p); + const R_len_t l = LENGTH(p); + const R_len_t tl = TRUELENGTH(p); if (l<0 || tl0 && tltl) return(shallow(dt,R_NilValue,n)); // usual case (increasing alloc) if (n Date: Mon, 1 Jun 2026 09:14:45 +0200 Subject: [PATCH 2/3] restore translation --- src/assign.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/assign.c b/src/assign.c index b31151b51c..f31f65215f 100644 --- a/src/assign.c +++ b/src/assign.c @@ -177,7 +177,7 @@ SEXP setdt_nrows(SEXP x) SEXP alloccol(SEXP dt, R_len_t n, Rboolean verbose) { if (isNull(dt)) error(_("alloccol has been passed a NULL dt")); - if (TYPEOF(dt) != VECSXP) error(_("dt passed to alloccol isn't type VECSXP")); + if (TYPEOF(dt) != VECSXP) error(_("dt passed to %s isn't type VECSXP"), "alloccol"); SEXP klass = getAttrib(dt, R_ClassSymbol);// klass not class at request of pydatatable because class is reserved word in C++, PR #3129 if (isNull(klass)) error(_("dt passed to alloccol has no class attribute. Please report result of traceback() to data.table issue tracker.")); const R_len_t l = LENGTH(dt); From 153815d4af2f55e080060316b23c0b681c42fe6c Mon Sep 17 00:00:00 2001 From: Benjamin Schwendinger <52290390+ben-schwen@users.noreply.github.com> Date: Mon, 1 Jun 2026 09:15:27 +0200 Subject: [PATCH 3/3] dont use TRUELENGTH --- src/assign.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/assign.c b/src/assign.c index f31f65215f..57f0e6eb9b 100644 --- a/src/assign.c +++ b/src/assign.c @@ -192,7 +192,7 @@ SEXP alloccol(SEXP dt, R_len_t n, Rboolean verbose) // if (TRUELENGTH(getAttrib(dt,R_NamesSymbol))!=tl) // internal_error(__func__, "tl of dt passes checks, but tl of names (%d) != tl of dt (%d)", tl, TRUELENGTH(getAttrib(dt,R_NamesSymbol))); // # nocov - const R_len_t tl = TRUELENGTH(dt); + const R_len_t tl = R_maxLength(dt); // R <= 2.13.2 and we didn't catch uninitialized tl somehow if (tl<0) internal_error(__func__, "tl of class is marked but tl<0"); // # nocov if (tl>0 && tl