OSDN Git Service

In libobjc/:
[pf3gnuchains/gcc-fork.git] / libobjc / memory.c
similarity index 57%
rename from libobjc/misc.c
rename to libobjc/memory.c
index fde1f30..2cb4dd3 100644 (file)
@@ -1,5 +1,5 @@
-/* GNU Objective C Runtime Miscellaneous 
-   Copyright (C) 1993, 1994, 1995, 1996, 1997, 2002, 2009
+/* GNU Objective C Runtime Memory allocation functions
+   Copyright (C) 1993, 1994, 1995, 1996, 1997, 2002, 2009, 2010
    Free Software Foundation, Inc.
    Contributed by Kresten Krab Thorup
 
@@ -25,6 +25,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 <http://www.gnu.org/licenses/>.  */
 
 #include "objc-private/common.h"
+#include "objc-private/error.h"
 
 /* __USE_FIXED_PROTOTYPES__ used to be required to get prototypes for
    malloc, free, etc. on some platforms.  It is unclear if we still
@@ -38,57 +39,10 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #include "objc-private/runtime.h"
 
 /*
-** Error handler function
-** NULL so that default is to just print to stderr
-*/
-static objc_error_handler _objc_error_handler = NULL;
-
-/* Trigger an objc error */
-void
-objc_error (id object, int code, const char *fmt, ...)
-{
-  va_list ap;
-
-  va_start (ap, fmt);
-  objc_verror (object, code, fmt, ap);
-  va_end (ap);
-}
-
-/* Trigger an objc error */
-void
-objc_verror (id object, int code, const char *fmt, va_list ap)
-{
-  BOOL result = NO;
-
-  /* Call the error handler if its there
-     Otherwise print to stderr */
-  if (_objc_error_handler)
-    result = (*_objc_error_handler) (object, code, fmt, ap);
-  else
-    vfprintf (stderr, fmt, ap);
-
-  /* Continue if the error handler says its ok
-     Otherwise abort the program */
-  if (result)
-    return;
-  else
-    abort ();
-}
-
-/* Set the error handler */
-objc_error_handler
-objc_set_error_handler (objc_error_handler func)
-{
-  objc_error_handler temp = _objc_error_handler;
-  _objc_error_handler = func;
-  return temp;
-}
-
-/*
-** Standard functions for memory allocation and disposal.
-** Users should use these functions in their ObjC programs so
-** that they work properly with garbage collectors as well as
-** can take advantage of the exception/error handling available.
+  Standard functions for memory allocation and disposal.  Users should
+  use these functions in their ObjC programs so that they work
+  properly with garbage collectors as well as can take advantage of
+  the exception/error handling available.
 */
 
 void *
@@ -96,7 +50,7 @@ objc_malloc (size_t size)
 {
   void *res = (void *) (*_objc_malloc) (size);
   if (! res)
-    objc_error (nil, OBJC_ERR_MEMORY, "Virtual memory exhausted\n");
+    _objc_abort ("Virtual memory exhausted\n");
   return res;
 }
 
@@ -105,7 +59,7 @@ objc_atomic_malloc (size_t size)
 {
   void *res = (void *) (*_objc_atomic_malloc) (size);
   if (! res)
-    objc_error (nil, OBJC_ERR_MEMORY, "Virtual memory exhausted\n");
+    _objc_abort ("Virtual memory exhausted\n");
   return res;
 }
 
@@ -114,7 +68,7 @@ objc_valloc (size_t size)
 {
   void *res = (void *) (*_objc_valloc) (size);
   if (! res)
-    objc_error (nil, OBJC_ERR_MEMORY, "Virtual memory exhausted\n");
+    _objc_abort ("Virtual memory exhausted\n");
   return res;
 }
 
@@ -123,7 +77,7 @@ objc_realloc (void *mem, size_t size)
 {
   void *res = (void *) (*_objc_realloc) (mem, size);
   if (! res)
-    objc_error (nil, OBJC_ERR_MEMORY, "Virtual memory exhausted\n");
+    _objc_abort ("Virtual memory exhausted\n");
   return res;
 }
 
@@ -132,7 +86,7 @@ objc_calloc (size_t nelem, size_t size)
 {
   void *res = (void *) (*_objc_calloc) (nelem, size);
   if (! res)
-    objc_error (nil, OBJC_ERR_MEMORY, "Virtual memory exhausted\n");
+    _objc_abort ("Virtual memory exhausted\n");
   return res;
 }
 
@@ -143,25 +97,28 @@ objc_free (void *mem)
 }
 
 /*
-** Hook functions for memory allocation and disposal.
-** This makes it easy to substitute garbage collection systems
-** such as Boehm's GC by assigning these function pointers
-** to the GC's allocation routines.  By default these point
-** to the ANSI standard malloc, realloc, free, etc.
-**
-** Users should call the normal objc routines above for
-** memory allocation and disposal within their programs.
+  Hook functions for memory allocation and disposal.  This makes it
+  easy to substitute garbage collection systems such as Boehm's GC by
+  assigning these function pointers to the GC's allocation routines.
+  By default these point to the ANSI standard malloc, realloc, free,
+  etc.
+
+  Users should call the normal objc routines above for memory
+  allocation and disposal within their programs.
 */
 
 #if OBJC_WITH_GC
 #include <gc.h>
 
+/* FIXME: The following sounds pointless because the GC_malloc
+   documentation says that it returns memory that is already zeroed!
+*/
 static void *
 GC_calloc (size_t nelem, size_t size)
 {
   void *p = GC_malloc (nelem * size);
   if (! p)
-    objc_error (nil, OBJC_ERR_MEMORY, "Virtual memory exhausted!\n");
+    _objc_abort ("Virtual memory exhausted!\n");
 
   memset (p, 0, nelem * size);
   return p;