From murdoch at stats.uwo.ca  Wed Dec 28 20:32:19 2005
From: murdoch at stats.uwo.ca (murdoch@stats.uwo.ca)
Date: Wed, 28 Dec 2005 20:32:19 +0100 (CET)
Subject: [Rd] .Call not counting parameters consistently (PR#8450)
Message-ID: <20051228193219.52B4519A2F@slim.kubism.ku.dk>

The R_registerRoutines C function allows the number of parameters to a
.Call function to be registered.  For example, the tools package
function md5sum() calls "Rmd5", which has been registered to require
just one parameter.

But if it is called with the wrong number of parameters, only the first
error gets caught:

  > library(tools)
  > .Call("Rmd5",1,2,PACKAGE="tools")
Error: Incorrect number of arguments (2), expecting 1 for Rmd5
  > .Call("Rmd5",1,2,PACKAGE="tools")
Error: argument 'files' must be character

This happens in Windows versions of R-patched and R-devel.  Charlie
Geyer was bitten by this in his fuzzyRankTests package (version 0.3),
which fails check because of it on Windows, but not on Unix.  I haven't
done any testing on Unix.

I've traced into the do_dotcall function in src/main/dotcode.c, and I
see that on the second call the "symbol.symbol.call" member is NULL, so
no test is done, but I don't see why this is happening.  The
resolveNativeRoutine function does some strange stuff.

Duncan Murdoch



[Rd] .Call not counting parameters consistently (PR#8450)
murdoch@stats.uwo.ca