use nitg to bootstrap; drop bootstrap of nitc
[nit.git] / c_src / collection.sep.1.c
1 #include "collection.sep.0.h"
2 /* method collection#Sequence#subarray for (self: Sequence[nullable Object], Int, Int): Array[nullable Object] */
3 val* collection__Sequence__subarray(val* self, long p0, long p1) {
4 val* var /* : Array[nullable Object] */;
5 long var_start /* var start: Int */;
6 long var_len /* var len: Int */;
7 val* var1 /* : Array[nullable Object] */;
8 val* var_a /* var a: Array[nullable Object] */;
9 val* var2 /* : Range[Int] */;
10 long var3 /* : Int */;
11 long var5 /* : Int */;
12 val* var6 /* : Discrete */;
13 val* var7 /* : Discrete */;
14 val* var8 /* : Iterator[nullable Object] */;
15 short int var9 /* : Bool */;
16 val* var10 /* : nullable Object */;
17 long var_i /* var i: Int */;
18 long var11 /* : Int */;
19 val* var12 /* : nullable Object */;
20 var_start = p0;
21 var_len = p1;
22 var1 = NEW_array__Array(self->type->resolution_table->types[COLOR_array__Arrayabstract_collection__Sequence_FT0]);
23 ((void (*)(val*, long))(var1->class->vft[COLOR_array__Array__with_capacity]))(var1, var_len) /* with_capacity on <var1:Array[nullable Object]>*/;
24 CHECK_NEW_array__Array(var1);
25 var_a = var1;
26 var2 = NEW_range__Range(&type_range__Rangekernel__Int);
27 { /* Inline kernel#Int#+ (var_start,var_len) */
28 var5 = var_start + var_len;
29 var3 = var5;
30 goto RET_LABEL4;
31 RET_LABEL4:(void)0;
32 }
33 var6 = BOX_kernel__Int(var_start); /* autobox from Int to Discrete */
34 var7 = BOX_kernel__Int(var3); /* autobox from Int to Discrete */
35 ((void (*)(val*, val*, val*))(var2->class->vft[COLOR_range__Range__without_last]))(var2, var6, var7) /* without_last on <var2:Range[Int]>*/;
36 CHECK_NEW_range__Range(var2);
37 var8 = ((val* (*)(val*))(var2->class->vft[COLOR_abstract_collection__Collection__iterator]))(var2) /* iterator on <var2:Range[Int]>*/;
38 for(;;) {
39 var9 = ((short int (*)(val*))(var8->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var8) /* is_ok on <var8:Iterator[nullable Object]>*/;
40 if(!var9) break;
41 var10 = ((val* (*)(val*))(var8->class->vft[COLOR_abstract_collection__Iterator__item]))(var8) /* item on <var8:Iterator[nullable Object]>*/;
42 var11 = ((struct instance_kernel__Int*)var10)->value; /* autounbox from nullable Object to Int */;
43 var_i = var11;
44 var12 = ((val* (*)(val*, long))(self->class->vft[COLOR_abstract_collection__SequenceRead___91d_93d]))(self, var_i) /* [] on <self:Sequence[nullable Object]>*/;
45 ((void (*)(val*, val*))(var_a->class->vft[COLOR_abstract_collection__SimpleCollection__add]))(var_a, var12) /* add on <var_a:Array[nullable Object]>*/;
46 CONTINUE_label: (void)0;
47 ((void (*)(val*))(var8->class->vft[COLOR_abstract_collection__Iterator__next]))(var8) /* next on <var8:Iterator[nullable Object]>*/;
48 }
49 BREAK_label: (void)0;
50 var = var_a;
51 goto RET_LABEL;
52 RET_LABEL:;
53 return var;
54 }
55 /* method collection#Sequence#subarray for (self: Object, Int, Int): Array[nullable Object] */
56 val* VIRTUAL_collection__Sequence__subarray(val* self, long p0, long p1) {
57 val* var /* : Array[nullable Object] */;
58 val* var1 /* : Array[nullable Object] */;
59 var1 = collection__Sequence__subarray(self, p0, p1);
60 var = var1;
61 RET_LABEL:;
62 return var;
63 }