[rkward-cvs] SF.net SVN: rkward:[3151] branches/2010_10_18_backend_restructuring_branch/ rkward/rbackend

tfry at users.sourceforge.net tfry at users.sourceforge.net
Tue Oct 26 11:15:50 UTC 2010


Revision: 3151
          http://rkward.svn.sourceforge.net/rkward/?rev=3151&view=rev
Author:   tfry
Date:     2010-10-26 11:15:50 +0000 (Tue, 26 Oct 2010)

Log Message:
-----------
Move some support functions into the RKRSupport namespace

Modified Paths:
--------------
    branches/2010_10_18_backend_restructuring_branch/rkward/rbackend/rembedinternal.cpp
    branches/2010_10_18_backend_restructuring_branch/rkward/rbackend/rkrsupport.cpp
    branches/2010_10_18_backend_restructuring_branch/rkward/rbackend/rkrsupport.h
    branches/2010_10_18_backend_restructuring_branch/rkward/rbackend/rkstructuregetter.cpp

Modified: branches/2010_10_18_backend_restructuring_branch/rkward/rbackend/rembedinternal.cpp
===================================================================
--- branches/2010_10_18_backend_restructuring_branch/rkward/rbackend/rembedinternal.cpp	2010-10-26 08:15:17 UTC (rev 3150)
+++ branches/2010_10_18_backend_restructuring_branch/rkward/rbackend/rembedinternal.cpp	2010-10-26 11:15:50 UTC (rev 3151)
@@ -29,6 +29,7 @@
 #include "../core/robject.h"
 #include "../debug.h"
 
+#include "rkrsupport.h"
 #include "rklocalesupport.h"
 #include "rkpthreadsupport.h"
 #include "rksignalsupport.h"
@@ -46,9 +47,7 @@
 #include <sys/resource.h>
 #include <sys/types.h>
 #endif
-#include <math.h>
 
-
 extern "C" {
 #define R_INTERFACE_PTRS 1
 // for R_CStackStart/Limit
@@ -102,15 +101,10 @@
 #include <R_ext/eventloop.h>
 }
 
-#include "rkrsupport.h"
 #include "../rkglobals.h"
 #include "rdata.h"
 
-SEXP RKWard_RData_Tag;
-QString *SEXPToStringList (SEXP from_exp, unsigned int *count);
-QString SEXPToString (SEXP from_exp);
-int *SEXPToIntArray (SEXP from_exp, unsigned int *count);
-int SEXPToInt (SEXP from_exp, int def_value = INT_MIN);
+extern SEXP RKWard_RData_Tag;
 SEXP parseCommand (const QString &command_qstring, RThread::RKWardRError *error);
 SEXP runCommandInternalBase (SEXP pr, RThread::RKWardRError *error);
 
@@ -231,7 +225,7 @@
 					// fully transmitted, but R is still asking for more? This looks like an incomplete statement.
 					// HOWEVER: It may also have been an empty statement such as " ", so let's check whether the prompt looks like a "continue" prompt
 					bool incomplete = false;
