>>>>> Gabriel Becker writes: > 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. Fixed now with - while(as.character(bdexpr[[1L]]) == "{") + while(is.call(bdexpr) && (as.character(bdexpr[[1L]]) == "{")) (the suggested fix does not work on things like foo <- function(x) {{ x }} ...) Best -k > ~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 ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel