The ASTImporter is used to import types from one AST into another. When we 
debug in LLDB, we create one AST for each binary (executable, shared library, 
etc):

"a.out" has its own AST
"libc.so" has its own AST

And now you debug and stop somewhere and you want to run an expression:

(lldb) expr (int)printf("argv[0] = '%s'\n", argv[0])

When we evaluate an expression, we create a new AST for the expression itself 
since it can define local variables and many other things (think of an 
expression that we can do with lldb like "int x=0; int y=12; x + y", this would 
not use any variables from the program, but it would define them in the 
expression AST only).

So then the following would happen:
- expression evaluation would find "argv" in the AST for "a.out", and import 
the definition into the expression AST.
- expression evaluation would find "printf" in the AST for "libc.so", and 
import the definition into the expression AST.

The importing also is done lazily and the expansion happens on demand, so if 
the "a.out" AST has a full definition for std::string, it doesn't need to 
import the full definition for "std::string" into the expresssion AST, it will 
start by importing a forward decl that can be completed on demand. This helps 
when you have an expression like:

(lldb) expr std::string *p = NULL

So the ASTImporter does smart importing from one AST to another and always 
downgrades classes with full definitions into completable forward decls in the 
destination AST.

Does this make sense?

Greg Clayton


On Aug 16, 2012, at 10:15 AM, [email protected] wrote:

> Hello,
> 
> I'm a graduate student at the University of Wisconsin Madison and am
> beginning work on a static analyzer using clang.  I've been looking at the
> ASTImporter class of clang and noticed that it doesn't seem to be complete
> and isn't used directly by any part of clang, but that LLDB does use it. 
> I was wondering if anyone could help me understand what parts of the
> ASTImporter class LLDB uses and for what overall purpose.  If anyone has
> even a little bit of insight on this topic it'd be much appreciated.
> 
> Thank you
> 
> --henry abbey
> 
> _______________________________________________
> lldb-dev mailing list
> [email protected]
> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev

_______________________________________________
lldb-dev mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev

Reply via email to