[cfe-dev] Borland-style PCHs in clang
Douglas Gregor
dgregor at apple.com
Wed Sep 29 07:59:17 PDT 2010
On Sep 29, 2010, at 12:12 AM, dawn at burble.org wrote:
> Sounds great. What's your "preamble support"??
It's an optimization that we use when we end up repeatedly parsing the same file (e.g., during code completion), which builds a precompiled header up to (and including) the last preprocessor directive at the top of the main file, e.g., for
#include "MyClass.h"
#include <vector>
#include <map>
void foo() { }
we would build a "precompiled preamble" containing everything up to and including the #include <map>. When we then use that precompiled preamble, we load the precompiled header and then instruct the lexer to start processing at the end of the preamble.
> May be you can point me to some code in clang that I can poke around
> in??
Lexer::ComputePreamble figures out where the preamble ends; it could be taught to recognize #pragma hdrstop.
Preprocessor::setSkipMainFilePreamble() tells the preprocessor to skip some number of bytes at the beginning of the main file, so that it can resume at the proper place after loading a precompiled preamble.
For most of the rest of the system, a precompiled preamble is just a normal precompiled header. Nothing fancy here.
Set up for the precompiled preamble is a little messy. See lib/Frontend/ASTUnit.cpp, wherever it talks about preambles.
- Doug
> -Dawn
>
> On Tue, Sep 28, 2010 at 08:18:33PM -0700, Sebastian Redl wrote:
>>
>> On Sep 28, 2010, at 6:35 PM, dawn at burble.org wrote:
>>
>>>
>>> I'm trying to figure out the best way to support Borland style PCHs in
>>> clang. Suppose we have headers x.h and y.h and file x.c
>>> as follows:
>>>
>>> #include "x.h"
>>> #include "y.h"
>>> #pragma hdrstop // everything above this line goes into the PCH
>>>
>>> What's the best way to add this support to clang?
>>
>> I think your best bet is to piggy-back on our preamble support. The main difference between that and #pragma hdrstop is that it finds the end of the includes automatically.
>>
>> Sebastian
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
More information about the cfe-dev
mailing list