akyrtzi added a comment. In https://reviews.llvm.org/D34263#783770, @voskresensky.vladimir wrote:
> What I find problematic in this patch is PPOpts->SingleFileParseMode checks. > Let's suppose we implement what I mentioned above => how is it going to > co-exist nicely? I think code will be less understandable with both: check of > flag and call to PPCallbacks. > What I propose is to move the logic from the PPOpts single flag into > PPCallbacks. And from check of flag to query of PPCallbacks. > Of course when you create PPCallbacks you can consult global > SingleFileParseMode to create default implementation to answer "any symbol is > defined", so you get your use-case easily handled, but it also gives others > more flexibility. There is a bit of misunderstanding on what this patch is doing, the patch is not about answering "any symbol is defined". See my cfe-dev email (http://lists.llvm.org/pipermail/cfe-dev/2017-June/054254.html) that provides some more context. The patch is doing these 2 things: - Keep track of whether a preprocessor directive condition used a symbol that was not resolved at all - If above is true then make the preprocessor parse all directive blocks, not arbitrary choose one of them. Here's an example to clarify the difference: Say that you have this code: #if TARGET_IOS @interface A @end #else @interface B @end #endif 1. Without any changes this will happen: - TARGET_IOS is unresolved so it will be treated as `0` - `#if` block will be skipped, `#else` will be parsed - AST will contain `@interface B` 2. With adding a PPCallback that answers "any symbol is defined" (what you are proposing): - TARGET_IOS is undefined but the PPCallback sets it to `1` - `#if` block will be parsed, `#else` will be skipped - AST will contain `@interface A` 3. With this patch and enabling `SingleFileParseMode` - TARGET_IOS is unresolved - Both `#if` and `#else` blocks will be parsed - AST will contain both `@interface A` and `@interface B` As you can see 2. and 3. above are not overlapping so they can "co-exist nicely" like this: - TARGET_IOS is undefined, ask the PPCallback if it has a value for it or not - If the callback provides a value then parse as 1. or 2. depending on the value - If the callback cannot provide a specific value then parse as 3. https://reviews.llvm.org/D34263 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits