1 #define R_NO_REMAP
2 #include <Rinternals.h>
3 #include <stdbool.h>
4
sym_protect(SEXP x)5 SEXP sym_protect(SEXP x) {
6 if (TYPEOF(x) == LANGSXP || TYPEOF(x) == SYMSXP) {
7 SEXP quote_prim = Rf_eval(Rf_install("quote"), R_BaseEnv);
8 return(Rf_lang2(quote_prim, x));
9 } else {
10 return x;
11 }
12 }
13
is_vector(SEXP x)14 bool is_vector(SEXP x) {
15 switch (TYPEOF(x)) {
16 case LGLSXP:
17 case INTSXP:
18 case REALSXP:
19 case CPLXSXP:
20 case STRSXP:
21 case RAWSXP:
22 case VECSXP:
23 return true;
24 default:
25 return false;
26 }
27 }
28
list6(SEXP s,SEXP t,SEXP u,SEXP v,SEXP w,SEXP x)29 SEXP list6(SEXP s, SEXP t, SEXP u, SEXP v, SEXP w, SEXP x) {
30 PROTECT(s);
31 s = Rf_cons(s, Rf_list5(t, u, v, w, x));
32 UNPROTECT(1);
33 return s;
34 }
35
lang7(SEXP s,SEXP t,SEXP u,SEXP v,SEXP w,SEXP x,SEXP y)36 SEXP lang7(SEXP s, SEXP t, SEXP u, SEXP v, SEXP w, SEXP x, SEXP y) {
37 PROTECT(s);
38 s = Rf_lcons(s, list6(t, u, v, w, x, y));
39 UNPROTECT(1);
40 return s;
41 }
list7(SEXP s,SEXP t,SEXP u,SEXP v,SEXP w,SEXP x,SEXP y)42 SEXP list7(SEXP s, SEXP t, SEXP u, SEXP v, SEXP w, SEXP x, SEXP y) {
43 PROTECT(s);
44 s = Rf_cons(s, list6(t, u, v, w, x, y));
45 UNPROTECT(1);
46 return s;
47 }
lang8(SEXP s,SEXP t,SEXP u,SEXP v,SEXP w,SEXP x,SEXP y,SEXP z)48 SEXP lang8(SEXP s, SEXP t, SEXP u, SEXP v, SEXP w, SEXP x, SEXP y, SEXP z) {
49 PROTECT(s);
50 s = Rf_lcons(s, list7(t, u, v, w, x, y, z));
51 UNPROTECT(1);
52 return s;
53 }
54