Mercurial > projects > ldc
view gen/classes.h @ 948:780530d1cad3
Revert templates to old behavior.
While emitting a template instantiation only once is good for compile times
and binary sizes, it doesn't work with linkonce linkage as inlined function
bodies could be discarded. Since we don't want to inhibit inlining, templates
are reverted to the previous behavior, where an instantiation is emitted for
each module using it.
In the future, a custom inlining pass may allow us to switch back to
common/weak linkage and reenable smart template instance emission.
author | Christian Kamm <kamm incasoftware de> |
---|---|
date | Sun, 08 Feb 2009 21:44:46 +0100 |
parents | 5a2983f97498 |
children | 79758fd2f48a |
line wrap: on
line source
#ifndef LDC_GEN_CLASSES_H #define LDC_GEN_CLASSES_H #include "gen/structs.h" /** * Resolves the llvm type for a class declaration */ void DtoResolveClass(ClassDeclaration* cd); /** * Provides the llvm declaration for a class declaration */ void DtoDeclareClass(ClassDeclaration* cd); /** * Constructs the constant initializer for a class declaration */ void DtoConstInitClass(ClassDeclaration* cd); /** * Provides the llvm definition for a class declaration */ void DtoDefineClass(ClassDeclaration* cd); void DtoDeclareClassInfo(ClassDeclaration* cd); void DtoDefineClassInfo(ClassDeclaration* cd); DValue* DtoNewClass(Loc loc, TypeClass* type, NewExp* newexp); void DtoInitClass(TypeClass* tc, LLValue* dst); DValue* DtoCallClassCtor(TypeClass* type, CtorDeclaration* ctor, Array* arguments, LLValue* mem); void DtoFinalizeClass(LLValue* inst); DValue* DtoCastClass(DValue* val, Type* to); DValue* DtoDynamicCastObject(DValue* val, Type* to); DValue* DtoCastInterfaceToObject(DValue* val, Type* to); DValue* DtoDynamicCastInterface(DValue* val, Type* to); LLValue* DtoIndexClass(LLValue* src, ClassDeclaration* sd, VarDeclaration* vd); LLValue* DtoVirtualFunctionPointer(DValue* inst, FuncDeclaration* fdecl); #endif