LangOptions.h revision 0bc735ffcfb223c0186419547abaa5c84482663e
15f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer//===--- LangOptions.h - C Language Family Language Options -----*- C++ -*-===// 25f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// 35f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// The LLVM Compiler Infrastructure 45f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// 50bc735ffcfb223c0186419547abaa5c84482663eChris Lattner// This file is distributed under the University of Illinois Open Source 60bc735ffcfb223c0186419547abaa5c84482663eChris Lattner// License. See LICENSE.TXT for details. 75f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// 85f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer//===----------------------------------------------------------------------===// 95f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// 105f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// This file defines the LangOptions interface. 115f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// 125f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer//===----------------------------------------------------------------------===// 135f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 145f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#ifndef LLVM_CLANG_LANGOPTIONS_H 155f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#define LLVM_CLANG_LANGOPTIONS_H 165f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 17491420984f3276fdc1343ab399d9afe199f9828dTed Kremenek#include "llvm/Bitcode/SerializationFwd.h" 18491420984f3276fdc1343ab399d9afe199f9828dTed Kremenek 195f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencernamespace clang { 205f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 215f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer/// LangOptions - This class keeps track of the various options that can be 225f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer/// enabled, which controls the dialect of C that is accepted. 235f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerstruct LangOptions { 245f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer unsigned Trigraphs : 1; // Trigraphs in source files. 255f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer unsigned BCPLComment : 1; // BCPL-style // comments. 265f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer unsigned DollarIdents : 1; // '$' allowed in identifiers. 275f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer unsigned Digraphs : 1; // When added to C? C99? 285f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer unsigned HexFloats : 1; // C99 Hexadecimal float constants. 295f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer unsigned C99 : 1; // C99 Support 305f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer unsigned Microsoft : 1; // Microsoft extensions. 315f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer unsigned CPlusPlus : 1; // C++ Support 32d4b80f1a0e946aa38c5db7d6f8afcdf05ed57116Chris Lattner unsigned CPlusPlus0x : 1; // C++0x Support 335f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer unsigned NoExtensions : 1; // All extensions are disabled, strict mode. 345f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer unsigned CXXOperatorNames : 1; // Treat C++ operator names as keywords. 355f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 365f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer unsigned ObjC1 : 1; // Objective C 1 support enabled. 375f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer unsigned ObjC2 : 1; // Objective C 2 support enabled. 385f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 39ee98ac5a1330db432b188dd2d38b6631aac47bf1Anders Carlsson unsigned PascalStrings : 1; // Allow Pascal strings 408aebcb739a4aff5ccf007fd740aa9105071feff4Nate Begeman unsigned Boolean : 1; // Allow bool/true/false 4145e8cbdce25c2e16c7aac2036a591f6190097ae6Chris Lattner unsigned WritableStrings : 1; // Allow writable strings 42695dbb697d78d4c507e12b0acc6129b9650d4c3eAnders Carlsson unsigned LaxVectorConversions : 1; 43695dbb697d78d4c507e12b0acc6129b9650d4c3eAnders Carlsson 445f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer LangOptions() { 45825502a9ee613fdfb73b84cc85b9fdc58e680d86Chris Lattner Trigraphs = BCPLComment = DollarIdents = Digraphs = HexFloats = 0; 46825502a9ee613fdfb73b84cc85b9fdc58e680d86Chris Lattner ObjC1 = ObjC2 = 0; 47d4b80f1a0e946aa38c5db7d6f8afcdf05ed57116Chris Lattner C99 = Microsoft = CPlusPlus = CPlusPlus0x = NoExtensions = 0; 4845e8cbdce25c2e16c7aac2036a591f6190097ae6Chris Lattner CXXOperatorNames = PascalStrings = Boolean = WritableStrings = 0; 49b0ff33a9f4b2a75b6949976bbf3782ff0d839cb1Anders Carlsson LaxVectorConversions = 0; 505f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer } 51491420984f3276fdc1343ab399d9afe199f9828dTed Kremenek 52491420984f3276fdc1343ab399d9afe199f9828dTed Kremenek /// Emit - Emit this LangOptions object to bitcode. 53491420984f3276fdc1343ab399d9afe199f9828dTed Kremenek void Emit(llvm::Serializer& S) const; 54491420984f3276fdc1343ab399d9afe199f9828dTed Kremenek 55491420984f3276fdc1343ab399d9afe199f9828dTed Kremenek /// Read - Read new values for this LangOption object from bitcode. 56491420984f3276fdc1343ab399d9afe199f9828dTed Kremenek void Read(llvm::Deserializer& S); 575f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer}; 585f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 595f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer} // end namespace clang 605f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 615f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#endif 62