]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/debug.cc
patch::: 1.1.30.mb1: Re: LilyPond 1.1.30
[lilypond.git] / lily / debug.cc
index a2bce7c8ce91019fe80e30ee87bfcef43557b768..200af4ec3296defbbe6c4396f322cf2c350174e7 100644 (file)
@@ -1,20 +1,39 @@
+/*   
+  debug.cc --  implement debugging routines
+  
+  source file of the GNU LilyPond music typesetter
+  
+  (c) 1996,98 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+  
+ */
 #include <fstream.h>
 #include <signal.h>
-#include <std/new.h>
+
+// libg++ 2.8.0
+// #include <std/new.h>
 #include <stdlib.h>
+
+
 #include "debug.hh"
 #include "dstream.hh"
 #include "flower-debug.hh"
+#include "moment.hh"
+#include "misc.hh"
+#include "main.hh"
 
 Dstream *monitor=0;
 ostream * nulldev =0;
+
+
 // ugh
 struct _Dinit {
-    _Dinit() {
-       nulldev = new ofstream("/dev/null");
-       monitor = new Dstream(&cout,".dstreamrc");
+  _Dinit()
+    {
+       nulldev = new ofstream ("/dev/null");
+       monitor = new Dstream (&cout,".dstreamrc");
     }
-    ~_Dinit() {
+  ~_Dinit()
+    {
        delete nulldev;
        delete monitor;
     }
@@ -28,34 +47,96 @@ struct _Dinit {
 void
 mynewhandler()
 {
-    assert(false);
+  assert (false);
 }
 
 void
-float_handler(int)
+float_handler (int)
 {
-    cerr << "Floating point exception .. \n"<< flush;
-    assert(false);
+  cerr << _ ("Floating point exception") << endl;
+  assert (false);
 }
 
+
 void
 debug_init()
 {
 #ifndef NDEBUG
-    set_new_handler(&mynewhandler);
+  // libg++ 2.8.0 doesn't have set_new_handler
+  // set_new_handler (&mynewhandler);
 #endif
-    set_flower_debug(*monitor, check_debug);
-    
-    signal(SIGFPE, float_handler);
-}   
+  set_flower_debug (*monitor, check_debug);
+
+  signal (SIGFPE, float_handler);
+}
 
 bool check_debug=false;
 
+
+bool check_malloc_b = false;
+
+// #define MEMORY_PARANOID
+
+#ifdef MEMORY_PARANOID
+
+#include <malloc.h>
+
 void
-set_debug(bool b)
+frobnify (void *p, size_t s)
 {
-    check_debug =b;
-    set_flower_debug(*monitor, check_debug);
-  }
+  char *cp = (char*)p;
+  char *e  = cp + s;
+  while (cp < e)
+    {
+      *cp++ ^=42;
+    }
+}
 
 
+void *
+operator new (size_t size)
+{
+  void *result;
+  result = malloc (size);
+  if (check_malloc_b)
+    frobnify (result, size);
+  return result;
+}
+
+void *to_frob; int frob_size;
+
+void
+set_frobnify (void * p, size_t sz)
+{
+  to_frob = p;
+  frob_size = sz;
+}
+
+void 
+operator delete (void *p)
+{
+  if (!p)
+    return ;
+  if (p == to_frob)
+    {
+      frobnify (p, frob_size);
+      to_frob = 0;
+      frob_size=0;
+    }
+
+  free (p);
+}
+#endif // MEMORY_PARANOID
+
+void
+set_debug (bool b)
+{
+  check_debug =b;
+  set_flower_debug (*monitor, check_debug);
+#ifdef MEMORY_PARANOID
+  if (check_malloc_b)
+    if (mcheck (0))
+      warning (_ ("can't set mem-checking") + "!");
+#endif
+}
+