sort structs: handle fixed size arrays
							parent
							
								
									576618d8cc
								
							
						
					
					
						commit
						88ec9c235d
					
				|  | @ -14,6 +14,9 @@ fn test_add() { | |||
| 	assert a.ends_with('bbbbb') | ||||
| 	a += '123' | ||||
| 	assert a.ends_with('3') | ||||
| 	mut foo := Foo{0, 'hi'} | ||||
| 	foo.str += '!' | ||||
| 	assert foo.str == 'hi!' | ||||
| } | ||||
| 
 | ||||
| fn test_ends_with() { | ||||
|  | @ -418,6 +421,8 @@ fn test_reverse() { | |||
| 
 | ||||
| struct Foo { | ||||
| 	bar int | ||||
| mut: | ||||
| 	str string | ||||
| } | ||||
| 
 | ||||
| fn (f Foo) baz() string { | ||||
|  | @ -584,6 +589,7 @@ fn test_inter_before_comp_if() { | |||
| 	$if linux { | ||||
| 		println(s) | ||||
| 	} | ||||
| 	assert s == '123' | ||||
| } | ||||
| 
 | ||||
| fn test_double_quote_inter() { | ||||
|  |  | |||
|  | @ -376,19 +376,22 @@ fn sort_structs(types []Type) []Type { | |||
| 	mut dep_graph := new_dep_graph() | ||||
| 	// types name list
 | ||||
| 	mut type_names := []string | ||||
| 	for t in types { | ||||
| 		type_names << t.name | ||||
| 	for typ in types { | ||||
| 		type_names << typ.name | ||||
| 	} | ||||
| 	// loop over types
 | ||||
| 	for t in types { | ||||
| 		// create list of deps
 | ||||
| 		mut field_deps := []string | ||||
| 		for field in t.fields { | ||||
| 			// Need to handle fixed size arrays as well (`[10]Point`)
 | ||||
| 			ft := if field.typ.starts_with('[') { field.typ.all_after(']') } | ||||
| 				else { field.typ } | ||||
| 			// skip if not in types list or already in deps
 | ||||
| 			if !(field.typ in type_names) || field.typ in field_deps { | ||||
| 			if !(ft in type_names) || ft in field_deps { | ||||
| 				continue | ||||
| 			} | ||||
| 			field_deps << field.typ | ||||
| 			field_deps << ft//field.typ
 | ||||
| 		} | ||||
| 		// add type and dependant types to graph
 | ||||
| 		dep_graph.add(t.name, field_deps) | ||||
|  |  | |||
|  | @ -154,3 +154,26 @@ fn test_assoc_with_constants() { | |||
| 	assert again.b == 22 | ||||
| } | ||||
| 
 | ||||
| /* | ||||
| [typedef] | ||||
| struct C.fixed { | ||||
| 	points [10]C.point | ||||
| } | ||||
| 
 | ||||
| [typedef] | ||||
| struct C.point { | ||||
| 	x int | ||||
| 	y int | ||||
| } | ||||
| 
 | ||||
| fn test_fixed_field() { | ||||
| 	f := &C.fixed{} | ||||
| 	p := f.points[0] | ||||
| 	//f.nums[0] = 10
 | ||||
| 	//println(f.nums[0])
 | ||||
| 	println(p.x) | ||||
| 		//nums: [10]int
 | ||||
| 	//}
 | ||||
| } | ||||
| */ | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue