[PATCH] Add debug method to visualize complex source locations
Manuel Klimek
klimek at google.com
Fri May 17 02:43:35 PDT 2013
I played around a bit after trying to understand Argyrios' adaptions for
makeFileCharRange, and came up with this:
Pastebin:
http://pastebin.com/g4ny0vbq
Pasted into mail (will probalby not format well in most mail programs):
Loc
|-Expansion
| |-ExpansionStart
| | |-ExpansionStart
| | | |-ExpansionStart :4:1,
| | | |-ExpansionEnd :4:16,
| | | `-Spelling :3:16,
| | |-ExpansionEnd
| | | |-ExpansionStart :4:1,
| | | |-ExpansionEnd :4:16,
| | | `-Spelling :3:19,
| | `-Spelling :2:14,
| |-ExpansionEnd
| | |-ExpansionStart
| | | |-ExpansionStart :4:1,
| | | |-ExpansionEnd :4:16,
| | | `-Spelling :3:16,
| | |-ExpansionEnd
| | | |-ExpansionStart :4:1,
| | | |-ExpansionEnd :4:16,
| | | `-Spelling :3:19,
| | `-Spelling :2:17,
| `-Spelling :1:14,
`-Spelling
|-Expansion
| |-ExpansionStart
| | |-ExpansionStart :4:1,
| | |-ExpansionEnd :4:16,
| | `-Spelling :3:16,
| |-ExpansionEnd
| | |-ExpansionStart :4:1,
| | |-ExpansionEnd :4:16,
| | `-Spelling :3:19,
| `-Spelling :2:16,
`-Spelling
|-Expansion
| |-ExpansionStart :4:1,
| |-ExpansionEnd :4:16,
| `-Spelling :3:18,
`-Spelling
|-Expansion
| |-ExpansionStart
| | |-ExpansionStart
| | | |-ExpansionStart :4:3,
| | | |-ExpansionEnd :4:15,
| | | `-Spelling :3:16,
| | |-ExpansionEnd
| | | |-ExpansionStart :4:3,
| | | |-ExpansionEnd :4:15,
| | | `-Spelling :3:19,
| | `-Spelling :2:14,
| |-ExpansionEnd
| | |-ExpansionStart
| | | |-ExpansionStart :4:3,
| | | |-ExpansionEnd :4:15,
| | | `-Spelling :3:16,
| | |-ExpansionEnd
| | | |-ExpansionStart :4:3,
| | | |-ExpansionEnd :4:15,
| | | `-Spelling :3:19,
| | `-Spelling :2:17,
| `-Spelling :1:14,
`-Spelling
|-Expansion
| |-ExpansionStart
| | |-ExpansionStart :4:3,
| | |-ExpansionEnd :4:15,
| | `-Spelling :3:16,
| |-ExpansionEnd
| | |-ExpansionStart :4:3,
| | |-ExpansionEnd :4:15,
| | `-Spelling :3:19,
| `-Spelling :2:16,
`-Spelling
|-Expansion
| |-ExpansionStart :4:3,
| |-ExpansionEnd :4:15,
| `-Spelling :3:18,
`-Spelling
|-Expansion
| |-ExpansionStart
| | |-ExpansionStart :4:7,
| | |-ExpansionEnd :4:13,
| | `-Spelling :2:14,
| |-ExpansionEnd
| | |-ExpansionStart :4:7,
| | |-ExpansionEnd :4:13,
| | `-Spelling :2:17,
| `-Spelling :1:14,
`-Spelling
|-Expansion
| |-ExpansionStart :4:7,
| |-ExpansionEnd :4:13,
| `-Spelling :2:16,
`-Spelling
|-Expansion
| |-ExpansionStart
| | |-ExpansionStart :4:9,
| | |-ExpansionEnd :4:12,
| | `-Spelling :2:14,
| |-ExpansionEnd
| | |-ExpansionStart :4:9,
| | |-ExpansionEnd :4:12,
| | `-Spelling :2:17,
| `-Spelling :1:14,
`-Spelling
|-Expansion
| |-ExpansionStart :4:9,
| |-ExpansionEnd :4:12,
| `-Spelling :2:16,
`-Spelling :4:11
On Wed, May 8, 2013 at 8:49 PM, Manuel Klimek <klimek at google.com> wrote:
> On Wed, May 8, 2013 at 6:42 PM, Chandler Carruth <chandlerc at google.com>wrote:
>
>>
>> On Wed, May 8, 2013 at 5:36 PM, Manuel Klimek <klimek at google.com> wrote:
>>
>>> In preparation for some docs on source locations I want to write I came
>>> up
>>> with the little helper method that visualizes source locations as a tree.
>>> This is especially helpful when you have many nested levels of macro
>>> expansions.
>>>
>>> Example output:
>>> (SP=(:6:14),
>>> EX=(SP=(:2:14),
>>> ES=(:6:8),
>>> EE=(:6:15)))
>>>
>>> SP = spelling
>>> EX = expansion (if there's only a single location)
>>> ES/EE = expansion start, expansion end (in case there's a range)
>>>
>>> Feel free to bikeshed about the details :D
>>>
>>
>> Two high-level questions unrelated to the code itself:
>>
>> 1) Should we visualize these trees in roughly the same tree-ish syntax as
>> AST trees? Or is it useful to visualize them on a single line *inside* the
>> AST tree?
>>
>
> I'm all for bike shed color ideas: can you create a paste with how you
> want it to look? (I tried a few things, and they all looked bad - I'm no
> good at that :P)
>
>
>> 2) Is there a way to make this part of the testing of source locations
>> which is currently done mostly through c-index-test's testing of the
>> writing out of cursor details from libclang?
>>
>
> Not sure - I really want a format that's for users; I'd be happy to create
> something more machine-readable (JSON for example), so we can use it in
> tests, though.
>
> One nit-picky detail: please don't use the initialisms.... At least, not
>> *these*. I see SP, EX, and ES in this syntax and I think "wait, is this a
>> stack machine asm chunk?? some other weird assembly language?" before my
>> mind returns to sanity. ;]
>>
>
> Just tell me what to use :) I don't have strong feelings about anything
> here - the main problem is that with 4- or 5-layer macros, this can quickly
> go deep and become unwieldy if names start getting too long (as you know me
> I of course started with "SpellingLocation" etc :)
>
> Cheers,
> /Manuel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20130517/bfd22d20/attachment.html>
More information about the cfe-commits
mailing list