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