SEXP jri_getSEXPLArray(JNIEnv *env, jarray o) { SEXP ar; int l,i=0; jlong *ap; profStart(); _dbg(rjprintf(" jarray %d\n",o)); if (!o) return R_NilValue; l=(int)(*env)->GetArrayLength(env, o); _dbg(rjprintf("convert SEXPL array of length %d\n",l)); if (l<1) return R_NilValue; ap=(jlong*)(*env)->GetLongArrayElements(env, o, 0); if (!ap) { jri_error("getSEXPLArray: can't fetch array contents"); return 0; } PROTECT(ar=allocVector(VECSXP,l)); while (i<l) { SET_VECTOR_ELT(ar, i, L2SEXP(ap[i])); i++; } UNPROTECT(1); (*env)->ReleaseLongArrayElements(env, o, ap, 0); _prof(profReport("jri_getSEXPLArray[%d]:",o)); return ar; }
long r_eval(long exp, int *er){ SEXP es, exps=L2SEXP(exp); int i=0, l; if (TYPEOF(exps)==EXPRSXP) { /* if the object is a list of exps, eval them one by one */ l=LENGTH(exps); while (i<l) { es=R_tryEval(VECTOR_ELT(exps,i), R_GlobalEnv, er); i++; } } else es=R_tryEval(exps, R_GlobalEnv, er); return SEXP2L(es); }