Mercurial > projects > ldc
diff tools/binding/llvm-typemonitor.cpp @ 1651:cb960b882ca3 default tip
bindings were moved to dsource.org/projects/bindings/
author | Moritz Warning <moritzwarning@web.de> |
---|---|
date | Thu, 20 May 2010 20:05:03 +0200 |
parents | 40bd4a0d4870 |
children |
line wrap: on
line diff
--- a/tools/binding/llvm-typemonitor.cpp Wed May 19 12:42:32 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,46 +0,0 @@ -/// Support for callbacks when an abstract type becomes more concrete. - -#include "llvm/Support/Streams.h" -#include "llvm/Type.h" -#include "llvm-c/Core.h" - -using namespace llvm; - -extern "C" typedef int (*RefineCallback)(void *handle, LLVMTypeRef newT); - -class TypeMonitor : AbstractTypeUser { - void *handle_; - RefineCallback callback_; - - void onRefineType(const Type* oldT, const Type* newT) { - callback_(handle_, wrap(newT)); - oldT->removeAbstractTypeUser(this); - delete this; - } - - public: - - TypeMonitor(Type* T, void *handle, RefineCallback callback) - : handle_(handle), callback_(callback) { - T->addAbstractTypeUser(this); - } - - virtual void refineAbstractType(const DerivedType *OldTy, const Type *NewTy) { - onRefineType(OldTy, NewTy); - } - - virtual void typeBecameConcrete(const DerivedType *AbsTy) { - onRefineType(AbsTy, AbsTy); - } - - virtual void dump() const { - cerr << "<TypeMonitor>"; - } -}; - -extern "C" void LLVMRegisterAbstractTypeCallback(LLVMTypeRef T, - void *handle, - RefineCallback callback) -{ - new TypeMonitor(unwrap(T), handle, callback); -}