comparison runtime/array.c @ 119:72c648bca43b

Improved memory debug output and fixed memory leak in Array
author Mike Pavone <pavone@retrodev.com>
date Mon, 18 Oct 2010 00:50:18 -0400
parents 439db471f595
children
comparison
equal deleted inserted replaced
118:b3f56e1d54a0 119:72c648bca43b
10 release_ref(array); 10 release_ref(array);
11 } 11 }
12 12
13 void _internal_array_copyin(object * array, int32_t index, object * val) 13 void _internal_array_copyin(object * array, int32_t index, object * val)
14 { 14 {
15 char *dest;
15 t_Array * arr = (t_Array *)array; 16 t_Array * arr = (t_Array *)array;
17 t_Blueprint * bp = arr->payload.Eltype;
18 if(bp->bp->type_id >= TYPE_ARRAY && index < arr->payload.Length)
19 {
20 //Ugly hack
21 dest = ((char *)(arr+1))-sizeof(object) + bp->bp->size * index;
22 bp->bp->cleanup((object *)dest);
23 }
16 memcpy(((char *)array) + sizeof(t_Array) + arr->payload.Eltype->bp->size * index, ((char *)val) + sizeof(object), arr->payload.Eltype->bp->size); 24 memcpy(((char *)array) + sizeof(t_Array) + arr->payload.Eltype->bp->size * index, ((char *)val) + sizeof(object), arr->payload.Eltype->bp->size);
17 get_blueprint(val)->copy(val); 25 get_blueprint(val)->copy(val);
18 release_ref(val); 26 release_ref(val);
19 } 27 }
20 28
45 } 53 }
46 54
47 void _internal_array_setboxed(object *array, int32_t index, object * val) 55 void _internal_array_setboxed(object *array, int32_t index, object * val)
48 { 56 {
49 object ** intarr = (object **)(((char *) array) + sizeof(t_BoxedSP_Array)); 57 object ** intarr = (object **)(((char *) array) + sizeof(t_BoxedSP_Array));
58 if (index < ((t_BoxedSP_Array *)array)->payload.Length)
59 {
60 release_ref(intarr[index]);
61 }
50 intarr[index] = val; 62 intarr[index] = val;
51 } 63 }
52 64
53 object *_internal_array_allocboxed(int32_t size) 65 object *_internal_array_allocboxed(int32_t size)
54 { 66 {