package Ġcom . k ul ics . fe el . visitor Ċ Ċ import Ġcom . k ul ics . fe el . antlr . generate . Feel Parser .* Ċ import Ġcom . k ul ics . fe el .* Ċ Ċ open Ġclass ĠPackage Visitor () Ġ: ĠNamespace Visitor () Ġ{ ĊĠĠĠ Ġ// Ġpackage Ġ---------------- --------------- ĊĊĠĠĠ Ġoverride Ġfun Ġvisit Include Statement ( context : ĠInclude Statement Context ): Ġany Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġvisit ( context . type Type ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġvisit Package Statement ( context : ĠPackage Statement Context ): Ġany Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġvisit ( context . id ()) Ġas ĠResult ĊĠĠĠĠĠĠĠ Ġvar Ġobj Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġvar Ġextend Ġ= ĠlistOf < str >() ĊĊĠĠĠĠĠĠĠ Ġif Ġ( context . package Static Statement () Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġcontext . package Static Statement () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġr Ġ= Ġvisit ( item ) Ġas ĠResult ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobj Ġ+= Ġr . text ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( context . package Field Statement () Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġcontext . package Field Statement () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġr Ġ= Ġvisit ( item ) Ġas ĠResult ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobj Ġ+= Ġr . text ĊĠĠĠĠĠĠĠĠĠĠĠ Ġextend Ġ+= Ġr . data Ġas Ġlist < str > ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( context . package New Statement () Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġcontext . package New Statement () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġr Ġ= Ġvisit ( item ) Ġas Ġstr ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobj Ġ+= Ġr ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġobj Ġ+= ĠBlock Right Ġ+ ĠWrap ĊĠĠĠĠĠĠĠ Ġvar Ġheader Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġif Ġ( context . annotation Support () Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheader Ġ+= Ġvisit ( context . annotation Support ()) Ġas Ġstr ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġheader Ġ+= Ġ"${ id . permission } Ġclass Ġ${ id . text }" ĊĠĠĠĠĠĠĠ Ġ// Ġ# Ġ æ³Ľ åŀĭ Ġ# ĊĠĠĠĠĠĠĠ Ġvar Ġtemplate Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġvar Ġtemplate Contract Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġif Ġ( context . template Define () Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġvisit ( context . template Define ()) Ġas ĠTemplate Item ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemplate Ġ+= Ġitem . Template ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemplate Contract Ġ= Ġitem . Contract ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheader Ġ+= Ġtemplate ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( extend . count () Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtemp Ġ= Ġextend [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 .. extend . count () Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Ġ+= Ġ"," Ġ+ Ġextend [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheader Ġ+= Ġ":" Ġ+ Ġtemp ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġheader Ġ+= Ġtemplate Contract Ġ+ ĠBlock Left Ġ+ ĠWrap ĊĠĠĠĠĠĠĠ Ġobj Ġ= Ġheader Ġ+ Ġobj ĊĠĠĠĠĠĠĠ Ġthis . self ID Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġreturn Ġobj ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġvisit Package Static Statement ( context : ĠPackage Static Statement Context ) Ġ= ĠResult (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġobj Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġfor Ġ( item Ġin Ġcontext . package Static Support Statement ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobj Ġ+= Ġvisit ( item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtext Ġ= Ġobj ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġvisit Package Field Statement ( context : ĠPackage Field Statement Context ) Ġ= ĠResult (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġobj Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġvar Ġextend Ġ= ĠlistOf < str >() ĊĠĠĠĠĠĠĠ Ġif Ġ( context . id ( 0 ) Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠSelf Ġ= Ġvisit ( context . id ( 0 )) Ġas ĠResult ĊĠĠĠĠĠĠĠĠĠĠĠ Ġself ID Ġ= ĠSelf . text ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( context . id ( 1 ) Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠSuper Ġ= Ġvisit ( context . id ( 1 )) Ġas ĠResult ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper ID Ġ= ĠSuper . text ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( item Ġin Ġcontext . package Support Statement ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontent Ġ= Ġwhen Ġ( visit ( item )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġvisit ( item ) Ġas Ġstr ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( item . getChild ( 0 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠInclude Statement Context Ġ-> Ġextend Ġ+= Ġcontent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġobj Ġ+= Ġcontent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġself ID Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġsuper ID Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġtext Ġ= Ġobj ĊĠĠĠĠĠĠĠ Ġdata Ġ= Ġextend ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġvisit Package Constant Statement ( context : ĠPackage Constant Statement Context ): Ġany Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġr 1 Ġ= Ġvisit ( context . id ()) Ġas ĠResult ĊĠĠĠĠĠĠĠ Ġval Ġis Mutable Ġ= Ġr 1 . is Virtual ĊĠĠĠĠĠĠĠ Ġvar Ġtyp Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġvar Ġr 2 : ĠResult ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġif Ġ( context . expression () Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġr 2 Ġ= Ġvisit ( context . expression ()) Ġas ĠResult ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtyp Ġ= Ġr 2 . data Ġas Ġstr ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( context . type Type () Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtyp Ġ= Ġvisit ( context . type Type ()) Ġas Ġstr ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġobj Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġif Ġ( context . annotation Support () Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobj Ġ+= Ġvisit ( context . annotation Support ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġobj Ġ+= Ġ"${ r 1 . permission } Ġval Ġ${ r 1 . text }: $ typ " ĊĠĠĠĠĠĠĠ Ġobj Ġ+= Ġif Ġ( r 2 Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġ= Ġ${ r 2 . text }$ Wrap " ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWrap ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġobj ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġvisit Package Variable Statement ( context : ĠPackage Variable Statement Context ): Ġany Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġr 1 Ġ= Ġvisit ( context . id ()) Ġas ĠResult ĊĠĠĠĠĠĠĠ Ġval Ġis Mutable Ġ= Ġr 1 . is Virtual ĊĠĠĠĠĠĠĠ Ġvar Ġtyp Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġvar Ġr 2 : ĠResult ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġif Ġ( context . expression () Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġr 2 Ġ= Ġvisit ( context . expression ()) Ġas ĠResult ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtyp Ġ= Ġr 2 . data Ġas Ġstr ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( context . type Type () Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtyp Ġ= Ġvisit ( context . type Type ()) Ġas Ġstr ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġobj Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġif Ġ( context . annotation Support () Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobj Ġ+= Ġvisit ( context . annotation Support ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġobj Ġ+= Ġ"${ r 1 . permission } Ġvar Ġ${ r 1 . text }: $ typ " ĊĠĠĠĠĠĠĠ Ġobj Ġ+= Ġif Ġ( r 2 Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġ= Ġ${ r 2 . text }$ Wrap " ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWrap ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġobj ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġvisit Package Function Statement ( context : ĠPackage Function Statement Context ): Ġany Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġvisit ( context . id ()) Ġas ĠResult ĊĠĠĠĠĠĠĠ Ġval Ġis Virtual Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġvar Ġobj Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġ// Ġ# Ġ æ³Ľ åŀĭ Ġ# ĊĠĠĠĠĠĠĠ Ġvar Ġtemplate Contract Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġif Ġ( context . template Define () Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtemplate Ġ= Ġvisit ( context . template Define ()) Ġas ĠTemplate Item ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobj Ġ+= Ġtemplate . Template ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemplate Contract Ġ= Ġtemplate . Contract ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġ# Ġ å¼ĤæŃ¥ Ġ# ĊĠĠĠĠĠĠĠ Ġvar Ġp out Ġ= Ġvisit ( context . parameter Clause Out ()) Ġas Ġstr ĊĠĠĠĠĠĠĠ Ġif Ġ( context . t . type Ġ== ĠRight _ Flow ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġp out Ġ= Ġif Ġ( p out Ġ!= Ġ" Unit ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp out ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Unit " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobj Ġ+= Ġ"${ id . permission } Ġ$ is Virtual Ġfun Ġ$ template Contract Ġasync Ġ${ id . text } Ġ" ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( context . y Ġ!= Ġnull ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( p out Ġ!= Ġ" Unit ") Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp out Ġ= Ġ"" ĠI Enum Ġ"< " Ġp out Ġ" >" Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobj Ġ+= Ġ" Ġ${ id . permission } Ġ$ is Virtual Ġfun Ġ$ template Contract Ġ${ id . text } Ġ" ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġadd _ current _ set () ĊĠĠĠĠĠĠĠ Ġobj Ġ+= Ġvisit ( context . parameter Clause In ()). to < str >() Ġ+ Ġ":" Ġ+ Ġp out Ġ+ ĠBlock Left Ġ+ ĠWrap ĊĠĠĠĠĠĠĠ Ġobj Ġ+= ĠProcess Function Support ( context . function Support Statement ()) ĊĠĠĠĠĠĠĠ Ġdelete _ current _ set () ĊĠĠĠĠĠĠĠ Ġobj Ġ+= ĠBlock Right Ġ+ ĠWrap ĊĠĠĠĠĠĠĠ Ġthis . super ID Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġreturn Ġobj ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġvisit Package New Statement ( context : ĠPackage New Statement Context ) Ġ= Ġrun Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġobj Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġobj Ġ+= Ġ" public Ġconstructor " ĊĠĠĠĠĠĠĠ Ġ// Ġ# Ġèİ·åıĸ æŀĦéĢł æķ°æį® Ġ# ĊĠĠĠĠĠĠĠ Ġadd _ current _ set () ĊĠĠĠĠĠĠĠ Ġobj Ġ+= Ġvisit ( context . parameter Clause In ()) Ġas Ġstr ĊĠĠĠĠĠĠĠ Ġif Ġ( context . expression List () Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobj Ġ+= Ġ": this (${ visit ( context . expression List ()). to < Result >(). text })" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġobj Ġ+= ĠBlock Left Ġ+ ĠProcess Function Support ( context . function Support Statement ()) Ġ+ ĠBlock Right Ġ+ ĠWrap ĊĠĠĠĠĠĠĠ Ġdelete _ current _ set () ĊĠĠĠĠĠĠĠ Ġobj ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġvisit Package Event Statement ( context : ĠPackage Event Statement Context ) Ġ= Ġrun Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġobj Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġvisit ( context . id ()) Ġas ĠResult ĊĠĠĠĠĠĠĠ Ġval Ġname Space Ġ= Ġvisit ( context . name Space Item ()) ĊĠĠĠĠĠĠĠ Ġobj Ġ+= Ġ" public Ġevent Ġ$ name Space Ġ${ id . text } Ġ$ Wrap " ĊĠĠĠĠĠĠĠ Ġobj ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġvisit Protocol Statement ( context : ĠProtocol Statement Context ) Ġ= Ġrun Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġvisit ( context . id ()) Ġas ĠResult ĊĠĠĠĠĠĠĠ Ġvar Ġobj Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġval Ġextend Ġ= Ġmutable ListOf < str >() ĊĠĠĠĠĠĠĠ Ġvar Ġinterface Protocol Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġvar Ġpt cl Name Ġ= Ġid . text ĊĠĠĠĠĠĠĠ Ġif Ġ( context . annotation Support () Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobj Ġ+= Ġvisit ( context . annotation Support ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( context . protocol Sub Statement () Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġcontext . protocol Sub Statement () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġr Ġ= Ġvisit ( item ) Ġas Ġstr ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinterface Protocol Ġ+= Ġr ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġobj Ġ+= Ġ" public Ġinterface Ġ$ pt cl Name " ĊĠĠĠĠĠĠĠ Ġ// Ġ# Ġ æ³Ľ åŀĭ Ġ# ĊĠĠĠĠĠĠĠ Ġvar Ġtemplate Contract Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġif Ġ( context . template Define () Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtemplate Ġ= Ġvisit ( context . template Define ()) Ġas ĠTemplate Item ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobj Ġ+= Ġtemplate . Template ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemplate Contract Ġ= Ġtemplate . Contract ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( extend . count () Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtemp Ġ= Ġextend [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 .. extend . count () Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Ġ+= Ġ"," Ġ+ Ġextend [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobj Ġ+= Ġ":" Ġ+ Ġtemp ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġobj Ġ+= Ġtemplate Contract Ġ+ ĠBlock Left Ġ+ ĠWrap ĊĠĠĠĠĠĠĠ Ġobj Ġ+= Ġinterface Protocol ĊĠĠĠĠĠĠĠ Ġobj Ġ+= ĠBlock Right Ġ+ ĠWrap ĊĠĠĠĠĠĠĠ Ġobj ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġvisit Protocol Sub Statement ( context : ĠProtocol Sub Statement Context ): Ġany Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġobj Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġfor Ġ( item Ġin Ġcontext . protocol Support Statement ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobj Ġ+= Ġ( visit ( item ) Ġas ĠResult ). text ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġobj ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġvisit Protocol Variable Statement ( context : ĠProtocol Variable Statement Context ): Ġany Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġid Ġ= Ġvisit ( context . id ()) Ġas ĠResult ĊĠĠĠĠĠĠĠ Ġvar Ġis Mutable Ġ= Ġid . is Virtual ĊĠĠĠĠĠĠĠ Ġvar Ġobj Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġif Ġ( context . annotation Support () Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobj Ġ+= Ġvisit ( context . annotation Support ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġvisit ( context . type Type ()) Ġas Ġstr ĊĠĠĠĠĠĠĠ Ġif Ġ( context . Bang () Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobj Ġ+= Ġ" val Ġ" ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobj Ġ+= Ġ" var Ġ" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġobj Ġ+= Ġid . text Ġ+ Ġ": Ġ" Ġ+ Ġtype Ġ+ ĠWrap ĊĠĠĠĠĠĠĠ Ġreturn ĠResult (). apply Ġ{ Ġtext Ġ= Ġobj Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġvisit Protocol Function Statement ( context : ĠProtocol Function Statement Context ) Ġ= ĠResult (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġvisit ( context . id ()) Ġas ĠResult ĊĠĠĠĠĠĠĠ Ġif Ġ( context . annotation Support () Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ+= Ġvisit ( context . annotation Support ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpermission Ġ= Ġ" public " ĊĠĠĠĠĠĠĠ Ġ// Ġ# Ġ å¼ĤæŃ¥ Ġ# ĊĠĠĠĠĠĠĠ Ġvar Ġp out Ġ= Ġvisit ( context . parameter Clause Out ()) Ġas Ġstr Ċ // ĠĠĠĠĠĠĠ Ġif Ġ( context . t . type Ġ== ĠRight _ Flow ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( p out Ġ!= Ġ" Unit ") Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp out Ġ= Ġ"" ĠTask Ġ"< " Ġp out Ġ" >" Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp out Ġ= ĠTask Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( context . y Ġ!= Ġnull ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( p out Ġ!= Ġ" Unit ") Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp out Ġ= Ġ"" ĠI Enum Ġ"< " Ġp out Ġ" >" Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtext Ġ+= Ġ" fun Ġ" ĊĠĠĠĠĠĠĠ Ġ// Ġ# Ġ æ³Ľ åŀĭ Ġ# ĊĠĠĠĠĠĠĠ Ġvar Ġtemplate Contract Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġif Ġ( context . template Define () Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtemplate Ġ= Ġvisit ( context . template Define ()) Ġas ĠTemplate Item ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ+= Ġtemplate . Template ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemplate Contract Ġ= Ġtemplate . Contract ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtext Ġ+= Ġid . text Ġ+ Ġvisit ( context . parameter Clause In ()). to < str >() Ġ+ Ġ":" Ġ+ Ġp out Ġ+ Ġtemplate Contract Ġ+ ĠWrap ĊĠĠĠ Ġ} Ċ Ċ }