checker: fix generic fn assign (#10479)
parent
1dca06495d
commit
e31be9f5c4
|
@ -3625,7 +3625,8 @@ pub fn (mut c Checker) assign_stmt(mut node ast.AssignStmt) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if !is_blank_ident && !left.is_auto_deref_var() && !right.is_auto_deref_var()
|
if !is_blank_ident && !left.is_auto_deref_var() && !right.is_auto_deref_var()
|
||||||
&& right_sym.kind != .placeholder && left_sym.kind != .interface_ {
|
&& right_sym.kind != .placeholder && left_sym.kind != .interface_
|
||||||
|
&& !right_type_unwrapped.has_flag(.generic) && !left_type_unwrapped.has_flag(.generic) {
|
||||||
// Dual sides check (compatibility check)
|
// Dual sides check (compatibility check)
|
||||||
c.check_expected(right_type_unwrapped, left_type_unwrapped) or {
|
c.check_expected(right_type_unwrapped, left_type_unwrapped) or {
|
||||||
// allow for ptr += 2
|
// allow for ptr += 2
|
||||||
|
|
|
@ -13,3 +13,26 @@ fn test_generics_assign_generics_struct() {
|
||||||
println('$x.v')
|
println('$x.v')
|
||||||
assert x.v == 1
|
assert x.v == 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// test generics assign generics struct_init
|
||||||
|
struct Node<T> {
|
||||||
|
pub mut:
|
||||||
|
val T
|
||||||
|
next &Node<T> = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
fn new<T>() &Node<T> {
|
||||||
|
return &Node<T>{}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn (mut n Node<T>) add(val T) {
|
||||||
|
node := &Node<T>{val, 0}
|
||||||
|
n.next = node
|
||||||
|
}
|
||||||
|
|
||||||
|
fn test_generic_fn_assign_generic_struct_init() {
|
||||||
|
mut list := new<int>()
|
||||||
|
list.add(100)
|
||||||
|
println(list.next)
|
||||||
|
assert list.next.val == 100
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue