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, [EMAIL PROTECTED] 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 ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel