@@ -27,123 +27,132 @@ namespace clang {
2727 class VarDecl ;
2828 class FunctionDecl ;
2929 class ImportDecl ;
30-
31- // / ASTConsumer - This is an abstract interface that should be implemented by
32- // / clients that read ASTs. This abstraction layer allows the client to be
33- // / independent of the AST producer (e.g. parser vs AST dump file reader, etc).
34- class ASTConsumer {
35- // / Whether this AST consumer also requires information about
36- // / semantic analysis.
37- bool SemaConsumer = false ;
38-
39- friend class SemaConsumer ;
40-
41- public:
42- ASTConsumer () = default ;
43-
44- virtual ~ASTConsumer () {}
45-
46- // / Initialize - This is called to initialize the consumer, providing the
47- // / ASTContext.
48- virtual void Initialize (ASTContext &Context) {}
49-
50- // / HandleTopLevelDecl - Handle the specified top-level declaration. This is
51- // / called by the parser to process every top-level Decl*.
52- // /
53- // / \returns true to continue parsing, or false to abort parsing.
54- virtual bool HandleTopLevelDecl (DeclGroupRef D);
55-
56- // / This callback is invoked each time an inline (method or friend)
57- // / function definition in a class is completed.
58- virtual void HandleInlineFunctionDefinition (FunctionDecl *D) {}
59-
60- // / HandleInterestingDecl - Handle the specified interesting declaration. This
61- // / is called by the AST reader when deserializing things that might interest
62- // / the consumer. The default implementation forwards to HandleTopLevelDecl.
63- virtual void HandleInterestingDecl (DeclGroupRef D);
64-
65- // / HandleTranslationUnit - This method is called when the ASTs for entire
66- // / translation unit have been parsed.
67- virtual void HandleTranslationUnit (ASTContext &Ctx) {}
68-
69- // / HandleTagDeclDefinition - This callback is invoked each time a TagDecl
70- // / (e.g. struct, union, enum, class) is completed. This allows the client to
71- // / hack on the type, which can occur at any point in the file (because these
72- // / can be defined in declspecs).
73- virtual void HandleTagDeclDefinition (TagDecl *D) {}
74-
75- // / This callback is invoked the first time each TagDecl is required to
76- // / be complete.
77- virtual void HandleTagDeclRequiredDefinition (const TagDecl *D) {}
78-
79- // / Invoked when a function is implicitly instantiated.
80- // / Note that at this point it does not have a body, its body is
81- // / instantiated at the end of the translation unit and passed to
82- // / HandleTopLevelDecl.
83- virtual void HandleCXXImplicitFunctionInstantiation (FunctionDecl *D) {}
84-
85- // / Handle the specified top-level declaration that occurred inside
86- // / and ObjC container.
87- // / The default implementation ignored them.
88- virtual void HandleTopLevelDeclInObjCContainer (DeclGroupRef D);
89-
90- // / Handle an ImportDecl that was implicitly created due to an
91- // / inclusion directive.
92- // / The default implementation passes it to HandleTopLevelDecl.
93- virtual void HandleImplicitImportDecl (ImportDecl *D);
94-
95- // / CompleteTentativeDefinition - Callback invoked at the end of a translation
96- // / unit to notify the consumer that the given tentative definition should be
97- // / completed.
98- // /
99- // / The variable declaration itself will be a tentative
100- // / definition. If it had an incomplete array type, its type will
101- // / have already been changed to an array of size 1. However, the
102- // / declaration remains a tentative definition and has not been
103- // / modified by the introduction of an implicit zero initializer.
104- virtual void CompleteTentativeDefinition (VarDecl *D) {}
105-
106- // / CompleteExternalDeclaration - Callback invoked at the end of a translation
107- // / unit to notify the consumer that the given external declaration should be
108- // / completed.
109- virtual void CompleteExternalDeclaration (DeclaratorDecl *D) {}
110-
111- // / Callback invoked when an MSInheritanceAttr has been attached to a
112- // / CXXRecordDecl.
113- virtual void AssignInheritanceModel (CXXRecordDecl *RD) {}
114-
115- // / HandleCXXStaticMemberVarInstantiation - Tell the consumer that this
116- // variable has been instantiated.
117- virtual void HandleCXXStaticMemberVarInstantiation (VarDecl *D) {}
118-
119- // / Callback involved at the end of a translation unit to
120- // / notify the consumer that a vtable for the given C++ class is
121- // / required.
122- // /
123- // / \param RD The class whose vtable was used.
124- virtual void HandleVTable (CXXRecordDecl *RD) {}
125-
126- // / If the consumer is interested in entities getting modified after
127- // / their initial creation, it should return a pointer to
128- // / an ASTMutationListener here.
129- virtual ASTMutationListener *GetASTMutationListener () { return nullptr ; }
130-
131- // / If the consumer is interested in entities being deserialized from
132- // / AST files, it should return a pointer to a ASTDeserializationListener here
133- virtual ASTDeserializationListener *GetASTDeserializationListener () {
134- return nullptr ;
135- }
136-
137- // / PrintStats - If desired, print any statistics.
138- virtual void PrintStats () {}
139-
140- // / This callback is called for each function if the Parser was
141- // / initialized with \c SkipFunctionBodies set to \c true.
142- // /
143- // / \return \c true if the function's body should be skipped. The function
144- // / body may be parsed anyway if it is needed (for instance, if it contains
145- // / the code completion point or is constexpr).
146- virtual bool shouldSkipFunctionBody (Decl *D) { return true ; }
30+ class OpenACCRoutineDecl ;
31+
32+ // / ASTConsumer - This is an abstract interface that should be implemented by
33+ // / clients that read ASTs. This abstraction layer allows the client to be
34+ // / independent of the AST producer (e.g. parser vs AST dump file reader,
35+ // / etc).
36+ class ASTConsumer {
37+ // / Whether this AST consumer also requires information about
38+ // / semantic analysis.
39+ bool SemaConsumer = false ;
40+
41+ friend class SemaConsumer ;
42+
43+ public:
44+ ASTConsumer () = default ;
45+
46+ virtual ~ASTConsumer () {}
47+
48+ // / Initialize - This is called to initialize the consumer, providing the
49+ // / ASTContext.
50+ virtual void Initialize (ASTContext &Context) {}
51+
52+ // / HandleTopLevelDecl - Handle the specified top-level declaration. This
53+ // / is called by the parser to process every top-level Decl*.
54+ // /
55+ // / \returns true to continue parsing, or false to abort parsing.
56+ virtual bool HandleTopLevelDecl (DeclGroupRef D);
57+
58+ // / This callback is invoked each time an inline (method or friend)
59+ // / function definition in a class is completed.
60+ virtual void HandleInlineFunctionDefinition (FunctionDecl *D) {}
61+
62+ // / HandleInterestingDecl - Handle the specified interesting declaration.
63+ // / This is called by the AST reader when deserializing things that might
64+ // / interest the consumer. The default implementation forwards to
65+ // / HandleTopLevelDecl.
66+ virtual void HandleInterestingDecl (DeclGroupRef D);
67+
68+ // / HandleTranslationUnit - This method is called when the ASTs for entire
69+ // / translation unit have been parsed.
70+ virtual void HandleTranslationUnit (ASTContext &Ctx) {}
71+
72+ // / HandleTagDeclDefinition - This callback is invoked each time a TagDecl
73+ // / (e.g. struct, union, enum, class) is completed. This allows the client
74+ // / to hack on the type, which can occur at any point in the file (because
75+ // / these can be defined in declspecs).
76+ virtual void HandleTagDeclDefinition (TagDecl *D) {}
77+
78+ // / This callback is invoked the first time each TagDecl is required to
79+ // / be complete.
80+ virtual void HandleTagDeclRequiredDefinition (const TagDecl *D) {}
81+
82+ // / Invoked when a function is implicitly instantiated.
83+ // / Note that at this point it does not have a body, its body is
84+ // / instantiated at the end of the translation unit and passed to
85+ // / HandleTopLevelDecl.
86+ virtual void HandleCXXImplicitFunctionInstantiation (FunctionDecl *D) {}
87+
88+ // / Handle the specified top-level declaration that occurred inside
89+ // / and ObjC container.
90+ // / The default implementation ignored them.
91+ virtual void HandleTopLevelDeclInObjCContainer (DeclGroupRef D);
92+
93+ // / Handle an ImportDecl that was implicitly created due to an
94+ // / inclusion directive.
95+ // / The default implementation passes it to HandleTopLevelDecl.
96+ virtual void HandleImplicitImportDecl (ImportDecl *D);
97+
98+ // / CompleteTentativeDefinition - Callback invoked at the end of a
99+ // / translation unit to notify the consumer that the given tentative
100+ // / definition should be completed.
101+ // /
102+ // / The variable declaration itself will be a tentative
103+ // / definition. If it had an incomplete array type, its type will
104+ // / have already been changed to an array of size 1. However, the
105+ // / declaration remains a tentative definition and has not been
106+ // / modified by the introduction of an implicit zero initializer.
107+ virtual void CompleteTentativeDefinition (VarDecl *D) {}
108+
109+ // / CompleteExternalDeclaration - Callback invoked at the end of a
110+ // / translation unit to notify the consumer that the given external
111+ // / declaration should be completed.
112+ virtual void CompleteExternalDeclaration (DeclaratorDecl *D) {}
113+
114+ // / Callback invoked when an MSInheritanceAttr has been attached to a
115+ // / CXXRecordDecl.
116+ virtual void AssignInheritanceModel (CXXRecordDecl *RD) {}
117+
118+ // / HandleCXXStaticMemberVarInstantiation - Tell the consumer that this
119+ // variable has been instantiated.
120+ virtual void HandleCXXStaticMemberVarInstantiation (VarDecl *D) {}
121+
122+ // / Callback to handle the end-of-translation unit attachment of OpenACC
123+ // / routine declaration information.
124+ virtual void HandleOpenACCRoutineReference (const FunctionDecl *FD,
125+ const OpenACCRoutineDecl *RD) {}
126+
127+ // / Callback involved at the end of a translation unit to
128+ // / notify the consumer that a vtable for the given C++ class is
129+ // / required.
130+ // /
131+ // / \param RD The class whose vtable was used.
132+ virtual void HandleVTable (CXXRecordDecl *RD) {}
133+
134+ // / If the consumer is interested in entities getting modified after
135+ // / their initial creation, it should return a pointer to
136+ // / an ASTMutationListener here.
137+ virtual ASTMutationListener *GetASTMutationListener () { return nullptr ; }
138+
139+ // / If the consumer is interested in entities being deserialized from
140+ // / AST files, it should return a pointer to a ASTDeserializationListener
141+ // / here
142+ virtual ASTDeserializationListener *GetASTDeserializationListener () {
143+ return nullptr ;
144+ }
145+
146+ // / PrintStats - If desired, print any statistics.
147+ virtual void PrintStats () {}
148+
149+ // / This callback is called for each function if the Parser was
150+ // / initialized with \c SkipFunctionBodies set to \c true.
151+ // /
152+ // / \return \c true if the function's body should be skipped. The function
153+ // / body may be parsed anyway if it is needed (for instance, if it contains
154+ // / the code completion point or is constexpr).
155+ virtual bool shouldSkipFunctionBody (Decl *D) { return true ; }
147156};
148157
149158} // end namespace clang.
0 commit comments