Exemplo n.º 1
0
USER_OBJECT_
directConvertFromPerl(SV * perlObj, USER_OBJECT_ convert)
{
  USER_OBJECT_ ans = NULL_USER_OBJECT;

  if(TYPEOF(convert) == CLOSXP) {
     SEXP e, ref;
     PROTECT(e = allocVector(LANGSXP, 2));
     SETCAR(e, convert);

     PROTECT(ref = makeForeignPerlReference((SV*) perlObj, makeRSPerlClassVector("PerlReference"), &exportReferenceTable));
/* Alternative way of creating the reference.
     SEXP classes;
     PROTECT(classes = computeRSPerlClassVector(val, &elementType, convert));
     PROTECT(ref = makeForeignPerlReference(perlObj, classes, &exportReferenceTable)); 
*/
     SETCAR(CDR(e), ref);
     ans = Rf_eval(e, R_GlobalEnv);

     UNPROTECT(2);
  } else if(TYPEOF(convert) == EXTPTRSXP) {
     FromPerlNativeConverter f;
     if(R_ExternalPtrTag(convert) != Rf_install("native symbol")) {
       PROBLEM  "Unrecognized external pointer passed to directConvertFromPerlRoutine"
       ERROR;
     }
     f = (FromPerlNativeConverter)  R_ExternalPtrAddr(convert);
     ans = f(perlObj);
  }

  return(ans);
}
Exemplo n.º 2
0
SEXP
simplifyRList(SEXP l)
{
	int i, n;
	int type = TYPEOF(VECTOR_ELT(l, 0));
        SEXP  el;

	n = GET_LENGTH(l);
	for(i = 1; i < n  ; i++) {
  	  el = VECTOR_ELT(l, i);
          if(type != TYPEOF(el))
    	     return(l);
	}

	if(type != INTSXP && type != LGLSXP && type != STRSXP && type != REALSXP && type != CPLXSXP)
  	  return(l);

	{
		SEXP e;
		PROTECT(e = allocVector(LANGSXP, 2));
		SETCAR(e, Rf_install("unlist"));
		SETCAR(CDR(e), l);
		l = Rf_eval(e, R_GlobalEnv);
		UNPROTECT(1);
	}

	return(l);
}
Exemplo n.º 3
0
gboolean
S_PangoCairoShapeRendererFunc(cairo_t* s_cr, PangoAttrShape* s_attr, gboolean s_do_path, gpointer s_data)
{
  USER_OBJECT_ e;
  USER_OBJECT_ tmp;
  USER_OBJECT_ s_ans;
  gint err;

  PROTECT(e = allocVector(LANGSXP, 4+((R_CallbackData *)s_data)->useData));
  tmp = e;

  SETCAR(tmp, ((R_CallbackData *)s_data)->function);
  tmp = CDR(tmp);

  SETCAR(tmp, toRPointerWithCairoRef(s_cr, "Cairo", cairo));
  tmp = CDR(tmp);
  SETCAR(tmp, toRPointer(s_attr, "PangoAttrShape"));
  tmp = CDR(tmp);
  SETCAR(tmp, asRLogical(s_do_path));
  tmp = CDR(tmp);
  if(((R_CallbackData *)s_data)->useData)
  {
    SETCAR(tmp, ((R_CallbackData *)s_data)->data);
    tmp = CDR(tmp);
  }

  s_ans = R_tryEval(e, R_GlobalEnv, &err);

  UNPROTECT(1);

  if(err)
    return(((gboolean)0));
  return(((gboolean)asCLogical(s_ans)));
}
Exemplo n.º 4
0
bool
RwxTextDropTarget::OnDropText(wxCoord x, wxCoord y, const wxString &text)
{
    if(!R_OnDropText_m)
        return(false);

    SEXP e, r_ans, p;
    bool ans;

//XXX check
    PROTECT(e = allocVector(LANGSXP, 5));
    SETCAR(e, R_OnDropText_m);   p = CDR(e);
    SETCAR(p, R_make_wx_Ref(this, "RwxTextDropTarget")); p = CDR(p);
    SETCAR(p, ScalarInteger(x));  p = CDR(p);
    SETCAR(p, ScalarInteger(y));  p = CDR(p);
    SETCAR(p, wxStringToR(text));

    r_ans = Rf_eval(e, R_GlobalEnv);
    if(TYPEOF(r_ans) == LGLSXP)
        ans = LOGICAL(r_ans)[0];
    else
        ans = Rf_length(r_ans) > 0;

    UNPROTECT(1);

    return(ans);
}
Exemplo n.º 5
0
Arquivo: deriv.c Projeto: edzer/cxxr
static SEXP CreateHess(SEXP names)
{
    SEXP p, q, data, dim, dimnames;
    int i, n;
    n = length(names);
    PROTECT(dimnames = lang4(R_NilValue, R_NilValue, R_NilValue, R_NilValue));
    SETCAR(dimnames, install("list"));
    p = install("c");
    PROTECT(q = allocList(n));
    SETCADDR(dimnames, LCONS(p, q));
    UNPROTECT(1);
    for(i = 0 ; i < n ; i++) {
	SETCAR(q, ScalarString(STRING_ELT(names, i)));
	q = CDR(q);
    }
    SETCADDDR(dimnames, duplicate(CADDR(dimnames)));
    PROTECT(dim = lang4(R_NilValue, R_NilValue, R_NilValue,R_NilValue));
    SETCAR(dim, install("c"));
    SETCADR(dim, lang2(install("length"), install(".value")));
    SETCADDR(dim, ScalarInteger(length(names)));
    SETCADDDR(dim, ScalarInteger(length(names)));
    PROTECT(data = ScalarReal(0.));
    PROTECT(p = lang4(install("array"), data, dim, dimnames));
    p = lang3(install("<-"), install(".hessian"), p);
    UNPROTECT(4);
    return p;
}
Exemplo n.º 6
0
SEXP R_get_function(char *fname)
{
  SEXP expr, res;
  int error;

  printf("fname: %s\n", fname);

  SEXP robj = Rf_findVar(Rf_install(fname), R_GlobalEnv);
  if (robj == R_UnboundValue)
    return R_NilValue;
  robj = Rf_findFun(Rf_install(fname), R_GlobalEnv);

  printf("VALUE: \n");
  Rf_PrintValue(robj);


  PROTECT(expr = allocVector(LANGSXP, 2));
  SETCAR(expr, install("get"));
  SETCAR(CDR(expr), Rf_mkString(fname));
  res = R_tryEval(expr, R_GlobalEnv, &error);
  //  Rf_PrintValue(res);
  if (error) {
    //    rb_raise(rb_eRException, "R execution exception. %s", expr);
    UNPROTECT(1);
    return NULL;
  }

  UNPROTECT(1);
  return res;
}
Exemplo n.º 7
0
Arquivo: smooth.c Projeto: cran/rggobi
/**
   Computes the smoothed values for the y variable
   for the bivariate X and Y identified by column
   index for the data set in ggobi.
   This calls the R/S function currently registered
   in the variable RS_smoothFunction with three arguments:
     the numeric vectors x & y
     the desired window width as specified by the 
     the argument `width'.
 */
