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 { 21bb23628148f555a4cf71f98c27096a7a804c085cNico Weber LineComment = (1 << 0), 22b2dba4bc0eee144baa60e36599a0887496d1295eChad Rosier C89 = (1 << 1), 23b2dba4bc0eee144baa60e36599a0887496d1295eChad Rosier C99 = (1 << 2), 24ffbe9b9c64ab2e94b9d48ec56e511f75826fc80aBenjamin Kramer C11 = (1 << 3), 25b2dba4bc0eee144baa60e36599a0887496d1295eChad Rosier CPlusPlus = (1 << 4), 2680ad52f327b532bded5c5b0ee38779d841c6cd35Richard Smith CPlusPlus11 = (1 << 5), 275ba49c0177bd594a9760956f51293b5731b03d6dRichard Smith CPlusPlus1y = (1 << 6), 28ef8225444452a1486bd721f3285301fe84643b00Stephen Hines CPlusPlus1z = (1 << 7), 29ef8225444452a1486bd721f3285301fe84643b00Stephen Hines Digraphs = (1 << 8), 30ef8225444452a1486bd721f3285301fe84643b00Stephen Hines GNUMode = (1 << 9), 31ef8225444452a1486bd721f3285301fe84643b00Stephen Hines HexFloat = (1 << 10), 32ef8225444452a1486bd721f3285301fe84643b00Stephen Hines ImplicitInt = (1 << 11) 33f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar}; 34f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar 35f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar} 36f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar 37f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar/// LangStandard - Information about the properties of a particular language 38f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar/// standard. 39f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbarstruct LangStandard { 40f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar enum Kind { 41f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar#define LANGSTANDARD(id, name, desc, features) \ 42f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar lang_##id, 43f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar#include "clang/Frontend/LangStandards.def" 44f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar lang_unspecified 45f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar }; 46f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar 47f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar const char *ShortName; 48f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar const char *Description; 49f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar unsigned Flags; 50f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar 51f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbarpublic: 52fb435102b1632cc0ea8ebdef66099aff082b7d63Daniel Dunbar /// getName - Get the name of this standard. 53fb435102b1632cc0ea8ebdef66099aff082b7d63Daniel Dunbar const char *getName() const { return ShortName; } 54fb435102b1632cc0ea8ebdef66099aff082b7d63Daniel Dunbar 55fb435102b1632cc0ea8ebdef66099aff082b7d63Daniel Dunbar /// getDescription - Get the description of this standard. 56fb435102b1632cc0ea8ebdef66099aff082b7d63Daniel Dunbar const char *getDescription() const { return Description; } 57fb435102b1632cc0ea8ebdef66099aff082b7d63Daniel Dunbar 58bb23628148f555a4cf71f98c27096a7a804c085cNico Weber /// Language supports '//' comments. 59bb23628148f555a4cf71f98c27096a7a804c085cNico Weber bool hasLineComments() const { return Flags & frontend::LineComment; } 60f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar 61b2dba4bc0eee144baa60e36599a0887496d1295eChad Rosier /// isC89 - Language is a superset of C89. 62b2dba4bc0eee144baa60e36599a0887496d1295eChad Rosier bool isC89() const { return Flags & frontend::C89; } 63b2dba4bc0eee144baa60e36599a0887496d1295eChad Rosier 64f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar /// isC99 - Language is a superset of C99. 65f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar bool isC99() const { return Flags & frontend::C99; } 66f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar 67ffbe9b9c64ab2e94b9d48ec56e511f75826fc80aBenjamin Kramer /// isC11 - Language is a superset of C11. 68ffbe9b9c64ab2e94b9d48ec56e511f75826fc80aBenjamin Kramer bool isC11() const { return Flags & frontend::C11; } 697e7fbd05a5dfdb0addfc8b5af2fcbed8c7b5fb87Peter Collingbourne 70f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar /// isCPlusPlus - Language is a C++ variant. 71f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar bool isCPlusPlus() const { return Flags & frontend::CPlusPlus; } 72f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar 73ef8225444452a1486bd721f3285301fe84643b00Stephen Hines /// isCPlusPlus11 - Language is a C++11 variant (or later). 7480ad52f327b532bded5c5b0ee38779d841c6cd35Richard Smith bool isCPlusPlus11() const { return Flags & frontend::CPlusPlus11; } 75f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar 76ef8225444452a1486bd721f3285301fe84643b00Stephen Hines /// isCPlusPlus1y - Language is a C++14 variant (or later). 775ba49c0177bd594a9760956f51293b5731b03d6dRichard Smith bool isCPlusPlus1y() const { return Flags & frontend::CPlusPlus1y; } 785ba49c0177bd594a9760956f51293b5731b03d6dRichard Smith 79ef8225444452a1486bd721f3285301fe84643b00Stephen Hines /// isCPlusPlus1z - Language is a C++17 variant (or later). 80ef8225444452a1486bd721f3285301fe84643b00Stephen Hines bool isCPlusPlus1z() const { return Flags & frontend::CPlusPlus1z; } 81ef8225444452a1486bd721f3285301fe84643b00Stephen Hines 8283d5a2a7d5f933cfdba756e76b6c5cc2f61ac37eDaniel Dunbar /// hasDigraphs - Language supports digraphs. 83f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar bool hasDigraphs() const { return Flags & frontend::Digraphs; } 84f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar 85f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar /// isGNUMode - Language includes GNU extensions. 86f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar bool isGNUMode() const { return Flags & frontend::GNUMode; } 87f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar 88f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar /// hasHexFloats - Language supports hexadecimal float constants. 89f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar bool hasHexFloats() const { return Flags & frontend::HexFloat; } 90f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar 91f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar /// hasImplicitInt - Language allows variables to be typed as int implicitly. 92f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar bool hasImplicitInt() const { return Flags & frontend::ImplicitInt; } 93f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar 94f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar static const LangStandard &getLangStandardForKind(Kind K); 95686775deca8b8685eb90801495880e3abdd844c2Chris Lattner static const LangStandard *getLangStandardForName(StringRef Name); 96f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar}; 97f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar 98f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar} // end namespace clang 99f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar 100f51ac1b3d0fd39853ba6c04e81149acbca6eead4Daniel Dunbar#endif 101