in src/RStudioApi.cpp [20:77]
SEXP toSEXP(const RObject &rObject) {
switch (rObject.object_case()) {
case RObject::kRString: {
ShieldSEXP x = Rf_allocVector(STRSXP, rObject.rstring().strings_size());
for (int i = 0; i < (int) rObject.rstring().strings_size(); ++i) {
SET_STRING_ELT(x, i, mkCharUTF8(rObject.rstring().strings(i)));
}
return x;
}
case RObject::kRInt: {
ShieldSEXP x = Rf_allocVector(INTSXP, rObject.rint().ints_size());
for (int i = 0; i < (int) rObject.rint().ints_size(); ++i) {
INTEGER(x)[i] = rObject.rint().ints(i);
}
return x;
}
case RObject::kRDouble: {
ShieldSEXP x = Rf_allocVector(REALSXP, rObject.rdouble().doubles_size());
for (int i = 0; i < (int) rObject.rdouble().doubles_size(); ++i) {
REAL(x)[i] = rObject.rdouble().doubles(i);
}
return x;
}
case RObject::OBJECT_NOT_SET:
return allocVector(VECSXP, 0);
case RObject::kRNull:
return R_NilValue;
case RObject::kRBoolean: {
ShieldSEXP x = Rf_allocVector(LGLSXP, rObject.rboolean().booleans_size());
for (int i = 0; i < (int) rObject.rboolean().booleans_size(); ++i) {
LOGICAL(x)[i] = rObject.rboolean().booleans(i);
}
return x;
}
case RObject::kList: {
ShieldSEXP res = allocVector(VECSXP, rObject.list().robjects_size());
for (size_t i = 0; i < rObject.list().robjects_size(); i++) {
SET_VECTOR_ELT(res, i, toSEXP(rObject.list().robjects(i)));
}
return res;
}
case RObject::kNamedList: {
ShieldSEXP names = Rf_allocVector(STRSXP, rObject.namedlist().robjects_size());
for (int i = 0; i < (int) rObject.namedlist().robjects_size(); ++i) {
SET_STRING_ELT(names, i, mkCharUTF8(rObject.namedlist().robjects(i).key()));
}
ShieldSEXP values = allocVector(VECSXP, rObject.namedlist().robjects_size());
for (size_t i = 0; i < rObject.namedlist().robjects_size(); i++) {
SET_VECTOR_ELT(values, i, toSEXP(rObject.namedlist().robjects(i).value()));
}
Rf_setAttrib(values, R_NamesSymbol, names);
return values;
}
case RObject::kError: {
error_return(rObject.error().data())
}
}
}