[Rd] Infinite recursion in getGeneric (PR#4561)

John Chambers jmc at research.bell-labs.com
Wed Oct 15 22:29:22 MEST 2003

John Chambers wrote:
> saikat at stat.wisc.edu wrote:
> >
> >  > setClass('foo')
> > [1] "foo"
> >  > setMethod('is.logical', 'foo', function(x) TRUE)
> > [1] "is.logical"
> >  > getGeneric('is.integer')
> > Error in options(x) : evaluation is nested too deeply: infinite
> > recursion?
> This is one of a number of potential problems when methods are specified
> for  primitive functions used in the R code that dispatches methods.
> There is a fix for this particular example -- I will commit it to
> r-patched.

Committed to r-patched.

> However, the only real safety will come when primitives are not
> dispatched from a global structure (a change planned for 1.9).  Then the
> version of primitives used in method dispatch can be separated from any
> methods defined in a different namespace.
> For example, a quick test showed that even after the above fix, setting
> methods for "is.null" causes similar problems.

A list of primitives has been set up that are known or suspected to
cause this sort of problem (is.null, is.primitive, is.function,
is.object).  Until the general fix is in place, an attempt to set
methods for these functions will cause an error.

If you encounter any other primitives that produce symptoms such as
above (an "evaluation nested" error after setting a method for the
function), please report them.


John M. Chambers                  jmc at bell-labs.com
Bell Labs, Lucent Technologies    office: (908)582-2681
700 Mountain Avenue, Room 2C-282  fax:    (908)582-3340
Murray Hill, NJ  07974            web: http://www.cs.bell-labs.com/~jmc

More information about the R-devel mailing list