+/* method string#String#to_snake_case for (self: String): String */
+val* standard___standard__String___to_snake_case(val* self) {
+val* var /* : String */;
+short int var1 /* : Bool */;
+val* var2 /* : Buffer */;
+long var3 /* : Int */;
+val* var4 /* : Buffer */;
+val* var_new_str /* var new_str: Buffer */;
+short int var_prev_is_lower /* var prev_is_lower: Bool */;
+short int var_prev_is_upper /* var prev_is_upper: Bool */;
+long var_i /* var i: Int */;
+long var5 /* : Int */;
+long var_ /* var : Int */;
+short int var6 /* : Bool */;
+short int var8 /* : Bool */;
+int cltype;
+int idtype;
+const char* var_class_name;
+short int var9 /* : Bool */;
+val* var10 /* : SequenceRead[Char] */;
+val* var11 /* : nullable Object */;
+uint32_t var12 /* : Char */;
+uint32_t var_char /* var char: Char */;
+short int var13 /* : Bool */;
+short int var14 /* : Bool */;
+short int var15 /* : Bool */;
+short int var16 /* : Bool */;
+short int var_17 /* var : Bool */;
+long var18 /* : Int */;
+short int var20 /* : Bool */;
+int cltype21;
+int idtype22;
+const char* var_class_name23;
+long var24 /* : Int */;
+long var25 /* : Int */;
+short int var26 /* : Bool */;
+short int var28 /* : Bool */;
+int cltype29;
+int idtype30;
+const char* var_class_name31;
+short int var32 /* : Bool */;
+short int var_33 /* var : Bool */;
+val* var34 /* : SequenceRead[Char] */;
+long var35 /* : Int */;
+short int var37 /* : Bool */;
+int cltype38;
+int idtype39;
+const char* var_class_name40;
+long var41 /* : Int */;
+val* var42 /* : nullable Object */;
+short int var43 /* : Bool */;
+uint32_t var44 /* : Char */;
+uint32_t var45 /* : Char */;
+long var46 /* : Int */;
+val* var47 /* : String */;
+{
+var1 = standard___standard__Text___is_lower(self);
+}
+if (var1){
+var = self;
+goto RET_LABEL;
+} else {
+}
+var2 = NEW_standard__Buffer(&type_standard__Buffer);
+{
+var3 = ((long(*)(val* self))(self->class->vft[COLOR_standard__string__Text__length]))(self); /* length on <self:String>*/
+}
+{
+var4 = standard___standard__Buffer___with_cap(var2, var3);
+}
+var_new_str = var4;
+var_prev_is_lower = 0;
+var_prev_is_upper = 0;
+var_i = 0l;
+{
+var5 = ((long(*)(val* self))(self->class->vft[COLOR_standard__string__Text__length]))(self); /* length on <self:String>*/
+}
+var_ = var5;
+for(;;) {
+{
+{ /* Inline kernel#Int#< (var_i,var_) on <var_i:Int> */
+/* Covariant cast for argument 0 (i) <var_:Int> isa OTHER */
+/* <var_:Int> isa OTHER */
+var8 = 1; /* easy <var_:Int> isa OTHER*/
+if (unlikely(!var8)) {
+var_class_name = type_standard__Int.name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name);
+PRINT_ERROR(" (%s:%d)\n", FILE_standard__kernel, 534);
+fatal_exit(1);
+}
+var9 = var_i < var_;
+var6 = var9;
+goto RET_LABEL7;
+RET_LABEL7:(void)0;
+}
+}
+if (var6){
+{
+var10 = ((val*(*)(val* self))(self->class->vft[COLOR_standard__string__Text__chars]))(self); /* chars on <self:String>*/
+}
+{
+var11 = ((val*(*)(val* self, long p0))((((long)var10&3)?class_info[((long)var10&3)]:var10->class)->vft[COLOR_standard__abstract_collection__SequenceRead___91d_93d]))(var10, var_i); /* [] on <var10:SequenceRead[Char]>*/
+}
+var12 = (uint32_t)((long)(var11)>>2);
+var_char = var12;
+{
+var13 = standard___standard__Char___is_lower(var_char);
+}
+if (var13){
+{
+((void(*)(val* self, uint32_t p0))(var_new_str->class->vft[COLOR_standard__string__Buffer__add]))(var_new_str, var_char); /* add on <var_new_str:Buffer>*/
+}
+var_prev_is_lower = 1;
+var_prev_is_upper = 0;
+} else {
+{
+var14 = standard___standard__Char___is_upper(var_char);
+}
+if (var14){
+if (var_prev_is_lower){
+{
+((void(*)(val* self, uint32_t p0))(var_new_str->class->vft[COLOR_standard__string__Buffer__add]))(var_new_str, '_'); /* add on <var_new_str:Buffer>*/
+}
+} else {
+var_17 = var_prev_is_upper;
+if (var_prev_is_upper){
+{
+{ /* Inline kernel#Int#+ (var_i,1l) on <var_i:Int> */
+/* Covariant cast for argument 0 (i) <1l:Int> isa OTHER */
+/* <1l:Int> isa OTHER */
+var20 = 1; /* easy <1l:Int> isa OTHER*/
+if (unlikely(!var20)) {
+var_class_name23 = type_standard__Int.name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name23);
+PRINT_ERROR(" (%s:%d)\n", FILE_standard__kernel, 537);
+fatal_exit(1);
+}
+var24 = var_i + 1l;
+var18 = var24;
+goto RET_LABEL19;
+RET_LABEL19:(void)0;
+}
+}
+{
+var25 = ((long(*)(val* self))(self->class->vft[COLOR_standard__string__Text__length]))(self); /* length on <self:String>*/
+}
+{
+{ /* Inline kernel#Int#< (var18,var25) on <var18:Int> */
+/* Covariant cast for argument 0 (i) <var25:Int> isa OTHER */
+/* <var25:Int> isa OTHER */
+var28 = 1; /* easy <var25:Int> isa OTHER*/
+if (unlikely(!var28)) {
+var_class_name31 = type_standard__Int.name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name31);
+PRINT_ERROR(" (%s:%d)\n", FILE_standard__kernel, 534);
+fatal_exit(1);
+}
+var32 = var18 < var25;
+var26 = var32;
+goto RET_LABEL27;
+RET_LABEL27:(void)0;
+}
+}
+var16 = var26;
+} else {
+var16 = var_17;
+}
+var_33 = var16;
+if (var16){
+{
+var34 = ((val*(*)(val* self))(self->class->vft[COLOR_standard__string__Text__chars]))(self); /* chars on <self:String>*/
+}
+{
+{ /* Inline kernel#Int#+ (var_i,1l) on <var_i:Int> */
+/* Covariant cast for argument 0 (i) <1l:Int> isa OTHER */
+/* <1l:Int> isa OTHER */
+var37 = 1; /* easy <1l:Int> isa OTHER*/
+if (unlikely(!var37)) {
+var_class_name40 = type_standard__Int.name;
+PRINT_ERROR("Runtime error: Cast failed. Expected `%s`, got `%s`", "OTHER", var_class_name40);
+PRINT_ERROR(" (%s:%d)\n", FILE_standard__kernel, 537);
+fatal_exit(1);
+}
+var41 = var_i + 1l;
+var35 = var41;
+goto RET_LABEL36;
+RET_LABEL36:(void)0;
+}
+}
+{
+var42 = ((val*(*)(val* self, long p0))((((long)var34&3)?class_info[((long)var34&3)]:var34->class)->vft[COLOR_standard__abstract_collection__SequenceRead___91d_93d]))(var34, var35); /* [] on <var34:SequenceRead[Char]>*/
+}
+{
+var44 = (uint32_t)((long)(var42)>>2);
+var43 = standard___standard__Char___is_lower(var44);
+}
+var15 = var43;
+} else {
+var15 = var_33;
+}
+if (var15){
+{
+((void(*)(val* self, uint32_t p0))(var_new_str->class->vft[COLOR_standard__string__Buffer__add]))(var_new_str, '_'); /* add on <var_new_str:Buffer>*/
+}
+} else {
+}
+}
+{
+var45 = standard___standard__Char___to_lower(var_char);
+}
+{
+((void(*)(val* self, uint32_t p0))(var_new_str->class->vft[COLOR_standard__string__Buffer__add]))(var_new_str, var45); /* add on <var_new_str:Buffer>*/
+}
+var_prev_is_lower = 0;
+var_prev_is_upper = 1;
+} else {
+{
+((void(*)(val* self, uint32_t p0))(var_new_str->class->vft[COLOR_standard__string__Buffer__add]))(var_new_str, var_char); /* add on <var_new_str:Buffer>*/
+}
+var_prev_is_lower = 0;
+var_prev_is_upper = 0;
+}
+}
+{
+var46 = standard___standard__Int___Discrete__successor(var_i, 1l);
+}
+var_i = var46;
+} else {
+goto BREAK_label;
+}
+}
+BREAK_label: (void)0;
+{
+var47 = ((val*(*)(val* self))(var_new_str->class->vft[COLOR_standard__string__Object__to_s]))(var_new_str); /* to_s on <var_new_str:Buffer>*/
+}
+var = var47;
+goto RET_LABEL;
+RET_LABEL:;
+return var;
+}