I added that so I can look at the proposed fix and put it or something similar in bugzilla for review final review.
Apologies for the oversight. ~G On Wed, Aug 19, 2020 at 3:40 PM Antoine Fabri <antoine.fa...@gmail.com> wrote: > Dear R-devel, > > utils::isS3stdGeneric tries to subset the body of the function it's fed, > primitives don't like that because they don't have a body, identity doesn't > like it either because it's body is a symbol. > > According to the doc, any function is a legal input. > > See below: > > identity > #> function (x) > #> x > #> <bytecode: 0x0000000013d6da28> > #> <environment: namespace:base> > > max > #> function (..., na.rm = FALSE) .Primitive("max") > > isS3stdGeneric(identity) > #> Error in bdexpr[[1L]]: objet de type 'symbol' non indiçable > > isS3stdGeneric(max) > #> Error in while (as.character(bdexpr[[1L]]) == "{") bdexpr <- > bdexpr[[2L]]: l'argument est de longueur nulle > > Here is a simple fix : > > isS3stdGeneric <- function(f) { > { > bdexpr <- body(f) > if(is.null(bdexpr) || !is.call(bdexpr)) return(FALSE) > while (as.character(bdexpr[[1L]]) == "{") bdexpr <- bdexpr[[2L]] > ret <- is.call(bdexpr) && identical(bdexpr[[1L]], as.name > ("UseMethod")) > if (ret) > names(ret) <- bdexpr[[2L]] > ret > } > } > > isS3stdGeneric(identity) > #> [1] FALSE > isS3stdGeneric(max) > #> [1] FALSE > > Best, > > Antoine > > [[alternative HTML version deleted]] > > ______________________________________________ > R-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel > [[alternative HTML version deleted]] ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel