diff options
author | Chris Lattner <sabre@nondot.org> | 2001-06-06 20:29:01 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2001-06-06 20:29:01 +0000 |
commit | 009505452b713ed2e3a8e99c5545a6e721c65495 (patch) | |
tree | 136a71c5b87bdf534d1f20a67558b49226b5a4d6 /lib/VMCore/Module.cpp | |
parent | 8d0afd3d32d1d67f9aa5df250a1d6955aa8f1ac9 (diff) |
Initial revision
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@2 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/VMCore/Module.cpp')
-rw-r--r-- | lib/VMCore/Module.cpp | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/lib/VMCore/Module.cpp b/lib/VMCore/Module.cpp new file mode 100644 index 0000000000..4f2eee4661 --- /dev/null +++ b/lib/VMCore/Module.cpp @@ -0,0 +1,42 @@ +//===-- Module.cpp - Implement the Module class ------------------*- C++ -*--=// +// +// This file implements the Module class for the VMCore library. +// +//===----------------------------------------------------------------------===// + +#include "llvm/ValueHolderImpl.h" +#include "llvm/InstrTypes.h" +#include "llvm/BasicBlock.h" +#include "llvm/Method.h" +#include "llvm/Module.h" + +// Instantiate Templates - This ugliness is the price we have to pay +// for having a DefHolderImpl.h file seperate from DefHolder.h! :( +// +template class ValueHolder<Method, Module>; + +Module::Module() + : SymTabValue(0/*TODO: REAL TYPE*/, Value::ModuleVal, ""), + MethodList(this, this) { +} + +Module::~Module() { + dropAllReferences(); + MethodList.delete_all(); + MethodList.setParent(0); +} + + +// dropAllReferences() - This function causes all the subinstructions to "let +// go" of all references that they are maintaining. This allows one to +// 'delete' a whole class at a time, even though there may be circular +// references... first all references are dropped, and all use counts go to +// zero. Then everything is delete'd for real. Note that no operations are +// valid on an object that has "dropped all references", except operator +// delete. +// +void Module::dropAllReferences() { + MethodListType::iterator MI = MethodList.begin(); + for (; MI != MethodList.end(); MI++) + (*MI)->dropAllReferences(); +} |