@@ -1003,7 +1003,7 @@ fn (mut g Gen) gen_array_contains_methods() {
10031003 fn_builder.writeln ('\t for (int i = 0; i < ${size} ; ++i) {' )
10041004 if elem_kind == .string {
10051005 fn_builder.writeln ('\t\t if (fast_string_eq(a[i], v)) {' )
1006- } else if elem_kind == .array && elem_is_not_ptr {
1006+ } else if elem_kind in [ .array, .array_fixed] && elem_is_not_ptr {
10071007 ptr_typ := g.equality_fn (left_info.elem_type)
10081008 fn_builder.writeln ('\t\t if (${ptr_typ} _arr_eq(a[i], v)) {' )
10091009 } else if elem_kind == .function {
@@ -1110,7 +1110,7 @@ fn (mut g Gen) gen_array_index_methods() {
11101110 fn_builder.writeln ('\t for (int i = 0; i < a.len; ++i, ++pelem) {' )
11111111 if elem_sym.kind == .string {
11121112 fn_builder.writeln ('\t\t if (fast_string_eq(*pelem, v)) {' )
1113- } else if elem_sym.kind == .array && ! info.elem_type.is_ptr () {
1113+ } else if elem_sym.kind in [ .array, .array_fixed] && ! info.elem_type.is_ptr () {
11141114 ptr_typ := g.equality_fn (info.elem_type)
11151115 fn_builder.writeln ('\t\t if (${ptr_typ} _arr_eq(*pelem, v)) {' )
11161116 } else if elem_sym.kind == .function && ! info.elem_type.is_ptr () {
@@ -1168,6 +1168,17 @@ fn (mut g Gen) gen_array_index(node ast.CallExpr) {
11681168 }
11691169 if g.table.sym (elem_typ).kind in [.interface , .sum_type] {
11701170 g.expr_with_cast (node.args[0 ].expr, node.args[0 ].typ, elem_typ)
1171+ } else if node.args[0 ].expr is ast.ArrayInit {
1172+ if g.is_cc_msvc {
1173+ stmts := g.go_before_last_stmt ().trim_space ()
1174+ tmp_var := g.new_tmp_var ()
1175+ g.write ('${g.typ(node.args[0].typ)} ${tmp_var} = ${g.expr_string(node.args[0].expr)} ;' )
1176+ g.write (stmts)
1177+ g.write (tmp_var)
1178+ } else {
1179+ g.write ('(${g.typ(node.args[0].typ)} )' )
1180+ g.expr (node.args[0 ].expr)
1181+ }
11711182 } else {
11721183 g.expr (node.args[0 ].expr)
11731184 }
0 commit comments