cgen: unify _name_table[0]{} generation (fix a bootstrapping problem with v_win.c and msvc)

pull/7220/head^2
Delyan Angelov 2020-12-09 20:18:48 +02:00
parent 23f5cecbd0
commit aa0ddec638
No known key found for this signature in database
GPG Key ID: 66886C0F12D595ED
1 changed files with 5 additions and 9 deletions

View File

@ -5626,19 +5626,15 @@ fn (mut g Gen) interface_table() string {
// generate an array of the interface methods for the structs using the interface
// as well as case functions from the struct to the interface
mut methods_struct := strings.new_builder(100)
//
mut staticprefix := 'static'
iname_table_length := inter_info.types.len
if g.pref.ccompiler == 'msvc' {
staticprefix = ''
if iname_table_length == 0 {
// msvc can not process `static struct x[0] = {};`
methods_struct.writeln('$staticprefix $methods_struct_name ${interface_name}_name_table[1];')
} else {
methods_struct.writeln('$staticprefix $methods_struct_name ${interface_name}_name_table[$iname_table_length] = {')
}
} else {
methods_struct.writeln('$staticprefix $methods_struct_name ${interface_name}_name_table[$iname_table_length] = {')
}
mut cast_functions := strings.new_builder(100)
cast_functions.write('// Casting functions for interface "$interface_name"')
mut methods_wrapper := strings.new_builder(100)
@ -5724,7 +5720,7 @@ _Interface* I_${cctype}_to_Interface_${interface_name}_ptr($cctype* x) {
sb.writeln('int $interface_index_name = $iin_idx;')
}
sb.writeln('// ^^^ number of types for interface $interface_name: ${current_iinidx - iinidx_minimum_base}')
if g.pref.ccompiler == 'msvc' && iname_table_length == 0 {
if iname_table_length == 0 {
methods_struct.writeln('')
} else {
methods_struct.writeln('};')