/ tests / tests / compiler / modules / deep.adl
deep.adl
 1  program module_resolution_corner.alpha {
 2      struct Wrapper {
 3          outer: base::Foo,
 4          inner: base::nested::Foo::[3],
 5      }
 6  
 7      transition main() -> u32 {
 8          let outer_x = base::X;
 9          let inner_x = base::nested::X;
10          let deep_x = base::nested::deeper::X;
11  
12          let f1 = base::Foo {
13              a: [1; base::X],
14          };
15  
16          let f2 = base::nested::Foo::[3] {
17              a: [2; 3],
18          };
19  
20          let f3 = base::nested::deeper::Foo::[base::nested::deeper::X] {
21              a: [3; base::nested::deeper::X],
22          };
23  
24          return outer_x + inner_x + deep_x
25               + f1.a[0] + f2.a[1] + f3.a[2]
26               + base::nested::compute()
27               + base::nested::deeper::compute();
28      }
29  }
30  
31  // --- Next Module: base.leo --- //
32  
33  const X: u32 = 2;
34  
35  struct Foo {
36      a: [u32; X],
37  }
38  
39  // --- Next Module: base/nested.leo --- //
40  
41  const X: u32 = 3;
42  
43  struct Foo::[N: u32] {
44      a: [u32; N],
45  }
46  
47  inline compute() -> u32 {
48      let b = Foo::[X] {
49          a: [10; X],
50      };
51      return b.a[1] + deeper::X + deeper::compute();
52  }
53  
54  // --- Next Module: base/nested/deeper.leo --- //
55  
56  const X: u32 = 4;
57  
58  struct Foo::[M: u32] {
59      a: [u32; M],
60  }
61  
62  inline compute() -> u32 {
63      let f = Foo::[X] {
64          a: [20; X],
65      };
66      return X + f.a[2];
67  }
68