/ tests / tests / compiler / futures / non_async_after_complex_async.adl
non_async_after_complex_async.adl
 1  program inner.alpha {
 2      mapping foo: u32 => u32;
 3  
 4      async transition inner(a: u32) -> Future {
 5          return finalize(a);
 6      }
 7  
 8      async function finalize(a: u32) {
 9          Mapping::set(foo, 0u32, a);
10      }
11  }
12  
13  // --- Next Program --- //
14  
15  import inner.alpha;
16  program mid.alpha {
17      async transition mid(a: u32) -> Future {
18          let f1: Future = inner.alpha/inner(0u32);
19          let f2: Future = inner.alpha/inner(1u32);
20          let f:Future = finalize(f2, f1);
21          return f;
22      }
23  
24      async function finalize(f1: Future, f2: Future) {
25          f1.await();
26          f2.await();
27      }
28  
29      transition dummy() {}
30  }
31  
32  // --- Next Program --- //
33  
34  import inner.alpha;
35  import mid.alpha;
36  program outer.alpha {
37      async transition outer(a: u32) -> Future {
38          let f1: Future = mid.alpha/mid(0u32);
39          let f2: Future = mid.alpha/mid(1u32);
40          // Allow this call to remain for now.
41          mid.alpha/dummy();
42          let f:Future = finalize(f1, f2);
43          return f;
44      }
45  
46      async function finalize(f1: Future, f2: Future) {
47          f1.await();
48          f2.await();
49      }
50  }