Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
14 pmbaty 1
//===- TemplateInstCallback.h - Template Instantiation Callback - C++ --===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===---------------------------------------------------------------------===//
8
//
9
// This file defines the TemplateInstantiationCallback class, which is the
10
// base class for callbacks that will be notified at template instantiations.
11
//
12
//===---------------------------------------------------------------------===//
13
 
14
#ifndef LLVM_CLANG_SEMA_TEMPLATEINSTCALLBACK_H
15
#define LLVM_CLANG_SEMA_TEMPLATEINSTCALLBACK_H
16
 
17
#include "clang/Sema/Sema.h"
18
 
19
namespace clang {
20
 
21
/// This is a base class for callbacks that will be notified at every
22
/// template instantiation.
23
class TemplateInstantiationCallback {
24
public:
25
  virtual ~TemplateInstantiationCallback() = default;
26
 
27
  /// Called before doing AST-parsing.
28
  virtual void initialize(const Sema &TheSema) = 0;
29
 
30
  /// Called after AST-parsing is completed.
31
  virtual void finalize(const Sema &TheSema) = 0;
32
 
33
  /// Called when instantiation of a template just began.
34
  virtual void atTemplateBegin(const Sema &TheSema,
35
                               const Sema::CodeSynthesisContext &Inst) = 0;
36
 
37
  /// Called when instantiation of a template is just about to end.
38
  virtual void atTemplateEnd(const Sema &TheSema,
39
                             const Sema::CodeSynthesisContext &Inst) = 0;
40
};
41
 
42
template <class TemplateInstantiationCallbackPtrs>
43
void initialize(TemplateInstantiationCallbackPtrs &Callbacks,
44
                const Sema &TheSema) {
45
  for (auto &C : Callbacks) {
46
    if (C)
47
      C->initialize(TheSema);
48
  }
49
}
50
 
51
template <class TemplateInstantiationCallbackPtrs>
52
void finalize(TemplateInstantiationCallbackPtrs &Callbacks,
53
              const Sema &TheSema) {
54
  for (auto &C : Callbacks) {
55
    if (C)
56
      C->finalize(TheSema);
57
  }
58
}
59
 
60
template <class TemplateInstantiationCallbackPtrs>
61
void atTemplateBegin(TemplateInstantiationCallbackPtrs &Callbacks,
62
                     const Sema &TheSema,
63
                     const Sema::CodeSynthesisContext &Inst) {
64
  for (auto &C : Callbacks) {
65
    if (C)
66
      C->atTemplateBegin(TheSema, Inst);
67
  }
68
}
69
 
70
template <class TemplateInstantiationCallbackPtrs>
71
void atTemplateEnd(TemplateInstantiationCallbackPtrs &Callbacks,
72
                   const Sema &TheSema,
73
                   const Sema::CodeSynthesisContext &Inst) {
74
  for (auto &C : Callbacks) {
75
    if (C)
76
      C->atTemplateEnd(TheSema, Inst);
77
  }
78
}
79
 
80
} // namespace clang
81
 
82
#endif