clang  10.0.0svn
LangStandard.h
Go to the documentation of this file.
1 //===--- LangStandard.h -----------------------------------------*- 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 #ifndef LLVM_CLANG_FRONTEND_LANGSTANDARD_H
10 #define LLVM_CLANG_FRONTEND_LANGSTANDARD_H
11 
12 #include "clang/Basic/LLVM.h"
14 #include "llvm/ADT/StringRef.h"
15 
16 namespace clang {
17 
18 namespace frontend {
19 
21  LineComment = (1 << 0),
22  C99 = (1 << 1),
23  C11 = (1 << 2),
24  C17 = (1 << 3),
25  C2x = (1 << 4),
26  CPlusPlus = (1 << 5),
27  CPlusPlus11 = (1 << 6),
28  CPlusPlus14 = (1 << 7),
29  CPlusPlus17 = (1 << 8),
30  CPlusPlus2a = (1 << 9),
31  Digraphs = (1 << 10),
32  GNUMode = (1 << 11),
33  HexFloat = (1 << 12),
34  ImplicitInt = (1 << 13),
35  OpenCL = (1 << 14)
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;
54 
55 public:
56  /// getName - Get the name of this standard.
57  const char *getName() const { return ShortName; }
58 
59  /// getDescription - Get the description of this standard.
60  const char *getDescription() const { return Description; }
61 
62  /// Get the language that this standard describes.
63  InputKind::Language getLanguage() const { return Language; }
64 
65  /// Language supports '//' comments.
66  bool hasLineComments() const { return Flags & frontend::LineComment; }
67 
68  /// isC99 - Language is a superset of C99.
69  bool isC99() const { return Flags & frontend::C99; }
70 
71  /// isC11 - Language is a superset of C11.
72  bool isC11() const { return Flags & frontend::C11; }
73 
74  /// isC17 - Language is a superset of C17.
75  bool isC17() const { return Flags & frontend::C17; }
76 
77  /// isC2x - Language is a superset of C2x.
78  bool isC2x() const { return Flags & frontend::C2x; }
79 
80  /// isCPlusPlus - Language is a C++ variant.
81  bool isCPlusPlus() const { return Flags & frontend::CPlusPlus; }
82 
83  /// isCPlusPlus11 - Language is a C++11 variant (or later).
84  bool isCPlusPlus11() const { return Flags & frontend::CPlusPlus11; }
85 
86  /// isCPlusPlus14 - Language is a C++14 variant (or later).
87  bool isCPlusPlus14() const { return Flags & frontend::CPlusPlus14; }
88 
89  /// isCPlusPlus17 - Language is a C++17 variant (or later).
90  bool isCPlusPlus17() const { return Flags & frontend::CPlusPlus17; }
91 
92  /// isCPlusPlus2a - Language is a post-C++17 variant (or later).
93  bool isCPlusPlus2a() const { return Flags & frontend::CPlusPlus2a; }
94 
95 
96  /// hasDigraphs - Language supports digraphs.
97  bool hasDigraphs() const { return Flags & frontend::Digraphs; }
98 
99  /// isGNUMode - Language includes GNU extensions.
100  bool isGNUMode() const { return Flags & frontend::GNUMode; }
101 
102  /// hasHexFloats - Language supports hexadecimal float constants.
103  bool hasHexFloats() const { return Flags & frontend::HexFloat; }
104 
105  /// hasImplicitInt - Language allows variables to be typed as int implicitly.
106  bool hasImplicitInt() const { return Flags & frontend::ImplicitInt; }
107 
108  /// isOpenCL - Language is a OpenCL variant.
109  bool isOpenCL() const { return Flags & frontend::OpenCL; }
110 
111  static const LangStandard &getLangStandardForKind(Kind K);
112  static const LangStandard *getLangStandardForName(StringRef Name);
113 };
114 
115 } // end namespace clang
116 
117 #endif
LangStandard - Information about the properties of a particular language standard.
Definition: LangStandard.h:42
bool hasDigraphs() const
hasDigraphs - Language supports digraphs.
Definition: LangStandard.h:97
InputKind::Language getLanguage() const
Get the language that this standard describes.
Definition: LangStandard.h:63
bool isCPlusPlus14() const
isCPlusPlus14 - Language is a C++14 variant (or later).
Definition: LangStandard.h:87
bool hasLineComments() const
Language supports &#39;//&#39; comments.
Definition: LangStandard.h:66
Forward-declares and imports various common LLVM datatypes that clang wants to use unqualified...
bool isOpenCL() const
isOpenCL - Language is a OpenCL variant.
Definition: LangStandard.h:109
bool isCPlusPlus2a() const
isCPlusPlus2a - Language is a post-C++17 variant (or later).
Definition: LangStandard.h:93
bool isCPlusPlus() const
isCPlusPlus - Language is a C++ variant.
Definition: LangStandard.h:81
const char * getName() const
getName - Get the name of this standard.
Definition: LangStandard.h:57
bool isCPlusPlus11() const
isCPlusPlus11 - Language is a C++11 variant (or later).
Definition: LangStandard.h:84
bool hasImplicitInt() const
hasImplicitInt - Language allows variables to be typed as int implicitly.
Definition: LangStandard.h:106
bool isC2x() const
isC2x - Language is a superset of C2x.
Definition: LangStandard.h:78
bool isC11() const
isC11 - Language is a superset of C11.
Definition: LangStandard.h:72
bool hasHexFloats() const
hasHexFloats - Language supports hexadecimal float constants.
Definition: LangStandard.h:103
const char * ShortName
Definition: LangStandard.h:50
InputKind::Language Language
Definition: LangStandard.h:53
Dataflow Directional Tag Classes.
const char * Description
Definition: LangStandard.h:51
Language
The language for the input, used to select and validate the language standard and possible actions...
bool isC17() const
isC17 - Language is a superset of C17.
Definition: LangStandard.h:75
bool isGNUMode() const
isGNUMode - Language includes GNU extensions.
Definition: LangStandard.h:100
bool isC99() const
isC99 - Language is a superset of C99.
Definition: LangStandard.h:69
bool isCPlusPlus17() const
isCPlusPlus17 - Language is a C++17 variant (or later).
Definition: LangStandard.h:90
const char * getDescription() const
getDescription - Get the description of this standard.
Definition: LangStandard.h:60