--- parser3/src/main/pa_memory.C 2003/03/20 09:41:46 1.1.2.5.2.2 +++ parser3/src/main/pa_memory.C 2015/10/26 23:33:32 1.12 @@ -1,21 +1,32 @@ /** @file Parser: memory reference counting classes. - Copyright (c) 2001-2003 ArtLebedev Group (http://www.artlebedev.com) + Copyright (c) 2001-2015 Art. Lebedev Studio (http://www.artlebedev.com) Author: Alexandr Petrosian (http://paf.design.ru) */ -static const char* IDENT_MEMORY_C="$Date: 2003/03/20 09:41:46 $"; - -/* -#include "pa_exception.h" -#include "pa_common.h"*/ #include "pa_sapi.h" +#include "pa_common.h" + +volatile const char * IDENT_PA_MEMORY_C="$Id: pa_memory.C,v 1.12 2015/10/26 23:33:32 moko Exp $" IDENT_PA_MEMORY_H; void *pa_fail_alloc(const char* what, size_t size) { - SAPI::abort("out of memory: failed to %s %u bytes", - what, size); +#ifdef PA_DEBUG_DISABLE_GC + SAPI::die("out of memory (in pa_fail_alloc)"); +#else + SAPI::die("out of memory: failed to %s %u bytes. heap_used=%u, heap_free=%u, bytes_since_gc=%u, total_bytes=%u", + what, size, GC_get_heap_size(), GC_get_free_bytes(), GC_get_bytes_since_gc(), GC_get_total_bytes()); +#endif + // never reached + return 0; +} +#ifdef _MSC_VER +extern "C" void *pa_fail_alloc(const char* what); +void *pa_fail_alloc(const char* what) { + SAPI::die("fatal memory error: %s. heap_used=%u, heap_free=%u, bytes_since_gc=%u, total_bytes=%u", + what, GC_get_heap_size(), GC_get_free_bytes(), GC_get_bytes_since_gc(), GC_get_total_bytes()); // never reached return 0; } +#endif