cgen: don't change field name of c structs (#10894)
parent
06de9c799c
commit
054bd67490
|
@ -3649,7 +3649,8 @@ fn (mut g Gen) selector_expr(node ast.SelectorExpr) {
|
|||
if node.expr_type == 0 {
|
||||
verror('cgen: SelectorExpr | expr_type: 0 | it.expr: `$node.expr` | field: `$node.field_name` | file: $g.file.path | line: $node.pos.line_nr')
|
||||
}
|
||||
g.write(c_name(node.field_name))
|
||||
field_name := if sym.language == .v { c_name(node.field_name) } else { node.field_name }
|
||||
g.write(field_name)
|
||||
if sum_type_deref_field != '' {
|
||||
g.write('$sum_type_dot$sum_type_deref_field)')
|
||||
}
|
||||
|
@ -5112,7 +5113,7 @@ fn (mut g Gen) struct_init(struct_init ast.StructInit) {
|
|||
for i, field in struct_init.fields {
|
||||
inited_fields[field.name] = i
|
||||
if sym.kind != .struct_ {
|
||||
field_name := c_name(field.name)
|
||||
field_name := if sym.language == .v { c_name(field.name) } else { field.name }
|
||||
g.write('.$field_name = ')
|
||||
if field.typ == 0 {
|
||||
g.checker_bug('struct init, field.typ is 0', field.pos)
|
||||
|
@ -5197,7 +5198,7 @@ fn (mut g Gen) struct_init(struct_init ast.StructInit) {
|
|||
}
|
||||
if field.name in inited_fields {
|
||||
sfield := struct_init.fields[inited_fields[field.name]]
|
||||
field_name := c_name(sfield.name)
|
||||
field_name := if sym.language == .v { c_name(field.name) } else { field.name }
|
||||
if sfield.typ == 0 {
|
||||
continue
|
||||
}
|
||||
|
@ -5289,7 +5290,7 @@ fn (mut g Gen) zero_struct_field(field ast.StructField) bool {
|
|||
return false
|
||||
}
|
||||
}
|
||||
field_name := c_name(field.name)
|
||||
field_name := if sym.language == .v { c_name(field.name) } else { field.name }
|
||||
g.write('.$field_name = ')
|
||||
if field.has_default_expr {
|
||||
if sym.kind in [.sum_type, .interface_] {
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
#flag -I @VEXEROOT/vlib/v/tests/c_struct_free
|
||||
#include "free_struct.c"
|
||||
|
||||
struct C.foo {
|
||||
mut:
|
||||
free int
|
||||
}
|
||||
|
||||
fn test_free_property_on_c_struct() {
|
||||
mut a := C.foo{0}
|
||||
a.free = 2
|
||||
assert a.free == 2
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
struct foo {
|
||||
int free;
|
||||
};
|
Loading…
Reference in New Issue