interface I { in void e(); in void a(); out void ec(); out void ac(); behaviour { enum State { idle, busy, aborting }; State s = State.idle; [s.idle] { on e: s = State.busy; on a: s = State.aborting; } [s.busy] { on e: illegal; on a: s = State.aborting; on inevitable: { ec; s = State.idle;} } [s.aborting] { on e: illegal; on a: illegal; on inevitable: { ac; s = State.idle;} } } } component external_asynchronous_illegal2 { provides I p; requires external I r; behaviour { enum State { idle, busy, aborting }; State s = State.idle; [s.idle] { on p.e(): { r.e(); s = State.busy; } on p.a(): illegal; on r.ec(): {} on r.ac(): {} } [s.busy] { on p.e: illegal; on p.a(): { r.a(); } on r.ec(): illegal; on r.ac(): illegal; } [s.aborting] { on p.e: illegal; on p.a: illegal; on r.ec(): illegal; on r.ac(): illegal; } } }