new c_src
[nit.git] / c_src / array._sep.c
1 /* This C file is generated by NIT to compile module array. */
2 #include "array._sep.h"
3 val_t array___AbstractArray_____eqeq(val_t self, val_t param0) {
4 struct trace_t trace = {NULL, NULL, 199, LOCATE_array___AbstractArray_____eqeq};
5 val_t variable[7];
6 void **closurevariable = NULL;
7 trace.prev = tracehead; tracehead = &trace;
8 trace.file = LOCATE_array;
9 variable[0] = self;
10 variable[1] = param0;
11 variable[3] = TAG_Bool(( variable[1] /*o*/==NIT_NULL) || VAL_ISA( variable[1] /*o*/, COLOR_AbstractArray, ID_AbstractArray)) /*cast AbstractArray[E]*/;
12 variable[3] = TAG_Bool(!UNTAG_Bool(variable[3]));
13 if (!UNTAG_Bool(variable[3])) { /* or */
14 variable[3] = TAG_Bool(IS_EQUAL_NN( variable[1] /*o*/, NIT_NULL /*null*/));
15 }
16 if (UNTAG_Bool(variable[3])) { /*if*/
17 variable[2] = TAG_Bool(false);
18 goto return_label0;
19 }
20 variable[3] = TAG_Bool(( variable[1] /*o*/==NIT_NULL) || VAL_ISA( variable[1] /*o*/, COLOR_AbstractArray, ID_AbstractArray)) /*cast AbstractArray[E]*/;
21 if (!UNTAG_Bool(variable[3])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_array___AbstractArray_____eqeq, LOCATE_array, 203); nit_exit(1);}
22 variable[4] = variable[0];
23 variable[4] = CALL_abstract_collection___Collection___length(variable[4])(variable[4]) /*AbstractArray::length*/;
24 variable[3] = variable[4];
25 variable[4] = CALL_abstract_collection___Collection___length( variable[1] /*o*/)( variable[1] /*o*/) /*AbstractArray::length*/;
26 variable[4] = TAG_Bool((variable[4])!=( variable[3] /*l*/));
27 if (UNTAG_Bool(variable[4])) { /*if*/
28 variable[2] = TAG_Bool(false);
29 goto return_label0;
30 }
31 variable[4] = TAG_Int(0);
32 while (true) { /*while*/
33 variable[5] = TAG_Bool(UNTAG_Int( variable[4] /*i*/)<UNTAG_Int( variable[3] /*l*/));
34 if (!UNTAG_Bool(variable[5])) break; /* while*/
35 variable[5] = variable[0];
36 variable[5] = CALL_abstract_collection___Map_____bra(variable[5])(variable[5], variable[4] /*i*/) /*Map::[]*/;
37 variable[6] = CALL_abstract_collection___Map_____bra( variable[1] /*o*/)( variable[1] /*o*/, variable[4] /*i*/) /*Map::[]*/;
38 variable[5] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[5] == variable[6]) || ((variable[5] != NIT_NULL) && ((CALL_kernel___Object_____eqeq(variable[5])==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[5],variable[6])):(UNTAG_Bool(CALL_kernel___Object_____eqeq(variable[5])(variable[5], variable[6]) /*Object::==*/)))))));
39 if (UNTAG_Bool(variable[5])) { /*if*/
40 variable[2] = TAG_Bool(false);
41 goto return_label0;
42 }
43 variable[4] = TAG_Int(UNTAG_Int(variable[4])+UNTAG_Int( TAG_Int(1))) /*i*/;
44 continue_1: while(0);
45 }
46 break_1: while(0);
47 variable[2] = TAG_Bool(true);
48 goto return_label0;
49 return_label0: while(false);
50 tracehead = trace.prev;
51 return variable[2];
52 }
53 void array___AbstractArray___output(val_t self) {
54 struct trace_t trace = {NULL, NULL, 186, LOCATE_array___AbstractArray___output};
55 val_t variable[6];
56 void **closurevariable = NULL;
57 trace.prev = tracehead; tracehead = &trace;
58 trace.file = LOCATE_array;
59 variable[0] = self;
60 variable[2] = TAG_Int(0);
61 variable[4] = variable[0];
62 variable[4] = CALL_abstract_collection___Collection___length(variable[4])(variable[4]) /*AbstractArray::length*/;
63 variable[3] = variable[4];
64 while (true) { /*while*/
65 variable[4] = TAG_Bool(UNTAG_Int( variable[2] /*i*/)<UNTAG_Int( variable[3] /*l*/));
66 if (!UNTAG_Bool(variable[4])) break; /* while*/
67 variable[5] = variable[0];
68 variable[5] = CALL_abstract_collection___Map_____bra(variable[5])(variable[5], variable[2] /*i*/) /*Map::[]*/;
69 variable[4] = variable[5];
70 variable[5] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[4] /*e*/ == NIT_NULL /*null*/) || (( variable[4] /*e*/ != NIT_NULL) && ((CALL_kernel___Object_____eqeq( variable[4] /*e*/)==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[4] /*e*/, NIT_NULL /*null*/)):(UNTAG_Bool(CALL_kernel___Object_____eqeq( variable[4] /*e*/)( variable[4] /*e*/, NIT_NULL /*null*/) /*Object::==*/)))))));
71 if (UNTAG_Bool(variable[5])) { /*if*/
72 CALL_kernel___Object___output( variable[4] /*e*/)( variable[4] /*e*/) /*Object::output*/;
73 }
74 variable[2] = TAG_Int(UNTAG_Int(variable[2])+UNTAG_Int( TAG_Int(1))) /*i*/;
75 continue_3: while(0);
76 }
77 break_3: while(0);
78 return_label2: while(false);
79 tracehead = trace.prev;
80 return;
81 }
82 val_t array___AbstractArray___iterator(val_t self) {
83 struct trace_t trace = {NULL, NULL, 197, LOCATE_array___AbstractArray___iterator};
84 val_t variable[4];
85 void **closurevariable = NULL;
86 trace.prev = tracehead; tracehead = &trace;
87 trace.file = LOCATE_array;
88 variable[0] = self;
89 variable[2] = variable[0];
90 variable[3] = NEW_ArrayIterator_array___ArrayIterator___init(variable[2]); /*new ArrayIterator[E]*/
91 variable[2] = variable[3];
92 variable[1] = variable[2];
93 goto return_label4;
94 return_label4: while(false);
95 tracehead = trace.prev;
96 return variable[1];
97 }
98 val_t array___AbstractArray___is_empty(val_t self) {
99 struct trace_t trace = {NULL, NULL, 28, LOCATE_array___AbstractArray___is_empty};
100 val_t variable[3];
101 void **closurevariable = NULL;
102 trace.prev = tracehead; tracehead = &trace;
103 trace.file = LOCATE_array;
104 variable[0] = self;
105 variable[2] = variable[0];
106 variable[2] = ATTR_array___AbstractArray____length(variable[2]) /*AbstractArray::_length*/;
107 variable[2] = TAG_Bool((variable[2])==( TAG_Int(0)));
108 variable[1] = variable[2];
109 goto return_label5;
110 return_label5: while(false);
111 tracehead = trace.prev;
112 return variable[1];
113 }
114 val_t array___AbstractArray___length(val_t self) {
115 struct trace_t trace = {NULL, NULL, 25, LOCATE_array___AbstractArray___length};
116 val_t *variable = NULL;
117 void **closurevariable = NULL;
118 trace.prev = tracehead; tracehead = &trace;
119 trace.file = LOCATE_array;
120 tracehead = trace.prev;
121 return ATTR_array___AbstractArray____length( self) /*AbstractArray::_length*/;
122 }
123 val_t array___AbstractArray___has(val_t self, val_t param0) {
124 struct trace_t trace = {NULL, NULL, 75, LOCATE_array___AbstractArray___has};
125 val_t variable[6];
126 void **closurevariable = NULL;
127 trace.prev = tracehead; tracehead = &trace;
128 trace.file = LOCATE_array;
129 variable[0] = self;
130 variable[1] = param0;
131 variable[3] = TAG_Int(0);
132 variable[5] = variable[0];
133 variable[5] = CALL_abstract_collection___Collection___length(variable[5])(variable[5]) /*AbstractArray::length*/;
134 variable[4] = variable[5];
135 while (true) { /*while*/
136 variable[5] = TAG_Bool(UNTAG_Int( variable[3] /*i*/)<UNTAG_Int( variable[4] /*l*/));
137 if (!UNTAG_Bool(variable[5])) break; /* while*/
138 variable[5] = variable[0];
139 variable[5] = CALL_abstract_collection___Map_____bra(variable[5])(variable[5], variable[3] /*i*/) /*Map::[]*/;
140 variable[5] = TAG_Bool((variable[5] == variable[1] /*item*/) || ((variable[5] != NIT_NULL) && ((CALL_kernel___Object_____eqeq(variable[5])==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[5], variable[1] /*item*/)):(UNTAG_Bool(CALL_kernel___Object_____eqeq(variable[5])(variable[5], variable[1] /*item*/) /*Object::==*/)))));
141 if (UNTAG_Bool(variable[5])) { /*if*/
142 variable[2] = TAG_Bool(true);
143 goto return_label6;
144 }
145 variable[3] = TAG_Int(UNTAG_Int(variable[3])+UNTAG_Int( TAG_Int(1))) /*i*/;
146 continue_7: while(0);
147 }
148 break_7: while(0);
149 variable[2] = TAG_Bool(false);
150 goto return_label6;
151 return_label6: while(false);
152 tracehead = trace.prev;
153 return variable[2];
154 }
155 val_t array___AbstractArray___has_only(val_t self, val_t param0) {
156 struct trace_t trace = {NULL, NULL, 86, LOCATE_array___AbstractArray___has_only};
157 val_t variable[6];
158 void **closurevariable = NULL;
159 trace.prev = tracehead; tracehead = &trace;
160 trace.file = LOCATE_array;
161 variable[0] = self;
162 variable[1] = param0;
163 variable[3] = TAG_Int(0);
164 variable[5] = variable[0];
165 variable[5] = CALL_abstract_collection___Collection___length(variable[5])(variable[5]) /*AbstractArray::length*/;
166 variable[4] = variable[5];
167 while (true) { /*while*/
168 variable[5] = TAG_Bool(UNTAG_Int( variable[3] /*i*/)<UNTAG_Int( variable[4] /*l*/));
169 if (!UNTAG_Bool(variable[5])) break; /* while*/
170 variable[5] = variable[0];
171 variable[5] = CALL_abstract_collection___Map_____bra(variable[5])(variable[5], variable[3] /*i*/) /*Map::[]*/;
172 variable[5] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[5] == variable[1] /*item*/) || ((variable[5] != NIT_NULL) && ((CALL_kernel___Object_____eqeq(variable[5])==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[5], variable[1] /*item*/)):(UNTAG_Bool(CALL_kernel___Object_____eqeq(variable[5])(variable[5], variable[1] /*item*/) /*Object::==*/)))))));
173 if (UNTAG_Bool(variable[5])) { /*if*/
174 variable[2] = TAG_Bool(false);
175 goto return_label8;
176 }
177 variable[3] = TAG_Int(UNTAG_Int(variable[3])+UNTAG_Int( TAG_Int(1))) /*i*/;
178 continue_9: while(0);
179 }
180 break_9: while(0);
181 variable[2] = TAG_Bool(true);
182 goto return_label8;
183 return_label8: while(false);
184 tracehead = trace.prev;
185 return variable[2];
186 }
187 val_t array___AbstractArray___count(val_t self, val_t param0) {
188 struct trace_t trace = {NULL, NULL, 99, LOCATE_array___AbstractArray___count};
189 val_t variable[7];
190 void **closurevariable = NULL;
191 trace.prev = tracehead; tracehead = &trace;
192 trace.file = LOCATE_array;
193 variable[0] = self;
194 variable[1] = param0;
195 variable[3] = TAG_Int(0);
196 variable[4] = TAG_Int(0);
197 variable[6] = variable[0];
198 variable[6] = CALL_abstract_collection___Collection___length(variable[6])(variable[6]) /*AbstractArray::length*/;
199 variable[5] = variable[6];
200 while (true) { /*while*/
201 variable[6] = TAG_Bool(UNTAG_Int( variable[4] /*i*/)<UNTAG_Int( variable[5] /*l*/));
202 if (!UNTAG_Bool(variable[6])) break; /* while*/
203 variable[6] = variable[0];
204 variable[6] = CALL_abstract_collection___Map_____bra(variable[6])(variable[6], variable[4] /*i*/) /*Map::[]*/;
205 variable[6] = TAG_Bool((variable[6] == variable[1] /*item*/) || ((variable[6] != NIT_NULL) && ((CALL_kernel___Object_____eqeq(variable[6])==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[6], variable[1] /*item*/)):(UNTAG_Bool(CALL_kernel___Object_____eqeq(variable[6])(variable[6], variable[1] /*item*/) /*Object::==*/)))));
206 if (UNTAG_Bool(variable[6])) { /*if*/
207 variable[3] = TAG_Int(UNTAG_Int(variable[3])+UNTAG_Int( TAG_Int(1))) /*res*/;
208 }
209 variable[4] = TAG_Int(UNTAG_Int(variable[4])+UNTAG_Int( TAG_Int(1))) /*i*/;
210 continue_11: while(0);
211 }
212 break_11: while(0);
213 variable[2] = variable[3] /*res*/;
214 goto return_label10;
215 return_label10: while(false);
216 tracehead = trace.prev;
217 return variable[2];
218 }
219 void array___AbstractArray___clear(val_t self) {
220 struct trace_t trace = {NULL, NULL, 73, LOCATE_array___AbstractArray___clear};
221 val_t variable[3];
222 void **closurevariable = NULL;
223 trace.prev = tracehead; tracehead = &trace;
224 trace.file = LOCATE_array;
225 variable[0] = self;
226 variable[2] = variable[0];
227 ATTR_array___AbstractArray____length(variable[2]) /*AbstractArray::_length*/ = TAG_Int(0);
228 return_label12: while(false);
229 tracehead = trace.prev;
230 return;
231 }
232 void array___AbstractArray___remove(val_t self, val_t param0) {
233 struct trace_t trace = {NULL, NULL, 152, LOCATE_array___AbstractArray___remove};
234 val_t variable[5];
235 void **closurevariable = NULL;
236 trace.prev = tracehead; tracehead = &trace;
237 trace.file = LOCATE_array;
238 variable[0] = self;
239 variable[1] = param0;
240 variable[3] = variable[0];
241 variable[4] = variable[0];
242 variable[4] = CALL_abstract_collection___IndexedCollection___index_of(variable[4])(variable[4], variable[1] /*item*/) /*AbstractArray::index_of*/;
243 CALL_abstract_collection___Map___remove_at(variable[3])(variable[3], variable[4]) /*AbstractArray::remove_at*/;
244 return_label13: while(false);
245 tracehead = trace.prev;
246 return;
247 }
248 void array___AbstractArray___remove_all(val_t self, val_t param0) {
249 struct trace_t trace = {NULL, NULL, 154, LOCATE_array___AbstractArray___remove_all};
250 val_t variable[5];
251 void **closurevariable = NULL;
252 trace.prev = tracehead; tracehead = &trace;
253 trace.file = LOCATE_array;
254 variable[0] = self;
255 variable[1] = param0;
256 variable[4] = variable[0];
257 variable[4] = CALL_abstract_collection___IndexedCollection___index_of(variable[4])(variable[4], variable[1] /*item*/) /*AbstractArray::index_of*/;
258 variable[3] = variable[4];
259 while (true) { /*while*/
260 variable[4] = TAG_Bool(UNTAG_Int( variable[3] /*i*/)>=UNTAG_Int( TAG_Int(0)));
261 if (!UNTAG_Bool(variable[4])) break; /* while*/
262 variable[4] = variable[0];
263 CALL_abstract_collection___Map___remove_at(variable[4])(variable[4], variable[3] /*i*/) /*AbstractArray::remove_at*/;
264 variable[4] = variable[0];
265 variable[4] = CALL_array___AbstractArray___index_of_from(variable[4])(variable[4], variable[1] /*item*/, variable[3] /*i*/) /*AbstractArray::index_of_from*/;
266 variable[3] = variable[4] /*i=*/;
267 continue_15: while(0);
268 }
269 break_15: while(0);
270 return_label14: while(false);
271 tracehead = trace.prev;
272 return;
273 }
274 val_t array___AbstractArray___has_key(val_t self, val_t param0) {
275 struct trace_t trace = {NULL, NULL, 97, LOCATE_array___AbstractArray___has_key};
276 val_t variable[5];
277 void **closurevariable = NULL;
278 trace.prev = tracehead; tracehead = &trace;
279 trace.file = LOCATE_array;
280 variable[0] = self;
281 variable[1] = param0;
282 variable[3] = TAG_Bool(UNTAG_Int( variable[1] /*index*/)>=UNTAG_Int( TAG_Int(0)));
283 variable[4] = variable[3];
284 if (UNTAG_Bool(variable[4])) { /* and */
285 variable[4] = variable[0];
286 variable[4] = CALL_abstract_collection___Collection___length(variable[4])(variable[4]) /*AbstractArray::length*/;
287 variable[4] = TAG_Bool(UNTAG_Int( variable[1] /*index*/)<UNTAG_Int(variable[4]));
288 }
289 variable[3] = variable[4];
290 variable[2] = variable[3];
291 goto return_label16;
292 return_label16: while(false);
293 tracehead = trace.prev;
294 return variable[2];
295 }
296 void array___AbstractArray___remove_at(val_t self, val_t param0) {
297 struct trace_t trace = {NULL, NULL, 163, LOCATE_array___AbstractArray___remove_at};
298 val_t variable[8];
299 void **closurevariable = NULL;
300 trace.prev = tracehead; tracehead = &trace;
301 trace.file = LOCATE_array;
302 variable[0] = self;
303 variable[1] = param0;
304 variable[4] = variable[0];
305 variable[4] = CALL_abstract_collection___Collection___length(variable[4])(variable[4]) /*AbstractArray::length*/;
306 variable[3] = variable[4];
307 variable[4] = TAG_Bool(UNTAG_Int( variable[1] /*i*/)>=UNTAG_Int( TAG_Int(0)));
308 variable[5] = variable[4];
309 if (UNTAG_Bool(variable[5])) { /* and */
310 variable[5] = TAG_Bool(UNTAG_Int( variable[1] /*i*/)<UNTAG_Int( variable[3] /*l*/));
311 }
312 variable[4] = variable[5];
313 if (UNTAG_Bool(variable[4])) { /*if*/
314 variable[5] = TAG_Int(UNTAG_Int( variable[1] /*i*/)+UNTAG_Int( TAG_Int(1)));
315 variable[4] = variable[5];
316 while (true) { /*while*/
317 variable[5] = TAG_Bool(UNTAG_Int( variable[4] /*j*/)<UNTAG_Int( variable[3] /*l*/));
318 if (!UNTAG_Bool(variable[5])) break; /* while*/
319 variable[5] = variable[0];
320 variable[6] = TAG_Int(UNTAG_Int( variable[4] /*j*/)-UNTAG_Int( TAG_Int(1)));
321 variable[7] = variable[0];
322 variable[7] = CALL_abstract_collection___Map_____bra(variable[7])(variable[7], variable[4] /*j*/) /*Map::[]*/;
323 CALL_abstract_collection___Map_____braeq(variable[5])(variable[5], variable[6], variable[7]) /*Map::[]=*/;
324 variable[4] = TAG_Int(UNTAG_Int(variable[4])+UNTAG_Int( TAG_Int(1))) /*j*/;
325 continue_18: while(0);
326 }
327 break_18: while(0);
328 variable[5] = variable[0];
329 variable[6] = TAG_Int(UNTAG_Int( variable[3] /*l*/)-UNTAG_Int( TAG_Int(1)));
330 ATTR_array___AbstractArray____length(variable[5]) /*AbstractArray::_length*/ = variable[6];
331 }
332 return_label17: while(false);
333 tracehead = trace.prev;
334 return;
335 }
336 void array___AbstractArray___add(val_t self, val_t param0) {
337 struct trace_t trace = {NULL, NULL, 71, LOCATE_array___AbstractArray___add};
338 val_t variable[5];
339 void **closurevariable = NULL;
340 trace.prev = tracehead; tracehead = &trace;
341 trace.file = LOCATE_array;
342 variable[0] = self;
343 variable[1] = param0;
344 variable[3] = variable[0];
345 variable[4] = variable[0];
346 variable[4] = CALL_abstract_collection___Collection___length(variable[4])(variable[4]) /*AbstractArray::length*/;
347 CALL_abstract_collection___Map_____braeq(variable[3])(variable[3], variable[4], variable[1] /*item*/) /*Map::[]=*/;
348 return_label19: while(false);
349 tracehead = trace.prev;
350 return;
351 }
352 void array___AbstractArray___push(val_t self, val_t param0) {
353 struct trace_t trace = {NULL, NULL, 30, LOCATE_array___AbstractArray___push};
354 val_t variable[4];
355 void **closurevariable = NULL;
356 trace.prev = tracehead; tracehead = &trace;
357 trace.file = LOCATE_array;
358 variable[0] = self;
359 variable[1] = param0;
360 variable[3] = variable[0];
361 CALL_abstract_collection___SimpleCollection___add(variable[3])(variable[3], variable[1] /*item*/) /*AbstractArray::add*/;
362 return_label20: while(false);
363 tracehead = trace.prev;
364 return;
365 }
366 val_t array___AbstractArray___pop(val_t self) {
367 struct trace_t trace = {NULL, NULL, 32, LOCATE_array___AbstractArray___pop};
368 val_t variable[4];
369 void **closurevariable = NULL;
370 trace.prev = tracehead; tracehead = &trace;
371 trace.file = LOCATE_array;
372 variable[0] = self;
373 variable[2] = variable[0];
374 variable[2] = CALL_abstract_collection___Collection___is_empty(variable[2])(variable[2]) /*AbstractArray::is_empty*/;
375 if (!UNTAG_Bool( TAG_Bool(!UNTAG_Bool(variable[2])))) { fprintf(stderr, "Assert%s failed", " 'not_empty' "); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_array___AbstractArray___pop, LOCATE_array, 34); nit_exit(1);}
376 variable[3] = variable[0];
377 variable[3] = CALL_abstract_collection___IndexedCollection___last(variable[3])(variable[3]) /*IndexedCollection::last*/;
378 variable[2] = variable[3];
379 variable[3] = variable[0];
380 ATTR_array___AbstractArray____length(variable[3]) /*AbstractArray::_length*/ = TAG_Int(UNTAG_Int(ATTR_array___AbstractArray____length(variable[3]) /*AbstractArray::_length*/)-UNTAG_Int( TAG_Int(1)));
381 variable[1] = variable[2] /*r*/;
382 goto return_label21;
383 return_label21: while(false);
384 tracehead = trace.prev;
385 return variable[1];
386 }
387 void array___AbstractArray___unshift(val_t self, val_t param0) {
388 struct trace_t trace = {NULL, NULL, 54, LOCATE_array___AbstractArray___unshift};
389 val_t variable[7];
390 void **closurevariable = NULL;
391 trace.prev = tracehead; tracehead = &trace;
392 trace.file = LOCATE_array;
393 variable[0] = self;
394 variable[1] = param0;
395 variable[4] = variable[0];
396 variable[4] = CALL_abstract_collection___Collection___length(variable[4])(variable[4]) /*AbstractArray::length*/;
397 variable[4] = TAG_Int(UNTAG_Int(variable[4])-UNTAG_Int( TAG_Int(1)));
398 variable[3] = variable[4];
399 while (true) { /*while*/
400 variable[4] = TAG_Bool(UNTAG_Int( variable[3] /*i*/)>UNTAG_Int( TAG_Int(0)));
401 if (!UNTAG_Bool(variable[4])) break; /* while*/
402 variable[4] = variable[0];
403 variable[5] = TAG_Int(UNTAG_Int( variable[3] /*i*/)+UNTAG_Int( TAG_Int(1)));
404 variable[6] = variable[0];
405 variable[6] = CALL_abstract_collection___Map_____bra(variable[6])(variable[6], variable[3] /*i*/) /*Map::[]*/;
406 CALL_abstract_collection___Map_____braeq(variable[4])(variable[4], variable[5], variable[6]) /*Map::[]=*/;
407 variable[3] = TAG_Int(UNTAG_Int(variable[3])-UNTAG_Int( TAG_Int(1))) /*i*/;
408 continue_23: while(0);
409 }
410 break_23: while(0);
411 variable[4] = variable[0];
412 CALL_abstract_collection___Map_____braeq(variable[4])(variable[4], TAG_Int(0), variable[1] /*item*/) /*Map::[]=*/;
413 return_label22: while(false);
414 tracehead = trace.prev;
415 return;
416 }
417 val_t array___AbstractArray___shift(val_t self) {
418 struct trace_t trace = {NULL, NULL, 40, LOCATE_array___AbstractArray___shift};
419 val_t variable[8];
420 void **closurevariable = NULL;
421 trace.prev = tracehead; tracehead = &trace;
422 trace.file = LOCATE_array;
423 variable[0] = self;
424 variable[2] = variable[0];
425 variable[2] = CALL_abstract_collection___Collection___is_empty(variable[2])(variable[2]) /*AbstractArray::is_empty*/;
426 if (!UNTAG_Bool( TAG_Bool(!UNTAG_Bool(variable[2])))) { fprintf(stderr, "Assert%s failed", " 'not_empty' "); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_array___AbstractArray___shift, LOCATE_array, 42); nit_exit(1);}
427 variable[3] = variable[0];
428 variable[3] = CALL_abstract_collection___Collection___first(variable[3])(variable[3]) /*IndexedCollection::first*/;
429 variable[2] = variable[3];
430 variable[3] = TAG_Int(1);
431 variable[5] = variable[0];
432 variable[5] = CALL_abstract_collection___Collection___length(variable[5])(variable[5]) /*AbstractArray::length*/;
433 variable[4] = variable[5];
434 while (true) { /*while*/
435 variable[5] = TAG_Bool(UNTAG_Int( variable[3] /*i*/)<UNTAG_Int( variable[4] /*l*/));
436 if (!UNTAG_Bool(variable[5])) break; /* while*/
437 variable[5] = variable[0];
438 variable[6] = TAG_Int(UNTAG_Int( variable[3] /*i*/)-UNTAG_Int( TAG_Int(1)));
439 variable[7] = variable[0];
440 variable[7] = CALL_abstract_collection___Map_____bra(variable[7])(variable[7], variable[3] /*i*/) /*Map::[]*/;
441 CALL_abstract_collection___Map_____braeq(variable[5])(variable[5], variable[6], variable[7]) /*Map::[]=*/;
442 variable[3] = TAG_Int(UNTAG_Int(variable[3])+UNTAG_Int( TAG_Int(1))) /*i*/;
443 continue_25: while(0);
444 }
445 break_25: while(0);
446 variable[5] = variable[0];
447 variable[6] = TAG_Int(UNTAG_Int( variable[4] /*l*/)-UNTAG_Int( TAG_Int(1)));
448 ATTR_array___AbstractArray____length(variable[5]) /*AbstractArray::_length*/ = variable[6];
449 variable[1] = variable[2] /*r*/;
450 goto return_label24;
451 return_label24: while(false);
452 tracehead = trace.prev;
453 return variable[1];
454 }
455 val_t array___AbstractArray___index_of(val_t self, val_t param0) {
456 struct trace_t trace = {NULL, NULL, 111, LOCATE_array___AbstractArray___index_of};
457 val_t variable[4];
458 void **closurevariable = NULL;
459 trace.prev = tracehead; tracehead = &trace;
460 trace.file = LOCATE_array;
461 variable[0] = self;
462 variable[1] = param0;
463 variable[3] = variable[0];
464 variable[3] = CALL_array___AbstractArray___index_of_from(variable[3])(variable[3], variable[1] /*item*/, TAG_Int(0)) /*AbstractArray::index_of_from*/;
465 variable[2] = variable[3];
466 goto return_label26;
467 return_label26: while(false);
468 tracehead = trace.prev;
469 return variable[2];
470 }
471 void array___AbstractArray___enlarge(val_t self, val_t param0) {
472 struct trace_t trace = {NULL, NULL, 23, LOCATE_array___AbstractArray___enlarge};
473 val_t *variable = NULL;
474 void **closurevariable = NULL;
475 trace.prev = tracehead; tracehead = &trace;
476 trace.file = LOCATE_array;
477 fprintf(stderr, "Deferred method called");
478 fprintf(stderr, " (%s:%d)\n", LOCATE_array, 23);
479 nit_exit(1);
480 tracehead = trace.prev;
481 return;
482 }
483 void array___AbstractArray___insert(val_t self, val_t param0, val_t param1) {
484 struct trace_t trace = {NULL, NULL, 64, LOCATE_array___AbstractArray___insert};
485 val_t variable[8];
486 void **closurevariable = NULL;
487 trace.prev = tracehead; tracehead = &trace;
488 trace.file = LOCATE_array;
489 variable[0] = self;
490 variable[1] = param0;
491 variable[2] = param1;
492 variable[4] = variable[0];
493 variable[5] = variable[0];
494 variable[5] = CALL_abstract_collection___Collection___length(variable[5])(variable[5]) /*AbstractArray::length*/;
495 variable[5] = TAG_Int(UNTAG_Int(variable[5])+UNTAG_Int( TAG_Int(1)));
496 CALL_array___AbstractArray___enlarge(variable[4])(variable[4], variable[5]) /*AbstractArray::enlarge*/;
497 variable[4] = variable[0];
498 variable[5] = variable[0];
499 variable[5] = CALL_abstract_collection___Collection___length(variable[5])(variable[5]) /*AbstractArray::length*/;
500 variable[5] = TAG_Int(UNTAG_Int(variable[5])-UNTAG_Int( variable[2] /*pos*/));
501 variable[6] = variable[0];
502 variable[7] = TAG_Int(UNTAG_Int( variable[2] /*pos*/)+UNTAG_Int( TAG_Int(1)));
503 CALL_array___AbstractArray___copy_to(variable[4])(variable[4], variable[2] /*pos*/, variable[5], variable[6], variable[7]) /*AbstractArray::copy_to*/;
504 variable[4] = variable[0];
505 CALL_abstract_collection___Map_____braeq(variable[4])(variable[4], variable[2] /*pos*/, variable[1] /*item*/) /*Map::[]=*/;
506 return_label27: while(false);
507 tracehead = trace.prev;
508 return;
509 }
510 val_t array___AbstractArray___last_index_of(val_t self, val_t param0) {
511 struct trace_t trace = {NULL, NULL, 113, LOCATE_array___AbstractArray___last_index_of};
512 val_t variable[5];
513 void **closurevariable = NULL;
514 trace.prev = tracehead; tracehead = &trace;
515 trace.file = LOCATE_array;
516 variable[0] = self;
517 variable[1] = param0;
518 variable[3] = variable[0];
519 variable[4] = variable[0];
520 variable[4] = CALL_abstract_collection___Collection___length(variable[4])(variable[4]) /*AbstractArray::length*/;
521 variable[4] = TAG_Int(UNTAG_Int(variable[4])-UNTAG_Int( TAG_Int(1)));
522 variable[3] = CALL_array___AbstractArray___last_index_of_from(variable[3])(variable[3], variable[1] /*item*/, variable[4]) /*AbstractArray::last_index_of_from*/;
523 variable[2] = variable[3];
524 goto return_label28;
525 return_label28: while(false);
526 tracehead = trace.prev;
527 return variable[2];
528 }
529 val_t array___AbstractArray___index_of_from(val_t self, val_t param0, val_t param1) {
530 struct trace_t trace = {NULL, NULL, 115, LOCATE_array___AbstractArray___index_of_from};
531 val_t variable[7];
532 void **closurevariable = NULL;
533 trace.prev = tracehead; tracehead = &trace;
534 trace.file = LOCATE_array;
535 variable[0] = self;
536 variable[1] = param0;
537 variable[2] = param1;
538 variable[4] = variable[2] /*pos*/;
539 variable[6] = variable[0];
540 variable[6] = CALL_abstract_collection___Collection___length(variable[6])(variable[6]) /*AbstractArray::length*/;
541 variable[5] = variable[6];
542 while (true) { /*while*/
543 variable[6] = TAG_Bool(UNTAG_Int( variable[4] /*i*/)<UNTAG_Int( variable[5] /*len*/));
544 if (!UNTAG_Bool(variable[6])) break; /* while*/
545 variable[6] = variable[0];
546 variable[6] = CALL_abstract_collection___Map_____bra(variable[6])(variable[6], variable[4] /*i*/) /*Map::[]*/;
547 variable[6] = TAG_Bool((variable[6] == variable[1] /*item*/) || ((variable[6] != NIT_NULL) && ((CALL_kernel___Object_____eqeq(variable[6])==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[6], variable[1] /*item*/)):(UNTAG_Bool(CALL_kernel___Object_____eqeq(variable[6])(variable[6], variable[1] /*item*/) /*Object::==*/)))));
548 if (UNTAG_Bool(variable[6])) { /*if*/
549 variable[3] = variable[4] /*i*/;
550 goto return_label29;
551 }
552 variable[4] = TAG_Int(UNTAG_Int(variable[4])+UNTAG_Int( TAG_Int(1))) /*i*/;
553 continue_30: while(0);
554 }
555 break_30: while(0);
556 variable[6] = TAG_Int(-UNTAG_Int( TAG_Int(1)));
557 variable[3] = variable[6];
558 goto return_label29;
559 return_label29: while(false);
560 tracehead = trace.prev;
561 return variable[3];
562 }
563 val_t array___AbstractArray___last_index_of_from(val_t self, val_t param0, val_t param1) {
564 struct trace_t trace = {NULL, NULL, 128, LOCATE_array___AbstractArray___last_index_of_from};
565 val_t variable[6];
566 void **closurevariable = NULL;
567 trace.prev = tracehead; tracehead = &trace;
568 trace.file = LOCATE_array;
569 variable[0] = self;
570 variable[1] = param0;
571 variable[2] = param1;
572 variable[4] = variable[2] /*pos*/;
573 while (true) { /*while*/
574 variable[5] = TAG_Bool(UNTAG_Int( variable[4] /*i*/)>=UNTAG_Int( TAG_Int(0)));
575 if (!UNTAG_Bool(variable[5])) break; /* while*/
576 variable[5] = variable[0];
577 variable[5] = CALL_abstract_collection___Map_____bra(variable[5])(variable[5], variable[4] /*i*/) /*Map::[]*/;
578 variable[5] = TAG_Bool((variable[5] == variable[1] /*item*/) || ((variable[5] != NIT_NULL) && ((CALL_kernel___Object_____eqeq(variable[5])==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[5], variable[1] /*item*/)):(UNTAG_Bool(CALL_kernel___Object_____eqeq(variable[5])(variable[5], variable[1] /*item*/) /*Object::==*/)))));
579 if (UNTAG_Bool(variable[5])) { /*if*/
580 variable[3] = variable[4] /*i*/;
581 goto return_label31;
582 } else { /*if*/
583 variable[4] = TAG_Int(UNTAG_Int(variable[4])-UNTAG_Int( TAG_Int(1))) /*i*/;
584 }
585 continue_32: while(0);
586 }
587 break_32: while(0);
588 variable[5] = TAG_Int(-UNTAG_Int( TAG_Int(1)));
589 variable[3] = variable[5];
590 goto return_label31;
591 return_label31: while(false);
592 tracehead = trace.prev;
593 return variable[3];
594 }
595 val_t array___AbstractArray___reversed(val_t self) {
596 struct trace_t trace = {NULL, NULL, 141, LOCATE_array___AbstractArray___reversed};
597 val_t variable[5];
598 void **closurevariable = NULL;
599 trace.prev = tracehead; tracehead = &trace;
600 trace.file = LOCATE_array;
601 variable[0] = self;
602 variable[3] = variable[0];
603 variable[3] = ATTR_array___AbstractArray____length(variable[3]) /*AbstractArray::_length*/;
604 variable[2] = variable[3];
605 variable[4] = NEW_Array_array___Array___with_capacity( variable[2] /*cmp*/); /*new Array[E]*/
606 variable[3] = variable[4];
607 while (true) { /*while*/
608 variable[4] = TAG_Bool(UNTAG_Int( variable[2] /*cmp*/)>UNTAG_Int( TAG_Int(0)));
609 if (!UNTAG_Bool(variable[4])) break; /* while*/
610 variable[2] = TAG_Int(UNTAG_Int(variable[2])-UNTAG_Int( TAG_Int(1))) /*cmp*/;
611 variable[4] = variable[0];
612 variable[4] = CALL_abstract_collection___Map_____bra(variable[4])(variable[4], variable[2] /*cmp*/) /*Map::[]*/;
613 CALL_abstract_collection___SimpleCollection___add( variable[3] /*result*/)( variable[3] /*result*/, variable[4]) /*AbstractArray::add*/;
614 continue_34: while(0);
615 }
616 break_34: while(0);
617 variable[1] = variable[3] /*result*/;
618 goto return_label33;
619 return_label33: while(false);
620 tracehead = trace.prev;
621 return variable[1];
622 }
623 void array___AbstractArray___copy_to(val_t self, val_t param0, val_t param1, val_t param2, val_t param3) {
624 struct trace_t trace = {NULL, NULL, 176, LOCATE_array___AbstractArray___copy_to};
625 val_t variable[10];
626 void **closurevariable = NULL;
627 trace.prev = tracehead; tracehead = &trace;
628 trace.file = LOCATE_array;
629 variable[0] = self;
630 variable[1] = param0;
631 variable[2] = param1;
632 variable[3] = param2;
633 variable[4] = param3;
634 variable[6] = variable[2] /*len*/;
635 while (true) { /*while*/
636 variable[7] = TAG_Bool(UNTAG_Int( variable[6] /*i*/)>UNTAG_Int( TAG_Int(0)));
637 if (!UNTAG_Bool(variable[7])) break; /* while*/
638 variable[6] = TAG_Int(UNTAG_Int(variable[6])-UNTAG_Int( TAG_Int(1))) /*i*/;
639 variable[7] = TAG_Int(UNTAG_Int( variable[4] /*new_start*/)+UNTAG_Int( variable[6] /*i*/));
640 variable[8] = variable[0];
641 variable[9] = TAG_Int(UNTAG_Int( variable[1] /*start*/)+UNTAG_Int( variable[6] /*i*/));
642 variable[8] = CALL_abstract_collection___Map_____bra(variable[8])(variable[8], variable[9]) /*Map::[]*/;
643 CALL_abstract_collection___Map_____braeq( variable[3] /*dest*/)( variable[3] /*dest*/, variable[7], variable[8]) /*Map::[]=*/;
644 continue_36: while(0);
645 }
646 break_36: while(0);
647 return_label35: while(false);
648 tracehead = trace.prev;
649 return;
650 }
651 void array___AbstractArray___init(val_t self, int* init_table) {
652 struct trace_t trace = {NULL, NULL, 0, LOCATE_array___AbstractArray___init};
653 val_t *variable = NULL;
654 void **closurevariable = NULL;
655 trace.prev = tracehead; tracehead = &trace;
656 trace.file = LOCATE_array;
657 tracehead = trace.prev;
658 return;
659 }
660 val_t array___Array_____bra(val_t self, val_t param0) {
661 struct trace_t trace = {NULL, NULL, 227, LOCATE_array___Array_____bra};
662 val_t variable[5];
663 void **closurevariable = NULL;
664 trace.prev = tracehead; tracehead = &trace;
665 trace.file = LOCATE_array;
666 variable[0] = self;
667 variable[1] = param0;
668 variable[3] = TAG_Bool(UNTAG_Int( variable[1] /*index*/)>=UNTAG_Int( TAG_Int(0)));
669 variable[4] = variable[3];
670 if (UNTAG_Bool(variable[4])) { /* and */
671 variable[4] = variable[0];
672 variable[4] = ATTR_array___AbstractArray____length(variable[4]) /*AbstractArray::_length*/;
673 variable[4] = TAG_Bool(UNTAG_Int( variable[1] /*index*/)<UNTAG_Int(variable[4]));
674 }
675 variable[3] = variable[4];
676 if (!UNTAG_Bool(variable[3])) { fprintf(stderr, "Assert%s failed", " 'index' "); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_array___Array_____bra, LOCATE_array, 229); nit_exit(1);}
677 variable[3] = variable[0];
678 variable[3] = ATTR_array___Array____items(variable[3]) /*Array::_items*/;
679 variable[3] = UNBOX_NativeArray(variable[3])[UNTAG_Int( variable[1] /*index*/)];
680 variable[2] = variable[3];
681 goto return_label37;
682 return_label37: while(false);
683 tracehead = trace.prev;
684 return variable[2];
685 }
686 void array___Array_____braeq(val_t self, val_t param0, val_t param1) {
687 struct trace_t trace = {NULL, NULL, 233, LOCATE_array___Array_____braeq};
688 val_t variable[6];
689 void **closurevariable = NULL;
690 trace.prev = tracehead; tracehead = &trace;
691 trace.file = LOCATE_array;
692 variable[0] = self;
693 variable[1] = param0;
694 variable[2] = param1;
695 variable[4] = TAG_Bool(UNTAG_Int( variable[1] /*index*/)>=UNTAG_Int( TAG_Int(0)));
696 variable[5] = variable[4];
697 if (UNTAG_Bool(variable[5])) { /* and */
698 variable[5] = variable[0];
699 variable[5] = ATTR_array___AbstractArray____length(variable[5]) /*AbstractArray::_length*/;
700 variable[5] = TAG_Int(UNTAG_Int(variable[5])+UNTAG_Int( TAG_Int(1)));
701 variable[5] = TAG_Bool(UNTAG_Int( variable[1] /*index*/)<UNTAG_Int(variable[5]));
702 }
703 variable[4] = variable[5];
704 if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", " 'index' "); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_array___Array_____braeq, LOCATE_array, 235); nit_exit(1);}
705 variable[4] = variable[0];
706 variable[4] = ATTR_array___Array____capacity(variable[4]) /*Array::_capacity*/;
707 variable[4] = TAG_Bool(UNTAG_Int(variable[4])<=UNTAG_Int( variable[1] /*index*/));
708 if (UNTAG_Bool(variable[4])) { /*if*/
709 variable[4] = variable[0];
710 variable[5] = TAG_Int(UNTAG_Int( variable[1] /*index*/)+UNTAG_Int( TAG_Int(1)));
711 CALL_array___AbstractArray___enlarge(variable[4])(variable[4], variable[5]) /*Array::enlarge*/;
712 }
713 variable[4] = variable[0];
714 variable[4] = ATTR_array___AbstractArray____length(variable[4]) /*AbstractArray::_length*/;
715 variable[4] = TAG_Bool(UNTAG_Int(variable[4])<=UNTAG_Int( variable[1] /*index*/));
716 if (UNTAG_Bool(variable[4])) { /*if*/
717 variable[4] = variable[0];
718 variable[5] = TAG_Int(UNTAG_Int( variable[1] /*index*/)+UNTAG_Int( TAG_Int(1)));
719 ATTR_array___AbstractArray____length(variable[4]) /*AbstractArray::_length*/ = variable[5];
720 }
721 variable[4] = variable[0];
722 variable[4] = ATTR_array___Array____items(variable[4]) /*Array::_items*/;
723 UNBOX_NativeArray(variable[4])[UNTAG_Int( variable[1] /*index*/)]= variable[2] /*item*/;
724 return_label38: while(false);
725 tracehead = trace.prev;
726 return;
727 }
728 void array___Array___enlarge(val_t self, val_t param0) {
729 struct trace_t trace = {NULL, NULL, 245, LOCATE_array___Array___enlarge};
730 val_t variable[7];
731 void **closurevariable = NULL;
732 trace.prev = tracehead; tracehead = &trace;
733 trace.file = LOCATE_array;
734 variable[0] = self;
735 variable[1] = param0;
736 variable[4] = variable[0];
737 variable[4] = ATTR_array___Array____capacity(variable[4]) /*Array::_capacity*/;
738 variable[3] = variable[4];
739 variable[4] = TAG_Bool(UNTAG_Int( variable[1] /*cap*/)<=UNTAG_Int( variable[3] /*c*/));
740 if (UNTAG_Bool(variable[4])) { /*if*/
741 goto return_label39;
742 }
743 while (true) { /*while*/
744 variable[4] = TAG_Bool(UNTAG_Int( variable[3] /*c*/)<=UNTAG_Int( variable[1] /*cap*/));
745 if (!UNTAG_Bool(variable[4])) break; /* while*/
746 variable[4] = TAG_Int(UNTAG_Int( variable[3] /*c*/)*UNTAG_Int( TAG_Int(2)));
747 variable[4] = TAG_Int(UNTAG_Int(variable[4])+UNTAG_Int( TAG_Int(2)));
748 variable[3] = variable[4] /*c=*/;
749 continue_40: while(0);
750 }
751 break_40: while(0);
752 variable[5] = variable[0];
753 variable[5] = BOX_NativeArray((val_t*)malloc((UNTAG_Int( variable[3] /*c*/) * sizeof(val_t))));
754 variable[4] = variable[5];
755 variable[5] = variable[0];
756 variable[5] = ATTR_array___Array____capacity(variable[5]) /*Array::_capacity*/;
757 variable[5] = TAG_Bool(UNTAG_Int(variable[5])>UNTAG_Int( TAG_Int(0)));
758 if (UNTAG_Bool(variable[5])) { /*if*/
759 variable[5] = variable[0];
760 variable[5] = ATTR_array___Array____items(variable[5]) /*Array::_items*/;
761 variable[6] = variable[0];
762 variable[6] = ATTR_array___AbstractArray____length(variable[6]) /*AbstractArray::_length*/;
763 (void)memcpy(UNBOX_NativeArray( variable[4] /*a*/), UNBOX_NativeArray(variable[5]), UNTAG_Int(variable[6])*sizeof(val_t));
764 }
765 variable[5] = variable[0];
766 ATTR_array___Array____items(variable[5]) /*Array::_items*/ = variable[4] /*a*/;
767 variable[5] = variable[0];
768 ATTR_array___Array____capacity(variable[5]) /*Array::_capacity*/ = variable[3] /*c*/;
769 return_label39: while(false);
770 tracehead = trace.prev;
771 return;
772 }
773 void array___Array___init(val_t self, int* init_table) {
774 struct trace_t trace = {NULL, NULL, 256, LOCATE_array___Array___init};
775 val_t variable[3];
776 void **closurevariable = NULL;
777 trace.prev = tracehead; tracehead = &trace;
778 trace.file = LOCATE_array;
779 variable[0] = self;
780 if (init_table[VAL2OBJ(variable[0])->vft[INIT_TABLE_POS_Array].i]) return;
781 variable[2] = variable[0];
782 ATTR_array___Array____capacity(variable[2]) /*Array::_capacity*/ = TAG_Int(0);
783 variable[2] = variable[0];
784 ATTR_array___AbstractArray____length(variable[2]) /*AbstractArray::_length*/ = TAG_Int(0);
785 return_label41: while(false);
786 init_table[VAL2OBJ(variable[0])->vft[INIT_TABLE_POS_Array].i] = 1;
787 tracehead = trace.prev;
788 return;
789 }
790 void array___Array___with_items(val_t self, val_t param0, int* init_table) {
791 struct trace_t trace = {NULL, NULL, 263, LOCATE_array___Array___with_items};
792 val_t variable[5];
793 void **closurevariable = NULL;
794 trace.prev = tracehead; tracehead = &trace;
795 trace.file = LOCATE_array;
796 variable[0] = self;
797 /* check if p<Array[E] with p:E */
798 if (( param0!=NIT_NULL) && !VAL_ISA( param0, COLOR_Array, ID_Array)) { fprintf(stderr, "Cast failled"); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_array___Array___with_items, LOCATE_array, 264); nit_exit(1); } /*cast Array[E]*/;
799 variable[1] = param0;
800 if (init_table[VAL2OBJ(variable[0])->vft[INIT_TABLE_POS_Array].i]) return;
801 variable[3] = variable[0];
802 variable[4] = ATTR_array___Array____items( variable[1] /*objects*/) /*Array::_items*/;
803 ATTR_array___Array____items(variable[3]) /*Array::_items*/ = variable[4];
804 variable[3] = variable[0];
805 variable[4] = ATTR_array___Array____capacity( variable[1] /*objects*/) /*Array::_capacity*/;
806 ATTR_array___Array____capacity(variable[3]) /*Array::_capacity*/ = variable[4];
807 variable[3] = variable[0];
808 variable[4] = CALL_abstract_collection___Collection___length( variable[1] /*objects*/)( variable[1] /*objects*/) /*AbstractArray::length*/;
809 ATTR_array___AbstractArray____length(variable[3]) /*AbstractArray::_length*/ = variable[4];
810 return_label42: while(false);
811 init_table[VAL2OBJ(variable[0])->vft[INIT_TABLE_POS_Array].i] = 1;
812 tracehead = trace.prev;
813 return;
814 }
815 void array___Array___with_capacity(val_t self, val_t param0, int* init_table) {
816 struct trace_t trace = {NULL, NULL, 271, LOCATE_array___Array___with_capacity};
817 val_t variable[5];
818 void **closurevariable = NULL;
819 trace.prev = tracehead; tracehead = &trace;
820 trace.file = LOCATE_array;
821 variable[0] = self;
822 variable[1] = param0;
823 if (init_table[VAL2OBJ(variable[0])->vft[INIT_TABLE_POS_Array].i]) return;
824 variable[3] = TAG_Bool(UNTAG_Int( variable[1] /*cap*/)>=UNTAG_Int( TAG_Int(0)));
825 if (!UNTAG_Bool(variable[3])) { fprintf(stderr, "Assert%s failed", " 'positive' "); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_array___Array___with_capacity, LOCATE_array, 274); nit_exit(1);}
826 variable[3] = variable[0];
827 variable[4] = variable[0];
828 variable[4] = BOX_NativeArray((val_t*)malloc((UNTAG_Int( variable[1] /*cap*/) * sizeof(val_t))));
829 ATTR_array___Array____items(variable[3]) /*Array::_items*/ = variable[4];
830 variable[3] = variable[0];
831 ATTR_array___Array____capacity(variable[3]) /*Array::_capacity*/ = variable[1] /*cap*/;
832 variable[3] = variable[0];
833 ATTR_array___AbstractArray____length(variable[3]) /*AbstractArray::_length*/ = TAG_Int(0);
834 return_label43: while(false);
835 init_table[VAL2OBJ(variable[0])->vft[INIT_TABLE_POS_Array].i] = 1;
836 tracehead = trace.prev;
837 return;
838 }
839 void array___Array___filled_with(val_t self, val_t param0, val_t param1, int* init_table) {
840 struct trace_t trace = {NULL, NULL, 280, LOCATE_array___Array___filled_with};
841 val_t variable[6];
842 void **closurevariable = NULL;
843 trace.prev = tracehead; tracehead = &trace;
844 trace.file = LOCATE_array;
845 variable[0] = self;
846 variable[1] = param0;
847 variable[2] = param1;
848 if (init_table[VAL2OBJ(variable[0])->vft[INIT_TABLE_POS_Array].i]) return;
849 variable[4] = TAG_Bool(UNTAG_Int( variable[2] /*count*/)>=UNTAG_Int( TAG_Int(0)));
850 if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", " 'positive' "); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_array___Array___filled_with, LOCATE_array, 283); nit_exit(1);}
851 variable[4] = variable[0];
852 variable[5] = variable[0];
853 variable[5] = BOX_NativeArray((val_t*)malloc((UNTAG_Int( variable[2] /*count*/) * sizeof(val_t))));
854 ATTR_array___Array____items(variable[4]) /*Array::_items*/ = variable[5];
855 variable[4] = variable[0];
856 ATTR_array___Array____capacity(variable[4]) /*Array::_capacity*/ = variable[2] /*count*/;
857 variable[4] = variable[0];
858 ATTR_array___AbstractArray____length(variable[4]) /*AbstractArray::_length*/ = variable[2] /*count*/;
859 variable[4] = TAG_Int(0);
860 while (true) { /*while*/
861 variable[5] = TAG_Bool(UNTAG_Int( variable[4] /*i*/)<UNTAG_Int( variable[2] /*count*/));
862 if (!UNTAG_Bool(variable[5])) break; /* while*/
863 variable[5] = variable[0];
864 CALL_abstract_collection___Map_____braeq(variable[5])(variable[5], variable[4] /*i*/, variable[1] /*value*/) /*Array::[]=*/;
865 variable[4] = TAG_Int(UNTAG_Int(variable[4])+UNTAG_Int( TAG_Int(1))) /*i*/;
866 continue_45: while(0);
867 }
868 break_45: while(0);
869 return_label44: while(false);
870 init_table[VAL2OBJ(variable[0])->vft[INIT_TABLE_POS_Array].i] = 1;
871 tracehead = trace.prev;
872 return;
873 }
874 void array___Array___with_native(val_t self, val_t param0, val_t param1, int* init_table) {
875 struct trace_t trace = {NULL, NULL, 294, LOCATE_array___Array___with_native};
876 val_t variable[5];
877 void **closurevariable = NULL;
878 trace.prev = tracehead; tracehead = &trace;
879 trace.file = LOCATE_array;
880 variable[0] = self;
881 variable[1] = param0;
882 variable[2] = param1;
883 if (init_table[VAL2OBJ(variable[0])->vft[INIT_TABLE_POS_Array].i]) return;
884 variable[4] = TAG_Bool(UNTAG_Int( variable[2] /*size*/)>=UNTAG_Int( TAG_Int(0)));
885 if (!UNTAG_Bool(variable[4])) { fprintf(stderr, "Assert%s failed", " 'positive' "); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_array___Array___with_native, LOCATE_array, 297); nit_exit(1);}
886 variable[4] = variable[0];
887 ATTR_array___Array____items(variable[4]) /*Array::_items*/ = variable[1] /*nat*/;
888 variable[4] = variable[0];
889 ATTR_array___Array____capacity(variable[4]) /*Array::_capacity*/ = variable[2] /*size*/;
890 variable[4] = variable[0];
891 ATTR_array___AbstractArray____length(variable[4]) /*AbstractArray::_length*/ = variable[2] /*size*/;
892 return_label46: while(false);
893 init_table[VAL2OBJ(variable[0])->vft[INIT_TABLE_POS_Array].i] = 1;
894 tracehead = trace.prev;
895 return;
896 }
897 val_t array___ArrayIterator___item(val_t self) {
898 struct trace_t trace = {NULL, NULL, 313, LOCATE_array___ArrayIterator___item};
899 val_t variable[4];
900 void **closurevariable = NULL;
901 trace.prev = tracehead; tracehead = &trace;
902 trace.file = LOCATE_array;
903 variable[0] = self;
904 variable[2] = variable[0];
905 variable[2] = ATTR_array___ArrayIterator____array(variable[2]) /*ArrayIterator::_array*/;
906 variable[3] = variable[0];
907 variable[3] = ATTR_array___ArrayIterator____index(variable[3]) /*ArrayIterator::_index*/;
908 variable[2] = CALL_abstract_collection___Map_____bra(variable[2])(variable[2], variable[3]) /*Map::[]*/;
909 variable[1] = variable[2];
910 goto return_label47;
911 return_label47: while(false);
912 tracehead = trace.prev;
913 return variable[1];
914 }
915 void array___ArrayIterator___next(val_t self) {
916 struct trace_t trace = {NULL, NULL, 319, LOCATE_array___ArrayIterator___next};
917 val_t variable[3];
918 void **closurevariable = NULL;
919 trace.prev = tracehead; tracehead = &trace;
920 trace.file = LOCATE_array;
921 variable[0] = self;
922 variable[2] = variable[0];
923 ATTR_array___ArrayIterator____index(variable[2]) /*ArrayIterator::_index*/ = TAG_Int(UNTAG_Int(ATTR_array___ArrayIterator____index(variable[2]) /*ArrayIterator::_index*/)+UNTAG_Int( TAG_Int(1)));
924 return_label48: while(false);
925 tracehead = trace.prev;
926 return;
927 }
928 val_t array___ArrayIterator___is_ok(val_t self) {
929 struct trace_t trace = {NULL, NULL, 317, LOCATE_array___ArrayIterator___is_ok};
930 val_t variable[4];
931 void **closurevariable = NULL;
932 trace.prev = tracehead; tracehead = &trace;
933 trace.file = LOCATE_array;
934 variable[0] = self;
935 variable[2] = variable[0];
936 variable[2] = ATTR_array___ArrayIterator____index(variable[2]) /*ArrayIterator::_index*/;
937 variable[3] = variable[0];
938 variable[3] = ATTR_array___ArrayIterator____array(variable[3]) /*ArrayIterator::_array*/;
939 variable[3] = CALL_abstract_collection___Collection___length(variable[3])(variable[3]) /*AbstractArray::length*/;
940 variable[2] = TAG_Bool(UNTAG_Int(variable[2])<UNTAG_Int(variable[3]));
941 variable[1] = variable[2];
942 goto return_label49;
943 return_label49: while(false);
944 tracehead = trace.prev;
945 return variable[1];
946 }
947 void array___ArrayIterator___item__eq(val_t self, val_t param0) {
948 struct trace_t trace = {NULL, NULL, 315, LOCATE_array___ArrayIterator___item__eq};
949 val_t variable[5];
950 void **closurevariable = NULL;
951 trace.prev = tracehead; tracehead = &trace;
952 trace.file = LOCATE_array;
953 variable[0] = self;
954 variable[1] = param0;
955 variable[3] = variable[0];
956 variable[3] = ATTR_array___ArrayIterator____array(variable[3]) /*ArrayIterator::_array*/;
957 variable[4] = variable[0];
958 variable[4] = ATTR_array___ArrayIterator____index(variable[4]) /*ArrayIterator::_index*/;
959 CALL_abstract_collection___Map_____braeq(variable[3])(variable[3], variable[4], variable[1] /*e*/) /*Map::[]=*/;
960 return_label50: while(false);
961 tracehead = trace.prev;
962 return;
963 }
964 val_t array___ArrayIterator___index(val_t self) {
965 struct trace_t trace = {NULL, NULL, 328, LOCATE_array___ArrayIterator___index};
966 val_t *variable = NULL;
967 void **closurevariable = NULL;
968 trace.prev = tracehead; tracehead = &trace;
969 trace.file = LOCATE_array;
970 tracehead = trace.prev;
971 return ATTR_array___ArrayIterator____index( self) /*ArrayIterator::_index*/;
972 }
973 void array___ArrayIterator___init(val_t self, val_t param0, int* init_table) {
974 struct trace_t trace = {NULL, NULL, 321, LOCATE_array___ArrayIterator___init};
975 val_t variable[4];
976 void **closurevariable = NULL;
977 trace.prev = tracehead; tracehead = &trace;
978 trace.file = LOCATE_array;
979 variable[0] = self;
980 variable[1] = param0;
981 if (init_table[VAL2OBJ(variable[0])->vft[INIT_TABLE_POS_ArrayIterator].i]) return;
982 variable[3] = TAG_Bool(!UNTAG_Bool(TAG_Bool(( variable[1] /*a*/ == NIT_NULL /*null*/) || (( variable[1] /*a*/ != NIT_NULL) && ((CALL_kernel___Object_____eqeq( variable[1] /*a*/)==kernel___Object_____eqeq)?(IS_EQUAL_NN( variable[1] /*a*/, NIT_NULL /*null*/)):(UNTAG_Bool(CALL_kernel___Object_____eqeq( variable[1] /*a*/)( variable[1] /*a*/, NIT_NULL /*null*/) /*Object::==*/)))))));
983 if (!UNTAG_Bool(variable[3])) { fprintf(stderr, "Assert%s failed", " 'not_nil' "); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_array___ArrayIterator___init, LOCATE_array, 323); nit_exit(1);}
984 variable[3] = variable[0];
985 ATTR_array___ArrayIterator____array(variable[3]) /*ArrayIterator::_array*/ = variable[1] /*a*/;
986 variable[3] = variable[0];
987 ATTR_array___ArrayIterator____index(variable[3]) /*ArrayIterator::_index*/ = TAG_Int(0);
988 return_label51: while(false);
989 init_table[VAL2OBJ(variable[0])->vft[INIT_TABLE_POS_ArrayIterator].i] = 1;
990 tracehead = trace.prev;
991 return;
992 }
993 val_t array___ArraySet___iterator(val_t self) {
994 struct trace_t trace = {NULL, NULL, 364, LOCATE_array___ArraySet___iterator};
995 val_t variable[4];
996 void **closurevariable = NULL;
997 trace.prev = tracehead; tracehead = &trace;
998 trace.file = LOCATE_array;
999 variable[0] = self;
1000 variable[2] = variable[0];
1001 variable[2] = ATTR_array___ArraySet____array(variable[2]) /*ArraySet::_array*/;
1002 variable[2] = CALL_abstract_collection___Collection___iterator(variable[2])(variable[2]) /*AbstractArray::iterator*/;
1003 variable[3] = NEW_ArraySetIterator_array___ArraySetIterator___init(variable[2]); /*new ArraySetIterator[E]*/
1004 variable[2] = variable[3];
1005 variable[1] = variable[2];
1006 goto return_label52;
1007 return_label52: while(false);
1008 tracehead = trace.prev;
1009 return variable[1];
1010 }
1011 val_t array___ArraySet___is_empty(val_t self) {
1012 struct trace_t trace = {NULL, NULL, 344, LOCATE_array___ArraySet___is_empty};
1013 val_t variable[3];
1014 void **closurevariable = NULL;
1015 trace.prev = tracehead; tracehead = &trace;
1016 trace.file = LOCATE_array;
1017 variable[0] = self;
1018 variable[2] = variable[0];
1019 variable[2] = ATTR_array___ArraySet____array(variable[2]) /*ArraySet::_array*/;
1020 variable[2] = CALL_abstract_collection___Collection___is_empty(variable[2])(variable[2]) /*AbstractArray::is_empty*/;
1021 variable[1] = variable[2];
1022 goto return_label53;
1023 return_label53: while(false);
1024 tracehead = trace.prev;
1025 return variable[1];
1026 }
1027 val_t array___ArraySet___length(val_t self) {
1028 struct trace_t trace = {NULL, NULL, 346, LOCATE_array___ArraySet___length};
1029 val_t variable[3];
1030 void **closurevariable = NULL;
1031 trace.prev = tracehead; tracehead = &trace;
1032 trace.file = LOCATE_array;
1033 variable[0] = self;
1034 variable[2] = variable[0];
1035 variable[2] = ATTR_array___ArraySet____array(variable[2]) /*ArraySet::_array*/;
1036 variable[2] = CALL_abstract_collection___Collection___length(variable[2])(variable[2]) /*AbstractArray::length*/;
1037 variable[1] = variable[2];
1038 goto return_label54;
1039 return_label54: while(false);
1040 tracehead = trace.prev;
1041 return variable[1];
1042 }
1043 val_t array___ArraySet___has(val_t self, val_t param0) {
1044 struct trace_t trace = {NULL, NULL, 340, LOCATE_array___ArraySet___has};
1045 val_t variable[4];
1046 void **closurevariable = NULL;
1047 trace.prev = tracehead; tracehead = &trace;
1048 trace.file = LOCATE_array;
1049 variable[0] = self;
1050 variable[1] = param0;
1051 variable[3] = variable[0];
1052 variable[3] = ATTR_array___ArraySet____array(variable[3]) /*ArraySet::_array*/;
1053 variable[3] = CALL_abstract_collection___Collection___has(variable[3])(variable[3], variable[1] /*e*/) /*AbstractArray::has*/;
1054 variable[2] = variable[3];
1055 goto return_label55;
1056 return_label55: while(false);
1057 tracehead = trace.prev;
1058 return variable[2];
1059 }
1060 val_t array___ArraySet___first(val_t self) {
1061 struct trace_t trace = {NULL, NULL, 348, LOCATE_array___ArraySet___first};
1062 val_t variable[3];
1063 void **closurevariable = NULL;
1064 trace.prev = tracehead; tracehead = &trace;
1065 trace.file = LOCATE_array;
1066 variable[0] = self;
1067 variable[2] = variable[0];
1068 variable[2] = ATTR_array___ArraySet____array(variable[2]) /*ArraySet::_array*/;
1069 variable[2] = CALL_abstract_collection___Collection___length(variable[2])(variable[2]) /*AbstractArray::length*/;
1070 variable[2] = TAG_Bool(UNTAG_Int(variable[2])>UNTAG_Int( TAG_Int(0)));
1071 if (!UNTAG_Bool(variable[2])) { fprintf(stderr, "Assert%s failed", ""); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_array___ArraySet___first, LOCATE_array, 350); nit_exit(1);}
1072 variable[2] = variable[0];
1073 variable[2] = ATTR_array___ArraySet____array(variable[2]) /*ArraySet::_array*/;
1074 variable[2] = CALL_abstract_collection___Collection___first(variable[2])(variable[2]) /*IndexedCollection::first*/;
1075 variable[1] = variable[2];
1076 goto return_label56;
1077 return_label56: while(false);
1078 tracehead = trace.prev;
1079 return variable[1];
1080 }
1081 void array___ArraySet___clear(val_t self) {
1082 struct trace_t trace = {NULL, NULL, 362, LOCATE_array___ArraySet___clear};
1083 val_t variable[3];
1084 void **closurevariable = NULL;
1085 trace.prev = tracehead; tracehead = &trace;
1086 trace.file = LOCATE_array;
1087 variable[0] = self;
1088 variable[2] = variable[0];
1089 variable[2] = ATTR_array___ArraySet____array(variable[2]) /*ArraySet::_array*/;
1090 CALL_abstract_collection___RemovableCollection___clear(variable[2])(variable[2]) /*AbstractArray::clear*/;
1091 return_label57: while(false);
1092 tracehead = trace.prev;
1093 return;
1094 }
1095 void array___ArraySet___remove(val_t self, val_t param0) {
1096 struct trace_t trace = {NULL, NULL, 354, LOCATE_array___ArraySet___remove};
1097 val_t variable[5];
1098 void **closurevariable = NULL;
1099 trace.prev = tracehead; tracehead = &trace;
1100 trace.file = LOCATE_array;
1101 variable[0] = self;
1102 variable[1] = param0;
1103 variable[4] = variable[0];
1104 variable[4] = ATTR_array___ArraySet____array(variable[4]) /*ArraySet::_array*/;
1105 variable[4] = CALL_abstract_collection___IndexedCollection___index_of(variable[4])(variable[4], variable[1] /*item*/) /*AbstractArray::index_of*/;
1106 variable[3] = variable[4];
1107 variable[4] = TAG_Bool(UNTAG_Int( variable[3] /*i*/)>=UNTAG_Int( TAG_Int(0)));
1108 if (UNTAG_Bool(variable[4])) { /*if*/
1109 variable[4] = variable[0];
1110 CALL_array___ArraySet___remove_at(variable[4])(variable[4], variable[3] /*i*/) /*ArraySet::remove_at*/;
1111 }
1112 return_label58: while(false);
1113 tracehead = trace.prev;
1114 return;
1115 }
1116 void array___ArraySet___remove_all(val_t self, val_t param0) {
1117 struct trace_t trace = {NULL, NULL, 360, LOCATE_array___ArraySet___remove_all};
1118 val_t variable[4];
1119 void **closurevariable = NULL;
1120 trace.prev = tracehead; tracehead = &trace;
1121 trace.file = LOCATE_array;
1122 variable[0] = self;
1123 variable[1] = param0;
1124 variable[3] = variable[0];
1125 CALL_abstract_collection___RemovableCollection___remove(variable[3])(variable[3], variable[1] /*item*/) /*ArraySet::remove*/;
1126 return_label59: while(false);
1127 tracehead = trace.prev;
1128 return;
1129 }
1130 void array___ArraySet___add(val_t self, val_t param0) {
1131 struct trace_t trace = {NULL, NULL, 342, LOCATE_array___ArraySet___add};
1132 val_t variable[4];
1133 void **closurevariable = NULL;
1134 trace.prev = tracehead; tracehead = &trace;
1135 trace.file = LOCATE_array;
1136 variable[0] = self;
1137 variable[1] = param0;
1138 variable[3] = variable[0];
1139 variable[3] = ATTR_array___ArraySet____array(variable[3]) /*ArraySet::_array*/;
1140 variable[3] = CALL_abstract_collection___Collection___has(variable[3])(variable[3], variable[1] /*e*/) /*AbstractArray::has*/;
1141 if (UNTAG_Bool( TAG_Bool(!UNTAG_Bool(variable[3])))) { /*if*/
1142 variable[3] = variable[0];
1143 variable[3] = ATTR_array___ArraySet____array(variable[3]) /*ArraySet::_array*/;
1144 CALL_abstract_collection___SimpleCollection___add(variable[3])(variable[3], variable[1] /*e*/) /*AbstractArray::add*/;
1145 }
1146 return_label60: while(false);
1147 tracehead = trace.prev;
1148 return;
1149 }
1150 void array___ArraySet___enlarge(val_t self, val_t param0) {
1151 struct trace_t trace = {NULL, NULL, 366, LOCATE_array___ArraySet___enlarge};
1152 val_t variable[4];
1153 void **closurevariable = NULL;
1154 trace.prev = tracehead; tracehead = &trace;
1155 trace.file = LOCATE_array;
1156 variable[0] = self;
1157 variable[1] = param0;
1158 variable[3] = variable[0];
1159 variable[3] = ATTR_array___ArraySet____array(variable[3]) /*ArraySet::_array*/;
1160 CALL_array___AbstractArray___enlarge(variable[3])(variable[3], variable[1] /*cap*/) /*Array::enlarge*/;
1161 return_label61: while(false);
1162 tracehead = trace.prev;
1163 return;
1164 }
1165 void array___ArraySet___remove_at(val_t self, val_t param0) {
1166 struct trace_t trace = {NULL, NULL, 369, LOCATE_array___ArraySet___remove_at};
1167 val_t variable[5];
1168 void **closurevariable = NULL;
1169 trace.prev = tracehead; tracehead = &trace;
1170 trace.file = LOCATE_array;
1171 variable[0] = self;
1172 variable[1] = param0;
1173 variable[3] = variable[0];
1174 variable[3] = ATTR_array___ArraySet____array(variable[3]) /*ArraySet::_array*/;
1175 variable[4] = variable[0];
1176 variable[4] = ATTR_array___ArraySet____array(variable[4]) /*ArraySet::_array*/;
1177 variable[4] = CALL_abstract_collection___IndexedCollection___last(variable[4])(variable[4]) /*IndexedCollection::last*/;
1178 CALL_abstract_collection___Map_____braeq(variable[3])(variable[3], variable[1] /*i*/, variable[4]) /*Array::[]=*/;
1179 variable[3] = variable[0];
1180 variable[3] = ATTR_array___ArraySet____array(variable[3]) /*ArraySet::_array*/;
1181 CALL_abstract_collection___IndexedCollection___pop(variable[3])(variable[3]) /*AbstractArray::pop*/;
1182 return_label62: while(false);
1183 tracehead = trace.prev;
1184 return;
1185 }
1186 void array___ArraySet___init(val_t self, int* init_table) {
1187 struct trace_t trace = {NULL, NULL, 375, LOCATE_array___ArraySet___init};
1188 val_t variable[4];
1189 void **closurevariable = NULL;
1190 trace.prev = tracehead; tracehead = &trace;
1191 trace.file = LOCATE_array;
1192 variable[0] = self;
1193 if (init_table[VAL2OBJ(variable[0])->vft[INIT_TABLE_POS_ArraySet].i]) return;
1194 variable[2] = variable[0];
1195 variable[3] = NEW_Array_array___Array___init(); /*new Array[E]*/
1196 ATTR_array___ArraySet____array(variable[2]) /*ArraySet::_array*/ = variable[3];
1197 return_label63: while(false);
1198 init_table[VAL2OBJ(variable[0])->vft[INIT_TABLE_POS_ArraySet].i] = 1;
1199 tracehead = trace.prev;
1200 return;
1201 }
1202 void array___ArraySet___with_capacity(val_t self, val_t param0, int* init_table) {
1203 struct trace_t trace = {NULL, NULL, 378, LOCATE_array___ArraySet___with_capacity};
1204 val_t variable[5];
1205 void **closurevariable = NULL;
1206 trace.prev = tracehead; tracehead = &trace;
1207 trace.file = LOCATE_array;
1208 variable[0] = self;
1209 variable[1] = param0;
1210 if (init_table[VAL2OBJ(variable[0])->vft[INIT_TABLE_POS_ArraySet].i]) return;
1211 variable[3] = variable[0];
1212 variable[4] = NEW_Array_array___Array___with_capacity( variable[1] /*i*/); /*new Array[E]*/
1213 ATTR_array___ArraySet____array(variable[3]) /*ArraySet::_array*/ = variable[4];
1214 return_label64: while(false);
1215 init_table[VAL2OBJ(variable[0])->vft[INIT_TABLE_POS_ArraySet].i] = 1;
1216 tracehead = trace.prev;
1217 return;
1218 }
1219 val_t array___ArraySetIterator___item(val_t self) {
1220 struct trace_t trace = {NULL, NULL, 390, LOCATE_array___ArraySetIterator___item};
1221 val_t variable[3];
1222 void **closurevariable = NULL;
1223 trace.prev = tracehead; tracehead = &trace;
1224 trace.file = LOCATE_array;
1225 variable[0] = self;
1226 variable[2] = variable[0];
1227 variable[2] = ATTR_array___ArraySetIterator____iter(variable[2]) /*ArraySetIterator::_iter*/;
1228 variable[2] = CALL_abstract_collection___Iterator___item(variable[2])(variable[2]) /*ArrayIterator::item*/;
1229 variable[1] = variable[2];
1230 goto return_label65;
1231 return_label65: while(false);
1232 tracehead = trace.prev;
1233 return variable[1];
1234 }
1235 void array___ArraySetIterator___next(val_t self) {
1236 struct trace_t trace = {NULL, NULL, 388, LOCATE_array___ArraySetIterator___next};
1237 val_t variable[3];
1238 void **closurevariable = NULL;
1239 trace.prev = tracehead; tracehead = &trace;
1240 trace.file = LOCATE_array;
1241 variable[0] = self;
1242 variable[2] = variable[0];
1243 variable[2] = ATTR_array___ArraySetIterator____iter(variable[2]) /*ArraySetIterator::_iter*/;
1244 CALL_abstract_collection___Iterator___next(variable[2])(variable[2]) /*ArrayIterator::next*/;
1245 return_label66: while(false);
1246 tracehead = trace.prev;
1247 return;
1248 }
1249 val_t array___ArraySetIterator___is_ok(val_t self) {
1250 struct trace_t trace = {NULL, NULL, 386, LOCATE_array___ArraySetIterator___is_ok};
1251 val_t variable[3];
1252 void **closurevariable = NULL;
1253 trace.prev = tracehead; tracehead = &trace;
1254 trace.file = LOCATE_array;
1255 variable[0] = self;
1256 variable[2] = variable[0];
1257 variable[2] = ATTR_array___ArraySetIterator____iter(variable[2]) /*ArraySetIterator::_iter*/;
1258 variable[2] = CALL_abstract_collection___Iterator___is_ok(variable[2])(variable[2]) /*ArrayIterator::is_ok*/;
1259 variable[1] = variable[2];
1260 goto return_label67;
1261 return_label67: while(false);
1262 tracehead = trace.prev;
1263 return variable[1];
1264 }
1265 void array___ArraySetIterator___init(val_t self, val_t param0, int* init_table) {
1266 struct trace_t trace = {NULL, NULL, 392, LOCATE_array___ArraySetIterator___init};
1267 val_t variable[4];
1268 void **closurevariable = NULL;
1269 trace.prev = tracehead; tracehead = &trace;
1270 trace.file = LOCATE_array;
1271 variable[0] = self;
1272 variable[1] = param0;
1273 if (init_table[VAL2OBJ(variable[0])->vft[INIT_TABLE_POS_ArraySetIterator].i]) return;
1274 variable[3] = variable[0];
1275 ATTR_array___ArraySetIterator____iter(variable[3]) /*ArraySetIterator::_iter*/ = variable[1] /*iter*/;
1276 return_label68: while(false);
1277 init_table[VAL2OBJ(variable[0])->vft[INIT_TABLE_POS_ArraySetIterator].i] = 1;
1278 tracehead = trace.prev;
1279 return;
1280 }
1281 val_t array___ArrayMap___iterator(val_t self) {
1282 struct trace_t trace = {NULL, NULL, 454, LOCATE_array___ArrayMap___iterator};
1283 val_t variable[4];
1284 void **closurevariable = NULL;
1285 trace.prev = tracehead; tracehead = &trace;
1286 trace.file = LOCATE_array;
1287 variable[0] = self;
1288 variable[2] = variable[0];
1289 variable[2] = ATTR_array___ArrayMap____items(variable[2]) /*ArrayMap::_items*/;
1290 variable[2] = CALL_abstract_collection___Collection___iterator(variable[2])(variable[2]) /*AbstractArray::iterator*/;
1291 variable[3] = NEW_CoupleMapIterator_abstract_collection___CoupleMapIterator___init(variable[2]); /*new CoupleMapIterator[K, E]*/
1292 variable[2] = variable[3];
1293 variable[1] = variable[2];
1294 goto return_label69;
1295 return_label69: while(false);
1296 tracehead = trace.prev;
1297 return variable[1];
1298 }
1299 val_t array___ArrayMap___is_empty(val_t self) {
1300 struct trace_t trace = {NULL, NULL, 456, LOCATE_array___ArrayMap___is_empty};
1301 val_t variable[3];
1302 void **closurevariable = NULL;
1303 trace.prev = tracehead; tracehead = &trace;
1304 trace.file = LOCATE_array;
1305 variable[0] = self;
1306 variable[2] = variable[0];
1307 variable[2] = ATTR_array___ArrayMap____items(variable[2]) /*ArrayMap::_items*/;
1308 variable[2] = CALL_abstract_collection___Collection___is_empty(variable[2])(variable[2]) /*AbstractArray::is_empty*/;
1309 variable[1] = variable[2];
1310 goto return_label70;
1311 return_label70: while(false);
1312 tracehead = trace.prev;
1313 return variable[1];
1314 }
1315 val_t array___ArrayMap___length(val_t self) {
1316 struct trace_t trace = {NULL, NULL, 441, LOCATE_array___ArrayMap___length};
1317 val_t variable[3];
1318 void **closurevariable = NULL;
1319 trace.prev = tracehead; tracehead = &trace;
1320 trace.file = LOCATE_array;
1321 variable[0] = self;
1322 variable[2] = variable[0];
1323 variable[2] = ATTR_array___ArrayMap____items(variable[2]) /*ArrayMap::_items*/;
1324 variable[2] = CALL_abstract_collection___Collection___length(variable[2])(variable[2]) /*AbstractArray::length*/;
1325 variable[1] = variable[2];
1326 goto return_label71;
1327 return_label71: while(false);
1328 tracehead = trace.prev;
1329 return variable[1];
1330 }
1331 val_t array___ArrayMap___has(val_t self, val_t param0) {
1332 struct trace_t trace = {NULL, NULL, 427, LOCATE_array___ArrayMap___has};
1333 val_t variable[7];
1334 void **closurevariable = NULL;
1335 trace.prev = tracehead; tracehead = &trace;
1336 trace.file = LOCATE_array;
1337 variable[0] = self;
1338 variable[1] = param0;
1339 variable[3] = variable[0];
1340 variable[3] = ATTR_array___ArrayMap____items(variable[3]) /*ArrayMap::_items*/;
1341 variable[3] = CALL_abstract_collection___Collection___iterator(variable[3])(variable[3]) /*AbstractArray::iterator*/;
1342 while (true) { /*for*/
1343 variable[4] = CALL_abstract_collection___Iterator___is_ok(variable[3])(variable[3]) /*ArrayIterator::is_ok*/;
1344 if (!UNTAG_Bool(variable[4])) break; /*for*/
1345 variable[4] = CALL_abstract_collection___Iterator___item(variable[3])(variable[3]) /*ArrayIterator::item*/;
1346 variable[5] = variable[4];
1347 variable[6] = CALL_abstract_collection___Couple___second( variable[5] /*i*/)( variable[5] /*i*/) /*Couple::second*/;
1348 variable[6] = TAG_Bool((variable[6] == variable[1] /*item*/) || ((variable[6] != NIT_NULL) && ((CALL_kernel___Object_____eqeq(variable[6])==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[6], variable[1] /*item*/)):(UNTAG_Bool(CALL_kernel___Object_____eqeq(variable[6])(variable[6], variable[1] /*item*/) /*Object::==*/)))));
1349 if (UNTAG_Bool(variable[6])) { /*if*/
1350 variable[2] = TAG_Bool(true);
1351 goto return_label72;
1352 }
1353 continue_73: while(0);
1354 CALL_abstract_collection___Iterator___next(variable[3])(variable[3]) /*ArrayIterator::next*/;
1355 }
1356 break_73: while(0);
1357 variable[2] = TAG_Bool(false);
1358 goto return_label72;
1359 return_label72: while(false);
1360 tracehead = trace.prev;
1361 return variable[2];
1362 }
1363 val_t array___ArrayMap___has_only(val_t self, val_t param0) {
1364 struct trace_t trace = {NULL, NULL, 434, LOCATE_array___ArrayMap___has_only};
1365 val_t variable[7];
1366 void **closurevariable = NULL;
1367 trace.prev = tracehead; tracehead = &trace;
1368 trace.file = LOCATE_array;
1369 variable[0] = self;
1370 variable[1] = param0;
1371 variable[3] = variable[0];
1372 variable[3] = ATTR_array___ArrayMap____items(variable[3]) /*ArrayMap::_items*/;
1373 variable[3] = CALL_abstract_collection___Collection___iterator(variable[3])(variable[3]) /*AbstractArray::iterator*/;
1374 while (true) { /*for*/
1375 variable[4] = CALL_abstract_collection___Iterator___is_ok(variable[3])(variable[3]) /*ArrayIterator::is_ok*/;
1376 if (!UNTAG_Bool(variable[4])) break; /*for*/
1377 variable[4] = CALL_abstract_collection___Iterator___item(variable[3])(variable[3]) /*ArrayIterator::item*/;
1378 variable[5] = variable[4];
1379 variable[6] = CALL_abstract_collection___Couple___second( variable[5] /*i*/)( variable[5] /*i*/) /*Couple::second*/;
1380 variable[6] = TAG_Bool(!UNTAG_Bool(TAG_Bool((variable[6] == variable[1] /*item*/) || ((variable[6] != NIT_NULL) && ((CALL_kernel___Object_____eqeq(variable[6])==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[6], variable[1] /*item*/)):(UNTAG_Bool(CALL_kernel___Object_____eqeq(variable[6])(variable[6], variable[1] /*item*/) /*Object::==*/)))))));
1381 if (UNTAG_Bool(variable[6])) { /*if*/
1382 variable[2] = TAG_Bool(false);
1383 goto return_label74;
1384 }
1385 continue_75: while(0);
1386 CALL_abstract_collection___Iterator___next(variable[3])(variable[3]) /*ArrayIterator::next*/;
1387 }
1388 break_75: while(0);
1389 variable[2] = TAG_Bool(true);
1390 goto return_label74;
1391 return_label74: while(false);
1392 tracehead = trace.prev;
1393 return variable[2];
1394 }
1395 val_t array___ArrayMap___count(val_t self, val_t param0) {
1396 struct trace_t trace = {NULL, NULL, 446, LOCATE_array___ArrayMap___count};
1397 val_t variable[8];
1398 void **closurevariable = NULL;
1399 trace.prev = tracehead; tracehead = &trace;
1400 trace.file = LOCATE_array;
1401 variable[0] = self;
1402 variable[1] = param0;
1403 variable[3] = TAG_Int(0);
1404 variable[4] = variable[0];
1405 variable[4] = ATTR_array___ArrayMap____items(variable[4]) /*ArrayMap::_items*/;
1406 variable[4] = CALL_abstract_collection___Collection___iterator(variable[4])(variable[4]) /*AbstractArray::iterator*/;
1407 while (true) { /*for*/
1408 variable[5] = CALL_abstract_collection___Iterator___is_ok(variable[4])(variable[4]) /*ArrayIterator::is_ok*/;
1409 if (!UNTAG_Bool(variable[5])) break; /*for*/
1410 variable[5] = CALL_abstract_collection___Iterator___item(variable[4])(variable[4]) /*ArrayIterator::item*/;
1411 variable[6] = variable[5];
1412 variable[7] = CALL_abstract_collection___Couple___second( variable[6] /*i*/)( variable[6] /*i*/) /*Couple::second*/;
1413 variable[7] = TAG_Bool((variable[7] == variable[1] /*item*/) || ((variable[7] != NIT_NULL) && ((CALL_kernel___Object_____eqeq(variable[7])==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[7], variable[1] /*item*/)):(UNTAG_Bool(CALL_kernel___Object_____eqeq(variable[7])(variable[7], variable[1] /*item*/) /*Object::==*/)))));
1414 if (UNTAG_Bool(variable[7])) { /*if*/
1415 variable[3] = TAG_Int(UNTAG_Int(variable[3])+UNTAG_Int( TAG_Int(1))) /*nb*/;
1416 }
1417 continue_77: while(0);
1418 CALL_abstract_collection___Iterator___next(variable[4])(variable[4]) /*ArrayIterator::next*/;
1419 }
1420 break_77: while(0);
1421 variable[2] = variable[3] /*nb*/;
1422 goto return_label76;
1423 return_label76: while(false);
1424 tracehead = trace.prev;
1425 return variable[2];
1426 }
1427 val_t array___ArrayMap___first(val_t self) {
1428 struct trace_t trace = {NULL, NULL, 444, LOCATE_array___ArrayMap___first};
1429 val_t variable[3];
1430 void **closurevariable = NULL;
1431 trace.prev = tracehead; tracehead = &trace;
1432 trace.file = LOCATE_array;
1433 variable[0] = self;
1434 variable[2] = variable[0];
1435 variable[2] = ATTR_array___ArrayMap____items(variable[2]) /*ArrayMap::_items*/;
1436 variable[2] = CALL_abstract_collection___Collection___first(variable[2])(variable[2]) /*IndexedCollection::first*/;
1437 variable[2] = CALL_abstract_collection___Couple___first(variable[2])(variable[2]) /*Couple::first*/;
1438 variable[1] = variable[2];
1439 goto return_label78;
1440 return_label78: while(false);
1441 tracehead = trace.prev;
1442 return variable[1];
1443 }
1444 void array___ArrayMap___clear(val_t self) {
1445 struct trace_t trace = {NULL, NULL, 487, LOCATE_array___ArrayMap___clear};
1446 val_t variable[3];
1447 void **closurevariable = NULL;
1448 trace.prev = tracehead; tracehead = &trace;
1449 trace.file = LOCATE_array;
1450 variable[0] = self;
1451 variable[2] = variable[0];
1452 variable[2] = ATTR_array___ArrayMap____items(variable[2]) /*ArrayMap::_items*/;
1453 CALL_abstract_collection___RemovableCollection___clear(variable[2])(variable[2]) /*AbstractArray::clear*/;
1454 return_label79: while(false);
1455 tracehead = trace.prev;
1456 return;
1457 }
1458 void array___ArrayMap___remove(val_t self, val_t param0) {
1459 struct trace_t trace = {NULL, NULL, 458, LOCATE_array___ArrayMap___remove};
1460 val_t variable[10];
1461 void **closurevariable = NULL;
1462 trace.prev = tracehead; tracehead = &trace;
1463 trace.file = LOCATE_array;
1464 variable[0] = self;
1465 variable[1] = param0;
1466 variable[4] = variable[0];
1467 variable[4] = ATTR_array___ArrayMap____items(variable[4]) /*ArrayMap::_items*/;
1468 variable[4] = CALL_abstract_collection___Collection___length(variable[4])(variable[4]) /*AbstractArray::length*/;
1469 variable[4] = TAG_Int(UNTAG_Int(variable[4])-UNTAG_Int( TAG_Int(1)));
1470 variable[3] = variable[4];
1471 while (true) { /*while*/
1472 variable[4] = TAG_Bool(UNTAG_Int( variable[3] /*i*/)>=UNTAG_Int( TAG_Int(0)));
1473 if (!UNTAG_Bool(variable[4])) break; /* while*/
1474 variable[4] = variable[0];
1475 variable[4] = ATTR_array___ArrayMap____items(variable[4]) /*ArrayMap::_items*/;
1476 variable[5] = variable[4];
1477 variable[6] = variable[3] /*i*/;
1478 variable[8] = TAG_Bool(UNTAG_Int( variable[6] /*index*/)>=UNTAG_Int( TAG_Int(0)));
1479 variable[9] = variable[8];
1480 if (UNTAG_Bool(variable[9])) { /* and */
1481 variable[9] = variable[5];
1482 variable[9] = ATTR_array___AbstractArray____length(variable[9]) /*AbstractArray::_length*/;
1483 variable[9] = TAG_Bool(UNTAG_Int( variable[6] /*index*/)<UNTAG_Int(variable[9]));
1484 }
1485 variable[8] = variable[9];
1486 if (!UNTAG_Bool(variable[8])) { fprintf(stderr, "Assert%s failed", " 'index' "); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_array___Array_____bra, LOCATE_array, 229); nit_exit(1);}
1487 variable[8] = variable[5];
1488 variable[8] = ATTR_array___Array____items(variable[8]) /*Array::_items*/;
1489 variable[8] = UNBOX_NativeArray(variable[8])[UNTAG_Int( variable[6] /*index*/)];
1490 variable[7] = variable[8];
1491 goto return_label82;
1492 return_label82: while(false);
1493 variable[4] = variable[7];
1494 variable[4] = CALL_abstract_collection___Couple___second(variable[4])(variable[4]) /*Couple::second*/;
1495 variable[4] = TAG_Bool((variable[4] == variable[1] /*item*/) || ((variable[4] != NIT_NULL) && ((CALL_kernel___Object_____eqeq(variable[4])==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*item*/)):(UNTAG_Bool(CALL_kernel___Object_____eqeq(variable[4])(variable[4], variable[1] /*item*/) /*Object::==*/)))));
1496 if (UNTAG_Bool(variable[4])) { /*if*/
1497 variable[4] = variable[0];
1498 CALL_array___ArrayMap___remove_at_index(variable[4])(variable[4], variable[3] /*i*/) /*ArrayMap::remove_at_index*/;
1499 goto return_label80;
1500 }
1501 variable[3] = TAG_Int(UNTAG_Int(variable[3])-UNTAG_Int( TAG_Int(1))) /*i*/;
1502 continue_81: while(0);
1503 }
1504 break_81: while(0);
1505 return_label80: while(false);
1506 tracehead = trace.prev;
1507 return;
1508 }
1509 void array___ArrayMap___remove_all(val_t self, val_t param0) {
1510 struct trace_t trace = {NULL, NULL, 470, LOCATE_array___ArrayMap___remove_all};
1511 val_t variable[10];
1512 void **closurevariable = NULL;
1513 trace.prev = tracehead; tracehead = &trace;
1514 trace.file = LOCATE_array;
1515 variable[0] = self;
1516 variable[1] = param0;
1517 variable[4] = variable[0];
1518 variable[4] = ATTR_array___ArrayMap____items(variable[4]) /*ArrayMap::_items*/;
1519 variable[4] = CALL_abstract_collection___Collection___length(variable[4])(variable[4]) /*AbstractArray::length*/;
1520 variable[4] = TAG_Int(UNTAG_Int(variable[4])-UNTAG_Int( TAG_Int(1)));
1521 variable[3] = variable[4];
1522 while (true) { /*while*/
1523 variable[4] = TAG_Bool(UNTAG_Int( variable[3] /*i*/)>=UNTAG_Int( TAG_Int(0)));
1524 if (!UNTAG_Bool(variable[4])) break; /* while*/
1525 variable[4] = variable[0];
1526 variable[4] = ATTR_array___ArrayMap____items(variable[4]) /*ArrayMap::_items*/;
1527 variable[5] = variable[4];
1528 variable[6] = variable[3] /*i*/;
1529 variable[8] = TAG_Bool(UNTAG_Int( variable[6] /*index*/)>=UNTAG_Int( TAG_Int(0)));
1530 variable[9] = variable[8];
1531 if (UNTAG_Bool(variable[9])) { /* and */
1532 variable[9] = variable[5];
1533 variable[9] = ATTR_array___AbstractArray____length(variable[9]) /*AbstractArray::_length*/;
1534 variable[9] = TAG_Bool(UNTAG_Int( variable[6] /*index*/)<UNTAG_Int(variable[9]));
1535 }
1536 variable[8] = variable[9];
1537 if (!UNTAG_Bool(variable[8])) { fprintf(stderr, "Assert%s failed", " 'index' "); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_array___Array_____bra, LOCATE_array, 229); nit_exit(1);}
1538 variable[8] = variable[5];
1539 variable[8] = ATTR_array___Array____items(variable[8]) /*Array::_items*/;
1540 variable[8] = UNBOX_NativeArray(variable[8])[UNTAG_Int( variable[6] /*index*/)];
1541 variable[7] = variable[8];
1542 goto return_label85;
1543 return_label85: while(false);
1544 variable[4] = variable[7];
1545 variable[4] = CALL_abstract_collection___Couple___second(variable[4])(variable[4]) /*Couple::second*/;
1546 variable[4] = TAG_Bool((variable[4] == variable[1] /*item*/) || ((variable[4] != NIT_NULL) && ((CALL_kernel___Object_____eqeq(variable[4])==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[4], variable[1] /*item*/)):(UNTAG_Bool(CALL_kernel___Object_____eqeq(variable[4])(variable[4], variable[1] /*item*/) /*Object::==*/)))));
1547 if (UNTAG_Bool(variable[4])) { /*if*/
1548 variable[4] = variable[0];
1549 CALL_array___ArrayMap___remove_at_index(variable[4])(variable[4], variable[3] /*i*/) /*ArrayMap::remove_at_index*/;
1550 }
1551 variable[3] = TAG_Int(UNTAG_Int(variable[3])-UNTAG_Int( TAG_Int(1))) /*i*/;
1552 continue_84: while(0);
1553 }
1554 break_84: while(0);
1555 return_label83: while(false);
1556 tracehead = trace.prev;
1557 return;
1558 }
1559 val_t array___ArrayMap_____bra(val_t self, val_t param0) {
1560 struct trace_t trace = {NULL, NULL, 402, LOCATE_array___ArrayMap_____bra};
1561 val_t variable[10];
1562 void **closurevariable = NULL;
1563 trace.prev = tracehead; tracehead = &trace;
1564 trace.file = LOCATE_array;
1565 variable[0] = self;
1566 variable[1] = param0;
1567 variable[4] = variable[0];
1568 variable[4] = CALL_array___ArrayMap___index(variable[4])(variable[4], variable[1] /*key*/) /*ArrayMap::index*/;
1569 variable[3] = variable[4];
1570 variable[4] = TAG_Bool(UNTAG_Int( variable[3] /*i*/)>=UNTAG_Int( TAG_Int(0)));
1571 if (UNTAG_Bool(variable[4])) { /*if*/
1572 variable[4] = variable[0];
1573 variable[4] = ATTR_array___ArrayMap____items(variable[4]) /*ArrayMap::_items*/;
1574 variable[5] = variable[4];
1575 variable[6] = variable[3] /*i*/;
1576 variable[8] = TAG_Bool(UNTAG_Int( variable[6] /*index*/)>=UNTAG_Int( TAG_Int(0)));
1577 variable[9] = variable[8];
1578 if (UNTAG_Bool(variable[9])) { /* and */
1579 variable[9] = variable[5];
1580 variable[9] = ATTR_array___AbstractArray____length(variable[9]) /*AbstractArray::_length*/;
1581 variable[9] = TAG_Bool(UNTAG_Int( variable[6] /*index*/)<UNTAG_Int(variable[9]));
1582 }
1583 variable[8] = variable[9];
1584 if (!UNTAG_Bool(variable[8])) { fprintf(stderr, "Assert%s failed", " 'index' "); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_array___Array_____bra, LOCATE_array, 229); nit_exit(1);}
1585 variable[8] = variable[5];
1586 variable[8] = ATTR_array___Array____items(variable[8]) /*Array::_items*/;
1587 variable[8] = UNBOX_NativeArray(variable[8])[UNTAG_Int( variable[6] /*index*/)];
1588 variable[7] = variable[8];
1589 goto return_label87;
1590 return_label87: while(false);
1591 variable[4] = variable[7];
1592 variable[4] = CALL_abstract_collection___Couple___second(variable[4])(variable[4]) /*Couple::second*/;
1593 variable[2] = variable[4];
1594 goto return_label86;
1595 } else { /*if*/
1596 variable[2] = NIT_NULL /*null*/;
1597 goto return_label86;
1598 }
1599 return_label86: while(false);
1600 tracehead = trace.prev;
1601 return variable[2];
1602 }
1603 void array___ArrayMap_____braeq(val_t self, val_t param0, val_t param1) {
1604 struct trace_t trace = {NULL, NULL, 413, LOCATE_array___ArrayMap_____braeq};
1605 val_t variable[11];
1606 void **closurevariable = NULL;
1607 trace.prev = tracehead; tracehead = &trace;
1608 trace.file = LOCATE_array;
1609 variable[0] = self;
1610 variable[1] = param0;
1611 variable[2] = param1;
1612 variable[5] = variable[0];
1613 variable[5] = CALL_array___ArrayMap___index(variable[5])(variable[5], variable[1] /*key*/) /*ArrayMap::index*/;
1614 variable[4] = variable[5];
1615 variable[5] = TAG_Bool(UNTAG_Int( variable[4] /*i*/)>=UNTAG_Int( TAG_Int(0)));
1616 if (UNTAG_Bool(variable[5])) { /*if*/
1617 variable[5] = variable[0];
1618 variable[5] = ATTR_array___ArrayMap____items(variable[5]) /*ArrayMap::_items*/;
1619 variable[6] = variable[5];
1620 variable[7] = variable[4] /*i*/;
1621 variable[9] = TAG_Bool(UNTAG_Int( variable[7] /*index*/)>=UNTAG_Int( TAG_Int(0)));
1622 variable[10] = variable[9];
1623 if (UNTAG_Bool(variable[10])) { /* and */
1624 variable[10] = variable[6];
1625 variable[10] = ATTR_array___AbstractArray____length(variable[10]) /*AbstractArray::_length*/;
1626 variable[10] = TAG_Bool(UNTAG_Int( variable[7] /*index*/)<UNTAG_Int(variable[10]));
1627 }
1628 variable[9] = variable[10];
1629 if (!UNTAG_Bool(variable[9])) { fprintf(stderr, "Assert%s failed", " 'index' "); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_array___Array_____bra, LOCATE_array, 229); nit_exit(1);}
1630 variable[9] = variable[6];
1631 variable[9] = ATTR_array___Array____items(variable[9]) /*Array::_items*/;
1632 variable[9] = UNBOX_NativeArray(variable[9])[UNTAG_Int( variable[7] /*index*/)];
1633 variable[8] = variable[9];
1634 goto return_label89;
1635 return_label89: while(false);
1636 variable[5] = variable[8];
1637 CALL_abstract_collection___Couple___second__eq(variable[5])(variable[5], variable[2] /*item*/) /*Couple::second=*/;
1638 } else { /*if*/
1639 variable[5] = variable[0];
1640 variable[5] = ATTR_array___ArrayMap____items(variable[5]) /*ArrayMap::_items*/;
1641 variable[6] = NEW_Couple_abstract_collection___Couple___init( variable[1] /*key*/, variable[2] /*item*/); /*new Couple[K, E]*/
1642 CALL_abstract_collection___IndexedCollection___push(variable[5])(variable[5], variable[6]) /*AbstractArray::push*/;
1643 }
1644 return_label88: while(false);
1645 tracehead = trace.prev;
1646 return;
1647 }
1648 val_t array___ArrayMap___has_key(val_t self, val_t param0) {
1649 struct trace_t trace = {NULL, NULL, 424, LOCATE_array___ArrayMap___has_key};
1650 val_t variable[4];
1651 void **closurevariable = NULL;
1652 trace.prev = tracehead; tracehead = &trace;
1653 trace.file = LOCATE_array;
1654 variable[0] = self;
1655 variable[1] = param0;
1656 variable[3] = variable[0];
1657 variable[3] = CALL_array___ArrayMap___index(variable[3])(variable[3], variable[1] /*key*/) /*ArrayMap::index*/;
1658 variable[3] = TAG_Bool(UNTAG_Int(variable[3])>=UNTAG_Int( TAG_Int(0)));
1659 variable[2] = variable[3];
1660 goto return_label90;
1661 return_label90: while(false);
1662 tracehead = trace.prev;
1663 return variable[2];
1664 }
1665 void array___ArrayMap___remove_at(val_t self, val_t param0) {
1666 struct trace_t trace = {NULL, NULL, 481, LOCATE_array___ArrayMap___remove_at};
1667 val_t variable[5];
1668 void **closurevariable = NULL;
1669 trace.prev = tracehead; tracehead = &trace;
1670 trace.file = LOCATE_array;
1671 variable[0] = self;
1672 variable[1] = param0;
1673 variable[4] = variable[0];
1674 variable[4] = CALL_array___ArrayMap___index(variable[4])(variable[4], variable[1] /*key*/) /*ArrayMap::index*/;
1675 variable[3] = variable[4];
1676 variable[4] = TAG_Bool(UNTAG_Int( variable[3] /*i*/)>=UNTAG_Int( TAG_Int(0)));
1677 if (UNTAG_Bool(variable[4])) { /*if*/
1678 variable[4] = variable[0];
1679 CALL_array___ArrayMap___remove_at_index(variable[4])(variable[4], variable[3] /*i*/) /*ArrayMap::remove_at_index*/;
1680 }
1681 return_label91: while(false);
1682 tracehead = trace.prev;
1683 return;
1684 }
1685 val_t array___ArrayMap___couple_at(val_t self, val_t param0) {
1686 struct trace_t trace = {NULL, NULL, 492, LOCATE_array___ArrayMap___couple_at};
1687 val_t variable[10];
1688 void **closurevariable = NULL;
1689 trace.prev = tracehead; tracehead = &trace;
1690 trace.file = LOCATE_array;
1691 variable[0] = self;
1692 variable[1] = param0;
1693 variable[4] = variable[0];
1694 variable[4] = CALL_array___ArrayMap___index(variable[4])(variable[4], variable[1] /*key*/) /*ArrayMap::index*/;
1695 variable[3] = variable[4];
1696 variable[4] = TAG_Bool(UNTAG_Int( variable[3] /*i*/)>=UNTAG_Int( TAG_Int(0)));
1697 if (UNTAG_Bool(variable[4])) { /*if*/
1698 variable[4] = variable[0];
1699 variable[4] = ATTR_array___ArrayMap____items(variable[4]) /*ArrayMap::_items*/;
1700 variable[5] = variable[4];
1701 variable[6] = variable[3] /*i*/;
1702 variable[8] = TAG_Bool(UNTAG_Int( variable[6] /*index*/)>=UNTAG_Int( TAG_Int(0)));
1703 variable[9] = variable[8];
1704 if (UNTAG_Bool(variable[9])) { /* and */
1705 variable[9] = variable[5];
1706 variable[9] = ATTR_array___AbstractArray____length(variable[9]) /*AbstractArray::_length*/;
1707 variable[9] = TAG_Bool(UNTAG_Int( variable[6] /*index*/)<UNTAG_Int(variable[9]));
1708 }
1709 variable[8] = variable[9];
1710 if (!UNTAG_Bool(variable[8])) { fprintf(stderr, "Assert%s failed", " 'index' "); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_array___Array_____bra, LOCATE_array, 229); nit_exit(1);}
1711 variable[8] = variable[5];
1712 variable[8] = ATTR_array___Array____items(variable[8]) /*Array::_items*/;
1713 variable[8] = UNBOX_NativeArray(variable[8])[UNTAG_Int( variable[6] /*index*/)];
1714 variable[7] = variable[8];
1715 goto return_label93;
1716 return_label93: while(false);
1717 variable[4] = variable[7];
1718 variable[2] = variable[4];
1719 goto return_label92;
1720 } else { /*if*/
1721 variable[2] = NIT_NULL /*null*/;
1722 goto return_label92;
1723 }
1724 return_label92: while(false);
1725 tracehead = trace.prev;
1726 return variable[2];
1727 }
1728 void array___ArrayMap___enlarge(val_t self, val_t param0) {
1729 struct trace_t trace = {NULL, NULL, 489, LOCATE_array___ArrayMap___enlarge};
1730 val_t variable[4];
1731 void **closurevariable = NULL;
1732 trace.prev = tracehead; tracehead = &trace;
1733 trace.file = LOCATE_array;
1734 variable[0] = self;
1735 variable[1] = param0;
1736 variable[3] = variable[0];
1737 variable[3] = ATTR_array___ArrayMap____items(variable[3]) /*ArrayMap::_items*/;
1738 CALL_array___AbstractArray___enlarge(variable[3])(variable[3], variable[1] /*cap*/) /*Array::enlarge*/;
1739 return_label94: while(false);
1740 tracehead = trace.prev;
1741 return;
1742 }
1743 void array___ArrayMap___remove_at_index(val_t self, val_t param0) {
1744 struct trace_t trace = {NULL, NULL, 505, LOCATE_array___ArrayMap___remove_at_index};
1745 val_t variable[5];
1746 void **closurevariable = NULL;
1747 trace.prev = tracehead; tracehead = &trace;
1748 trace.file = LOCATE_array;
1749 variable[0] = self;
1750 variable[1] = param0;
1751 variable[3] = variable[0];
1752 variable[3] = ATTR_array___ArrayMap____items(variable[3]) /*ArrayMap::_items*/;
1753 variable[4] = variable[0];
1754 variable[4] = ATTR_array___ArrayMap____items(variable[4]) /*ArrayMap::_items*/;
1755 variable[4] = CALL_abstract_collection___IndexedCollection___last(variable[4])(variable[4]) /*IndexedCollection::last*/;
1756 CALL_abstract_collection___Map_____braeq(variable[3])(variable[3], variable[1] /*i*/, variable[4]) /*Array::[]=*/;
1757 variable[3] = variable[0];
1758 variable[3] = ATTR_array___ArrayMap____items(variable[3]) /*ArrayMap::_items*/;
1759 CALL_abstract_collection___IndexedCollection___pop(variable[3])(variable[3]) /*AbstractArray::pop*/;
1760 return_label95: while(false);
1761 tracehead = trace.prev;
1762 return;
1763 }
1764 val_t array___ArrayMap___index(val_t self, val_t param0) {
1765 struct trace_t trace = {NULL, NULL, 515, LOCATE_array___ArrayMap___index};
1766 val_t variable[11];
1767 void **closurevariable = NULL;
1768 trace.prev = tracehead; tracehead = &trace;
1769 trace.file = LOCATE_array;
1770 variable[0] = self;
1771 variable[1] = param0;
1772 variable[4] = variable[0];
1773 variable[4] = ATTR_array___ArrayMap____last_index(variable[4]) /*ArrayMap::_last_index*/;
1774 variable[3] = variable[4];
1775 variable[4] = variable[0];
1776 variable[4] = ATTR_array___ArrayMap____items(variable[4]) /*ArrayMap::_items*/;
1777 variable[4] = CALL_abstract_collection___Collection___length(variable[4])(variable[4]) /*AbstractArray::length*/;
1778 variable[4] = TAG_Bool(UNTAG_Int( variable[3] /*l*/)<UNTAG_Int(variable[4]));
1779 variable[5] = variable[4];
1780 if (UNTAG_Bool(variable[5])) { /* and */
1781 variable[5] = variable[0];
1782 variable[5] = ATTR_array___ArrayMap____items(variable[5]) /*ArrayMap::_items*/;
1783 variable[6] = variable[5];
1784 variable[7] = variable[3] /*l*/;
1785 variable[9] = TAG_Bool(UNTAG_Int( variable[7] /*index*/)>=UNTAG_Int( TAG_Int(0)));
1786 variable[10] = variable[9];
1787 if (UNTAG_Bool(variable[10])) { /* and */
1788 variable[10] = variable[6];
1789 variable[10] = ATTR_array___AbstractArray____length(variable[10]) /*AbstractArray::_length*/;
1790 variable[10] = TAG_Bool(UNTAG_Int( variable[7] /*index*/)<UNTAG_Int(variable[10]));
1791 }
1792 variable[9] = variable[10];
1793 if (!UNTAG_Bool(variable[9])) { fprintf(stderr, "Assert%s failed", " 'index' "); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_array___Array_____bra, LOCATE_array, 229); nit_exit(1);}
1794 variable[9] = variable[6];
1795 variable[9] = ATTR_array___Array____items(variable[9]) /*Array::_items*/;
1796 variable[9] = UNBOX_NativeArray(variable[9])[UNTAG_Int( variable[7] /*index*/)];
1797 variable[8] = variable[9];
1798 goto return_label97;
1799 return_label97: while(false);
1800 variable[5] = variable[8];
1801 variable[5] = CALL_abstract_collection___Couple___first(variable[5])(variable[5]) /*Couple::first*/;
1802 variable[5] = TAG_Bool((variable[5] == variable[1] /*key*/) || ((variable[5] != NIT_NULL) && ((CALL_kernel___Object_____eqeq(variable[5])==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[5], variable[1] /*key*/)):(UNTAG_Bool(CALL_kernel___Object_____eqeq(variable[5])(variable[5], variable[1] /*key*/) /*Object::==*/)))));
1803 }
1804 variable[4] = variable[5];
1805 if (UNTAG_Bool(variable[4])) { /*if*/
1806 variable[2] = variable[3] /*l*/;
1807 goto return_label96;
1808 }
1809 variable[4] = TAG_Int(0);
1810 while (true) { /*while*/
1811 variable[5] = variable[0];
1812 variable[5] = ATTR_array___ArrayMap____items(variable[5]) /*ArrayMap::_items*/;
1813 variable[5] = CALL_abstract_collection___Collection___length(variable[5])(variable[5]) /*AbstractArray::length*/;
1814 variable[5] = TAG_Bool(UNTAG_Int( variable[4] /*i*/)<UNTAG_Int(variable[5]));
1815 if (!UNTAG_Bool(variable[5])) break; /* while*/
1816 variable[5] = variable[0];
1817 variable[5] = ATTR_array___ArrayMap____items(variable[5]) /*ArrayMap::_items*/;
1818 variable[6] = variable[5];
1819 variable[7] = variable[4] /*i*/;
1820 variable[9] = TAG_Bool(UNTAG_Int( variable[7] /*index*/)>=UNTAG_Int( TAG_Int(0)));
1821 variable[10] = variable[9];
1822 if (UNTAG_Bool(variable[10])) { /* and */
1823 variable[10] = variable[6];
1824 variable[10] = ATTR_array___AbstractArray____length(variable[10]) /*AbstractArray::_length*/;
1825 variable[10] = TAG_Bool(UNTAG_Int( variable[7] /*index*/)<UNTAG_Int(variable[10]));
1826 }
1827 variable[9] = variable[10];
1828 if (!UNTAG_Bool(variable[9])) { fprintf(stderr, "Assert%s failed", " 'index' "); fprintf(stderr, " in %s (%s:%d)\n", LOCATE_array___Array_____bra, LOCATE_array, 229); nit_exit(1);}
1829 variable[9] = variable[6];
1830 variable[9] = ATTR_array___Array____items(variable[9]) /*Array::_items*/;
1831 variable[9] = UNBOX_NativeArray(variable[9])[UNTAG_Int( variable[7] /*index*/)];
1832 variable[8] = variable[9];
1833 goto return_label99;
1834 return_label99: while(false);
1835 variable[5] = variable[8];
1836 variable[5] = CALL_abstract_collection___Couple___first(variable[5])(variable[5]) /*Couple::first*/;
1837 variable[5] = TAG_Bool((variable[5] == variable[1] /*key*/) || ((variable[5] != NIT_NULL) && ((CALL_kernel___Object_____eqeq(variable[5])==kernel___Object_____eqeq)?(IS_EQUAL_NN(variable[5], variable[1] /*key*/)):(UNTAG_Bool(CALL_kernel___Object_____eqeq(variable[5])(variable[5], variable[1] /*key*/) /*Object::==*/)))));
1838 if (UNTAG_Bool(variable[5])) { /*if*/
1839 variable[5] = variable[0];
1840 ATTR_array___ArrayMap____last_index(variable[5]) /*ArrayMap::_last_index*/ = variable[4] /*i*/;
1841 variable[2] = variable[4] /*i*/;
1842 goto return_label96;
1843 }
1844 variable[4] = TAG_Int(UNTAG_Int(variable[4])+UNTAG_Int( TAG_Int(1))) /*i*/;
1845 continue_98: while(0);
1846 }
1847 break_98: while(0);
1848 variable[5] = TAG_Int(-UNTAG_Int( TAG_Int(1)));
1849 variable[2] = variable[5];
1850 goto return_label96;
1851 return_label96: while(false);
1852 tracehead = trace.prev;
1853 return variable[2];
1854 }
1855 void array___ArrayMap___init(val_t self, int* init_table) {
1856 struct trace_t trace = {NULL, NULL, 533, LOCATE_array___ArrayMap___init};
1857 val_t variable[4];
1858 void **closurevariable = NULL;
1859 trace.prev = tracehead; tracehead = &trace;
1860 trace.file = LOCATE_array;
1861 variable[0] = self;
1862 if (init_table[VAL2OBJ(variable[0])->vft[INIT_TABLE_POS_ArrayMap].i]) return;
1863 variable[2] = variable[0];
1864 variable[3] = NEW_Array_array___Array___init(); /*new Array[Couple[K, E]]*/
1865 ATTR_array___ArrayMap____items(variable[2]) /*ArrayMap::_items*/ = variable[3];
1866 return_label100: while(false);
1867 init_table[VAL2OBJ(variable[0])->vft[INIT_TABLE_POS_ArrayMap].i] = 1;
1868 tracehead = trace.prev;
1869 return;
1870 }
1871 val_t array___Iterator___to_a(val_t self) {
1872 struct trace_t trace = {NULL, NULL, 543, LOCATE_array___Iterator___to_a};
1873 val_t variable[4];
1874 void **closurevariable = NULL;
1875 trace.prev = tracehead; tracehead = &trace;
1876 trace.file = LOCATE_array;
1877 variable[0] = self;
1878 variable[3] = NEW_Array_array___Array___init(); /*new Array[E]*/
1879 variable[2] = variable[3];
1880 while (true) { /*while*/
1881 variable[3] = variable[0];
1882 variable[3] = CALL_abstract_collection___Iterator___is_ok(variable[3])(variable[3]) /*Iterator::is_ok*/;
1883 if (!UNTAG_Bool(variable[3])) break; /* while*/
1884 variable[3] = variable[0];
1885 variable[3] = CALL_abstract_collection___Iterator___item(variable[3])(variable[3]) /*Iterator::item*/;
1886 CALL_abstract_collection___SimpleCollection___add( variable[2] /*res*/)( variable[2] /*res*/, variable[3]) /*AbstractArray::add*/;
1887 variable[3] = variable[0];
1888 CALL_abstract_collection___Iterator___next(variable[3])(variable[3]) /*Iterator::next*/;
1889 continue_102: while(0);
1890 }
1891 break_102: while(0);
1892 variable[1] = variable[2] /*res*/;
1893 goto return_label101;
1894 return_label101: while(false);
1895 tracehead = trace.prev;
1896 return variable[1];
1897 }
1898 val_t array___Collection___to_a(val_t self) {
1899 struct trace_t trace = {NULL, NULL, 556, LOCATE_array___Collection___to_a};
1900 val_t variable[3];
1901 void **closurevariable = NULL;
1902 trace.prev = tracehead; tracehead = &trace;
1903 trace.file = LOCATE_array;
1904 variable[0] = self;
1905 variable[2] = variable[0];
1906 variable[2] = CALL_abstract_collection___Collection___iterator(variable[2])(variable[2]) /*Collection::iterator*/;
1907 variable[2] = CALL_array___Iterator___to_a(variable[2])(variable[2]) /*Iterator::to_a*/;
1908 variable[1] = variable[2];
1909 goto return_label103;
1910 return_label103: while(false);
1911 tracehead = trace.prev;
1912 return variable[1];
1913 }
1914 val_t array___ArrayCapable___calloc_array(val_t self, val_t param0) {
1915 struct trace_t trace = {NULL, NULL, 567, LOCATE_array___ArrayCapable___calloc_array};
1916 val_t *variable = NULL;
1917 void **closurevariable = NULL;
1918 trace.prev = tracehead; tracehead = &trace;
1919 trace.file = LOCATE_array;
1920 tracehead = trace.prev;
1921 return BOX_NativeArray((val_t*)malloc((UNTAG_Int( param0) * sizeof(val_t))));
1922 }
1923 val_t array___NativeArray_____bra(val_t self, val_t param0) {
1924 struct trace_t trace = {NULL, NULL, 573, LOCATE_array___NativeArray_____bra};
1925 val_t *variable = NULL;
1926 void **closurevariable = NULL;
1927 trace.prev = tracehead; tracehead = &trace;
1928 trace.file = LOCATE_array;
1929 tracehead = trace.prev;
1930 return UNBOX_NativeArray( self)[UNTAG_Int( param0)];
1931 }
1932 void array___NativeArray_____braeq(val_t self, val_t param0, val_t param1) {
1933 struct trace_t trace = {NULL, NULL, 574, LOCATE_array___NativeArray_____braeq};
1934 val_t *variable = NULL;
1935 void **closurevariable = NULL;
1936 trace.prev = tracehead; tracehead = &trace;
1937 trace.file = LOCATE_array;
1938 UNBOX_NativeArray( self)[UNTAG_Int( param0)]= param1;
1939 tracehead = trace.prev;
1940 return;
1941 }
1942 void array___NativeArray___copy_to(val_t self, val_t param0, val_t param1) {
1943 struct trace_t trace = {NULL, NULL, 575, LOCATE_array___NativeArray___copy_to};
1944 val_t *variable = NULL;
1945 void **closurevariable = NULL;
1946 trace.prev = tracehead; tracehead = &trace;
1947 trace.file = LOCATE_array;
1948 (void)memcpy(UNBOX_NativeArray( param0), UNBOX_NativeArray( self), UNTAG_Int( param1)*sizeof(val_t));
1949 tracehead = trace.prev;
1950 return;
1951 }