fn ii() int {
	return 42
}

fn ss() string {
	return ii().str()
}

@[manualfree]
fn ffff() {
	mut my_array_of_strings := []string{cap: 10}
	my_array_of_strings << 'start'
	mystring := ss()
	if mystring.len > 0 {
		my_array_of_strings << mystring
	}
	sa := my_array_of_strings.join(',')
	println(sa)
	unsafe {
		sa.free()
		mystring.free()
		// The following SHOULD NOT generate the general `array_free(&my_array_of_strings);` .
		// Instead, it SHOULD generate the more specific `Array_string_free(&my_array_of_strings);` !
		// That more specific version, makes sure, that all the element strings are freed,
		// before the array itself is also freed.
		my_array_of_strings.free()
	}
}

fn main() {
	ffff()
}
