Coverage Report

Created: 2019-07-24 05:18

/Users/buildslave/jenkins/workspace/clang-stage2-coverage-R/llvm/tools/clang/include/clang/Sema/TemplateInstCallback.h
Line
Count
Source
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_TEMPLATE_INST_CALLBACK_H
15
#define LLVM_CLANG_TEMPLATE_INST_CALLBACK_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
11
  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
41.4k
                const Sema &TheSema) {
45
41.4k
  for (auto &C : Callbacks) {
46
11
    if (C)
47
11
      C->initialize(TheSema);
48
11
  }
49
41.4k
}
50
51
template <class TemplateInstantiationCallbackPtrs>
52
void finalize(TemplateInstantiationCallbackPtrs &Callbacks,
53
41.4k
              const Sema &TheSema) {
54
41.4k
  for (auto &C : Callbacks) {
55
11
    if (C)
56
11
      C->finalize(TheSema);
57
11
  }
58
41.4k
}
59
60
template <class TemplateInstantiationCallbackPtrs>
61
void atTemplateBegin(TemplateInstantiationCallbackPtrs &Callbacks,
62
                     const Sema &TheSema,
63
7.13M
                     const Sema::CodeSynthesisContext &Inst) {
64
7.13M
  for (auto &C : Callbacks) {
65
76
    if (C)
66
76
      C->atTemplateBegin(TheSema, Inst);
67
76
  }
68
7.13M
}
69
70
template <class TemplateInstantiationCallbackPtrs>
71
void atTemplateEnd(TemplateInstantiationCallbackPtrs &Callbacks,
72
                   const Sema &TheSema,
73
7.13M
                   const Sema::CodeSynthesisContext &Inst) {
74
7.13M
  for (auto &C : Callbacks) {
75
76
    if (C)
76
76
      C->atTemplateEnd(TheSema, Inst);
77
76
  }
78
7.13M
}
79
80
} // namespace clang
81
82
#endif