diff --git a/src/gc.c b/src/gc.c index 99a5dab83cde27517c16c0e000f5a5aecd7b8206..ebc9a15e321d64411c1fb16e7d9b7412061b7465 100644 --- a/src/gc.c +++ b/src/gc.c @@ -29,7 +29,7 @@ struct callback *gc_evaluator_callback=0; #include "block_alloc.h" -RCSID("$Id: gc.c,v 1.116 2000/08/11 13:08:02 grubba Exp $"); +RCSID("$Id: gc.c,v 1.117 2000/08/11 13:17:13 grubba Exp $"); /* Run garbage collect approximately every time * 20 percent of all arrays, objects and programs is @@ -93,9 +93,19 @@ RCSID("$Id: gc.c,v 1.116 2000/08/11 13:08:02 grubba Exp $"); #define GC_VERBOSE_DO(X) #endif +/* Kludge to avoid some loss of precision warnings. */ +#ifdef __ECL +static inline long CAST_TO_LONG(ptrdiff_t val) +{ + return DO_NOT_WARN((long)val); +} +#else /* !__ECL */ +#define CAST_TO_LONG(val) ((long)(val)) +#endif /* __ECL */ + INT32 num_objects = 1; /* Account for empty_array. */ INT32 num_allocs =0; -INT32 alloc_threshold = MIN_ALLOC_THRESHOLD; +ptrdiff_t alloc_threshold = MIN_ALLOC_THRESHOLD; PMOD_EXPORT int Pike_in_gc = 0; struct pike_queue gc_mark_queue; time_t last_gc; @@ -398,7 +408,8 @@ void describe_location(void *real_memblock, #define FOO(NTYP,TYP,NAME) \ if(location == (void *)&p->NAME) fprintf(stderr,"%*s **In p->" #NAME "\n",indent,""); \ if(ptr >= (char *)p->NAME && ptr<(char*)(p->NAME+p->PIKE_CONCAT(num_,NAME))) \ - fprintf(stderr,"%*s **In p->" #NAME "[%ld]\n",indent,"",((long)ptr - (long)(p->NAME)) / sizeof(TYP)); + fprintf(stderr,"%*s **In p->" #NAME "[%ld]\n",indent,"", \ + CAST_TO_LONG(((char *)ptr - (char *)(p->NAME)) / sizeof(TYP))); #include "program_areas.h" break; @@ -460,7 +471,8 @@ void describe_location(void *real_memblock, { struct array *a=(struct array *)memblock; struct svalue *s=(struct svalue *)location; - fprintf(stderr,"%*s **In index %ld\n",indent,"",(long)(s-ITEM(a))); + fprintf(stderr,"%*s **In index %ld\n",indent,"", + DO_NOT_WARN((long)(s-ITEM(a)))); break; } } @@ -720,7 +732,8 @@ void low_describe_something(void *a, case T_STRING: { struct pike_string *s=(struct pike_string *)a; - fprintf(stderr,"%*s**String length is %d:\n",indent,"",s->len); + fprintf(stderr, "%*s**String length is %ld:\n", indent, "", + DO_NOT_WARN((long)s->len)); if(s->len>77) { fprintf(stderr,"%*s** \"%60s ...\"\n",indent,"",s->str); @@ -754,7 +767,7 @@ void describe_something(void *a, int t, int indent, int depth, int flags) get_name_of_type(t)); } else #endif /* DEBUG_MALLOC */ - if (((int)a) & 3) { + if (((ptrdiff_t)a) & 3) { fprintf(stderr,"%*s**Location: %p Type: %s Misaligned address\n",indent,"",a, get_name_of_type(t)); } else { @@ -2134,7 +2147,7 @@ int do_gc(void) if(tmp > MAX_ALLOC_THRESHOLD) tmp = (double)MAX_ALLOC_THRESHOLD; - alloc_threshold = (int)tmp; + alloc_threshold = (ptrdiff_t)tmp; num_allocs=0; @@ -2173,16 +2186,16 @@ void f__gc_status(INT32 args) push_int(num_allocs); push_constant_text("alloc_threshold"); - push_int(alloc_threshold); + push_int32(alloc_threshold); push_constant_text("objects_alloced"); - push_int(objects_alloced); + push_int32(objects_alloced); push_constant_text("objects_freed"); - push_int(objects_freed); + push_int32(objects_freed); push_constant_text("last_gc"); - push_int(last_gc); + push_int32(last_gc); push_constant_text("projected_garbage"); push_float(objects_freed * (double) num_allocs / (double) alloc_threshold); diff --git a/src/mapping.c b/src/mapping.c index d196f8f3fea9a9cee228eb32a52d270adccc60fa..dba67d5d1769a5a61d79dcfabd35366af52251b2 100644 --- a/src/mapping.c +++ b/src/mapping.c @@ -5,7 +5,7 @@ \*/ /**/ #include "global.h" -RCSID("$Id: mapping.c,v 1.97 2000/08/07 09:47:47 grubba Exp $"); +RCSID("$Id: mapping.c,v 1.98 2000/08/11 13:20:44 grubba Exp $"); #include "main.h" #include "object.h" #include "mapping.h" @@ -43,7 +43,7 @@ static struct mapping *gc_mark_mapping_pos = 0; ( (struct keypair *)DO_ALIGN( (ptrdiff_t) (((struct mapping_data *)(MD))->hash + HSIZE), ALIGNOF(struct keypair)) ) #define MAPPING_DATA_SIZE(HSIZE, KEYPAIRS) \ - (long)( MD_KEYPAIRS(0, HSIZE) + KEYPAIRS ) + (ptrdiff_t)( MD_KEYPAIRS(0, HSIZE) + KEYPAIRS ) @@ -120,7 +120,7 @@ static void init_mapping(struct mapping *m, INT32 size) { struct mapping_data *md; char *tmp; - INT32 e; + ptrdiff_t e; INT32 hashsize; debug_malloc_touch(m); @@ -350,7 +350,8 @@ static struct mapping *rehash(struct mapping *m, int new_size) struct mapping_data *copy_mapping_data(struct mapping_data *md) { - long off,size,e; + long e; + ptrdiff_t size, off; struct mapping_data *nmd; struct keypair *keypairs; @@ -2101,7 +2102,7 @@ void debug_dump_mapping(struct mapping *m) { fprintf(stderr, "Refs=%d, flags=0x%x, next=%p, prev=%p", m->refs, m->flags, m->next, m->prev); - if (((int)m->data) & 3) { + if (((ptrdiff_t)m->data) & 3) { fprintf(stderr, ", data=%p (unaligned)\n", m->data); } else { fprintf(stderr, ", size=%d, hashsize=%d\n", diff --git a/src/pike_memory.c b/src/pike_memory.c index 855d4db4887259dcc4eb4a9279b5fa533a455d11..32b617a0058df62938355f50ab34275c0185057c 100644 --- a/src/pike_memory.c +++ b/src/pike_memory.c @@ -10,7 +10,7 @@ #include "pike_macros.h" #include "gc.h" -RCSID("$Id: pike_memory.c,v 1.77 2000/08/11 11:44:14 grubba Exp $"); +RCSID("$Id: pike_memory.c,v 1.78 2000/08/11 13:22:38 grubba Exp $"); /* strdup() is used by several modules, so let's provide it */ #ifndef HAVE_STRDUP @@ -27,7 +27,7 @@ char *strdup(const char *str) } #endif /* !HAVE_STRDUP */ -int pcharp_memcmp(PCHARP a, PCHARP b, int sz) +ptrdiff_t pcharp_memcmp(PCHARP a, PCHARP b, int sz) { return generic_quick_binary_strcmp((char *)a.ptr, sz, a.shift, (char *)b.ptr, sz, b.shift); diff --git a/src/pike_memory.h b/src/pike_memory.h index 35873bc8fbbe0b92d2fa6f874e370804157d4c36..7e3c7bc4eec1ed0ce489c3c7fb439658fb164ca8 100644 --- a/src/pike_memory.h +++ b/src/pike_memory.h @@ -5,7 +5,7 @@ \*/ /* - * $Id: pike_memory.h,v 1.17 2000/08/10 18:02:21 grubba Exp $ + * $Id: pike_memory.h,v 1.18 2000/08/11 13:25:03 grubba Exp $ */ #ifndef MEMORY_H #define MEMORY_H @@ -60,7 +60,7 @@ struct generic_mem_searcher #define MEMCHR0 MEMCHR /* Note to self: Prototypes must be updated manually /Hubbe */ -PMOD_EXPORT int pcharp_memcmp(PCHARP a, PCHARP b, int sz); +PMOD_EXPORT ptrdiff_t pcharp_memcmp(PCHARP a, PCHARP b, int sz); PMOD_EXPORT long pcharp_strlen(PCHARP a); PMOD_EXPORT INLINE p_wchar1 *MEMCHR1(p_wchar1 *p, p_wchar1 c, ptrdiff_t e); PMOD_EXPORT INLINE p_wchar2 *MEMCHR2(p_wchar2 *p, p_wchar2 c, ptrdiff_t e);