v2 / vlib / v / tests / options / option_ptr_cast_test.v
34 lines · 31 sloc · 550 bytes · 6488041a749df9762348d019c4223908c476f2e2
Raw
1struct ObjectDesc {
2 typ u32
3 ptr voidptr
4}
5
6struct ABCD {
7 name string
8}
9
10pub fn cast_object_desc[H](desc &ObjectDesc) ?H {
11 $if H is &ABCD {
12 /*
13 if desc.typ == 12 { // desc == ABCD
14 return &ABCD(desc.ptr)
15 }*/
16 if desc.typ == 12 { // desc == ABCD
17 return ?&ABCD(unsafe { &ABCD(desc.ptr) })
18 }
19 }
20 return none
21}
22
23fn test_option_ptr() {
24 obj := ABCD{
25 name: 'Foo'
26 }
27 desc := ObjectDesc{
28 typ: 12
29 ptr: voidptr(&obj)
30 }
31 obj2 := cast_object_desc[&ABCD](desc) or { panic('wwww') }
32 // obj2 := &ABCD(desc.ptr)
33 assert obj2.name == 'Foo'
34}
35