Hi Mikael,
On 8/28/22 01:13, Mikael Jagan wrote:
R_check_class_etc(x, valid) spends a nontrivial amount of time finding
an environment 'rho' containing the definition of class(x), evaluating
(in R, not C) methods::.classEnv(class(x)).
It then returns the result of R_check_class_and_super(x, valid, rho).
But R_check_class_and_super() does not use 'rho' at all in the trivial
case where class(x) is found in 'valid'.
right, that could be improved. Do you have an example which exhibits the
problem, have you found this by profiling something?
My feeling is that this can be improved. I am happy to contribute a
patch,
if it would be considered by R-core.
Both R_check_class_etc and R_check_class_and_super are unfortunately
exported, the former is used a lot in packages (even though they are not
mentioned in Writing R Extensions, so actually shouldn't be used in
packages). Anyway, it would be easier if we could preserve their
interface and behavior.
Maybe we could support rho==NULL in R_check_class_and_super, the
environment would be looked up in that case when needed.
R_check_class_etc would simply only call R_check_class_and_super with
that argument. I see that R_check_class_and_super uses asChar() on the
class attribute, while R_check_class_etc does not currently for looking
for the environment, but I assume doing that in both cases should not
matter (and it would have to be tested).
So this would be a trivial change, but if you wanted to create a minimal
patch, I will be happy to have a look.
Best
Tomas
Mikael
______________________________________________
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