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