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