From 17fc31b7462eef2ac93e26b2ce5255833b7417da Mon Sep 17 00:00:00 2001 From: Felipe Pena Date: Sun, 2 Mar 2025 05:18:56 -0300 Subject: [PATCH] cgen: fix nested option fixed array (fix #23708) (#23845) --- vlib/v/gen/c/cgen.v | 1 + .../options/option_nested_fixed_array_test.v | 35 +++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 vlib/v/tests/options/option_nested_fixed_array_test.v diff --git a/vlib/v/gen/c/cgen.v b/vlib/v/gen/c/cgen.v index bb5d8a4ced..7b219f6463 100644 --- a/vlib/v/gen/c/cgen.v +++ b/vlib/v/gen/c/cgen.v @@ -6610,6 +6610,7 @@ fn (mut g Gen) write_types(symbols []&ast.TypeSymbol) { base)};') } } + g.type_definitions.writeln('typedef ${fixed_elem_name} ${styp} [${len}];') } else if !(elem_sym.info is ast.ArrayFixed && elem_sym.info.is_fn_ret) { g.type_definitions.writeln('typedef ${fixed_elem_name} ${styp} [${len}];') } diff --git a/vlib/v/tests/options/option_nested_fixed_array_test.v b/vlib/v/tests/options/option_nested_fixed_array_test.v new file mode 100644 index 0000000000..17933d60af --- /dev/null +++ b/vlib/v/tests/options/option_nested_fixed_array_test.v @@ -0,0 +1,35 @@ +struct Test { + board [2][2]?Piece +} + +struct Piece { + white bool +} + +fn test_main() { + t := Test{ + board: [[?Piece{ + white: false + }, ?Piece{ + white: false + }]!, [?Piece{ + white: true + }, ?Piece{ + white: true + }]!]! + } + assert '${t.board[1][1]}' == 'Option(Piece{ + white: true +})' + assert t.str() == 'Test{ + board: [[Option(Piece{ + white: false +}), Option(Piece{ + white: false +})], [Option(Piece{ + white: true +}), Option(Piece{ + white: true +})]] +}' +}