<div dir="ltr">> <span style="font-family:arial,sans-serif;font-size:13px">The point of reusing parts of clang is that we shouldn't have to write another compiler front end to parse expressions in the debugger when we've got a perfectly good one in clang.</span><div><span style="font-family:arial,sans-serif;font-size:13px"><br></span></div><div><span style="font-family:arial,sans-serif;font-size:13px">This is one of bets things about LLDB.  I've heard from someone on the gcc team that gdb is moving this way but haven't confirmed.</span></div><div><span style="font-family:arial,sans-serif;font-size:13px"><br></span></div><div><span style="font-family:arial,sans-serif;font-size:13px">Vince</span></div><div><span style="font-family:arial,sans-serif;font-size:13px"><br></span></div><div><span style="font-family:arial,sans-serif;font-size:13px"><br></span></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Oct 29, 2014 at 10:33 AM,  <span dir="ltr"><<a href="mailto:jingham@apple.com" target="_blank">jingham@apple.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5"><br>
> On Oct 29, 2014, at 12:12 AM, Bruce Mitchener <<a href="mailto:bruce.mitchener@gmail.com">bruce.mitchener@gmail.com</a>> wrote:<br>
><br>
> On Wed, Oct 29, 2014 at 1:46 PM, Matthew Gardiner <<a href="mailto:mg11@csr.com">mg11@csr.com</a>> wrote:<br>
> On Tue, 2014-10-28 at 23:40 -0700, Enrico Granata wrote:<br>
> > With that said, building LLDB requires building LLVM and clang as prerequisites.<br>
> > So there definitely is a clang available if LLDB is being built.<br>
> > I wonder if one could setup things to bootstrap a clang with gcc, and then rebuild the entire LLVM, clang, lldb toolset with that built clang.<br>
> ><br>
><br>
> Yes, of course that's possible. But I'd argue that just makes things<br>
> more complex, and less attractive for newcomers to the project.<br>
><br>
> Incidentally, why does lldb require clang to be built as a prerequisite?<br>
> Given that I can use it to debug a linux binary built with gcc, why do I<br>
> need to build another compiler along the way?<br>
><br>
> Because LLDB re-uses parts of Clang ... grep for "clang::" in the codebase and you'll see a lot of it.<br>
><br>
> I personally wish it weren't quite this way and that the layering were different ... but that ship may have sailed a long time ago.<br>
<br>
<br>
</div></div>I'm interested in why you say this?<br>
<br>
Note that the ClangASTType class and the ways it gets used don't expose all that many details of the underlying compiler & type support.  It wouldn't be a huge project to make a more generic CompilerType class, and clean up this layering so you could plug in your own type representation.  And the interface to Expression parsing is pretty language agnostic, so it would also not be that hard to plug in another compiler front end.  Some of this work needed to be done for Swift, though that isn't available in the current lldb sources.<br>
<br>
The point of reusing parts of clang is that we shouldn't have to write another compiler front end to parse expressions in the debugger when we've got a perfectly good one in clang.  Similarly we shouldn't have to invent our own strategy for representing types in the languages we support when presumably the clang folks have already done a good job at that as well.<br>
<br>
There are some challenges with getting a compiler to be fuzzier in the way that the debugger requires, but clang also needed to take on some of this challenge to support parsing for source code completion and some of the other similar tasks it does.  And though this has been work, it's been lots less work than writing a really accurate front-end/type representation.<br>
<br>
And for instance, if we ever get good support for modules in C++, we could presumably then use that to do things like instantiate template classes for types that weren't instantiated in the current program, and other cool'o things like that which would be hard to do with some hand-built C++ parser, a la gdb.<br>
<br>
Jim<br>
<br>
><br>
>  - Bruce<br>
<div class="HOEnZb"><div class="h5">><br>
> _______________________________________________<br>
> lldb-dev mailing list<br>
> <a href="mailto:lldb-dev@cs.uiuc.edu">lldb-dev@cs.uiuc.edu</a><br>
> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev</a><br>
<br>
<br>
_______________________________________________<br>
lldb-dev mailing list<br>
<a href="mailto:lldb-dev@cs.uiuc.edu">lldb-dev@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev</a><br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div dir="ltr"><br><table cellspacing="0" cellpadding="0" style="font-family:'Times New Roman'"><tbody><tr style="color:rgb(85,85,85);font-family:sans-serif;font-size:small"><td nowrap style="border-top-style:solid;border-top-color:rgb(213,15,37);border-top-width:2px">Vince Harron |</td><td nowrap style="border-top-style:solid;border-top-color:rgb(51,105,232);border-top-width:2px"> Technical Lead Manager |</td><td nowrap style="border-top-style:solid;border-top-color:rgb(0,153,57);border-top-width:2px"> <a href="mailto:vharron@google.com" target="_blank">vharron@google.com</a> |</td><td nowrap style="border-top-style:solid;border-top-color:rgb(238,178,17);border-top-width:2px"> 858-442-0868</td></tr></tbody></table><br></div>
</div>