-/* method opts#OptionContext#init for (self: OptionContext) */
-void opts__OptionContext__init(val* self) {
-val* var /* : Array[Option] */;
-val* var1 /* : HashMap[String, Option] */;
-val* var2 /* : Array[String] */;
-val* var3 /* : Array[String] */;
-var = NEW_array__Array(&type_array__Arrayopts__Option);
-((void (*)(val*))(var->class->vft[COLOR_array__Array__init]))(var) /* init on <var:Array[Option]>*/;
-CHECK_NEW_array__Array(var);
-self->attrs[COLOR_opts__OptionContext___options].val = var; /* _options on <self:OptionContext> */
-var1 = NEW_hash_collection__HashMap(&type_hash_collection__HashMapstring__Stringopts__Option);
-((void (*)(val*))(var1->class->vft[COLOR_hash_collection__HashMap__init]))(var1) /* init on <var1:HashMap[String, Option]>*/;
-CHECK_NEW_hash_collection__HashMap(var1);
-self->attrs[COLOR_opts__OptionContext___optmap].val = var1; /* _optmap on <self:OptionContext> */
-var2 = NEW_array__Array(&type_array__Arraystring__String);
-((void (*)(val*))(var2->class->vft[COLOR_array__Array__init]))(var2) /* init on <var2:Array[String]>*/;
-CHECK_NEW_array__Array(var2);
-self->attrs[COLOR_opts__OptionContext___rest].val = var2; /* _rest on <self:OptionContext> */
-var3 = NEW_array__Array(&type_array__Arraystring__String);
-((void (*)(val*))(var3->class->vft[COLOR_array__Array__init]))(var3) /* init on <var3:Array[String]>*/;
-CHECK_NEW_array__Array(var3);
-self->attrs[COLOR_opts__OptionContext___errors].val = var3; /* _errors on <self:OptionContext> */
-RET_LABEL:;
+var_opt86 = var85;
+{
+{ /* Inline opts$Option$mandatory (var_opt86) on <var_opt86:Option> */
+var90 = var_opt86->attrs[COLOR_opts__Option___mandatory].s; /* _mandatory on <var_opt86:Option> */
+var88 = var90;
+RET_LABEL89:(void)0;
+}
+}
+var_91 = var88;
+if (var88){
+{
+{ /* Inline opts$Option$read (var_opt86) on <var_opt86:Option> */
+var94 = var_opt86->attrs[COLOR_opts__Option___read].s; /* _read on <var_opt86:Option> */
+var92 = var94;
+RET_LABEL93:(void)0;
+}
+}
+var95 = !var92;
+var87 = var95;
+} else {
+var87 = var_91;
+}
+if (var87){
+{
+{ /* Inline opts$OptionContext$context_errors (self) on <self:OptionContext> */
+var98 = self->attrs[COLOR_opts__OptionContext___context_errors].val; /* _context_errors on <self:OptionContext> */
+if (unlikely(var98 == NULL)) {
+if(catchStack.cursor >= 0){
+longjmp(catchStack.envs[catchStack.cursor], 1);
+}
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _context_errors");
+PRINT_ERROR(" (%s:%d)\n", FILE_opts, 289);
+fatal_exit(1);
+}
+var96 = var98;
+RET_LABEL97:(void)0;
+}
+}
+if (unlikely(varonce99==NULL)) {
+var100 = NEW_core__NativeArray((int)3l, &type_core__NativeArray__core__String);
+if (likely(varonce101!=NULL)) {
+var102 = varonce101;
+} else {
+var103 = "Mandatory option ";
+var105 = (val*)(17l<<2|1);
+var106 = (val*)(17l<<2|1);
+var107 = (val*)((long)(0)<<2|3);
+var108 = (val*)((long)(0)<<2|3);
+var104 = core__flat___CString___to_s_unsafe(var103, var105, var106, var107, var108);
+var102 = var104;
+varonce101 = var102;
+}
+((struct instance_core__NativeArray*)var100)->values[0]=var102;
+if (likely(varonce109!=NULL)) {
+var110 = varonce109;
+} else {
+var111 = " not found.";
+var113 = (val*)(11l<<2|1);
+var114 = (val*)(11l<<2|1);
+var115 = (val*)((long)(0)<<2|3);
+var116 = (val*)((long)(0)<<2|3);
+var112 = core__flat___CString___to_s_unsafe(var111, var113, var114, var115, var116);
+var110 = var112;
+varonce109 = var110;
+}
+((struct instance_core__NativeArray*)var100)->values[2]=var110;
+} else {
+var100 = varonce99;
+varonce99 = NULL;
+}
+{
+{ /* Inline opts$Option$names (var_opt86) on <var_opt86:Option> */
+var119 = var_opt86->attrs[COLOR_opts__Option___names].val; /* _names on <var_opt86:Option> */
+if (unlikely(var119 == NULL)) {
+if(catchStack.cursor >= 0){
+longjmp(catchStack.envs[catchStack.cursor], 1);
+}
+PRINT_ERROR("Runtime error: %s", "Uninitialized attribute _names");
+PRINT_ERROR(" (%s:%d)\n", FILE_opts, 19);
+fatal_exit(1);
+}
+var117 = var119;
+RET_LABEL118:(void)0;
+}
+}
+if (likely(varonce120!=NULL)) {
+var121 = varonce120;
+} else {
+var122 = ", ";
+var124 = (val*)(2l<<2|1);
+var125 = (val*)(2l<<2|1);
+var126 = (val*)((long)(0)<<2|3);
+var127 = (val*)((long)(0)<<2|3);
+var123 = core__flat___CString___to_s_unsafe(var122, var124, var125, var126, var127);
+var121 = var123;
+varonce120 = var121;
+}
+{
+var128 = core__abstract_text___Collection___join(var117, var121, ((val*)NULL));
+}
+((struct instance_core__NativeArray*)var100)->values[1]=var128;
+{
+var129 = ((val*(*)(val* self))(var100->class->vft[COLOR_core__abstract_text__NativeArray__native_to_s]))(var100); /* native_to_s on <var100:NativeArray[String]>*/
+}
+varonce99 = var100;
+{
+core___core__Array___core__abstract_collection__SimpleCollection__add(var96, var129); /* Direct call array$Array$add on <var96:Array[String]>*/
+}
+} else {
+}
+{
+((void(*)(val* self))((((long)var_82&3)?class_info[((long)var_82&3)]:var_82->class)->vft[COLOR_core__abstract_collection__Iterator__next]))(var_82); /* next on <var_82:IndexedIterator[Option]>*/
+}
+}
+BREAK_label84: (void)0;
+{
+((void(*)(val* self))((((long)var_82&3)?class_info[((long)var_82&3)]:var_82->class)->vft[COLOR_core__abstract_collection__Iterator__finish]))(var_82); /* finish on <var_82:IndexedIterator[Option]>*/