Mercurial > repos > rhope
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 { |