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 }