Duncan Murdoch wrote:
On 18/04/2009 10:12 AM, Romain Francois wrote:
Hello,
Could the code that auto prints a function/closure be extracted from
print.c so that there would be a print.closure function.
I would like to be able to mask a print.closure function so that I
have a custom auto-print. One reason for that is I plan to have
syntax highlighting within the R console.
The class of a closure is "function", so you'd want the method to be
print.function. Currently that doesn't work for auto printing, so
your suggestion is still interesting. (I'm not sure why auto printing
is special here...)
Duncan Murdoch
Apparently, auto printing does not use the regular dispatch mechanism.
See below:
I'll make a more concrete proposal. This could be an opportunity to
nail down as.character.function as well.
Romain
(from print.c)
* print.default() -> do_printdefault (with call tree below)
*
* auto-printing -> PrintValueEnv
* -> PrintValueRec
* -> call print() for objects
and PrintValueRec switches on the typeof :
switch (TYPEOF(s)) {
...
case CLOSXP:
case LANGSXP:
t = getAttrib(s, R_SourceSymbol);
if (!isString(t) || !R_print.useSource)
t = deparse1(s, 0, R_print.useSource | DEFAULTDEPARSE);
for (i = 0; i < LENGTH(t); i++)
Rprintf("%s\n", CHAR(STRING_ELT(t, i))); /* translated */
#ifdef BYTECODE
if (TYPEOF(s) == CLOSXP && isByteCode(BODY(s)))
Rprintf("<bytecode: %p>\n", BODY(s));
#endif
if (TYPEOF(s) == CLOSXP) {
t = CLOENV(s);
if (t != R_GlobalEnv)
Rprintf("%s\n", EncodeEnvironment(t));
}
break;
--
Romain Francois
Independent R Consultant
+33(0) 6 28 91 30 30
http://romainfrancois.blog.free.fr
______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel