2010-06-10 07:25:41 +08:00
|
|
|
//===--- MicrosoftCXXABI.cpp - Emit LLVM Code from ASTs for a Module ------===//
|
|
|
|
//
|
|
|
|
// The LLVM Compiler Infrastructure
|
|
|
|
//
|
|
|
|
// This file is distributed under the University of Illinois Open Source
|
|
|
|
// License. See LICENSE.TXT for details.
|
|
|
|
//
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
//
|
|
|
|
// This provides C++ code generation targetting the Microsoft Visual C++ ABI.
|
|
|
|
// The class in this file generates structures that follow the Microsoft
|
|
|
|
// Visual C++ ABI, which is actually not very well documented at all outside
|
|
|
|
// of Microsoft.
|
|
|
|
//
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
|
|
|
|
#include "CGCXXABI.h"
|
|
|
|
#include "CodeGenModule.h"
|
|
|
|
#include "clang/AST/Decl.h"
|
|
|
|
#include "clang/AST/DeclCXX.h"
|
|
|
|
|
|
|
|
using namespace clang;
|
|
|
|
using namespace CodeGen;
|
|
|
|
|
|
|
|
namespace {
|
|
|
|
|
2010-08-16 11:33:14 +08:00
|
|
|
class MicrosoftCXXABI : public CGCXXABI {
|
2010-06-10 07:25:41 +08:00
|
|
|
public:
|
2011-01-14 02:57:25 +08:00
|
|
|
MicrosoftCXXABI(CodeGenModule &CGM) : CGCXXABI(CGM) {}
|
2010-08-31 15:33:07 +08:00
|
|
|
|
|
|
|
void BuildConstructorSignature(const CXXConstructorDecl *Ctor,
|
|
|
|
CXXCtorType Type,
|
|
|
|
CanQualType &ResTy,
|
|
|
|
llvm::SmallVectorImpl<CanQualType> &ArgTys) {
|
|
|
|
// 'this' is already in place
|
|
|
|
// TODO: 'for base' flag
|
|
|
|
}
|
|
|
|
|
|
|
|
void BuildDestructorSignature(const CXXDestructorDecl *Ctor,
|
|
|
|
CXXDtorType Type,
|
|
|
|
CanQualType &ResTy,
|
|
|
|
llvm::SmallVectorImpl<CanQualType> &ArgTys) {
|
|
|
|
// 'this' is already in place
|
|
|
|
// TODO: 'for base' flag
|
|
|
|
}
|
|
|
|
|
|
|
|
void BuildInstanceFunctionParams(CodeGenFunction &CGF,
|
|
|
|
QualType &ResTy,
|
|
|
|
FunctionArgList &Params) {
|
|
|
|
BuildThisParam(CGF, Params);
|
|
|
|
// TODO: 'for base' flag
|
|
|
|
}
|
|
|
|
|
|
|
|
void EmitInstanceFunctionProlog(CodeGenFunction &CGF) {
|
|
|
|
EmitThisParam(CGF);
|
|
|
|
// TODO: 'for base' flag
|
|
|
|
}
|
2010-06-10 07:25:41 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2010-08-16 11:33:14 +08:00
|
|
|
CGCXXABI *clang::CodeGen::CreateMicrosoftCXXABI(CodeGenModule &CGM) {
|
2010-06-10 07:25:41 +08:00
|
|
|
return new MicrosoftCXXABI(CGM);
|
|
|
|
}
|
|
|
|
|