Merge: doc: fixed some typos and other misc. corrections
[nit.git] / c_src / ini.sep.1.c
1 #include "ini.sep.0.h"
2 /* method ini$ConfigTree$ini_file for (self: ConfigTree): String */
3 val* ini___ini__ConfigTree___ini_file(val* self) {
4 val* var /* : String */;
5 val* var1 /* : String */;
6 var1 = self->attrs[COLOR_ini__ConfigTree___ini_file].val; /* _ini_file on <self:ConfigTree> */
7 if (unlikely(var1 == NULL)) {
8 if(catchStack.cursor >= 0){
9 longjmp(catchStack.envs[catchStack.cursor], 1);
10 }
11 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _ini_file");
12 PRINT_ERROR(" (%s:%d)\n", FILE_ini, 37);
13 fatal_exit(1);
14 }
15 var = var1;
16 RET_LABEL:;
17 return var;
18 }
19 /* method ini$ConfigTree$ini_file= for (self: ConfigTree, String) */
20 void ini___ini__ConfigTree___ini_file_61d(val* self, val* p0) {
21 self->attrs[COLOR_ini__ConfigTree___ini_file].val = p0; /* _ini_file on <self:ConfigTree> */
22 RET_LABEL:;
23 }
24 /* method ini$ConfigTree$init for (self: ConfigTree) */
25 void ini___ini__ConfigTree___core__kernel__Object__init(val* self) {
26 val* var /* : String */;
27 val* var2 /* : String */;
28 short int var3 /* : Bool */;
29 {
30 ((void(*)(val* self))(self->class->vft[COLOR_ini___ini__ConfigTree___core__kernel__Object__init]))(self); /* init on <self:ConfigTree>*/
31 }
32 {
33 { /* Inline ini$ConfigTree$ini_file (self) on <self:ConfigTree> */
34 var2 = self->attrs[COLOR_ini__ConfigTree___ini_file].val; /* _ini_file on <self:ConfigTree> */
35 if (unlikely(var2 == NULL)) {
36 if(catchStack.cursor >= 0){
37 longjmp(catchStack.envs[catchStack.cursor], 1);
38 }
39 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _ini_file");
40 PRINT_ERROR(" (%s:%d)\n", FILE_ini, 37);
41 fatal_exit(1);
42 }
43 var = var2;
44 RET_LABEL1:(void)0;
45 }
46 }
47 {
48 var3 = core__file___Text___file_exists(var);
49 }
50 if (var3){
51 {
52 ini___ini__ConfigTree___load(self); /* Direct call ini$ConfigTree$load on <self:ConfigTree>*/
53 }
54 } else {
55 }
56 RET_LABEL:;
57 }
58 /* method ini$ConfigTree$[] for (self: ConfigTree, String): nullable String */
59 val* ini___ini__ConfigTree____91d_93d(val* self, val* p0) {
60 val* var /* : nullable String */;
61 val* var_key /* var key: String */;
62 val* var1 /* : nullable ConfigNode */;
63 val* var_node /* var node: nullable ConfigNode */;
64 short int var2 /* : Bool */;
65 short int var3 /* : Bool */;
66 val* var_other /* var other: nullable Object */;
67 short int var5 /* : Bool */;
68 short int var7 /* : Bool */;
69 val* var8 /* : nullable String */;
70 val* var10 /* : nullable String */;
71 var_key = p0;
72 {
73 var1 = ini___ini__ConfigTree___get_node(self, var_key);
74 }
75 var_node = var1;
76 if (var_node == NULL) {
77 var2 = 1; /* is null */
78 } else {
79 var2 = 0; /* arg is null but recv is not */
80 }
81 if (0) {
82 { /* Inline kernel$Object$== (var_node,((val*)NULL)) on <var_node:nullable ConfigNode> */
83 var_other = ((val*)NULL);
84 {
85 { /* Inline kernel$Object$is_same_instance (var_node,var_other) on <var_node:nullable ConfigNode(ConfigNode)> */
86 var7 = var_node == var_other;
87 var5 = var7;
88 goto RET_LABEL6;
89 RET_LABEL6:(void)0;
90 }
91 }
92 var3 = var5;
93 goto RET_LABEL4;
94 RET_LABEL4:(void)0;
95 }
96 var2 = var3;
97 }
98 if (var2){
99 var = ((val*)NULL);
100 goto RET_LABEL;
101 } else {
102 }
103 {
104 { /* Inline ini$ConfigNode$value (var_node) on <var_node:nullable ConfigNode(ConfigNode)> */
105 var10 = var_node->attrs[COLOR_ini__ConfigNode___value].val; /* _value on <var_node:nullable ConfigNode(ConfigNode)> */
106 var8 = var10;
107 RET_LABEL9:(void)0;
108 }
109 }
110 var = var8;
111 goto RET_LABEL;
112 RET_LABEL:;
113 return var;
114 }
115 /* method ini$ConfigTree$has_key for (self: ConfigTree, String): Bool */
116 short int ini___ini__ConfigTree___has_key(val* self, val* p0) {
117 short int var /* : Bool */;
118 val* var_key /* var key: String */;
119 static val* varonce;
120 val* var1 /* : String */;
121 char* var2 /* : CString */;
122 val* var3 /* : String */;
123 val* var4 /* : nullable Int */;
124 val* var5 /* : nullable Int */;
125 val* var6 /* : nullable Bool */;
126 val* var7 /* : nullable Bool */;
127 val* var8 /* : Array[String] */;
128 val* var9 /* : Array[nullable Object] */;
129 val* var_parts /* var parts: Array[String] */;
130 val* var10 /* : nullable Object */;
131 val* var11 /* : nullable ConfigNode */;
132 val* var_node /* var node: nullable ConfigNode */;
133 short int var12 /* : Bool */;
134 short int var13 /* : Bool */;
135 val* var_other /* var other: nullable Object */;
136 short int var15 /* : Bool */;
137 short int var17 /* : Bool */;
138 short int var18 /* : Bool */;
139 short int var19 /* : Bool */;
140 val* var20 /* : nullable Object */;
141 val* var21 /* : nullable ConfigNode */;
142 short int var22 /* : Bool */;
143 short int var23 /* : Bool */;
144 short int var25 /* : Bool */;
145 short int var27 /* : Bool */;
146 var_key = p0;
147 if (likely(varonce!=NULL)) {
148 var1 = varonce;
149 } else {
150 var2 = ".";
151 var4 = (val*)(1l<<2|1);
152 var5 = (val*)(1l<<2|1);
153 var6 = (val*)((long)(0)<<2|3);
154 var7 = (val*)((long)(0)<<2|3);
155 var3 = core__flat___CString___to_s_unsafe(var2, var4, var5, var6, var7);
156 var1 = var3;
157 varonce = var1;
158 }
159 {
160 var8 = core__string_search___Text___split(var_key, var1);
161 }
162 {
163 var9 = core___core__AbstractArrayRead___reversed(var8);
164 }
165 var_parts = var9;
166 {
167 var10 = core___core__AbstractArray___core__abstract_collection__Sequence__pop(var_parts);
168 }
169 {
170 var11 = ini___ini__ConfigTree___get_root(self, var10);
171 }
172 var_node = var11;
173 if (var_node == NULL) {
174 var12 = 1; /* is null */
175 } else {
176 var12 = 0; /* arg is null but recv is not */
177 }
178 if (0) {
179 { /* Inline kernel$Object$== (var_node,((val*)NULL)) on <var_node:nullable ConfigNode> */
180 var_other = ((val*)NULL);
181 {
182 { /* Inline kernel$Object$is_same_instance (var_node,var_other) on <var_node:nullable ConfigNode(ConfigNode)> */
183 var17 = var_node == var_other;
184 var15 = var17;
185 goto RET_LABEL16;
186 RET_LABEL16:(void)0;
187 }
188 }
189 var13 = var15;
190 goto RET_LABEL14;
191 RET_LABEL14:(void)0;
192 }
193 var12 = var13;
194 }
195 if (var12){
196 var = 0;
197 goto RET_LABEL;
198 } else {
199 }
200 for(;;) {
201 {
202 var18 = core___core__AbstractArrayRead___core__abstract_collection__Collection__is_empty(var_parts);
203 }
204 var19 = !var18;
205 if (var19){
206 {
207 var20 = core___core__AbstractArray___core__abstract_collection__Sequence__pop(var_parts);
208 }
209 {
210 var21 = ini___ini__ConfigNode___get_child(var_node, var20);
211 }
212 var_node = var21;
213 if (var_node == NULL) {
214 var22 = 1; /* is null */
215 } else {
216 var22 = 0; /* arg is null but recv is not */
217 }
218 if (0) {
219 { /* Inline kernel$Object$== (var_node,((val*)NULL)) on <var_node:nullable ConfigNode> */
220 var_other = ((val*)NULL);
221 {
222 { /* Inline kernel$Object$is_same_instance (var_node,var_other) on <var_node:nullable ConfigNode(ConfigNode)> */
223 var27 = var_node == var_other;
224 var25 = var27;
225 goto RET_LABEL26;
226 RET_LABEL26:(void)0;
227 }
228 }
229 var23 = var25;
230 goto RET_LABEL24;
231 RET_LABEL24:(void)0;
232 }
233 var22 = var23;
234 }
235 if (var22){
236 var = 0;
237 goto RET_LABEL;
238 } else {
239 }
240 } else {
241 goto BREAK_label;
242 }
243 }
244 BREAK_label: (void)0;
245 var = 1;
246 goto RET_LABEL;
247 RET_LABEL:;
248 return var;
249 }
250 /* method ini$ConfigTree$to_map for (self: ConfigTree): Map[String, String] */
251 val* ini___ini__ConfigTree___to_map(val* self) {
252 val* var /* : Map[String, String] */;
253 val* var1 /* : HashMap[String, String] */;
254 val* var_map /* var map: HashMap[String, String] */;
255 val* var2 /* : Array[ConfigNode] */;
256 val* var_ /* var : Array[ConfigNode] */;
257 val* var3 /* : IndexedIterator[nullable Object] */;
258 val* var_4 /* var : IndexedIterator[ConfigNode] */;
259 short int var5 /* : Bool */;
260 val* var6 /* : nullable Object */;
261 val* var_node /* var node: ConfigNode */;
262 val* var7 /* : nullable String */;
263 val* var9 /* : nullable String */;
264 short int var10 /* : Bool */;
265 short int var11 /* : Bool */;
266 val* var13 /* : String */;
267 val* var14 /* : nullable String */;
268 val* var16 /* : nullable String */;
269 val* var17 /* : String */;
270 var1 = NEW_core__HashMap(&type_core__HashMap__core__String__core__String);
271 {
272 core___core__HashMap___core__kernel__Object__init(var1); /* Direct call hash_collection$HashMap$init on <var1:HashMap[String, String]>*/
273 }
274 var_map = var1;
275 {
276 var2 = ini___ini__ConfigTree___leaves(self);
277 }
278 var_ = var2;
279 {
280 var3 = core___core__AbstractArrayRead___core__abstract_collection__Collection__iterator(var_);
281 }
282 var_4 = var3;
283 for(;;) {
284 {
285 var5 = ((short int(*)(val* self))((((long)var_4&3)?class_info[((long)var_4&3)]:var_4->class)->vft[COLOR_core__abstract_collection__Iterator__is_ok]))(var_4); /* is_ok on <var_4:IndexedIterator[ConfigNode]>*/
286 }
287 if (var5){
288 } else {
289 goto BREAK_label;
290 }
291 {
292 var6 = ((val*(*)(val* self))((((long)var_4&3)?class_info[((long)var_4&3)]:var_4->class)->vft[COLOR_core__abstract_collection__Iterator__item]))(var_4); /* item on <var_4:IndexedIterator[ConfigNode]>*/
293 }
294 var_node = var6;
295 {
296 { /* Inline ini$ConfigNode$value (var_node) on <var_node:ConfigNode> */
297 var9 = var_node->attrs[COLOR_ini__ConfigNode___value].val; /* _value on <var_node:ConfigNode> */
298 var7 = var9;
299 RET_LABEL8:(void)0;
300 }
301 }
302 if (var7 == NULL) {
303 var10 = 1; /* is null */
304 } else {
305 var10 = 0; /* arg is null but recv is not */
306 }
307 if (0) {
308 var11 = ((short int(*)(val* self, val* p0))(var7->class->vft[COLOR_core__kernel__Object___61d_61d]))(var7, ((val*)NULL)); /* == on <var7:nullable String>*/
309 var10 = var11;
310 }
311 if (var10){
312 goto BREAK_label12;
313 } else {
314 }
315 {
316 var13 = ini___ini__ConfigNode___key(var_node);
317 }
318 {
319 { /* Inline ini$ConfigNode$value (var_node) on <var_node:ConfigNode> */
320 var16 = var_node->attrs[COLOR_ini__ConfigNode___value].val; /* _value on <var_node:ConfigNode> */
321 var14 = var16;
322 RET_LABEL15:(void)0;
323 }
324 }
325 if (var14 == NULL) {
326 if(catchStack.cursor >= 0){
327 longjmp(catchStack.envs[catchStack.cursor], 1);
328 }
329 PRINT_ERROR("Runtime error: %s", "Receiver is null");
330 PRINT_ERROR(" (%s:%d)\n", FILE_ini, 116);
331 fatal_exit(1);
332 } else {
333 var17 = core___core__String___Object__to_s(var14);
334 }
335 {
336 core___core__HashMap___core__abstract_collection__Map___91d_93d_61d(var_map, var13, var17); /* Direct call hash_collection$HashMap$[]= on <var_map:HashMap[String, String]>*/
337 }
338 BREAK_label12: (void)0;
339 {
340 ((void(*)(val* self))((((long)var_4&3)?class_info[((long)var_4&3)]:var_4->class)->vft[COLOR_core__abstract_collection__Iterator__next]))(var_4); /* next on <var_4:IndexedIterator[ConfigNode]>*/
341 }
342 }
343 BREAK_label: (void)0;
344 {
345 ((void(*)(val* self))((((long)var_4&3)?class_info[((long)var_4&3)]:var_4->class)->vft[COLOR_core__abstract_collection__Iterator__finish]))(var_4); /* finish on <var_4:IndexedIterator[ConfigNode]>*/
346 }
347 var = var_map;
348 goto RET_LABEL;
349 RET_LABEL:;
350 return var;
351 }
352 /* method ini$ConfigTree$to_s for (self: ConfigTree): String */
353 val* ini___ini__ConfigTree___core__abstract_text__Object__to_s(val* self) {
354 val* var /* : String */;
355 val* var1 /* : Map[String, String] */;
356 static val* varonce;
357 val* var2 /* : String */;
358 char* var3 /* : CString */;
359 val* var4 /* : String */;
360 val* var5 /* : nullable Int */;
361 val* var6 /* : nullable Int */;
362 val* var7 /* : nullable Bool */;
363 val* var8 /* : nullable Bool */;
364 static val* varonce9;
365 val* var10 /* : String */;
366 char* var11 /* : CString */;
367 val* var12 /* : String */;
368 val* var13 /* : nullable Int */;
369 val* var14 /* : nullable Int */;
370 val* var15 /* : nullable Bool */;
371 val* var16 /* : nullable Bool */;
372 val* var17 /* : String */;
373 {
374 var1 = ini___ini__ConfigTree___to_map(self);
375 }
376 if (likely(varonce!=NULL)) {
377 var2 = varonce;
378 } else {
379 var3 = ", ";
380 var5 = (val*)(2l<<2|1);
381 var6 = (val*)(2l<<2|1);
382 var7 = (val*)((long)(0)<<2|3);
383 var8 = (val*)((long)(0)<<2|3);
384 var4 = core__flat___CString___to_s_unsafe(var3, var5, var6, var7, var8);
385 var2 = var4;
386 varonce = var2;
387 }
388 if (likely(varonce9!=NULL)) {
389 var10 = varonce9;
390 } else {
391 var11 = ":";
392 var13 = (val*)(1l<<2|1);
393 var14 = (val*)(1l<<2|1);
394 var15 = (val*)((long)(0)<<2|3);
395 var16 = (val*)((long)(0)<<2|3);
396 var12 = core__flat___CString___to_s_unsafe(var11, var13, var14, var15, var16);
397 var10 = var12;
398 varonce9 = var10;
399 }
400 {
401 var17 = core__flat___Map___join(var1, var2, var10);
402 }
403 var = var17;
404 goto RET_LABEL;
405 RET_LABEL:;
406 return var;
407 }
408 /* method ini$ConfigTree$write_to for (self: ConfigTree, Writer) */
409 void ini___ini__ConfigTree___core__stream__Writable__write_to(val* self, val* p0) {
410 val* var_stream /* var stream: Writer */;
411 val* var /* : Array[ConfigNode] */;
412 val* var_ /* var : Array[ConfigNode] */;
413 val* var1 /* : IndexedIterator[nullable Object] */;
414 val* var_2 /* var : IndexedIterator[ConfigNode] */;
415 short int var3 /* : Bool */;
416 val* var4 /* : nullable Object */;
417 val* var_node /* var node: ConfigNode */;
418 val* var5 /* : nullable String */;
419 val* var7 /* : nullable String */;
420 short int var8 /* : Bool */;
421 short int var9 /* : Bool */;
422 val* var11 /* : NativeArray[String] */;
423 static val* varonce;
424 static val* varonce12;
425 val* var13 /* : String */;
426 char* var14 /* : CString */;
427 val* var15 /* : String */;
428 val* var16 /* : nullable Int */;
429 val* var17 /* : nullable Int */;
430 val* var18 /* : nullable Bool */;
431 val* var19 /* : nullable Bool */;
432 static val* varonce20;
433 val* var21 /* : String */;
434 char* var22 /* : CString */;
435 val* var23 /* : String */;
436 val* var24 /* : nullable Int */;
437 val* var25 /* : nullable Int */;
438 val* var26 /* : nullable Bool */;
439 val* var27 /* : nullable Bool */;
440 val* var28 /* : String */;
441 val* var29 /* : nullable String */;
442 val* var31 /* : nullable String */;
443 val* var32 /* : String */;
444 val* var33 /* : String */;
445 var_stream = p0;
446 {
447 var = ini___ini__ConfigTree___leaves(self);
448 }
449 var_ = var;
450 {
451 var1 = core___core__AbstractArrayRead___core__abstract_collection__Collection__iterator(var_);
452 }
453 var_2 = var1;
454 for(;;) {
455 {
456 var3 = ((short int(*)(val* self))((((long)var_2&3)?class_info[((long)var_2&3)]:var_2->class)->vft[COLOR_core__abstract_collection__Iterator__is_ok]))(var_2); /* is_ok on <var_2:IndexedIterator[ConfigNode]>*/
457 }
458 if (var3){
459 } else {
460 goto BREAK_label;
461 }
462 {
463 var4 = ((val*(*)(val* self))((((long)var_2&3)?class_info[((long)var_2&3)]:var_2->class)->vft[COLOR_core__abstract_collection__Iterator__item]))(var_2); /* item on <var_2:IndexedIterator[ConfigNode]>*/
464 }
465 var_node = var4;
466 {
467 { /* Inline ini$ConfigNode$value (var_node) on <var_node:ConfigNode> */
468 var7 = var_node->attrs[COLOR_ini__ConfigNode___value].val; /* _value on <var_node:ConfigNode> */
469 var5 = var7;
470 RET_LABEL6:(void)0;
471 }
472 }
473 if (var5 == NULL) {
474 var8 = 1; /* is null */
475 } else {
476 var8 = 0; /* arg is null but recv is not */
477 }
478 if (0) {
479 var9 = ((short int(*)(val* self, val* p0))(var5->class->vft[COLOR_core__kernel__Object___61d_61d]))(var5, ((val*)NULL)); /* == on <var5:nullable String>*/
480 var8 = var9;
481 }
482 if (var8){
483 goto BREAK_label10;
484 } else {
485 }
486 if (unlikely(varonce==NULL)) {
487 var11 = NEW_core__NativeArray((int)4l, &type_core__NativeArray__core__String);
488 if (likely(varonce12!=NULL)) {
489 var13 = varonce12;
490 } else {
491 var14 = "=";
492 var16 = (val*)(1l<<2|1);
493 var17 = (val*)(1l<<2|1);
494 var18 = (val*)((long)(0)<<2|3);
495 var19 = (val*)((long)(0)<<2|3);
496 var15 = core__flat___CString___to_s_unsafe(var14, var16, var17, var18, var19);
497 var13 = var15;
498 varonce12 = var13;
499 }
500 ((struct instance_core__NativeArray*)var11)->values[1]=var13;
501 if (likely(varonce20!=NULL)) {
502 var21 = varonce20;
503 } else {
504 var22 = "\n";
505 var24 = (val*)(1l<<2|1);
506 var25 = (val*)(1l<<2|1);
507 var26 = (val*)((long)(0)<<2|3);
508 var27 = (val*)((long)(0)<<2|3);
509 var23 = core__flat___CString___to_s_unsafe(var22, var24, var25, var26, var27);
510 var21 = var23;
511 varonce20 = var21;
512 }
513 ((struct instance_core__NativeArray*)var11)->values[3]=var21;
514 } else {
515 var11 = varonce;
516 varonce = NULL;
517 }
518 {
519 var28 = ini___ini__ConfigNode___key(var_node);
520 }
521 ((struct instance_core__NativeArray*)var11)->values[0]=var28;
522 {
523 { /* Inline ini$ConfigNode$value (var_node) on <var_node:ConfigNode> */
524 var31 = var_node->attrs[COLOR_ini__ConfigNode___value].val; /* _value on <var_node:ConfigNode> */
525 var29 = var31;
526 RET_LABEL30:(void)0;
527 }
528 }
529 if (var29 == NULL) {
530 if(catchStack.cursor >= 0){
531 longjmp(catchStack.envs[catchStack.cursor], 1);
532 }
533 PRINT_ERROR("Runtime error: %s", "Receiver is null");
534 PRINT_ERROR(" (%s:%d)\n", FILE_ini, 126);
535 fatal_exit(1);
536 } else {
537 var32 = core___core__String___Object__to_s(var29);
538 }
539 ((struct instance_core__NativeArray*)var11)->values[2]=var32;
540 {
541 var33 = ((val*(*)(val* self))(var11->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var11); /* native_to_s on <var11:NativeArray[String]>*/
542 }
543 varonce = var11;
544 {
545 core___core__FileWriter___core__stream__Writer__write(var_stream, var33); /* Direct call file$FileWriter$write on <var_stream:Writer>*/
546 }
547 BREAK_label10: (void)0;
548 {
549 ((void(*)(val* self))((((long)var_2&3)?class_info[((long)var_2&3)]:var_2->class)->vft[COLOR_core__abstract_collection__Iterator__next]))(var_2); /* next on <var_2:IndexedIterator[ConfigNode]>*/
550 }
551 }
552 BREAK_label: (void)0;
553 {
554 ((void(*)(val* self))((((long)var_2&3)?class_info[((long)var_2&3)]:var_2->class)->vft[COLOR_core__abstract_collection__Iterator__finish]))(var_2); /* finish on <var_2:IndexedIterator[ConfigNode]>*/
555 }
556 RET_LABEL:;
557 }
558 /* method ini$ConfigTree$load for (self: ConfigTree) */
559 void ini___ini__ConfigTree___load(val* self) {
560 val* var /* : Array[ConfigNode] */;
561 val* var2 /* : Array[ConfigNode] */;
562 val* var3 /* : FileReader */;
563 val* var4 /* : String */;
564 val* var6 /* : String */;
565 val* var_stream /* var stream: FileReader */;
566 val* var_path /* var path: nullable String */;
567 long var_line_number /* var line_number: Int */;
568 short int var7 /* : Bool */;
569 short int var8 /* : Bool */;
570 val* var9 /* : String */;
571 val* var_line /* var line: String */;
572 long var10 /* : Int */;
573 short int var12 /* : Bool */;
574 int cltype;
575 int idtype;
576 const char* var_class_name;
577 long var13 /* : Int */;
578 short int var14 /* : Bool */;
579 static val* varonce;
580 val* var15 /* : String */;
581 char* var16 /* : CString */;
582 val* var17 /* : String */;
583 val* var18 /* : nullable Int */;
584 val* var19 /* : nullable Int */;
585 val* var20 /* : nullable Bool */;
586 val* var21 /* : nullable Bool */;
587 short int var22 /* : Bool */;
588 static val* varonce23;
589 val* var24 /* : String */;
590 char* var25 /* : CString */;
591 val* var26 /* : String */;
592 val* var27 /* : nullable Int */;
593 val* var28 /* : nullable Int */;
594 val* var29 /* : nullable Bool */;
595 val* var30 /* : nullable Bool */;
596 short int var31 /* : Bool */;
597 val* var32 /* : Text */;
598 long var33 /* : Int */;
599 long var34 /* : Int */;
600 short int var36 /* : Bool */;
601 int cltype37;
602 int idtype38;
603 const char* var_class_name39;
604 long var40 /* : Int */;
605 val* var41 /* : Text */;
606 val* var_key /* var key: String */;
607 static val* varonce42;
608 val* var43 /* : String */;
609 char* var44 /* : CString */;
610 val* var45 /* : String */;
611 val* var46 /* : nullable Int */;
612 val* var47 /* : nullable Int */;
613 val* var48 /* : nullable Bool */;
614 val* var49 /* : nullable Bool */;
615 val* var50 /* : Array[String] */;
616 val* var_parts /* var parts: Array[String] */;
617 long var51 /* : Int */;
618 long var53 /* : Int */;
619 short int var54 /* : Bool */;
620 short int var56 /* : Bool */;
621 int cltype57;
622 int idtype58;
623 const char* var_class_name59;
624 short int var60 /* : Bool */;
625 val* var61 /* : Sys */;
626 val* var63 /* : NativeArray[String] */;
627 static val* varonce62;
628 static val* varonce64;
629 val* var65 /* : String */;
630 char* var66 /* : CString */;
631 val* var67 /* : String */;
632 val* var68 /* : nullable Int */;
633 val* var69 /* : nullable Int */;
634 val* var70 /* : nullable Bool */;
635 val* var71 /* : nullable Bool */;
636 val* var72 /* : String */;
637 val* var73 /* : String */;
638 val* var74 /* : nullable Object */;
639 val* var75 /* : Text */;
640 val* var_key76 /* var key: String */;
641 val* var77 /* : nullable Object */;
642 val* var78 /* : Text */;
643 val* var_val /* var val: String */;
644 short int var79 /* : Bool */;
645 short int var80 /* : Bool */;
646 val* var_other /* var other: nullable Object */;
647 short int var82 /* : Bool */;
648 short int var83 /* : Bool */;
649 val* var85 /* : NativeArray[String] */;
650 static val* varonce84;
651 static val* varonce86;
652 val* var87 /* : String */;
653 char* var88 /* : CString */;
654 val* var89 /* : String */;
655 val* var90 /* : nullable Int */;
656 val* var91 /* : nullable Int */;
657 val* var92 /* : nullable Bool */;
658 val* var93 /* : nullable Bool */;
659 val* var94 /* : String */;
660 static val* varonce95;
661 val* var96 /* : String */;
662 char* var97 /* : CString */;
663 val* var98 /* : String */;
664 val* var99 /* : nullable Int */;
665 val* var100 /* : nullable Int */;
666 val* var101 /* : nullable Bool */;
667 val* var102 /* : nullable Bool */;
668 short int var103 /* : Bool */;
669 {
670 { /* Inline ini$ConfigTree$roots (self) on <self:ConfigTree> */
671 var2 = self->attrs[COLOR_ini__ConfigTree___roots].val; /* _roots on <self:ConfigTree> */
672 if (unlikely(var2 == NULL)) {
673 if(catchStack.cursor >= 0){
674 longjmp(catchStack.envs[catchStack.cursor], 1);
675 }
676 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _roots");
677 PRINT_ERROR(" (%s:%d)\n", FILE_ini, 231);
678 fatal_exit(1);
679 }
680 var = var2;
681 RET_LABEL1:(void)0;
682 }
683 }
684 {
685 core___core__AbstractArray___core__abstract_collection__RemovableCollection__clear(var); /* Direct call array$AbstractArray$clear on <var:Array[ConfigNode]>*/
686 }
687 var3 = NEW_core__FileReader(&type_core__FileReader);
688 {
689 { /* Inline ini$ConfigTree$ini_file (self) on <self:ConfigTree> */
690 var6 = self->attrs[COLOR_ini__ConfigTree___ini_file].val; /* _ini_file on <self:ConfigTree> */
691 if (unlikely(var6 == NULL)) {
692 if(catchStack.cursor >= 0){
693 longjmp(catchStack.envs[catchStack.cursor], 1);
694 }
695 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _ini_file");
696 PRINT_ERROR(" (%s:%d)\n", FILE_ini, 37);
697 fatal_exit(1);
698 }
699 var4 = var6;
700 RET_LABEL5:(void)0;
701 }
702 }
703 {
704 core___core__FileReader___open(var3, var4); /* Direct call file$FileReader$open on <var3:FileReader>*/
705 }
706 var_stream = var3;
707 var_path = ((val*)NULL);
708 var_line_number = 0l;
709 for(;;) {
710 {
711 var7 = core___core__BufferedReader___Reader__eof(var_stream);
712 }
713 var8 = !var7;
714 if (var8){
715 {
716 var9 = core___core__Reader___read_line(var_stream);
717 }
718 var_line = var9;
719 {
720 { /* Inline kernel$Int$+ (var_line_number,1l) on <var_line_number:Int> */
721 /* Covariant cast for argument 0 (i) <1l:Int> isa OTHER */
722 /* <1l:Int> isa OTHER */
723 var12 = 1; /* easy <1l:Int> isa OTHER*/
724 if (unlikely(!var12)) {
725 var_class_name = type_core__Int.name;
726 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
727 PRINT_ERROR(" (%s:%d)\n", FILE_core__kernel, 728);
728 fatal_exit(1);
729 }
730 var13 = var_line_number + 1l;
731 var10 = var13;
732 goto RET_LABEL11;
733 RET_LABEL11:(void)0;
734 }
735 }
736 var_line_number = var10;
737 {
738 var14 = ((short int(*)(val* self))(var_line->class->vft[COLOR_core__abstract_text__Text__is_empty]))(var_line); /* is_empty on <var_line:String>*/
739 }
740 if (var14){
741 goto BREAK_label;
742 } else {
743 if (likely(varonce!=NULL)) {
744 var15 = varonce;
745 } else {
746 var16 = ";";
747 var18 = (val*)(1l<<2|1);
748 var19 = (val*)(1l<<2|1);
749 var20 = (val*)((long)(0)<<2|3);
750 var21 = (val*)((long)(0)<<2|3);
751 var17 = core__flat___CString___to_s_unsafe(var16, var18, var19, var20, var21);
752 var15 = var17;
753 varonce = var15;
754 }
755 {
756 var22 = core___core__Text___has_prefix(var_line, var15);
757 }
758 if (var22){
759 goto BREAK_label;
760 } else {
761 if (likely(varonce23!=NULL)) {
762 var24 = varonce23;
763 } else {
764 var25 = "[";
765 var27 = (val*)(1l<<2|1);
766 var28 = (val*)(1l<<2|1);
767 var29 = (val*)((long)(0)<<2|3);
768 var30 = (val*)((long)(0)<<2|3);
769 var26 = core__flat___CString___to_s_unsafe(var25, var27, var28, var29, var30);
770 var24 = var26;
771 varonce23 = var24;
772 }
773 {
774 var31 = core___core__Text___has_prefix(var_line, var24);
775 }
776 if (var31){
777 {
778 var32 = core___core__Text___trim(var_line);
779 }
780 var_line = var32;
781 {
782 var33 = ((long(*)(val* self))(var_line->class->vft[COLOR_core__abstract_text__Text__length]))(var_line); /* length on <var_line:String>*/
783 }
784 {
785 { /* Inline kernel$Int$- (var33,2l) on <var33:Int> */
786 /* Covariant cast for argument 0 (i) <2l:Int> isa OTHER */
787 /* <2l:Int> isa OTHER */
788 var36 = 1; /* easy <2l:Int> isa OTHER*/
789 if (unlikely(!var36)) {
790 var_class_name39 = type_core__Int.name;
791 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name39);
792 PRINT_ERROR(" (%s:%d)\n", FILE_core__kernel, 731);
793 fatal_exit(1);
794 }
795 var40 = var33 - 2l;
796 var34 = var40;
797 goto RET_LABEL35;
798 RET_LABEL35:(void)0;
799 }
800 }
801 {
802 var41 = ((val*(*)(val* self, long p0, long p1))(var_line->class->vft[COLOR_core__abstract_text__Text__substring]))(var_line, 1l, var34); /* substring on <var_line:String>*/
803 }
804 var_key = var41;
805 var_path = var_key;
806 {
807 ini___ini__ConfigTree___set_node(self, var_path, ((val*)NULL)); /* Direct call ini$ConfigTree$set_node on <self:ConfigTree>*/
808 }
809 } else {
810 if (likely(varonce42!=NULL)) {
811 var43 = varonce42;
812 } else {
813 var44 = "=";
814 var46 = (val*)(1l<<2|1);
815 var47 = (val*)(1l<<2|1);
816 var48 = (val*)((long)(0)<<2|3);
817 var49 = (val*)((long)(0)<<2|3);
818 var45 = core__flat___CString___to_s_unsafe(var44, var46, var47, var48, var49);
819 var43 = var45;
820 varonce42 = var43;
821 }
822 {
823 var50 = core__string_search___Text___split(var_line, var43);
824 }
825 var_parts = var50;
826 {
827 { /* Inline array$AbstractArrayRead$length (var_parts) on <var_parts:Array[String]> */
828 var53 = var_parts->attrs[COLOR_core__array__AbstractArrayRead___length].l; /* _length on <var_parts:Array[String]> */
829 var51 = var53;
830 RET_LABEL52:(void)0;
831 }
832 }
833 {
834 { /* Inline kernel$Int$> (var51,1l) on <var51:Int> */
835 /* Covariant cast for argument 0 (i) <1l:Int> isa OTHER */
836 /* <1l:Int> isa OTHER */
837 var56 = 1; /* easy <1l:Int> isa OTHER*/
838 if (unlikely(!var56)) {
839 var_class_name59 = type_core__Int.name;
840 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name59);
841 PRINT_ERROR(" (%s:%d)\n", FILE_core__kernel, 727);
842 fatal_exit(1);
843 }
844 var60 = var51 > 1l;
845 var54 = var60;
846 goto RET_LABEL55;
847 RET_LABEL55:(void)0;
848 }
849 }
850 if (unlikely(!var54)) {
851 var61 = glob_sys;
852 if (unlikely(varonce62==NULL)) {
853 var63 = NEW_core__NativeArray((int)2l, &type_core__NativeArray__core__String);
854 if (likely(varonce64!=NULL)) {
855 var65 = varonce64;
856 } else {
857 var66 = "Error: malformed ini at line ";
858 var68 = (val*)(29l<<2|1);
859 var69 = (val*)(29l<<2|1);
860 var70 = (val*)((long)(0)<<2|3);
861 var71 = (val*)((long)(0)<<2|3);
862 var67 = core__flat___CString___to_s_unsafe(var66, var68, var69, var70, var71);
863 var65 = var67;
864 varonce64 = var65;
865 }
866 ((struct instance_core__NativeArray*)var63)->values[0]=var65;
867 } else {
868 var63 = varonce62;
869 varonce62 = NULL;
870 }
871 var72 = core__flat___Int___core__abstract_text__Object__to_s(var_line_number);
872 ((struct instance_core__NativeArray*)var63)->values[1]=var72;
873 {
874 var73 = ((val*(*)(val* self))(var63->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var63); /* native_to_s on <var63:NativeArray[String]>*/
875 }
876 varonce62 = var63;
877 {
878 core__file___Sys___print(var61, var73); /* Direct call file$Sys$print on <var61:Sys>*/
879 }
880 if(catchStack.cursor >= 0){
881 longjmp(catchStack.envs[catchStack.cursor], 1);
882 }
883 PRINT_ERROR("Runtime error: %s", "Assert failed");
884 PRINT_ERROR(" (%s:%d)\n", FILE_ini, 212);
885 fatal_exit(1);
886 }
887 {
888 var74 = core___core__Array___core__abstract_collection__SequenceRead___91d_93d(var_parts, 0l);
889 }
890 {
891 var75 = core___core__Text___trim(var74);
892 }
893 var_key76 = var75;
894 {
895 var77 = core___core__Array___core__abstract_collection__SequenceRead___91d_93d(var_parts, 1l);
896 }
897 {
898 var78 = core___core__Text___trim(var77);
899 }
900 var_val = var78;
901 if (var_path == NULL) {
902 var79 = 0; /* is null */
903 } else {
904 var79 = 1; /* arg is null and recv is not */
905 }
906 if (0) {
907 { /* Inline kernel$Object$!= (var_path,((val*)NULL)) on <var_path:nullable String> */
908 var_other = ((val*)NULL);
909 {
910 var82 = ((short int(*)(val* self, val* p0))(var_path->class->vft[COLOR_core__kernel__Object___61d_61d]))(var_path, var_other); /* == on <var_path:nullable String(String)>*/
911 }
912 var83 = !var82;
913 var80 = var83;
914 goto RET_LABEL81;
915 RET_LABEL81:(void)0;
916 }
917 var79 = var80;
918 }
919 if (var79){
920 if (unlikely(varonce84==NULL)) {
921 var85 = NEW_core__NativeArray((int)3l, &type_core__NativeArray__core__String);
922 if (likely(varonce86!=NULL)) {
923 var87 = varonce86;
924 } else {
925 var88 = ".";
926 var90 = (val*)(1l<<2|1);
927 var91 = (val*)(1l<<2|1);
928 var92 = (val*)((long)(0)<<2|3);
929 var93 = (val*)((long)(0)<<2|3);
930 var89 = core__flat___CString___to_s_unsafe(var88, var90, var91, var92, var93);
931 var87 = var89;
932 varonce86 = var87;
933 }
934 ((struct instance_core__NativeArray*)var85)->values[1]=var87;
935 } else {
936 var85 = varonce84;
937 varonce84 = NULL;
938 }
939 ((struct instance_core__NativeArray*)var85)->values[0]=var_path;
940 ((struct instance_core__NativeArray*)var85)->values[2]=var_key76;
941 {
942 var94 = ((val*(*)(val* self))(var85->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var85); /* native_to_s on <var85:NativeArray[String]>*/
943 }
944 varonce84 = var85;
945 var_key76 = var94;
946 } else {
947 }
948 if (likely(varonce95!=NULL)) {
949 var96 = varonce95;
950 } else {
951 var97 = "[]";
952 var99 = (val*)(2l<<2|1);
953 var100 = (val*)(2l<<2|1);
954 var101 = (val*)((long)(0)<<2|3);
955 var102 = (val*)((long)(0)<<2|3);
956 var98 = core__flat___CString___to_s_unsafe(var97, var99, var100, var101, var102);
957 var96 = var98;
958 varonce95 = var96;
959 }
960 {
961 var103 = core___core__Text___has_suffix(var_key76, var96);
962 }
963 if (var103){
964 {
965 ini___ini__ConfigTree___set_array(self, var_key76, var_val); /* Direct call ini$ConfigTree$set_array on <self:ConfigTree>*/
966 }
967 } else {
968 {
969 ini___ini__ConfigTree___set_node(self, var_key76, var_val); /* Direct call ini$ConfigTree$set_node on <self:ConfigTree>*/
970 }
971 }
972 }
973 }
974 }
975 } else {
976 goto BREAK_label104;
977 }
978 BREAK_label: (void)0;
979 }
980 BREAK_label104: (void)0;
981 {
982 core___core__FileReader___core__stream__Stream__close(var_stream); /* Direct call file$FileReader$close on <var_stream:FileReader>*/
983 }
984 RET_LABEL:;
985 }
986 /* method ini$ConfigTree$roots for (self: ConfigTree): Array[ConfigNode] */
987 val* ini___ini__ConfigTree___roots(val* self) {
988 val* var /* : Array[ConfigNode] */;
989 val* var1 /* : Array[ConfigNode] */;
990 var1 = self->attrs[COLOR_ini__ConfigTree___roots].val; /* _roots on <self:ConfigTree> */
991 if (unlikely(var1 == NULL)) {
992 if(catchStack.cursor >= 0){
993 longjmp(catchStack.envs[catchStack.cursor], 1);
994 }
995 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _roots");
996 PRINT_ERROR(" (%s:%d)\n", FILE_ini, 231);
997 fatal_exit(1);
998 }
999 var = var1;
1000 RET_LABEL:;
1001 return var;
1002 }
1003 /* method ini$ConfigTree$set_array for (self: ConfigTree, String, nullable String) */
1004 void ini___ini__ConfigTree___set_array(val* self, val* p0, val* p1) {
1005 val* var_key /* var key: String */;
1006 val* var_value /* var value: nullable String */;
1007 long var /* : Int */;
1008 long var1 /* : Int */;
1009 short int var3 /* : Bool */;
1010 int cltype;
1011 int idtype;
1012 const char* var_class_name;
1013 long var4 /* : Int */;
1014 val* var5 /* : Text */;
1015 long var_len /* var len: Int */;
1016 short int var6 /* : Bool */;
1017 val* var7 /* : nullable ConfigNode */;
1018 val* var8 /* : HashMap[String, ConfigNode] */;
1019 val* var10 /* : HashMap[String, ConfigNode] */;
1020 long var11 /* : Int */;
1021 val* var12 /* : NativeArray[String] */;
1022 static val* varonce;
1023 static val* varonce13;
1024 val* var14 /* : String */;
1025 char* var15 /* : CString */;
1026 val* var16 /* : String */;
1027 val* var17 /* : nullable Int */;
1028 val* var18 /* : nullable Int */;
1029 val* var19 /* : nullable Bool */;
1030 val* var20 /* : nullable Bool */;
1031 val* var21 /* : String */;
1032 val* var22 /* : String */;
1033 var_key = p0;
1034 var_value = p1;
1035 {
1036 var = ((long(*)(val* self))(var_key->class->vft[COLOR_core__abstract_text__Text__length]))(var_key); /* length on <var_key:String>*/
1037 }
1038 {
1039 { /* Inline kernel$Int$- (var,2l) on <var:Int> */
1040 /* Covariant cast for argument 0 (i) <2l:Int> isa OTHER */
1041 /* <2l:Int> isa OTHER */
1042 var3 = 1; /* easy <2l:Int> isa OTHER*/
1043 if (unlikely(!var3)) {
1044 var_class_name = type_core__Int.name;
1045 PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
1046 PRINT_ERROR(" (%s:%d)\n", FILE_core__kernel, 731);
1047 fatal_exit(1);
1048 }
1049 var4 = var - 2l;
1050 var1 = var4;
1051 goto RET_LABEL2;
1052 RET_LABEL2:(void)0;
1053 }
1054 }
1055 {
1056 var5 = ((val*(*)(val* self, long p0, long p1))(var_key->class->vft[COLOR_core__abstract_text__Text__substring]))(var_key, 0l, var1); /* substring on <var_key:String>*/
1057 }
1058 var_key = var5;
1059 var_len = 0l;
1060 {
1061 var6 = ini___ini__ConfigTree___has_key(self, var_key);
1062 }
1063 if (var6){
1064 {
1065 var7 = ini___ini__ConfigTree___get_node(self, var_key);
1066 }
1067 if (var7 == NULL) {
1068 if(catchStack.cursor >= 0){
1069 longjmp(catchStack.envs[catchStack.cursor], 1);
1070 }
1071 PRINT_ERROR("Runtime error: %s", "Receiver is null");
1072 PRINT_ERROR(" (%s:%d)\n", FILE_ini, 238);
1073 fatal_exit(1);
1074 } else {
1075 { /* Inline ini$ConfigNode$children (var7) on <var7:nullable ConfigNode> */
1076 if (unlikely(var7 == NULL)) {
1077 if(catchStack.cursor >= 0){
1078 longjmp(catchStack.envs[catchStack.cursor], 1);
1079 }
1080 PRINT_ERROR("Runtime error: %s", "Receiver is null");
1081 PRINT_ERROR(" (%s:%d)\n", FILE_ini, 304);
1082 fatal_exit(1);
1083 }
1084 var10 = var7->attrs[COLOR_ini__ConfigNode___children].val; /* _children on <var7:nullable ConfigNode> */
1085 if (unlikely(var10 == NULL)) {
1086 if(catchStack.cursor >= 0){
1087 longjmp(catchStack.envs[catchStack.cursor], 1);
1088 }
1089 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _children");
1090 PRINT_ERROR(" (%s:%d)\n", FILE_ini, 304);
1091 fatal_exit(1);
1092 }
1093 var8 = var10;
1094 RET_LABEL9:(void)0;
1095 }
1096 }
1097 {
1098 var11 = core___core__HashMap___core__abstract_collection__MapRead__length(var8);
1099 }
1100 var_len = var11;
1101 } else {
1102 }
1103 if (unlikely(varonce==NULL)) {
1104 var12 = NEW_core__NativeArray((int)3l, &type_core__NativeArray__core__String);
1105 if (likely(varonce13!=NULL)) {
1106 var14 = varonce13;
1107 } else {
1108 var15 = ".";
1109 var17 = (val*)(1l<<2|1);
1110 var18 = (val*)(1l<<2|1);
1111 var19 = (val*)((long)(0)<<2|3);
1112 var20 = (val*)((long)(0)<<2|3);
1113 var16 = core__flat___CString___to_s_unsafe(var15, var17, var18, var19, var20);
1114 var14 = var16;
1115 varonce13 = var14;
1116 }
1117 ((struct instance_core__NativeArray*)var12)->values[1]=var14;
1118 } else {
1119 var12 = varonce;
1120 varonce = NULL;
1121 }
1122 ((struct instance_core__NativeArray*)var12)->values[0]=var_key;
1123 {
1124 var21 = core__flat___Int___core__abstract_text__Object__to_s(var_len);
1125 }
1126 ((struct instance_core__NativeArray*)var12)->values[2]=var21;
1127 {
1128 var22 = ((val*(*)(val* self))(var12->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var12); /* native_to_s on <var12:NativeArray[String]>*/
1129 }
1130 varonce = var12;
1131 {
1132 ini___ini__ConfigTree___set_node(self, var22, var_value); /* Direct call ini$ConfigTree$set_node on <self:ConfigTree>*/
1133 }
1134 RET_LABEL:;
1135 }
1136 /* method ini$ConfigTree$set_node for (self: ConfigTree, String, nullable String) */
1137 void ini___ini__ConfigTree___set_node(val* self, val* p0, val* p1) {
1138 val* var_key /* var key: String */;
1139 val* var_value /* var value: nullable String */;
1140 static val* varonce;
1141 val* var /* : String */;
1142 char* var1 /* : CString */;
1143 val* var2 /* : String */;
1144 val* var3 /* : nullable Int */;
1145 val* var4 /* : nullable Int */;
1146 val* var5 /* : nullable Bool */;
1147 val* var6 /* : nullable Bool */;
1148 val* var7 /* : Array[String] */;
1149 val* var8 /* : Array[nullable Object] */;
1150 val* var_parts /* var parts: Array[String] */;
1151 val* var9 /* : nullable Object */;
1152 val* var_k /* var k: String */;
1153 val* var10 /* : nullable ConfigNode */;
1154 val* var_root /* var root: nullable ConfigNode */;
1155 short int var11 /* : Bool */;
1156 short int var12 /* : Bool */;
1157 val* var_other /* var other: nullable Object */;
1158 short int var14 /* : Bool */;
1159 short int var16 /* : Bool */;
1160 val* var17 /* : ConfigNode */;
1161 short int var18 /* : Bool */;
1162 val* var20 /* : Array[ConfigNode] */;
1163 val* var22 /* : Array[ConfigNode] */;
1164 short int var23 /* : Bool */;
1165 short int var24 /* : Bool */;
1166 val* var25 /* : nullable Object */;
1167 val* var26 /* : nullable ConfigNode */;
1168 val* var_node /* var node: nullable ConfigNode */;
1169 short int var27 /* : Bool */;
1170 short int var28 /* : Bool */;
1171 short int var30 /* : Bool */;
1172 short int var32 /* : Bool */;
1173 val* var33 /* : ConfigNode */;
1174 val* var35 /* : HashMap[String, ConfigNode] */;
1175 val* var37 /* : HashMap[String, ConfigNode] */;
1176 val* var38 /* : String */;
1177 val* var40 /* : String */;
1178 short int var41 /* : Bool */;
1179 var_key = p0;
1180 var_value = p1;
1181 if (likely(varonce!=NULL)) {
1182 var = varonce;
1183 } else {
1184 var1 = ".";
1185 var3 = (val*)(1l<<2|1);
1186 var4 = (val*)(1l<<2|1);
1187 var5 = (val*)((long)(0)<<2|3);
1188 var6 = (val*)((long)(0)<<2|3);
1189 var2 = core__flat___CString___to_s_unsafe(var1, var3, var4, var5, var6);
1190 var = var2;
1191 varonce = var;
1192 }
1193 {
1194 var7 = core__string_search___Text___split(var_key, var);
1195 }
1196 {
1197 var8 = core___core__AbstractArrayRead___reversed(var7);
1198 }
1199 var_parts = var8;
1200 {
1201 var9 = core___core__AbstractArray___core__abstract_collection__Sequence__pop(var_parts);
1202 }
1203 var_k = var9;
1204 {
1205 var10 = ini___ini__ConfigTree___get_root(self, var_k);
1206 }
1207 var_root = var10;
1208 if (var_root == NULL) {
1209 var11 = 1; /* is null */
1210 } else {
1211 var11 = 0; /* arg is null but recv is not */
1212 }
1213 if (0) {
1214 { /* Inline kernel$Object$== (var_root,((val*)NULL)) on <var_root:nullable ConfigNode> */
1215 var_other = ((val*)NULL);
1216 {
1217 { /* Inline kernel$Object$is_same_instance (var_root,var_other) on <var_root:nullable ConfigNode(ConfigNode)> */
1218 var16 = var_root == var_other;
1219 var14 = var16;
1220 goto RET_LABEL15;
1221 RET_LABEL15:(void)0;
1222 }
1223 }
1224 var12 = var14;
1225 goto RET_LABEL13;
1226 RET_LABEL13:(void)0;
1227 }
1228 var11 = var12;
1229 }
1230 if (var11){
1231 var17 = NEW_ini__ConfigNode(&type_ini__ConfigNode);
1232 {
1233 ((void(*)(val* self, val* p0))(var17->class->vft[COLOR_ini__ConfigNode__name_61d]))(var17, var_k); /* name= on <var17:ConfigNode>*/
1234 }
1235 {
1236 ((void(*)(val* self))(var17->class->vft[COLOR_core__kernel__Object__init]))(var17); /* init on <var17:ConfigNode>*/
1237 }
1238 var_root = var17;
1239 {
1240 var18 = core___core__AbstractArrayRead___core__abstract_collection__Collection__is_empty(var_parts);
1241 }
1242 if (var18){
1243 {
1244 { /* Inline ini$ConfigNode$value= (var_root,var_value) on <var_root:nullable ConfigNode(ConfigNode)> */
1245 var_root->attrs[COLOR_ini__ConfigNode___value].val = var_value; /* _value on <var_root:nullable ConfigNode(ConfigNode)> */
1246 RET_LABEL19:(void)0;
1247 }
1248 }
1249 } else {
1250 }
1251 {
1252 { /* Inline ini$ConfigTree$roots (self) on <self:ConfigTree> */
1253 var22 = self->attrs[COLOR_ini__ConfigTree___roots].val; /* _roots on <self:ConfigTree> */
1254 if (unlikely(var22 == NULL)) {
1255 if(catchStack.cursor >= 0){
1256 longjmp(catchStack.envs[catchStack.cursor], 1);
1257 }
1258 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _roots");
1259 PRINT_ERROR(" (%s:%d)\n", FILE_ini, 231);
1260 fatal_exit(1);
1261 }
1262 var20 = var22;
1263 RET_LABEL21:(void)0;
1264 }
1265 }
1266 {
1267 core___core__Array___core__abstract_collection__SimpleCollection__add(var20, var_root); /* Direct call array$Array$add on <var20:Array[ConfigNode]>*/
1268 }
1269 } else {
1270 }
1271 for(;;) {
1272 {
1273 var23 = core___core__AbstractArrayRead___core__abstract_collection__Collection__is_empty(var_parts);
1274 }
1275 var24 = !var23;
1276 if (var24){
1277 {
1278 var25 = core___core__AbstractArray___core__abstract_collection__Sequence__pop(var_parts);
1279 }
1280 var_k = var25;
1281 {
1282 var26 = ini___ini__ConfigNode___get_child(var_root, var_k);
1283 }
1284 var_node = var26;
1285 if (var_node == NULL) {
1286 var27 = 1; /* is null */
1287 } else {
1288 var27 = 0; /* arg is null but recv is not */
1289 }
1290 if (0) {
1291 { /* Inline kernel$Object$== (var_node,((val*)NULL)) on <var_node:nullable ConfigNode> */
1292 var_other = ((val*)NULL);
1293 {
1294 { /* Inline kernel$Object$is_same_instance (var_node,var_other) on <var_node:nullable ConfigNode(ConfigNode)> */
1295 var32 = var_node == var_other;
1296 var30 = var32;
1297 goto RET_LABEL31;
1298 RET_LABEL31:(void)0;
1299 }
1300 }
1301 var28 = var30;
1302 goto RET_LABEL29;
1303 RET_LABEL29:(void)0;
1304 }
1305 var27 = var28;
1306 }
1307 if (var27){
1308 var33 = NEW_ini__ConfigNode(&type_ini__ConfigNode);
1309 {
1310 ((void(*)(val* self, val* p0))(var33->class->vft[COLOR_ini__ConfigNode__name_61d]))(var33, var_k); /* name= on <var33:ConfigNode>*/
1311 }
1312 {
1313 ((void(*)(val* self))(var33->class->vft[COLOR_core__kernel__Object__init]))(var33); /* init on <var33:ConfigNode>*/
1314 }
1315 var_node = var33;
1316 {
1317 { /* Inline ini$ConfigNode$parent= (var_node,var_root) on <var_node:nullable ConfigNode(ConfigNode)> */
1318 var_node->attrs[COLOR_ini__ConfigNode___parent].val = var_root; /* _parent on <var_node:nullable ConfigNode(ConfigNode)> */
1319 RET_LABEL34:(void)0;
1320 }
1321 }
1322 {
1323 { /* Inline ini$ConfigNode$children (var_root) on <var_root:nullable ConfigNode(ConfigNode)> */
1324 var37 = var_root->attrs[COLOR_ini__ConfigNode___children].val; /* _children on <var_root:nullable ConfigNode(ConfigNode)> */
1325 if (unlikely(var37 == NULL)) {
1326 if(catchStack.cursor >= 0){
1327 longjmp(catchStack.envs[catchStack.cursor], 1);
1328 }
1329 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _children");
1330 PRINT_ERROR(" (%s:%d)\n", FILE_ini, 304);
1331 fatal_exit(1);
1332 }
1333 var35 = var37;
1334 RET_LABEL36:(void)0;
1335 }
1336 }
1337 {
1338 { /* Inline ini$ConfigNode$name (var_node) on <var_node:nullable ConfigNode(ConfigNode)> */
1339 var40 = var_node->attrs[COLOR_ini__ConfigNode___name].val; /* _name on <var_node:nullable ConfigNode(ConfigNode)> */
1340 if (unlikely(var40 == NULL)) {
1341 if(catchStack.cursor >= 0){
1342 longjmp(catchStack.envs[catchStack.cursor], 1);
1343 }
1344 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _name");
1345 PRINT_ERROR(" (%s:%d)\n", FILE_ini, 305);
1346 fatal_exit(1);
1347 }
1348 var38 = var40;
1349 RET_LABEL39:(void)0;
1350 }
1351 }
1352 {
1353 core___core__HashMap___core__abstract_collection__Map___91d_93d_61d(var35, var38, var_node); /* Direct call hash_collection$HashMap$[]= on <var35:HashMap[String, ConfigNode]>*/
1354 }
1355 } else {
1356 }
1357 {
1358 var41 = core___core__AbstractArrayRead___core__abstract_collection__Collection__is_empty(var_parts);
1359 }
1360 if (var41){
1361 {
1362 { /* Inline ini$ConfigNode$value= (var_node,var_value) on <var_node:nullable ConfigNode(ConfigNode)> */
1363 var_node->attrs[COLOR_ini__ConfigNode___value].val = var_value; /* _value on <var_node:nullable ConfigNode(ConfigNode)> */
1364 RET_LABEL42:(void)0;
1365 }
1366 }
1367 } else {
1368 }
1369 var_root = var_node;
1370 } else {
1371 goto BREAK_label;
1372 }
1373 }
1374 BREAK_label: (void)0;
1375 RET_LABEL:;
1376 }
1377 /* method ini$ConfigTree$get_node for (self: ConfigTree, String): nullable ConfigNode */
1378 val* ini___ini__ConfigTree___get_node(val* self, val* p0) {
1379 val* var /* : nullable ConfigNode */;
1380 val* var_key /* var key: String */;
1381 static val* varonce;
1382 val* var1 /* : String */;
1383 char* var2 /* : CString */;
1384 val* var3 /* : String */;
1385 val* var4 /* : nullable Int */;
1386 val* var5 /* : nullable Int */;
1387 val* var6 /* : nullable Bool */;
1388 val* var7 /* : nullable Bool */;
1389 val* var8 /* : Array[String] */;
1390 val* var9 /* : Array[nullable Object] */;
1391 val* var_parts /* var parts: Array[String] */;
1392 val* var10 /* : nullable Object */;
1393 val* var11 /* : nullable ConfigNode */;
1394 val* var_node /* var node: nullable ConfigNode */;
1395 short int var12 /* : Bool */;
1396 short int var13 /* : Bool */;
1397 short int var14 /* : Bool */;
1398 val* var_other /* var other: nullable Object */;
1399 short int var16 /* : Bool */;
1400 short int var17 /* : Bool */;
1401 short int var_ /* var : Bool */;
1402 short int var18 /* : Bool */;
1403 short int var19 /* : Bool */;
1404 val* var20 /* : nullable Object */;
1405 val* var21 /* : nullable ConfigNode */;
1406 var_key = p0;
1407 if (likely(varonce!=NULL)) {
1408 var1 = varonce;
1409 } else {
1410 var2 = ".";
1411 var4 = (val*)(1l<<2|1);
1412 var5 = (val*)(1l<<2|1);
1413 var6 = (val*)((long)(0)<<2|3);
1414 var7 = (val*)((long)(0)<<2|3);
1415 var3 = core__flat___CString___to_s_unsafe(var2, var4, var5, var6, var7);
1416 var1 = var3;
1417 varonce = var1;
1418 }
1419 {
1420 var8 = core__string_search___Text___split(var_key, var1);
1421 }
1422 {
1423 var9 = core___core__AbstractArrayRead___reversed(var8);
1424 }
1425 var_parts = var9;
1426 {
1427 var10 = core___core__AbstractArray___core__abstract_collection__Sequence__pop(var_parts);
1428 }
1429 {
1430 var11 = ini___ini__ConfigTree___get_root(self, var10);
1431 }
1432 var_node = var11;
1433 for(;;) {
1434 if (var_node == NULL) {
1435 var13 = 0; /* is null */
1436 } else {
1437 var13 = 1; /* arg is null and recv is not */
1438 }
1439 if (0) {
1440 { /* Inline kernel$Object$!= (var_node,((val*)NULL)) on <var_node:nullable ConfigNode> */
1441 var_other = ((val*)NULL);
1442 {
1443 var16 = ((short int(*)(val* self, val* p0))(var_node->class->vft[COLOR_core__kernel__Object___61d_61d]))(var_node, var_other); /* == on <var_node:nullable ConfigNode(ConfigNode)>*/
1444 }
1445 var17 = !var16;
1446 var14 = var17;
1447 goto RET_LABEL15;
1448 RET_LABEL15:(void)0;
1449 }
1450 var13 = var14;
1451 }
1452 var_ = var13;
1453 if (var13){
1454 {
1455 var18 = core___core__AbstractArrayRead___core__abstract_collection__Collection__is_empty(var_parts);
1456 }
1457 var19 = !var18;
1458 var12 = var19;
1459 } else {
1460 var12 = var_;
1461 }
1462 if (var12){
1463 {
1464 var20 = core___core__AbstractArray___core__abstract_collection__Sequence__pop(var_parts);
1465 }
1466 {
1467 var21 = ini___ini__ConfigNode___get_child(var_node, var20);
1468 }
1469 var_node = var21;
1470 } else {
1471 goto BREAK_label;
1472 }
1473 }
1474 BREAK_label: (void)0;
1475 var = var_node;
1476 goto RET_LABEL;
1477 RET_LABEL:;
1478 return var;
1479 }
1480 /* method ini$ConfigTree$get_root for (self: ConfigTree, String): nullable ConfigNode */
1481 val* ini___ini__ConfigTree___get_root(val* self, val* p0) {
1482 val* var /* : nullable ConfigNode */;
1483 val* var_name /* var name: String */;
1484 val* var1 /* : Array[ConfigNode] */;
1485 val* var3 /* : Array[ConfigNode] */;
1486 val* var_ /* var : Array[ConfigNode] */;
1487 val* var4 /* : IndexedIterator[nullable Object] */;
1488 val* var_5 /* var : IndexedIterator[ConfigNode] */;
1489 short int var6 /* : Bool */;
1490 val* var7 /* : nullable Object */;
1491 val* var_root /* var root: ConfigNode */;
1492 val* var8 /* : String */;
1493 val* var10 /* : String */;
1494 short int var11 /* : Bool */;
1495 var_name = p0;
1496 {
1497 { /* Inline ini$ConfigTree$roots (self) on <self:ConfigTree> */
1498 var3 = self->attrs[COLOR_ini__ConfigTree___roots].val; /* _roots on <self:ConfigTree> */
1499 if (unlikely(var3 == NULL)) {
1500 if(catchStack.cursor >= 0){
1501 longjmp(catchStack.envs[catchStack.cursor], 1);
1502 }
1503 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _roots");
1504 PRINT_ERROR(" (%s:%d)\n", FILE_ini, 231);
1505 fatal_exit(1);
1506 }
1507 var1 = var3;
1508 RET_LABEL2:(void)0;
1509 }
1510 }
1511 var_ = var1;
1512 {
1513 var4 = core___core__AbstractArrayRead___core__abstract_collection__Collection__iterator(var_);
1514 }
1515 var_5 = var4;
1516 for(;;) {
1517 {
1518 var6 = ((short int(*)(val* self))((((long)var_5&3)?class_info[((long)var_5&3)]:var_5->class)->vft[COLOR_core__abstract_collection__Iterator__is_ok]))(var_5); /* is_ok on <var_5:IndexedIterator[ConfigNode]>*/
1519 }
1520 if (var6){
1521 } else {
1522 goto BREAK_label;
1523 }
1524 {
1525 var7 = ((val*(*)(val* self))((((long)var_5&3)?class_info[((long)var_5&3)]:var_5->class)->vft[COLOR_core__abstract_collection__Iterator__item]))(var_5); /* item on <var_5:IndexedIterator[ConfigNode]>*/
1526 }
1527 var_root = var7;
1528 {
1529 { /* Inline ini$ConfigNode$name (var_root) on <var_root:ConfigNode> */
1530 var10 = var_root->attrs[COLOR_ini__ConfigNode___name].val; /* _name on <var_root:ConfigNode> */
1531 if (unlikely(var10 == NULL)) {
1532 if(catchStack.cursor >= 0){
1533 longjmp(catchStack.envs[catchStack.cursor], 1);
1534 }
1535 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _name");
1536 PRINT_ERROR(" (%s:%d)\n", FILE_ini, 305);
1537 fatal_exit(1);
1538 }
1539 var8 = var10;
1540 RET_LABEL9:(void)0;
1541 }
1542 }
1543 {
1544 var11 = ((short int(*)(val* self, val* p0))(var8->class->vft[COLOR_core__kernel__Object___61d_61d]))(var8, var_name); /* == on <var8:String>*/
1545 }
1546 if (var11){
1547 var = var_root;
1548 goto RET_LABEL;
1549 } else {
1550 }
1551 {
1552 ((void(*)(val* self))((((long)var_5&3)?class_info[((long)var_5&3)]:var_5->class)->vft[COLOR_core__abstract_collection__Iterator__next]))(var_5); /* next on <var_5:IndexedIterator[ConfigNode]>*/
1553 }
1554 }
1555 BREAK_label: (void)0;
1556 {
1557 ((void(*)(val* self))((((long)var_5&3)?class_info[((long)var_5&3)]:var_5->class)->vft[COLOR_core__abstract_collection__Iterator__finish]))(var_5); /* finish on <var_5:IndexedIterator[ConfigNode]>*/
1558 }
1559 var = ((val*)NULL);
1560 goto RET_LABEL;
1561 RET_LABEL:;
1562 return var;
1563 }
1564 /* method ini$ConfigTree$leaves for (self: ConfigTree): Array[ConfigNode] */
1565 val* ini___ini__ConfigTree___leaves(val* self) {
1566 val* var /* : Array[ConfigNode] */;
1567 val* var1 /* : Array[ConfigNode] */;
1568 val* var_res /* var res: Array[ConfigNode] */;
1569 val* var2 /* : Array[ConfigNode] */;
1570 val* var_todo /* var todo: Array[ConfigNode] */;
1571 val* var3 /* : Array[ConfigNode] */;
1572 val* var5 /* : Array[ConfigNode] */;
1573 short int var6 /* : Bool */;
1574 short int var7 /* : Bool */;
1575 val* var8 /* : nullable Object */;
1576 val* var_node /* var node: ConfigNode */;
1577 val* var9 /* : HashMap[String, ConfigNode] */;
1578 val* var11 /* : HashMap[String, ConfigNode] */;
1579 short int var12 /* : Bool */;
1580 val* var13 /* : HashMap[String, ConfigNode] */;
1581 val* var15 /* : HashMap[String, ConfigNode] */;
1582 val* var16 /* : RemovableCollection[nullable Object] */;
1583 var1 = NEW_core__Array(&type_core__Array__ini__ConfigNode);
1584 {
1585 core___core__Array___core__kernel__Object__init(var1); /* Direct call array$Array$init on <var1:Array[ConfigNode]>*/
1586 }
1587 var_res = var1;
1588 var2 = NEW_core__Array(&type_core__Array__ini__ConfigNode);
1589 {
1590 core___core__Array___core__kernel__Object__init(var2); /* Direct call array$Array$init on <var2:Array[ConfigNode]>*/
1591 }
1592 var_todo = var2;
1593 {
1594 { /* Inline ini$ConfigTree$roots (self) on <self:ConfigTree> */
1595 var5 = self->attrs[COLOR_ini__ConfigTree___roots].val; /* _roots on <self:ConfigTree> */
1596 if (unlikely(var5 == NULL)) {
1597 if(catchStack.cursor >= 0){
1598 longjmp(catchStack.envs[catchStack.cursor], 1);
1599 }
1600 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _roots");
1601 PRINT_ERROR(" (%s:%d)\n", FILE_ini, 231);
1602 fatal_exit(1);
1603 }
1604 var3 = var5;
1605 RET_LABEL4:(void)0;
1606 }
1607 }
1608 {
1609 core___core__Array___core__abstract_collection__SimpleCollection__add_all(var_todo, var3); /* Direct call array$Array$add_all on <var_todo:Array[ConfigNode]>*/
1610 }
1611 for(;;) {
1612 {
1613 var6 = core___core__AbstractArrayRead___core__abstract_collection__Collection__is_empty(var_todo);
1614 }
1615 var7 = !var6;
1616 if (var7){
1617 {
1618 var8 = core___core__AbstractArray___core__abstract_collection__Sequence__pop(var_todo);
1619 }
1620 var_node = var8;
1621 {
1622 { /* Inline ini$ConfigNode$children (var_node) on <var_node:ConfigNode> */
1623 var11 = var_node->attrs[COLOR_ini__ConfigNode___children].val; /* _children on <var_node:ConfigNode> */
1624 if (unlikely(var11 == NULL)) {
1625 if(catchStack.cursor >= 0){
1626 longjmp(catchStack.envs[catchStack.cursor], 1);
1627 }
1628 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _children");
1629 PRINT_ERROR(" (%s:%d)\n", FILE_ini, 304);
1630 fatal_exit(1);
1631 }
1632 var9 = var11;
1633 RET_LABEL10:(void)0;
1634 }
1635 }
1636 {
1637 var12 = core___core__HashMap___core__abstract_collection__MapRead__is_empty(var9);
1638 }
1639 if (var12){
1640 {
1641 core___core__Array___core__abstract_collection__SimpleCollection__add(var_res, var_node); /* Direct call array$Array$add on <var_res:Array[ConfigNode]>*/
1642 }
1643 } else {
1644 {
1645 { /* Inline ini$ConfigNode$children (var_node) on <var_node:ConfigNode> */
1646 var15 = var_node->attrs[COLOR_ini__ConfigNode___children].val; /* _children on <var_node:ConfigNode> */
1647 if (unlikely(var15 == NULL)) {
1648 if(catchStack.cursor >= 0){
1649 longjmp(catchStack.envs[catchStack.cursor], 1);
1650 }
1651 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _children");
1652 PRINT_ERROR(" (%s:%d)\n", FILE_ini, 304);
1653 fatal_exit(1);
1654 }
1655 var13 = var15;
1656 RET_LABEL14:(void)0;
1657 }
1658 }
1659 {
1660 var16 = core___core__HashMap___core__abstract_collection__MapRead__values(var13);
1661 }
1662 {
1663 core___core__Array___core__abstract_collection__SimpleCollection__add_all(var_todo, var16); /* Direct call array$Array$add_all on <var_todo:Array[ConfigNode]>*/
1664 }
1665 }
1666 } else {
1667 goto BREAK_label;
1668 }
1669 }
1670 BREAK_label: (void)0;
1671 var = var_res;
1672 goto RET_LABEL;
1673 RET_LABEL:;
1674 return var;
1675 }
1676 /* method ini$ConfigNode$parent for (self: ConfigNode): nullable ConfigNode */
1677 val* ini___ini__ConfigNode___parent(val* self) {
1678 val* var /* : nullable ConfigNode */;
1679 val* var1 /* : nullable ConfigNode */;
1680 var1 = self->attrs[COLOR_ini__ConfigNode___parent].val; /* _parent on <self:ConfigNode> */
1681 var = var1;
1682 RET_LABEL:;
1683 return var;
1684 }
1685 /* method ini$ConfigNode$parent= for (self: ConfigNode, nullable ConfigNode) */
1686 void ini___ini__ConfigNode___parent_61d(val* self, val* p0) {
1687 self->attrs[COLOR_ini__ConfigNode___parent].val = p0; /* _parent on <self:ConfigNode> */
1688 RET_LABEL:;
1689 }
1690 /* method ini$ConfigNode$children for (self: ConfigNode): HashMap[String, ConfigNode] */
1691 val* ini___ini__ConfigNode___children(val* self) {
1692 val* var /* : HashMap[String, ConfigNode] */;
1693 val* var1 /* : HashMap[String, ConfigNode] */;
1694 var1 = self->attrs[COLOR_ini__ConfigNode___children].val; /* _children on <self:ConfigNode> */
1695 if (unlikely(var1 == NULL)) {
1696 if(catchStack.cursor >= 0){
1697 longjmp(catchStack.envs[catchStack.cursor], 1);
1698 }
1699 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _children");
1700 PRINT_ERROR(" (%s:%d)\n", FILE_ini, 304);
1701 fatal_exit(1);
1702 }
1703 var = var1;
1704 RET_LABEL:;
1705 return var;
1706 }
1707 /* method ini$ConfigNode$name for (self: ConfigNode): String */
1708 val* ini___ini__ConfigNode___name(val* self) {
1709 val* var /* : String */;
1710 val* var1 /* : String */;
1711 var1 = self->attrs[COLOR_ini__ConfigNode___name].val; /* _name on <self:ConfigNode> */
1712 if (unlikely(var1 == NULL)) {
1713 if(catchStack.cursor >= 0){
1714 longjmp(catchStack.envs[catchStack.cursor], 1);
1715 }
1716 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _name");
1717 PRINT_ERROR(" (%s:%d)\n", FILE_ini, 305);
1718 fatal_exit(1);
1719 }
1720 var = var1;
1721 RET_LABEL:;
1722 return var;
1723 }
1724 /* method ini$ConfigNode$name= for (self: ConfigNode, String) */
1725 void ini___ini__ConfigNode___name_61d(val* self, val* p0) {
1726 self->attrs[COLOR_ini__ConfigNode___name].val = p0; /* _name on <self:ConfigNode> */
1727 RET_LABEL:;
1728 }
1729 /* method ini$ConfigNode$value for (self: ConfigNode): nullable String */
1730 val* ini___ini__ConfigNode___value(val* self) {
1731 val* var /* : nullable String */;
1732 val* var1 /* : nullable String */;
1733 var1 = self->attrs[COLOR_ini__ConfigNode___value].val; /* _value on <self:ConfigNode> */
1734 var = var1;
1735 RET_LABEL:;
1736 return var;
1737 }
1738 /* method ini$ConfigNode$value= for (self: ConfigNode, nullable String) */
1739 void ini___ini__ConfigNode___value_61d(val* self, val* p0) {
1740 self->attrs[COLOR_ini__ConfigNode___value].val = p0; /* _value on <self:ConfigNode> */
1741 RET_LABEL:;
1742 }
1743 /* method ini$ConfigNode$key for (self: ConfigNode): String */
1744 val* ini___ini__ConfigNode___key(val* self) {
1745 val* var /* : String */;
1746 val* var1 /* : nullable ConfigNode */;
1747 val* var3 /* : nullable ConfigNode */;
1748 short int var4 /* : Bool */;
1749 short int var5 /* : Bool */;
1750 val* var_other /* var other: nullable Object */;
1751 short int var7 /* : Bool */;
1752 short int var9 /* : Bool */;
1753 val* var10 /* : String */;
1754 val* var12 /* : String */;
1755 val* var13 /* : NativeArray[String] */;
1756 static val* varonce;
1757 static val* varonce14;
1758 val* var15 /* : String */;
1759 char* var16 /* : CString */;
1760 val* var17 /* : String */;
1761 val* var18 /* : nullable Int */;
1762 val* var19 /* : nullable Int */;
1763 val* var20 /* : nullable Bool */;
1764 val* var21 /* : nullable Bool */;
1765 val* var22 /* : nullable ConfigNode */;
1766 val* var24 /* : nullable ConfigNode */;
1767 val* var25 /* : String */;
1768 val* var26 /* : String */;
1769 val* var28 /* : String */;
1770 val* var29 /* : String */;
1771 {
1772 { /* Inline ini$ConfigNode$parent (self) on <self:ConfigNode> */
1773 var3 = self->attrs[COLOR_ini__ConfigNode___parent].val; /* _parent on <self:ConfigNode> */
1774 var1 = var3;
1775 RET_LABEL2:(void)0;
1776 }
1777 }
1778 if (var1 == NULL) {
1779 var4 = 1; /* is null */
1780 } else {
1781 var4 = 0; /* arg is null but recv is not */
1782 }
1783 if (0) {
1784 { /* Inline kernel$Object$== (var1,((val*)NULL)) on <var1:nullable ConfigNode> */
1785 var_other = ((val*)NULL);
1786 {
1787 { /* Inline kernel$Object$is_same_instance (var1,var_other) on <var1:nullable ConfigNode(ConfigNode)> */
1788 var9 = var1 == var_other;
1789 var7 = var9;
1790 goto RET_LABEL8;
1791 RET_LABEL8:(void)0;
1792 }
1793 }
1794 var5 = var7;
1795 goto RET_LABEL6;
1796 RET_LABEL6:(void)0;
1797 }
1798 var4 = var5;
1799 }
1800 if (var4){
1801 {
1802 { /* Inline ini$ConfigNode$name (self) on <self:ConfigNode> */
1803 var12 = self->attrs[COLOR_ini__ConfigNode___name].val; /* _name on <self:ConfigNode> */
1804 if (unlikely(var12 == NULL)) {
1805 if(catchStack.cursor >= 0){
1806 longjmp(catchStack.envs[catchStack.cursor], 1);
1807 }
1808 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _name");
1809 PRINT_ERROR(" (%s:%d)\n", FILE_ini, 305);
1810 fatal_exit(1);
1811 }
1812 var10 = var12;
1813 RET_LABEL11:(void)0;
1814 }
1815 }
1816 var = var10;
1817 goto RET_LABEL;
1818 } else {
1819 }
1820 if (unlikely(varonce==NULL)) {
1821 var13 = NEW_core__NativeArray((int)3l, &type_core__NativeArray__core__String);
1822 if (likely(varonce14!=NULL)) {
1823 var15 = varonce14;
1824 } else {
1825 var16 = ".";
1826 var18 = (val*)(1l<<2|1);
1827 var19 = (val*)(1l<<2|1);
1828 var20 = (val*)((long)(0)<<2|3);
1829 var21 = (val*)((long)(0)<<2|3);
1830 var17 = core__flat___CString___to_s_unsafe(var16, var18, var19, var20, var21);
1831 var15 = var17;
1832 varonce14 = var15;
1833 }
1834 ((struct instance_core__NativeArray*)var13)->values[1]=var15;
1835 } else {
1836 var13 = varonce;
1837 varonce = NULL;
1838 }
1839 {
1840 { /* Inline ini$ConfigNode$parent (self) on <self:ConfigNode> */
1841 var24 = self->attrs[COLOR_ini__ConfigNode___parent].val; /* _parent on <self:ConfigNode> */
1842 var22 = var24;
1843 RET_LABEL23:(void)0;
1844 }
1845 }
1846 if (var22 == NULL) {
1847 if(catchStack.cursor >= 0){
1848 longjmp(catchStack.envs[catchStack.cursor], 1);
1849 }
1850 PRINT_ERROR("Runtime error: %s", "Receiver is null");
1851 PRINT_ERROR(" (%s:%d)\n", FILE_ini, 312);
1852 fatal_exit(1);
1853 } else {
1854 var25 = ini___ini__ConfigNode___key(var22);
1855 }
1856 ((struct instance_core__NativeArray*)var13)->values[0]=var25;
1857 {
1858 { /* Inline ini$ConfigNode$name (self) on <self:ConfigNode> */
1859 var28 = self->attrs[COLOR_ini__ConfigNode___name].val; /* _name on <self:ConfigNode> */
1860 if (unlikely(var28 == NULL)) {
1861 if(catchStack.cursor >= 0){
1862 longjmp(catchStack.envs[catchStack.cursor], 1);
1863 }
1864 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _name");
1865 PRINT_ERROR(" (%s:%d)\n", FILE_ini, 305);
1866 fatal_exit(1);
1867 }
1868 var26 = var28;
1869 RET_LABEL27:(void)0;
1870 }
1871 }
1872 ((struct instance_core__NativeArray*)var13)->values[2]=var26;
1873 {
1874 var29 = ((val*(*)(val* self))(var13->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var13); /* native_to_s on <var13:NativeArray[String]>*/
1875 }
1876 varonce = var13;
1877 var = var29;
1878 goto RET_LABEL;
1879 RET_LABEL:;
1880 return var;
1881 }
1882 /* method ini$ConfigNode$get_child for (self: ConfigNode, String): nullable ConfigNode */
1883 val* ini___ini__ConfigNode___get_child(val* self, val* p0) {
1884 val* var /* : nullable ConfigNode */;
1885 val* var_name /* var name: String */;
1886 val* var1 /* : HashMap[String, ConfigNode] */;
1887 val* var3 /* : HashMap[String, ConfigNode] */;
1888 short int var4 /* : Bool */;
1889 val* var5 /* : HashMap[String, ConfigNode] */;
1890 val* var7 /* : HashMap[String, ConfigNode] */;
1891 val* var8 /* : nullable Object */;
1892 var_name = p0;
1893 {
1894 { /* Inline ini$ConfigNode$children (self) on <self:ConfigNode> */
1895 var3 = self->attrs[COLOR_ini__ConfigNode___children].val; /* _children on <self:ConfigNode> */
1896 if (unlikely(var3 == NULL)) {
1897 if(catchStack.cursor >= 0){
1898 longjmp(catchStack.envs[catchStack.cursor], 1);
1899 }
1900 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _children");
1901 PRINT_ERROR(" (%s:%d)\n", FILE_ini, 304);
1902 fatal_exit(1);
1903 }
1904 var1 = var3;
1905 RET_LABEL2:(void)0;
1906 }
1907 }
1908 {
1909 var4 = core___core__HashMap___core__abstract_collection__MapRead__has_key(var1, var_name);
1910 }
1911 if (var4){
1912 {
1913 { /* Inline ini$ConfigNode$children (self) on <self:ConfigNode> */
1914 var7 = self->attrs[COLOR_ini__ConfigNode___children].val; /* _children on <self:ConfigNode> */
1915 if (unlikely(var7 == NULL)) {
1916 if(catchStack.cursor >= 0){
1917 longjmp(catchStack.envs[catchStack.cursor], 1);
1918 }
1919 PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _children");
1920 PRINT_ERROR(" (%s:%d)\n", FILE_ini, 304);
1921 fatal_exit(1);
1922 }
1923 var5 = var7;
1924 RET_LABEL6:(void)0;
1925 }
1926 }
1927 {
1928 var8 = core___core__HashMap___core__abstract_collection__MapRead___91d_93d(var5, var_name);
1929 }
1930 var = var8;
1931 goto RET_LABEL;
1932 } else {
1933 }
1934 var = ((val*)NULL);
1935 goto RET_LABEL;
1936 RET_LABEL:;
1937 return var;
1938 }
1939 /* method ini$ConfigNode$init for (self: ConfigNode) */
1940 void ini___ini__ConfigNode___core__kernel__Object__init(val* self) {
1941 {
1942 ((void(*)(val* self))(self->class->vft[COLOR_ini___ini__ConfigNode___core__kernel__Object__init]))(self); /* init on <self:ConfigNode>*/
1943 }
1944 RET_LABEL:;
1945 }