On 2025-08-18 2:25 p.m., Josiah Parry wrote:
*Question:* what is the best way to access a DOTSXP from R's C API in a
function call.
Over at extendr (1) we'd like to be able to utilize `...` from the body of
a Rust function—with initial motivation being to support S3 generics like
print(x, ...).
I don't see any recommendations / or mention of accessing DOTSXP in WRE.
The closest I can find is from R internals (2) repo which says
"Easiest to get to with findVar(R_DotsSymbol, env) or similar."
From R's C API would this mean we would want to use something like:
findVar(R_DotsSymbol, R_GetCurrentEnv()) to get the dots pairlist from the
function's environment?
It's almost certainly easier to pass something like list(...) to your
external function. That will evaluate each of the arguments in the
appropriate environments and put them in a list.
If you want to receive the promises without them being evaluated, I
don't know if there's a documented way to do it in the C API. You could
always use the tidyverse approach and ask your users to pass formulas
instead of expressions.
Duncan Murdoch
______________________________________________
R-package-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-package-devel