Hello List,
I wonder how to deal with the R SEXP Data structure in native calls.

*"Technically, [a SEXP] is a pointer to a structure with typedef SEXPREC.
A SEXP is a variant type, with subtypes for all R’s data structures"*

E.g.

   - INTSXP: integer vector
   - LGLSXP: logical vector
   - STRSXP: character vector
   - ... (and a dozen more)

When I have an imaginary generic C function like this:

SEXP fun(SEXP x, char * cmd)

how can I specify Return Value/Arguments in a 'native' call, if I cannot
know in advance to which R subtype the  SEXP Points?

On the one hand, a SEXP is like a C Datatype for a Lisp list, so one could
think that's ideal for calling C from Pil with list args and list return
values. On the other hand, how can one give the primitive specifications in
the specification lists for 'native' args/return vals, without knowing the
concrete subtype (R data structure), i.e. when CMD can be any R command
that may take/return any of the subtypes (char, logical, int, vector, list
....)?

Is there maybe a generic solution on the 'native' side too, without the
primitive specifications?
Thanks in advance and Cheers
Thorsten

PS
For those interested here two links:
Rinternals.h source code:
r-source/Rinternals.h at a1425adea54bcc98eef86081522b5dbb3e149cdc ·
wch/r-source (github.com)
<https://github.com/wch/r-source/blob/a1425adea54bcc98eef86081522b5dbb3e149cdc/src/include/Rinternals.h>

R's C Interface (blog post explaining the code/data structures)
R's C interface · Advanced R. (had.co.nz)
<http://adv-r.had.co.nz/C-interface.html>.

Reply via email to