/ tests / tests / compiler / modules / flat.adl
flat.adl
 1  program flat_module_corner.alpha {
 2      struct Merge {
 3          a: util::Data::[3],
 4          b: config::Data,
 5      }
 6  
 7      transition main() -> u32 {
 8          let val1 = util::X;
 9          let val2 = config::X;
10  
11          let d1 = util::Data::[3] {
12              values: [10, 20, 30],
13          };
14  
15          let d2 = config::Data {
16              values: [100; config::X],
17          };
18  
19          let res1 = util::helper();
20          let res2 = config::helper();
21          let boosted = shared::boost(val1 + val2);
22  
23          return val1 + val2
24               + d1.values[1] + d2.values[2]
25               + res1 + res2 + boosted;
26      }
27  }
28  
29  // --- Next Module: util.leo --- //
30  
31  const X: u32 = 3;
32  
33  struct Data::[N: u32] {
34      values: [u32; N],
35  }
36  
37  inline helper() -> u32 {
38      const LOCAL_CONST_IN_A_MODULE: u32 = 0;
39      let d = Data::[X + LOCAL_CONST_IN_A_MODULE] {
40          values: [1, 2, 3],
41      };
42      return d.values[0];
43  }
44  
45  // --- Next Module: config.leo --- //
46  
47  const X: u32 = 4;
48  
49  struct Data {
50      values: [u32; X],
51  }
52  
53  inline helper() -> u32 {
54      let d = Data {
55          values: [5; X],
56      };
57      return d.values[1];
58  }
59  
60  // --- Next Module: shared.leo --- //
61  
62  inline boost(n: u32) -> u32 {
63      // Only uses values accessible within this module or passed in
64      return n * 2;
65  }