cgen: fix struct with fixed array error
							parent
							
								
									0b3412cdb5
								
							
						
					
					
						commit
						9cfb1e3bf7
					
				|  | @ -3132,10 +3132,14 @@ fn (mut g Gen) gen_str_for_struct(info table.Struct, styp, str_fn_name string) { | |||
| 				g.auto_str_funcs.write('indents.len, indents.str, ') | ||||
| 				g.auto_str_funcs.write('${field_styp_fn_name}( it->${field.name} ).len, ') | ||||
| 				g.auto_str_funcs.write('${field_styp_fn_name}( it->${field.name} ).str  ') | ||||
| 			} else if sym.kind in [.struct_, .array, .array_fixed] { | ||||
| 			} else if sym.kind == .struct_ { | ||||
| 				g.auto_str_funcs.write('indents.len, indents.str, ') | ||||
| 				g.auto_str_funcs.write('${field_styp_fn_name}( it->${field.name}${second_str_param} ).len, ') | ||||
| 				g.auto_str_funcs.write('${field_styp_fn_name}( it->${field.name}${second_str_param} ).str  ') | ||||
| 			} else if sym.kind in [.array, .array_fixed] { | ||||
| 				g.auto_str_funcs.write('indents.len, indents.str, ') | ||||
| 				g.auto_str_funcs.write('${field_styp_fn_name}( it->${field.name}).len, ') | ||||
| 				g.auto_str_funcs.write('${field_styp_fn_name}( it->${field.name}).str  ') | ||||
| 			} else { | ||||
| 				g.auto_str_funcs.write('indents.len, indents.str, it->${field.name}') | ||||
| 				if field.typ == table.string_type { | ||||
|  | @ -3167,11 +3171,11 @@ fn (mut g Gen) gen_str_for_array(info table.Array, styp, str_fn_name string) { | |||
| 	g.auto_str_funcs.writeln('\tfor (int i = 0; i < a.len; i++) {') | ||||
| 	g.auto_str_funcs.writeln('\t\t${field_styp} it = (*(${field_styp}*)array_get(a, i));') | ||||
| 	if sym.kind == .struct_ && !sym.has_method('str') { | ||||
| 		g.auto_str_funcs.writeln('\t\t\tstrings__Builder_write(&sb, ${field_styp}_str(it,0));') | ||||
| 		g.auto_str_funcs.writeln('\t\tstrings__Builder_write(&sb, ${field_styp}_str(it,0));') | ||||
| 	} else if sym.kind in [.f32, .f64] { | ||||
| 		g.auto_str_funcs.writeln('\t\t\tstrings__Builder_write(&sb, _STR("%g", it));') | ||||
| 		g.auto_str_funcs.writeln('\t\tstrings__Builder_write(&sb, _STR("%g", it));') | ||||
| 	} else { | ||||
| 		g.auto_str_funcs.writeln('\t\t\tstrings__Builder_write(&sb, ${field_styp}_str(it));') | ||||
| 		g.auto_str_funcs.writeln('\t\tstrings__Builder_write(&sb, ${field_styp}_str(it));') | ||||
| 	} | ||||
| 	g.auto_str_funcs.writeln('\t\tif (i != a.len-1) {') | ||||
| 	g.auto_str_funcs.writeln('\t\t\tstrings__Builder_write(&sb, tos3(", "));') | ||||
|  | @ -3194,13 +3198,13 @@ fn (mut g Gen) gen_str_for_array_fixed(info table.ArrayFixed, styp, str_fn_name | |||
| 	g.auto_str_funcs.writeln('\tstrings__Builder_write(&sb, tos3("["));') | ||||
| 	g.auto_str_funcs.writeln('\tfor (int i = 0; i < $info.size; i++) {') | ||||
| 	if sym.kind == .struct_ && !sym.has_method('str') { | ||||
| 		g.auto_str_funcs.writeln('\t\t\tstrings__Builder_write(&sb, ${field_styp}_str(a[i],0));') | ||||
| 		g.auto_str_funcs.writeln('\t\tstrings__Builder_write(&sb, ${field_styp}_str(a[i],0));') | ||||
| 	} else if sym.kind in [.f32, .f64] { | ||||
| 		g.auto_str_funcs.writeln('\t\t\tstrings__Builder_write(&sb, _STR("%g", a[i]));') | ||||
| 		g.auto_str_funcs.writeln('\t\tstrings__Builder_write(&sb, _STR("%g", a[i]));') | ||||
| 	} else if sym.kind == .string { | ||||
| 		g.auto_str_funcs.writeln('\t\t\tstrings__Builder_write(&sb, _STR("\\"%.*s\\"", a[i].len, a[i].str));') | ||||
| 		g.auto_str_funcs.writeln('\t\tstrings__Builder_write(&sb, _STR("\\"%.*s\\"", a[i].len, a[i].str));') | ||||
| 	} else { | ||||
| 		g.auto_str_funcs.writeln('\t\t\tstrings__Builder_write(&sb, ${field_styp}_str(a[i]));') | ||||
| 		g.auto_str_funcs.writeln('\t\tstrings__Builder_write(&sb, ${field_styp}_str(a[i]));') | ||||
| 	} | ||||
| 	g.auto_str_funcs.writeln('\t\tif (i != $info.size-1) {') | ||||
| 	g.auto_str_funcs.writeln('\t\t\tstrings__Builder_write(&sb, tos3(", "));') | ||||
|  |  | |||
|  | @ -18,3 +18,18 @@ fn test_default_struct_string_interpolation() { | |||
| 	assert s.contains('}') | ||||
| 	// println(s)
 | ||||
| } | ||||
| 
 | ||||
| struct Context { | ||||
| pub mut: | ||||
| 	vb [8]f64 | ||||
| } | ||||
| 
 | ||||
| fn test_fixed_array_struct_string_interpolation() { | ||||
| 	mut ctx := Context{} | ||||
| 	x := 2.32 | ||||
| 	ctx.vb = [1.1, x, 3.3, 4.4, 5.0, 6.0, 7.0, 8.9]!! | ||||
| 	s := '$ctx' | ||||
| 	assert s.contains('Context {') | ||||
| 	assert s.contains('vb: [1.1, 2.32, 3.3, 4.4, 5, 6, 7, 8.9]') | ||||
| 	assert s.contains('}') | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue