On 12-07-19 4:41 PM, Yihui Xie wrote:
I'm not sure if there is a bug somewhere; see this example:
There's definitely a bug in the handling of empty lists, such as the
empty list of commands in your first example and the empty list of
arguments in your second. There's a partial workaround currently in
R-devel, but not a perfect fix. (This is due to me missing a conversion
from Romain's 0-based column counting to the usual 1-based counting.)
I expect it will be fixed tomorrow, or sooner.
Duncan Murdoch
getParseData(parse(text='function(x){}'))
line1 col1 line2 col2 id parent token terminal text
1 1 1 1 8 1 11 FUNCTION TRUE function
2 1 9 1 9 2 11 '(' TRUE (
3 1 10 1 10 3 5 SYMBOL_FORMALS TRUE x
4 1 11 1 11 4 11 ')' TRUE )
5 1 12 1 12 6 8 '{' TRUE {
6 1 13 1 13 7 8 '}' TRUE }
7 1 12 1 12 5 11 '}' TRUE {
8 1 12 1 13 8 11 expr FALSE
9 1 1 1 13 11 0 expr FALSE
I get an additional { in the 7th row of the 'text' column.
Another problem is that for this empty function below, there will be
an obvious pause if you run it more than once:
getParseData(parse(text='function(){}'))
and you may get wild line/col numbers like this:
line1 col1 line2 col2 id parent token terminal text
1 1 1 1 8 1 9 FUNCTION TRUE function
2 1 9 1 9 2 9 '(' TRUE (
3 1 10 1 10 3 9 ')' TRUE )
4 1 11 1 11 4 6 '{' TRUE {
5 1 12 1 12 5 6 '}' TRUE }
6 320024 11 140106360 11 11 9 '}' TRUE
7 1 11 1 12 6 9 expr FALSE
8 1 1 1 12 9 11 expr FALSE
What is worse is it can crash R:
*** caught segfault ***
address 0x9488c20, cause 'memory not mapped'
Traceback:
1: parse(text = "function(){}")
2: getSrcref(x)
3: getSrcfile(x)
4: getParseData(parse(text = "function(){}"))
sessionInfo()
R Under development (unstable) (2012-07-18 r59904)
Platform: i686-pc-linux-gnu (32-bit)
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=C LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
Regards,
Yihui
--
Yihui Xie <xieyi...@gmail.com>
Phone: 515-294-2465 Web: http://yihui.name
Department of Statistics, Iowa State University
2215 Snedecor Hall, Ames, IA
On Wed, Jul 18, 2012 at 2:31 PM, Duncan Murdoch
<murdoch.dun...@gmail.com> wrote:
I have just committed (in r59883) some changes to the R parser based on
Romain Francois' parser package. Packages that made use of parser will
hopefully find that the information in base R gives them what they need to
work with, but the data is not identical to
what parser recorded (since it was not consistent with some things already
in R). One reason for the change was that the parser in the parser package
was slightly different than the one in R; the hope is that by providing the
services in R, it will make maintenance easier for things like code
analysis, pretty printing, etc.
See ?getParseData for details, and if you are maintaining a package that
depends on parser, feel free to ask me for help in the transition, or make
suggestions for changes if I've done something that causes you too much
trouble.
Duncan Murdoch
P.S. to Qiang Li: as mentioned privately, the goal for this change was to
reproduce output equivalent to what parser did, so I have not incorporated
your suggested change to outlaw expressions like "x[[1] ]" (with an
embedded space where it shouldn't be). After things settle down we can
consider that change and others.
______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel