Mercurial > repos > rhope
annotate runtime/array.c @ 105:43cc42df26cc
Various compiler improvements
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Tue, 24 Aug 2010 23:22:17 -0400 |
parents | 7428aa5d6ade |
children | 439db471f595 |
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 | 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 | 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 |
7428aa5d6ade
Compiler compiled by compiler sort of working
Mike Pavone <pavone@retrodev.com>
parents:
97
diff
changeset
|
190 |