diff --git a/vlib/compiler/struct.v b/vlib/compiler/struct.v index c38a6a7370..f68899cf69 100644 --- a/vlib/compiler/struct.v +++ b/vlib/compiler/struct.v @@ -76,7 +76,7 @@ fn (p mut Parser) struct_decl(generic_param_types []string) { } } if name.len == 1 && !p.pref.building_v && !p.pref.is_repl { - p.warn('struct names must have more than one character') + p.warn('struct names must have more than one character ("$name", len=$name.len, $p.pref.building_v)') } if !is_c && !good_type_name(name) { p.error('bad struct name, e.g. use `HttpRequest` instead of `HTTPRequest`') diff --git a/vlib/v/gen/cgen.v b/vlib/v/gen/cgen.v index f7aaa92a1f..e77b22c892 100644 --- a/vlib/v/gen/cgen.v +++ b/vlib/v/gen/cgen.v @@ -513,8 +513,9 @@ fn (g mut Gen) expr(node ast.Expr) { type_sym := g.table.get_type_symbol(it.typ) if type_sym.kind != .array_fixed { elem_sym := g.table.get_type_symbol(it.elem_type) - g.write('new_array_from_c_array($it.exprs.len, $it.exprs.len, sizeof($type_sym.name), ') - g.writeln('(${elem_sym.name}[]){\t') + elem_type_str := g.typ(it.elem_type) + g.write('new_array_from_c_array($it.exprs.len, $it.exprs.len, sizeof($elem_type_str), ') + g.writeln('($elem_type_str[]){\t') for expr in it.exprs { g.expr(expr) g.write(', ') @@ -708,7 +709,8 @@ fn (g mut Gen) expr(node ast.Expr) { if type_sym.kind != .void { tmp = g.new_tmp_var() } - g.write('$type_sym.name $tmp = ') + styp := g.typ(it.expr_type) + g.write('$styp $tmp = ') g.expr(it.cond) g.writeln(';') // $it.blocks.len') for j, branch in it.branches { diff --git a/vlib/v/gen/tests/1.c b/vlib/v/gen/tests/1.c index fd907faea8..44cc2e49d9 100644 --- a/vlib/v/gen/tests/1.c +++ b/vlib/v/gen/tests/1.c @@ -75,7 +75,7 @@ void foo(int a) { for (int i = 0; i < 10; i++) { } - array_int nums = new_array_from_c_array(3, 3, sizeof(array_int), (int[]){ + array_int nums = new_array_from_c_array(3, 3, sizeof(int), (int[]){ 1, 2, 3, }); array_int nums2 = array_slice(nums, 0, 2); @@ -83,15 +83,15 @@ i < 10; i++) { array_int nums4 = array_slice(nums, 1, nums.len); int number = (*(int*)array_get(nums, 0)); array_set(&nums, 1, &(int[]) { 10 }); - array_bool bools = new_array_from_c_array(2, 2, sizeof(array_bool), (bool[]){ + array_bool bools = new_array_from_c_array(2, 2, sizeof(bool), (bool[]){ true, false, }); - array_User users = new_array_from_c_array(1, 1, sizeof(array_User), (User[]){ + array_User users = new_array_from_c_array(1, 1, sizeof(User), (User[]){ (User){ 0}, }); bool b = (*(bool*)array_get(bools, 0)); - array_string mystrings = new_array_from_c_array(2, 2, sizeof(array_string), (string[]){ + array_string mystrings = new_array_from_c_array(2, 2, sizeof(string), (string[]){ tos3("a"), tos3("b"), }); string s = (*(string*)array_get(mystrings, 0)); diff --git a/vlib/v/gen/tests/2.c b/vlib/v/gen/tests/2.c index cd62b27898..363c0e006d 100644 --- a/vlib/v/gen/tests/2.c +++ b/vlib/v/gen/tests/2.c @@ -66,7 +66,7 @@ void function2() { } void init_array() { - array_int nums = new_array_from_c_array(3, 3, sizeof(array_int), (int[]){ + array_int nums = new_array_from_c_array(3, 3, sizeof(int), (int[]){ 4, 2, 3, }); } diff --git a/vlib/v/gen/tests/3.c b/vlib/v/gen/tests/3.c index d2f8c67825..17c7cbf5f5 100644 --- a/vlib/v/gen/tests/3.c +++ b/vlib/v/gen/tests/3.c @@ -10,7 +10,7 @@ void User_foo(User* u); void User_foo(User* u) { int age = u->age; - array_string zzz = array_repeat(new_array_from_c_array(1, 1, sizeof(array_string), (string[]){ + array_string zzz = array_repeat(new_array_from_c_array(1, 1, sizeof(string), (string[]){ tos3(""), }), u->age); } diff --git a/vlib/v/gen/tests/4.c b/vlib/v/gen/tests/4.c index e5d8b012fe..6fe08c2aea 100644 --- a/vlib/v/gen/tests/4.c +++ b/vlib/v/gen/tests/4.c @@ -41,13 +41,13 @@ int main() { string e = tos3("hello"); e = testb(111); e = tos3("world"); - array_int f = new_array_from_c_array(4, 4, sizeof(array_int), (int[]){ + array_int f = new_array_from_c_array(4, 4, sizeof(int), (int[]){ testa(), 2, 3, 4, }); - array_string g = new_array_from_c_array(2, 2, sizeof(array_string), (string[]){ + array_string g = new_array_from_c_array(2, 2, sizeof(string), (string[]){ testb(1), tos3("hello"), }); - array_Foo arr_foo = new_array_from_c_array(1, 1, sizeof(array_Foo), (Foo[]){ + array_Foo arr_foo = new_array_from_c_array(1, 1, sizeof(Foo), (Foo[]){ a, }); Foo af_idx_el = (*(Foo*)array_get(arr_foo, 0));