How does C++ support create class declarations?

David Nolden zwabel at googlemail.com
Mon Feb 18 21:30:20 UTC 2008


On Monday 18 February 2008 21:56:12 Andreas Pakulat wrote:
> Thats from a simple "class Foo {};" apparently. What I don't quite
> understand here is that there's no Declaration dumped by DumpChain,
> while apparently it got created:
>
> kdevelop(31278)/kdevelop (cpp support) ContextBuilder::buildContexts: built
> top-level context with 1 declarations and 0 included files
>
> Andreas

This looks that strange because of simplified environment matching. You 
shouldn't care about that thing for python. 

Just to summarize what it does: When a file is parsed, it is represented by 2 
top-contexts: One that represents the file exactly in an ideal way in the 
eyes of the preprocessor(including problems etc.), and one that contains the 
actual duchain content. The preprocessor-context has the flag 
TopDUContext::ProxyContext set, and the first file imported into the 
proxy-context is the content-context. That's why you get just an empty 
context with one import(the proxy context). The "simplified" 
environment-matching is there to save a lot of memory, because in many cases 
files that actually have the same content are preprocessed differently 
because of included files. The name "simplified" matching is a little 
misleading though, because it's in fact very complicated. ;) For more 
information, see environmentmanager.h.

If you want to experiment, you should better do it in test_duchain.cpp, 
because simplified matching isn't used there, or you can turn it off in the 
initialization of CppLanguageSupport.

> PS: Thanks for answering all these noob questions, I owe you a beer or
> two.

No problem, Python is my scripting-language, so I am very interested in a 
usable python support some time in future  :)

Greetings, David




More information about the KDevelop-devel mailing list