[cfe-commits] r84267 - in /cfe/trunk: include/clang-c/Index.h include/clang/AST/DeclBase.h include/clang/Frontend/ASTUnit.h lib/Frontend/ASTUnit.cpp lib/Frontend/PCHReaderDecl.cpp lib/Frontend/PCHWriterDecl.cpp test/Index/c-index-pch.c tools/CIndex/CIndex.cpp tools/CIndex/CIndex.exports tools/c-index-test/c-index-test.c
Fariborz Jahanian
fjahanian at apple.com
Fri Oct 16 13:10:48 PDT 2009
On Oct 16, 2009, at 1:01 PM, Douglas Gregor wrote:
> Author: dgregor
> Date: Fri Oct 16 15:01:17 2009
> New Revision: 84267
>
> URL: http://llvm.org/viewvc/llvm-project?rev=84267&view=rev
> Log:
> Keep track of whether declararions were loaded from a precompiled
> header or not via a new "PCHLevel" field in Decl. We currently use
> this information to help CIndex filter out declarations that came from
> a precompiled header (rather than from an AST file). Further down the
> road, it can be used to help implement multi-level precompiled
> headers.
>
>
> Modified:
> cfe/trunk/include/clang-c/Index.h
> cfe/trunk/include/clang/AST/DeclBase.h
> cfe/trunk/include/clang/Frontend/ASTUnit.h
> cfe/trunk/lib/Frontend/ASTUnit.cpp
> cfe/trunk/lib/Frontend/PCHReaderDecl.cpp
> cfe/trunk/lib/Frontend/PCHWriterDecl.cpp
> cfe/trunk/test/Index/c-index-pch.c
> cfe/trunk/tools/CIndex/CIndex.cpp
> cfe/trunk/tools/CIndex/CIndex.exports
> cfe/trunk/tools/c-index-test/c-index-test.c
>
> Modified: cfe/trunk/include/clang-c/Index.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang-c/Index.h?rev=84267&r1=84266&r2=84267&view=diff
>
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- cfe/trunk/include/clang-c/Index.h (original)
> +++ cfe/trunk/include/clang-c/Index.h Fri Oct 16 15:01:17 2009
> @@ -117,6 +117,17 @@
> );
> void clang_disposeTranslationUnit(CXTranslationUnit);
>
> +/**
> + * \brief Indicate to Clang that it should only enumerate "local"
> declarations
> + * when loading any new translation units.
> + *
> + * A "local" declaration is one that belongs in the translation
> unit itself and
> + * not in a precompiled header that was used by the translation unit.
> + *
> + * FIXME: Remove this hook.
> + */
> +void clang_wantOnlyLocalDeclarations(CXIndex);
> +
> /*
> Usage: clang_loadTranslationUnit(). Will load the toplevel
> declarations
> within a translation unit, issuing a 'callback' for each one.
>
> Modified: cfe/trunk/include/clang/AST/DeclBase.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/DeclBase.h?rev=84267&r1=84266&r2=84267&view=diff
>
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- cfe/trunk/include/clang/AST/DeclBase.h (original)
> +++ cfe/trunk/include/clang/AST/DeclBase.h Fri Oct 16 15:01:17 2009
> @@ -166,6 +166,15 @@
> bool Used : 1;
>
> protected:
> + /// Access - Used by C++ decls for the access specifier.
> + // NOTE: VC++ treats enums as signed, avoid using the
> AccessSpecifier enum
> + unsigned Access : 2;
> + friend class CXXClassMemberWrapper;
> +
> + // PCHLevel - the "level" of precompiled header/AST file from
> which this
> + // declaration was built.
> + unsigned PCHLevel : 2;
> +
> /// IdentifierNamespace - This specifies what IDNS_* namespace
> this lives in.
> unsigned IdentifierNamespace : 16;
>
> @@ -177,16 +186,13 @@
> #endif
>
> protected:
> - /// Access - Used by C++ decls for the access specifier.
> - // NOTE: VC++ treats enums as signed, avoid using the
> AccessSpecifier enum
> - unsigned Access : 2;
> - friend class CXXClassMemberWrapper;
>
> Decl(Kind DK, DeclContext *DC, SourceLocation L)
> : NextDeclInContext(0), DeclCtx(DC),
> Loc(L), DeclKind(DK), InvalidDecl(0),
> HasAttrs(false), Implicit(false), Used(false),
> - IdentifierNamespace(getIdentifierNamespaceForKind(DK)),
> Access(AS_none) {
> + Access(AS_none), PCHLevel(0),
> + IdentifierNamespace(getIdentifierNamespaceForKind(DK)) {
> if (Decl::CollectingStats()) addDeclKind(DK);
> }
>
> @@ -274,6 +280,26 @@
> bool isUsed() const { return Used; }
> void setUsed(bool U = true) { Used = U; }
>
> + /// \brief Retrieve the level of precompiled header from which this
> + /// declaration was generated.
> + ///
> + /// The PCH level of a declaration describes where the
> declaration originated
> + /// from. A PCH level of 0 indicates that the declaration was not
> from a
> + /// precompiled header. A PCH level of 1 indicates that the
> declaration was
> + /// from a top-level precompiled header; 2 indicates that the
> declaration
> + /// comes from a precompiled header on which the top-level
> precompiled header
> + /// depends, and so on.
What do you mean by 'so on'? is it going to be 3 or more? Bit-field
length is 2.
- Fariborz
More information about the cfe-commits
mailing list