/ tests / tests / compiler / structs / external_struct.adl
external_struct.adl
 1  
 2  program child.alpha {
 3      struct Foo {
 4          bar: [Bar; 1],
 5      }
 6  
 7      struct Bar {
 8          baz: [Baz; 2],
 9      }
10  
11      struct Baz {
12          one: One,
13      }
14  
15      struct One {
16          two: [Two; 2],
17      }
18  
19      struct Two {
20          val1: u32,
21          val2: u32,
22      }
23  
24      record Boo {
25          owner: address,
26          val: u32,
27      }
28  
29      transition create() -> (Foo, Boo) {
30          return (Foo {bar: [Bar {baz: [Baz {one: One {two: [Two {val1: 1u32, val2: 2u32}, Two {val1: 3u32, val2:
31          4u32}]}}, Baz {one: One {two: [Two {val1: 5u32, val2: 6u32}, Two {val1: 7u32, val2: 8u32}]}}]}]}, Boo {owner:
32          self.signer, val: 10u32});
33      }
34  }
35  
36  // --- Next Program --- //
37  
38  import child.alpha;
39  program parent.alpha {
40  
41      record BooHoo {
42          owner: address,
43          val: u32,
44          woo: Woo,
45      }
46  
47      struct Woo {
48          a: u32,
49          b: u32,
50      }
51  
52      transition create_wrapper() -> (Foo, child.alpha/Boo) {
53          let f: Foo = Foo {bar: [Bar {baz: [Baz {one: One {two: [Two {val1: 1u32, val2: 2u32}, Two {val1: 3u32, val2: 4u32}]}}, Baz {one: One {two: [Two {val1: 5u32, val2: 6u32}, Two {val1: 7u32, val2: 8u32}]}}]}]};
54          let (f1, b1): (Foo, child.alpha/Boo) = child.alpha/create();
55          return child.alpha/create();
56      }
57  
58      transition create_another_wrapper() -> (Foo, child.alpha/Boo, BooHoo, Woo) {
59          let f: Foo = Foo {bar: [Bar {baz: [Baz {one: One {two: [Two {val1: 1u32, val2: 2u32}, Two {val1: 3u32, val2: 4u32}]}}, Baz {one: One {two: [Two {val1: 5u32, val2: 6u32}, Two {val1: 7u32, val2: 8u32}]}}]}]};
60          let (f1, b1): (Foo, child.alpha/Boo) = child.alpha/create();
61          return (f1, b1, BooHoo {owner: self.signer, val: 10u32, woo: Woo {a: 1u32, b: 2u32}}, Woo {a: 3u32, b: 4u32});
62      }
63  
64  }
65  
66  // --- Next Program --- //
67  import parent.alpha;
68  import child.alpha;
69  program grandparent.alpha {
70  
71      transition main(b: u32) -> u32 {
72          let a: u32 = 1u32 + b;
73          return a;
74      }
75  
76      transition omega_wrapper() -> (Foo, child.alpha/Boo, parent.alpha/BooHoo, Woo) {
77          let (f, b, bh, w): (Foo, child.alpha/Boo, parent.alpha/BooHoo, Woo) = parent.alpha/create_another_wrapper();
78          return parent.alpha/create_another_wrapper();
79      }
80  }