Coverage Report

Created: 2018-11-16 02:38

/Users/buildslave/jenkins/workspace/clang-stage2-coverage-R/llvm/tools/clang/include/clang/Sema/SemaFixItUtils.h
Line
Count
Source
1
//===--- SemaFixItUtils.h - Sema FixIts -------------------------*- C++ -*-===//
2
//
3
//                     The LLVM Compiler Infrastructure
4
//
5
// This file is distributed under the University of Illinois Open Source
6
// License. See LICENSE.TXT for details.
7
//
8
//===----------------------------------------------------------------------===//
9
//
10
//  This file defines helper classes for generation of Sema FixItHints.
11
//
12
//===----------------------------------------------------------------------===//
13
#ifndef LLVM_CLANG_SEMA_SEMAFIXITUTILS_H
14
#define LLVM_CLANG_SEMA_SEMAFIXITUTILS_H
15
16
#include "clang/AST/Expr.h"
17
18
namespace clang {
19
20
enum OverloadFixItKind {
21
  OFIK_Undefined = 0,
22
  OFIK_Dereference,
23
  OFIK_TakeAddress,
24
  OFIK_RemoveDereference,
25
  OFIK_RemoveTakeAddress
26
};
27
28
class Sema;
29
30
/// The class facilities generation and storage of conversion FixIts. Hints for
31
/// new conversions are added using TryToFixConversion method. The default type
32
/// conversion checker can be reset.
33
struct ConversionFixItGenerator {
34
  /// Performs a simple check to see if From type can be converted to To type.
35
  static bool compareTypesSimple(CanQualType From,
36
                                 CanQualType To,
37
                                 Sema &S,
38
                                 SourceLocation Loc,
39
                                 ExprValueKind FromVK);
40
41
  /// The list of Hints generated so far.
42
  std::vector<FixItHint> Hints;
43
44
  /// The number of Conversions fixed. This can be different from the size
45
  /// of the Hints vector since we allow multiple FixIts per conversion.
46
  unsigned NumConversionsFixed;
47
48
  /// The type of fix applied. If multiple conversions are fixed, corresponds
49
  /// to the kid of the very first conversion.
50
  OverloadFixItKind Kind;
51
52
  typedef bool (*TypeComparisonFuncTy) (const CanQualType FromTy,
53
                                        const CanQualType ToTy,
54
                                        Sema &S,
55
                                        SourceLocation Loc,
56
                                        ExprValueKind FromVK);
57
  /// The type comparison function used to decide if expression FromExpr of
58
  /// type FromTy can be converted to ToTy. For example, one could check if
59
  /// an implicit conversion exists. Returns true if comparison exists.
60
  TypeComparisonFuncTy CompareTypes;
61
62
  ConversionFixItGenerator(TypeComparisonFuncTy Foo): NumConversionsFixed(0),
63
                                                      Kind(OFIK_Undefined),
64
                                                      CompareTypes(Foo) {}
65
66
  ConversionFixItGenerator(): NumConversionsFixed(0),
67
                              Kind(OFIK_Undefined),
68
28.2M
                              CompareTypes(compareTypesSimple) {}
69
70
  /// Resets the default conversion checker method.
71
394k
  void setConversionChecker(TypeComparisonFuncTy Foo) {
72
394k
    CompareTypes = Foo;
73
394k
  }
74
75
  /// If possible, generates and stores a fix for the given conversion.
76
  bool tryToFixConversion(const Expr *FromExpr,
77
                          const QualType FromQTy, const QualType ToQTy,
78
                          Sema &S);
79
80
394k
  void clear() {
81
394k
    Hints.clear();
82
394k
    NumConversionsFixed = 0;
83
394k
  }
84
85
16.0k
  bool isNull() {
86
16.0k
    return (NumConversionsFixed == 0);
87
16.0k
  }
88
};
89
90
} // endof namespace clang
91
#endif