[Rd] level of mutability for the type of a SEXP
    Prof Brian Ripley 
    ripley at stats.ox.ac.uk
       
    Fri Feb 22 08:45:32 CET 2008
    
    
  
On Tue, 19 Feb 2008, Laurent Gautier wrote:
> Dear list,
>
> I am writing C code to interface with R, and I would like to know the
> level of mutability for the type of a SEXP.
>
> I see that there is a macro/function TYPEOF(), and that it can be used
> as an l-value, as well as a macro/function SET_TYPEOF().
The macros are not available to user code, so TYPEOF is not available to 
use as an l-value.
> My question is "should the type be considered immutable, or it can it
> change after the SEXP has been created and used for a while ?".
>
> I understand that a call to TYPEOF will not perform any conversion,
> and my question is only about being sure that once the type of a given
> SEXP is set it cannot change.
It is SEXPRECs that have types, and their type can be changed and in a few 
cases is in R's internal code.  You should only change type between 
SEXPREC types with the same structure, e.g. from VECSXP to EXPRSXP or 
DOTSXP to LISTSXP.  I am unaware of any examples where this happens that 
involve a SEXPREC pointed to by a SEXP not in the internal code concerned.
Since a SEXP is a pointer, the type of the SEXPREC it points to can change 
(as which SEXPREC it is can) and frequently does -- that is one way 
arguments are coerced.
The R Internals manual has the details of the SEXPRECs and their 
structure.
I don't see the value of knowing though.  Anyone who needs to ask about R 
internals should regard the arguments passed to .Call/.External calls as 
read-only and also assume that there is no simultaneous evaluation going 
on that might change them.
-- 
Brian D. Ripley,                  ripley at stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595
    
    
More information about the R-devel
mailing list