| /* |
| Tests the R error handling in an application |
| which embeds R. Here, we generate the error by calling stop(). |
| We also provide an on.exit() also. |
| */ |
| |
| #include "embeddedRCall.h" |
| #include "R_ext/RStartup.h" |
| |
| |
| int |
| main(int argc, char *argv[]) |
| { |
| SEXP e; |
| int errorOccurred; |
| char *localArgs[] = {"R", "--silent"}; |
| init_R(sizeof(localArgs)/sizeof(localArgs[0]), localArgs); |
| |
| /* |
| Evaluates the two expressions: |
| source("error.R") |
| and then calls foo() twice |
| where foo is defined in the file error.R |
| */ |
| PROTECT(e = lang2(install("source"), mkString("error.R"))); |
| R_tryEval(e, R_GlobalEnv, &errorOccurred); |
| UNPROTECT(1); |
| |
| PROTECT(e = lang1(install("foo"))); |
| R_tryEval(e, R_GlobalEnv, &errorOccurred); |
| fprintf(stderr, "Trying again (yes it will fail also!)\n");fflush(stderr); |
| R_tryEval(e, R_GlobalEnv, &errorOccurred); |
| UNPROTECT(1); |
| |
| end_R(); |
| |
| return(0); |
| } |