@ file : Suppress (" Nested Lambda Shadow ed Implicit Parameter ") Ċ Ċ package Ġcom . an ata wa 1 2 . de compiler . optimizer . control Flows Ċ Ċ import Ġcom . an ata wa 1 2 . de compiler . processor . Processor Context Ċ import Ġcom . an ata wa 1 2 . de compiler . statements Gen .* Ċ import Ġkotlinx . collections . immutable . persistent ListOf Ċ import Ġorg . object web . asm . Label Ċ Ċ /** Ċ Ġ* ĠLabels 0 : Ċ Ġ* Ġstat 0 0 : ĠMonitor Enter Ġ( var 1 Ġ= Ġexpression ) Ċ Ġ* Ġstat 0 1 : ĠTry Block Start ĠTry Catch Block Identifier ( 0 0 0 0 1 ) Ċ Ġ* ĠĠĠĠĠĠĠĠ Ġstatements 1 Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠ ĠLabels 1 : Ċ Ġ* Ġstat 1 0 : ĠMonitor Exit Ġvar 1 Ċ Ġ* Ġstat 1 1 : ĠTry Block End ĠTry Catch Block Identifier ( 0 0 0 0 1 ) Ċ Ġ* Ġstat 1 2 : Ġgoto Ġone _ of _ Labels 2 : Ċ Ġ* Ġstat 1 3 : ĠTry Block Start ĠTry Catch Block Identifier ( 0 0 0 0 2 ) Ċ Ġ* Ġstat 1 4 : ĠCatch Block Start ( var 2 ) Ġnull ĠTry Catch Block Identifier ( 0 0 0 0 1 ) Ċ Ġ* Ġstat 1 5 : ĠCatch Block Start ( var 2 ) Ġnull ĠTry Catch Block Identifier ( 0 0 0 0 2 ) Ċ Ġ* Ġstat 1 6 : ĠMonitor Exit Ġvar 1 Ċ Ġ* Ġstat 1 7 : ĠTry Block End ĠTry Catch Block Identifier ( 0 0 0 0 2 ) Ċ Ġ* Ġstat 1 8 : Ġthrow Ġvar 2 Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠ ĠLabels 2 : Ċ Ġ* Ġstat 1 9 : Ġunknown Stat Ċ Ġ* Ċ Ġ* ĠLabels 0 : Ċ Ġ* Ġsynchronized ( expression ) Ġ{ Ċ Ġ* ĠĠ Ġstatements 1 Ċ Ġ* ĠĠĠĠĠĠ ĠLabels 1 : Ċ Ġ* Ġ} Ċ Ġ* ĠLabels 2 : Ċ Ġ* Ġunknown Stat Ċ Ġ*/ Ċ object ĠSynchron ized Flow Generator Ġ: ĠI Flow Generator Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġgenerate ( statements : ĠIterable < Statement >, Ġmethod : ĠState ments Method , Ġctx : ĠProcessor Context ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġloop @ Ġfor Ġ( statement Ġin Ġstatements ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ//@ formatter : off ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstat 0 0 : ĠMonitor Enter ĠĠĠ Ġ= Ġstatement [ 0 ] Ġas ? ĠMonitor Enter Ġ?: Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstat 0 1 : ĠTry Block Start ĠĠ Ġ= Ġstatement [ 1 ] Ġas ? ĠTry Block Start Ġ?: Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ//@ formatter : on ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmonitor Assign Ġ= Ġstat 0 0 . monitor Obj Ġas ? ĠAssign Ġ?: Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmonitor Variable Ġ= Ġmonitor Assign . variable Ġas ? ĠLocal Variable Ġ?: Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmonitor Expression Ġ= Ġmonitor Assign . value ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtry 1 End Ġ= Ġstat 0 1 . identifier . try End !! ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ//@ formatter : off ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstat 1 0 : ĠMonitor Exit ĠĠĠĠ Ġ= Ġtry 1 End [ 0 Ġ- Ġ 1 ] Ġas ? ĠMonitor Exit Ġ?: Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstat 1 1 : ĠTry Block End ĠĠĠĠ Ġ= Ġtry 1 End [ 1 Ġ- Ġ 1 ] Ġas ? ĠTry Block End Ġ?: Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstat 1 2 : ĠG oto ĠĠĠĠĠĠĠĠĠĠĠ Ġ= Ġtry 1 End [ 2 Ġ- Ġ 1 ] Ġas ? ĠG oto Ġ?: Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstat 1 3 : ĠTry Block Start ĠĠ Ġ= Ġtry 1 End [ 3 Ġ- Ġ 1 ] Ġas ? ĠTry Block Start Ġ?: Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstat 1 4 : ĠCatch Block Start Ġ= Ġtry 1 End [ 4 Ġ- Ġ 1 ] Ġas ? ĠCatch Block Start Ġ?: Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstat 1 5 : ĠCatch Block Start Ġ= Ġtry 1 End [ 5 Ġ- Ġ 1 ] Ġas ? ĠCatch Block Start Ġ?: Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstat 1 6 : ĠMonitor Exit ĠĠĠĠ Ġ= Ġtry 1 End [ 6 Ġ- Ġ 1 ] Ġas ? ĠMonitor Exit Ġ?: Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstat 1 7 : ĠTry Block End ĠĠĠĠ Ġ= Ġtry 1 End [ 7 Ġ- Ġ 1 ] Ġas ? ĠTry Block End Ġ?: Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstat 1 8 : ĠThrow Exception Ġ Ġ= Ġtry 1 End [ 8 Ġ- Ġ 1 ] Ġas ? ĠThrow Exception Ġ?: Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstat 1 9 : ĠStatement ĠĠĠĠĠĠ Ġ= Ġtry 1 End [ 9 Ġ- Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ//@ formatter : on ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtry - catch Ġcheck ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( stat 0 1 . identifier Ġ!= Ġstat 1 1 . identifier ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( stat 1 3 . identifier Ġ!= Ġstat 1 7 . identifier ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( stat 0 1 . identifier Ġ== Ġstat 1 4 . identifier ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( stat 0 1 . identifier Ġ!= Ġstat 1 4 . identifier ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( stat 1 3 . identifier Ġ!= Ġstat 1 5 . identifier ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( stat 0 1 . identifier Ġ!= Ġstat 1 5 . identifier ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( stat 1 3 . identifier Ġ!= Ġstat 1 4 . identifier ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġmonitor Ġcheck ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( stat 1 0 . monitor Obj Ġ!= Ġmonitor Variable ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( stat 1 6 . monitor Obj Ġ!= Ġmonitor Variable ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( monitor Variable . identifier . consumer Count Ġ!= Ġ 2 ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( monitor Variable . identifier . producer Count Ġ!= Ġ 1 ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġlabel Ġcheck ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlabels 0 Ġ= Ġstat 0 0 . labels Targets Me ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( stat 0 1 . labels Targets Me . any Ġ{ Ġit . used By . any () Ġ}) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġlabels 1 Ġ= Ġstat 1 0 . labels Targets Me ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( stat 1 1 . labels Targets Me . any Ġ{ Ġit . used By . any () Ġ}) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( stat 1 2 . labels Targets Me . any Ġ{ Ġit . used By . any () Ġ}) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( stat 1 3 . labels Targets Me . any Ġ{ Ġit . used By . any () Ġ}) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( stat 1 4 . labels Targets Me . any Ġ{ Ġit . used By . any () Ġ}) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( stat 1 5 . labels Targets Me . any Ġ{ Ġit . used By . any () Ġ}) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( stat 1 6 . labels Targets Me . any Ġ{ Ġit . used By . any () Ġ}) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( stat 1 7 . labels Targets Me . any Ġ{ Ġit . used By . any () Ġ}) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( stat 1 8 . labels Targets Me . any Ġ{ Ġit . used By . any () Ġ}) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlabels 2 Ġ= Ġstat 1 9 . labels Targets Me ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġgoto Ġcheck ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( stat 1 2 . label Ġ! in Ġlabels 2 ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġrun Ġreplace ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfirst , Ġselect Ġbreak Ġlabel Ġor Ġmake ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( labels 1 . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlabels 1 Ġ= Ġpersistent ListOf ( Stat Label ( Label ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbreak Label Ġ= Ġlabels 1 . first () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstatements 1 Ġ= ĠBlock Begin Statement . make Block By Begin End ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstat 0 1 . next , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstat 1 0 . prev , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġstat 0 0 . remove Me () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmonitor Assign . dispose () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstat 0 1 . remove Me () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstat 1 0 . remove Me () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstat 1 1 . remove Me () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstat 1 2 . remove Me () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstat 1 3 . remove Me () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstat 1 4 . remove Me () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstat 1 5 . remove Me () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstat 1 6 . remove Me () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstat 1 7 . remove Me () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstat 1 8 . remove Me () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġflow Ġ= ĠSynchron ized Flow ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmonitor Obj Ġ= Ġmonitor Expression , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock Ġ= Ġstatements 1 . first , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak Label Ġ= Ġbreak Label , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġflow . labels Targets Me Ġ= Ġlabels 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatements 1 . second . labels Targets Me Ġ= Ġlabels 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġstat 1 9 . insert Prev ( flow ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} Ċ } Ċ