LangStandard.h revision fb435102b1632cc0ea8ebdef66099aff082b7d63
1f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar//===--- LangStandard.h -----------------------------------------*- C++ -*-===//
2f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar//
3f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar//                     The LLVM Compiler Infrastructure
4f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar//
5f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar// This file is distributed under the University of Illinois Open Source
6f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar// License. See LICENSE.TXT for details.
7f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar//
8f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar//===----------------------------------------------------------------------===//
9f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar
10f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar#ifndef LLVM_CLANG_FRONTEND_LANGSTANDARD_H
11f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar#define LLVM_CLANG_FRONTEND_LANGSTANDARD_H
12f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar
13f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar#include "llvm/ADT/StringRef.h"
14f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar
15f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbarnamespace clang {
16f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar
17f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbarnamespace frontend {
18f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar
19f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbarenum LangFeatures {
20f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar  BCPLComment = (1 << 0),
21f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar  C99 = (1 << 1),
22f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar  CPlusPlus = (1 << 2),
23f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar  CPlusPlus0x = (1 << 3),
24f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar  Digraphs = (1 << 4),
25f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar  GNUMode = (1 << 5),
26f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar  HexFloat = (1 << 6),
27f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar  ImplicitInt = (1 << 7)
28f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar};
29f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar
30f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar}
31f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar
32f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar/// LangStandard - Information about the properties of a particular language
33f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar/// standard.
34f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbarstruct LangStandard {
35f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar  enum Kind {
36f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar#define LANGSTANDARD(id, name, desc, features) \
37f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar    lang_##id,
38f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar#include "clang/Frontend/LangStandards.def"
39f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar    lang_unspecified
40f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar  };
41f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar
42f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar  const char *ShortName;
43f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar  const char *Description;
44f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar  unsigned Flags;
45f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar
46f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbarpublic:
47fb435102b1632cc0ea8ebdef66099aff082b7d63Daniel Dunbar  /// getName - Get the name of this standard.
48fb435102b1632cc0ea8ebdef66099aff082b7d63Daniel Dunbar  const char *getName() const { return ShortName; }
49fb435102b1632cc0ea8ebdef66099aff082b7d63Daniel Dunbar
50fb435102b1632cc0ea8ebdef66099aff082b7d63Daniel Dunbar  /// getDescription - Get the description of this standard.
51fb435102b1632cc0ea8ebdef66099aff082b7d63Daniel Dunbar  const char *getDescription() const { return Description; }
52fb435102b1632cc0ea8ebdef66099aff082b7d63Daniel Dunbar
53f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar  /// hasBCPLComments - Language supports '//' comments.
54f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar  bool hasBCPLComments() const { return Flags & frontend::BCPLComment; }
55f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar
56f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar  /// isC99 - Language is a superset of C99.
57f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar  bool isC99() const { return Flags & frontend::C99; }
58f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar
59f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar  /// isCPlusPlus - Language is a C++ variant.
60f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar  bool isCPlusPlus() const { return Flags & frontend::CPlusPlus; }
61f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar
62f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar  /// isCPlusPlus0x - Language is a C++0x variant.
63f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar  bool isCPlusPlus0x() const { return Flags & frontend::CPlusPlus0x; }
64f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar
6583d5a2a7d5f933cfdba756e76b6c5cc2f61ac37eDaniel Dunbar  /// hasDigraphs - Language supports digraphs.
66f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar  bool hasDigraphs() const { return Flags & frontend::Digraphs; }
67f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar
68f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar  /// isGNUMode - Language includes GNU extensions.
69f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar  bool isGNUMode() const { return Flags & frontend::GNUMode; }
70f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar
71f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar  /// hasHexFloats - Language supports hexadecimal float constants.
72f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar  bool hasHexFloats() const { return Flags & frontend::HexFloat; }
73f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar
74f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar  /// hasImplicitInt - Language allows variables to be typed as int implicitly.
75f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar  bool hasImplicitInt() const { return Flags & frontend::ImplicitInt; }
76f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar
77f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar  static const LangStandard &getLangStandardForKind(Kind K);
78f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar  static const LangStandard *getLangStandardForName(llvm::StringRef Name);
79f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar};
80f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar
81f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar}  // end namespace clang
82f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar
83f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar#endif
84