[Rd] switch() disallowing multiple default values Re: Bug in parseNamespaceFile or switch( , ... ) ?
Duncan Murdoch
murdoch.duncan at gmail.com
Sun Nov 28 18:12:47 CET 2010
I've now committed changes in R-devel and R-patched to detect cases
where a call to switch() contains multiple unnamed alternatives. The
code only complains if the EXPR argument is a character string; unnamed
alternatives are fine with numeric switching.
Adding this check turned up 3 more typos like this in the base code
besides the one in parseNamespaceFile. I expect it will turn up quite a
few more in CRAN and Bioconductor packages.
Please let me know right away if you've got correct code that generates
the warnings or errors.
Duncan Murdoch
In R-devel they're an error, in R-patched they'll just give a warning.
On 27/11/2010 7:09 PM, Duncan Murdoch wrote:
> On 27/11/2010 6:50 PM, Duncan Murdoch wrote:
>> On 27/11/2010 5:58 PM, Charles C. Berry wrote:
>>>
>>> parseNamespaceFile() doesn't seem to detect misspelled directives. Looking
>>> at its code I see
>>>
>>> switch(as.character(e[[1L]]),
>>>
>>> <lots of args omitted here>,
>>>
>>> stop(gettextf("unknown namespace directive: %s",
>>> deparse(e)), call. = FALSE, domain = NA))
>>>
>>> but this doesn't seem to function as I expect, viz. to stop with an error
>>> if I type a wrong directive.
>>
>> You're right, there was a typo in parseNamespaceFile. (The typo was in
>> this line:
>>
>> "=", "<-" = {
>>
>> This should have been
>>
>> "=" =, "<-" = {
>>
>> Without the extra = sign, the "=" was taken as the default value of the
>> switch, and the stop() was never reached.
>>
>> Conceivably switch() should complain if it is called with more than one
>> default.
>
> I suspect when I fix this it's going to flush out some typos in packages
> on CRAN...
>
> Duncan Murdoch
>
>
>> Duncan Murdoch
>>
>>>
>>> Details:
>>>> # create dummy NAMESPACE file with two bad / one good directives
>>>> cat("blah( nada )\nblee( nil )\nexport( outDS )\n",file="NAMESPACE")
>>>> readLines("NAMESPACE")
>>> [1] "blah( nada )" "blee( nil )" "export( outDS )"
>>>> parseNamespaceFile("",".") # now parse it
>>> $imports
>>> list()
>>>
>>> $exports
>>> [1] "outDS"
>>>
>>> $exportPatterns
>>> character(0)
>>>
>>> $importClasses
>>> list()
>>>
>>> $importMethods
>>> list()
>>>
>>> $exportClasses
>>> character(0)
>>>
>>> $exportMethods
>>> character(0)
>>>
>>> $exportClassPatterns
>>> character(0)
>>>
>>> $dynlibs
>>> character(0)
>>>
>>> $nativeRoutines
>>> list()
>>>
>>> $S3methods
>>> [,1] [,2] [,3]
>>>
>>>>
>>>
>>> So, it picked up 'export' and ignored the other two lines.
>>>
>>>
>>> Chuck
>>>
>>> p.s.
>>>
>>>> sessionInfo()
>>> R version 2.12.0 (2010-10-15)
>>> Platform: i386-apple-darwin9.8.0/i386 (32-bit)
>>>
>>> locale:
>>> [1] C
>>>
>>> attached base packages:
>>> [1] stats graphics grDevices utils datasets methods base
>>>>
>>>
>>>
>>>
>>>
>>>
>>> Charles C. Berry Dept of Family/Preventive Medicine
>>> cberry at tajo.ucsd.edu UC San Diego
>>> http://famprevmed.ucsd.edu/faculty/cberry/ La Jolla, San Diego 92093-0901
>>>
>>> ______________________________________________
>>> R-devel at r-project.org mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>
>
More information about the R-devel
mailing list