v2 / vlib / v / checker / tests / cast_to_concrete_mut_err.vv
58 lines · 48 sloc · 880 bytes · a200c4540a5bac23f9ef5f308a2e0c079c54e12c
Raw
1module main
2
3pub struct Message {
4pub mut:
5 text string = 'Init'
6 m2 ?&Message
7}
8
9pub fn (mut m Message) update_text(new_text string) {
10 m.text = new_text
11}
12
13pub fn (mut m Message) update_ext_text(new_text string) ? {
14 m.m2?.text = new_text
15}
16
17type LocalMessageType = Message
18
19interface IMessage {
20mut:
21 text string
22 update_text(new_text string)
23}
24
25struct App {
26mut:
27 message &IMessage
28}
29
30pub fn (mut m LocalMessageType) update_text_externally(new_text string) {
31 m.text = new_text
32}
33
34fn print_message(mut mdef IMessage) {
35 if mut mdef is Message {
36 mut a := LocalMessageType(*mdef)
37 mut b := &LocalMessageType(mdef)
38 mut c := LocalMessageType(mdef)
39
40 dump(a)
41 dump(b)
42 dump(c)
43 }
44}
45
46fn test_main() {
47 mut m2 := &Message{
48 text: 'Init External'
49 }
50 mut mdef := &Message{
51 text: 'Init'
52 m2: m2
53 }
54 mut app := &App{
55 message: mdef
56 }
57 print_message(mut app.message)
58}
59