checker: fix array init with interface (fix #24255) (#25073)
Some checks are pending
Tools CI / tools-macos (clang) (push) Waiting to run
Tools CI / tools-windows (gcc) (push) Waiting to run
Tools CI / tools-windows (msvc) (push) Waiting to run
Tools CI / tools-windows (tcc) (push) Waiting to run
Tools CI / tools-docker-ubuntu-musl (push) Waiting to run
vab CI / vab-compiles-v-examples (push) Waiting to run
vab CI / v-compiles-os-android (push) Waiting to run
wasm backend CI / wasm-backend (ubuntu-22.04) (push) Waiting to run
wasm backend CI / wasm-backend (windows-2022) (push) Waiting to run
Graphics CI / gg-regressions (push) Waiting to run
vlib modules CI / build-module-docs (push) Waiting to run
native backend CI / native-backend-ubuntu (push) Waiting to run
native backend CI / native-backend-windows (push) Waiting to run
Shy and PV CI / v-compiles-puzzle-vibes (push) Waiting to run
Sanitized CI / sanitize-undefined-clang (push) Waiting to run
Sanitized CI / sanitize-undefined-gcc (push) Waiting to run
Sanitized CI / tests-sanitize-address-clang (push) Waiting to run
Sanitized CI / sanitize-address-msvc (push) Waiting to run
Sanitized CI / sanitize-address-gcc (push) Waiting to run
Sanitized CI / sanitize-memory-clang (push) Waiting to run
sdl CI / v-compiles-sdl-examples (push) Waiting to run
Time CI / time-linux (push) Waiting to run
Time CI / time-macos (push) Waiting to run
Time CI / time-windows (push) Waiting to run
toml CI / toml-module-pass-external-test-suites (push) Waiting to run
Tools CI / tools-linux (clang) (push) Waiting to run
Tools CI / tools-linux (gcc) (push) Waiting to run
Tools CI / tools-linux (tcc) (push) Waiting to run

This commit is contained in:
Krchi 2025-08-15 13:06:01 +08:00 committed by GitHub
parent 77f8c88ccf
commit 63997d6e43
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 15 additions and 1 deletions

View file

@ -188,6 +188,10 @@ fn (mut c Checker) array_init(mut node ast.ArrayInit) ast.Type {
continue continue
} }
typ = c.check_expr_option_or_result_call(expr, c.expr(mut expr)) typ = c.check_expr_option_or_result_call(expr, c.expr(mut expr))
sym := c.table.sym(expected_value_type)
if sym.kind == .interface {
c.type_implements(typ, expected_value_type, expr.pos())
}
} }
if expr is ast.CallExpr { if expr is ast.CallExpr {
ret_sym := c.table.sym(typ) ret_sym := c.table.sym(typ)

View file

@ -697,7 +697,7 @@ fn (mut w Walker) expr(node_ ast.Expr) {
.blank_ident {} .blank_ident {}
else { else {
// `.unresolved`, `.variable` // `.unresolved`, `.variable`
// println('>>> else, ast.Ident ${node.name} kind: $node.kind ') // println('>>> else, ast.Ident ${node.name} kind: $node.kind ')
if node.name in w.all_consts { if node.name in w.all_consts {
w.mark_const_as_used(node.name) w.mark_const_as_used(node.name)
} else if node.name in w.all_globals { } else if node.name in w.all_globals {
@ -1447,6 +1447,7 @@ fn (mut w Walker) mark_resource_dependencies() {
if w.uses_append { if w.uses_append {
ref_array_idx_str := int(ast.array_type.ref()).str() ref_array_idx_str := int(ast.array_type.ref()).str()
w.fn_by_name(ref_array_idx_str + '.push') w.fn_by_name(ref_array_idx_str + '.push')
w.fn_by_name(ref_array_idx_str + '.push_many')
w.fn_by_name(ref_array_idx_str + '.push_many_noscan') w.fn_by_name(ref_array_idx_str + '.push_many_noscan')
w.fn_by_name(ref_array_idx_str + '.push_noscan') w.fn_by_name(ref_array_idx_str + '.push_noscan')
} }

View file

@ -0,0 +1,7 @@
interface Value {}
fn main() {
mut a := []Value{}
a << [Value(i32(1)), 2, 3.0]
println(a.len)
}