-					if (RThread::this_pointer->current_locale_codec->toUnicode (prompt) == SEXPToString (Rf_GetOption (Rf_install ("continue"), R_BaseEnv))) {
+					if (RThread::this_pointer->current_locale_codec->toUnicode (prompt) == RKRSupport::SEXPToString (Rf_GetOption (Rf_install ("continue"), R_BaseEnv))) {
 						incomplete = true;
 					}
 					MUTEX_LOCK;
@@ -251,7 +245,7 @@
 				RThread::this_pointer->commandFinished ();
 			} else if (RThread::repl_status.user_command_status == RThread::RKReplStatus::UserCommandRunning) {
 				// it appears, the user command triggered a call to readline.
-				int n_frames = SEXPToInt (RKRSupport::callSimpleFun0 (Rf_findFun (Rf_install ("sys.nframe"), R_BaseEnv), R_GlobalEnv));
+				int n_frames = RKRSupport::SEXPToInt (RKRSupport::callSimpleFun0 (Rf_findFun (Rf_install ("sys.nframe"), R_BaseEnv), R_GlobalEnv));
 				if (n_frames < 1) {
 					// No active frames? This is either a browser() call at toplevel, or R jumped us back to toplevel, behind our backs.
 					// For safety, let's reset and start over.
@@ -431,10 +425,10 @@
 
 	// this function would be much shorter, if SEXPToStringList would simply return a QStringList...
 	unsigned int files_count, titles_count;
-	QString *file_strings = SEXPToStringList (files, &files_count);
-	QString *title_strings = SEXPToStringList (titles, &titles_count);
-	QString wtitle_string = SEXPToString (wtitle);
-	bool del_files = SEXPToInt (del, 0) != 0;
+	QString *file_strings = RKRSupport::SEXPToStringList (files, &files_count);
+	QString *title_strings = RKRSupport::SEXPToStringList (titles, &titles_count);
+	QString wtitle_string = RKRSupport::SEXPToString (wtitle);
+	bool del_files = RKRSupport::SEXPToInt (del, 0) != 0;
 
 	RK_ASSERT (files_count == titles_count);
 	RK_ASSERT (files_count >= 1);
@@ -508,7 +502,7 @@
 SEXP doDialog (SEXP caption, SEXP message, SEXP button_yes, SEXP button_no, SEXP button_cancel, SEXP wait) {
 	RK_TRACE (RBACKEND);
 
-	int result = doDialogHelper (SEXPToString (caption), SEXPToString (message), SEXPToString (button_yes), SEXPToString (button_no), SEXPToString (button_cancel), SEXPToInt (wait));
+	int result = doDialogHelper (RKRSupport::SEXPToString (caption), RKRSupport::SEXPToString (message), RKRSupport::SEXPToString (button_yes), RKRSupport::SEXPToString (button_no), RKRSupport::SEXPToString (button_cancel), RKRSupport::SEXPToInt (wait));
 
 	SEXP ret = Rf_allocVector(INTSXP, 1);
 	INTEGER (ret)[0] = result;
@@ -678,176 +672,6 @@
 	RThread::repl_status.eval_depth--;
 }
 
-/** converts SEXP to strings, and returns the first string (or QString(), if SEXP contains no strings) */
-QString SEXPToString (SEXP from_exp) {
-	RK_TRACE (RBACKEND);
-
-	QString ret;
-
-	unsigned int count;
-	QString *list = SEXPToStringList (from_exp, &count);
-
-	if (count >= 1) ret = list[0];
-	delete [] list;
-	return ret;
-}
-
-QString *SEXPToStringList (SEXP from_exp, unsigned int *count) {
-	RK_TRACE (RBACKEND);
-
-	// bad format? coerce the vector first
-	if (TYPEOF (from_exp) != STRSXP) {
-		SEXP strexp;
-		PROTECT (strexp = Rf_coerceVector (from_exp, STRSXP));
-		QString *list = SEXPToStringList (strexp, count);
-		UNPROTECT (1);
-		return list;
-	}
-
-	// format already good? Avoid coercion (and associated copying)
-	*count = Rf_length (from_exp);
-	QString *list = new QString[*count];
-	unsigned int i = 0;
-	for (; i < *count; ++i) {
-		SEXP dummy = STRING_ELT (from_exp, i);
-
-		if (TYPEOF (dummy) != CHARSXP) {
-			list[i] = QString ("not defined");	// can this ever happen?
-		} else {
-			if (dummy == NA_STRING) {
-				list[i] = QString::null;
-			} else {
-				if (IS_UTF8 (dummy)) {
-					list[i] = QString::fromUtf8 ((char *) STRING_PTR (dummy));
-				} else if (IS_LATIN1 (dummy)) {
-					list[i] = QString::fromLatin1 ((char *) STRING_PTR (dummy));
-				} else {
-					list[i] = RThread::this_pointer->current_locale_codec->toUnicode ((char *) STRING_PTR (dummy));
-				}
-			}
-		}
-	}
-
-	return list;
-}
-
-int *SEXPToIntArray (SEXP from_exp, unsigned int *count) {
-	RK_TRACE (RBACKEND);
-
-	int *integers;
-
-	// bad format? coerce the vector first
-	if (TYPEOF (from_exp) != INTSXP) {
-		SEXP intexp;
-		PROTECT (intexp = Rf_coerceVector (from_exp, INTSXP));
-		integers = SEXPToIntArray (intexp, count);
-		UNPROTECT (1);
-		return integers;
-	}
-
-	// format already good? Avoid coercion (and associated copying)
-	*count = Rf_length (from_exp);
-	integers = new int[*count];
-	for (unsigned int i = 0; i < *count; ++i) {
-		integers[i] = INTEGER (from_exp)[i];
-		if (integers[i] == R_NaInt) integers[i] = INT_MIN;		// this has no effect for now, but if R ever chnages it's R_NaInt, then it will
-	}
-	return integers;
-}
-
-/** converts SEXP to integers, and returns the first int (def_value, if SEXP contains no ints) */
-int SEXPToInt (SEXP from_exp, int def_value) {
-	RK_TRACE (RBACKEND);
-
-	int ret = def_value;
-	unsigned int count;
-	int *integers = SEXPToIntArray (from_exp, &count);
-	if (count >= 1) ret = integers[0];
-	delete [] integers;
-
-	return ret;
-}
-
-double *SEXPToRealArray (SEXP from_exp, unsigned int *count) {
-	RK_TRACE (RBACKEND);
-
-	double *reals;
-
-	// bad format? coerce the vector first
-	if (TYPEOF (from_exp) != REALSXP) {
-		SEXP realexp;
-		PROTECT (realexp = Rf_coerceVector (from_exp, REALSXP));
-		reals = SEXPToRealArray (realexp, count);
-		UNPROTECT (1);
-		return reals;
-	}
-	
-	// format already good? Avoid coercion (and associated copying)
-	*count = Rf_length (from_exp);
-	reals = new double[*count];
-	for (unsigned int i = 0; i < *count; ++i) {
-		reals[i] = REAL (from_exp)[i];
-		if (R_IsNaN (reals[i]) || R_IsNA (reals[i]) ) reals[i] = RKGlobals::na_double;
-	}
-	return reals;
-}
-
-RData *SEXPToRData (SEXP from_exp) {
-	RK_TRACE (RBACKEND);
-
-	RData *data = new RData;
-
-	unsigned int count;
-	int type = TYPEOF (from_exp);
-	switch (type) {
-		case LGLSXP:
-		case INTSXP:
-			data->data = SEXPToIntArray (from_exp, &count);
-			data->datatype = RData::IntVector;
-			break;
-		case REALSXP:
-			data->data = SEXPToRealArray (from_exp, &count);
-			data->datatype = RData::RealVector;
-			break;
-		case VECSXP:
-			count = 0;
-			count = Rf_length (from_exp);
-			{
-				RData **structure_array = new RData*[count];
-				for (unsigned int i=0; i < count; ++i) {
-					SEXP subexp = VECTOR_ELT (from_exp, i);
-					//PROTECT (subexp);	// should already be protected as part of the parent from_exp
-					structure_array[i] = SEXPToRData (subexp);
-					//UNPROTECT (1);
-				}
-				data->data = structure_array;
-			}
-			data->datatype = RData::StructureVector;
-			break;
-/*		case NILSXP:
-			data->data = 0;
-			data->datatype = RData::NoData;
-			count = 0;
-			break; */
-		case EXTPTRSXP:
-			if (R_ExternalPtrTag (from_exp) == RKWard_RData_Tag) {		// our very own data
-				delete data;
-				data = (RData*) R_ExternalPtrAddr (from_exp);
-				R_ClearExternalPtr (from_exp);
-				count = data->length;
-				break;
-			}
-		case STRSXP:
-		default:
-			data->data = SEXPToStringList (from_exp, &count);
-			data->datatype = RData::StringVector;
-	}
-
-	data->length = count;
-
-	return data;
-}
-
 SEXP doError (SEXP call) {
 	RK_TRACE (RBACKEND);
 
@@ -855,7 +679,7 @@
 		RThread::this_pointer->repl_status.user_command_status = RThread::RKReplStatus::UserCommandFailed;
 	}
 	unsigned int count;
-	QString *strings = SEXPToStringList (call, &count);
+	QString *strings = RKRSupport::SEXPToStringList (call, &count);
 	RThread::this_pointer->handleError (strings, count);
 	delete [] strings;
 	return R_NilValue;
@@ -865,7 +689,7 @@
 	RK_TRACE (RBACKEND);
 
 	unsigned int count;
-	QString *strings = SEXPToStringList (call, &count);
+	QString *strings = RKRSupport::SEXPToStringList (call, &count);
 	QStringList list;
 	for (unsigned int i = 0; i < count; ++i) {
 		list.append (strings[i]);
@@ -1155,15 +979,15 @@
 		if (error == NoError) {
 			if (ctype & RCommand::GetStringVector) {
 				retdata.datatype = RData::StringVector;
-				retdata.data = SEXPToStringList (exp, &(retdata.length));
+				retdata.data = RKRSupport::SEXPToStringList (exp, &(retdata.length));
 			} else if (ctype & RCommand::GetRealVector) {
 				retdata.datatype = RData::RealVector;
-				retdata.data = SEXPToRealArray (exp, &(retdata.length));
+				retdata.data = RKRSupport::SEXPToRealArray (exp, &(retdata.length));
 			} else if (ctype & RCommand::GetIntVector) {
 				retdata.datatype = RData::IntVector;
-				retdata.data = SEXPToIntArray (exp, &(retdata.length));
+				retdata.data = RKRSupport::SEXPToIntArray (exp, &(retdata.length));
 			} else if (ctype & RCommand::GetStructuredData) {
-				RData *dummy = SEXPToRData (exp);
+				RData *dummy = RKRSupport::SEXPToRData (exp);
 				retdata.setData (*dummy);
 				delete dummy;
 			}

Modified: branches/2010_10_18_backend_restructuring_branch/rkward/rbackend/rkrsupport.cpp
===================================================================
--- branches/2010_10_18_backend_restructuring_branch/rkward/rbackend/rkrsupport.cpp	2010-10-26 08:15:17 UTC (rev 3150)
+++ branches/2010_10_18_backend_restructuring_branch/rkward/rbackend/rkrsupport.cpp	2010-10-26 11:15:50 UTC (rev 3151)
@@ -17,8 +17,21 @@
 
 #include "rkrsupport.h"
 
+#include <Rdefines.h>
+
+// needed to detect CHARSXP encoding
+#define IS_UTF8(x) (Rf_getCharCE(x) == CE_UTF8)
+#define IS_LATIN1(x) (Rf_getCharCE(x) == CE_LATIN1)
+
+#include <QTextCodec>
+
+#include "../rkglobals.h"
+#include "rembedinternal.h"
 #include "../debug.h"
 
+// This is sort of idiotic, but placing RKWard_RData_Tag into the RKRSupport-namespace somehow confuses the hell out of G++ (4.4.5)
+SEXP RKWard_RData_Tag;
+
 SEXP RKRSupport::callSimpleFun0 (SEXP fun, SEXP env) {
 	SEXP call = Rf_allocVector (LANGSXP, 1);
 	PROTECT (call);
@@ -60,3 +73,173 @@
 	RK_ASSERT (TYPEOF (res) == LGLSXP);
 	return ((bool) LOGICAL (res)[0]);
 }
+
+/** converts SEXP to strings, and returns the first string (or QString(), if SEXP contains no strings) */
+QString RKRSupport::SEXPToString (SEXP from_exp) {
+	RK_TRACE (RBACKEND);
+
+	QString ret;
+
+	unsigned int count;
+	QString *list = SEXPToStringList (from_exp, &count);
+
+	if (count >= 1) ret = list[0];
+	delete [] list;
+	return ret;
+}
+
+QString *RKRSupport::SEXPToStringList (SEXP from_exp, unsigned int *count) {
+	RK_TRACE (RBACKEND);
+
+	// bad format? coerce the vector first
+	if (TYPEOF (from_exp) != STRSXP) {
+		SEXP strexp;
+		PROTECT (strexp = Rf_coerceVector (from_exp, STRSXP));
+		QString *list = SEXPToStringList (strexp, count);
+		UNPROTECT (1);
+		return list;
+	}
+
+	// format already good? Avoid coercion (and associated copying)
+	*count = Rf_length (from_exp);
+	QString *list = new QString[*count];
+	unsigned int i = 0;
+	for (; i < *count; ++i) {
+		SEXP dummy = STRING_ELT (from_exp, i);
+
+		if (TYPEOF (dummy) != CHARSXP) {
+			list[i] = QString ("not defined");	// can this ever happen?
+		} else {
+			if (dummy == NA_STRING) {
+				list[i] = QString::null;
+			} else {
+				if (IS_UTF8 (dummy)) {
+					list[i] = QString::fromUtf8 ((char *) STRING_PTR (dummy));
+				} else if (IS_LATIN1 (dummy)) {
+					list[i] = QString::fromLatin1 ((char *) STRING_PTR (dummy));
+				} else {
+					list[i] = RThread::this_pointer->current_locale_codec->toUnicode ((char *) STRING_PTR (dummy));
+				}
+			}
+		}
+	}
+
+	return list;
+}
+
+int *RKRSupport::SEXPToIntArray (SEXP from_exp, unsigned int *count) {
+	RK_TRACE (RBACKEND);
+
+	int *integers;
+
+	// bad format? coerce the vector first
+	if (TYPEOF (from_exp) != INTSXP) {
+		SEXP intexp;
+		PROTECT (intexp = Rf_coerceVector (from_exp, INTSXP));
+		integers = SEXPToIntArray (intexp, count);
+		UNPROTECT (1);
+		return integers;
+	}
+
+	// format already good? Avoid coercion (and associated copying)
+	*count = Rf_length (from_exp);
+	integers = new int[*count];
+	for (unsigned int i = 0; i < *count; ++i) {
+		integers[i] = INTEGER (from_exp)[i];
+		if (integers[i] == R_NaInt) integers[i] = INT_MIN;		// this has no effect for now, but if R ever chnages it's R_NaInt, then it will
+	}
+	return integers;
+}
+
+/** converts SEXP to integers, and returns the first int (def_value, if SEXP contains no ints) */
+int RKRSupport::SEXPToInt (SEXP from_exp, int def_value) {
+	RK_TRACE (RBACKEND);
+
+	int ret = def_value;
+	unsigned int count;
+	int *integers = SEXPToIntArray (from_exp, &count);
+	if (count >= 1) ret = integers[0];
+	delete [] integers;
+
+	return ret;
+}
+
+double *RKRSupport::SEXPToRealArray (SEXP from_exp, unsigned int *count) {
+	RK_TRACE (RBACKEND);
+
+	double *reals;
+
+	// bad format? coerce the vector first
+	if (TYPEOF (from_exp) != REALSXP) {
+		SEXP realexp;
+		PROTECT (realexp = Rf_coerceVector (from_exp, REALSXP));
+		reals = SEXPToRealArray (realexp, count);
+		UNPROTECT (1);
+		return reals;
+	}
+	
+	// format already good? Avoid coercion (and associated copying)
+	*count = Rf_length (from_exp);
+	reals = new double[*count];
+	for (unsigned int i = 0; i < *count; ++i) {
+		reals[i] = REAL (from_exp)[i];
+		if (R_IsNaN (reals[i]) || R_IsNA (reals[i]) ) reals[i] = RKGlobals::na_double;
+	}
+	return reals;
+}
+
+RData *RKRSupport::SEXPToRData (SEXP from_exp) {
+	RK_TRACE (RBACKEND);
+
+	RData *data = new RData;
+
+	unsigned int count;
+	int type = TYPEOF (from_exp);
+	switch (type) {
+		case LGLSXP:
+		case INTSXP:
+			data->data = SEXPToIntArray (from_exp, &count);
+			data->datatype = RData::IntVector;
+			break;
+		case REALSXP:
+			data->data = SEXPToRealArray (from_exp, &count);
+			data->datatype = RData::RealVector;
+			break;
+		case VECSXP:
+			count = 0;
+			count = Rf_length (from_exp);
+			{
+				RData **structure_array = new RData*[count];
+				for (unsigned int i=0; i < count; ++i) {
+					SEXP subexp = VECTOR_ELT (from_exp, i);
+					//PROTECT (subexp);	// should already be protected as part of the parent from_exp
+					structure_array[i] = SEXPToRData (subexp);
+					//UNPROTECT (1);
+				}
+				data->data = structure_array;
+			}
+			data->datatype = RData::StructureVector;
+			break;
+/*		case NILSXP:
+			data->data = 0;
+			data->datatype = RData::NoData;
+			count = 0;
+			break; */
+		case EXTPTRSXP:
+			if (R_ExternalPtrTag (from_exp) == RKWard_RData_Tag) {		// our very own data
+				delete data;
+				data = (RData*) R_ExternalPtrAddr (from_exp);
+				R_ClearExternalPtr (from_exp);
+				count = data->length;
+				break;
+			}
+		case STRSXP:
+		default:
+			data->data = SEXPToStringList (from_exp, &count);
+			data->datatype = RData::StringVector;
+	}
+
+	data->length = count;
+
+	return data;
+}

Modified: branches/2010_10_18_backend_restructuring_branch/rkward/rbackend/rkrsupport.h
===================================================================
--- branches/2010_10_18_backend_restructuring_branch/rkward/rbackend/rkrsupport.h	2010-10-26 08:15:17 UTC (rev 3150)
+++ branches/2010_10_18_backend_restructuring_branch/rkward/rbackend/rkrsupport.h	2010-10-26 11:15:50 UTC (rev 3151)
@@ -18,8 +18,13 @@
 #ifndef RKRSUPPORT_H
 #define RKRSUPPORT_H
 
-#include <QString>
+#include <limits.h>
 
+#include <QStringList>
+
+#include "rdata.h"
+
+#define R_NO_REMAP 1
 #include <Rdefines.h>
 
 /** Convenience functions for working with R. */
@@ -28,6 +33,13 @@
 	SEXP callSimpleFun (SEXP fun, SEXP arg, SEXP env);
 	SEXP callSimpleFun2 (SEXP fun, SEXP arg1, SEXP arg2, SEXP env);
 	bool callSimpleBool (SEXP fun, SEXP arg, SEXP env);
+
+	QString *SEXPToStringList (SEXP from_exp, unsigned int *count);
+	QString SEXPToString (SEXP from_exp);
+	int *SEXPToIntArray (SEXP from_exp, unsigned int *count);
+	int SEXPToInt (SEXP from_exp, int def_value = INT_MIN);
+	double *SEXPToRealArray (SEXP from_exp, unsigned int *count);
+	RData *SEXPToRData (SEXP from_exp);
 };
 
-#endif
\ No newline at end of file
+#endif

Modified: branches/2010_10_18_backend_restructuring_branch/rkward/rbackend/rkstructuregetter.cpp
===================================================================
--- branches/2010_10_18_backend_restructuring_branch/rkward/rbackend/rkstructuregetter.cpp	2010-10-26 08:15:17 UTC (rev 3150)
+++ branches/2010_10_18_backend_restructuring_branch/rkward/rbackend/rkstructuregetter.cpp	2010-10-26 11:15:50 UTC (rev 3151)
@@ -78,7 +78,7 @@
 	envir_depth = INTEGER (envlevel)[0];
 
 	unsigned int count;
-	QString *name_dummy = SEXPToStringList (name, &count);
+	QString *name_dummy = RKRSupport::SEXPToStringList (name, &count);
 	RK_ASSERT (count == 1);
 	QString name_string = name_dummy[0];
 	delete [] name_dummy;
@@ -202,7 +202,7 @@
 		PROTECT (classes_s);
 	}
 
-	QString *classes = SEXPToStringList (classes_s, &count);
+	QString *classes = RKRSupport::SEXPToStringList (classes_s, &count);
 	unsigned int num_classes = count;
 	UNPROTECT (1);	/* classes_s */
 
@@ -251,7 +251,7 @@
 
 		SEXP meta_s = RKRSupport::callSimpleFun (get_meta_fun, value, R_GlobalEnv);
 		PROTECT (meta_s);
-		metadata->data = SEXPToStringList (meta_s, &count);
+		metadata->data = RKRSupport::SEXPToStringList (meta_s, &count);
 		metadata->length = count;
 		UNPROTECT (1);	/* meta_s */
 	} else {
@@ -274,7 +274,7 @@
 	unsigned int num_dims;
 	SEXP dims_s = RKRSupport::callSimpleFun (dims_fun, value, R_BaseEnv);
 	if (!Rf_isNull (dims_s)) {
-		dims = SEXPToIntArray (dims_s, &num_dims);
+		dims = RKRSupport::SEXPToIntArray (dims_s, &num_dims);
 	} else {
 		num_dims = 1;
 
@@ -286,7 +286,7 @@
 				dims = new int[1];
 				dims[0] = len;
 			} else {
-				dims = SEXPToIntArray (len_s, &num_dims);
+				dims = RKRSupport::SEXPToIntArray (len_s, &num_dims);
 			}
 			UNPROTECT (1); /* len_s */
 		} else {
@@ -340,7 +340,7 @@
 			childnames_s = R_NilValue; // dummy
 		}
 		PROTECT (childnames_s);
-		QString *childnames = SEXPToStringList (childnames_s, &childcount);
+		QString *childnames = RKRSupport::SEXPToStringList (childnames_s, &childcount);
 
 		childdata->length = childcount;
 		RData **children = new RData*[childcount];
@@ -423,12 +423,12 @@
 		SEXP formals_s = RKRSupport::callSimpleFun (get_formals_fun, value, R_GlobalEnv);
 		PROTECT (formals_s);
 		// the default values
-		funargvaluesdata->data = SEXPToStringList (formals_s, &(funargvaluesdata->length));
+		funargvaluesdata->data = RKRSupport::SEXPToStringList (formals_s, &(funargvaluesdata->length));
 
 		// the argument names
 		SEXP names_s = Rf_getAttrib (formals_s, R_NamesSymbol);
 		PROTECT (names_s);
-		funargsdata->data = SEXPToStringList (names_s, &(funargsdata->length));
+		funargsdata->data = RKRSupport::SEXPToStringList (names_s, &(funargsdata->length));
 
 		UNPROTECT (2); /* names_s, formals_s */
 	}


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the rkward-tracker mailing list