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