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 13686775deca8b8685eb90801495880e3abdd844c2Chris Lattner#include "clang/Basic/LLVM.h" 14f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar#include "llvm/ADT/StringRef.h" 15f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar 16f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbarnamespace clang { 17f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar 18f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbarnamespace frontend { 19f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar 20f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbarenum LangFeatures { 21f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar BCPLComment = (1 << 0), 22b2dba4bc0eee144baa60e36599a0887496d1295eChad Rosier C89 = (1 << 1), 23b2dba4bc0eee144baa60e36599a0887496d1295eChad Rosier C99 = (1 << 2), 24ffbe9b9c64ab2e94b9d48ec56e511f75826fc80aBenjamin Kramer C11 = (1 << 3), 25b2dba4bc0eee144baa60e36599a0887496d1295eChad Rosier CPlusPlus = (1 << 4), 26b2dba4bc0eee144baa60e36599a0887496d1295eChad Rosier CPlusPlus0x = (1 << 5), 27b2dba4bc0eee144baa60e36599a0887496d1295eChad Rosier Digraphs = (1 << 6), 28b2dba4bc0eee144baa60e36599a0887496d1295eChad Rosier GNUMode = (1 << 7), 29b2dba4bc0eee144baa60e36599a0887496d1295eChad Rosier HexFloat = (1 << 8), 30b2dba4bc0eee144baa60e36599a0887496d1295eChad Rosier ImplicitInt = (1 << 9) 31f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar}; 32f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar 33f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar} 34f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar 35f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar/// LangStandard - Information about the properties of a particular language 36f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar/// standard. 37f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbarstruct LangStandard { 38f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar enum Kind { 39f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar#define LANGSTANDARD(id, name, desc, features) \ 40f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar lang_##id, 41f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar#include "clang/Frontend/LangStandards.def" 42f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar lang_unspecified 43f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar }; 44f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar 45f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar const char *ShortName; 46f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar const char *Description; 47f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar unsigned Flags; 48f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar 49f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbarpublic: 50fb435102b1632cc0ea8ebdef66099aff082b7d63Daniel Dunbar /// getName - Get the name of this standard. 51fb435102b1632cc0ea8ebdef66099aff082b7d63Daniel Dunbar const char *getName() const { return ShortName; } 52fb435102b1632cc0ea8ebdef66099aff082b7d63Daniel Dunbar 53fb435102b1632cc0ea8ebdef66099aff082b7d63Daniel Dunbar /// getDescription - Get the description of this standard. 54fb435102b1632cc0ea8ebdef66099aff082b7d63Daniel Dunbar const char *getDescription() const { return Description; } 55fb435102b1632cc0ea8ebdef66099aff082b7d63Daniel Dunbar 56f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar /// hasBCPLComments - Language supports '//' comments. 57f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar bool hasBCPLComments() const { return Flags & frontend::BCPLComment; } 58f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar 59b2dba4bc0eee144baa60e36599a0887496d1295eChad Rosier /// isC89 - Language is a superset of C89. 60b2dba4bc0eee144baa60e36599a0887496d1295eChad Rosier bool isC89() const { return Flags & frontend::C89; } 61b2dba4bc0eee144baa60e36599a0887496d1295eChad Rosier 62f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar /// isC99 - Language is a superset of C99. 63f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar bool isC99() const { return Flags & frontend::C99; } 64f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar 65ffbe9b9c64ab2e94b9d48ec56e511f75826fc80aBenjamin Kramer /// isC11 - Language is a superset of C11. 66ffbe9b9c64ab2e94b9d48ec56e511f75826fc80aBenjamin Kramer bool isC11() const { return Flags & frontend::C11; } 677e7fbd05a5dfdb0addfc8b5af2fcbed8c7b5fb87Peter Collingbourne 68f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar /// isCPlusPlus - Language is a C++ variant. 69f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar bool isCPlusPlus() const { return Flags & frontend::CPlusPlus; } 70f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar 71f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar /// isCPlusPlus0x - Language is a C++0x variant. 72f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar bool isCPlusPlus0x() const { return Flags & frontend::CPlusPlus0x; } 73f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar 7483d5a2a7d5f933cfdba756e76b6c5cc2f61ac37eDaniel Dunbar /// hasDigraphs - Language supports digraphs. 75f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar bool hasDigraphs() const { return Flags & frontend::Digraphs; } 76f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar 77f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar /// isGNUMode - Language includes GNU extensions. 78f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar bool isGNUMode() const { return Flags & frontend::GNUMode; } 79f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar 80f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar /// hasHexFloats - Language supports hexadecimal float constants. 81f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar bool hasHexFloats() const { return Flags & frontend::HexFloat; } 82f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar 83f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar /// hasImplicitInt - Language allows variables to be typed as int implicitly. 84f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar bool hasImplicitInt() const { return Flags & frontend::ImplicitInt; } 85f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar 86f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar static const LangStandard &getLangStandardForKind(Kind K); 87686775deca8b8685eb90801495880e3abdd844c2Chris Lattner static const LangStandard *getLangStandardForName(StringRef Name); 88f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar}; 89f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar 90f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar} // end namespace clang 91f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar 92f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar#endif 93