SEXP RecursiveRelease(SEXP obj, SEXP list) { if (!isNull(list)) { if (obj == CAR(list)) return CDR(list); else SETCDR(list, RecursiveRelease(obj, CDR(list))); } return list; }
/* TODO: This needs implementing as a Ruby destructor for each RObj */ void Robj_dealloc(VALUE self) { SEXP robj; Data_Get_Struct(self, struct SEXPREC, robj); R_References = RecursiveRelease(robj, R_References); SET_SYMVALUE(install("R.References"), R_References); return; }