1 #include "embeddedRCall.h" 2 3 int callLength(SEXP obj); 4 int R_embeddedShutdown(Rboolean ask); 5 main(int argc,char * argv[])6main(int argc, char *argv[]) 7 { 8 SEXP objs[100]; 9 int i; 10 Rf_initEmbeddedR(sizeof(argv)/sizeof(argv[0]), argv); 11 12 for(i = 0; i < 100; i++) { 13 objs[i] = allocVector(VECSXP, 1000); 14 R_PreserveObject(objs[i]); 15 callLength(objs[i]); 16 } 17 18 R_embeddedShutdown(FALSE); 19 } 20 21 int callLength(SEXP obj)22callLength(SEXP obj) 23 { 24 SEXP e, val; 25 int errorOccurred; 26 int len = -1; 27 28 PROTECT(e = lang2(install("length"), obj)); 29 val = R_tryEval(e, R_GlobalEnv, &errorOccurred); 30 len = INTEGER(val)[0]; 31 UNPROTECT(1); 32 33 return(len); 34 } 35 36 37 int R_embeddedShutdown(Rboolean ask)38R_embeddedShutdown(Rboolean ask) 39 { 40 41 R_dot_Last(); 42 R_RunExitFinalizers(); 43 CleanEd(); 44 KillAllDevices(); 45 num_old_gens_to_collect = NUM_OLD_GENERATIONS; 46 R_gc(); 47 return(1); 48 } 49