mirror of
https://github.com/vlang/v.git
synced 2025-09-13 22:42:26 +03:00
fix
This commit is contained in:
parent
a1b131c99a
commit
5c67e5466e
2 changed files with 32 additions and 0 deletions
29
vlib/v/tests/generics/generic_selector_field_test.v
Normal file
29
vlib/v/tests/generics/generic_selector_field_test.v
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
module main
|
||||||
|
|
||||||
|
struct Demo[T] {
|
||||||
|
mut:
|
||||||
|
val T
|
||||||
|
}
|
||||||
|
|
||||||
|
type DemoType = int | []DemoType
|
||||||
|
|
||||||
|
fn test_main() {
|
||||||
|
assert decode[Demo[[]DemoType]]() == Demo[[]DemoType]{}
|
||||||
|
assert decode[Demo[DemoType]]() == Demo[DemoType]{}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn decode[T]() T {
|
||||||
|
mut typ := T{}
|
||||||
|
typ.val = decode_x(typ.val)
|
||||||
|
return typ
|
||||||
|
}
|
||||||
|
|
||||||
|
fn decode_x[T](_ T) T {
|
||||||
|
mut field := T{}
|
||||||
|
$if T is int {
|
||||||
|
field = 0
|
||||||
|
} $else $if T is $array {
|
||||||
|
field = []DemoType{}
|
||||||
|
}
|
||||||
|
return field
|
||||||
|
}
|
|
@ -342,6 +342,9 @@ pub fn (mut t TypeResolver) resolve_args(cur_fn &ast.FnDecl, func &ast.Fn, mut n
|
||||||
} else {
|
} else {
|
||||||
comptime_args[k] = ctyp
|
comptime_args[k] = ctyp
|
||||||
}
|
}
|
||||||
|
} else if mut call_arg.expr is ast.SelectorExpr
|
||||||
|
&& call_arg.expr.expr_type.has_flag(.generic) {
|
||||||
|
comptime_args[k] = t.typeof_type(call_arg.expr, call_arg.expr.typ)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return comptime_args
|
return comptime_args
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue