1 #include "embeddedRCall.h"
2 
3 int callLength(SEXP obj);
4 int R_embeddedShutdown(Rboolean ask);
5 
main(int argc,char * argv[])6 main(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)22 callLength(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)38 R_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