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