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