diff --git a/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/R/testrffi.R b/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/R/testrffi.R index a5783eb3aaa5604a17734b19b1245e4508904209..35437998a38d75cef15151c61d01940c5f2ffd00 100644 --- a/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/R/testrffi.R +++ b/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/R/testrffi.R @@ -2,7 +2,7 @@ library.dynam.unload("testrffi", libpath) rffi.dotCModifiedArguments <- function(data) { - .C("dotCModifiedArguments", length(data), as.integer(data), as.double(data), as.logical(data)) + .C("dotCModifiedArguments", length(data), as.integer(data), as.double(data), as.logical(data), as.character(data)) } rffi.addInt <- function(a, b) { diff --git a/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/src/init.c b/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/src/init.c index e47d7a69e84048e9d039650065a9f73cc58245cf..d2179c3af541553dfce520484500608f235240e6 100644 --- a/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/src/init.c +++ b/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/src/init.c @@ -26,7 +26,7 @@ #include "testrffi.h" static const R_CMethodDef CEntries[] = { - {"dotCModifiedArguments", (DL_FUNC) &dotCModifiedArguments, 4}, + {"dotCModifiedArguments", (DL_FUNC) &dotCModifiedArguments, 5}, {NULL, NULL, 0} }; diff --git a/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/src/testrffi.c b/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/src/testrffi.c index 0721954ee062797dd9665fab25cda0c47c66f54d..3c02ded7195d2bdfc1afe4d02c350bab16112755 100644 --- a/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/src/testrffi.c +++ b/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/src/testrffi.c @@ -30,7 +30,7 @@ #include <Rinterface.h> #include "testrffi.h" -void dotCModifiedArguments(int* len, int* idata, double* rdata, int* ldata) { +void dotCModifiedArguments(int* len, int* idata, double* rdata, int* ldata, char** cdata) { for (int i = 0; i < len[0]; i++) { idata[i] ++; } @@ -38,7 +38,13 @@ void dotCModifiedArguments(int* len, int* idata, double* rdata, int* ldata) { rdata[i] *= 0.2; } for (int i = 0; i < len[0]; i++) { - ldata[i] = ldata[i] == 0 ? 1 : 0; + ldata[i] = ldata[i] == 0 ? 1 : 0; + } + for (int i = 0; i < len[0]; i++) { + for (int j = 0; cdata[i][j] != 0; j++) { + char c = cdata[i][j]; + cdata[i][j] = (c >= '0' && c <= '9') ? c - '0' + 'a' : 'r'; + } } } diff --git a/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/src/testrffi.h b/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/src/testrffi.h index 3570fbd380e33f17ff192da16728702fa01536a0..3228612efb4e332b1a7a53ebc6e3d2037d8b2f52 100644 --- a/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/src/testrffi.h +++ b/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/src/testrffi.h @@ -20,7 +20,7 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -extern void dotCModifiedArguments(int* len, int* idata, double* rdata, int* ldata); +extern void dotCModifiedArguments(int* len, int* idata, double* rdata, int* ldata, char** cdata); extern SEXP addInt(SEXP a, SEXP b);