/* Ċ Ġ* ĠA _ Phrase . kt Ċ Ġ* ĠCopyright ĠÂ© Ġ 1 9 9 3 - 2 0 2 0 , ĠThe ĠAv ail ĠFoundation , ĠLLC . Ċ Ġ* ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* ĠRedistribution Ġand Ġuse Ġin Ġsource Ġand Ġbinary Ġforms , Ġwith Ġor Ġwithout Ċ Ġ* Ġmodification , Ġare Ġpermitted Ġprovided Ġthat Ġthe Ġfollowing Ġconditions Ġare Ġmet : Ċ Ġ* Ċ Ġ* Ġ Ġ* ĠRedistributions Ġof Ġsource Ġcode Ġmust Ġretain Ġthe Ġabove Ġcopyright Ġnotice , Ċ Ġ* ĠĠĠ Ġthis Ġlist Ġof Ġconditions Ġand Ġthe Ġfollowing Ġdisclaimer . Ċ Ġ* Ċ Ġ* Ġ Ġ* ĠRedistributions Ġin Ġbinary Ġform Ġmust Ġreproduce Ġthe Ġabove Ġcopyright Ġnotice , Ċ Ġ* ĠĠĠ Ġthis Ġlist Ġof Ġconditions Ġand Ġthe Ġfollowing Ġdisclaimer Ġin Ġthe Ġdocumentation Ċ Ġ* ĠĠĠ Ġand / or Ġother Ġmaterials Ġprovided Ġwith Ġthe Ġdistribution . Ċ Ġ* Ċ Ġ* Ġ Ġ* ĠNeither Ġthe Ġname Ġof Ġthe Ġcopyright Ġholder Ġnor Ġthe Ġnames Ġof Ġthe Ġcontributors Ċ Ġ* ĠĠĠ Ġmay Ġbe Ġused Ġto Ġendorse Ġor Ġpromote Ġproducts Ġderived Ġfrom Ġthis Ġsoftware Ċ Ġ* ĠĠĠ Ġwithout Ġspecific Ġprior Ġwritten Ġpermission . Ċ Ġ* Ċ Ġ* ĠTHIS ĠSOFTWARE ĠIS ĠPROVIDED ĠBY ĠTHE ĠCOPYRIGHT ĠHOLDERS ĠAND ĠCONTRIBUTORS Ġ" AS ĠIS " Ċ Ġ* ĠAND ĠANY ĠEXPRESS ĠOR ĠIMPLIED ĠWARRANTIES , ĠINCLUDING , ĠBUT ĠNOT ĠLIMITED ĠTO , ĠTHE Ċ Ġ* ĠIMPLIED ĠWARRANTIES ĠOF ĠMERCHANTABILITY ĠAND ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE Ċ Ġ* ĠARE ĠDISCLAIMED . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE ĠCOPYRIGHT ĠHOLDER ĠOR ĠCONTRIBUTORS ĠBE Ċ Ġ* ĠLIABLE ĠFOR ĠANY ĠDIRECT , ĠINDIRECT , ĠINCIDENTAL , ĠSPECIAL , ĠEXEMPLARY , ĠOR Ċ Ġ* ĠCONSEQUENTIAL ĠDAMAGES Ġ( INCLUDING , ĠBUT ĠNOT ĠLIMITED ĠTO , ĠPROCUREMENT ĠOF Ċ Ġ* ĠSUBSTITUTE ĠGOODS ĠOR ĠSERVICES ; ĠLOSS ĠOF ĠUSE , ĠDATA , ĠOR ĠPROFITS ; ĠOR ĠBUSINESS Ċ Ġ* ĠINTERRUPTION ) ĠHOWEVER ĠCAUSED ĠAND ĠON ĠANY ĠTHEORY ĠOF ĠLIABILITY , ĠWHETHER ĠIN Ċ Ġ* ĠCONTRACT , ĠSTRICT ĠLIABILITY , ĠOR ĠTORT Ġ( INCLUDING ĠNEGLIGENCE ĠOR ĠOTHERWISE ) Ċ Ġ* ĠARISING ĠIN ĠANY ĠWAY ĠOUT ĠOF ĠTHE ĠUSE ĠOF ĠTHIS ĠSOFTWARE , ĠEVEN ĠIF ĠADVISED ĠOF ĠTHE Ċ Ġ* ĠPOSSIBILITY ĠOF ĠSUCH ĠDAMAGE . Ċ Ġ*/ Ċ package Ġcom . avail . descriptor . ph rases Ċ Ċ import Ġcom . avail . compiler . Avail Code Generator Ċ import Ġcom . avail . compiler . Avail Compiler Ċ import Ġcom . avail . descriptor . atoms . A _ Atom Ċ import Ġcom . avail . descriptor . bundles . A _ Bundle Ċ import Ġcom . avail . descriptor . functions . A _ Raw Function Ċ import Ġcom . avail . descriptor . functions . Compiled Code Descriptor Ċ import Ġcom . avail . descriptor . module . A _ Module Ċ import Ġcom . avail . descriptor . representation . A _ Basic Object Ċ import Ġcom . avail . descriptor . representation . A _ Basic Object . Companion . dispatch Ċ import Ġcom . avail . descriptor . representation . Avail Object Ċ import Ġcom . avail . descriptor . representation . Mut ability Ċ import Ġcom . avail . descriptor . representation . Nil Descriptor Ċ import Ġcom . avail . descriptor . representation . Nil Descriptor . Companion . nil Ċ import Ġcom . avail . descriptor . sets . A _ Set Ċ import Ġcom . avail . descriptor . tokens . A _ Token Ċ import Ġcom . avail . descriptor . tuples . A _ Tuple Ċ import Ġcom . avail . descriptor . types . A _ Type Ċ import Ġcom . avail . descriptor . types . Phrase TypeDescriptor Ċ import Ġcom . avail . descriptor . types . Phrase TypeDescriptor . Phrase Kind Ċ import Ġcom . avail . descriptor . types . TypeDescriptor Ċ import Ġcom . avail . descriptor . variables . A _ Variable Ċ import Ġcom . avail . interpreter . Primitive Ċ Ċ /** Ċ Ġ* ĠAn Ġ` A _ Phrase ` Ġis Ġgenerally Ġproduced Ġwhen Ġthe Ġ[ Avail Compiler ] Ġparses Ġsource Ċ Ġ* Ġcode Ġof Ġan Ġ[ A _ Module ]. Ġ ĠAv ail Ġdefines Ġa Ġvariety Ġof Ġphrases , Ġwhich Ġare Ċ Ġ* Ġimplemented Ġby Ġthe Ġsubclasses Ġof Ġ[ Phrase Descriptor ]. Ġ Ġ[ A _ Phrase ] Ġis Ġa Ċ Ġ* Ġsub - interface Ġof Ġ[ A _ Basic Object ], Ġand Ġdefines Ġthe Ġoperations Ġthat Ġphrases Ċ Ġ* Ġimplement . Ċ Ġ* Ċ Ġ* Ġ@ author ĠMark Ġvan ĠG ul ik Ġ& lt ; mark @ avail lang . org & gt ; Ċ Ġ*/ Ċ interface ĠA _ Phrase Ġ: ĠA _ Basic Object Ġ{ Ċ ĉ comp anion Ġobject Ġ{ Ċĉ ĉ /** Ċĉĉ Ġ* ĠAnswer Ġthe Ġ[ A _ Atom ] Ġthat Ġthis Ġphrase Ġis Ġa Ċĉĉ Ġ* Ġ[ send ][ Send Phrase Descriptor ] Ġof . Ġ ĠIf Ġthis Ġis Ġa Ċĉĉ Ġ* Ġ[ macro ][ Macro Substitution Phrase Descriptor ] Ġinvocation , Ġanswer Ġthe Ċĉĉ Ġ* Ġ[ A _ Atom ] Ġthat Ġthe Ġoriginal Ġexpression , Ġprior Ġto Ġmacro Ġtransformation , Ċĉĉ Ġ* Ġwas Ġan Ġapparent Ġsend Ġof . Ġ ĠIf Ġthe Ġphrase Ġis Ġneither Ġa Ġsend Ċĉĉ Ġ* Ġnor Ġa Ġmacro Ġinvocation , Ġanswer Ġ[ nil ]. Ċĉĉ Ġ* Ċĉĉ Ġ* Ġ@ return Ċĉĉ Ġ* ĠĠ ĠThe Ġ[ A _ Atom ] Ġapparently Ġsent Ġby Ġthis Ġphrase . Ċĉĉ Ġ*/ Ċĉ ĉ fun ĠA _ Phrase . app arent Send Name (): ĠA _ Atom Ġ= Ċĉĉ ĉ dispatch Ġ{ Ġo _ App arent Send Name ( it ) Ġ} ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠAnswer Ġthe Ġ[ list &# 3 2 ; phrase ][ List Phrase Descriptor ] Ġthat Ġprovides Ċĉĉ Ġ* Ġarguments Ġto Ġthis Ġ[ send ][ Send Phrase Descriptor ] Ġphrase . Ġ ĠIf Ġthis Ġis Ġa Ċĉĉ Ġ* Ġ[ macro ][ Macro Substitution Phrase Descriptor ] Ġinvocation , Ġthese Ġare Ġthe Ċĉĉ Ġ* Ġarguments Ġsupplied Ġto Ġthe Ġmacro 's Ġoutput , Ġwhich Ġmust Ġbe Ġa Ġsend Ċĉĉ Ġ* Ġphrase . Ċĉĉ Ġ* Ċĉĉ Ġ* ĠThis Ġmethod Ġis Ġonly Ġapplicable Ġto Ġsend Ġphrases Ġand Ġmacros Ġthat Ċĉĉ Ġ* Ġproduce Ġsend Ġphrases . Ċĉĉ Ġ* Ċĉĉ Ġ* Ġ@ return Ċĉĉ Ġ* ĠĠ ĠThis Ġ[ send ][ Send Phrase Descriptor ] Ġphrase 's Ġarguments Ġlist . Ċĉĉ Ġ*/ Ċĉ ĉ fun ĠA _ Phrase . arguments ListNode (): ĠA _ Phrase Ġ= Ċĉĉ ĉ dispatch Ġ{ Ġo _ Arguments ListNode ( it ) Ġ} ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠAnswer Ġthe Ġ[ tuple ][ A _ Tuple ] Ġof Ġ[ argument ][ Phrase Kind . ARGUMENT _ PH R ASE ] Ċĉĉ Ġ* Ġdeclaration Ġphrases Ġof Ġthis Ġ[ block ][ Block Phrase Descriptor ] Ġphrase . Ċĉĉ Ġ* Ċĉĉ Ġ* Ġ@ return Ċĉĉ Ġ* ĠĠ ĠThe Ġtuple Ġof Ġargument Ġdeclarations Ġfor Ġthis Ġblock Ġphrase . Ċĉĉ Ġ*/ Ċĉ ĉ fun ĠA _ Phrase . arguments Tuple (): ĠA _ Tuple Ġ= Ċĉĉ ĉ dispatch Ġ{ Ġo _ Arguments Tuple ( it ) Ġ} ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠAnswer Ġthis Ġsend Ġphrase 's Ġmessage Ġ[ bundle ][ A _ Bundle ]. Ġ ĠIf Ġthis Ġis Ġa Ċĉĉ Ġ* Ġ[ macro ][ Macro Substitution Phrase Descriptor ] Ġinvocation , Ġanswer Ġthe Ċĉĉ Ġ* Ġmessage Ġbundle Ġthat Ġis Ġthe Ġone Ġsent Ġby Ġthe Ġresulting Ġsend Ġphrase . Ċĉĉ Ġ* Ċĉĉ Ġ* ĠThis Ġmethod Ġis Ġonly Ġapplicable Ġto Ġsend Ġphrases Ġor Ġmacros Ġthat Ġproduce Ċĉĉ Ġ* Ġsend Ġphrases . Ċĉĉ Ġ* Ċĉĉ Ġ* Ġ@ return Ċĉĉ Ġ* ĠĠ ĠThe Ġmessage Ġbundle Ġthat Ġwill Ġbe Ġinvoked . Ċĉĉ Ġ*/ Ċĉ ĉ fun ĠA _ Phrase . bundle (): ĠA _ Bundle Ġ= Ċĉĉ ĉ dispatch Ġ{ Ġo _ Bundle ( it ) Ġ} ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠPerform Ġthe Ġgiven Ġaction Ġfor Ġeach Ġchild Ġphrase Ġof Ġthis Ġphrase . Ċĉĉ Ġ* Ċĉĉ Ġ* Ġ@ param Ġaction Ċĉĉ Ġ* ĠĠ ĠThe Ġaction Ġto Ġperform Ġwith Ġthis Ġphrase 's Ġdirect Ġsub ph rases . Ċĉĉ Ġ*/ Ċĉ ĉ fun ĠA _ Phrase . children Do ( action : Ġ( A _ Phrase ) Ġ-> ĠUnit ) Ġ= Ċĉĉ ĉ dispatch Ġ{ Ġo _ Children Do ( it , Ġaction ) Ġ} ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠPerform Ġthe Ġgiven Ġtransformation Ġfor Ġeach Ġchild Ġphrase Ġof Ġthis Ċĉĉ Ġ* Ġphrase , Ġwriting Ġthe Ġresult Ġof Ġthe Ġtransformation Ġback Ġinto Ġthis Ċĉĉ Ġ* Ġphrase . Ġ ĠThis Ġphrase Ġmust Ġbe Ġ[ mutable ][ Mut ability . MUT ABLE ]. Ċĉĉ Ġ* Ċĉĉ Ġ* Ġ@ param Ġtransformer Ċĉĉ Ġ* ĠĠ ĠHow Ġto Ġtransform Ġeach Ġchild Ġphrase . Ċĉĉ Ġ*/ Ċĉ ĉ fun ĠA _ Phrase . children Map ( transformer : Ġ( A _ Phrase ) Ġ-> ĠA _ Phrase ) Ġ= Ċĉĉ ĉ dispatch Ġ{ Ġo _ Children Map ( it , Ġtransformer ) Ġ} ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠIf Ġthe Ġreceiver Ġis Ġmutable , Ġmake Ġits Ġsub objects Ġimmutable Ġand Ġreturn Ċĉĉ Ġ* Ġit . ĠOtherwise , Ġmake Ġa Ġmutable Ġcopy Ġof Ġthe Ġreceiver Ġand Ġreturn Ġit . Ċĉĉ Ġ* Ċĉĉ Ġ* Ġ@ return Ċĉĉ Ġ* ĠĠ ĠThe Ġmutable Ġreceiver Ġor Ġa Ġmutable Ġcopy Ġof Ġit . Ċĉĉ Ġ*/ Ċĉ ĉ fun ĠA _ Phrase . copy Mutable Phrase (): ĠA _ Phrase Ġ= Ċĉĉ ĉ dispatch Ġ{ Ġo _ Copy Mutable Phrase ( it ) Ġ} ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠCreate Ġa Ġnew Ġ[ list &# 3 2 ; phrase ][ List Phrase Descriptor ] Ġlike Ġthe Ċĉĉ Ġ* Ġreceiver , Ġbut Ġwith Ġone Ġmore Ġphrase Ġadded Ġto Ġthe Ġend Ġof Ġthe Ġlist . Ċĉĉ Ġ* Ċĉĉ Ġ* Ġ@ param Ġnew Phrase Ċĉĉ Ġ* ĠĠ ĠThe Ġphrase Ġto Ġappend . Ċĉĉ Ġ* Ġ@ return Ċĉĉ Ġ* ĠĠ ĠA Ġnew Ġlist Ġphrase Ġwith Ġthe Ġgiven Ġphrase Ġappended . Ċĉĉ Ġ*/ Ċĉ ĉ fun ĠA _ Phrase . copy With ( new Phrase : ĠA _ Phrase ): ĠA _ Phrase Ġ= Ċĉĉ ĉ dispatch Ġ{ Ġo _ CopyWith ( it , Ġnew Phrase ) Ġ} ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠCreate Ġa Ġnew Ġ[ list &# 3 2 ; phrase ][ List Phrase Descriptor ] Ġwith Ġthe Ċĉĉ Ġ* Ġelements Ġof Ġthe Ġgiven Ġlist Ġphrase Ġappended Ġto Ġthe Ġones Ġin Ġthe Ċĉĉ Ġ* Ġreceiver . Ċĉĉ Ġ* Ċĉĉ Ġ* Ġ@ param Ġnew List Phrase Ċĉĉ Ġ* ĠĠ ĠThe Ġlist Ġphrase Ġcontaining Ġphrases Ġto Ġappend . Ċĉĉ Ġ* Ġ@ return Ċĉĉ Ġ* ĠĠ ĠA Ġnew Ġlist Ġphrase Ġwith Ġthe Ġgiven Ġlist Ġphrase 's Ġsub ph rases Ġappended . Ċĉĉ Ġ*/ Ċĉ ĉ fun ĠA _ Phrase . copy Concat en ating ( new List Phrase : ĠA _ Phrase ): ĠA _ Phrase Ġ= Ċĉĉ ĉ dispatch Ġ{ Ġo _ Copy Concat en ating ( it , Ġnew List Phrase ) Ġ} ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠAnswer Ġthe Ġ[ declaration ][ Declaration Phrase Descriptor ] Ġphrase Ċĉĉ Ġ* Ġreferenced Ġby Ġthis Ġ[ variable &# 3 2 ; use ][ Variable Use Phrase Descriptor ] Ċĉĉ Ġ* Ġphrase . Ġ ĠIf Ġthis Ġphrase Ġis Ġa Ċĉĉ Ġ* Ġ[ macro ][ Macro Substitution Phrase Descriptor ] Ġinvocation , Ġanswer Ġthe Ċĉĉ Ġ* Ġdeclaration Ġreferenced Ġby Ġthe Ġvariable Ġuse Ġproduced Ġby Ġthe Ġmacro . Ċĉĉ Ġ* Ċĉĉ Ġ* Ġ@ return Ċĉĉ Ġ* ĠĠ ĠThe Ġdeclaration Ġreferenced Ġby Ġthis Ġvariable Ġuse . Ċĉĉ Ġ*/ Ċĉ ĉ fun ĠA _ Phrase . declaration (): ĠA _ Phrase Ġ= Ċĉĉ ĉ dispatch Ġ{ Ġo _ Declaration ( it ) Ġ} ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠAnswer Ġthe Ġ[ set ][ A _ Set ] Ġof Ġexception Ġtypes Ġthat Ġare Ġdeclared Ġby Ġthis Ċĉĉ Ġ* Ġ[ block ][ Block Phrase Descriptor ] Ġphrase . Ċĉĉ Ġ* Ċĉĉ Ġ* ĠA Ġmethod Ġby Ġthe Ġsame Ġname Ġis Ġalso Ġdefined Ġfor Ġfunction Ċĉĉ Ġ* Ġ[ types ][ A _ Type ]. Ċĉĉ Ġ* Ċĉĉ Ġ* Ġ@ return ĠThe Ġset Ġof Ġdeclared Ġexception Ġtypes Ġfor Ġthis Ġblock Ġphrase . Ċĉĉ Ġ*/ Ċĉ ĉ fun ĠA _ Phrase . declared Exceptions (): ĠA _ Set Ġ= Ċĉĉ ĉ dispatch Ġ{ Ġo _ Declared Exceptions ( it ) Ġ} ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠAnswer Ġthe Ġtype Ġof Ġthe Ġvariable , Ġconstant , Ġor Ġargument Ġdeclared Ġby Ċĉĉ Ġ* Ġthis Ġ[ declaration &# 3 2 ; phrase ][ Declaration Phrase Descriptor ]. Ċĉĉ Ġ* Ċĉĉ Ġ* Ġ@ return Ċĉĉ Ġ* ĠĠ ĠThe Ġdeclaration Ġphrase 's Ġtype . Ċĉĉ Ġ*/ Ċĉ ĉ fun ĠA _ Phrase . declared Type (): ĠA _ Type Ġ= Ċĉĉ ĉ dispatch Ġ{ Ġo _ Declared Type ( it ) Ġ} ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠEmit Ġcode Ġto Ġpush Ġeach Ġvalue Ġproduced Ġby Ġthe Ġexpressions Ġof Ġa Ċĉĉ Ġ* Ġ[ list &# 3 2 ; phrase ][ List Phrase Descriptor ] Ġor Ċĉĉ Ġ* Ġ[ per muted &# 3 2 ; list &# 3 2 ; phrase ][ Per mut edList Phrase Descriptor ]. Ċĉĉ Ġ* Ċĉĉ Ġ* Ġ@ param Ġcode Generator Ċĉĉ Ġ* ĠĠ ĠWhere Ġto Ġwrite Ġthe ĠL 1 Ġinstructions . Ċĉĉ Ġ*/ Ċĉ ĉ fun ĠA _ Phrase . emit All Values On ( code Generator : ĠAv ail Code Generator ) Ġ= Ċĉĉ ĉ dispatch Ġ{ Ġo _ Emit All Values On ( it , Ġcode Generator ) Ġ} ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠEmit Ġcode Ġto Ġperform Ġthe Ġeffect Ġof Ġthis Ġphrase , Ġleaving Ġthe Ġoperand Ċĉĉ Ġ* Ġstack Ġthe Ġsame Ġas Ġbefore Ġthese Ġinstructions . Ċĉĉ Ġ* Ċĉĉ Ġ* Ġ@ param Ġcode Generator Ċĉĉ Ġ* ĠĠ ĠWhere Ġto Ġwrite Ġthe ĠL 1 Ġinstructions . Ċĉĉ Ġ*/ Ċĉ ĉ fun ĠA _ Phrase . emit Effect On ( code Generator : ĠAv ail Code Generator ) Ġ= Ċĉĉ ĉ dispatch Ġ{ Ġo _ Emit Effect On ( it , Ġcode Generator ) Ġ} ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠEmit Ġcode Ġto Ġperform Ġthis Ġphrase , Ġleaving Ġits Ġresult Ġon Ġthe Ġstack . Ċĉĉ Ġ* Ċĉĉ Ġ* Ġ@ param Ġcode Generator Ċĉĉ Ġ* ĠĠ ĠWhere Ġto Ġwrite Ġthe ĠL 1 Ġinstructions . Ċĉĉ Ġ*/ Ċĉ ĉ fun ĠA _ Phrase . emit Value On ( code Generator : ĠAv ail Code Generator ) Ġ= Ċĉĉ ĉ dispatch Ġ{ Ġo _ Emit Value On ( it , Ġcode Generator ) Ġ} ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠIf Ġthis Ġphrase Ġis Ġan Ġ[ assignment ][ Assignment Phrase Descriptor ], Ġanswer Ċĉĉ Ġ* Ġthe Ġexpression Ġthat Ġproduces Ġthe Ġvalue Ġto Ġassign . Ġ ĠIf Ġthis Ġphrase Ġis Ċĉĉ Ġ* Ġan Ġ[ expression - as - statement ][ Expression As Statement Phrase Descriptor ], Ċĉĉ Ġ* Ġanswer Ġthe Ġexpression Ġto Ġtreat Ġas Ġa Ġstatement . Ġ ĠIf Ġthis Ġphrase Ġis Ġa Ċĉĉ Ġ* Ġ[ super - cast ][ Super Cast Phrase Descriptor ], Ġanswer Ġthe Ġexpression Ġthat Ċĉĉ Ġ* Ġproduces Ġthe Ġactual Ġvalue Ġto Ġsend . Ġ ĠIf Ġthis Ġphrase Ġis Ġa Ċĉĉ Ġ* Ġ[ macro ][ Macro Substitution Phrase Descriptor ], Ġuse Ġthe Ġabove Ġrules Ġon Ċĉĉ Ġ* Ġthe Ġoutput Ġof Ġthe Ġmacro . Ċĉĉ Ġ* Ċĉĉ Ġ* Ġ@ return Ċĉĉ Ġ* ĠĠ ĠThe Ġphrase 's Ġ' expression ', Ġwhich Ġvar ies Ġby Ġphrase Ġkind . Ċĉĉ Ġ*/ Ċĉ ĉ fun ĠA _ Phrase . expression (): ĠA _ Phrase Ġ= Ċĉĉ ĉ dispatch Ġ{ Ġo _ Expression ( it ) Ġ} ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠExtract Ġthe ĠN th Ġexpression Ġof Ġthis Ġ[ list ][ List Phrase Descriptor ]. ĠIf Ċĉĉ Ġ* Ġthis Ġis Ġa Ġ[ per muted ][ Per mut edList Phrase Descriptor ] Ġlist Ġphrase , Ġdo Ċĉĉ Ġ* Ġnot Ġtransform Ġthe Ġindex . Ċĉĉ Ġ* Ċĉĉ Ġ* Ġ@ param Ġindex Ċĉĉ Ġ* ĠĠ ĠWhich Ġexpression Ġto Ġextract . Ċĉĉ Ġ* Ġ@ return Ċĉĉ Ġ* ĠĠ ĠThe Ġchosen Ġphrase . Ċĉĉ Ġ*/ Ċĉ ĉ fun ĠA _ Phrase . expression At ( index : ĠInt ): ĠA _ Phrase Ġ= Ċĉĉ ĉ dispatch Ġ{ Ġo _ Expression At ( it , Ġindex ) Ġ} ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠAnswer Ġthe Ġnumber Ġof Ġexpressions Ġin Ġthis Ġ[ list ][ List Phrase Descriptor ] Ċĉĉ Ġ* Ġphrase . Ċĉĉ Ġ* Ċĉĉ Ġ* Ġ@ return Ċĉĉ Ġ* ĠĠ ĠThe Ġlist 's Ġsize . Ċĉĉ Ġ*/ Ċĉ ĉ fun ĠA _ Phrase . expressions Size (): ĠInt Ġ= Ċĉĉ ĉ dispatch Ġ{ Ġo _ Expressions Size ( it ) Ġ} ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠAnswer Ġthe Ġtuple Ġof Ġexpressions Ġin Ġthis Ġ[ list ][ List Phrase Descriptor ] Ċĉĉ Ġ* Ġphrase . Ċĉĉ Ġ* Ċĉĉ Ġ* Ġ@ return Ċĉĉ Ġ* ĠĠ ĠThe Ġlist 's Ġexpressions , Ġas Ġa Ġ[ tuple ][ A _ Tuple ]. Ċĉĉ Ġ*/ Ċĉ ĉ fun ĠA _ Phrase . expressions Tuple (): ĠA _ Tuple Ġ= Ċĉĉ ĉ dispatch Ġ{ Ġo _ Expressions Tuple ( it ) Ġ} ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠReturn Ġthe Ġphrase 's Ġexpression Ġtype , Ġwhich Ġis Ġthe Ġtype Ġof Ġobject Ġthat Ċĉĉ Ġ* Ġwill Ġbe Ġproduced Ġby Ġthis Ġphrase . Ċĉĉ Ġ* Ċĉĉ Ġ* ĠAlso Ġimplemented Ġin Ġ[ A _ Type ], Ġfor Ġphrase Ġtypes . Ċĉĉ Ġ* Ċĉĉ Ġ* Ġ@ return Ċĉĉ Ġ* ĠĠ ĠThe Ġ[ type ][ TypeDescriptor ] Ġof Ġthe Ġ[ Avail Object ] Ġthat Ġwill Ġbe Ċĉĉ Ġ* ĠĠ Ġproduced Ġby Ġthis Ġphrase . Ċĉĉ Ġ*/ Ċĉ ĉ fun ĠA _ Phrase . phrase Expression Type (): ĠA _ Type Ġ= Ċĉĉ ĉ dispatch Ġ{ Ġo _ Phrase Expression Type ( it ) Ġ} ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠIf Ġthis Ġphrase Ġis Ġa Ġ[ sequence ][ Sequence Phrase Descriptor ], Ġtake Ġany Ċĉĉ Ġ* Ġstatements Ġwithin Ġit Ġthat Ġare Ġalso Ġsequences , Ġand Ġflatten Ġthem Ġall Ċĉĉ Ġ* Ġinto Ġone Ġsequence , Ġreturning Ġthe Ġ[ List ] Ġof Ġstatements . Ġ ĠHandle Ċĉĉ Ġ* Ġ[ first - of - sequence ][ First Of Sequence Phrase Descriptor ] Ġphrases Ċĉĉ Ġ* Ġcorrectly , Ġallowing Ġthe Ġresulting Ġstructure Ġto Ġbe Ġup Ġto Ġtwo Ġlayers Ċĉĉ Ġ* Ġdeep . Ċĉĉ Ġ* Ċĉĉ Ġ* Ġ@ param Ġaccumulated Statements Ċĉĉ Ġ* ĠĠ ĠThe Ġflatten ed Ġlist Ġof Ġmy Ġstatements . Ċĉĉ Ġ*/ Ċĉ ĉ fun ĠA _ Phrase . flatten Statements Into ( Ċĉĉ ĉ acc umulated Statements : ĠMutable List < A _ Phrase > Ċĉ ĉ ) Ġ= Ġdispatch Ġ{ Ġo _ Flatten Statements Into ( it , Ġaccumulated Statements ) Ġ} ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠCompile Ġthis Ġ[ block ][ Block Phrase Descriptor ] Ġphrase Ġinto Ġa Ċĉĉ Ġ* Ġ[ raw &# 3 2 ; function ][ Compiled Code Descriptor ], Ġrecording Ġwithin Ġit Ġthat Ċĉĉ Ġ* Ġit Ġwas Ġcompiled Ġwithin Ġthe Ġgiven Ġ[ module ][ A _ Module ]. Ċĉĉ Ġ* Ċĉĉ Ġ* Ġ@ param Ġmodule Ċĉĉ Ġ* ĠĠ ĠThe Ġ[ A _ Module ] Ġin Ġwhich Ġthe Ġcompilation Ġhappened . Ċĉĉ Ġ* Ġ@ return Ċĉĉ Ġ* ĠĠ ĠAn Ġ[ A _ Raw Function ] Ġbased Ġon Ġthe Ġblock Ġphrase . Ċĉĉ Ġ*/ Ċĉ ĉ fun ĠA _ Phrase . generate In Module ( module : ĠA _ Module ): ĠA _ Raw Function Ġ= Ċĉĉ ĉ dispatch Ġ{ Ġo _ Generate In Module ( it , Ġmodule ) Ġ} ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠThis Ġis Ġan Ġexpression Ġact ing Ġas Ġan Ġargument , Ġa Ġrecursive Ċĉĉ Ġ* Ġ[ list ][ List Phrase Descriptor ] Ġphrase Ġof Ġarguments Ġ( per haps Ċĉĉ Ġ* Ġ[ per muted ][ Per mut edList Phrase Descriptor ]), Ġor Ġa Ċĉĉ Ġ* Ġ[ super - cast ][ Super Cast Phrase Descriptor ]. Ġ ĠAnswer Ġwhether Ġit Ġeither Ġis Ċĉĉ Ġ* Ġor Ġcontains Ġwithin Ġthe Ġrecursive Ġlist Ġstructure Ġa Ġsuper - cast Ġphrase . Ċĉĉ Ġ* Ċĉĉ Ġ* Ġ@ return Ċĉĉ Ġ* ĠĠ ĠWhether Ġthis Ġis Ġa Ġsuper - cast Ġphrase Ġor Ġa Ġrecursive Ġlist Ġor Ġper muted Ċĉĉ Ġ* ĠĠ Ġlist Ġcontaining Ġone . Ċĉĉ Ġ*/ Ċĉ ĉ fun ĠA _ Phrase . has Super Cast (): ĠBoolean Ġ= Ċĉĉ ĉ dispatch Ġ{ Ġo _ Has Super Cast ( it ) Ġ} ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠAnswer Ġthe Ġ[ phrase ][ Phrase Descriptor ] Ġproducing Ġthe Ġvalue Ġto Ġbe Ċĉĉ Ġ* Ġassigned Ġduring Ġinitialization Ġof Ġa Ċĉĉ Ġ* Ġ[ variable ][ Phrase Kind . VARIABLE _ USE _ PH R ASE ] Ċĉĉ Ġ* Ġ[ declaration ][ Declaration Phrase Descriptor ]. Ġ ĠIf Ġthere Ġis Ġno Ċĉĉ Ġ* Ġinitialization Ġexpression , Ġanswer Ġ[ nil ]. Ċĉĉ Ġ* Ċĉĉ Ġ* Ġ@ return Ċĉĉ Ġ* ĠĠ ĠThe Ġvariable Ġdeclaration 's Ġexpression Ġthat Ġproduces Ġa Ġvalue Ġfor Ġits Ċĉĉ Ġ* ĠĠ Ġinitializing Ġassignment . Ċĉĉ Ġ*/ Ċĉ ĉ fun ĠA _ Phrase . initialization Expression (): ĠAv ail Object Ġ= Ċĉĉ ĉ dispatch Ġ{ Ġo _ Initialization Expression ( it ) Ġ} ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠAlter Ġwhether Ġthis Ġ[ variable &# 3 2 ; use ][ Variable Use Phrase Descriptor ] Ġis Ċĉĉ Ġ* Ġthe Ġchrono logic ally Ġlast Ġtime Ġits Ġvariable Ġwill Ġbe Ġused Ġwithin Ġthis Ċĉĉ Ġ* Ġblock . ĠThis Ġmay Ġbe Ġperformed Ġon Ġimmutable Ġphrases . Ġ ĠDo Ġnot Ġexpose Ċĉĉ Ġ* Ġthis Ġfunction Ġto Ġthe ĠAv ail Ġlanguage , Ġas Ġit Ġis Ġonly Ġintended Ġas Ġa Ċĉĉ Ġ* Ġconvenience Ġfor Ġbook keep ing Ġduring Ġcode Ġgeneration . Ċĉĉ Ġ* Ċĉĉ Ġ* Ġ@ param Ġis Last Use Ċĉĉ Ġ* ĠĠ ĠWhat Ġto Ġset Ġthe Ġvariable Ġuse 's Ġlast - use Ġflag Ġto . Ċĉĉ Ġ*/ Ċĉ ĉ fun ĠA _ Phrase . is Last Use ( is Last Use : ĠBoolean ) Ġ= Ċĉĉ ĉ dispatch Ġ{ Ġo _ Is Last Use ( it , Ġis Last Use ) Ġ} ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠAnswer Ġwhether Ġthis Ġ[ variable &# 3 2 ; use ][ Variable Use Phrase Descriptor ] Ċĉĉ Ġ* Ġis Ġthe Ġchrono logic ally Ġlast Ġtime Ġits Ġvariable Ġwill Ġbe Ġused Ġwithin Ċĉĉ Ġ* Ġthis Ġblock . Ċĉĉ Ġ* Ċĉĉ Ġ* Ġ@ return Ċĉĉ Ġ* ĠĠ ĠThe Ġvalue Ġof Ġthis Ġvariable Ġuse 's Ġlast - use Ġflag . Ċĉĉ Ġ*/ Ċĉ ĉ fun ĠA _ Phrase . is Last Use (): ĠBoolean Ġ= Ċĉĉ ĉ dispatch Ġ{ Ġo _ Is Last Use ( it ) Ġ} ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠAnswer Ġwhether Ġthis Ġphrase Ġis Ġa Ċĉĉ Ġ* Ġ[ macro ][ Macro Substitution Phrase Descriptor ] Ġsubstitution Ġphrase . Ċĉĉ Ġ* Ċĉĉ Ġ* Ġ@ return Ċĉĉ Ġ* ĠĠ ĠWhether Ġthis Ġis Ġa Ġphrase Ġat Ġwhich Ġmacro Ġsubstitution Ġtook Ġplace . Ċĉĉ Ġ*/ Ċĉ ĉ fun ĠA _ Phrase . is Macro Substitution Node (): ĠBoolean Ġ= Ċĉĉ ĉ dispatch Ġ{ Ġo _ Is Macro Substitution Node ( it ) Ġ} ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠExtract Ġthe Ġlast Ġexpression Ġof Ġthis Ġ[ list [ List Phrase Descriptor ] Ċĉĉ Ġ* Ġphrase . ĠThe Ġclient Ġmust Ġensure Ġthere Ġis Ġat Ġleast Ġone , Ġand Ġthat Ġthis Ċĉĉ Ġ* Ġis Ġa Ġlist Ġphrase . Ċĉĉ Ġ* Ċĉĉ Ġ* Ġ@ return Ċĉĉ Ġ* ĠĠ ĠThe Ġlast Ġphrase Ġof Ġthe Ġlist . Ċĉĉ Ġ*/ Ċĉ ĉ fun ĠA _ Phrase . last Expression (): ĠA _ Phrase Ġ= Ċĉĉ ĉ dispatch Ġ{ Ġo _ Last Expression ( it ) Ġ} ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠAnswer Ġthe Ġ[ list ][ List Phrase Descriptor ] Ġphrase Ġcontained Ġwithin Ġthis Ċĉĉ Ġ* Ġ[ per muted ][ Per mut edList Phrase Descriptor ] Ġlist Ġphrase . Ġ ĠThe Ġorder Ġof Ċĉĉ Ġ* Ġthe Ġelements Ġis Ġthe Ġorder Ġin Ġwhich Ġthey Ġoccurred Ġin Ġthe Ġsource . Ċĉĉ Ġ* Ċĉĉ Ġ* Ġ@ return Ċĉĉ Ġ* ĠĠ ĠThe Ġper muted Ġlist Ġphrase 's Ġunderlying Ġlist Ġphrase . Ċĉĉ Ġ*/ Ċĉ ĉ fun ĠA _ Phrase . list (): ĠA _ Phrase Ġ= Ċĉĉ ĉ dispatch Ġ{ Ġo _ List ( it ) Ġ} ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠThis Ġ[ module &# 3 2 ; constant 's ][ Phrase Kind . MODULE _ CONSTANT _ PH R ASE ] Ċĉĉ Ġ* Ġactual Ġvalue , Ġor Ġthis Ċĉĉ Ġ* Ġ[ module &# 3 2 ; variable 's ][ Phrase Kind . MODULE _ VARIABLE _ PH R ASE ] Ġactual Ċĉĉ Ġ* Ġ[ variable ][ A _ Variable ]. Ċĉĉ Ġ* Ċĉĉ Ġ* Ġ@ return Ċĉĉ Ġ* ĠĠ ĠThe Ġmodule Ġconstant 's Ġvalue Ġor Ġmodule Ġvariable 's Ġactual Ġvariable . Ċĉĉ Ġ*/ Ċĉ ĉ fun ĠA _ Phrase . literal Object (): ĠA _ Basic Object Ġ= Ċĉĉ ĉ dispatch Ġ{ Ġo _ Literal Object ( it ) Ġ} ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠThe Ġreceiver Ġis Ġa Ġ[ macro ][ Macro Substitution Phrase Descriptor ]. Ġ ĠAnswer Ċĉĉ Ġ* Ġthe Ġ[ send ][ Send Phrase Descriptor ] Ġthat Ġwas Ġtransformed Ġby Ġthe Ġmacro Ċĉĉ Ġ* Ġbody . Ċĉĉ Ġ* Ċĉĉ Ġ* Ġ@ return Ċĉĉ Ġ* ĠĠ ĠThe Ġoriginal Ġsend Ġphrase Ġof Ġthis Ġmacro Ġsubstitution . Ċĉĉ Ġ*/ Ċĉ ĉ fun ĠA _ Phrase . macro Original Send Node (): ĠA _ Phrase Ġ= Ċĉĉ ĉ dispatch Ġ{ Ġo _ Macro Original Send Node ( it ) Ġ} ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠAnswer Ġa Ġ[ marker &# 3 2 ; phrase 's ][ Marker Phrase Descriptor ] Ġmarker Ġvalue , Ċĉĉ Ġ* Ġwhich Ġcan Ġbe Ġany Ġ[ Avail Object ]. Ċĉĉ Ġ* Ċĉĉ Ġ* Ġ@ return Ċĉĉ Ġ* ĠĠ ĠThe Ġmarker Ġphrase 's Ġmarker Ġvalue . Ċĉĉ Ġ*/ Ċĉ ĉ fun ĠA _ Phrase . marker Value (): ĠA _ Basic Object Ġ= Ċĉĉ ĉ dispatch Ġ{ Ġo _ Marker Value ( it ) Ġ} ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠThe Ġ[ tuple ][ A _ Tuple ] Ġof Ġ[ declaration ][ Declaration Phrase Descriptor ] Ċĉĉ Ġ* Ġphrases Ġaccessed Ġby Ġthis Ġ[ block ][ Block Phrase Descriptor ] Ġphrase . Ġ ĠThis Ċĉĉ Ġ* Ġvalue Ġis Ġset Ġduring Ġcode Ġgeneration , Ġeven Ġif Ġthe Ġblock Ġphrase Ġis Ċĉĉ Ġ* Ġimmutable . Ġ ĠIt Ġshould Ġnot Ġbe Ġmade Ġvisible Ġto Ġthe ĠAv ail Ġlanguage . Ċĉĉ Ġ* Ċĉĉ Ġ* Ġ@ return Ċĉĉ Ġ* ĠĠ ĠThe Ġtuple Ġof Ġ" outer " Ġdeclarations Ġthat Ġwill Ġneed Ġto Ġbe Ġcaptured Ġby Ċĉĉ Ġ* ĠĠ Ġthis Ġblock Ġwhen Ġthe Ġresulting Ġraw Ġfunction Ġis Ġclosed Ġinto Ġa Ċĉĉ Ġ* ĠĠ Ġfunction . Ċĉĉ Ġ*/ Ċĉ ĉ fun ĠA _ Phrase . needed Variables (): ĠA _ Tuple Ġ= Ċĉĉ ĉ dispatch Ġ{ Ġo _ Needed Variables ( it ) Ġ} ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠUpdate Ġthe Ġ[ tuple ][ A _ Tuple ] Ġof Ċĉĉ Ġ* Ġ[ declaration ][ Declaration Phrase Descriptor ] Ġphrases Ġaccessed Ġby Ġthis Ċĉĉ Ġ* Ġ[ block ][ Block Phrase Descriptor ] Ġphrase . Ġ ĠThis Ġvalue Ġis Ġset Ġduring Ġcode Ċĉĉ Ġ* Ġgeneration , Ġeven Ġif Ġthe Ġblock Ġphrase Ġis Ġimmutable . Ġ ĠIt Ġshould Ġnot Ġbe Ċĉĉ Ġ* Ġmade Ġvisible Ġto Ġthe ĠAv ail Ġlanguage . Ċĉĉ Ġ* Ċĉĉ Ġ* Ġ@ param Ġneeded Variables Ċĉĉ Ġ* ĠĠ ĠThe Ġtuple Ġof Ġouter Ġdeclarations Ġthat Ġthis Ġblock Ġaccesses . Ċĉĉ Ġ*/ Ċĉ ĉ fun ĠA _ Phrase . needed Variables ( needed Variables : ĠA _ Tuple ) Ġ= Ċĉĉ ĉ dispatch Ġ{ Ġo _ Needed Variables ( it , Ġneeded Variables ) Ġ} ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠThe Ġphrase Ġthat Ġthis Ġ[ macro ][ Macro Substitution Phrase Descriptor ] Ċĉĉ Ġ* Ġphrase Ġgenerated Ġto Ġuse Ġas Ġits Ġreplacement . Ċĉĉ Ġ* Ċĉĉ Ġ* Ġ@ return Ċĉĉ Ġ* ĠĠ ĠThis Ġmacro Ġphrase 's Ġoutput . Ċĉĉ Ġ*/ Ċĉ ĉ fun ĠA _ Phrase . output Phrase (): ĠA _ Phrase Ġ= Ċĉĉ ĉ dispatch Ġ{ Ġo _ Output Phrase ( it ) Ġ} ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠAnswer Ġthis Ġphrase 's Ġ[ Phrase Kind ]. Ċĉĉ Ġ* Ċĉĉ Ġ* ĠAlso Ġdeclared Ġin Ġ[ A _ Type ] Ġfor Ċĉĉ Ġ* Ġ[ phrase &# 3 2 ; types ][ Phrase TypeDescriptor ]. Ċĉĉ Ġ* Ċĉĉ Ġ* Ġ@ return ĠThe Ġ[ Phrase Kind ] Ġof Ġthis Ġphrase . Ċĉĉ Ġ*/ Ċĉ ĉ fun ĠA _ Phrase . phrase Kind (): ĠP hr ase Kind Ġ= Ċĉĉ ĉ dispatch Ġ{ Ġo _ Phrase Kind ( it ) Ġ} ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠTest Ġwhether Ġthis Ġphrase Ġhas Ġa Ġ[ Phrase Kind ] Ġthat Ġis Ġequal Ġto Ġor Ġa Ċĉĉ Ġ* Ġsub kind Ġof Ġthe Ġgiven Ġ[ Phrase Kind ]. Ċĉĉ Ġ* Ċĉĉ Ġ* ĠAlso Ġdeclared Ġin ĠA _ Type , Ġso Ġthe Ġsame Ġoperation Ġapplies Ġboth Ġto Ċĉĉ Ġ* Ġphrases Ġand Ġto Ġphrase Ġtypes . Ċĉĉ Ġ* Ċĉĉ Ġ* Ġ@ param Ġexpected Phrase Kind Ċĉĉ Ġ* ĠĠ ĠThe Ġ[ Phrase Kind ] Ġto Ġtest Ġthis Ġphrase Ġfor . Ċĉĉ Ġ* Ġ@ return Ċĉĉ Ġ* ĠĠ ĠWhether Ġthe Ġreceiver , Ġa Ġphrase , Ġhas Ġa Ġtype Ġwhose Ġ[ phrase Kind ] Ġis Ġat Ċĉĉ Ġ* ĠĠ Ġor Ġbelow Ġthe Ġspecified Ġ[ Phrase Kind ]. Ċĉĉ Ġ*/ Ċĉ ĉ fun ĠA _ Phrase . phrase Kind Is Under ( expected Phrase Kind : ĠP hr ase Kind ) Ċĉĉ ĉ : ĠBoolean Ġ= Ġdispatch Ġ{ Ġo _ Phrase Kind Is Under ( it , Ġexpected Phrase Kind ) Ġ} ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠAnswer Ġthe Ġpermutation Ġfrom Ġa Ċĉĉ Ġ* Ġ[ permutation ][ Per mut edList Phrase Descriptor ] Ġlist Ġphrase . Ġ ĠThe Ċĉĉ Ġ* Ġpermutation Ġis Ġa Ġ[ tuple ][ A _ Tuple ] Ġof Ġintegers Ġbetween Ġ` 1 ` Ġand Ġthe Ċĉĉ Ġ* Ġnumber Ġof Ġelements , Ġwhere Ġeach Ġvalue Ġoccurs Ġexactly Ġonce , Ġand Ġthe Ċĉĉ Ġ* Ġtuple Ġis Ġ* not * Ġin Ġascending Ġorder . Ċĉĉ Ġ* Ċĉĉ Ġ* Ġ@ return Ċĉĉ Ġ* ĠĠ ĠThe Ġpermutation Ġlist Ġphrase 's Ġpermutation . Ċĉĉ Ġ*/ Ċĉ ĉ fun ĠA _ Phrase . permutation (): ĠA _ Tuple Ġ= Ġdispatch Ġ{ Ġo _ Per mutation ( it ) Ġ} ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠAnswer Ġeither Ġ` null ` Ġor Ġthe Ġ[ Primitive ] Ġfrom Ġa Ġblock Ġphrase . Ċĉĉ Ġ* Ċĉĉ Ġ* Ġ@ return Ċĉĉ Ġ* ĠĠ ĠThe Ġblock Ġphrase 's Ġprimitive Ġor Ġ` null `. Ċĉĉ Ġ*/ Ċĉ ĉ fun ĠA _ Phrase . primitive (): ĠPrimitive ? Ġ= Ġdispatch Ġ{ Ġo _ Primitive ( it ) Ġ} ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠAnswer Ġthis Ġ[ block ][ Block Phrase Descriptor ] Ġphrase 's Ġstarting Ġline Ċĉĉ Ġ* Ġnumber Ġin Ġthe Ġsource . Ċĉĉ Ġ* Ċĉĉ Ġ* ĠAlso Ġdefined Ġin Ġ[ A _ Raw Function ]. Ċĉĉ Ġ* Ċĉĉ Ġ* Ġ@ return Ċĉĉ Ġ* ĠĠ ĠThe Ġsource Ġcode Ġline Ġnumber Ġon Ġwhich Ġthis Ċĉĉ Ġ* ĠĠ Ġ[ block ][ Block Phrase Descriptor ] Ġphrase Ġbegins Ġin Ġthe Ġsource . Ċĉĉ Ġ*/ Ċĉ ĉ fun ĠA _ Phrase . starting LineNumber (): ĠInt Ġ= Ċĉĉ ĉ dispatch Ġ{ Ġo _ Starting LineNumber ( it ) Ġ} ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠAnswer Ġthe Ġ[ tuple ][ A _ Tuple ] Ġof Ġstatement Ġphrases Ġin Ġthis Ċĉĉ Ġ* Ġ[ sequence ][ Sequence Phrase Descriptor ] Ġphrase . Ċĉĉ Ġ* Ċĉĉ Ġ* Ġ@ return Ċĉĉ Ġ* ĠĠ ĠA Ġtuple Ġof Ġphrases . Ċĉĉ Ġ*/ Ċĉ ĉ fun ĠA _ Phrase . statements (): ĠA _ Tuple Ġ= Ġdispatch Ġ{ Ġo _ Statements ( it ) Ġ} ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠIterate Ġthrough Ġeach Ġ[ sequence ][ Phrase Kind . SEQUENCE _ PH R ASE ] Ċĉĉ Ġ* Ġrecursively Ġwithin Ġthe Ġreceiver , Ġapplying Ġthe Ġaction Ġto Ġeach Ċĉĉ Ġ* Ġcontained Ġ[ statement ][ Phrase Kind . STATE MENT _ PH R ASE ] Ġphrase . Ċĉĉ Ġ* Ċĉĉ Ġ* Ġ@ param Ġcontinuation Ċĉĉ Ġ* ĠĠ ĠWhat Ġto Ġdo Ġwith Ġeach Ġstatement . Ċĉĉ Ġ*/ Ċĉ ĉ fun ĠA _ Phrase . statements Do ( Ċĉĉ ĉ continu ation : Ġ( A _ Phrase ) Ġ-> ĠUnit Ċĉ ĉ ) Ġ= Ġdispatch Ġ{ Ġo _ Statements Do ( it , Ġcontinuation ) Ġ} ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠAnswer Ġthis Ġ[ block ][ Block Phrase Descriptor ] Ġphrase 's Ġ[ tuple ][ A _ Tuple ] Ċĉĉ Ġ* Ġof Ġ[ statement ][ Phrase Kind . STATE MENT _ PH R ASE ] Ġphrase . Ċĉĉ Ġ* Ċĉĉ Ġ* Ġ@ return Ċĉĉ Ġ* ĠĠ ĠThe Ġtuple Ġof Ġstatements Ġin Ġthis Ġblock Ġphrase . Ċĉĉ Ġ*/ Ċĉ ĉ fun ĠA _ Phrase . statements Tuple (): ĠA _ Tuple Ġ= Ċĉĉ ĉ dispatch Ġ{ Ġo _ Statements Tuple ( it ) Ġ} ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠGiven Ġa Ġ[ list ][ List Phrase Descriptor ] Ġphrase , Ġa Ċĉĉ Ġ* Ġ[ per muted ][ Per mut edList Phrase Descriptor ] Ġlist Ġphrase , Ġor Ġa Ċĉĉ Ġ* Ġ[ macro ][ Macro Substitution Phrase Descriptor ] Ġsubstitution Ġphrase , Ġfind Ċĉĉ Ġ* Ġall Ġmacro Ġsubstitution Ġphrases Ġat Ġor Ġrecursively Ġinside Ġit Ġ( but Ġonly Ċĉĉ Ġ* Ġwithin Ġthe Ġnested Ġlist Ġstructure ), Ġanswer ing Ġa Ġduplicate Ġlike Ġthe Ċĉĉ Ġ* Ġoriginal , Ġbut Ġwith Ġthe Ġmacro Ġphrases Ġreplaced Ġby Ġtheir Ġoutput Ċĉĉ Ġ* Ġphrases . Ċĉĉ Ġ* Ċĉĉ Ġ* Ġ@ return Ċĉĉ Ġ* ĠĠ ĠThe Ġreceiver Ġlist Ġstructure Ġwith Ġits Ġmacro Ġphrases Ġreplaced Ġby Ċĉĉ Ġ* ĠĠ Ġtheir Ġoutputs . Ċĉĉ Ġ*/ Ċĉ ĉ fun ĠA _ Phrase . strip Macro (): ĠA _ Phrase Ġ= Ċĉĉ ĉ dispatch Ġ{ Ġo _ Strip Macro ( it ) Ġ} ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠIf Ġthis Ġis Ġa Ġ[ super &# 3 2 ; cast &# 3 2 ; phrase ][ Super Cast Phrase Descriptor ], Ċĉĉ Ġ* Ġthen Ġanswer Ġthe Ġtype Ġby Ġwhich Ġthis Ġargument Ġshould Ġbe Ġlooked Ġup . Ġ ĠIf Ċĉĉ Ġ* Ġit Ġis Ġnot Ġand Ġdoes Ġnot Ġcontain Ġa Ġsuper Ġcast Ġphrase Ġin Ġits Ġrecursive Ċĉĉ Ġ* Ġlist Ġphrase Ġstructure , Ġthen Ġanswer Ġbottom . Ġ ĠOtherwise Ġcreate Ġa Ċĉĉ Ġ* Ġ( recursive ) Ġtuple Ġtype Ġwhere Ġelements Ġthat Ġare Ġsuper casts Ġprovide Ċĉĉ Ġ* Ġtheir Ġlookup Ġtypes Ġand Ġthe Ċĉĉ Ġ* Ġrest Ġprovide Ġbottom . Ċĉĉ Ġ* Ċĉĉ Ġ* Ġ@ return Ċĉĉ Ġ* ĠĠ ĠA Ġtuple Ġtype Ġwith Ġwhich Ġto Ġcompute Ġa Ġtype Ġunion Ġwith Ġthe Ġruntime Ċĉĉ Ġ* ĠĠ Ġargument Ġtypes Ġto Ġuse Ġfor Ġlooking Ġup Ġa Ġmethod Ġdefinition Ġat Ġa Ġcall Ċĉĉ Ġ* ĠĠ Ġsite . Ġ ĠMay Ġbe Ġbottom . Ċĉĉ Ġ*/ Ċĉ ĉ fun ĠA _ Phrase . super Union Type (): ĠA _ Type Ġ= Ċĉĉ ĉ dispatch Ġ{ Ġo _ Super Union Type ( it ) Ġ} ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠAnswer Ġthe Ġ[ token ][ A _ Token ] Ġwhich Ġwas Ġused Ġin Ġthe Ġconstruction Ġof Ġa Ċĉĉ Ġ* Ġ[ variable &# 3 2 ; use ][ Variable Use Phrase Descriptor ] Ġphrase , Ġa Ċĉĉ Ġ* Ġ[ declaration ][ Declaration Phrase Descriptor ] Ġphrase , Ġa Ċĉĉ Ġ* Ġ[ literal ][ Literal Phrase Descriptor ], Ġor Ġa Ġmacro Ġthat Ġresolves Ġto Ġone Ċĉĉ Ġ* Ġof Ġthose . Ċĉĉ Ġ* Ċĉĉ Ġ* Ġ@ return Ċĉĉ Ġ* ĠĠ ĠThe Ġtoken Ġused Ġin Ġthis Ġphrase . Ċĉĉ Ġ*/ Ċĉ ĉ fun ĠA _ Phrase . token (): ĠA _ Token Ġ= Ċĉĉ ĉ dispatch Ġ{ Ġo _ Token ( it ) Ġ} ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠAnswer Ġthe Ġ[ tuple ][ A _ Token ] Ġof Ġ[ tokens ][ A _ Token ] Ġthat Ġcontributed Ġto Ċĉĉ Ġ* Ġthe Ġphrase . Ċĉĉ Ġ* Ċĉĉ Ġ* Ġ@ return Ċĉĉ Ġ* ĠĠ ĠThe Ġrequested Ġtuple Ġof Ġ[ tokens ][ A _ Token ]. Ċĉĉ Ġ*/ Ċĉ ĉ fun ĠA _ Phrase . tokens (): ĠA _ Tuple Ġ= Ċĉĉ ĉ dispatch Ġ{ Ġo _ Tokens ( it ) Ġ} ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠAnswer Ġthe Ġ[ phrase ][ A _ Phrase ] Ġthat Ġproduced Ġthe Ġtype Ġof Ġthe Ċĉĉ Ġ* Ġdeclaration . ĠAnswer Ġ[ nil ][ Nil Descriptor . nil ] Ġif Ġthere Ġwas Ġno Ġsuch Ċĉĉ Ġ* Ġphrase . Ċĉĉ Ġ* Ċĉĉ Ġ* Ġ@ return Ċĉĉ Ġ* ĠĠ ĠThe Ġrequested Ġ[ phrase ][ A _ Phrase ] Ġor Ġ[ nil ]. Ċĉĉ Ġ*/ Ċĉ ĉ fun ĠA _ Phrase . type Expression (): ĠA _ Phrase Ġ= Ċĉĉ ĉ dispatch Ġ{ Ġo _ Type Expression ( it ) Ġ} ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠValidate Ġthis Ġphrase , Ġwithout Ġalso Ġvalidating Ċĉĉ Ġ* Ġ[ block ][ Block Phrase Descriptor ] Ġphrases Ġthat Ġoccur Ġwithin Ġthis Ġphrase . Ċĉĉ Ġ* Ċĉĉ Ġ* Ġ@ param Ġparent Ċĉĉ Ġ* ĠĠ ĠThe Ġphrase Ġthat Ġcontains Ġthis Ġphrase , Ġor Ġ` null `. Ċĉĉ Ġ*/ Ċĉ ĉ fun ĠA _ Phrase . validate Loc ally ( parent : ĠA _ Phrase ?) Ġ= Ċĉĉ ĉ dispatch Ġ{ Ġo _ Validate Loc ally ( it , Ġparent ) Ġ} ĊĊĉ ĉ /** Ċĉĉ Ġ* ĠAnswer Ġthe Ġ[ variable &# 3 2 ; use ][ Variable Use Phrase Descriptor ] Ġphrase Ċĉĉ Ġ* Ġthat Ġis Ġused Ġby Ġthis Ġ[ reference ][ Reference Phrase Descriptor ] Ġor Ċĉĉ Ġ* Ġ[ assignment ][ Assignment Phrase Descriptor ]. Ċĉĉ Ġ* Ċĉĉ Ġ* Ġ@ return Ċĉĉ Ġ* ĠĠ ĠThe Ġvariable Ġuse Ġphrase . Ċĉĉ Ġ*/ Ċĉ ĉ fun ĠA _ Phrase . variable (): ĠA _ Phrase Ġ= Ċĉĉ ĉ dispatch Ġ{ Ġo _ Variable ( it ) Ġ} Ċ ĉ } Ċ } Ċ