import Ġk ast ree . ast . Mutable Visitor Ċ import Ġk ast ree . ast . Node Ċ Ċ /** Ċ Ġ* ĠCar ries Ġover Ġtags Ġfrom Ġold Ġnodes , Ġthis Ġmakes Ġcomment Ġstay . Ċ Ġ*/ Ċ open Ġclass ĠC arry ing Mutable Visitor Ġ: ĠMutable Visitor () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġ< T > ĠT . orig Or Changed ( orig : ĠT , Ġref : ĠChanged Ref ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( ref . changed ) Ġthis . apply Ġ{ Ġif Ġ( this Ġis ĠNode Ġ&& Ġorig Ġis ĠNode ) Ġthis . tag Ġ= Ġorig . tag Ġ} Ġelse Ġorig ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġ< T Ġ: ĠNode > Ġpre Visit ( v : ĠT , Ġfn : Ġ( v : ĠNode ?, Ġparent : ĠNode ) Ġ-> ĠNode ?): ĠT Ġ= Ġobject Ġ: ĠC arry ing Mutable Visitor () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠNode ?> Ġpre Visit ( v : ĠT , Ġparent : ĠNode ): ĠT Ġ= Ġfn ( v , Ġparent ) Ġas ĠT ĊĠĠĠĠĠĠĠ Ġ}. visit ( v , Ġv ) ĊĠĠĠ Ġ} Ċ Ċ }