mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
compiler: fix interface generation for unused interfaces
This commit is contained in:

committed by
Alexander Medvednikov

parent
00b8a5d3e4
commit
b62e28dba5
@@ -462,25 +462,34 @@ fn (v &V) interface_table() string {
|
||||
if t.cat != .interface_ {
|
||||
continue
|
||||
}
|
||||
interface_name := t.name
|
||||
mut methods := ''
|
||||
sb.writeln('// NR methods = $t.gen_types.len')
|
||||
for i, gen_type in t.gen_types {
|
||||
methods += '{'
|
||||
gen_concrete_type_name := gen_type.replace('*', '')
|
||||
methods += '{\n'
|
||||
for j, method in t.methods {
|
||||
// Cat_speak
|
||||
methods += '${gen_type}_${method.name}'
|
||||
methods += ' (void*) ${gen_concrete_type_name}_${method.name}'
|
||||
if j < t.methods.len - 1 {
|
||||
methods += ', '
|
||||
methods += ', \n'
|
||||
}
|
||||
}
|
||||
methods += '}, '
|
||||
// Speaker_Cat_index = 0
|
||||
sb.writeln('int _${t.name}_${gen_type}_index = $i;')
|
||||
methods += '\n},\n\n'
|
||||
// Speaker_Cat_index = 0
|
||||
concrete_type_name := gen_type.replace('*', '_ptr')
|
||||
sb.writeln('int _${interface_name}_${concrete_type_name}_index = $i;')
|
||||
}
|
||||
|
||||
if t.gen_types.len > 0 {
|
||||
// methods = '{TCCSKIP(0)}'
|
||||
// }
|
||||
sb.writeln('void* (* ${t.name}_name_table[][$t.methods.len]) = ' + '{ $methods }; ')
|
||||
sb.writeln('void* (* ${interface_name}_name_table[][$t.methods.len]) = ' + '{ \n $methods \n }; ')
|
||||
}else{
|
||||
// The line below is needed so that C compilation succeeds,
|
||||
// even if no interface methods are called.
|
||||
// See https://github.com/zenith391/vgtk3/issues/7
|
||||
sb.writeln('void* (* ${interface_name}_name_table[][1]) = ' + '{ {NULL} }; ')
|
||||
}
|
||||
continue
|
||||
}
|
||||
|
Reference in New Issue
Block a user