@@ -71,16 +71,35 @@ namespace Rcpp {
7171 }
7272
7373 /* * construct a string from a single CHARSXP SEXP */
74- String (SEXP charsxp) : data(charsxp), valid(true ), buffer_ready(false ), enc(Rf_getCharCE(charsxp)) {
74+ String (SEXP charsxp) : data(R_NilValue) {
75+ if (TYPEOF (charsxp) == STRSXP) {
76+ data = STRING_ELT (charsxp, 0 );
77+ } else if (TYPEOF (charsxp) == CHARSXP) {
78+ data = charsxp;
79+ }
80+
7581 if (::Rf_isString (data) && ::Rf_length (data) != 1 )
7682 throw ::Rcpp::not_compatible (" expecting a single value" );
83+
84+ valid = true ;
85+ buffer_ready = false ;
86+ enc = Rf_getCharCE (data);
7787 Rcpp_PreserveObject (data);
7888 RCPP_STRING_DEBUG (" String(SEXP)" );
7989 }
8090
81- String (SEXP charsxp, const std::string& enc) : data(charsxp), valid(true ), buffer_ready(false ) {
91+ String (SEXP charsxp, const std::string& enc) : data(R_NilValue) {
92+ if (TYPEOF (charsxp) == STRSXP) {
93+ data = STRING_ELT (charsxp, 0 );
94+ } else if (TYPEOF (charsxp) == CHARSXP) {
95+ data = charsxp;
96+ }
97+
8298 if (::Rf_isString (data) && ::Rf_length (data) != 1 )
8399 throw ::Rcpp::not_compatible (" expecting a single value" );
100+
101+ valid = true ;
102+ buffer_ready = false ;
84103 Rcpp_PreserveObject (data);
85104 set_encoding (enc);
86105 RCPP_STRING_DEBUG (" String(SEXP)" );
0 commit comments