From 81f32e5fc1f482d53f39a2f7bf945a0f13d1bb87 Mon Sep 17 00:00:00 2001 From: Lukas Stadler <lukas.stadler@oracle.com> Date: Wed, 2 Aug 2017 10:29:31 +0200 Subject: [PATCH] add character vector argument to .C tests in testrffi --- .../packages/testrffi/testrffi/R/testrffi.R | 2 +- .../packages/testrffi/testrffi/src/init.c | 2 +- .../packages/testrffi/testrffi/src/testrffi.c | 10 ++++++++-- .../packages/testrffi/testrffi/src/testrffi.h | 2 +- 4 files changed, 11 insertions(+), 5 deletions(-) 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 a5783eb3aa..35437998a3 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 e47d7a69e8..d2179c3af5 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 0721954ee0..3c02ded719 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 3570fbd380..3228612efb 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); -- GitLab