Georgi Boshnakov
2018-Jun-18 14:20 UTC
[Rd] incomplete results from as.character.srcref() in some cases involving quote()
Hi, The result of as,character() on 'srcref' objects doesn't have the closing ')' in some cases involving 'quote':> e4 <- quote({2+2}) > class(attr(e4, "wholeSrcref"))[1] "srcref"> as.character(attr(e4, "wholeSrcref"))[1] "e4 <- quote({2+2}" As a result printing the object also lacks it and gives an incomplete expression:> attr(e4, "wholeSrcref")e4 <- quote({2+2} It seems that it is the top level quote that suffers from this. Here the inner 'quote' has the matching ')' but the outer one doesn't:> e5 <- quote({quote({2+2})}) > class(attr(e5, "wholeSrcref"))[1] "srcref"> attr(e5, "wholeSrcref")e5 <- quote({quote({2+2})}> as.character(attr(e5, "wholeSrcref"))[1] "e5 <- quote({quote({2+2})}"> attributes(e5)... $wholeSrcref e5 <- quote({quote({2+2})} Attribute 'wholeSrcref' seems undocumented but it is of class 'srcref' which is documented (eg ?srcref) and has supporting methods. Georgi Boshnakov [[alternative HTML version deleted]]
Tomas Kalibera
2018-Jun-20 10:00 UTC
[Rd] incomplete results from as.character.srcref() in some cases involving quote()
wholeSrcref attribute is documented in ?parse to be the source reference corresponding to the already parsed text. The implementation in the parser matches the documentation - the code stops at the last byte/character of the expression, that is, on the closing brace - which is the "already parsed text". I think this works as documented (also source() uses the current implementation of wholeSrcref). Best Tomas On 06/18/2018 04:20 PM, Georgi Boshnakov wrote:> Hi, > > The result of as,character() on 'srcref' objects doesn't have the closing ')' in some cases involving 'quote': > >> e4 <- quote({2+2}) >> class(attr(e4, "wholeSrcref")) > [1] "srcref" >> as.character(attr(e4, "wholeSrcref")) > [1] "e4 <- quote({2+2}" > > As a result printing the object also lacks it and gives an incomplete expression: > >> attr(e4, "wholeSrcref") > e4 <- quote({2+2} > > It seems that it is the top level quote that suffers from this. Here the inner 'quote' has the matching ')' but the outer one doesn't: > >> e5 <- quote({quote({2+2})}) >> class(attr(e5, "wholeSrcref")) > [1] "srcref" >> attr(e5, "wholeSrcref") > e5 <- quote({quote({2+2})} >> as.character(attr(e5, "wholeSrcref")) > [1] "e5 <- quote({quote({2+2})}" >> attributes(e5) > ... > > $wholeSrcref > e5 <- quote({quote({2+2})} > > > Attribute 'wholeSrcref' seems undocumented but it is of class 'srcref' which is documented (eg ?srcref) and has supporting methods. > > > Georgi Boshnakov > > > > [[alternative HTML version deleted]] > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel
Georgi Boshnakov
2018-Jun-20 12:03 UTC
[Rd] incomplete results from as.character.srcref() in some cases involving quote()
Thanks for looking into this and sorry for the noise. I should have realised that the outermost quote() in my examples is not part of the parsed expression. Best, Georgi -----Original Message----- From: Tomas Kalibera [mailto:tomas.kalibera at gmail.com] Sent: 20 June 2018 11:01 To: Georgi Boshnakov; r-devel at r-project.org Subject: Re: [Rd] incomplete results from as.character.srcref() in some cases involving quote() wholeSrcref attribute is documented in ?parse to be the source reference corresponding to the already parsed text. The implementation in the parser matches the documentation - the code stops at the last byte/character of the expression, that is, on the closing brace - which is the "already parsed text". I think this works as documented (also source() uses the current implementation of wholeSrcref). Best Tomas On 06/18/2018 04:20 PM, Georgi Boshnakov wrote:> Hi, > > The result of as,character() on 'srcref' objects doesn't have the closing ')' in some cases involving 'quote': > >> e4 <- quote({2+2}) >> class(attr(e4, "wholeSrcref")) > [1] "srcref" >> as.character(attr(e4, "wholeSrcref")) > [1] "e4 <- quote({2+2}" > > As a result printing the object also lacks it and gives an incomplete expression: > >> attr(e4, "wholeSrcref") > e4 <- quote({2+2} > > It seems that it is the top level quote that suffers from this. Here the inner 'quote' has the matching ')' but the outer one doesn't: > >> e5 <- quote({quote({2+2})}) >> class(attr(e5, "wholeSrcref")) > [1] "srcref" >> attr(e5, "wholeSrcref") > e5 <- quote({quote({2+2})} >> as.character(attr(e5, "wholeSrcref")) > [1] "e5 <- quote({quote({2+2})}" >> attributes(e5) > ... > > $wholeSrcref > e5 <- quote({quote({2+2})} > > > Attribute 'wholeSrcref' seems undocumented but it is of class 'srcref' which is documented (eg ?srcref) and has supporting methods. > > > Georgi Boshnakov > > > > [[alternative HTML version deleted]] > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel
Apparently Analagous Threads
- incomplete results from as.character.srcref() in some cases involving quote()
- possible bug in utils::removeSource - NULL argument is silently dropped
- Is k equivalent to k:k ?
- convert expressions to characters
- Rd parser throws error for user macros invoked with empty argument