From 927df948ae29b638d6b3750022bcbc22ff4ee4ef Mon Sep 17 00:00:00 2001 From: yuyi Date: Wed, 17 Nov 2021 13:18:46 +0800 Subject: [PATCH] cgen: fix generic struct free() (#12487) --- vlib/v/gen/c/auto_free_methods.v | 2 +- vlib/v/tests/generics_struct_free_test.v | 29 ++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 vlib/v/tests/generics_struct_free_test.v diff --git a/vlib/v/gen/c/auto_free_methods.v b/vlib/v/gen/c/auto_free_methods.v index ea74f5281a..8886539d68 100644 --- a/vlib/v/gen/c/auto_free_methods.v +++ b/vlib/v/gen/c/auto_free_methods.v @@ -15,7 +15,7 @@ fn (mut g Gen) gen_free_method_for_type(typ ast.Type) string { } } - if sym.has_method('free') { + if sym.has_method_with_generic_parent('free') { return fn_name } match mut sym.info { diff --git a/vlib/v/tests/generics_struct_free_test.v b/vlib/v/tests/generics_struct_free_test.v new file mode 100644 index 0000000000..f9bab5f315 --- /dev/null +++ b/vlib/v/tests/generics_struct_free_test.v @@ -0,0 +1,29 @@ +struct List { +pub mut: + head &ListNode = 0 +} + +struct ListNode { +pub mut: + value T + next &ListNode = 0 +} + +fn list_new() List { + return List{} +} + +fn listnode_new() &ListNode { + return &ListNode{0, 0} +} + +fn (mut l List) free() { + // +} + +fn test_generic_struct_free() { + mut list := list_new() + println(list) + list.free() + assert true +}