Closed joshuaulrich closed 4 years ago
@eddelbuettel My preliminary checks suggest this is going to affect RcppXts. My understanding is that I need to do one of two things to do_merge_xts()
and isXts()
:
init.c
, orSEXP
arguments and return SEXP
(isXts()
returns int
).What are your thoughts/preferences?
To clarify, not registering a function will not solve the problem. If a function is not registered, but is called via .Call
, it still has to return SEXP
and all of its arguments must be SEXP
.
I got a similar email from Tomas and already fixed it (in digest
). Based on that experience, there are two orthogonal issus here:
.Call()
when the signature is different (doh)digest
now does in its init.cHaven't looked at xts
yet.
Edited again, adding an important not above
Yes, functions for use with RegisterCCallable
/GetCCallable
only (not .Call
) do not have such restrictions.
Thank you both for your input! It looks like I only need to stop registering those functions for .Call()
. Neither of them are called via .Call()
in xts:
josh@thinkpad: ~/git/xts/R (master)
> grep -E "\.Call\(.(isXts|do_merge_xts)" *
That also means RcppXts should be okay, since the function signatures do not need to change.
All C functions called via
.Call()
must returnSEXP
and have allSEXP
arguments. This is not true fordo_merge_xts()
andisXts()
. This may change the API, and impact RcppXts. Need to confirm.Via email from @kalibera: