package Ġkotlinx . ast . common . impl Ċ Ċ import Ġkotlinx . ast . common . Ast Channel Ċ import Ġkotlinx . ast . common . ast . Ast Ċ import Ġkotlinx . ast . common . ast . Default Ast Node Ċ import Ġkotlinx . ast . common . ast . Default Ast Terminal Ċ Ċ fun ĠAst . flatten ( default Channel : ĠAst Channel ): ĠList < Ast > Ġ{ ĊĠĠĠ Ġreturn Ġif Ġ( this Ġis ĠDefault Ast Node ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstart Ġ= Ġmutable ListOf < Ast >() ĊĠĠĠĠĠĠĠ Ġval Ġself Ġ= Ġmutable ListOf < Ast >() ĊĠĠĠĠĠĠĠ Ġval Ġstop Ġ= Ġmutable ListOf < Ast >() ĊĠĠĠĠĠĠĠ Ġchildren . forEach Ġ{ Ġast Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġflat Ġ= Ġast Ġis ĠDefault Ast Terminal Ġ&& Ġast . channel Ġ!= Ġdefault Channel ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( self . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( flat ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Ġ+= Ġast ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġself Ġ+= Ġast ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( flat ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop Ġ+= Ġast ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġself Ġ+= Ġstop ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġself Ġ+= Ġast ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġstart Ġ+ Ġcopy ( children Ġ= Ġself ) Ġ+ Ġstop ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ ĠlistOf ( this ) ĊĠĠĠ Ġ} Ċ } Ċ