[Rd] Passing externalptr to .C()

From: Rick Sayre <whorfin_at_pixar.com>
Date: Fri, 11 May 2012 14:20:13 -0700


2.15.0 added this behavior

     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",
	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:
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?


R-devel_at_r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel Received on Fri 11 May 2012 - 21:42:00 GMT

This quarter's messages: by month, or sorted: [ by date ] [ by thread ] [ by subject ] [ by author ]

All messages

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Fri 11 May 2012 - 22:51:09 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-devel. Please read the posting guide before posting to the list.

list of date sections of archive