mirror of
https://github.com/xomboverlord/ldc.git
synced 2026-01-17 21:33:13 +01:00
Added IrTypeFunction and IrTypeDelegate and eliminated IrDType. This means the Type::ir field can be removed. It's the final part needed for the move to a slightly more sane type system. Now the whole thing just needs to be cleaned up :P
Added -v-cg switch, which right now just prints "codegen: module.name (module/name.d)" to stdout, this can really help figuring out where, in some complex build command, things go wrong.
This commit is contained in:
47
ir/irtypefunction.cpp
Normal file
47
ir/irtypefunction.cpp
Normal file
@@ -0,0 +1,47 @@
|
||||
#include "llvm/DerivedTypes.h"
|
||||
#include "mtype.h"
|
||||
|
||||
#include "gen/irstate.h"
|
||||
#include "gen/tollvm.h"
|
||||
#include "gen/functions.h"
|
||||
|
||||
#include "ir/irtypefunction.h"
|
||||
|
||||
IrTypeFunction::IrTypeFunction(Type * dt)
|
||||
: IrType(dt, llvm::OpaqueType::get())
|
||||
{
|
||||
irfty = NULL;
|
||||
}
|
||||
|
||||
const llvm::Type * IrTypeFunction::buildType()
|
||||
{
|
||||
const llvm::Type* T;
|
||||
TypeFunction* tf = (TypeFunction*)dtype;
|
||||
if (tf->funcdecl)
|
||||
T = DtoFunctionType(tf->funcdecl);
|
||||
else
|
||||
T = DtoFunctionType(tf,NULL,NULL);
|
||||
|
||||
llvm::cast<llvm::OpaqueType>(pa.get())->refineAbstractTypeTo(T);
|
||||
return pa.get();
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
IrTypeDelegate::IrTypeDelegate(Type * dt)
|
||||
: IrType(dt, llvm::OpaqueType::get())
|
||||
{
|
||||
}
|
||||
|
||||
const llvm::Type * IrTypeDelegate::buildType()
|
||||
{
|
||||
assert(dtype->ty == Tdelegate);
|
||||
const LLType* i8ptr = getVoidPtrType();
|
||||
const LLType* func = DtoFunctionType(dtype->nextOf(), NULL, Type::tvoid->pointerTo());
|
||||
const LLType* funcptr = getPtrToType(func);
|
||||
const LLStructType* dgtype = LLStructType::get(i8ptr, funcptr, NULL);
|
||||
gIR->module->addTypeName(dtype->toChars(), dgtype);
|
||||
|
||||
llvm::cast<llvm::OpaqueType>(pa.get())->refineAbstractTypeTo(dgtype);
|
||||
return pa.get();
|
||||
}
|
||||
Reference in New Issue
Block a user