Greetings. 2.15.0 added this behavior http://developer.r-project.org/blosxom.cgi/R-devel/NEWS/2012/03/29#n2012-03-29
o Passing R objects other than atomic vectors, functions, lists and environments to .C() is now deprecated and will give a warning. Most cases (especially NULL) are actually coding errors. NULL will be disallowed in future. This seems to make sense, except that this case includes externalptrs. I have quite a bit of code, designed to interface with various external hardware devices, which uses this sort of idiom: # for example getDeviceInfo <- function(handle) { .C("groovyDevice_getDeviceInfo", PACKAGE="groovyDevice", handle, status = as.integer(0))[-1] # skip handle } where "handle" was the result of a .Call to a routine which returned a SEXP which was the result of a R_MakeExternalPtr() call The "c" routine looked like: void groovyDevice_getDeviceInfo(SEXP handle, int *status) { groovyHandle *gh = R_ExternalPtrAddr(handle); *status = GroovyStatus(gh); } This all used to work fine. As of 2.15.0, I now get this: Warning message: In getDeviceInfo() : passing an object of type 'externalptr' to .C (arg 1) is deprecated Passing the same handle to a .Call() does [of course] work fine. I thought my usage was exactly as designed. How then should I be passing an externalptr to a .C() call? Cheers ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel