CGCXXABI.h revision 071cc7deffad608165b1ddd5263e8bf181861520
13a811f1f4286ee3fd0c563c1cfe623956f3caa24Charles Davis//===----- CGCXXABI.h - Interface to C++ ABIs -------------------*- C++ -*-===// 23a811f1f4286ee3fd0c563c1cfe623956f3caa24Charles Davis// 33a811f1f4286ee3fd0c563c1cfe623956f3caa24Charles Davis// The LLVM Compiler Infrastructure 43a811f1f4286ee3fd0c563c1cfe623956f3caa24Charles Davis// 53a811f1f4286ee3fd0c563c1cfe623956f3caa24Charles Davis// This file is distributed under the University of Illinois Open Source 63a811f1f4286ee3fd0c563c1cfe623956f3caa24Charles Davis// License. See LICENSE.TXT for details. 73a811f1f4286ee3fd0c563c1cfe623956f3caa24Charles Davis// 83a811f1f4286ee3fd0c563c1cfe623956f3caa24Charles Davis//===----------------------------------------------------------------------===// 93a811f1f4286ee3fd0c563c1cfe623956f3caa24Charles Davis// 103a811f1f4286ee3fd0c563c1cfe623956f3caa24Charles Davis// This provides an abstract class for C++ code generation. Concrete subclasses 113a811f1f4286ee3fd0c563c1cfe623956f3caa24Charles Davis// of this implement code generation for specific C++ ABIs. 123a811f1f4286ee3fd0c563c1cfe623956f3caa24Charles Davis// 133a811f1f4286ee3fd0c563c1cfe623956f3caa24Charles Davis//===----------------------------------------------------------------------===// 143a811f1f4286ee3fd0c563c1cfe623956f3caa24Charles Davis 153a811f1f4286ee3fd0c563c1cfe623956f3caa24Charles Davis#ifndef CLANG_CODEGEN_CXXABI_H 163a811f1f4286ee3fd0c563c1cfe623956f3caa24Charles Davis#define CLANG_CODEGEN_CXXABI_H 173a811f1f4286ee3fd0c563c1cfe623956f3caa24Charles Davis 183a811f1f4286ee3fd0c563c1cfe623956f3caa24Charles Davisnamespace clang { 193a811f1f4286ee3fd0c563c1cfe623956f3caa24Charles Davisnamespace CodeGen { 203a811f1f4286ee3fd0c563c1cfe623956f3caa24Charles Davis class CodeGenModule; 213a811f1f4286ee3fd0c563c1cfe623956f3caa24Charles Davis class MangleContext; 223a811f1f4286ee3fd0c563c1cfe623956f3caa24Charles Davis 233a811f1f4286ee3fd0c563c1cfe623956f3caa24Charles Davis/// Implements C++ ABI-specific code generation functions. 24071cc7deffad608165b1ddd5263e8bf181861520Charles Davisclass CGCXXABI { 253a811f1f4286ee3fd0c563c1cfe623956f3caa24Charles Davispublic: 26071cc7deffad608165b1ddd5263e8bf181861520Charles Davis virtual ~CGCXXABI(); 273a811f1f4286ee3fd0c563c1cfe623956f3caa24Charles Davis 283a811f1f4286ee3fd0c563c1cfe623956f3caa24Charles Davis /// Gets the mangle context. 293a811f1f4286ee3fd0c563c1cfe623956f3caa24Charles Davis virtual MangleContext &getMangleContext() = 0; 303a811f1f4286ee3fd0c563c1cfe623956f3caa24Charles Davis}; 313a811f1f4286ee3fd0c563c1cfe623956f3caa24Charles Davis 323a811f1f4286ee3fd0c563c1cfe623956f3caa24Charles Davis/// Creates an instance of a C++ ABI class. 33071cc7deffad608165b1ddd5263e8bf181861520Charles DavisCGCXXABI *CreateItaniumCXXABI(CodeGenModule &CGM); 34071cc7deffad608165b1ddd5263e8bf181861520Charles DavisCGCXXABI *CreateMicrosoftCXXABI(CodeGenModule &CGM); 353a811f1f4286ee3fd0c563c1cfe623956f3caa24Charles Davis} 363a811f1f4286ee3fd0c563c1cfe623956f3caa24Charles Davis} 373a811f1f4286ee3fd0c563c1cfe623956f3caa24Charles Davis 383a811f1f4286ee3fd0c563c1cfe623956f3caa24Charles Davis#endif 39