AFAIR getAttrib() can allocate as well. Also, R API functions that do not allocate today, may allocate in the future.
Gabor On Fri, Nov 1, 2019 at 1:24 PM Jan Gorecki <j.gore...@wit.edu.pl> wrote: > > Thank you Luke. > That is why I don't use Rf_inherits but INHERITS which does not > allocate, provided in the email body. > I cannot do similarly for S4 classes, thus asking for some API for that. > > On Fri, Nov 1, 2019 at 5:56 PM Tierney, Luke <luke-tier...@uiowa.edu> wrote: > > > > On Fri, 1 Nov 2019, Jan Gorecki wrote: > > > > > Dear R developers, > > > > > > Motivated by discussion about checking inheritance of S3 and S4 > > > objects (in head matrix/array topic) I would light to shed some light > > > on a minor gap about that matter in R C API. > > > Currently we are able to check inheritance for S3 class objects from C > > > in a robust way (no allocation, thread safe). This is unfortunately > > > > Your premise is not correct. Rf_inherits will not GC but it can > > allocate and is not thread safe. > > > > Best, > > > > luke > > > > > not possible for S4 classes. I would kindly request new function in R > > > C api so it can be achieved for S4 classes with no risk of allocation. > > > For reference mentioned functions below. Thank you. > > > Jan Gorecki > > > > > > // S3 inheritance > > > bool INHERITS(SEXP x, SEXP char_) { > > > SEXP klass; > > > if (isString(klass = getAttrib(x, R_ClassSymbol))) { > > > for (int i=0; i<LENGTH(klass); i++) { > > > if (STRING_ELT(klass, i) == char_) return true; > > > } > > > } > > > return false; > > > } > > > // S4 inheritance > > > bool Rinherits(SEXP x, SEXP char_) { > > > SEXP vec = PROTECT(ScalarString(char_)); > > > SEXP call = PROTECT(lang3(sym_inherits, x, vec)); > > > bool ans = LOGICAL(eval(call, R_GlobalEnv))[0]==1; > > > UNPROTECT(2); > > > return ans; > > > } > > > > > > ______________________________________________ > > > R-devel@r-project.org mailing list > > > https://stat.ethz.ch/mailman/listinfo/r-devel > > > > > > > -- > > Luke Tierney > > Ralph E. Wareham Professor of Mathematical Sciences > > University of Iowa Phone: 319-335-3386 > > Department of Statistics and Fax: 319-335-3017 > > Actuarial Science > > 241 Schaeffer Hall email: luke-tier...@uiowa.edu > > Iowa City, IA 52242 WWW: http://www.stat.uiowa.edu > > ______________________________________________ > R-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel