Coverage Report

Created: 2018-12-11 17:59

/Users/buildslave/jenkins/workspace/clang-stage2-coverage-R/llvm/tools/clang/include/clang/Frontend/LangStandard.h
Line
Count
Source
1
//===--- LangStandard.h -----------------------------------------*- 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
#ifndef LLVM_CLANG_FRONTEND_LANGSTANDARD_H
11
#define LLVM_CLANG_FRONTEND_LANGSTANDARD_H
12
13
#include "clang/Basic/LLVM.h"
14
#include "clang/Frontend/FrontendOptions.h"
15
#include "llvm/ADT/StringRef.h"
16
17
namespace clang {
18
19
namespace frontend {
20
21
enum LangFeatures {
22
  LineComment = (1 << 0),
23
  C99 = (1 << 1),
24
  C11 = (1 << 2),
25
  C17 = (1 << 3),
26
  CPlusPlus = (1 << 4),
27
  CPlusPlus11 = (1 << 5),
28
  CPlusPlus14 = (1 << 6),
29
  CPlusPlus17 = (1 << 7),
30
  CPlusPlus2a = (1 << 8),
31
  Digraphs = (1 << 9),
32
  GNUMode = (1 << 10),
33
  HexFloat = (1 << 11),
34
  ImplicitInt = (1 << 12),
35
  OpenCL = (1 << 13)
36
};
37
38
}
39
40
/// LangStandard - Information about the properties of a particular language
41
/// standard.
42
struct LangStandard {
43
  enum Kind {
44
#define LANGSTANDARD(id, name, lang, desc, features) \
45
    lang_##id,
46
#include "clang/Frontend/LangStandards.def"
47
    lang_unspecified
48
  };
49
50
  const char *ShortName;
51
  const char *Description;
52
  unsigned Flags;
53
  InputKind::Language Language;
54
55
public:
56
  /// getName - Get the name of this standard.
57
74
  const char *getName() const { return ShortName; }
58
59
  /// getDescription - Get the description of this standard.
60
72
  const char *getDescription() const { return Description; }
61
62
  /// Get the language that this standard describes.
63
17.0k
  InputKind::Language getLanguage() const { return Language; }
64
65
  /// Language supports '//' comments.
66
43.0k
  bool hasLineComments() const { return Flags & frontend::LineComment; }
67
68
  /// isC99 - Language is a superset of C99.
69
43.0k
  bool isC99() const { return Flags & frontend::C99; }
70
71
  /// isC11 - Language is a superset of C11.
72
43.0k
  bool isC11() const { return Flags & frontend::C11; }
73
74
  /// isC17 - Language is a superset of C17.
75
43.0k
  bool isC17() const { return Flags & frontend::C17; }
76
77
  /// isCPlusPlus - Language is a C++ variant.
78
43.0k
  bool isCPlusPlus() const { return Flags & frontend::CPlusPlus; }
79
80
  /// isCPlusPlus11 - Language is a C++11 variant (or later).
81
43.0k
  bool isCPlusPlus11() const { return Flags & frontend::CPlusPlus11; }
82
83
  /// isCPlusPlus14 - Language is a C++14 variant (or later).
84
43.0k
  bool isCPlusPlus14() const { return Flags & frontend::CPlusPlus14; }
85
86
  /// isCPlusPlus17 - Language is a C++17 variant (or later).
87
43.0k
  bool isCPlusPlus17() const { return Flags & frontend::CPlusPlus17; }
88
89
  /// isCPlusPlus2a - Language is a post-C++17 variant (or later).
90
43.0k
  bool isCPlusPlus2a() const { return Flags & frontend::CPlusPlus2a; }
91
92
93
  /// hasDigraphs - Language supports digraphs.
94
43.0k
  bool hasDigraphs() const { return Flags & frontend::Digraphs; }
95
96
  /// isGNUMode - Language includes GNU extensions.
97
43.0k
  bool isGNUMode() const { return Flags & frontend::GNUMode; }
98
99
  /// hasHexFloats - Language supports hexadecimal float constants.
100
43.0k
  bool hasHexFloats() const { return Flags & frontend::HexFloat; }
101
102
  /// hasImplicitInt - Language allows variables to be typed as int implicitly.
103
43.0k
  bool hasImplicitInt() const { return Flags & frontend::ImplicitInt; }
104
105
  /// isOpenCL - Language is a OpenCL variant.
106
43.0k
  bool isOpenCL() const { return Flags & frontend::OpenCL; }
107
108
  static const LangStandard &getLangStandardForKind(Kind K);
109
  static const LangStandard *getLangStandardForName(StringRef Name);
110
};
111
112
}  // end namespace clang
113
114
#endif