[Rd] problem with findFun call from embedded R

Joe Conway mail at joeconway.com
Fri Jul 6 19:35:41 CEST 2007


Jeffrey Horner wrote:
> Joe Conway wrote:
>> I was debugging a problem reported to me regarding PL/R, and found 
>> that I can duplicate it using only R sources. It might be 
>> characterized as possibly a misuse of the findFun() function, but I 
>> leave that for the R devel experts to decide.

>> My question is -- is the above an abuse of findFun() by RNamedCall.c 
>> (meaning I should avoid the same pattern)? Or maybe it should be 
>> wrapped in something similar to R_ToplevelExec?

> Yes, when one embeds R, findFun() will call error() which causes the 
> longjmp() to the top level, so the embedding application shouldn't use 
> findFun().

OK, thanks for the confirmation. I just wonder if RNamedCall.c ought to 
be changed then...

>  Here's what I've written for the next version of RApache. Note that 
> it's behavior is slightly different than the original findFun(), in that 
> it doesn't search the enclosing environments. (Also, comments welcome as 
> the implementation is based on the original, and I'm unsure if promise 
> evaluation is needed.)
> 
> 
> /* This one doesn't longjmp when function not found */
> static SEXP MyfindFun(SEXP symb, SEXP envir){

Yes, if I patch RNamedCall.c with the attached (based on your function), 
everything seems to work.

Thanks,

Joe


-------------- next part --------------
A non-text attachment was scrubbed...
Name: myfindfun.diff
Type: text/x-patch
Size: 667 bytes
Desc: not available
Url : https://stat.ethz.ch/pipermail/r-devel/attachments/20070706/caba9bd9/attachment.bin 


More information about the R-devel mailing list