From 8ff1ac72c255c80796aa43ed645db90c545e6ac7 Mon Sep 17 00:00:00 2001 From: Alexander Medvednikov Date: Tue, 21 Apr 2026 17:11:46 +0300 Subject: [PATCH] ast: fix as cast cannot cast v.ast.unknowntypeinfo to v.ast.array (fixes #23704) --- vlib/v/ast/table.v | 16 ++++++++++++---- vlib/v/ast/table_test.v | 16 ++++++++++++++++ 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/vlib/v/ast/table.v b/vlib/v/ast/table.v index 9bb330246..cd28fbdae 100644 --- a/vlib/v/ast/table.v +++ b/vlib/v/ast/table.v @@ -1319,14 +1319,22 @@ pub fn (t &Table) known_type_idx(typ Type) bool { return sym.language != .v || sym.name.starts_with('C.') } .array { - return t.known_type_idx((sym.info as Array).elem_type) + if sym.info is Array { + return t.known_type_idx(sym.info.elem_type) + } + return false } .array_fixed { - return t.known_type_idx((sym.info as ArrayFixed).elem_type) + if sym.info is ArrayFixed { + return t.known_type_idx(sym.info.elem_type) + } + return false } .map { - info := sym.info as Map - return t.known_type_idx(info.key_type) && t.known_type_idx(info.value_type) + if sym.info is Map { + return t.known_type_idx(sym.info.key_type) && t.known_type_idx(sym.info.value_type) + } + return false } else {} } diff --git a/vlib/v/ast/table_test.v b/vlib/v/ast/table_test.v index 067b4edb4..e7deefef6 100644 --- a/vlib/v/ast/table_test.v +++ b/vlib/v/ast/table_test.v @@ -74,3 +74,19 @@ fn test_fully_unaliased_type_preserves_nested_c_alias_pointers() { assert t.fully_unaliased_type(pwide_typ) == ast.u16_type.ref() assert t.fully_unaliased_type(share_mode_typ) == ast.u32_type } + +fn test_known_type_names_skips_partial_array_symbols() { + mut t := ast.new_table() + broken_array_idx := t.register_sym(ast.TypeSymbol{ + kind: .array + name: '[]Broken' + cname: 'Array_Broken' + mod: 'main' + is_pub: true + language: .v + }) + broken_array_type := ast.idx_to_type(broken_array_idx) + + assert !t.known_type_idx(broken_array_type) + assert '[]Broken' !in t.known_type_names() +} -- 2.39.5