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

Reply via email to