double *
RS_GGOBI(smooth)(int x_index, int y_index, double width, ggobid *gg)
{
  double *values;
  USER_OBJECT_  vals, tmp;
  USER_OBJECT_ e;

  if(RS_smoothFunction == NULL || RS_smoothFunction == R_UnboundValue)
    return(NULL);

     e = allocVector(LANGSXP, 4);
     PROTECT(e);
     SETCAR(e, RS_smoothFunction);
     SETCAR(CDR(e), RS_GGOBI(variableToRS)(x_index, gg));
     SETCAR(CDR(CDR(e)), RS_GGOBI(variableToRS)(y_index, gg));
     tmp = NEW_NUMERIC(1);
     NUMERIC_DATA(tmp)[0] = width;
     SETCAR(CDR(CDR(CDR(e))), tmp);

     vals = eval(e, R_GlobalEnv);


   PROTECT(vals);
   /*   PrintValue(vals); */
   values = asCArray(vals, double, asCNumeric);
   UNPROTECT(2);

   return(values);
}
Exemplo n.º 8
0
void copyListMatrix(SEXP s, SEXP t, Rboolean byrow)
{
    int nr = nrows(s), nc = ncols(s);
    R_xlen_t ns = ((R_xlen_t) nr) * nc;
    SEXP pt = t;
    if(byrow) {
	R_xlen_t NR = nr;
	SEXP tmp = PROTECT(allocVector(STRSXP, ns));
	for (int i = 0; i < nr; i++)
	    for (int j = 0; j < nc; j++) {
		SET_STRING_ELT(tmp, i + j * NR, duplicate(CAR(pt)));
		pt = CDR(pt);
		if(pt == R_NilValue) pt = t;
	    }
	for (int i = 0; i < ns; i++) {
	    SETCAR(s, STRING_ELT(tmp, i++));
	    s = CDR(s);
	}
	UNPROTECT(1);
    }
    else {
	for (int i = 0; i < ns; i++) {
	    SETCAR(s, duplicate(CAR(pt)));
	    s = CDR(s);
	    pt = CDR(pt);
	    if(pt == R_NilValue) pt = t;
	}
    }
}
Exemplo n.º 9
0
gboolean
S_PangoFontsetForeachFunc(PangoFontset* s_fontset, PangoFont* s_font, gpointer s_data)
{
  USER_OBJECT_ e;
  USER_OBJECT_ tmp;
  USER_OBJECT_ s_ans;
  gint err;

  PROTECT(e = allocVector(LANGSXP, 3+((R_CallbackData *)s_data)->useData));
  tmp = e;

  SETCAR(tmp, ((R_CallbackData *)s_data)->function);
  tmp = CDR(tmp);

  SETCAR(tmp, toRPointerWithRef(s_fontset, "PangoFontset"));
  tmp = CDR(tmp);
  SETCAR(tmp, toRPointerWithRef(s_font, "PangoFont"));
  tmp = CDR(tmp);
  if(((R_CallbackData *)s_data)->useData)
  {
    SETCAR(tmp, ((R_CallbackData *)s_data)->data);
    tmp = CDR(tmp);
  }

  s_ans = R_tryEval(e, R_GlobalEnv, &err);

  UNPROTECT(1);

  if(err)
    return(((gboolean)0));
  return(((gboolean)asCLogical(s_ans)));
} 
Exemplo n.º 10
0
Arquivo: utils.c Projeto: cran/rggobi
USER_OBJECT_
createFactor(USER_OBJECT_ vals, vartabled *vt, GGobiData *d, int which)
{
  USER_OBJECT_ labels, levels, ans, e;
  int i;

  PROTECT(levels = NEW_INTEGER(vt->nlevels));
  PROTECT(labels = NEW_CHARACTER(vt->nlevels));
  for(i = 0; i < vt->nlevels; i++) {
     INTEGER_DATA(levels)[i] = vt->level_values[i];
	 if (vt->level_names[i])
		 SET_STRING_ELT(labels, i, COPY_TO_USER_STRING(vt->level_names[i]));
  }

  PROTECT(e = allocVector(LANGSXP, 4));
  SETCAR(e, Rf_install("factor"));
  SETCAR(CDR(e), vals);
  SETCAR(CDR(CDR(e)), levels);
  SETCAR(CDR(CDR(CDR(e))), labels);

  ans = eval(e, R_GlobalEnv);

  UNPROTECT(3);
 
  return(ans);
}
Exemplo n.º 11
0
cairo_status_t
S_cairo_write_func_t(gpointer s_closure, const guchar* s_data, guint s_length)
{
  USER_OBJECT_ e;
  USER_OBJECT_ tmp;
  USER_OBJECT_ s_ans;
  gint err;

  PROTECT(e = allocVector(LANGSXP, 4));
  tmp = e;

  SETCAR(tmp, ((R_CallbackData *)s_closure)->function);
  tmp = CDR(tmp);

  SETCAR(tmp, asRRawArrayWithSize(s_data, s_length));
  tmp = CDR(tmp);
  SETCAR(tmp, asRNumeric(s_length));
  tmp = CDR(tmp);
  SETCAR(tmp, ((R_CallbackData *)s_closure)->data);
  tmp = CDR(tmp);

  s_ans = R_tryEval(e, R_GlobalEnv, &err);
  if(err)
    return(((cairo_status_t)0));

  UNPROTECT(1);
  return(((cairo_status_t)asCEnum(s_ans, CAIRO_TYPE_STATUS)));
} 
Exemplo n.º 12
0
SEXP
RClosureTable_callWithName(R_ObjectTableAction handlerType, const char * const name, R_ObjectTable *tb)
{
    SEXP obj, fun, val, e;
    int errorOccurred = FALSE;

    obj = (SEXP) tb->privateData;
    fun = RClosureTable_getFunction(obj, handlerType);
    if(!fun || fun == R_NilValue) {
        return(NEW_LOGICAL(1));
    }

    PROTECT(e = allocVector(LANGSXP,2));
    SETCAR(e, fun);
    SETCAR(CDR(e), val = NEW_CHARACTER(1));
    SET_STRING_ELT(val, 0, COPY_TO_USER_STRING(name));
#ifndef TRY_EVAL
    val = eval(e, R_GlobalEnv);
#else
    val = R_tryEval(e, NULL, &errorOccurred);
#endif
    if(errorOccurred) {
        UNPROTECT(1);
	return(R_UnboundValue);
    }
    UNPROTECT(1);
    return(val);
}
Exemplo n.º 13
0
static wxDragResult
invoke(SEXP fun, wxTextDropTarget *This, wxCoord x, wxCoord y, wxDragResult def)
{
    SEXP e, r_ans, p;
    wxDragResult ans;

    PROTECT(e = p = allocVector(LANGSXP, 5)); 
    SETCAR(e, fun);  p = CDR(p);
    SETCAR(p, R_make_wx_Ref(This, "RwxTextDropTarget"));  p = CDR(p);
    SETCAR(p, ScalarInteger(x)); p = CDR(p);
    SETCAR(p, ScalarInteger(y)); p = CDR(p);
    SETCAR(p, ScalarInteger(def));  //XX make an enum

    r_ans = Rf_eval(e, R_GlobalEnv);
    if(TYPEOF(r_ans) == INTSXP)
        ans = (wxDragResult) LOGICAL(r_ans)[0];
    else if(TYPEOF(r_ans) == REALSXP)
        ans = (wxDragResult) REAL(r_ans)[0];
    else
        ans = def;

    UNPROTECT(1);

    return(ans);
}
Exemplo n.º 14
0
int source(char *file){
    SEXP expr, s, f, p;
    int errorOccurred;

    /* Find source function */
    s = Rf_findFun(Rf_install("source"), R_GlobalEnv);
    PROTECT(s);

    /* Make file argument */
    PROTECT(f = NEW_CHARACTER(1));
    SET_STRING_ELT(f, 0, COPY_TO_USER_STRING(file));

    /* Make print.eval argument */
    PROTECT(p = NEW_LOGICAL(1));
    LOGICAL_DATA(p)[0] = (verbose)? TRUE : FALSE;

    /* expression source(f,print.eval=p) */
    PROTECT(expr = allocVector(LANGSXP,3));
    SETCAR(expr,s); 
    SETCAR(CDR(expr),f);
    SETCAR(CDR(CDR(expr)), p);
    SET_TAG(CDR(CDR(expr)), Rf_install("print.eval"));
    
    errorOccurred=0;
    R_tryEval(expr,NULL,&errorOccurred);
    UNPROTECT(4);

    return errorOccurred;
}
Exemplo n.º 15
0
int
loadXSLPackage(void)
{
  USER_OBJECT_ e, fun, tmp;
  int isError;

  PROTECT(fun = Rf_findFun(Rf_install("library"), R_GlobalEnv));
  PROTECT(e = allocVector(LANGSXP, 2));

  SETCAR(e, fun);
  SETCAR(CDR(e), tmp = NEW_CHARACTER(1));
  SET_VECTOR_ELT(tmp, 0, COPY_TO_USER_STRING("Sxslt"));
  R_tryEval(e, R_GlobalEnv, &isError);
  if(isError) {
      Rf_error("Couldn't load Sxslt package. Check the setting of R_LIBS");
/*
      fprintf(stderr, "Couldn't load Sxslt package. Check the setting of R_LIBS\n");
      fflush(stderr);
*/
  }

   
  UNPROTECT(2);
  return(TRUE);
}
Exemplo n.º 16
0
gboolean
S_PangoAttrFilterFunc(PangoAttribute* s_attribute, gpointer s_data)
{
  USER_OBJECT_ e;
  USER_OBJECT_ tmp;
  USER_OBJECT_ s_ans;
  gint err;

  PROTECT(e = allocVector(LANGSXP, 2+((R_CallbackData *)s_data)->useData));
  tmp = e;

  SETCAR(tmp, ((R_CallbackData *)s_data)->function);
  tmp = CDR(tmp);

  SETCAR(tmp, asRPangoAttributeCopy(s_attribute));
  tmp = CDR(tmp);
  if(((R_CallbackData *)s_data)->useData)
  {
    SETCAR(tmp, ((R_CallbackData *)s_data)->data);
    tmp = CDR(tmp);
  }

  s_ans = R_tryEval(e, R_GlobalEnv, &err);

  UNPROTECT(1);

  if(err)
    return(((gboolean)0));
  return(((gboolean)asCLogical(s_ans)));
} 
Exemplo n.º 17
0
SEXP rpy_remove(SEXP symbol, SEXP env, SEXP rho)
{
  SEXP c_R, call_R, res, fun_R;

  PROTECT(fun_R = rpy_findFun(install("rm"), rho));

  if(!isEnvironment(rho)) error("'rho' should be an environment");
  /* incantation to summon R */
  PROTECT(c_R = call_R = allocList(2+1));
  SET_TYPEOF(c_R, LANGSXP);
  SETCAR(c_R, fun_R);
  c_R = CDR(c_R);

  /* first argument is the name of the variable to be removed */
  SETCAR(c_R, symbol);
  //SET_TAG(c_R, install("list"));
  c_R = CDR(c_R);

  /* second argument is the environment in which the variable 
     should be removed  */
  SETCAR(c_R, env);
  SET_TAG(c_R, install("envir"));
  c_R = CDR(c_R);

  int error = 0;
  PROTECT(res = R_tryEval(call_R, rho, &error));

  UNPROTECT(3);
  return res;
}
Exemplo n.º 18
0
SEXP librinterface_remove(SEXP symbol, SEXP env, SEXP rho)
{
  SEXP c_R, call_R, res;

  static SEXP fun_R = NULL;
  /* Only fetch rm() the first time */
  if (fun_R == NULL) {
    PROTECT(fun_R = librinterface_FindFun(install("rm"), rho));
    R_PreserveObject(fun_R);
    UNPROTECT(1);
  }
  if(!isEnvironment(rho)) error("'rho' should be an environment");
  /* incantation to summon R */
  PROTECT(c_R = call_R = allocList(2+1));
  SET_TYPEOF(c_R, LANGSXP);
  SETCAR(c_R, fun_R);
  c_R = CDR(c_R);

  /* first argument is the name of the variable to be removed */
  SETCAR(c_R, symbol);
  //SET_TAG(c_R, install("list"));
  c_R = CDR(c_R);

  /* second argument is the environment in which the variable 
     should be removed  */
  SETCAR(c_R, env);
  SET_TAG(c_R, install("envir"));
  c_R = CDR(c_R);

  int error = 0;
  PROTECT(res = R_tryEval(call_R, rho, &error));

  UNPROTECT(3);
  return res;
}
Exemplo n.º 19
0
Rboolean
R_isInstanceOf(USER_OBJECT_ obj, const char *klass)
{

    USER_OBJECT_ klasses;
    int n, i;
    SEXP e, r_ans;
    Rboolean ans;

    klasses = GET_CLASS(obj);
    n = GET_LENGTH(klasses);
    for(i = 0; i < n ; i++) {
	if(strcmp(CHAR_DEREF(STRING_ELT(klasses, i)), klass) == 0)
	    return(TRUE);
    }

    PROTECT(e = allocVector(LANGSXP, 3));
    SETCAR(e, Rf_install("is"));
    SETCAR(CDR(e), obj);
    SETCAR(CDR(CDR(e)), mkString(klass));

    r_ans = Rf_eval(e, R_GlobalEnv);
    ans = LOGICAL(r_ans)[0];
    UNPROTECT(1);


    return(ans);
}
Exemplo n.º 20
0
Arquivo: xpath.c Projeto: jetaber/XML
static SEXP
convertNodeSetToR(xmlNodeSetPtr obj, SEXP fun, int encoding, SEXP manageMemory)
{
  SEXP ans, expr = NULL, arg = NULL, ref;
  int i;

  if(!obj)
     return(NULL_USER_OBJECT);

  PROTECT(ans = NEW_LIST(obj->nodeNr));

  if(GET_LENGTH(fun) && (TYPEOF(fun) == CLOSXP || TYPEOF(fun) == BUILTINSXP)) {
    PROTECT(expr = allocVector(LANGSXP, 2));
    SETCAR(expr, fun);
    arg = CDR(expr);
  } else if(TYPEOF(fun) == LANGSXP) {
    expr = fun;
    arg = CDR(expr);
  }

  for(i = 0; i < obj->nodeNr; i++) {
      xmlNodePtr el;
      el = obj->nodeTab[i];
      if(el->type == XML_ATTRIBUTE_NODE) {
#if 0
	  PROTECT(ref = mkString((el->children && el->children->content) ? XMLCHAR_TO_CHAR(el->children->content) : ""));
	  SET_NAMES(ref, mkString(el->name));
#else
	  PROTECT(ref = ScalarString(mkCharCE((el->children && el->children->content) ? XMLCHAR_TO_CHAR(el->children->content) : "", encoding)));
	  SET_NAMES(ref, ScalarString(mkCharCE(el->name, encoding)));
#endif
	  SET_CLASS(ref, mkString("XMLAttributeValue"));
	  UNPROTECT(1);
      } else if(el->type == XML_NAMESPACE_DECL)
	  ref = R_createXMLNsRef((xmlNsPtr) el);
      else
        ref = R_createXMLNodeRef(el, manageMemory);

    if(expr) {
      PROTECT(ref);
      SETCAR(arg, ref);
      PROTECT(ref = Rf_eval(expr, R_GlobalEnv)); /*XXX do we want to catch errors here? Maybe to release the namespaces. */
      SET_VECTOR_ELT(ans, i, ref);
      UNPROTECT(2);
    } else
      SET_VECTOR_ELT(ans, i, ref);
  }

  if(expr) {
    if(TYPEOF(fun) == CLOSXP || TYPEOF(fun) == BUILTINSXP)
      UNPROTECT(1);
  } else
    SET_CLASS(ans, mkString("XMLNodeSet"));

  UNPROTECT(1);

  return(ans);
}
Exemplo n.º 21
0
SEXP single_arg_R_fun(char* fun, SEXP x){
  SEXP s, t;
  t = s = PROTECT(allocList(2));
  SET_TYPEOF(s, LANGSXP);
  SETCAR(t, install(fun)); t = CDR(t);
  SETCAR(t,  x);
  UNPROTECT(1);
  return eval(s, R_GlobalEnv);
}
Exemplo n.º 22
0
/* Autoload default packages and names from autoloads.h
 *
 * This function behaves in almost every way like
 * R's autoload:
 * function (name, package, reset = FALSE, ...)
 * {
 *     if (!reset && exists(name, envir = .GlobalEnv, inherits = FALSE))
 *        stop("an object with that name already exists")
 *     m <- match.call()
 *     m[[1]] <- as.name("list")
 *     newcall <- eval(m, parent.frame())
 *     newcall <- as.call(c(as.name("autoloader"), newcall))
 *     newcall$reset <- NULL
 *     if (is.na(match(package, .Autoloaded)))
 *        assign(".Autoloaded", c(package, .Autoloaded), env = .AutoloadEnv)
 *     do.call("delayedAssign", list(name, newcall, .GlobalEnv,
 *                                                         .AutoloadEnv))
 *     invisible()
 * }
 *
 * What's missing is the updating of the string vector .Autoloaded with the list
 * of packages, which by my code analysis is useless and only for informational
 * purposes.
 *
 */
