annotate runtime/array.c @ 110:336da6ce8174

Merge
author Mike Pavone <pavone@retrodev.com>
date Wed, 06 Oct 2010 23:48:32 +0000
parents 439db471f595
children 72c648bca43b
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 {
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
15 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
16 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
17 get_blueprint(val)->copy(val);
103
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
18 release_ref(val);
49
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
19 }
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
20
105
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 103
diff changeset
21 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
22 {
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 103
diff changeset
23 int32_t idx;
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 103
diff changeset
24 object * cur;
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 103
diff changeset
25 t_Array *sarr,*darr;
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 103
diff changeset
26 sarr = (t_Array *)src;
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 103
diff changeset
27 darr = (t_Array *)dest;
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 103
diff changeset
28 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
29 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
30 for (idx = 0; idx < len; ++idx)
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 103
diff changeset
31 {
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 103
diff changeset
32 darr->payload.Eltype->bp->copy(cur);
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 103
diff changeset
33 cur++;
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 103
diff changeset
34 }
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 103
diff changeset
35 release_ref(src);
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 103
diff changeset
36 }
43cc42df26cc Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents: 103
diff changeset
37
49
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
38 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
39 {
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
40 object * ret;
96
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
41 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
42 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
43 release_ref(array);
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
44 return ret;
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
45 }
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
46
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
47 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
48 {
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 intarr[index] = val;
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
51 }
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
52
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
53 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
54 {
96
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
55 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
56 ret->payload.Length = 0;
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
57 ret->payload.Storage = size;
96
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
58
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
59 return (object *)ret;
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
60 }
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
61
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
62 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
63 {
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
64 int32_t tocopy,idx;
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
65 object **srcarr, **destarr;
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
66 t_BoxedSP_Array * source = (t_BoxedSP_Array *)osource;
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);
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
68 ret->payload.Length = 0;
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
69 ret->payload.Storage = size;
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
70 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
71 srcarr = (object **)(source+1);
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
72 destarr = (object **)(ret+1);
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
73 for(idx = 0; idx < tocopy; ++idx)
103
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
74 destarr[idx] = add_ref(srcarr[idx]);
96
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
75 release_ref(osource);
49
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
76
53
70af7fa155d0 Cleaned up some C warnings and added a simple compile script
Mike Pavone <pavone@retrodev.com>
parents: 49
diff changeset
77 return (object *)ret;
49
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
78 }
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
79
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
80 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
81 {
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
82 t_Array * ret;
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
83 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
84 if (bp->bp->size < 0) {
96
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
85 release_ref(type);
49
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
86 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
87 }
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
88 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
89 ret->payload.Length = 0;
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
90 ret->payload.Storage = size;
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
91 ret->payload.Eltype = bp;
3e20ed8959c4 Added initial FFI implementation, Array type and 64-bit integers
Mike Pavone <pavone@retrodev.com>
parents: 7
diff changeset
92
96
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
93 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
94 }
4d5ea487f810 Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents: 53
diff changeset
95
96
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
96 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
97 {
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
98 int32_t tocopy,idx;
97
fa437d23bb24 fix memory corruption bug
Mike Pavone <pavone@retrodev.com>
parents: 96
diff changeset
99 char *cur;
96
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
100 t_Array * ret, *source = (t_Array *)osource;
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
101 t_Blueprint * bp = source->payload.Eltype;
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
102
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
103 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
104 ret->payload.Length = 0;
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
105 ret->payload.Storage = size;
103
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
106 ret->payload.Eltype = bp;
96
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
107 add_ref((object *)bp);
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
108 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
109 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
110
96
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
111 if(bp->bp->type_id >= TYPE_ARRAY)
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
112 {
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
113 //Ugly hack
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
114 cur = ((char *)(ret+1))-sizeof(object) ;
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
115 for(idx=0; idx < tocopy; ++idx)
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
116 {
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
117 bp->bp->copy((object *)cur);
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
118 cur += bp->bp->size;
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
119 }
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
120 }
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
121 release_ref(osource);
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
122
5a08705f7610 Semi-broken cleanup of Array implementation
Mike Pavone <pavone@retrodev.com>
parents: 78
diff changeset
123 return (object *)ret;
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
103
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
126 void internalarrayboxedcopy(object * obj)
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
127 {
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
128 int32_t idx;
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
129 object **elarr;
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
130 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
131 elarr = (object **)(arr+1);
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
132 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
133 {
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
134 add_ref(elarr[idx]);
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
135 }
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
136 }
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
137
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
138 void internalarraynakedcopy(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 tocopy,idx;
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
141 char *cur;
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
142 t_Array *arr = (t_Array *)obj;
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
143 t_Blueprint * bp = arr->payload.Eltype;
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
144 //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
145 if(bp->bp->type_id >= TYPE_ARRAY)
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
146 {
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
147 //Ugly hack
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
148 cur = ((char *)(arr+1))-sizeof(object) ;
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
149 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
150 {
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
151 bp->bp->copy((object *)cur);
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
152 cur += bp->bp->size;
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
153 }
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
154 }
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
155 add_ref((object *)bp);
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
156 }
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
157
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
158 void internalarrayboxedcleanup(object * obj)
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
159 {
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
160 int32_t idx;
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
161 object **elarr;
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
162 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
163 elarr = (object **)(arr+1);
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
164 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
165 {
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
166 release_ref(elarr[idx]);
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
167 }
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 internalarraynakedcleanup(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 tocopy,idx;
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
173 char *cur;
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
174 t_Array *arr = (t_Array *)obj;
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
175 t_Blueprint * bp = arr->payload.Eltype;
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
176 //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
177 if(bp->bp->type_id >= TYPE_ARRAY)
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
178 {
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
179 //Ugly hack
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
180 cur = ((char *)(arr+1))-sizeof(object) ;
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
181 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
182 {
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
183 bp->bp->cleanup((object *)cur);
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
184 cur += bp->bp->size;
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
185 }
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
186 }
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
187 release_ref((object *)bp);
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
188 }
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
189
104
2d2da148d844 Performance improvement for string comparisons
Mike Pavone <pavone@retrodev.com>
parents: 103
diff changeset
190 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
191 {
2d2da148d844 Performance improvement for string comparisons
Mike Pavone <pavone@retrodev.com>
parents: 103
diff changeset
192 return memcmp(((char *)left)+loff, ((char *)right)+roff, len);
2d2da148d844 Performance improvement for string comparisons
Mike Pavone <pavone@retrodev.com>
parents: 103
diff changeset
193 }
103
7428aa5d6ade Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents: 97
diff changeset
194