+/* method abstract_compiler#AbstractCompiler#compile_main_function for (self: AbstractCompiler) */
+void abstract_compiler__AbstractCompiler__compile_main_function(val* self) {
+val* var /* : AbstractCompilerVisitor */;
+val* var_v /* var v: AbstractCompilerVisitor */;
+val* var1 /* : ModelBuilder */;
+val* var2 /* : ToolContext */;
+val* var3 /* : OptionBool */;
+val* var4 /* : nullable Object */;
+short int var5 /* : Bool */;
+static val* varonce;
+val* var6 /* : String */;
+char* var7 /* : NativeString */;
+long var8 /* : Int */;
+val* var9 /* : String */;
+static val* varonce10;
+val* var11 /* : String */;
+char* var12 /* : NativeString */;
+long var13 /* : Int */;
+val* var14 /* : String */;
+val* var15 /* : ModelBuilder */;
+val* var16 /* : ToolContext */;
+val* var17 /* : OptionBool */;
+val* var18 /* : nullable Object */;
+short int var19 /* : Bool */;
+short int var20 /* : Bool */;
+static val* varonce21;
+val* var22 /* : String */;
+char* var23 /* : NativeString */;
+long var24 /* : Int */;
+val* var25 /* : String */;
+static val* varonce26;
+val* var27 /* : String */;
+char* var28 /* : NativeString */;
+long var29 /* : Int */;
+val* var30 /* : String */;
+static val* varonce31;
+val* var32 /* : String */;
+char* var33 /* : NativeString */;
+long var34 /* : Int */;
+val* var35 /* : String */;
+static val* varonce36;
+val* var37 /* : String */;
+char* var38 /* : NativeString */;
+long var39 /* : Int */;
+val* var40 /* : String */;
+static val* varonce41;
+val* var42 /* : String */;
+char* var43 /* : NativeString */;
+long var44 /* : Int */;
+val* var45 /* : String */;
+val* var46 /* : ModelBuilder */;
+val* var47 /* : ToolContext */;
+val* var48 /* : OptionBool */;
+val* var49 /* : nullable Object */;
+short int var50 /* : Bool */;
+val* var51 /* : Array[String] */;
+val* var52 /* : Iterator[nullable Object] */;
+short int var53 /* : Bool */;
+val* var54 /* : nullable Object */;
+val* var_tag /* var tag: String */;
+static val* varonce55;
+val* var56 /* : String */;
+char* var57 /* : NativeString */;
+long var58 /* : Int */;
+val* var59 /* : String */;
+static val* varonce60;
+val* var61 /* : String */;
+char* var62 /* : NativeString */;
+long var63 /* : Int */;
+val* var64 /* : String */;
+val* var65 /* : Array[Object] */;
+long var66 /* : Int */;
+val* var67 /* : NativeArray[Object] */;
+val* var68 /* : String */;
+static val* varonce69;
+val* var70 /* : String */;
+char* var71 /* : NativeString */;
+long var72 /* : Int */;
+val* var73 /* : String */;
+static val* varonce74;
+val* var75 /* : String */;
+char* var76 /* : NativeString */;
+long var77 /* : Int */;
+val* var78 /* : String */;
+val* var79 /* : Array[Object] */;
+long var80 /* : Int */;
+val* var81 /* : NativeArray[Object] */;
+val* var82 /* : String */;
+static val* varonce83;
+val* var84 /* : String */;
+char* var85 /* : NativeString */;
+long var86 /* : Int */;
+val* var87 /* : String */;
+static val* varonce88;
+val* var89 /* : String */;
+char* var90 /* : NativeString */;
+long var91 /* : Int */;
+val* var92 /* : String */;
+val* var93 /* : Array[Object] */;
+long var94 /* : Int */;
+val* var95 /* : NativeArray[Object] */;
+val* var96 /* : String */;
+val* var97 /* : AbstractCompiler */;
+val* var98 /* : CodeWriter */;
+static val* varonce99;
+val* var100 /* : String */;
+char* var101 /* : NativeString */;
+long var102 /* : Int */;
+val* var103 /* : String */;
+static val* varonce104;
+val* var105 /* : String */;
+char* var106 /* : NativeString */;
+long var107 /* : Int */;
+val* var108 /* : String */;
+val* var109 /* : Array[Object] */;
+long var110 /* : Int */;
+val* var111 /* : NativeArray[Object] */;
+val* var112 /* : String */;
+val* var113 /* : AbstractCompiler */;
+val* var114 /* : CodeWriter */;
+static val* varonce115;
+val* var116 /* : String */;
+char* var117 /* : NativeString */;
+long var118 /* : Int */;
+val* var119 /* : String */;
+static val* varonce120;
+val* var121 /* : String */;
+char* var122 /* : NativeString */;
+long var123 /* : Int */;
+val* var124 /* : String */;
+val* var125 /* : Array[Object] */;
+long var126 /* : Int */;
+val* var127 /* : NativeArray[Object] */;
+val* var128 /* : String */;
+val* var129 /* : AbstractCompiler */;
+val* var130 /* : CodeWriter */;
+static val* varonce131;
+val* var132 /* : String */;
+char* var133 /* : NativeString */;
+long var134 /* : Int */;
+val* var135 /* : String */;
+static val* varonce136;
+val* var137 /* : String */;
+char* var138 /* : NativeString */;
+long var139 /* : Int */;
+val* var140 /* : String */;
+val* var141 /* : Array[Object] */;
+long var142 /* : Int */;
+val* var143 /* : NativeArray[Object] */;
+val* var144 /* : String */;
+static val* varonce145;
+val* var146 /* : String */;
+char* var147 /* : NativeString */;
+long var148 /* : Int */;
+val* var149 /* : String */;
+static val* varonce150;
+val* var151 /* : String */;
+char* var152 /* : NativeString */;
+long var153 /* : Int */;
+val* var154 /* : String */;
+static val* varonce155;
+val* var156 /* : String */;
+char* var157 /* : NativeString */;
+long var158 /* : Int */;
+val* var159 /* : String */;
+static val* varonce160;
+val* var161 /* : String */;
+char* var162 /* : NativeString */;
+long var163 /* : Int */;
+val* var164 /* : String */;
+static val* varonce165;
+val* var166 /* : String */;
+char* var167 /* : NativeString */;
+long var168 /* : Int */;
+val* var169 /* : String */;
+val* var170 /* : ModelBuilder */;
+val* var171 /* : ToolContext */;
+val* var172 /* : OptionBool */;
+val* var173 /* : nullable Object */;
+short int var174 /* : Bool */;
+short int var175 /* : Bool */;
+static val* varonce176;
+val* var177 /* : String */;
+char* var178 /* : NativeString */;
+long var179 /* : Int */;
+val* var180 /* : String */;
+static val* varonce181;
+val* var182 /* : String */;
+char* var183 /* : NativeString */;
+long var184 /* : Int */;
+val* var185 /* : String */;
+static val* varonce186;
+val* var187 /* : String */;
+char* var188 /* : NativeString */;
+long var189 /* : Int */;
+val* var190 /* : String */;
+static val* varonce191;
+val* var192 /* : String */;
+char* var193 /* : NativeString */;
+long var194 /* : Int */;
+val* var195 /* : String */;
+static val* varonce196;
+val* var197 /* : String */;
+char* var198 /* : NativeString */;
+long var199 /* : Int */;
+val* var200 /* : String */;
+static val* varonce201;
+val* var202 /* : String */;
+char* var203 /* : NativeString */;
+long var204 /* : Int */;
+val* var205 /* : String */;
+static val* varonce206;
+val* var207 /* : String */;
+char* var208 /* : NativeString */;
+long var209 /* : Int */;
+val* var210 /* : String */;
+static val* varonce211;
+val* var212 /* : String */;
+char* var213 /* : NativeString */;
+long var214 /* : Int */;
+val* var215 /* : String */;
+static val* varonce216;
+val* var217 /* : String */;
+char* var218 /* : NativeString */;
+long var219 /* : Int */;
+val* var220 /* : String */;
+static val* varonce221;
+val* var222 /* : String */;
+char* var223 /* : NativeString */;
+long var224 /* : Int */;
+val* var225 /* : String */;
+static val* varonce226;
+val* var227 /* : String */;
+char* var228 /* : NativeString */;
+long var229 /* : Int */;
+val* var230 /* : String */;
+static val* varonce231;
+val* var232 /* : String */;
+char* var233 /* : NativeString */;
+long var234 /* : Int */;
+val* var235 /* : String */;
+static val* varonce236;
+val* var237 /* : String */;
+char* var238 /* : NativeString */;
+long var239 /* : Int */;
+val* var240 /* : String */;
+val* var241 /* : ModelBuilder */;
+val* var242 /* : ToolContext */;
+val* var243 /* : OptionBool */;
+val* var244 /* : nullable Object */;
+short int var245 /* : Bool */;
+static val* varonce246;
+val* var247 /* : String */;
+char* var248 /* : NativeString */;
+long var249 /* : Int */;
+val* var250 /* : String */;
+static val* varonce251;
+val* var252 /* : String */;
+char* var253 /* : NativeString */;
+long var254 /* : Int */;
+val* var255 /* : String */;
+static val* varonce256;
+val* var257 /* : String */;
+char* var258 /* : NativeString */;
+long var259 /* : Int */;
+val* var260 /* : String */;
+static val* varonce261;
+val* var262 /* : String */;
+char* var263 /* : NativeString */;
+long var264 /* : Int */;
+val* var265 /* : String */;
+static val* varonce266;
+val* var267 /* : String */;
+char* var268 /* : NativeString */;
+long var269 /* : Int */;
+val* var270 /* : String */;
+static val* varonce271;
+val* var272 /* : String */;
+char* var273 /* : NativeString */;
+long var274 /* : Int */;
+val* var275 /* : String */;
+static val* varonce276;
+val* var277 /* : String */;
+char* var278 /* : NativeString */;
+long var279 /* : Int */;
+val* var280 /* : String */;
+static val* varonce281;
+val* var282 /* : String */;
+char* var283 /* : NativeString */;
+long var284 /* : Int */;
+val* var285 /* : String */;
+static val* varonce286;
+val* var287 /* : String */;
+char* var288 /* : NativeString */;
+long var289 /* : Int */;
+val* var290 /* : String */;
+static val* varonce291;
+val* var292 /* : String */;
+char* var293 /* : NativeString */;
+long var294 /* : Int */;
+val* var295 /* : String */;
+static val* varonce296;
+val* var297 /* : String */;
+char* var298 /* : NativeString */;
+long var299 /* : Int */;
+val* var300 /* : String */;
+static val* varonce301;
+val* var302 /* : String */;
+char* var303 /* : NativeString */;
+long var304 /* : Int */;
+val* var305 /* : String */;
+static val* varonce306;
+val* var307 /* : String */;
+char* var308 /* : NativeString */;
+long var309 /* : Int */;
+val* var310 /* : String */;
+static val* varonce311;
+val* var312 /* : String */;
+char* var313 /* : NativeString */;
+long var314 /* : Int */;
+val* var315 /* : String */;
+static val* varonce316;
+val* var317 /* : String */;
+char* var318 /* : NativeString */;
+long var319 /* : Int */;
+val* var320 /* : String */;
+static val* varonce321;
+val* var322 /* : String */;
+char* var323 /* : NativeString */;
+long var324 /* : Int */;
+val* var325 /* : String */;
+static val* varonce326;
+val* var327 /* : String */;
+char* var328 /* : NativeString */;
+long var329 /* : Int */;
+val* var330 /* : String */;
+static val* varonce331;
+val* var332 /* : String */;
+char* var333 /* : NativeString */;
+long var334 /* : Int */;
+val* var335 /* : String */;
+static val* varonce336;
+val* var337 /* : String */;
+char* var338 /* : NativeString */;
+long var339 /* : Int */;
+val* var340 /* : String */;
+static val* varonce341;
+val* var342 /* : String */;
+char* var343 /* : NativeString */;
+long var344 /* : Int */;
+val* var345 /* : String */;
+static val* varonce346;
+val* var347 /* : String */;
+char* var348 /* : NativeString */;
+long var349 /* : Int */;
+val* var350 /* : String */;
+static val* varonce351;
+val* var352 /* : String */;
+char* var353 /* : NativeString */;
+long var354 /* : Int */;
+val* var355 /* : String */;
+val* var356 /* : MModule */;
+val* var357 /* : nullable MClassType */;
+val* var_main_type /* var main_type: nullable MClassType */;
+val* var358 /* : null */;
+short int var359 /* : Bool */;
+val* var360 /* : AbstractCompiler */;
+val* var361 /* : MModule */;
+val* var_mainmodule /* var mainmodule: MModule */;
+val* var362 /* : RuntimeVariable */;
+val* var_glob_sys /* var glob_sys: RuntimeVariable */;
+static val* varonce363;
+val* var364 /* : String */;
+char* var365 /* : NativeString */;
+long var366 /* : Int */;
+val* var367 /* : String */;
+static val* varonce368;
+val* var369 /* : String */;
+char* var370 /* : NativeString */;
+long var371 /* : Int */;
+val* var372 /* : String */;
+val* var373 /* : Array[Object] */;
+long var374 /* : Int */;
+val* var375 /* : NativeArray[Object] */;
+val* var376 /* : String */;
+static val* varonce377;
+val* var378 /* : String */;
+char* var379 /* : NativeString */;
+long var380 /* : Int */;
+val* var381 /* : String */;
+val* var382 /* : MClass */;
+val* var383 /* : nullable MMethod */;
+val* var_main_init /* var main_init: nullable MMethod */;
+val* var384 /* : null */;
+short int var385 /* : Bool */;
+val* var386 /* : Array[RuntimeVariable] */;
+long var387 /* : Int */;
+val* var388 /* : NativeArray[RuntimeVariable] */;
+val* var389 /* : nullable RuntimeVariable */;
+static val* varonce390;
+val* var391 /* : String */;
+char* var392 /* : NativeString */;
+long var393 /* : Int */;
+val* var394 /* : String */;
+val* var395 /* : MClass */;
+val* var396 /* : nullable MMethod */;
+val* var_main_method /* var main_method: nullable MMethod */;
+val* var397 /* : null */;
+short int var398 /* : Bool */;
+val* var399 /* : Array[RuntimeVariable] */;
+long var400 /* : Int */;
+val* var401 /* : NativeArray[RuntimeVariable] */;
+val* var402 /* : nullable RuntimeVariable */;
+val* var403 /* : ModelBuilder */;
+val* var404 /* : ToolContext */;
+val* var405 /* : OptionBool */;
+val* var406 /* : nullable Object */;
+short int var407 /* : Bool */;
+static val* varonce408;
+val* var409 /* : String */;
+char* var410 /* : NativeString */;
+long var411 /* : Int */;
+val* var412 /* : String */;
+static val* varonce413;
+val* var414 /* : String */;
+char* var415 /* : NativeString */;
+long var416 /* : Int */;
+val* var417 /* : String */;
+static val* varonce418;
+val* var419 /* : String */;
+char* var420 /* : NativeString */;
+long var421 /* : Int */;
+val* var422 /* : String */;
+static val* varonce423;
+val* var424 /* : String */;
+char* var425 /* : NativeString */;
+long var426 /* : Int */;
+val* var427 /* : String */;
+val* var428 /* : Array[String] */;
+val* var429 /* : Iterator[nullable Object] */;
+short int var430 /* : Bool */;
+val* var431 /* : nullable Object */;
+val* var_tag432 /* var tag: String */;
+static val* varonce433;
+val* var434 /* : String */;
+char* var435 /* : NativeString */;
+long var436 /* : Int */;
+val* var437 /* : String */;
+static val* varonce438;
+val* var439 /* : String */;
+char* var440 /* : NativeString */;
+long var441 /* : Int */;
+val* var442 /* : String */;
+val* var443 /* : Array[Object] */;
+long var444 /* : Int */;
+val* var445 /* : NativeArray[Object] */;
+val* var446 /* : String */;
+static val* varonce447;
+val* var448 /* : String */;
+char* var449 /* : NativeString */;
+long var450 /* : Int */;
+val* var451 /* : String */;
+static val* varonce452;
+val* var453 /* : String */;
+char* var454 /* : NativeString */;
+long var455 /* : Int */;
+val* var456 /* : String */;
+static val* varonce457;
+val* var458 /* : String */;
+char* var459 /* : NativeString */;
+long var460 /* : Int */;
+val* var461 /* : String */;
+static val* varonce462;
+val* var463 /* : String */;
+char* var464 /* : NativeString */;
+long var465 /* : Int */;
+val* var466 /* : String */;
+static val* varonce467;
+val* var468 /* : String */;
+char* var469 /* : NativeString */;
+long var470 /* : Int */;
+val* var471 /* : String */;
+val* var472 /* : Array[Object] */;
+long var473 /* : Int */;
+val* var474 /* : NativeArray[Object] */;
+val* var475 /* : String */;
+static val* varonce476;
+val* var477 /* : String */;
+char* var478 /* : NativeString */;
+long var479 /* : Int */;
+val* var480 /* : String */;
+static val* varonce481;
+val* var482 /* : String */;
+char* var483 /* : NativeString */;
+long var484 /* : Int */;
+val* var485 /* : String */;
+val* var486 /* : Array[Object] */;
+long var487 /* : Int */;
+val* var488 /* : NativeArray[Object] */;
+val* var489 /* : String */;
+static val* varonce490;
+val* var491 /* : String */;
+char* var492 /* : NativeString */;
+long var493 /* : Int */;
+val* var494 /* : String */;
+static val* varonce495;
+val* var496 /* : String */;
+char* var497 /* : NativeString */;
+long var498 /* : Int */;
+val* var499 /* : String */;
+val* var500 /* : Array[Object] */;
+long var501 /* : Int */;
+val* var502 /* : NativeArray[Object] */;
+val* var503 /* : String */;
+static val* varonce504;
+val* var505 /* : String */;
+char* var506 /* : NativeString */;
+long var507 /* : Int */;
+val* var508 /* : String */;
+static val* varonce509;
+val* var510 /* : String */;
+char* var511 /* : NativeString */;
+long var512 /* : Int */;
+val* var513 /* : String */;
+val* var514 /* : Array[Object] */;
+long var515 /* : Int */;
+val* var516 /* : NativeArray[Object] */;
+val* var517 /* : String */;
+static val* varonce518;
+val* var519 /* : String */;
+char* var520 /* : NativeString */;
+long var521 /* : Int */;
+val* var522 /* : String */;
+static val* varonce523;
+val* var524 /* : String */;
+char* var525 /* : NativeString */;
+long var526 /* : Int */;
+val* var527 /* : String */;
+val* var528 /* : Array[Object] */;
+long var529 /* : Int */;
+val* var530 /* : NativeArray[Object] */;
+val* var531 /* : String */;
+static val* varonce533;
+val* var534 /* : String */;
+char* var535 /* : NativeString */;
+long var536 /* : Int */;
+val* var537 /* : String */;
+static val* varonce538;
+val* var539 /* : String */;
+char* var540 /* : NativeString */;
+long var541 /* : Int */;
+val* var542 /* : String */;
+val* var543 /* : Array[String] */;
+val* var544 /* : Array[nullable Object] */;
+val* var_tags /* var tags: Array[String] */;
+static val* varonce545;
+val* var546 /* : String */;
+char* var547 /* : NativeString */;
+long var548 /* : Int */;
+val* var549 /* : String */;
+val* var550 /* : Iterator[nullable Object] */;
+short int var551 /* : Bool */;
+val* var552 /* : nullable Object */;
+val* var_tag553 /* var tag: String */;
+static val* varonce554;
+val* var555 /* : String */;
+char* var556 /* : NativeString */;
+long var557 /* : Int */;
+val* var558 /* : String */;
+static val* varonce559;
+val* var560 /* : String */;
+char* var561 /* : NativeString */;
+long var562 /* : Int */;
+val* var563 /* : String */;
+val* var564 /* : Array[Object] */;
+long var565 /* : Int */;
+val* var566 /* : NativeArray[Object] */;
+val* var567 /* : String */;
+static val* varonce568;
+val* var569 /* : String */;
+char* var570 /* : NativeString */;
+long var571 /* : Int */;
+val* var572 /* : String */;
+static val* varonce573;
+val* var574 /* : String */;
+char* var575 /* : NativeString */;
+long var576 /* : Int */;
+val* var577 /* : String */;
+static val* varonce578;
+val* var579 /* : String */;
+char* var580 /* : NativeString */;
+long var581 /* : Int */;
+val* var582 /* : String */;
+val* var583 /* : Array[Object] */;
+long var584 /* : Int */;
+val* var585 /* : NativeArray[Object] */;
+val* var586 /* : String */;
+static val* varonce587;
+val* var588 /* : String */;
+char* var589 /* : NativeString */;
+long var590 /* : Int */;
+val* var591 /* : String */;
+static val* varonce592;
+val* var593 /* : String */;
+char* var594 /* : NativeString */;
+long var595 /* : Int */;
+val* var596 /* : String */;
+static val* varonce597;
+val* var598 /* : String */;
+char* var599 /* : NativeString */;
+long var600 /* : Int */;
+val* var601 /* : String */;
+val* var602 /* : Array[Object] */;
+long var603 /* : Int */;
+val* var604 /* : NativeArray[Object] */;
+val* var605 /* : String */;
+static val* varonce606;
+val* var607 /* : String */;
+char* var608 /* : NativeString */;
+long var609 /* : Int */;
+val* var610 /* : String */;
+static val* varonce611;
+val* var612 /* : String */;
+char* var613 /* : NativeString */;
+long var614 /* : Int */;
+val* var615 /* : String */;
+static val* varonce616;
+val* var617 /* : String */;
+char* var618 /* : NativeString */;
+long var619 /* : Int */;
+val* var620 /* : String */;
+val* var621 /* : Array[Object] */;
+long var622 /* : Int */;
+val* var623 /* : NativeArray[Object] */;
+val* var624 /* : String */;
+static val* varonce625;
+val* var626 /* : String */;
+char* var627 /* : NativeString */;
+long var628 /* : Int */;
+val* var629 /* : String */;
+static val* varonce630;
+val* var631 /* : String */;
+char* var632 /* : NativeString */;
+long var633 /* : Int */;
+val* var634 /* : String */;
+static val* varonce635;
+val* var636 /* : String */;
+char* var637 /* : NativeString */;
+long var638 /* : Int */;
+val* var639 /* : String */;
+val* var640 /* : Array[Object] */;
+long var641 /* : Int */;
+val* var642 /* : NativeArray[Object] */;
+val* var643 /* : String */;
+static val* varonce645;
+val* var646 /* : String */;
+char* var647 /* : NativeString */;
+long var648 /* : Int */;
+val* var649 /* : String */;
+static val* varonce650;
+val* var651 /* : String */;
+char* var652 /* : NativeString */;
+long var653 /* : Int */;
+val* var654 /* : String */;
+var = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__new_visitor]))(self) /* new_visitor on <self:AbstractCompiler>*/;
+var_v = var;
+var1 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(self) /* modelbuilder on <self:AbstractCompiler>*/;
+var2 = ((val* (*)(val*))(var1->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(var1) /* toolcontext on <var1:ModelBuilder>*/;
+var3 = ((val* (*)(val*))(var2->class->vft[COLOR_abstract_compiler__ToolContext__opt_stacktrace]))(var2) /* opt_stacktrace on <var2:ToolContext>*/;
+var4 = ((val* (*)(val*))(var3->class->vft[COLOR_opts__Option__value]))(var3) /* value on <var3:OptionBool>*/;
+var5 = ((struct instance_kernel__Bool*)var4)->value; /* autounbox from nullable Object to Bool */;
+if (var5){
+if (varonce) {
+var6 = varonce;
+} else {
+var7 = "#include \"c_functions_hash.h\"";
+var8 = 29;
+var9 = string__NativeString__to_s_with_length(var7, var8);
+var6 = var9;
+varonce = var6;
+}
+((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var6) /* add_decl on <var_v:AbstractCompilerVisitor>*/;
+} else {
+}
+if (varonce10) {
+var11 = varonce10;
+} else {
+var12 = "#include <signal.h>";
+var13 = 19;
+var14 = string__NativeString__to_s_with_length(var12, var13);
+var11 = var14;
+varonce10 = var11;
+}
+((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var11) /* add_decl on <var_v:AbstractCompilerVisitor>*/;
+var15 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(self) /* modelbuilder on <self:AbstractCompiler>*/;
+var16 = ((val* (*)(val*))(var15->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(var15) /* toolcontext on <var15:ModelBuilder>*/;
+var17 = ((val* (*)(val*))(var16->class->vft[COLOR_abstract_compiler__ToolContext__opt_no_stacktrace]))(var16) /* opt_no_stacktrace on <var16:ToolContext>*/;
+var18 = ((val* (*)(val*))(var17->class->vft[COLOR_opts__Option__value]))(var17) /* value on <var17:OptionBool>*/;
+var19 = ((struct instance_kernel__Bool*)var18)->value; /* autounbox from nullable Object to Bool */;
+var20 = !var19;
+if (var20){
+if (varonce21) {
+var22 = varonce21;
+} else {
+var23 = "#define UNW_LOCAL_ONLY";
+var24 = 22;
+var25 = string__NativeString__to_s_with_length(var23, var24);
+var22 = var25;
+varonce21 = var22;
+}
+((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var22) /* add_decl on <var_v:AbstractCompilerVisitor>*/;
+if (varonce26) {
+var27 = varonce26;
+} else {
+var28 = "#include <libunwind.h>";
+var29 = 22;
+var30 = string__NativeString__to_s_with_length(var28, var29);
+var27 = var30;
+varonce26 = var27;
+}
+((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var27) /* add_decl on <var_v:AbstractCompilerVisitor>*/;
+} else {
+}
+if (varonce31) {
+var32 = varonce31;
+} else {
+var33 = "int glob_argc;";
+var34 = 14;
+var35 = string__NativeString__to_s_with_length(var33, var34);
+var32 = var35;
+varonce31 = var32;
+}
+((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var32) /* add_decl on <var_v:AbstractCompilerVisitor>*/;
+if (varonce36) {
+var37 = varonce36;
+} else {
+var38 = "char **glob_argv;";
+var39 = 17;
+var40 = string__NativeString__to_s_with_length(var38, var39);
+var37 = var40;
+varonce36 = var37;
+}
+((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var37) /* add_decl on <var_v:AbstractCompilerVisitor>*/;
+if (varonce41) {
+var42 = varonce41;
+} else {
+var43 = "val *glob_sys;";
+var44 = 14;
+var45 = string__NativeString__to_s_with_length(var43, var44);
+var42 = var45;
+varonce41 = var42;
+}
+((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var42) /* add_decl on <var_v:AbstractCompilerVisitor>*/;
+var46 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(self) /* modelbuilder on <self:AbstractCompiler>*/;
+var47 = ((val* (*)(val*))(var46->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(var46) /* toolcontext on <var46:ModelBuilder>*/;
+var48 = ((val* (*)(val*))(var47->class->vft[COLOR_abstract_compiler__ToolContext__opt_typing_test_metrics]))(var47) /* opt_typing_test_metrics on <var47:ToolContext>*/;
+var49 = ((val* (*)(val*))(var48->class->vft[COLOR_opts__Option__value]))(var48) /* value on <var48:OptionBool>*/;
+var50 = ((struct instance_kernel__Bool*)var49)->value; /* autounbox from nullable Object to Bool */;
+if (var50){
+var51 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__count_type_test_tags]))(self) /* count_type_test_tags on <self:AbstractCompiler>*/;
+var52 = ((val* (*)(val*))(var51->class->vft[COLOR_abstract_collection__Collection__iterator]))(var51) /* iterator on <var51:Array[String]>*/;
+for(;;) {
+var53 = ((short int (*)(val*))(var52->class->vft[COLOR_abstract_collection__Iterator__is_ok]))(var52) /* is_ok on <var52:Iterator[nullable Object]>*/;
+if(!var53) break;
+var54 = ((val* (*)(val*))(var52->class->vft[COLOR_abstract_collection__Iterator__item]))(var52) /* item on <var52:Iterator[nullable Object]>*/;
+var_tag = var54;
+if (varonce55) {
+var56 = varonce55;
+} else {
+var57 = "long count_type_test_resolved_";
+var58 = 30;
+var59 = string__NativeString__to_s_with_length(var57, var58);
+var56 = var59;
+varonce55 = var56;
+}
+if (varonce60) {
+var61 = varonce60;
+} else {
+var62 = ";";
+var63 = 1;
+var64 = string__NativeString__to_s_with_length(var62, var63);
+var61 = var64;
+varonce60 = var61;
+}
+var65 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var65 = array_instance Array[Object] */
+var66 = 3;
+var67 = NEW_array__NativeArray(var66, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var67)->values[0] = (val*) var56;
+((struct instance_array__NativeArray*)var67)->values[1] = (val*) var_tag;
+((struct instance_array__NativeArray*)var67)->values[2] = (val*) var61;
+((void (*)(val*, val*, long))(var65->class->vft[COLOR_array__Array__with_native]))(var65, var67, var66) /* with_native on <var65:Array[Object]>*/;
+}
+var68 = ((val* (*)(val*))(var65->class->vft[COLOR_string__Object__to_s]))(var65) /* to_s on <var65:Array[Object]>*/;
+((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var68) /* add_decl on <var_v:AbstractCompilerVisitor>*/;
+if (varonce69) {
+var70 = varonce69;
+} else {
+var71 = "long count_type_test_unresolved_";
+var72 = 32;
+var73 = string__NativeString__to_s_with_length(var71, var72);
+var70 = var73;
+varonce69 = var70;
+}
+if (varonce74) {
+var75 = varonce74;
+} else {
+var76 = ";";
+var77 = 1;
+var78 = string__NativeString__to_s_with_length(var76, var77);
+var75 = var78;
+varonce74 = var75;
+}
+var79 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var79 = array_instance Array[Object] */
+var80 = 3;
+var81 = NEW_array__NativeArray(var80, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var81)->values[0] = (val*) var70;
+((struct instance_array__NativeArray*)var81)->values[1] = (val*) var_tag;
+((struct instance_array__NativeArray*)var81)->values[2] = (val*) var75;
+((void (*)(val*, val*, long))(var79->class->vft[COLOR_array__Array__with_native]))(var79, var81, var80) /* with_native on <var79:Array[Object]>*/;
+}
+var82 = ((val* (*)(val*))(var79->class->vft[COLOR_string__Object__to_s]))(var79) /* to_s on <var79:Array[Object]>*/;
+((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var82) /* add_decl on <var_v:AbstractCompilerVisitor>*/;
+if (varonce83) {
+var84 = varonce83;
+} else {
+var85 = "long count_type_test_skipped_";
+var86 = 29;
+var87 = string__NativeString__to_s_with_length(var85, var86);
+var84 = var87;
+varonce83 = var84;
+}
+if (varonce88) {
+var89 = varonce88;
+} else {
+var90 = ";";
+var91 = 1;
+var92 = string__NativeString__to_s_with_length(var90, var91);
+var89 = var92;
+varonce88 = var89;
+}
+var93 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var93 = array_instance Array[Object] */
+var94 = 3;
+var95 = NEW_array__NativeArray(var94, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var95)->values[0] = (val*) var84;
+((struct instance_array__NativeArray*)var95)->values[1] = (val*) var_tag;
+((struct instance_array__NativeArray*)var95)->values[2] = (val*) var89;
+((void (*)(val*, val*, long))(var93->class->vft[COLOR_array__Array__with_native]))(var93, var95, var94) /* with_native on <var93:Array[Object]>*/;
+}
+var96 = ((val* (*)(val*))(var93->class->vft[COLOR_string__Object__to_s]))(var93) /* to_s on <var93:Array[Object]>*/;
+((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var96) /* add_decl on <var_v:AbstractCompilerVisitor>*/;
+var97 = ((val* (*)(val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(var_v) /* compiler on <var_v:AbstractCompilerVisitor>*/;
+var98 = ((val* (*)(val*))(var97->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(var97) /* header on <var97:AbstractCompiler>*/;
+if (varonce99) {
+var100 = varonce99;
+} else {
+var101 = "extern long count_type_test_resolved_";
+var102 = 37;
+var103 = string__NativeString__to_s_with_length(var101, var102);
+var100 = var103;
+varonce99 = var100;
+}
+if (varonce104) {
+var105 = varonce104;
+} else {
+var106 = ";";
+var107 = 1;
+var108 = string__NativeString__to_s_with_length(var106, var107);
+var105 = var108;
+varonce104 = var105;
+}
+var109 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var109 = array_instance Array[Object] */
+var110 = 3;
+var111 = NEW_array__NativeArray(var110, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var111)->values[0] = (val*) var100;
+((struct instance_array__NativeArray*)var111)->values[1] = (val*) var_tag;
+((struct instance_array__NativeArray*)var111)->values[2] = (val*) var105;
+((void (*)(val*, val*, long))(var109->class->vft[COLOR_array__Array__with_native]))(var109, var111, var110) /* with_native on <var109:Array[Object]>*/;
+}
+var112 = ((val* (*)(val*))(var109->class->vft[COLOR_string__Object__to_s]))(var109) /* to_s on <var109:Array[Object]>*/;
+((void (*)(val*, val*))(var98->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var98, var112) /* add_decl on <var98:CodeWriter>*/;
+var113 = ((val* (*)(val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(var_v) /* compiler on <var_v:AbstractCompilerVisitor>*/;
+var114 = ((val* (*)(val*))(var113->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(var113) /* header on <var113:AbstractCompiler>*/;
+if (varonce115) {
+var116 = varonce115;
+} else {
+var117 = "extern long count_type_test_unresolved_";
+var118 = 39;
+var119 = string__NativeString__to_s_with_length(var117, var118);
+var116 = var119;
+varonce115 = var116;
+}
+if (varonce120) {
+var121 = varonce120;
+} else {
+var122 = ";";
+var123 = 1;
+var124 = string__NativeString__to_s_with_length(var122, var123);
+var121 = var124;
+varonce120 = var121;
+}
+var125 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var125 = array_instance Array[Object] */
+var126 = 3;
+var127 = NEW_array__NativeArray(var126, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var127)->values[0] = (val*) var116;
+((struct instance_array__NativeArray*)var127)->values[1] = (val*) var_tag;
+((struct instance_array__NativeArray*)var127)->values[2] = (val*) var121;
+((void (*)(val*, val*, long))(var125->class->vft[COLOR_array__Array__with_native]))(var125, var127, var126) /* with_native on <var125:Array[Object]>*/;
+}
+var128 = ((val* (*)(val*))(var125->class->vft[COLOR_string__Object__to_s]))(var125) /* to_s on <var125:Array[Object]>*/;
+((void (*)(val*, val*))(var114->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var114, var128) /* add_decl on <var114:CodeWriter>*/;
+var129 = ((val* (*)(val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__compiler]))(var_v) /* compiler on <var_v:AbstractCompilerVisitor>*/;
+var130 = ((val* (*)(val*))(var129->class->vft[COLOR_abstract_compiler__AbstractCompiler__header]))(var129) /* header on <var129:AbstractCompiler>*/;
+if (varonce131) {
+var132 = varonce131;
+} else {
+var133 = "extern long count_type_test_skipped_";
+var134 = 36;
+var135 = string__NativeString__to_s_with_length(var133, var134);
+var132 = var135;
+varonce131 = var132;
+}
+if (varonce136) {
+var137 = varonce136;
+} else {
+var138 = ";";
+var139 = 1;
+var140 = string__NativeString__to_s_with_length(var138, var139);
+var137 = var140;
+varonce136 = var137;
+}
+var141 = NEW_array__Array(&type_array__Arraykernel__Object);
+{ /* var141 = array_instance Array[Object] */
+var142 = 3;
+var143 = NEW_array__NativeArray(var142, &type_array__NativeArraykernel__Object);
+((struct instance_array__NativeArray*)var143)->values[0] = (val*) var132;
+((struct instance_array__NativeArray*)var143)->values[1] = (val*) var_tag;
+((struct instance_array__NativeArray*)var143)->values[2] = (val*) var137;
+((void (*)(val*, val*, long))(var141->class->vft[COLOR_array__Array__with_native]))(var141, var143, var142) /* with_native on <var141:Array[Object]>*/;
+}
+var144 = ((val* (*)(val*))(var141->class->vft[COLOR_string__Object__to_s]))(var141) /* to_s on <var141:Array[Object]>*/;
+((void (*)(val*, val*))(var130->class->vft[COLOR_abstract_compiler__CodeWriter__add_decl]))(var130, var144) /* add_decl on <var130:CodeWriter>*/;
+CONTINUE_label: (void)0;
+((void (*)(val*))(var52->class->vft[COLOR_abstract_collection__Iterator__next]))(var52) /* next on <var52:Iterator[nullable Object]>*/;
+}
+BREAK_label: (void)0;
+} else {
+}
+if (varonce145) {
+var146 = varonce145;
+} else {
+var147 = "void sig_handler(int signo){";
+var148 = 28;
+var149 = string__NativeString__to_s_with_length(var147, var148);
+var146 = var149;
+varonce145 = var146;
+}
+((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var146) /* add_decl on <var_v:AbstractCompilerVisitor>*/;
+if (varonce150) {
+var151 = varonce150;
+} else {
+var152 = "printf(\"Caught signal : %s\\n\", strsignal(signo));";
+var153 = 49;
+var154 = string__NativeString__to_s_with_length(var152, var153);
+var151 = var154;
+varonce150 = var151;
+}
+((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var151) /* add_decl on <var_v:AbstractCompilerVisitor>*/;
+if (varonce155) {
+var156 = varonce155;
+} else {
+var157 = "show_backtrace(signo);";
+var158 = 22;
+var159 = string__NativeString__to_s_with_length(var157, var158);
+var156 = var159;
+varonce155 = var156;
+}
+((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var156) /* add_decl on <var_v:AbstractCompilerVisitor>*/;
+if (varonce160) {
+var161 = varonce160;
+} else {
+var162 = "}";
+var163 = 1;
+var164 = string__NativeString__to_s_with_length(var162, var163);
+var161 = var164;
+varonce160 = var161;
+}
+((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var161) /* add_decl on <var_v:AbstractCompilerVisitor>*/;
+if (varonce165) {
+var166 = varonce165;
+} else {
+var167 = "void show_backtrace (int signo) {";
+var168 = 33;
+var169 = string__NativeString__to_s_with_length(var167, var168);
+var166 = var169;
+varonce165 = var166;
+}
+((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var166) /* add_decl on <var_v:AbstractCompilerVisitor>*/;
+var170 = ((val* (*)(val*))(self->class->vft[COLOR_abstract_compiler__AbstractCompiler__modelbuilder]))(self) /* modelbuilder on <self:AbstractCompiler>*/;
+var171 = ((val* (*)(val*))(var170->class->vft[COLOR_modelbuilder__ModelBuilder__toolcontext]))(var170) /* toolcontext on <var170:ModelBuilder>*/;
+var172 = ((val* (*)(val*))(var171->class->vft[COLOR_abstract_compiler__ToolContext__opt_no_stacktrace]))(var171) /* opt_no_stacktrace on <var171:ToolContext>*/;
+var173 = ((val* (*)(val*))(var172->class->vft[COLOR_opts__Option__value]))(var172) /* value on <var172:OptionBool>*/;
+var174 = ((struct instance_kernel__Bool*)var173)->value; /* autounbox from nullable Object to Bool */;
+var175 = !var174;
+if (var175){
+if (varonce176) {
+var177 = varonce176;
+} else {
+var178 = "char* opt = getenv(\"NIT_NO_STACK\");";
+var179 = 35;
+var180 = string__NativeString__to_s_with_length(var178, var179);
+var177 = var180;
+varonce176 = var177;
+}
+((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var177) /* add_decl on <var_v:AbstractCompilerVisitor>*/;
+if (varonce181) {
+var182 = varonce181;
+} else {
+var183 = "unw_cursor_t cursor;";
+var184 = 20;
+var185 = string__NativeString__to_s_with_length(var183, var184);
+var182 = var185;
+varonce181 = var182;
+}
+((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var182) /* add_decl on <var_v:AbstractCompilerVisitor>*/;
+if (varonce186) {
+var187 = varonce186;
+} else {
+var188 = "if(opt==NULL){";
+var189 = 14;
+var190 = string__NativeString__to_s_with_length(var188, var189);
+var187 = var190;
+varonce186 = var187;
+}
+((void (*)(val*, val*))(var_v->class->vft[COLOR_abstract_compiler__AbstractCompilerVisitor__add_decl]))(var_v, var187) /* add_decl on <var_v:AbstractCompilerVisitor>*/;
+if (varonce191) {
+var192 = varonce191;
+} else {
+var193 = "unw_context_t uc;";
+var194 = 17;
+var195 = string__NativeString__to_s_with_length(var193, var194);
+var192 = var195;
+varonce191 = var192;