void autoloads(void){
    SEXP da, dacall, al, alcall, AutoloadEnv, name, package;
    int i,j, idx=0, errorOccurred, ptct;
    
    /* delayedAssign call*/
    PROTECT(da = Rf_findFun(Rf_install("delayedAssign"), R_GlobalEnv));
    PROTECT(AutoloadEnv = Rf_findVar(Rf_install(".AutoloadEnv"), R_GlobalEnv));
    if (AutoloadEnv == R_NilValue){
        fprintf(stderr,"%s: Cannot find .AutoloadEnv!\n", programName);
        exit(1);
    }
    PROTECT(dacall = allocVector(LANGSXP,5));
    SETCAR(dacall,da);
    /* SETCAR(CDR(dacall),name); */          /* arg1: assigned in loop */
    /* SETCAR(CDR(CDR(dacall)),alcall); */  /* arg2: assigned in loop */
    SETCAR(CDR(CDR(CDR(dacall))),R_GlobalEnv); /* arg3 */
    SETCAR(CDR(CDR(CDR(CDR(dacall)))),AutoloadEnv); /* arg3 */


    /* autoloader call */
    PROTECT(al = Rf_findFun(Rf_install("autoloader"), R_GlobalEnv));
    PROTECT(alcall = allocVector(LANGSXP,3));
    SET_TAG(alcall, R_NilValue); /* just like do_ascall() does */
    SETCAR(alcall,al);
    /* SETCAR(CDR(alcall),name); */          /* arg1: assigned in loop */
    /* SETCAR(CDR(CDR(alcall)),package); */  /* arg2: assigned in loop */

    ptct = 5;
    for(i = 0; i < packc; i++){
        idx += (i != 0)? packobjc[i-1] : 0;
        for (j = 0; j < packobjc[i]; j++){
            /*printf("autload(%s,%s)\n",packobj[idx+j],pack[i]);*/
            
            PROTECT(name = NEW_CHARACTER(1));
            PROTECT(package = NEW_CHARACTER(1));
            SET_STRING_ELT(name, 0, COPY_TO_USER_STRING(packobj[idx+j]));
            SET_STRING_ELT(package, 0, COPY_TO_USER_STRING(pack[i]));
            
            /* Set up autoloader call */
            PROTECT(alcall = allocVector(LANGSXP,3));
            SET_TAG(alcall, R_NilValue); /* just like do_ascall() does */
            SETCAR(alcall,al);
            SETCAR(CDR(alcall),name);
            SETCAR(CDR(CDR(alcall)),package);

            /* Setup delayedAssign call */
            SETCAR(CDR(dacall),name);
            SETCAR(CDR(CDR(dacall)),alcall);
            
            R_tryEval(dacall,R_GlobalEnv,&errorOccurred);
            if (errorOccurred){
                fprintf(stderr,"%s: Error calling delayedAssign!\n", programName);
                exit(1);
            }
            
            ptct += 3;
        }
    }
    UNPROTECT(ptct);
}
Exemplo n.º 23
0
/* This is a primitive SPECIALSXP */
SEXP attribute_hidden do_onexit(SEXP call, SEXP op, SEXP args, SEXP rho)
{
    RCNTXT *ctxt;
    SEXP code, oldcode, tmp, argList;
    int addit = 0;
    static SEXP do_onexit_formals = NULL;

    if (do_onexit_formals == NULL)
        do_onexit_formals = allocFormalsList2(install("expr"), install("add"));

    PROTECT(argList =  matchArgs(do_onexit_formals, args, call));
    if (CAR(argList) == R_MissingArg) code = R_NilValue;
    else code = CAR(argList);
    if (CADR(argList) != R_MissingArg) {
	addit = asLogical(eval(CADR(args), rho));
	if (addit == NA_INTEGER)
	    errorcall(call, _("invalid '%s' argument"), "add");
    }

    ctxt = R_GlobalContext;
    /* Search for the context to which the on.exit action is to be
       attached. Lexical scoping is implemented by searching for the
       first closure call context with an environment matching the
       expression evaluation environment. */
    while (ctxt != R_ToplevelContext &&
	   !((ctxt->callflag & CTXT_FUNCTION) && ctxt->cloenv == rho) )
	ctxt = ctxt->nextcontext;
    if (ctxt->callflag & CTXT_FUNCTION)
    {
	if (addit && (oldcode = ctxt->conexit) != R_NilValue ) {
	    if ( CAR(oldcode) != R_BraceSymbol )
	    {
		PROTECT(tmp = allocList(3));
		SETCAR(tmp, R_BraceSymbol);
		SETCADR(tmp, oldcode);
		SETCADDR(tmp, code);
		SET_TYPEOF(tmp, LANGSXP);
		ctxt->conexit = tmp;
		UNPROTECT(1);
	    }
	    else
	    {
		PROTECT(tmp = allocList(1));
		SETCAR(tmp, code);
		ctxt->conexit = listAppend(duplicate(oldcode),tmp);
		UNPROTECT(1);
	    }
	}
	else
	    ctxt->conexit = code;
    }
    UNPROTECT(1);
    return R_NilValue;
}
SEXP RKStructureGetter::callSimpleFun (SEXP fun, SEXP arg, SEXP env) {
	SEXP call = allocVector (LANGSXP, 2);
	PROTECT (call);
	SETCAR (call, fun);
	SETCAR (CDR (call), arg);

	SEXP ret = eval (call, env);

	UNPROTECT (1); /* call */
	return ret;
}
Exemplo n.º 25
0
Arquivo: arrr.c Projeto: tony2001/arrr
/* {{{ proto mixed R::parseEval(string code[, mixed &result])
 
 */
