mirror of
https://github.com/vlang/v.git
synced 2025-09-13 17:36:52 -04:00
parent
92a72df5f8
commit
6fa9a84753
@ -570,11 +570,18 @@ fn (mut g Gen) assign_stmt(node_ ast.AssignStmt) {
|
|||||||
if val_sym.info.generic_types.len > 0 {
|
if val_sym.info.generic_types.len > 0 {
|
||||||
if val is ast.StructInit {
|
if val is ast.StructInit {
|
||||||
var_styp := g.typ(val.typ)
|
var_styp := g.typ(val.typ)
|
||||||
g.write('${var_styp} ')
|
if var_type.has_flag(.shared_f) {
|
||||||
|
g.write('__shared__${var_styp}* ')
|
||||||
|
} else {
|
||||||
|
g.write('${var_styp} ')
|
||||||
|
}
|
||||||
is_used_var_styp = true
|
is_used_var_styp = true
|
||||||
} else if val is ast.PrefixExpr {
|
} else if val is ast.PrefixExpr {
|
||||||
if val.op == .amp && val.right is ast.StructInit {
|
if val.op == .amp && val.right is ast.StructInit {
|
||||||
var_styp := g.typ(val.right.typ.ref())
|
var_styp := g.typ(val.right.typ.ref())
|
||||||
|
if var_type.has_flag(.shared_f) {
|
||||||
|
g.write('__shared__')
|
||||||
|
}
|
||||||
g.write('${var_styp} ')
|
g.write('${var_styp} ')
|
||||||
is_used_var_styp = true
|
is_used_var_styp = true
|
||||||
}
|
}
|
||||||
|
14
vlib/v/tests/shared_generic_test.v
Normal file
14
vlib/v/tests/shared_generic_test.v
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
struct Foo[T] {
|
||||||
|
a T
|
||||||
|
}
|
||||||
|
|
||||||
|
fn test_shared_struct_has_generics() {
|
||||||
|
shared foo := Foo[int]{1}
|
||||||
|
lock foo {
|
||||||
|
assert foo.a == 1
|
||||||
|
}
|
||||||
|
shared bar := &Foo[int]{1}
|
||||||
|
lock bar {
|
||||||
|
assert bar.a == 1
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user