From fc3e0de2fdb19b54e9f866ae42ff9b4b1c79a8fe Mon Sep 17 00:00:00 2001
From: Martin Nilsson <mani@lysator.liu.se>
Date: Thu, 26 Aug 2004 05:35:38 +0200
Subject: [PATCH] Object counting code, mostly by mast.

Rev: lib/modules/Debug.pmod/module.pmod:1.4
---
 lib/modules/Debug.pmod/module.pmod | 24 +++++++++++++++++++++++-
 1 file changed, 23 insertions(+), 1 deletion(-)

diff --git a/lib/modules/Debug.pmod/module.pmod b/lib/modules/Debug.pmod/module.pmod
index 42c42b40d0..7a79eeb67a 100644
--- a/lib/modules/Debug.pmod/module.pmod
+++ b/lib/modules/Debug.pmod/module.pmod
@@ -1,4 +1,4 @@
-// $Id: module.pmod,v 1.3 2002/11/27 21:14:05 nilsson Exp $
+// $Id: module.pmod,v 1.4 2004/08/26 03:35:38 nilsson Exp $
 
 #pike __REAL_VERSION__
 
@@ -75,3 +75,25 @@ constant reset_dmalloc = _reset_dmalloc;
 #if constant(_verify_internals)
 constant verify_internals = _verify_internals;
 #endif
+
+//! Returns the number of objects of every kind in memory.
+mapping(string:int) count_objects() {
+  int orig_enabled = Pike.gc_parameters()->enabled;
+  Pike.gc_parameters( (["enabled":0]) );
+
+  mapping(string:int) ret = ([]);
+
+  object obj = next_object();
+  //  while( zero_type(_prev(obj)) ) obj=_prev(obj);
+  while(1) {
+    object next_obj;
+    if(catch(next_obj=_next(obj))) break;
+    string p = sprintf("%O",object_program(obj));
+    sscanf(p, "object_program(%s)", p);
+    ret[p]++;
+    obj = next_obj;
+  }
+
+  Pike.gc_parameters( (["enabled":orig_enabled]) );
+  return ret;
+}
-- 
GitLab