annotate runtime/array.c @ 177:e57c151f351e

Get bytecode engine working well enough for naive fib
author Mike Pavone <pavone@retrodev.com>
date Sun, 12 Jun 2011 03:49:51 -0700
parents 72c648bca43b
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
49
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
1 #include "integer.h"
78
4d5ea487f810 Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents: 53
diff changeset
2 #include "object.h"
97
fa437d23bb24 fix memory corruption bug
Mike Pavone <pavone@retrodev.com>
parents: 96
diff changeset
3 #include <stdio.h>
78
4d5ea487f810 Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents: 53
diff changeset
4
49
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
5 void _internal_array_copyout(object * array, int32_t index, object * dest)
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
6 {
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
7 t_Array * arr = (t_Array *)array;
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
8 memcpy(((char *)dest) + sizeof(object), ((char *)array) + sizeof(t_Array) + arr->payload.Eltype->bp->size * index, get_blueprint(dest)->size);
78
4d5ea487f810 Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents: 53
diff changeset
9 get_blueprint(dest)->copy(dest);
103
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
10 release_ref(array);
49
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
11 }
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
12
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
13 void _internal_array_copyin(object * array, int32_t index, object * val)
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
14 {
119
72c648bca43b Improved memory debug output and fixed memory leak in Array
Mike Pavone <pavone@retrodev.com>
parents: 106
diff changeset
15 char *dest;
49
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
16 t_Array * arr = (t_Array *)array;
119
72c648bca43b Improved memory debug output and fixed memory leak in Array
Mike Pavone <pavone@retrodev.com>
parents: 106
diff changeset
17 t_Blueprint * bp = arr->payload.Eltype;
72c648bca43b Improved memory debug output and fixed memory leak in Array
Mike Pavone <pavone@retrodev.com>
parents: 106
diff changeset
18 if(bp->bp->type_id >= TYPE_ARRAY && index < arr->payload.Length)
72c648bca43b Improved memory debug output and fixed memory leak in Array
Mike Pavone <pavone@retrodev.com>
parents: 106
diff changeset
19 {
72c648bca43b Improved memory debug output and fixed memory leak in Array
Mike Pavone <pavone@retrodev.com>
parents: 106
diff changeset
20 //Ugly hack
72c648bca43b Improved memory debug output and fixed memory leak in Array
Mike Pavone <pavone@retrodev.com>
parents: 106
diff changeset
21 dest = ((char *)(arr+1))-sizeof(object) + bp->bp->size * index;
72c648bca43b Improved memory debug output and fixed memory leak in Array
Mike Pavone <pavone@retrodev.com>
parents: 106
diff changeset
22 bp->bp->cleanup((object *)dest);
72c648bca43b Improved memory debug output and fixed memory leak in Array
Mike Pavone <pavone@retrodev.com>
parents: 106
diff changeset
23 }
49
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
24 memcpy(((char *)array) + sizeof(t_Array) + arr->payload.Eltype->bp->size * index, ((char *)val) + sizeof(object), arr->payload.Eltype->bp->size);
78
4d5ea487f810 Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents: 53
diff changeset
25 get_blueprint(val)->copy(val);
103
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
26 release_ref(val);
49
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
27 }
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
28
105
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 103
diff changeset
29 void _internal_array_copychunk(object * src, int32_t srcidx, object * dest, int32_t destidx, int32_t len)
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 103
diff changeset
30 {
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 103
diff changeset
31 int32_t idx;
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 103
diff changeset
32 object * cur;
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 103
diff changeset
33 t_Array *sarr,*darr;
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 103
diff changeset
34 sarr = (t_Array *)src;
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 103
diff changeset
35 darr = (t_Array *)dest;
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 103
diff changeset
36 memcpy((char *)(darr+1) + darr->payload.Eltype->bp->size * destidx, (char *)(sarr+1) + sarr->payload.Eltype->bp->size * srcidx, len*sarr->payload.Eltype->bp->size);
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 103
diff changeset
37 cur = (object *)((char *)(darr+1) + darr->payload.Eltype->bp->size * destidx - sizeof(object));
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 103
diff changeset
38 for (idx = 0; idx < len; ++idx)
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 103
diff changeset
39 {
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 103
diff changeset
40 darr->payload.Eltype->bp->copy(cur);
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 103
diff changeset
41 cur++;
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 103
diff changeset
42 }
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 103
diff changeset
43 release_ref(src);
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 103
diff changeset
44 }
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 103
diff changeset
45
49
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
46 object * _internal_array_getboxed(object * array, int32_t index)
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
47 {
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
48 object * ret;
96
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
49 object ** intarr = (object **)(((char *) array) + sizeof(t_BoxedSP_Array));
49
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
50 ret = add_ref(intarr[index]);
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
51 release_ref(array);
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
52 return ret;
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
53 }
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
54
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
55 void _internal_array_setboxed(object *array, int32_t index, object * val)
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
56 {
96
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
57 object ** intarr = (object **)(((char *) array) + sizeof(t_BoxedSP_Array));
119
72c648bca43b Improved memory debug output and fixed memory leak in Array
Mike Pavone <pavone@retrodev.com>
parents: 106
diff changeset
58 if (index < ((t_BoxedSP_Array *)array)->payload.Length)
72c648bca43b Improved memory debug output and fixed memory leak in Array
Mike Pavone <pavone@retrodev.com>
parents: 106
diff changeset
59 {
72c648bca43b Improved memory debug output and fixed memory leak in Array
Mike Pavone <pavone@retrodev.com>
parents: 106
diff changeset
60 release_ref(intarr[index]);
72c648bca43b Improved memory debug output and fixed memory leak in Array
Mike Pavone <pavone@retrodev.com>
parents: 106
diff changeset
61 }
49
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
62 intarr[index] = val;
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
63 }
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
64
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
65 object *_internal_array_allocboxed(int32_t size)
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
66 {
96
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
67 t_BoxedSP_Array * ret = (t_BoxedSP_Array *)new_multisize(TYPE_BOXEDARRAY, sizeof(nt_BoxedSP_Array)+sizeof(object *)*size);
49
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
68 ret->payload.Length = 0;
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
69 ret->payload.Storage = size;
96
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
70
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
71 return (object *)ret;
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
72 }
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
73
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
74 object *_internal_array_allocboxedcopy(object * osource, int32_t size)
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
75 {
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
76 int32_t tocopy,idx;
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
77 object **srcarr, **destarr;
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
78 t_BoxedSP_Array * source = (t_BoxedSP_Array *)osource;
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
79 t_BoxedSP_Array * ret = (t_BoxedSP_Array *)new_multisize(TYPE_BOXEDARRAY, sizeof(nt_BoxedSP_Array)+sizeof(object *)*size);
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
80 ret->payload.Length = 0;
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
81 ret->payload.Storage = size;
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
82 tocopy = size < source->payload.Length ? size : source->payload.Length;
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
83 srcarr = (object **)(source+1);
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
84 destarr = (object **)(ret+1);
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
85 for(idx = 0; idx < tocopy; ++idx)
103
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
86 destarr[idx] = add_ref(srcarr[idx]);
96
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
87 release_ref(osource);
49
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
88
53
70af7fa155d0 Cleaned up some C warnings and added a simple compile script
Mike Pavone <pavone@retrodev.com>
parents: 49
diff changeset
89 return (object *)ret;
49
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
90 }
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
91
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
92 object * _internal_array_allocnaked(int32_t size , object * type)
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
93 {
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
94 t_Array * ret;
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
95 t_Blueprint * bp = (t_Blueprint *)type;
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
96 if (bp->bp->size < 0) {
96
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
97 release_ref(type);
49
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
98 return _internal_array_allocboxed(size);
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
99 }
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
100 ret = (t_Array *)new_multisize(TYPE_ARRAY, sizeof(nt_Array)+bp->bp->size*size);
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
101 ret->payload.Length = 0;
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
102 ret->payload.Storage = size;
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
103 ret->payload.Eltype = bp;
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
104
96
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
105 return (object *)ret;
78
4d5ea487f810 Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents: 53
diff changeset
106 }
4d5ea487f810 Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents: 53
diff changeset
107
96
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
108 object * _internal_array_allocnakedcopy(object * osource, int32_t size)
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
109 {
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
110 int32_t tocopy,idx;
97
fa437d23bb24 fix memory corruption bug
Mike Pavone <pavone@retrodev.com>
parents: 96
diff changeset
111 char *cur;
96
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
112 t_Array * ret, *source = (t_Array *)osource;
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
113 t_Blueprint * bp = source->payload.Eltype;
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
114
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
115 ret = (t_Array *)new_multisize(TYPE_ARRAY, sizeof(nt_Array)+bp->bp->size*size);
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
116 ret->payload.Length = 0;
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
117 ret->payload.Storage = size;
103
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
118 ret->payload.Eltype = bp;
96
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
119 add_ref((object *)bp);
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
120 tocopy = size < source->payload.Length ? size : source->payload.Length;
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
121 memcpy(ret+1, source+1, tocopy*bp->bp->size);
103
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
122
96
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
123 if(bp->bp->type_id >= TYPE_ARRAY)
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
124 {
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
125 //Ugly hack
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
126 cur = ((char *)(ret+1))-sizeof(object) ;
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
127 for(idx=0; idx < tocopy; ++idx)
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
128 {
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
129 bp->bp->copy((object *)cur);
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
130 cur += bp->bp->size;
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
131 }
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
132 }
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
133 release_ref(osource);
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
134
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
135 return (object *)ret;
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
136 }
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
137
103
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
138 void internalarrayboxedcopy(object * obj)
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
139 {
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
140 int32_t idx;
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
141 object **elarr;
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
142 t_BoxedSP_Array * arr = (t_BoxedSP_Array *)obj;
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
143 elarr = (object **)(arr+1);
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
144 for(idx = 0; idx < arr->payload.Length; ++idx)
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
145 {
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
146 add_ref(elarr[idx]);
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
147 }
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
148 }
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
149
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
150 void internalarraynakedcopy(object * obj)
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
151 {
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
152 int32_t tocopy,idx;
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
153 char *cur;
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
154 t_Array *arr = (t_Array *)obj;
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
155 t_Blueprint * bp = arr->payload.Eltype;
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
156 //Lower type IDs don't have any reference params so we can safely skip this for those
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
157 if(bp->bp->type_id >= TYPE_ARRAY)
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
158 {
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
159 //Ugly hack
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
160 cur = ((char *)(arr+1))-sizeof(object) ;
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
161 for(idx=0; idx < arr->payload.Length; ++idx)
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
162 {
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
163 bp->bp->copy((object *)cur);
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
164 cur += bp->bp->size;
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
165 }
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
166 }
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
167 add_ref((object *)bp);
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
168 }
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
169
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
170 void internalarrayboxedcleanup(object * obj)
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
171 {
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
172 int32_t idx;
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
173 object **elarr;
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
174 t_BoxedSP_Array * arr = (t_BoxedSP_Array *)obj;
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
175 elarr = (object **)(arr+1);
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
176 for(idx = 0; idx < arr->payload.Length; ++idx)
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
177 {
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
178 release_ref(elarr[idx]);
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
179 }
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
180 }
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
181
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
182 void internalarraynakedcleanup(object * obj)
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
183 {
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
184 int32_t tocopy,idx;
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
185 char *cur;
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
186 t_Array *arr = (t_Array *)obj;
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
187 t_Blueprint * bp = arr->payload.Eltype;
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
188 //Lower type IDs don't have any reference params so we can safely skip this for those
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
189 if(bp->bp->type_id >= TYPE_ARRAY)
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
190 {
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
191 //Ugly hack
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
192 cur = ((char *)(arr+1))-sizeof(object) ;
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
193 for(idx=0; idx < arr->payload.Length; ++idx)
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
194 {
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
195 bp->bp->cleanup((object *)cur);
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
196 cur += bp->bp->size;
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
197 }
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
198 }
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
199 release_ref((object *)bp);
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
200 }
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
201
104
2d2da148d844 Performance improvement for string comparisons
Mike Pavone <pavone@retrodev.com>
parents: 103
diff changeset
202 int32_t _internal_memcmp_offset(void * left, int32_t loff, void * right, int32_t roff, int32_t len)
2d2da148d844 Performance improvement for string comparisons
Mike Pavone <pavone@retrodev.com>
parents: 103
diff changeset
203 {
2d2da148d844 Performance improvement for string comparisons
Mike Pavone <pavone@retrodev.com>
parents: 103
diff changeset
204 return memcmp(((char *)left)+loff, ((char *)right)+roff, len);
2d2da148d844 Performance improvement for string comparisons
Mike Pavone <pavone@retrodev.com>
parents: 103
diff changeset
205 }
103
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
206