1 /* This C file is generated by NIT to compile module range. */
2 #include "range._sep.h"
3 val_t
range___Range___iterator(val_t self
) {
4 struct trace_t trace
= {NULL
, NULL
, 43, LOCATE_range___Range___iterator
};
6 void **closurevariable
= NULL
;
7 trace
.prev
= tracehead
; tracehead
= &trace
;
8 trace
.file
= LOCATE_range
;
10 variable
[2] = variable
[0];
11 variable
[3] = NEW_IteratorRange_range___IteratorRange___init(variable
[2]); /*new IteratorRange[E]*/
12 variable
[2] = variable
[3];
13 variable
[1] = variable
[2];
15 return_label0
: while(false);
16 tracehead
= trace
.prev
;
19 val_t
range___Range___is_empty(val_t self
) {
20 struct trace_t trace
= {NULL
, NULL
, 55, LOCATE_range___Range___is_empty
};
22 void **closurevariable
= NULL
;
23 trace
.prev
= tracehead
; tracehead
= &trace
;
24 trace
.file
= LOCATE_range
;
26 variable
[2] = variable
[0];
27 variable
[2] = ATTR_range___Range____first(variable
[2]) /*Range::_first*/;
28 variable
[3] = variable
[0];
29 variable
[3] = ATTR_range___Range____after(variable
[3]) /*Range::_after*/;
30 variable
[2] = CALL_kernel___Comparable_____geq(variable
[2])(variable
[2], variable
[3]) /*Comparable::>=*/;
31 variable
[1] = variable
[2];
33 return_label1
: while(false);
34 tracehead
= trace
.prev
;
37 val_t
range___Range___length(val_t self
) {
38 struct trace_t trace
= {NULL
, NULL
, 45, LOCATE_range___Range___length
};
40 void **closurevariable
= NULL
;
41 trace
.prev
= tracehead
; tracehead
= &trace
;
42 trace
.file
= LOCATE_range
;
44 variable
[3] = variable
[0];
45 variable
[3] = ATTR_range___Range____first(variable
[3]) /*Range::_first*/;
46 variable
[4] = variable
[0];
47 variable
[4] = ATTR_range___Range____after(variable
[4]) /*Range::_after*/;
48 variable
[3] = CALL_kernel___Discrete___distance(variable
[3])(variable
[3], variable
[4]) /*Discrete::distance*/;
49 variable
[2] = variable
[3];
50 variable
[3] = TAG_Bool(UNTAG_Int( variable
[2] /*nb*/)>UNTAG_Int( TAG_Int(0)));
51 if (UNTAG_Bool(variable
[3])) { /*if*/
52 variable
[1] = variable
[2] /*nb*/;
55 variable
[1] = TAG_Int(0);
58 return_label2
: while(false);
59 tracehead
= trace
.prev
;
62 val_t
range___Range___has(val_t self
, val_t param0
) {
63 struct trace_t trace
= {NULL
, NULL
, 30, LOCATE_range___Range___has
};
65 void **closurevariable
= NULL
;
66 trace
.prev
= tracehead
; tracehead
= &trace
;
67 trace
.file
= LOCATE_range
;
70 variable
[3] = variable
[0];
71 variable
[3] = ATTR_range___Range____first(variable
[3]) /*Range::_first*/;
72 variable
[3] = CALL_kernel___Comparable_____geq( variable
[1] /*item*/)( variable
[1] /*item*/, variable
[3]) /*Comparable::>=*/;
73 variable
[4] = variable
[3];
74 if (UNTAG_Bool(variable
[4])) { /* and */
75 variable
[4] = variable
[0];
76 variable
[4] = ATTR_range___Range____last(variable
[4]) /*Range::_last*/;
77 variable
[4] = CALL_kernel___Comparable_____leq( variable
[1] /*item*/)( variable
[1] /*item*/, variable
[4]) /*Comparable::<=*/;
79 variable
[3] = variable
[4];
80 variable
[2] = variable
[3];
82 return_label3
: while(false);
83 tracehead
= trace
.prev
;
86 val_t
range___Range___has_only(val_t self
, val_t param0
) {
87 struct trace_t trace
= {NULL
, NULL
, 32, LOCATE_range___Range___has_only
};
89 void **closurevariable
= NULL
;
90 trace
.prev
= tracehead
; tracehead
= &trace
;
91 trace
.file
= LOCATE_range
;
94 variable
[3] = variable
[0];
95 variable
[3] = ATTR_range___Range____first(variable
[3]) /*Range::_first*/;
96 variable
[3] = TAG_Bool((variable
[3] == variable
[1] /*item*/) || ((variable
[3] != NIT_NULL
) && ((CALL_kernel___Object_____eqeq(variable
[3])==kernel___Object_____eqeq
)?
(IS_EQUAL_NN(variable
[3], variable
[1] /*item*/)):(UNTAG_Bool(CALL_kernel___Object_____eqeq(variable
[3])(variable
[3], variable
[1] /*item*/) /*Object::==*/)))));
97 variable
[4] = variable
[3];
98 if (UNTAG_Bool(variable
[4])) { /* and */
99 variable
[4] = variable
[0];
100 variable
[4] = ATTR_range___Range____last(variable
[4]) /*Range::_last*/;
101 variable
[4] = TAG_Bool(( variable
[1] /*item*/ == variable
[4]) || (( variable
[1] /*item*/ != NIT_NULL
) && ((CALL_kernel___Object_____eqeq( variable
[1] /*item*/)==kernel___Object_____eqeq
)?
(IS_EQUAL_NN( variable
[1] /*item*/,variable
[4])):(UNTAG_Bool(CALL_kernel___Object_____eqeq( variable
[1] /*item*/)( variable
[1] /*item*/, variable
[4]) /*Object::==*/)))));
103 variable
[3] = variable
[4];
104 variable
[2] = variable
[3];
106 return_label4
: while(false);
107 tracehead
= trace
.prev
;
110 val_t
range___Range___count(val_t self
, val_t param0
) {
111 struct trace_t trace
= {NULL
, NULL
, 34, LOCATE_range___Range___count
};
113 void **closurevariable
= NULL
;
114 trace
.prev
= tracehead
; tracehead
= &trace
;
115 trace
.file
= LOCATE_range
;
117 variable
[1] = param0
;
118 variable
[3] = variable
[0];
119 variable
[3] = CALL_abstract_collection___Collection___has(variable
[3])(variable
[3], variable
[1] /*item*/) /*Range::has*/;
120 if (UNTAG_Bool(variable
[3])) { /*if*/
121 variable
[2] = TAG_Int(1);
124 variable
[2] = TAG_Int(0);
127 return_label5
: while(false);
128 tracehead
= trace
.prev
;
131 val_t
range___Range___first(val_t self
) {
132 struct trace_t trace
= {NULL
, NULL
, 22, LOCATE_range___Range___first
};
133 val_t
*variable
= NULL
;
134 void **closurevariable
= NULL
;
135 trace
.prev
= tracehead
; tracehead
= &trace
;
136 trace
.file
= LOCATE_range
;
137 tracehead
= trace
.prev
;
138 return ATTR_range___Range____first( self
) /*Range::_first*/;
140 val_t
range___Range___last(val_t self
) {
141 struct trace_t trace
= {NULL
, NULL
, 24, LOCATE_range___Range___last
};
142 val_t
*variable
= NULL
;
143 void **closurevariable
= NULL
;
144 trace
.prev
= tracehead
; tracehead
= &trace
;
145 trace
.file
= LOCATE_range
;
146 tracehead
= trace
.prev
;
147 return ATTR_range___Range____last( self
) /*Range::_last*/;
149 val_t
range___Range___after(val_t self
) {
150 struct trace_t trace
= {NULL
, NULL
, 27, LOCATE_range___Range___after
};
151 val_t
*variable
= NULL
;
152 void **closurevariable
= NULL
;
153 trace
.prev
= tracehead
; tracehead
= &trace
;
154 trace
.file
= LOCATE_range
;
155 tracehead
= trace
.prev
;
156 return ATTR_range___Range____after( self
) /*Range::_after*/;
158 void range___Range___init(val_t self
, val_t param0
, val_t param1
, int* init_table
) {
159 struct trace_t trace
= {NULL
, NULL
, 57, LOCATE_range___Range___init
};
161 void **closurevariable
= NULL
;
162 trace
.prev
= tracehead
; tracehead
= &trace
;
163 trace
.file
= LOCATE_range
;
165 variable
[1] = param0
;
166 variable
[2] = param1
;
167 if (init_table
[VAL2OBJ(variable
[0])->vft
[INIT_TABLE_POS_Range
].i
]) return;
168 variable
[4] = variable
[0];
169 ATTR_range___Range____first(variable
[4]) /*Range::_first*/ = variable
[1] /*from*/;
170 variable
[4] = variable
[0];
171 ATTR_range___Range____last(variable
[4]) /*Range::_last*/ = variable
[2] /*to*/;
172 variable
[4] = variable
[0];
173 variable
[5] = CALL_kernel___Discrete___succ( variable
[2] /*to*/)( variable
[2] /*to*/) /*Discrete::succ*/;
174 ATTR_range___Range____after(variable
[4]) /*Range::_after*/ = variable
[5];
175 return_label6
: while(false);
176 init_table
[VAL2OBJ(variable
[0])->vft
[INIT_TABLE_POS_Range
].i
] = 1;
177 tracehead
= trace
.prev
;
180 void range___Range___without_last(val_t self
, val_t param0
, val_t param1
, int* init_table
) {
181 struct trace_t trace
= {NULL
, NULL
, 66, LOCATE_range___Range___without_last
};
183 void **closurevariable
= NULL
;
184 trace
.prev
= tracehead
; tracehead
= &trace
;
185 trace
.file
= LOCATE_range
;
187 variable
[1] = param0
;
188 variable
[2] = param1
;
189 if (init_table
[VAL2OBJ(variable
[0])->vft
[INIT_TABLE_POS_Range
].i
]) return;
190 variable
[4] = variable
[0];
191 ATTR_range___Range____first(variable
[4]) /*Range::_first*/ = variable
[1] /*from*/;
192 variable
[4] = variable
[0];
193 variable
[5] = CALL_kernel___Discrete___prec( variable
[2] /*to*/)( variable
[2] /*to*/) /*Discrete::prec*/;
194 ATTR_range___Range____last(variable
[4]) /*Range::_last*/ = variable
[5];
195 variable
[4] = variable
[0];
196 ATTR_range___Range____after(variable
[4]) /*Range::_after*/ = variable
[2] /*to*/;
197 return_label7
: while(false);
198 init_table
[VAL2OBJ(variable
[0])->vft
[INIT_TABLE_POS_Range
].i
] = 1;
199 tracehead
= trace
.prev
;
202 val_t
range___IteratorRange___item(val_t self
) {
203 struct trace_t trace
= {NULL
, NULL
, 80, LOCATE_range___IteratorRange___item
};
204 val_t
*variable
= NULL
;
205 void **closurevariable
= NULL
;
206 trace
.prev
= tracehead
; tracehead
= &trace
;
207 trace
.file
= LOCATE_range
;
208 tracehead
= trace
.prev
;
209 return ATTR_range___IteratorRange____item( self
) /*IteratorRange::_item*/;
211 void range___IteratorRange___next(val_t self
) {
212 struct trace_t trace
= {NULL
, NULL
, 84, LOCATE_range___IteratorRange___next
};
214 void **closurevariable
= NULL
;
215 trace
.prev
= tracehead
; tracehead
= &trace
;
216 trace
.file
= LOCATE_range
;
218 variable
[2] = variable
[0];
219 variable
[3] = variable
[0];
220 variable
[3] = ATTR_range___IteratorRange____item(variable
[3]) /*IteratorRange::_item*/;
221 variable
[3] = CALL_kernel___Discrete___succ(variable
[3])(variable
[3]) /*Discrete::succ*/;
222 ATTR_range___IteratorRange____item(variable
[2]) /*IteratorRange::_item*/ = variable
[3];
223 return_label8
: while(false);
224 tracehead
= trace
.prev
;
227 val_t
range___IteratorRange___is_ok(val_t self
) {
228 struct trace_t trace
= {NULL
, NULL
, 82, LOCATE_range___IteratorRange___is_ok
};
230 void **closurevariable
= NULL
;
231 trace
.prev
= tracehead
; tracehead
= &trace
;
232 trace
.file
= LOCATE_range
;
234 variable
[2] = variable
[0];
235 variable
[2] = ATTR_range___IteratorRange____item(variable
[2]) /*IteratorRange::_item*/;
236 variable
[3] = variable
[0];
237 variable
[3] = ATTR_range___IteratorRange____range(variable
[3]) /*IteratorRange::_range*/;
238 variable
[3] = CALL_range___Range___after(variable
[3])(variable
[3]) /*Range::after*/;
239 variable
[2] = CALL_kernel___Comparable_____l(variable
[2])(variable
[2], variable
[3]) /*Comparable::<*/;
240 variable
[1] = variable
[2];
242 return_label9
: while(false);
243 tracehead
= trace
.prev
;
246 void range___IteratorRange___init(val_t self
, val_t param0
, int* init_table
) {
247 struct trace_t trace
= {NULL
, NULL
, 86, LOCATE_range___IteratorRange___init
};
249 void **closurevariable
= NULL
;
250 trace
.prev
= tracehead
; tracehead
= &trace
;
251 trace
.file
= LOCATE_range
;
253 variable
[1] = param0
;
254 if (init_table
[VAL2OBJ(variable
[0])->vft
[INIT_TABLE_POS_IteratorRange
].i
]) return;
255 variable
[3] = variable
[0];
256 ATTR_range___IteratorRange____range(variable
[3]) /*IteratorRange::_range*/ = variable
[1] /*r*/;
257 variable
[3] = variable
[0];
258 variable
[4] = CALL_abstract_collection___Collection___first( variable
[1] /*r*/)( variable
[1] /*r*/) /*Range::first*/;
259 ATTR_range___IteratorRange____item(variable
[3]) /*IteratorRange::_item*/ = variable
[4];
260 return_label10
: while(false);
261 init_table
[VAL2OBJ(variable
[0])->vft
[INIT_TABLE_POS_IteratorRange
].i
] = 1;
262 tracehead
= trace
.prev
;