-bool Module::reduceApply(bool (*Func)(const Method*)) const {
- return reduce_apply_bool(begin(), end(), Func);
+
+
+// dropAllReferences() - This function causes all the subelementss to "let go"
+// of all references that they are maintaining. This allows one to 'delete' a
+// whole module 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() {
+ for(Module::iterator I = begin(), E = end(); I != E; ++I)
+ I->dropAllReferences();
+
+ for(Module::giterator I = gbegin(), E = gend(); I != E; ++I)
+ I->dropAllReferences();
+
+ // If there are any GlobalVariable references still out there, nuke them now.
+ // Since all references are hereby dropped, nothing could possibly reference
+ // them still. Note that destroying all of the constant pointer refs will
+ // eventually cause the GVRefMap field to be set to null (by
+ // destroyConstantPointerRef, below).
+ //
+ while (GVRefMap)
+ // Delete the ConstantPointerRef node...
+ GVRefMap->Map.begin()->second->destroyConstant();