+/* method string_search#Text#split_once_on for (self: Text, Pattern): Array[Text] */
+val* string_search__Text__split_once_on(val* self, val* p0) {
+val* var /* : Array[Text] */;
+val* var_p /* var p: Pattern */;
+long var1 /* : Int */;
+val* var2 /* : nullable Match */;
+val* var_m /* var m: nullable Match */;
+val* var3 /* : null */;
+short int var4 /* : Bool */;
+short int var5 /* : Bool */;
+val* var_other /* var other: nullable Object */;
+short int var7 /* : Bool */;
+short int var9 /* : Bool */;
+val* var10 /* : Array[Text] */;
+long var11 /* : Int */;
+val* var_ /* var : Array[Text] */;
+val* var12 /* : Array[Text] */;
+long var13 /* : Int */;
+long var14 /* : Int */;
+long var16 /* : Int */;
+val* var17 /* : Text */;
+long var18 /* : Int */;
+val* var19 /* : Text */;
+val* var20 /* : Array[nullable Object] */;
+long var21 /* : Int */;
+val* var22 /* : NativeArray[nullable Object] */;
+var_p = p0;
+var1 = 0;
+{
+var2 = ((val* (*)(val*, val*, long))(var_p->class->vft[COLOR_string_search__Pattern__search_in]))(var_p, self, var1) /* search_in on <var_p:Pattern>*/;
+}
+var_m = var2;
+var3 = NULL;
+if (var_m == NULL) {
+var4 = 1; /* is null */
+} else {
+var4 = 0; /* arg is null but recv is not */
+}
+if (0) {
+{ /* Inline kernel#Object#== (var_m,var3) on <var_m:nullable Match> */
+var_other = var3;
+{
+{ /* Inline kernel#Object#is_same_instance (var_m,var_other) on <var_m:nullable Match(Match)> */
+var9 = var_m == var_other;
+var7 = var9;
+goto RET_LABEL8;
+RET_LABEL8:(void)0;
+}
+}
+var5 = var7;
+goto RET_LABEL6;
+RET_LABEL6:(void)0;
+}
+var4 = var5;
+}
+if (var4){
+var10 = NEW_array__Array(&type_array__Arraystring__Text);
+var11 = 1;
+{
+array__Array__with_capacity(var10, var11); /* Direct call array#Array#with_capacity on <var10:Array[Text]>*/
+}
+var_ = var10;
+{
+array__AbstractArray__push(var_, self); /* Direct call array#AbstractArray#push on <var_:Array[Text]>*/
+}
+var = var_;
+goto RET_LABEL;
+} else {
+}
+var12 = NEW_array__Array(self->type->resolution_table->types[COLOR_array__Arraystring__Text_VTSELFTYPE]);
+var13 = 0;
+{
+{ /* Inline string_search#Match#from (var_m) on <var_m:nullable Match(Match)> */
+var16 = var_m->attrs[COLOR_string_search__Match___from].l; /* _from on <var_m:nullable Match(Match)> */
+var14 = var16;
+RET_LABEL15:(void)0;
+}
+}
+{
+var17 = ((val* (*)(val*, long, long))(self->class->vft[COLOR_string__Text__substring]))(self, var13, var14) /* substring on <self:Text>*/;
+}
+{
+var18 = string_search__Match__after(var_m);
+}
+{
+var19 = string__Text__substring_from(self, var18);
+}
+var20 = NEW_array__Array(var12->type->resolution_table->types[COLOR_array__Arrayarray__Array_FT0]);
+{ /* var20 = array_instance Array[E] */
+var21 = 2;
+var22 = NEW_array__NativeArray(var21, var12->type->resolution_table->types[COLOR_array__NativeArrayarray__Array_FT0]);
+((struct instance_array__NativeArray*)var22)->values[0] = (val*) var17;
+((struct instance_array__NativeArray*)var22)->values[1] = (val*) var19;
+{
+((void (*)(val*, val*, long))(var20->class->vft[COLOR_array__Array__with_native]))(var20, var22, var21) /* with_native on <var20:Array[nullable Object]>*/;
+}
+}
+{
+array__Array__with_items(var12, var20); /* Direct call array#Array#with_items on <var12:Array[Text]>*/
+}
+var = var12;
+goto RET_LABEL;
+RET_LABEL:;
+return var;
+}
+/* method string_search#Text#split_once_on for (self: Object, Pattern): Array[Text] */
+val* VIRTUAL_string_search__Text__split_once_on(val* self, val* p0) {
+val* var /* : Array[Text] */;
+val* var1 /* : Array[Text] */;
+var1 = string_search__Text__split_once_on(self, p0);
+var = var1;
+RET_LABEL:;
+return var;
+}