[PATCH] Add debug method to visualize complex source locations
Manuel Klimek
klimek at google.com
Tue May 21 02:17:12 PDT 2013
On Fri, May 17, 2013 at 6:27 PM, Jordan Rose <jordan_rose at apple.com> wrote:
> +1 to both suggestions. For expansion locations, it'd be wonderful to see
> the actual macro invocation. For spelling locations, it'd be great to see
> the macro body if it's short enough, but even the first token of the macro
> would be really helpful.
>
I'll see what I can hack up.
And yes, without filenames this will probably be very difficult to read for
> a real source file with many transitively-included headers.
> Last-path-component would help a lot.
>
For the file locations I just use the normal location printing, so the
filename gets included - the output I pasted is from a test that uses
unnamed buffers...
Cheers,
/Manuel
>
> Jordan
>
>
> On May 17, 2013, at 4:20 , Kim Gräsman <kim.grasman at gmail.com> wrote:
>
> > Hi Manuel,
> >
> > I think the new structure works even with the intimidating location in
> > the example.
> >
> > I wonder if it would help even more if you included a source text
> > fragment from every location?
> >
> > I know I would use this to snapshot where a given location is when
> > doing AST traversals, and I think more context makes it easier to find
> > my bearings.
> >
> > Why are there leading colons in all line/col dumps? Should there be a
> > leading filename/file ID?
> >
> > Thanks,
> > - Kim
> >
> > On Fri, May 17, 2013 at 11:43 AM, Manuel Klimek <klimek at google.com>
> wrote:
> >> 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
> >>
> >>
> >>
> >> _______________________________________________
> >> cfe-commits mailing list
> >> cfe-commits at cs.uiuc.edu
> >> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
> >>
> > _______________________________________________
> > cfe-commits mailing list
> > cfe-commits at cs.uiuc.edu
> > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20130521/123e732d/attachment.html>
More information about the cfe-commits
mailing list