cgen: prevent generation of duplicate interface method wrappers
parent
2353814821
commit
1135dffe2d
|
@ -4572,12 +4572,17 @@ fn (mut g Gen) interface_table() string {
|
||||||
cast_functions.write('// Casting functions for interface "$interface_name"')
|
cast_functions.write('// Casting functions for interface "$interface_name"')
|
||||||
mut methods_wrapper := strings.new_builder(100)
|
mut methods_wrapper := strings.new_builder(100)
|
||||||
methods_wrapper.writeln('// Methods wrapper for interface "$interface_name"')
|
methods_wrapper.writeln('// Methods wrapper for interface "$interface_name"')
|
||||||
|
mut already_generated_mwrappers := map[string]bool
|
||||||
for i, st in inter_info.types {
|
for i, st in inter_info.types {
|
||||||
// cctype is the Cleaned Concrete Type name, *without ptr*,
|
// cctype is the Cleaned Concrete Type name, *without ptr*,
|
||||||
// i.e. cctype is always just Cat, not Cat_ptr:
|
// i.e. cctype is always just Cat, not Cat_ptr:
|
||||||
cctype := g.cc_type(st)
|
cctype := g.cc_type(st)
|
||||||
// Speaker_Cat_index = 0
|
// Speaker_Cat_index = 0
|
||||||
interface_index_name := '_${interface_name}_${cctype}_index'
|
interface_index_name := '_${interface_name}_${cctype}_index'
|
||||||
|
if already_generated_mwrappers[interface_index_name] {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
already_generated_mwrappers[interface_index_name] = true
|
||||||
cast_functions.writeln('
|
cast_functions.writeln('
|
||||||
_Interface I_${cctype}_to_Interface_${interface_name}($cctype* x) {
|
_Interface I_${cctype}_to_Interface_${interface_name}($cctype* x) {
|
||||||
return (_Interface) {
|
return (_Interface) {
|
||||||
|
|
Loading…
Reference in New Issue