| #include "embeddedRCall.h" |
| |
| int callLength(SEXP obj); |
| int R_embeddedShutdown(Rboolean ask); |
| |
| main(int argc, char *argv[]) |
| { |
| SEXP objs[100]; |
| int i; |
| Rf_initEmbeddedR(sizeof(argv)/sizeof(argv[0]), argv); |
| |
| for(i = 0; i < 100; i++) { |
| objs[i] = allocVector(VECSXP, 1000); |
| R_PreserveObject(objs[i]); |
| callLength(objs[i]); |
| } |
| |
| R_embeddedShutdown(FALSE); |
| } |
| |
| int |
| callLength(SEXP obj) |
| { |
| SEXP e, val; |
| int errorOccurred; |
| int len = -1; |
| |
| PROTECT(e = lang2(install("length"), obj)); |
| val = R_tryEval(e, R_GlobalEnv, &errorOccurred); |
| len = INTEGER(val)[0]; |
| UNPROTECT(1); |
| |
| return(len); |
| } |
| |
| |
| int |
| R_embeddedShutdown(Rboolean ask) |
| { |
| |
| R_dot_Last(); |
| R_RunExitFinalizers(); |
| CleanEd(); |
| KillAllDevices(); |
| num_old_gens_to_collect = NUM_OLD_GENERATIONS; |
| R_gc(); |
| return(1); |
| } |