static PHP_METHOD(R, parseEval)
{ 
	char *code;
	int code_len, error_occured = 0;
	SEXP e1, e2, tmp, val_parse, val, next;
	zval *result = NULL;

	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|z/", &code, &code_len, &result) == FAILURE) {
		return;
	}

	if (result) {
		zval_dtor(result);
		ZVAL_NULL(result);
	}

	PROTECT(e1 = allocVector(LANGSXP, 2));
	SETCAR(e1, Rf_install("parse"));
	SETCAR(CDR(e1), tmp = NEW_CHARACTER(1));
	SET_STRING_ELT(tmp, 0, COPY_TO_USER_STRING(code));

	next = CDR(e1);
	SET_TAG(next, Rf_install("text"));

	val_parse = R_tryEval(e1, R_GlobalEnv, &error_occured);
	if (error_occured) {
		UNPROTECT(1);
		RETURN_FALSE;
	}

	/* okay, the call succeeded */
	PROTECT(val_parse);

	PROTECT(e2 = allocVector(LANGSXP, 2));
	SETCAR(e2, Rf_install("eval"));
	SETCAR(CDR(e2), val_parse);

	UNPROTECT(1);

	val = R_tryEval(e2, R_GlobalEnv, &error_occured);
	if (error_occured) {
		UNPROTECT(2);
		RETURN_FALSE;
	}

	if (result) {
		php_r_to_zval(val, result);
		UNPROTECT(2);
		RETURN_TRUE;
	} else {
		php_r_to_zval(val, return_value);
		UNPROTECT(2);
	}
}
Exemplo n.º 26
0
Arquivo: RJSON.c Projeto: cran/RJSONIO
void
R_json_parse_connection(SEXP r_input, SEXP numLines, struct JSON_parser_struct *parser)
{
    const char *input;
    unsigned int count = 0, len, totalCount = 0, lineCount = 0;
    SEXP call, ans;
    int n, i, maxNumLines;

    PROTECT(call = allocVector(LANGSXP, 3));
    SETCAR(call, Rf_install("readLines"));
    SETCAR(CDR(call), r_input);
    SETCAR(CDR(CDR(call)), ScalarInteger(1));

    maxNumLines = INTEGER(numLines)[0];

    while(1) {

      PROTECT(ans =  Rf_eval(call, R_GlobalEnv));
      n = Rf_length(ans);
      lineCount += n;

      if(n == 0) {
	  UNPROTECT(1);
	  break;
      }

      for(i = 0 ; i < n ; i++) {
	input = CHAR(STRING_ELT(ans, i));
	len = strlen(input);
	for (count = 0; count < len ; ++count, ++totalCount) {
	    int next_char = input[count];
	    if (next_char <= 0) {
		break;
	    }
	    if (!JSON_parser_char(parser, next_char)) {
		delete_JSON_parser(parser);
		PROBLEM "JSON parser error: syntax error, byte %d (%c)", totalCount, input[count]
		    ERROR;
	    }
	}
      }
      UNPROTECT(1);

      if(maxNumLines > 0 && lineCount == maxNumLines)
	  break;
    }

    UNPROTECT(1);
    if (!JSON_parser_done(parser)) {
	delete_JSON_parser(parser);
	PROBLEM "JSON parser error: syntax error, incomplete content" 
	    ERROR;
    }
}
Exemplo n.º 27
0
void
raiseError(llvm::SMDiagnostic err)
{
    SEXP e, cur;
    PROTECT(e = allocVector(LANGSXP, 4));
    SETCAR(e, Rf_install("parseIRError")); cur = CDR(e);
    SETCAR(cur, ScalarInteger(err.getLineNo())); cur = CDR(cur);
    SETCAR(cur, ScalarInteger(err.getColumnNo())); cur = CDR(cur);
    SETCAR(cur, ScalarString(mkChar(err.getMessage().data())));
    Rf_eval(e, R_GlobalEnv);
    UNPROTECT(1);
}
Exemplo n.º 28
0
int
R_is(SEXP val, const char * const klass)
{
    SEXP expr, ans;
    PROTECT(expr = allocVector(LANGSXP, 3));
    SETCAR(expr, Rf_install("is"));
    SETCAR(CDR(expr), val);
    SETCAR(CDR(CDR(expr)), ScalarString(mkChar(klass)));
    ans = Rf_eval(expr, R_GlobalEnv);
    UNPROTECT(1);
    return(LOGICAL(ans)[0]);
}
Exemplo n.º 29
0
SEXP
createCOMReferenceObject(SEXP ptr, const char *tag)
{
  SEXP e, val;
  PROTECT(e = allocVector(LANGSXP, 3));
  SETCAR(e, Rf_install("createCOMReference")); /* in RDCOMClient code. */
  SETCAR(CDR(e), ptr);
  SETCAR(CDR(CDR(e)), mkString(tag));
  val = eval(e, R_GlobalEnv);
  UNPROTECT(1);
  return(val);
}
Exemplo n.º 30
0
double
R_myFun(double val, void *data)
{
    SEXP call, ans;
    PROTECT( call = allocVector(LANGSXP, 2));
    SETCAR(call, (SEXP) data);
    SETCAR(CDR(call), ScalarReal(val));

    ans = Rf_eval(call, R_GlobalEnv);

    UNPROTECT(1);
    return(asReal(ans));
}