@ file : Suppress (" PLATFORM _ CLASS _ MAP PED _ TO _ K OT LIN ") Ċ Ċ package Ġorg . elixir _ lang . psi . impl Ċ Ċ import Ġcom . eric sson . otp . erlang .* Ċ import Ġcom . intellij . lang . AST Node Ċ import Ġcom . intellij . openapi . application . run Read Action Ċ import Ġcom . intellij . openapi . util . Comp utable Ċ import Ġcom . intellij . psi .* Ċ import Ġcom . intellij . psi . impl . source . tree . Factory Ċ import Ġcom . intellij . psi . tree . I ElementType Ċ import Ġcom . intellij . psi . tree . Token Set Ċ import Ġorg . elixir _ lang . Elixir Language Ċ import Ġorg . elixir _ lang . Macro Ċ import Ġorg . elixir _ lang . mix . project . compute Read Action Ċ import Ġorg . elixir _ lang . otp Er lang List Ċ import Ġorg . elixir _ lang . otp Er lang Tuple Ċ import Ġorg . elixir _ lang . psi .* Ċ import Ġorg . elixir _ lang . psi . impl . Elixir Psi Impl Util . IDENTIFIER _ TOKEN _ SET Ċ import Ġorg . elixir _ lang . psi . impl . Parent Impl . addChild Text Code Points Ċ import Ġorg . elixir _ lang . psi . impl . Parent Impl . elixir Char List Ċ import Ġorg . elixir _ lang . psi . impl . Parent Impl . elixir String Ċ import Ġorg . elixir _ lang . psi . operation . In Ċ import Ġorg . elixir _ lang . psi . operation . In fix Ċ import Ġorg . elixir _ lang . psi . operation . NotIn Ċ import Ġorg . elixir _ lang . psi . operation . Prefix Ċ import Ġorg . jetbrains . annotations . Contract Ċ import Ġjava . lang . Double Ċ import Ġjava . lang . Long Ċ import Ġjava . math . BigInteger Ċ import Ġjava . util .* Ċ Ċ val ĠUN QUOT ED _ TYPES Ġ= ĠarrayOf < Class < *> >( Elixir EndOf Expression :: class . java , ĠPsi Comment :: class . java , ĠPsi WhiteSpace :: class . java ) Ċ Ċ /** Ċ Ġ* Ġ@ return Ġ{@ code Ġtrue } Ġif Ġ{@ code Ġelement } Ġshould Ġnot Ġhave Ġ{@ code Ġquote } Ġcalled Ġon Ġit Ġbecause ĠE lixir Ġn atively Ċ Ġ* ĠĠ Ġignores Ġsuch Ġtokens . Ġ Ġ{@ code Ġfalse } Ġif Ġ{@ code Ġelement } Ġshould Ġhave Ġ{@ code Ġquote } Ġcalled Ġon Ġit . Ċ Ġ*/ Ċ fun ĠPsi Element . is Un quoted (): ĠBoolean Ġ{ ĊĠĠĠ Ġvar Ġun quoted Ġ= Ġfalse ĊĊĠĠĠ Ġfor Ġ( un quoted Type Ġin ĠUN QUOT ED _ TYPES ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( un quoted Type . is Instance ( this )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġun quoted Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġun quoted Ċ } Ċ Ċ fun ĠE lixir St ab . quote ( metadata : ĠO tp Er lang List ): ĠO tp Er lang Object Ġ= ĊĠĠĠĠĠĠĠ Ġst ab Body ?. quote ( metadata ) Ġ?: ĊĠĠĠĠĠĠĠ Ġst ab Operation List . map ( Quot able :: quote ). to Typed Array (). let (:: O tp Er lang List ) Ċ Ċ fun ĠE lixir St ab Body . quote ( metadata : ĠO tp Er lang List ): ĠO tp Er lang Object Ġ= ĊĠĠĠĠĠĠĠ Ġchildren ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Not Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġskip Ġend Of Expression ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . is Un quoted () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit Ġas ĠQu ot able Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . quote () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ ĠQu ot able Impl . build Block ( it . toList (), Ġmetadata ) Ġ} Ċ Ċ object ĠQu ot able Impl Ġ{ ĊĠĠĠ Ġprivate Ġval ĠA MB IG UO US _ OP Ġ= ĠO tp Er lang Atom (" amb iguous _ op ") ĊĠĠĠ Ġ@ Jvm Field ĊĠĠĠ Ġval ĠNIL Ġ= ĠO tp Er lang Atom (" nil ") ĊĠĠĠ Ġprivate Ġval ĠA MB IG UO US _ OP _ KEYWORD _ PAIR Ġ= ĠO tp Er lang Tuple ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf < O tp Er lang Object >( AM BIG UO US _ OP , ĠNIL ) ĊĠĠĠ Ġ) ĊĠĠĠ Ġprivate Ġval ĠA LI ASE S Ġ= ĠO tp Er lang Atom ("__ aliases __ ") ĊĠĠĠ Ġinternal Ġval ĠBLOCK Ġ= ĠO tp Er lang Atom ("__ block __ ") ĊĠĠĠ Ġprivate Ġval ĠFN Ġ= ĠO tp Er lang Atom (" fn ") ĊĠĠĠ Ġprivate Ġval ĠEX CL AM ATION _ POINT Ġ= ĠO tp Er lang Atom (" !") ĊĠĠĠ Ġprivate Ġval ĠMIN US Ġ= ĠO tp Er lang Atom ("- ") ĊĠĠĠ Ġprivate Ġval ĠMULTI PLE _ ALI ASE S Ġ= ĠO tp Er lang Atom ("{} ") ĊĠĠĠ Ġprivate Ġval ĠNOT Ġ= ĠO tp Er lang Atom (" not ") ĊĠĠĠ Ġprivate Ġval ĠPL US Ġ= ĠO tp Er lang Atom ("+ ") ĊĠĠĠ Ġprivate Ġval ĠRE AR RAN GED _ UNARY _ OPER ATORS Ġ= ĠarrayOf ( EXCL AM ATION _ POINT , ĠNOT ) ĊĠĠĠ Ġprivate Ġval ĠUN QUOTE _ SP LIC ING Ġ= ĠO tp Er lang Atom (" un quote _ sp licing ") ĊĠĠĠ Ġprivate Ġval ĠWHEN Ġ= ĠO tp Er lang Atom (" when ") ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( association Operation : ĠAssociation Operation ): ĠO tp Er lang Object Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchildren Ġ= Ġassociation Operation . children ĊĊĠĠĠĠĠĠĠ Ġ// Ġassociation In fix Operator Ġis Ġprivate Ġso Ġnot Ġa ĠPsi Element ĊĠĠĠĠĠĠĠ Ġassert ( children . size Ġ== Ġ 2 ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠO tp Er lang Tuple ( children . map Ġ{ Ġit Ġas ĠQu ot able Ġ}. map ( Quot able :: quote ). to Typed Array ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( infix : ĠIn fix ): ĠO tp Er lang Object Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġquoted Left Operand Ġ= Ġin fix . left Operand () !!. quote () ĊĊĠĠĠĠĠĠĠ Ġval Ġoperator Ġ= Ġin fix . operator () ĊĠĠĠĠĠĠĠ Ġval Ġquoted Operator Ġ= Ġoperator . quote () ĊĊĠĠĠĠĠĠĠ Ġval Ġquoted Right Operand Ġ= Ġin fix . right Operand ()?. quote () Ġ?: ĊĠĠĠĠĠĠĠ Ġ// Ġthis Ġis Ġnot Ġvalid ĠE lixir Ġqu oting , Ġbut Ġsomething Ġneeds Ġto Ġbe Ġthere Ġfor Ġqu oting Ġto Ġwork ĊĠĠĠĠĠĠĠ ĠNIL ĊĊĠĠĠĠĠĠĠ Ġreturn Ġquoted Function Call ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Operator , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata ( operator ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Left Operand , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Right Operand ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( not In : ĠNot In ): ĠO tp Er lang Object Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġquoted Left Operand Ġ= Ġnot In . left Operand () !!. quote () ĊĊĠĠĠĠĠĠĠ Ġval Ġnot Operator Ġ= Ġnot In . not In fix Operator ĊĠĠĠĠĠĠĠ Ġval Ġquoted Not Operator Ġ= Ġnot Operator . quote () ĊĊĠĠĠĠĠĠĠ Ġval Ġin Operator Ġ= Ġnot In . in In fix Operator ĊĠĠĠĠĠĠĠ Ġval Ġquoted In Operator Ġ= Ġin Operator . quote () ĊĊĠĠĠĠĠĠĠ Ġval Ġquoted Right Operand Ġ= Ġnot In . right Operand ()?. quote () Ġ?: ĊĠĠĠĠĠĠĠ Ġ// Ġthis Ġis Ġnot Ġvalid ĠE lixir Ġqu oting , Ġbut Ġsomething Ġneeds Ġto Ġbe Ġthere Ġfor Ġqu oting Ġto Ġwork ĊĠĠĠĠĠĠĠ ĠNIL ĊĊĠĠĠĠĠĠĠ Ġreturn Ġquoted Function Call ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Not Operator , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata ( not Operator ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Function Call ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted In Operator , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata ( in Operator ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Left Operand , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Right Operand ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( bit String : ĠE lixir Bit String ): ĠO tp Er lang Object Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġopening Bits Ġ= Ġbit String . node . getChildren ( Token Set . create ( Elixir Types . OPEN ING _ BIT )) ĊĊĠĠĠĠĠĠĠ Ġassert ( opening Bits . size Ġ== Ġ 1 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġopening Bit Ġ= Ġopening Bits [ 0 ] ĊĊĠĠĠĠĠĠĠ Ġreturn Ġquoted Function Call ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"<< >> ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata ( opening Bit ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* bit String . children . map Ġ{ Ġit Ġas ĠQu ot able Ġ}. map Ġ{ Ġit . quote () Ġ}. to Typed Array () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( block Identifier : ĠE lixir Block Identifier ): ĠO tp Er lang Object Ġ= ĠO tp Er lang Atom ( block Identifier . node . text ) ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( block Item : ĠE lixir Block Item ): ĠO tp Er lang Object Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġblock Identifier Ġ= Ġblock Item . block Identifier ĊĠĠĠĠĠĠĠ Ġval Ġquoted Value Ġ= Ġblock Item . stab ?. quote () Ġ?: Ġempty Block () ĊĊĠĠĠĠĠĠĠ Ġreturn ĠO tp Er lang Tuple ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( block Identifier . quote (), Ġquoted Value ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( bracket Arguments : ĠE lixir Bracket Arguments ): ĠO tp Er lang Object Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchildren Ġ= Ġbracket Arguments . children ĊĊĠĠĠĠĠĠĠ Ġassert ( children . size Ġ== Ġ 1 ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ( children [ 0 ] Ġas ĠQu ot able ). quote () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( digits : ĠDig its ): ĠO tp Er lang Object Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġdigits . text ĊĠĠĠĠĠĠĠ Ġval Ġbase Ġ= Ġdigits . base () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= ĠLong . parse Long ( text , Ġbase ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠO tp Er lang Long ( value ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠNumber FormatException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= ĠBigInteger ( text , Ġbase ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠO tp Er lang Long ( value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( access Expression : ĠE lixir Access Expression ): ĠO tp Er lang Object Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchildren Ġ= Ġaccess Expression . children ĊĊĠĠĠĠĠĠĠ Ġif Ġ( children . size Ġ!= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠTODO (" Expecting Ġ 1 Ġchild Ġin Ġaccess Expression ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ( children [ 0 ] Ġas ĠQu ot able ). quote () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( alias : ĠE lixir Alias ): ĠO tp Er lang Object Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Function Call ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠA LI ASE S , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata ( alias ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠO tp Er lang Atom ( alias . text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( anonymous Function : ĠE lixir Anonymous Function ): ĠO tp Er lang Object Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmetadata Ġ= Ġmetadata ( anonymous Function ) ĊĠĠĠĠĠĠĠ Ġval Ġquoted St ab Ġ= Ġanonymous Function . stab . quote () ĊĊĠĠĠĠĠĠĠ Ġreturn ĠO tp Er lang Tuple ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( FN , Ġmetadata , Ġquoted St ab ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( associ ations : ĠE lixir Associations ): ĠO tp Er lang Object Ġ= Ġassociations . associ ations Base . quote () ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( associ ations Base : ĠE lixir Associations Base ): ĠO tp Er lang Object Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠO tp Er lang List ( associ ations Base . children . map Ġ{ Ġit Ġas ĠQu ot able Ġ}. map ( Quot able :: quote ). to Typed Array ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( atom : ĠE lixir Atom ): ĠO tp Er lang Object Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġatom . line ?. quote As Atom () Ġ?: Ġatom . node . let Ġ{ Ġatom Node Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġatom Fragment Node Ġ= Ġatom Node . last Child Node ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( atom Fragment Node . elementType Ġ=== ĠE lixir Types . ATOM _ FRAGMENT ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠO tp Er lang Atom ( atom Fragment Node . text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( atom Keyword : ĠE lixir Atom Keyword ): ĠO tp Er lang Object Ġ= ĠO tp Er lang Atom ( atom Keyword . text ) ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( line : ĠE lixir Line ): ĠO tp Er lang Object Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Child Nodes ( line , Ġ* childNodes ( line . line Body !! )) ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( char Token : ĠE lixir Char Token ): ĠO tp Er lang Object Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchildren Ġ= Ġchar Token . node . getChildren ( null ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( children . size Ġ!= Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠTODO (" Char Token Ġexpected Ġto Ġbe Ġ? (< character >|< escape Ġsequence >) ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġtoken ized Ġ= Ġchildren [ 1 ] ĊĠĠĠĠĠĠĠ Ġval Ġtoken ized ElementType Ġ= Ġtoken ized . elementType ĊĊĠĠĠĠĠĠĠ Ġval Ġcode Point Ġ= Ġif Ġ( token ized ElementType Ġ=== ĠE lixir Types . FRAGMENT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( token ized . text Length Ġ!= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠTODO (" Token ized Ġcharacter Ġexpected Ġto Ġonly Ġbe Ġone Ġcharacter Ġlong ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoken ized . text . code Point At ( 0 ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( token ized . psi Ġas ĠE scape Sequence ). code Point () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠO tp Er lang Long ( code Point . to Long ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer Association Operation : ĠE lixir Container Association Operation ĊĠĠĠ Ġ): ĠO tp Er lang Object Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchildren Ġ= Ġcontainer Association Operation . children ĊĊĠĠĠĠĠĠĠ Ġ// Ġassociation In fix Operator Ġis Ġprivate Ġso Ġnot Ġa ĠPsi Element ĊĠĠĠĠĠĠĠ Ġassert ( children . size Ġ== Ġ 2 ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠO tp Er lang Tuple ( children . map Ġ{ Ġit Ġas ĠQu ot able Ġ}. map ( Quot able :: quote ). to Typed Array ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( at Unqualified Bracket Operation : ĠAt Numeric Bracket Operation ): ĠO tp Er lang Object Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġquoted Operator Ġ= Ġat Unqualified Bracket Operation . at Prefix Operator . quote () ĊĊĠĠĠĠĠĠĠ Ġval Ġchildren Ġ= Ġat Unqualified Bracket Operation . children ĊĊĠĠĠĠĠĠĠ Ġassert ( children . size Ġ== Ġ 3 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġquoted Operand Ġ= Ġ( children [ 1 ] Ġas ĠQu ot able ). quote () ĊĠĠĠĠĠĠĠ Ġval Ġmetadata Ġ= Ġmetadata ( at Unqualified Bracket Operation ) ĊĊĠĠĠĠĠĠĠ Ġval Ġquoted Container Ġ= Ġquoted Function Call ( quoted Operator , Ġmetadata , Ġquoted Operand ) ĊĊĠĠĠĠĠĠĠ Ġval Ġbracket Arguments Ġ= Ġat Unqualified Bracket Operation . bracket Arguments ĊĠĠĠĠĠĠĠ Ġval Ġquoted Bracket Arguments Ġ= Ġbracket Arguments . quote () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġquoted Function Call ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Elixir . Access ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" get ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata ( bracket Arguments ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Container , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Bracket Arguments ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( no Parent heses Many Strict No Parent heses Expression : ĠE lixir No Parent heses Many Strict No Parent heses Expression ): ĠO tp Er lang Object Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchildren Ġ= Ġno Parent heses Many Strict No Parent heses Expression . children ĊĊĠĠĠĠĠĠĠ Ġassert ( children . size Ġ== Ġ 1 ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ( children [ 0 ] Ġas ĠQu ot able ). quote () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( multiple Aliases : ĠE lixir Multiple Aliases ): ĠO tp Er lang Object Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Function Arguments (* multiple Aliases . children . map Ġ{ Ġit Ġas ĠQu ot able Ġ}. map Ġ{ Ġit . quote () Ġ}. to Typed Array ()) ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( map Update Arguments : ĠE lixir Map Update Arguments ): ĠO tp Er lang Object Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchildren Ġ= Ġmap Update Arguments . children ĊĊĠĠĠĠĠĠĠ Ġassert ( children . size Ġ>= Ġ 3 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġquoted Current Map Ġ= Ġ( children [ 0 ] Ġas ĠQu ot able ). quote () ĊĊĠĠĠĠĠĠĠ Ġval Ġpipe Operator Ġ= Ġchildren [ 1 ] Ġas ĠOperator ĊĠĠĠĠĠĠĠ Ġval Ġquoted Pipe Operator Ġ= Ġpipe Operator . quote () ĊĊĠĠĠĠĠĠĠ Ġval Ġquoted Map Updates Ġ= Ġ( 2 Ġuntil Ġchildren . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġchildren [ it ] Ġas ĠQu ot able Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . quote () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġis ĠO tp Er lang List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsequence Of ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Typed Array () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let (:: O tp Er lang List ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġquoted Function Call ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Pipe Operator , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata ( pipe Operator ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Current Map , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Map Updates ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( map Operation : ĠE lixir Map Operation ): ĠO tp Er lang Object Ġ= Ġmap Operation . map Arguments . quote () ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( map Arguments : ĠE lixir Map Arguments ): ĠO tp Er lang Object Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnode Ġ= Ġmap Arguments . node ĊĠĠĠĠĠĠĠ Ġval Ġopening Cur lies Ġ= Ġnode . getChildren ( Token Set . create ( Elixir Types . OPEN ING _ CURL Y )) ĊĊĠĠĠĠĠĠĠ Ġassert ( opening Cur lies . size Ġ== Ġ 1 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġopening Cur ly Ġ= Ġopening Cur lies [ 0 ] ĊĊĠĠĠĠĠĠĠ Ġval Ġquoted Arguments Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Arguments . map Update Arguments ?. quote ()?. let Ġ{ ĠarrayOf ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġmap Arguments . map Construction Arguments ?. quote Arguments () Ġ?: Ġempty Array () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġquoted Function Call ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"% {}", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata ( opening Cur ly ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* quoted Arguments ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( list : ĠE lixir List ): ĠO tp Er lang Object Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlist Arguments Ġ= Ġlist . children ĊĠĠĠĠĠĠĠ Ġval Ġquot edList ArgumentList Ġ= Ġmutable ListOf < O tp Er lang Object >() ĊĊĠĠĠĠĠĠĠ Ġif Ġ( list Arguments . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( 0 Ġuntil Ġlist Arguments . size Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġlist Arguments [ it ] Ġas ĠQu ot able Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map To ( quot edList ArgumentList ) Ġ{ Ġit . quote () Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast List Argument Ġ= Ġlist Arguments [ list Arguments . size Ġ- Ġ 1 ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( last List Argument Ġis ĠE lixir Keywords ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( last List Argument Ġas ĠQu ot able Keyword List ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. quot able Keyword Pair List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map To ( quot edList ArgumentList ) Ġ{ Ġit . quote () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġquot able Ġ= Ġlast List Argument Ġas ĠQu ot able ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquot edList ArgumentList . add ( quot able . quote ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġel ix ir Char List ( O tp Er lang List ( quot edList ArgumentList . to Typed Array ())) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( keyword Key : ĠE lixir Keyword Key ): ĠO tp Er lang Object Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkeyword Key . line ?. quote As Atom () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠO tp Er lang Atom ( compute Read Action < String > Ġ{ Ġkeyword Key . text Ġ}) ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( quot able Keyword Pair : ĠQu ot able Keyword Pair ): ĠO tp Er lang Object Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġquoted Keyword Key Ġ= Ġquot able Keyword Pair . keyword Key . quote () ĊĠĠĠĠĠĠĠ Ġval Ġquoted Keyword Value Ġ= Ġquot able Keyword Pair . keyword Value . quote () ĊĊĠĠĠĠĠĠĠ Ġval Ġelements Ġ= ĠarrayOf ( quoted Keyword Key , Ġquoted Keyword Value ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠO tp Er lang Tuple ( elements ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( at Unqualified Bracket Operation : ĠAt Unqualified Bracket Operation ): ĠO tp Er lang Object Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoperator Ġ= Ġat Unqualified Bracket Operation . at Prefix Operator ĊĠĠĠĠĠĠĠ Ġval Ġquoted Operator Ġ= Ġoperator . quote () ĊĊĠĠĠĠĠĠĠ Ġval Ġnode Ġ= Ġat Unqualified Bracket Operation . node ĊĠĠĠĠĠĠĠ Ġval Ġidentifier Nodes Ġ= Ġnode . getChildren ( IDENTIFIER _ TOKEN _ SET ) ĊĊĠĠĠĠĠĠĠ Ġassert ( identifier Nodes . size Ġ== Ġ 1 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġidentifier Node Ġ= Ġidentifier Nodes [ 0 ] ĊĠĠĠĠĠĠĠ Ġval Ġidentifier Ġ= Ġidentifier Node . text ĊĠĠĠĠĠĠĠ Ġval Ġmetadata Ġ= Ġmetadata ( at Unqualified Bracket Operation ) ĊĊĠĠĠĠĠĠĠ Ġval Ġquoted Operand Ġ= Ġquoted Variable ( identifier , Ġmetadata ) ĊĠĠĠĠĠĠĠ Ġval Ġquoted Container Ġ= Ġquoted Function Call ( quoted Operator , Ġmetadata , Ġquoted Operand ) ĊĊĠĠĠĠĠĠĠ Ġval Ġbracket Arguments Ġ= Ġat Unqualified Bracket Operation . bracket Arguments ĊĠĠĠĠĠĠĠ Ġval Ġquoted Bracket Arguments Ġ= Ġbracket Arguments . quote () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġquoted Function Call ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Elixir . Access ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" get ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata ( bracket Arguments ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Container , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Bracket Arguments ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( at Unqualified No Parent heses Call : ĠAt Unqualified No Parent heses Call < *> ): ĠO tp Er lang Object Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoperator Ġ= Ġat Unqualified No Parent heses Call . at Identifier . at Prefix Operator ĊĠĠĠĠĠĠĠ Ġval Ġquoted Operator Ġ= Ġoperator . quote () ĊĊĠĠĠĠĠĠĠ Ġval Ġidentifier Nodes Ġ= Ġat Unqualified No Parent heses Call . at Identifier . node . getChildren ( IDENTIFIER _ TOKEN _ SET ) ĊĊĠĠĠĠĠĠĠ Ġassert ( identifier Nodes . size Ġ== Ġ 1 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġidentifier Node Ġ= Ġidentifier Nodes [ 0 ] ĊĠĠĠĠĠĠĠ Ġval Ġidentifier Ġ= Ġidentifier Node . text ĊĠĠĠĠĠĠĠ Ġval Ġquoted Identifier Ġ= ĠO tp Er lang Atom ( identifier ) ĊĊĠĠĠĠĠĠĠ Ġval Ġquoted Arguments Ġ= Ġat Unqualified No Parent heses Call . no Parent heses One Argument . quote Arguments () ĊĠĠĠĠĠĠĠ Ġval Ġdo Block Ġ= Ġat Unqualified No Parent heses Call . do Block ĊĊĠĠĠĠĠĠĠ Ġval Ġquoted Operand Ġ= Ġquoted Block Call ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Identifier , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata ( operator ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Arguments , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Block ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġquoted Function Call ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Operator , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata ( operator ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Operand ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġprivate Ġfun Ġquoted Block Call ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Identifier : ĠO tp Er lang Object , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcall Metadata : ĠO tp Er lang List , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Arguments : ĠArray < O tp Er lang Object >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo Block : ĠE lixir Do Block ?): ĠO tp Er lang Object Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġquoted Combined Arguments : ĠArray < O tp Er lang Object > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( do Block Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Arguments Ġ+ Ġdo Block . quote Arguments () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Arguments ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġquoted Function Call ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Identifier , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall Metadata , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* quoted Combined Arguments ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( bracket Operation : ĠBr acket Operation ): ĠO tp Er lang Object Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchildren Ġ= Ġbracket Operation . children ĊĊĠĠĠĠĠĠĠ Ġassert ( children . size Ġ== Ġ 2 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġquoted Matched Expression Ġ= Ġ( children [ 0 ] Ġas ĠQu ot able ). quote () ĊĠĠĠĠĠĠĠ Ġval Ġbracket Arguments Ġ= Ġchildren [ 1 ] Ġas ĠQu ot able ĊĠĠĠĠĠĠĠ Ġval Ġquoted Bracket Arguments Ġ= Ġbracket Arguments . quote () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġquoted Function Call ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Elixir . Access ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" get ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata ( bracket Arguments ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Matched Expression , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Bracket Arguments ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( dot Call : ĠDot Call < *> ): ĠO tp Er lang Object Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġleft Operand Ġ= Ġdot Call . firstChild Ġas ĠQu ot able ĊĠĠĠĠĠĠĠ Ġval Ġquoted Left Operand Ġ= Ġleft Operand . quote () ĊĊĠĠĠĠĠĠĠ Ġval Ġoperator Ġ= Ġdot Call . dot In fix Operator ĊĠĠĠĠĠĠĠ Ġval Ġquoted Operator Ġ= Ġoperator . quote () ĊĠĠĠĠĠĠĠ Ġval Ġoperator Metadata Ġ= Ġmetadata ( operator ) ĊĊĠĠĠĠĠĠĠ Ġval Ġquoted Identifier Ġ= Ġquoted Function Call ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Operator , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoperator Metadata , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Left Operand ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġparentheses Arguments List Ġ= Ġdot Call . parent heses Arguments List ĊĠĠĠĠĠĠĠ Ġval Ġdo Block Ġ= Ġdot Call . do Block ĊĊĠĠĠĠĠĠĠ Ġreturn Ġquoted Parent heses Call ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Identifier , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoperator Metadata , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparentheses Arguments List , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Block ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġprivate Ġfun Ġquoted Parent heses Call ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Identifier : ĠO tp Er lang Object , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġidentifier Metadata : ĠO tp Er lang List , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparentheses Arguments List : ĠList < Elixir Parent heses Arguments >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo Block : ĠE lixir Do Block ?): ĠO tp Er lang Object Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparentheses Arguments List Size Ġ= Ġparentheses Arguments List . size ĊĊĠĠĠĠĠĠĠ Ġassert ( parent heses Arguments List Size Ġ> Ġ 0 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġlast Index Ġ= Ġparentheses Arguments List Size Ġ- Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġreturn Ġparentheses Arguments List . fold Indexed ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Identifier ĊĠĠĠĠĠĠĠ Ġ) Ġ{ Ġindex , Ġquoted Identifier For Call , Ġparentheses Arguments Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġquoted Parent heses Arguments Ġ= Ġparentheses Arguments . quote Arguments () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ== Ġlast Index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Block Call ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Identifier For Call , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġidentifier Metadata , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Parent heses Arguments , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Block ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Function Call ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Identifier For Call , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġidentifier Metadata , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* quoted Parent heses Arguments ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote (` in `: ĠIn ): ĠO tp Er lang Object Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchildren Ġ= Ġ` in `. children ĊĊĠĠĠĠĠĠĠ Ġif Ġ( children . size Ġ!= Ġ 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠTODO (" Binary Operation Ġexpected Ġto Ġhave Ġ 3 Ġchildren Ġ( left Ġoperand , Ġoperator , Ġright Ġoperand ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġquoted Left Operand Ġ= Ġ( children [ 0 ] Ġas ĠQu ot able ). quote () ĊĊĠĠĠĠĠĠĠ Ġval Ġoperator Ġ= Ġchildren [ 1 ] Ġas ĠQu ot able ĊĠĠĠĠĠĠĠ Ġval Ġquoted Operator Ġ= Ġoperator . quote () ĊĊĠĠĠĠĠĠĠ Ġval Ġquoted Right Operand Ġ= Ġ( children [ 2 ] Ġas ĠQu ot able ). quote () ĊĊĠĠĠĠĠĠĠ Ġvar Ġquoted : ĠO tp Er lang Object ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġ// Ġ@ see Ġhttps :// github . com / elixir - lang / elixir / blob / 6 c 2 8 8 be 7 3 0 0 5 0 9 ff 7 b 8 0 9 0 0 2 a 3 5 6 3 c 6 a 0 2 dc 1 3 fa / lib / elixir / src / elixir _ parser . y rl # L 5 9 6 - L 5 9 7 ĊĠĠĠĠĠĠĠ Ġ// Ġ@ see Ġhttps :// github . com / elixir - lang / elixir / blob / 6 c 2 8 8 be 7 3 0 0 5 0 9 ff 7 b 8 0 9 0 0 2 a 3 5 6 3 c 6 a 0 2 dc 1 3 fa / lib / elixir / src / elixir _ parser . y rl # L 5 8 3 ĊĠĠĠĠĠĠĠ Ġif Ġ( Macro . is Expression ( quoted Left Operand )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġleft Expression Ġ= Ġquoted Left Operand Ġas ĠO tp Er lang Tuple ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġleft Operator Ġ= Ġleft Expression . elementAt ( 0 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( re arrange d Unary Operator Ġin ĠRE AR RAN GED _ UNARY _ OPER ATORS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġbuild _ op ({ _ Kind , ĠLine , Ġ' in '}, Ġ{ U Op , Ġ_, Ġ[ Left ]}, ĠRight ) Ġwhen Ġ? re arrange _ u op ( U Op ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ U Op , Ġmeta ( Line ), Ġ[{' in ', Ġmeta ( Line ), Ġ[ Left , ĠRight ]} ]}; Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( left Operator Ġ== Ġre arrange d Unary Operator ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġunary Operator Arguments Ġ= Ġleft Expression . elementAt ( 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoriginal Unary Operand Ġ= Ġwhen Ġ( unary Operator Arguments ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠO tp Er lang String Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠO tp Er lang Long ( unary Operator Arguments . stringValue (). code Point At ( 0 ). to Long ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠO tp Er lang List Ġ-> Ġunary Operator Arguments . elementAt ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠTODO (" Expected ĠRE AR RAN GED _ UNARY _ OPER ATORS Ġoperand Ġto Ġbe Ġquoted Ġas Ġan ĠO tp Er lang String Ġor ĠO tp Er lang List ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoperator Metadata Ġ= Ġmetadata ( operator ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Ġ= Ġquoted Function Call ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Operator , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoperator Metadata , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Function Call ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Operator , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoperator Metadata , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoriginal Unary Operand , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Right Operand ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( quoted Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Ġ= Ġquoted Function Call ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Operator , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata ( operator ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Left Operand , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Right Operand ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġquoted ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( qualified Alias : ĠQual ified Alias ): ĠO tp Er lang Object Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchildren Ġ= Ġqualified Alias . children ĊĊĠĠĠĠĠĠĠ Ġassert ( children . size Ġ== Ġ 3 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġquoted Alias Ġ= Ġ( children [ 2 ] Ġas ĠQu ot able ). quote () Ġas ĠO tp Er lang Tuple ĊĠĠĠĠĠĠĠ Ġval Ġquoted Matched Expression Ġ= Ġ( children [ 0 ] Ġas ĠQu ot able ). quote () ĊĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠ Ġ* ĠUse Ġline Ġfrom Ġlast Ġalias , Ġbut Ġdrop Ġ` counter : Ġ 0 ` ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġalias Metadata Ġ= ĠMacro . metadata ( quoted Alias ) ĊĠĠĠĠĠĠĠ Ġval Ġline Tuple Ġ= Ġorg . elixir _ lang . List . key find ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalias Metadata , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠO tp Er lang Atom (" line "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠ Ġ) Ġas ĠO tp Er lang Tuple ĊĠĠĠĠĠĠĠ Ġval Ġqualified Alias Metadata Ġ= ĠO tp Er lang List ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf < O tp Er lang Object >( line Tuple ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġlast Aliases Ġ= ĠMacro . call Arguments ( quoted Alias ). elements () ĊĊĠĠĠĠĠĠĠ Ġ/* Ġif Ġboth Ġaliases , Ġthen Ġthe Ġcounter : Ġ 0 Ġneeds Ġto Ġbe Ġremoved Ġfrom Ġthe Ġmetadata Ġdata Ġand Ġthe Ġarguments Ġfor ĊĠĠĠĠĠĠĠĠĠĠ Ġeach Ġ__ aliases __ Ġneed Ġto Ġbe Ġcombined Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġmerged Arguments Ġ= Ġif Ġ( Macro . is Aliases ( quoted Matched Expression )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfirst Alias List Ġ= ĠMacro . call Arguments ( quoted Matched Expression Ġas ĠO tp Er lang Tuple ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Alias List . elements () Ġ+ Ġlast Aliases ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( quoted Matched Expression ) Ġ+ Ġlast Aliases ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġquoted Function Call ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠA LI ASE S , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqualified Alias Metadata , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* merged Arguments ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( qualified Multiple Aliases : ĠQual ified Multiple Aliases ): ĠO tp Er lang Object Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchildren Ġ= Ġqualified Multiple Aliases . children ĊĊĠĠĠĠĠĠĠ Ġassert ( children . size Ġ== Ġ 3 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġquoted Multiple Aliases Ġ= Ġ( children [ 2 ] Ġas ĠQu ot able ). quote () ĊĠĠĠĠĠĠĠ Ġval Ġquoted Expression Ġ= Ġ( children [ 0 ] Ġas ĠQu ot able ). quote () ĊĠĠĠĠĠĠĠ Ġval Ġmetadata Ġ= Ġmetadata ( children [ 1 ] Ġas ĠOperator ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠSee Ġhttps :// github . com / lex mag / elixir / blob / 8 c 5 7 c 9 1 1 0 3 0 1 c 1 ee 0 2 d 8 4 b 5 7 4 c 5 9 fe ff 0 0 e 1 4 ba 3 / lib / elixir / src / elixir _ parser . y rl # L 6 4 4 ĊĠĠĠĠĠĠĠ Ġval Ġhead Ġ= Ġquoted Function Call ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ".", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Expression , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMULTI PLE _ ALI ASE S ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠO tp Er lang Tuple ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( head , Ġmetadata , Ġquoted Multiple Aliases ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( qualified Bracket Operation : ĠQual ified Bracket Operation ): ĠO tp Er lang Object Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġquoted Identifier Ġ= Ġ( qualified Bracket Operation . firstChild Ġas ĠQu ot able ). quote () ĊĊĠĠĠĠĠĠĠ Ġval Ġrelative Identifier Ġ= Ġqualified Bracket Operation . relative Identifier ĊĠĠĠĠĠĠĠ Ġval Ġquoted Relative Identifier Ġ= Ġrelative Identifier . quote () ĊĊĠĠĠĠĠĠĠ Ġquoted Identifier Ġ= Ġquoted Function Call ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ".", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata ( relative Identifier ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Identifier , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Relative Identifier ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcall Metadata Ġ= ĠO tp Er lang List ( array Of < O tp Er lang Object >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkeyword Tuple (" no _ pare ns ", Ġtrue ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlineNumber Keyword Tuple ( relative Identifier . node ) ĊĠĠĠĠĠĠĠ Ġ)) ĊĊĠĠĠĠĠĠĠ Ġval Ġquoted Container Ġ= Ġquoted Function Call ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Identifier , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall Metadata ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġbracket Arguments Ġ= Ġqualified Bracket Operation . bracket Arguments ĊĠĠĠĠĠĠĠ Ġval Ġquoted Bracket Arguments Ġ= Ġbracket Arguments . quote () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġquoted Function Call ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Elixir . Access ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" get ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata ( bracket Arguments ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Container , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Bracket Arguments ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( qualified No Arguments Call : ĠQual ified No Arguments Call < *> ): ĠO tp Er lang Object Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġquoted Qualifier Ġ= Ġ( qualified No Arguments Call . firstChild Ġas ĠQu ot able ). quote () ĊĊĠĠĠĠĠĠĠ Ġval Ġrelative Identifier Ġ= Ġqualified No Arguments Call . relative Identifier ĊĠĠĠĠĠĠĠ Ġval Ġquoted Relative Identifier Ġ= Ġrelative Identifier . quote () ĊĊĠĠĠĠĠĠĠ Ġval Ġquoted Identifier Ġ= Ġquoted Function Call ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ".", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata ( relative Identifier ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Qualifier , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Relative Identifier ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġdo Block Ġ= Ġqualified No Arguments Call . do Block ĊĊĠĠĠĠĠĠĠ Ġval Ġline Ġ= ĠlineNumber Keyword Tuple ( relative Identifier . node ) ĊĊĠĠĠĠĠĠĠ Ġval Ġmetadata Elements Ġ= Ġif Ġ( do Block Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( line ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( keyword Tuple (" no _ pare ns ", Ġtrue ), Ġline ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġquoted Block Call Metadata Ġ= ĠO tp Er lang List ( metadata Elements ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġquoted Block Call ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Identifier , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Block Call Metadata , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty Array (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Block ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( qualified No Parent heses Call : ĠQual ified No Parent heses Call < *> ): ĠO tp Er lang Object Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġquoted Qualifier Ġ= Ġ( qualified No Parent heses Call . firstChild Ġas ĠQu ot able ). quote () ĊĊĠĠĠĠĠĠĠ Ġval Ġrelative Identifier Ġ= Ġqualified No Parent heses Call . relative Identifier ĊĠĠĠĠĠĠĠ Ġval Ġquoted Relative Identifier Ġ= Ġrelative Identifier . quote () ĊĊĠĠĠĠĠĠĠ Ġval Ġquoted Identifier Ġ= Ġquoted Function Call ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ".", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata ( relative Identifier ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Qualifier , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Relative Identifier ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġquoted Arguments Ġ= Ġqualified No Parent heses Call . no Parent heses One Argument . quote Arguments () ĊĠĠĠĠĠĠĠ Ġval Ġdo Block Ġ= Ġqualified No Parent heses Call . do Block ĊĊĠĠĠĠĠĠĠ Ġreturn Ġquoted Block Call ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Identifier , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata ( relative Identifier ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Arguments , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Block ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( qualified Parent heses Call : ĠQual ified Parent heses Call < *> ): ĠO tp Er lang Object Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġquoted Qualifier Ġ= Ġ( qualified Parent heses Call . firstChild Ġas ĠQu ot able ). quote () ĊĊĠĠĠĠĠĠĠ Ġval Ġrelative Identifier Ġ= Ġqualified Parent heses Call . relative Identifier ĊĠĠĠĠĠĠĠ Ġval Ġquoted Relative Identifier Ġ= Ġrelative Identifier . quote () ĊĊĠĠĠĠĠĠĠ Ġval Ġmetadata Ġ= Ġmetadata ( relative Identifier ) ĊĠĠĠĠĠĠĠ Ġval Ġquoted Identifier Ġ= Ġquoted Function Call ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ".", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Qualifier , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Relative Identifier ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġparentheses Arguments List Ġ= Ġqualified Parent heses Call . matched Parent heses Arguments . parent heses Arguments List ĊĠĠĠĠĠĠĠ Ġval Ġdo Block Ġ= Ġqualified Parent heses Call . do Block ĊĊĠĠĠĠĠĠĠ Ġreturn Ġquoted Parent heses Call ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Identifier , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparentheses Arguments List , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Block ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( un qualified Bracket Operation : ĠUn qualified Bracket Operation ): ĠO tp Er lang Object Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġquoted Identifier Ġ= ĠO tp Er lang Atom ( un qualified Bracket Operation . node . firstChild Node . text ) ĊĠĠĠĠĠĠĠ Ġval Ġquoted Container Ġ= Ġquoted Variable ( quoted Identifier , Ġmetadata ( un qualified Bracket Operation )) ĊĊĠĠĠĠĠĠĠ Ġval Ġbracket Arguments Ġ= Ġun qualified Bracket Operation . bracket Arguments ĊĠĠĠĠĠĠĠ Ġval Ġquoted Bracket Arguments Ġ= Ġbracket Arguments . quote () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġquoted Function Call ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Elixir . Access ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" get ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata ( bracket Arguments ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Container , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Bracket Arguments ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* ĠRe places Ġ` nil ` Ġargument Ġin Ġvariables Ġwith Ġthe Ġquoted ĠE lixir Matched Not Parent heses Arguments . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( un qualified No Parent heses Call : ĠUn qualified No Parent heses Call < *> ): ĠO tp Er lang Object Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġquoted Identifier Ġ= ĠO tp Er lang Atom ( un qualified No Parent heses Call . function Name ()) ĊĠĠĠĠĠĠĠ Ġval Ġquoted Arguments Ġ= Ġun qualified No Parent heses Call . no Parent heses One Argument . quote Arguments () ĊĊĠĠĠĠĠĠĠ Ġvar Ġblock Call Metadata Ġ= Ġmetadata ( un qualified No Parent heses Call ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġsee Ġhttps :// github . com / elixir - lang / elixir / blob / de 3 9 bb aca 2 7 7 0 0 2 7 9 7 e 5 2 ffb de 6 1 7 ace 0 6 2 3 3 a 2 b // lib / elixir / src / elixir _ parser . y rl # L 6 2 7 - L 6 2 8 ĊĠĠĠĠĠĠĠ Ġif Ġ( quoted Arguments . size Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġquoted Argument Ġ= Ġquoted Arguments [ 0 ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Macro . is Expression ( quoted Argument )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpression Ġ= Ġquoted Argument Ġas ĠO tp Er lang Tuple ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreceiver Ġ= Ġexpression . elementAt ( 0 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( receiver Ġ== ĠMIN US Ġ|| Ġreceiver Ġ== ĠPL US ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdual Call Arguments Ġ= ĠMacro . call Arguments ( expression ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ[ Arg ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( dual Call Arguments . arity () Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġ@ note Ġget Children [ 0 ] Ġis ĠNOT Ġthe Ġsame Ġas Ġget First Child (). Ġ Ġget First Child () Ġwill Ġget Ġthe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleaf Ġnode Ġfor Ġidentifier Ġinstead Ġof Ġthe Ġfirst Ġcompound , Ġrule Ġnode Ġfor Ġthe Ġargument . Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġargument Ġ= Ġun qualified No Parent heses Call . children [ 1 ]. firstChild ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(!( argument Ġis ĠE lixir Access Expression Ġ&& Ġargument . getFirst Child () Ġis ĠE lixir Parent het ical St ab )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock Call Metadata Ġ= ĠO tp Er lang List ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( AM BIG UO US _ OP _ KEYWORD _ PAIR , Ġblock Call Metadata . elementAt ( 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġdo Block Ġ= Ġun qualified No Parent heses Call . do Block ĊĊĠĠĠĠĠĠĠ Ġreturn Ġquoted Block Call ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Identifier , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock Call Metadata , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Arguments , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Block ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( un qualified No Arguments Call : ĠUn qualified No Arguments Call < *> ): ĠO tp Er lang Object Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdo Block Ġ= Ġun qualified No Arguments Call . do Block ĊĠĠĠĠĠĠĠ Ġval Ġquoted : ĠO tp Er lang Object ĊĠĠĠĠĠĠĠ Ġval Ġidentifier Ġ= Ġun qualified No Arguments Call . identifier ĊĊĠĠĠĠĠĠĠ Ġval Ġidentifier Text Ġ= Ġrun Read Action Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġidentifier . text ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcall Metadata Ġ= Ġmetadata ( identifier ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġif Ġa Ġvariable Ġhas Ġa Ġ` do ` Ġblock Ġis Ġno Ġlonger Ġa Ġvariable Ġbecause Ġthe Ġdo Ġblock Ġacts Ġas Ġkeyword Ġarguments . ĊĠĠĠĠĠĠĠ Ġif Ġ( do Block Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġquoted Block Arguments Ġ= Ġdo Block . quote Arguments () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Ġ= Ġquoted Function Call ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġidentifier Text , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall Metadata , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* quoted Block Arguments ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġ@ note Ġquoted Function Call Ġcannot Ġbe Ġused Ġhere Ġbecause Ġin Ġthe Ġ 3 - tuple Ġfor Ġfunction Ġcalls , Ġthe Ġelements Ġare ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ name , Ġmetadata , Ġarguments }, Ġwhile Ġfor Ġan Ġambiguous Ġcall Ġor Ġvariable , Ġthe Ġelements Ġare ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ name , Ġmetadata , Ġcontext }. Ġ ĠImport ant ly , Ġcontext Ġis Ġnil Ġwhen Ġthere Ġis Ġno Ġcontext Ġwhile Ġarguments Ġare Ġ[] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġthere Ġare Ġno Ġarguments . Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Ġ= Ġquoted Variable ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġidentifier Text , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall Metadata ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġquoted ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( un qualified Parent heses Call : ĠUn qualified Parent heses Call < *> ): ĠO tp Er lang Object Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmetadata Ġ= Ġmetadata ( un qualified Parent heses Call ) ĊĠĠĠĠĠĠĠ Ġval Ġquoted Identifier Ġ= ĠO tp Er lang Atom ( un qualified Parent heses Call . node . firstChild Node . text ) ĊĠĠĠĠĠĠĠ Ġval Ġparentheses Arguments List Ġ= Ġun qualified Parent heses Call . matched Parent heses Arguments . parent heses Arguments List ĊĠĠĠĠĠĠĠ Ġval Ġdo Block Ġ= Ġun qualified Parent heses Call . do Block ĊĊĠĠĠĠĠĠĠ Ġreturn Ġquoted Parent heses Call ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Identifier , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparentheses Arguments List , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Block ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( parent het ical St ab : ĠE lixir Parent het ical St ab ): ĠO tp Er lang Object Ġ= ĊĠĠĠĠĠĠĠ Ġparent het ical St ab . stab ?. quote ( empty Metadata ( parent het ical St ab )) Ġ?: ĊĠĠĠĠĠĠĠ Ġ// Ġ@ note ĠCAN NOT Ġuse Ġquoted Function Call Ġbecause Ġit Ġrequires Ġmetadata Ġand Ġgives Ġnil Ġinstead Ġof Ġ[] Ġwhen Ġno ĊĠĠĠĠĠĠĠ Ġ// ĠĠ Ġarguments Ġare Ġgiven Ġwhile Ġempty Ġblock Ġis Ġquoted Ġas Ġ`{ __ block __, Ġ[], Ġ[] }` ĊĠĠĠĠĠĠĠ ĠO tp Er lang Tuple ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( BLOCK , Ġempty Metadata ( parent het ical St ab ), ĠO tp Er lang List ()) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġfun Ġempty Metadata ( parent het ical St ab : ĠE lixir Parent het ical St ab ): ĠO tp Er lang List Ġ= Ġmetadata ( parent het ical St ab ) ĊĊĠĠĠ Ġ/* Ġ@ note Ġquoted Function Call Ġcannot Ġbe Ġused Ġhere Ġbecause Ġin Ġthe Ġ 3 - tuple Ġfor Ġfunction Ġcalls , Ġthe Ġelements Ġare ĊĠĠĠĠĠĠ Ġ{ name , Ġmetadata , Ġarguments }, Ġwhile Ġfor Ġan Ġambiguous Ġcall Ġor Ġvariable , Ġthe Ġelements Ġare ĊĠĠĠĠĠĠ Ġ{ name , Ġmetadata , Ġcontext }. Ġ ĠImport ant ly , Ġcontext Ġis Ġnil Ġwhen Ġthere Ġis Ġno Ġcontext Ġwhile Ġarguments Ġare Ġ[] Ġwhen ĊĠĠĠĠĠĠ Ġthere Ġare Ġno Ġarguments . Ġ*/ ĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( variable : ĠE lixir Variable ): ĠO tp Er lang Object Ġ= Ġquoted Variable ( variable ) ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( operator : ĠOperator ): ĠO tp Er lang Object Ġ= ĠO tp Er lang Atom ( operator . operator Token Node (). text ) ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( prefix : ĠPrefix ): ĠO tp Er lang Object Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchildren Ġ= Ġprefix . children ĊĊĠĠĠĠĠĠĠ Ġif Ġ( children . size Ġ!= Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠTODO (" Prefix Ġexpected Ġto Ġhave Ġ 2 Ġchildren Ġ( operator Ġand Ġoperand ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġquoted Operator Ġ= Ġ( children [ 0 ] Ġas ĠQu ot able ). quote () ĊĠĠĠĠĠĠĠ Ġval Ġquoted Operand Ġ= Ġ( children [ 1 ] Ġas ĠQu ot able ). quote () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġquoted Function Call ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Operator , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata ( prefix ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Operand ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( children : ĠArray < Psi Element >): ĠO tp Er lang Object Ġ= ĊĠĠĠĠĠĠĠ Ġchildren . as Sequence (). filter Ġ{ Ġit Ġ! is ĠUn quoted Ġ}. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġas ? ĠQu ot able Ġ?: Ġthrow ĠTODO (" Child , Ġ$ it , Ġmust Ġbe ĠQu ot able Ġor ĠUn quoted ") ĊĠĠĠĠĠĠĠ Ġ}. toList (). to Typed Array (). let Ġ{ Ġquote ( it ) Ġ} ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( file : ĠPsi File ): ĠO tp Er lang Object Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( file . view Provider . get Psi ( Elixir Language ) Ġas ĠE lixir File ). let Ġ{ Ġroot Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠE lixir Psi Impl Util . quote ( root ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( un qualified No Parent heses Many Arguments Call : ĠE lixir Unqualified No Parent heses Many Arguments Call ): ĠO tp Er lang Object Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġquoted Identifier Ġ= Ġun qualified No Parent heses Many Arguments Call . identifier . quote () ĊĠĠĠĠĠĠĠ Ġval Ġquoted Arguments Ġ= ĠE lixir Psi Impl Util . quote Arguments ( un qualified No Parent heses Many Arguments Call ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġan ch ored Quoted Function Call ( un qualified No Parent heses Many Arguments Call , Ġquoted Identifier , Ġ* quoted Arguments ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( sig il Her ed oc : ĠSig il Her ed oc ): ĠO tp Er lang Object Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġquoted Her ed oc Ġ= Ġquote ( sig il Her ed oc Ġas ĠHer ed oc ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġquote ( sig il Her ed oc , Ġquoted Her ed oc ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( sig il Line : ĠSig il Line ): ĠO tp Er lang Object Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbody Child Nodes Ġ= Ġchild Nodes ( sig il Line . body ) ĊĠĠĠĠĠĠĠ Ġval Ġquoted Body Ġ= Ġquoted Child Nodes ( sig il Line , Ġ* body Child Nodes ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġquote ( sig il Line , Ġquoted Body ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( quot able Keyword List : ĠQu ot able Keyword List ): ĠO tp Er lang Object Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠO tp Er lang List ( quot able Keyword List . quot able Keyword Pair List (). map Ġ{ Ġit . quote () Ġ}. to Typed Array ()) ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( her ed oc Line : ĠHer ed oc Line , Ġher ed oc : ĠHer ed oc , Ġprefix Length : ĠInt ): ĠO tp Er lang Object Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexcess Whitespace Ġ= Ġher ed oc Line . her ed oc Line Prefix . ex cess Whitespace ( Elixir Types . FRAGMENT , Ġprefix Length ) ĊĠĠĠĠĠĠĠ Ġval Ġdirect Child Nodes Ġ= Ġchild Nodes ( her ed oc Line . body ) ĊĊĠĠĠĠĠĠĠ Ġval Ġaccumulated Child Nodes Ġ= Ġif Ġ( ex cess Whitespace Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( ex cess Whitespace ) Ġ+ Ġdirect Child Nodes ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdirect Child Nodes ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġquoted Child Nodes ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġher ed oc , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata ( her ed oc Line ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* acc umulated Child Nodes ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( her ed oc : ĠHer ed oc ): ĠO tp Er lang Object Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprefix Length Ġ= Ġher ed oc . her ed oc Prefix . text Length ĊĠĠĠĠĠĠĠ Ġval Ġaligned Node Queue Ġ= ĠLinkedList < AST Node >() ĊĠĠĠĠĠĠĠ Ġval Ġher ed oc Line List Ġ= Ġher ed oc . her ed oc Line List ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( line Ġin Ġher ed oc Line List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġqueue Child Nodes ( line , ĠE lixir Types . FRAGMENT , Ġprefix Length , Ġaligned Node Queue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġmerged Node Queue Ġ= Ġmerge Fragments ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaligned Node Queue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠE lixir Types . FRAGMENT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġher ed oc . manager ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġquoted Child Nodes ( her ed oc , Ġ* merged Node Queue . to Typed Array ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( tuple : ĠE lixir Tuple ): ĠO tp Er lang Object Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġopening Cur lies Ġ= Ġtuple . node . getChildren ( Token Set . create ( Elixir Types . OPEN ING _ CURL Y )) ĊĊĠĠĠĠĠĠĠ Ġassert ( opening Cur lies . size Ġ== Ġ 1 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġopening Cur ly Ġ= Ġopening Cur lies [ 0 ] ĊĠĠĠĠĠĠĠ Ġval Ġquoted Children Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtuple . children . as Sequence (). map Ġ{ Ġit Ġas ĠQu ot able Ġ}. map ( Quot able :: quote ). toList (). to Typed Array () ĊĊĠĠĠĠĠĠĠ Ġ// Ġ 2 - tuples Ġare Ġliterals Ġin Ġquoted Ġform ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( quoted Children . size Ġ== Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠO tp Er lang Tuple ( quoted Children ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Function Call ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"{}", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata ( opening Cur ly ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* quoted Children ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( struct Operation : ĠE lixir Struct Operation ): ĠO tp Er lang Object Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchildren Ġ= Ġstruct Operation . children ĊĊĠĠĠĠĠĠĠ Ġassert ( children . size Ġ== Ġ 3 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġoperator Ġ= Ġchildren [ 0 ] Ġas ĠOperator ĊĠĠĠĠĠĠĠ Ġval Ġquoted Operator Ġ= Ġoperator . quote () ĊĊĠĠĠĠĠĠĠ Ġval Ġquoted Name Ġ= Ġ( children [ 1 ] Ġas ĠQu ot able ). quote () ĊĠĠĠĠĠĠĠ Ġval Ġquoted Map Arguments Ġ= Ġ( children [ 2 ] Ġas ĠQu ot able ). quote () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġquoted Function Call ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Operator , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata ( operator ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Map Arguments ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( stab Parent heses Signature : ĠE lixir St ab Parent heses Signature ): ĠO tp Er lang Object Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchildren Ġ= Ġst ab Parent heses Signature . children ĊĊĠĠĠĠĠĠĠ Ġassert ( children . isNotEmpty ()) ĊĊĠĠĠĠĠĠĠ Ġ// Ġst ab Parent heses Many Arguments Ġ... ĊĠĠĠĠĠĠĠ Ġval Ġquoted Arguments Ġ= Ġ( children [ 0 ] Ġas ĠQu ot able Arguments ). quote Arguments () ĊĊĠĠĠĠĠĠĠ Ġ// Ġst ab Parent heses Many Arguments ĠWHEN _ OPERATOR Ġexpression ĊĠĠĠĠĠĠĠ Ġval Ġquot edList Elements Ġ= Ġif Ġ( children . size Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( children . size Ġ== Ġ 3 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoperator Ġ= Ġchildren [ 1 ] Ġas ĠOperator ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġquoted Operator Ġ= Ġoperator . quote () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġquoted Guard Ġ= Ġ( children [ 2 ] Ġas ĠQu ot able ). quote () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġquoted When Arguments Ġ= Ġquoted Arguments Ġ+ ĠarrayOf ( quoted Guard ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġquoted When Operation Ġ= Ġquoted Function Call ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Operator , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata ( operator ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* quoted When Arguments ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( quoted When Operation ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Arguments ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠO tp Er lang List ( quot edList Elements ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( stab Operation : ĠE lixir St ab Operation ): ĠO tp Er lang Object Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoperator Ġ= Ġst ab Operation . operator () ĊĠĠĠĠĠĠĠ Ġval Ġquoted Operator Ġ= Ġoperator . quote () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġquoted Function Call ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Operator , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata ( operator ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Left Operand ( stab Operation ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Right Operand ( stab Operation ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġfun Ġquoted Right Operand ( stab Operation : ĠE lixir St ab Operation ): ĠO tp Er lang Object Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġright Operand Ġ= Ġst ab Operation . right Operand () ĊĠĠĠĠĠĠĠ Ġval Ġquoted Right Operand : ĠO tp Er lang Object ĊĊĠĠĠĠĠĠĠ Ġif Ġ( right Operand Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġquot able Right Operand Ġ= Ġright Operand Ġas ĠQu ot able ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Right Operand Ġ= Ġquot able Right Operand !!. quote () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Right Operand Ġ= ĠNIL ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġquoted Right Operand ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġhttps :// github . com / elixir - lang / elixir / blob / de 3 9 bb aca 2 7 7 0 0 2 7 9 7 e 5 2 ffb de 6 1 7 ace 0 6 2 3 3 a 2 b / lib / elixir / src / elixir _ parser . y rl # L 2 7 7 ĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( stab No Parent heses Signature : ĠE lixir St ab No Parent heses Signature ): ĠO tp Er lang Object Ġ= ĊĠĠĠĠĠĠĠ Ġst ab No Parent heses Signature . no Parent heses Arguments . quote Arguments () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġunwrap When ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let (:: O tp Er lang List ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġel ix ir Char List ( it ) Ġ} ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( stab Body : ĠE lixir St ab Body ): ĠO tp Er lang Object Ġ= Ġst ab Body . quote ( O tp Er lang List ()) ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( stab : ĠE lixir St ab ): ĠO tp Er lang Object Ġ= Ġst ab . quote ( O tp Er lang List ()) ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( sig il Modifiers : ĠE lixir Sig il Modifiers ): ĠO tp Er lang Object Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcode Points Ġ= Ġsig il Modifiers . text . code Points (). toArray () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( code Points . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠO tp Er lang List () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġel ix ir Char List ( code Points . toList ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( relative Identifier : ĠE lixir Relative Identifier ): ĠO tp Er lang Object Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchildren Ġ= Ġrelative Identifier . children ĊĊĠĠĠĠĠĠĠ Ġ// ĠOnly Ġtokens ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( children . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtake Ġfirst Ġnode Ġto Ġavoid ĠSIGN IFIC ANT _ WHITE _ SPACE Ġafter ĠD UAL _ OPERATOR ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrelative Identifier . node . firstChild Node . text . let (:: O tp Er lang Atom ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( children . size Ġ== Ġ 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Ġ= Ġchildren [ 0 ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( child Ġis ĠAtom able ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild . quote As Atom () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( child Ġas ĠQu ot able ). quote () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( identifier : ĠE lixir Identifier ): ĠO tp Er lang Object Ġ= ĠO tp Er lang Atom ( identifier . text ) ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( decimal Float : ĠE lixir Decimal Float ): ĠO tp Er lang Object Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintegral Digits List Ġ= Ġdecimal Float . decimal Float Integral . decimal Whole Number . digits List () ĊĠĠĠĠĠĠĠ Ġval Ġintegral String Ġ= Ġcompact Digits ( integral Digits List ) ĊĊĠĠĠĠĠĠĠ Ġval Ġfraction al Digits List Ġ= Ġdecimal Float . decimal Float Fraction al . decimal Whole Number . digits List () ĊĠĠĠĠĠĠĠ Ġval Ġfraction al String Ġ= Ġcompact Digits ( fraction al Digits List ) ĊĊĠĠĠĠĠĠĠ Ġval Ġdecimal Float Exponent Ġ= Ġdecimal Float . decimal Float Exponent ĊĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( decimal Float Exponent Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexponent Digits List Ġ= Ġdecimal Float Exponent . decimal Whole Number . digits List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexponent Sign String Ġ= Ġdecimal Float Exponent . decimal Float Exponent Sign ?. text Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexponent String Ġ= Ġcompact Digits ( exponent Digits List ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfloat String Ġ= ĠString . format ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"% s .% se % s % s ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintegral String , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfraction al String , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexponent Sign String , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexponent String ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( integral Digits List . in Base () Ġ&& Ġfraction al Digits List . in Base () Ġ&& Ġexponent Digits List . in Base ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDouble . parseDouble ( float String ). let (:: O tp Er lang Double ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠConvert Ġparser Ġerror Ġto Ġruntime ĠArgumentError ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Function Call ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" String ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" to _ float ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata ( decimal Float ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġel ix ir String ( float String ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfloat String Ġ= ĠString . format ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"% s .% s ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintegral String , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfraction al String ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( integral Digits List . in Base () Ġ&& Ġfraction al Digits List . in Base ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjava . lang . Double . parseDouble ( float String ). let (:: O tp Er lang Double ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠConvert Ġparser Ġerror Ġto Ġruntime ĠArgumentError ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Function Call ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" String ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" to _ float ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata ( decimal Float ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġel ix ir String ( float String ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote (@ Suppress (" UNUSED _ PARAMETER ") Ġempty Parent heses : ĠE lixir Empty Parent heses ): ĠO tp Er lang Object Ġ= ĊĠĠĠĠĠĠĠĠ Ġempty Block () ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( file : ĠE lixir File ): ĠO tp Er lang Object Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġquoted Children Ġ= ĠLinkedList < O tp Er lang Object >() ĊĊĠĠĠĠĠĠĠ Ġfile . accept Children ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠPsi Element Visitor () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Element ( element : ĠPsi Element ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( element Ġis ĠQu ot able ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisit Quot able (( element Ġas ĠQu ot able ?) !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(! element . is Un quoted ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠTODO (" Don 't Ġknow Ġhow Ġto Ġvisit Ġ$ element ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . visit Element ( element ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġvisit Quot able ( child : ĠQu ot able ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġquoted Child Ġ= Ġchild . quote () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Children . add ( quoted Child ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġ@ see Ġhttps :// github . com / elixir - lang / elixir / blob / de 3 9 bb aca 2 7 7 0 0 2 7 9 7 e 5 2 ffb de 6 1 7 ace 0 6 2 3 3 a 2 b / lib / elixir / src / elixir _ parser . y rl # L 7 6 - L 7 9 ĊĠĠĠĠĠĠĠ Ġreturn Ġto Block ( quoted Children ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( sig il : ĠSig il , Ġquoted Content : ĠO tp Er lang Object ): ĠO tp Er lang Object Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsig il Line Ġ= ĠlineNumber Keyword Tuple ( sig il . node ) ĊĠĠĠĠĠĠĠ Ġval Ġsig il Binary Metadata Array Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsig il . indentation () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ Ġindentation Ġ-> ĠarrayOf < O tp Er lang Object >( keyword Tuple (" indentation ", Ġindentation ), Ġsig il Line ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠarrayOf < O tp Er lang Object >( sig il Line ) ĊĠĠĠĠĠĠĠ Ġval Ġsig il Binary Metadata Ġ= ĠO tp Er lang List ( sig il Binary Metadata Array ) ĊĠĠĠĠĠĠĠ Ġval Ġsig il Binary Ġ= Ġwhen Ġ( quoted Content ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠO tp Er lang Tuple Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( quoted Content . arity () Ġ== Ġ 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠO tp Er lang Tuple ( array Of ( quoted Content . elementAt ( 0 ), Ġsig il Binary Metadata , Ġquoted Content . elementAt ( 2 ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġquoted Function Call (" << >> ", Ġsig il Binary Metadata , Ġquoted Content ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġsig il Name Ġ= Ġsig il . sig il Name () ĊĠĠĠĠĠĠĠ Ġval Ġquoted Modifiers Ġ= Ġsig il . sig il Modifiers . quote () ĊĠĠĠĠĠĠĠ Ġval Ġsig il Metadata Ġ= ĠO tp Er lang List ( array Of < O tp Er lang Object >( keyword Tuple (" delimiter ", Ġsig il . sig il Delimiter ()), Ġsig il Line )) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġquoted Function Call ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" sig il _$ sig il Name ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsig il Metadata , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsig il Binary , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Modifiers ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquote ( whole Number : ĠWh ole Number ): ĠO tp Er lang Object Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdigits List Ġ= Ġwhole Number . digits List () ĊĠĠĠĠĠĠĠ Ġval Ġdigits List String Ġ= Ġdigits List . text ToString () ĊĠĠĠĠĠĠĠ Ġval Ġbase Ġ= Ġwhole Number . base () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( digits List . in Base ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquote In Base ( digits List String , Ġbase ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġ 0 Ġelements Ġis Ġinvalid Ġin Ġnative ĠE lixir Ġand Ġcan Ġbe Ġem ulated Ġas Ġ` String . to _ integer ("", Ġbase )` Ġwhile ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġelements Ġimplies Ġat Ġleast Ġone Ġelement Ġis Ġinvalid Digits ElementType Ġwhich Ġis Ġinvalid Ġin Ġnative ĠE lixir Ġand ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcan Ġbe Ġem ulated Ġas ĠString . to _ integer (< all - digits >, Ġbase ) Ġso Ġthat Ġit Ġraises Ġan ĠArgumentError Ġon Ġthe Ġinvalid ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdigits Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Function Call ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" String ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" to _ integer ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata ( whole Number ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġel ix ir String ( digits List String ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠO tp Er lang Long ( base . to Long ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠPrivate ĠFunctions ĊĊĠĠĠ Ġprivate Ġfun Ġan ch ored Quoted Function Call ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanchor : ĠPsi Element , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Identifier : ĠO tp Er lang Object , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar arg Ġquoted Arguments : ĠO tp Er lang Object ĊĠĠĠ Ġ): ĠO tp Er lang Object Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmetadata Ġ= Ġif Ġ( Macro . is Expression ( quoted Identifier )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpression Ġ= Ġquoted Identifier Ġas ĠO tp Er lang Tuple ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠGrab Ġmetadata Ġfrom Ġquoted Identifier Ġso Ġline Ġof Ġquoted Function Call Ġis Ġline Ġof Ġidentifier Ġor Ġ`. ` Ġin ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġidentifier , Ġwhich Ġcan Ġdiffer Ġfrom Ġthe Ġline Ġof Ġquot able Ġcall Ġwhen Ġthere Ġare Ġnew lines Ġon Ġeither Ġside Ġof ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ`. `. Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMacro . metadata ( expression ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata ( anchor ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġquoted Function Call ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Identifier , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* quoted Arguments ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġkeyword Tuple ( key : ĠString , Ġvalue : ĠBoolean ): ĠO tp Er lang Tuple Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkey Atom Ġ= ĠO tp Er lang Atom ( key ) ĊĠĠĠĠĠĠĠ Ġval Ġvalue Atom Ġ= ĠO tp Er lang Atom ( value ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġkeyword Tuple ( key Atom , Ġvalue Atom ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġkeyword Tuple ( key : ĠString , Ġvalue : ĠInt ): ĠO tp Er lang Tuple Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkey Atom Ġ= ĠO tp Er lang Atom ( key ) ĊĠĠĠĠĠĠĠ Ġval Ġvalue Int Ġ= ĠO tp Er lang Int ( value ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġkeyword Tuple ( key Atom , Ġvalue Int ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġkeyword Tuple ( key : ĠString , Ġvalue : ĠString ): ĠO tp Er lang Tuple Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkey Atom Ġ Ġ= ĠO tp Er lang Atom ( key ) ĊĠĠĠĠĠĠĠ Ġval Ġvalue Binary Ġ= ĠO tp Er lang Binary ( value . toByteArray ()) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġkeyword Tuple ( key Atom , Ġvalue Binary ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġkeyword Tuple ( key : ĠO tp Er lang Atom , Ġvalue : ĠO tp Er lang Object ): ĠO tp Er lang Tuple Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠO tp Er lang Tuple ( array Of ( key , Ġvalue )) ĊĊĠĠĠ Ġ/* ĠReturns Ġthe Ġ 0 - indexed Ġline Ġnumber Ġfor Ġthe Ġelement Ġ*/ ĊĠĠĠ Ġprivate Ġfun ĠlineNumber ( node : ĠAST Node ): ĠInt Ġ= Ġnode . psi . document () !!. get LineNumber ( node . start Offset ) ĊĊĠĠĠ Ġprivate Ġfun ĠlineNumber Keyword Tuple ( operator : ĠOperator ): ĠO tp Er lang Tuple Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlineNumber Keyword Tuple ( operator . operator Token Node ()) ĊĊĠĠĠ Ġprivate Ġfun ĠlineNumber Keyword Tuple ( node : ĠAST Node ): ĠO tp Er lang Tuple Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkeyword Tuple ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" line ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlineNumber ( node ) Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġprivate Ġfun Ġquote ( children : ĠArray < Quot able >) Ġ= ĊĠĠĠĠĠĠĠ Ġ// ĠUses Ġto Block Ġbecause Ġthis Ġis Ġfor Ġinside Ġinterpolation , Ġwhich Ġfunctions Ġthe Ġsame Ġas Ġan Ġembedded Ġfile ĊĠĠĠĠĠĠĠ Ġchildren . map ( Quot able :: quote ). let Ġ{ Ġto Block ( it ) Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquoted Function Call ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Qualified Identifier : ĠO tp Er lang Object , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata : ĠO tp Er lang List , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar arg Ġarguments : ĠO tp Er lang Object ĊĠĠĠ Ġ): ĠO tp Er lang Tuple Ġ= ĠO tp Er lang Tuple ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( quoted Qualified Identifier , Ġmetadata , Ġquoted Function Arguments (* arguments )) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġmetadata ( node : ĠAST Node ): ĠO tp Er lang List Ġ= Ġo tp Er lang List ( line Number Keyword Tuple ( node )) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġmetadata ( operator : ĠOperator ): ĠO tp Er lang List Ġ= Ġmetadata ( operator . operator Token Node ()) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġmetadata ( element : ĠPsi Element ): ĠO tp Er lang List Ġ= Ġmetadata ( element . node ) ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquoted Function Call ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġidentifier : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata : ĠO tp Er lang List , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar arg Ġarguments : ĠO tp Er lang Object ĊĠĠĠ Ġ): ĠO tp Er lang Tuple Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Function Call ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠO tp Er lang Atom ( identifier ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* arguments ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġquoted Function Call ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodule : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġidentifier : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata : ĠO tp Er lang List , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar arg Ġarguments : ĠO tp Er lang Object ĊĠĠĠ Ġ): ĠO tp Er lang Tuple Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġquoted Qualified Identifier Ġ= Ġquoted Function Call ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ".", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠO tp Er lang Atom ( module ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠO tp Er lang Atom ( identifier ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġquoted Function Call ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Qualified Identifier , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* arguments ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* ĊĠĠĠĠ Ġ* ĠEr lang Ġwill Ġautomatically Ġstringify Ġa Ġlist Ġthat Ġis Ġjust Ġa Ġlist Ġof ĠLATIN - 1 Ġprint able Ġcode ĊĠĠĠĠ Ġ* Ġpoints . ĊĠĠĠĠ Ġ* ĠO tp Er lang String Ġand ĠO tp Er lang List Ġare Ġnot Ġequal Ġwhen Ġthey Ġhave Ġthe Ġsame Ġcontent , Ġso Ġto Ġcheck Ġagainst ĊĠĠĠĠ Ġ* ĠE lixir . Code . string _ to _ quoted , Ġthis Ġcode Ġmust Ġdetermine Ġif ĠEr lang Ġwould Ġreturn Ġan ĠO tp Er lang String Ġinstead ĊĠĠĠĠ Ġ* Ġof ĠO tp Er lang List Ġand Ġdo Ġthe Ġsame . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġquoted Function Arguments ( var arg Ġarguments : ĠO tp Er lang Object ): ĠO tp Er lang Object Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġel ix ir Char List ( O tp Er lang List ( arguments )) ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġprivate Ġfun Ġquoted Left Operand ( stab Operation : ĠE lixir St ab Operation ): ĠO tp Er lang Object Ġ= ĊĠĠĠĠĠĠĠ Ġst ab Operation . left Operand ()?. quote () Ġ?: ĊĠĠĠĠĠĠĠ Ġ// Ġwhen Ġthere Ġis Ġnot Ġsignature Ġbefore Ġ` -> `. ĊĠĠĠĠĠĠĠ ĠO tp Er lang List () ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġchild Nodes ( parentElement : ĠPsi Element ): ĠArray < AST Node > Ġ= Ġparent Element . node . getChildren ( null ) ĊĊĠĠĠ Ġfun Ġquoted Child Nodes ( parent : ĠParent , Ġvar arg Ġchildren : ĠAST Node ): ĠO tp Er lang Object Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Child Nodes ( parent , Ġmetadata ( parent ), Ġ* children ) ĊĊĠĠĠ Ġprivate Ġfun Ġquoted Child Nodes ( parent : ĠParent , Ġmetadata : ĠO tp Er lang List , Ġvar arg Ġchildren : ĠAST Node ): ĠO tp Er lang Object Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġquoted : ĠO tp Er lang Object ĊĊĠĠĠĠĠĠĠ Ġval Ġchild Count Ġ= Ġchildren . size ĊĊĠĠĠĠĠĠĠ Ġif Ġ( child Count Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Ġ= Ġparent . quote Empty () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġquoted Parent List Ġ= ĠLinkedList < O tp Er lang Object >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcode Point List : ĠMutable List < Int >? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( child Ġin Ġchildren ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġelement Type Ġ= Ġchild . elementType ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( elementType Ġ=== ĠE lixir Types . FRAGMENT ) Ġ|| Ġ( elementType Ġ=== ĠE lixir Types . EOL )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcode Point List Ġ= Ġparent . add Fragment Code Points ( code Point List , Ġchild ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( elementType Ġ=== ĠE lixir Types . ESCA PED _ CHARACTER ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcode Point List Ġ= Ġparent . add Esc aped Character Code Points ( code Point List , Ġchild ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( elementType Ġ=== ĠE lixir Types . ESCA PED _ EOL ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcode Point List Ġ= Ġparent . add Esc aped EOL ( code Point List , Ġchild ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( elementType Ġ=== ĠE lixir Types . ESCA PED _ HER ED OC _ TERMIN ATOR Ġ|| Ġelement Type Ġ=== ĠE lixir Types . ESCA PED _ LINE _ TERMIN ATOR ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcode Point List Ġ= Ġparent . add Esc aped Termin ator ( code Point List , Ġchild ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( elementType Ġ=== ĠE lixir Types . HEX A DECIMAL _ ESCAPE _ PREFIX ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcode Point List Ġ= Ġadd Child Text Code Points ( code Point List , Ġchild ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( elementType Ġ=== ĠE lixir Types . INTER POL ATION ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( code Point List Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Parent List . add ( elixir String ( code Point List )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcode Point List Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( parent Ġis ĠHer ed oc Ġ Ġ&& Ġ Ġquoted Parent List . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Parent List . add ( elixir String ("")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Element Ġ= Ġchild . psi Ġas ĠE lixir Interpolation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Parent List . add ( parent . quote Interpolation ( child Element )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( elementType Ġ=== ĠE lixir Types . QUOTE _ HEX A DECIMAL _ ESCAPE _ SEQUENCE Ġ|| Ġelement Type Ġ=== ĠE lixir Types . SIG IL _ HEX A DECIMAL _ ESCAPE _ SEQUENCE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcode Point List Ġ= Ġparent . add Hex adecimal Escape Sequence Code Points ( code Point List , Ġchild ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠTODO (" Can 't Ġquote Ġ" Ġ+ Ġchild ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Ġ= Ġif Ġ( code Point List Ġ!= Ġnull Ġ&& Ġquoted Parent List . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent . quote Literal ( code Point List ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( code Point List Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Parent List . add ( elixir String ( code Point List )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent . quote Binary ( metadata , Ġquoted Parent List ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġquoted ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġprivate Ġfun Ġquoted Variable ( variable : ĠPsi Element ): ĠO tp Er lang Object Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Variable ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariable . text , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata ( variable ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġfun Ġquoted Variable ( identifier : ĠString , Ġmetadata : ĠO tp Er lang List ): ĠO tp Er lang Object Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Variable ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠO tp Er lang Atom ( identifier ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġprivate Ġfun Ġquoted Variable ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Identifier : ĠO tp Er lang Object , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata : ĠO tp Er lang List , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext : ĠO tp Er lang Object Ġ= ĠNIL ĊĠĠĠ Ġ): ĠO tp Er lang Object Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠO tp Er lang Tuple ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( quoted Identifier , Ġmetadata , Ġcontext ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġfun Ġqueue Child Nodes ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġline : ĠHer ed oc Line , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Type : ĠI ElementType , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprefix Length : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġher ed oc Desc endant Nodes : ĠQueue < AST Node > ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexcess Whitespace Ġ= Ġline . her ed oc Line Prefix . ex cess Whitespace ( fragment Type , Ġprefix Length ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( ex cess Whitespace Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġher ed oc Desc endant Nodes . add ( ex cess Whitespace ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġchild Nodes Ġ= Ġchild Nodes ( line . body ) ĊĠĠĠĠĠĠĠ ĠCollections . addAll ( her ed oc Desc endant Nodes , Ġ* childNodes ) ĊĊĠĠĠĠĠĠĠ Ġher ed oc Desc endant Nodes . add ( line . last Child . node ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġprivate Ġfun Ġmerge Fragments ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġun merged Nodes : ĠDe que < AST Node >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Type : ĠI ElementType , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmanager : ĠPsi Manager ĊĠĠĠ Ġ): ĠQueue < AST Node > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmerged Nodes Ġ= ĠLinkedList < AST Node >() ĊĠĠĠĠĠĠĠ Ġvar Ġfragment StringBuilder : ĠStringBuilder ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( un merged Node Ġin Ġun merged Nodes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( un merged Node . elementType Ġ=== Ġfragment Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fragment StringBuilder Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment StringBuilder Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfragment Ġ= Ġun merged Node . text ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment StringBuilder . append ( fragment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Merged Fragments ( merged Nodes , Ġfragment Type , Ġfragment StringBuilder , Ġmanager ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment StringBuilder Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmerged Nodes . add ( un merged Node ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġadd Merged Fragments ( merged Nodes , Ġfragment Type , Ġfragment StringBuilder , Ġmanager ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġmerged Nodes ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Merged Fragments ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmerged Nodes : ĠQueue < AST Node >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Type : ĠI ElementType , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment StringBuilder : ĠStringBuilder ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmanager : ĠPsi Manager ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( fragment StringBuilder Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchar List Fragment Ġ= ĠFactory . create Single Leaf Element ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment StringBuilder . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment StringBuilder . length , Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmanager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmerged Nodes . add ( char List Fragment ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUn wrap s Ġ` when ` Ġfrom Ġleft Ġend Ġof Ġno Parent heses Arguments Ġin Ġst ab No Parent heses Signature Ġso Ġthat Ġthe Ġwhen Ġacts Ġas Ġa Ġguard Ġfor Ġthe Ġsignature Ġinstead Ġof Ġa Ġguard Ġon Ġthe Ġlast Ġpositional Ġargument . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ see Ġ[` unwrap _ when ` Ġin Ġ` stab _ expr `]( https :// github . com / elixir - lang / elixir / blob / de 3 9 bb aca 2 7 7 0 0 2 7 9 7 e 5 2 ffb de 6 1 7 ace 0 6 2 3 3 a 2 b / lib / elixir / src / elixir _ parser . y rl . L 2 7 6 - L 2 7 7 ) ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ see Ġ[` unwrap _ when `]( https :// github . com / elixir - lang / elixir / blob / de 3 9 bb aca 2 7 7 0 0 2 7 9 7 e 5 2 ffb de 6 1 7 ace 0 6 2 3 3 a 2 b / lib / elixir / src / elixir _ parser . y rl . L 7 1 6 - L 7 2 2 ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġunwrap When ( quoted Arguments : ĠArray < O tp Er lang Object >): ĠArray < O tp Er lang Object > Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġhttps :// github . com / elixir - lang / elixir / blob / de 3 9 bb aca 2 7 7 0 0 2 7 9 7 e 5 2 ffb de 6 1 7 ace 0 6 2 3 3 a 2 b / lib / elixir / src / elixir _ parser . y rl # L 7 1 7 ĊĠĠĠĠĠĠĠ Ġval Ġlast Ġ= Ġquoted Arguments [ quoted Arguments . size Ġ- Ġ 1 ] ĊĠĠĠĠĠĠĠ Ġ// Ġhttps :// github . com / elixir - lang / elixir / blob / de 3 9 bb aca 2 7 7 0 0 2 7 9 7 e 5 2 ffb de 6 1 7 ace 0 6 2 3 3 a 2 b / lib / elixir / src / elixir _ parser . y rl # L 7 2 0 - L 7 2 1 ĊĠĠĠĠĠĠĠ Ġvar Ġun wrapped Ġ= Ġquoted Arguments ĊĊĠĠĠĠĠĠĠ Ġ// Ġ{ Ġ_, Ġ_, Ġ_} ĊĠĠĠĠĠĠĠ Ġif Ġ( Macro . is Expression ( last )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpression Ġ= Ġlast Ġas ĠO tp Er lang Tuple ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreceiver Ġ= Ġexpression . elementAt ( 0 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ{' when ', Ġ_, Ġ_ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( receiver Ġ== ĠWHEN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoperands Ġ= Ġexpression . elementAt ( 2 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġis _ list ( End ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( operands Ġis ĠO tp Er lang List ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠHave Ġto Ġcheck Ġfor Ġtwo Ġelement Ġso Ġthat Ġunwrap _ when Ġdoesn 't Ġhappen Ġrecursively Ġas Ġthe Ġun wrapped Ġversion Ġof Ġwhen Ġwill Ġhave Ġmore Ġthan Ġ 2 Ġarguments , Ġwhich Ġis Ġonly Ġseen Ġin Ġst ab Signatures . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ[ _, Ġ_ ] Ġ= ĠEnd ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( operands . arity () Ġ== Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġun wrapped Arguments Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Arguments . slice ( 0 Ġuntil Ġquoted Arguments . size Ġ- Ġ 1 ). to Typed Array () Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoperands . elements () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġun wrapped Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Function Call ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceiver , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMacro . metadata ( expression ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* un wrapped Arguments ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġun wrapped ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcompact Digits ( digits List : ĠList < Digits >): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuilt String Ġ= ĠStringBuilder () ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( digits Ġin Ġdigits List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilt String . append ( digits . text ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbuilt String . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġquote In Base ( string : ĠString , Ġbase : ĠInt ): ĠO tp Er lang Object Ġ= ĊĠĠĠĠĠĠĠ ĠBigInteger ( string , Ġbase ). let (:: O tp Er lang Long ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConverts Ġgroup Ġof Ġseparated Ġexpressions Ġinto Ġa Ġblock Ġor Ġreturns Ġthe Ġsingle Ġexpression . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠSee Ġhttps :// github . com / elixir - lang / elixir / blob / de 3 9 bb aca 2 7 7 0 0 2 7 9 7 e 5 2 ffb de 6 1 7 ace 0 6 2 3 3 a 2 b / lib / elixir / src / elixir _ parser . y rl # L 7 2 4 - L 7 2 5 ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġprivate Ġfun Ġto Block ( quoted Children : ĠList < O tp Er lang Object >): ĠO tp Er lang Object Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( quoted Children . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġempty Block () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġbuild Block ( quoted Children , ĠO tp Er lang List ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġblock Function Call ( quoted Children , ĠO tp Er lang List ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġempty Block () Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġo tp Er lang Tuple ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBLOCK , ĠO tp Er lang List (), ĠO tp Er lang List () ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġprivate Ġfun Ġblock Function Call ( quoted Children : ĠList < O tp Er lang Object >, Ġmetadata : ĠO tp Er lang List ): ĠO tp Er lang Tuple Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Function Call ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBLOCK , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* quoted Children . to Typed Array () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠBuilds Ġa Ġblock Ġfor Ġst ab Ġbodies . Ġ ĠUn like Ġ` to Block `, Ġhandles Ġre arr anging Ġunary Ġoperations Ġ` not ` Ġand Ġ` !` Ġand Ġputting ĊĠĠĠĠ Ġ* Ġsol it ary Ġ` un quote _ sp licing ` Ġcalls Ġin Ġblocks . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġquoted Children ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Contract ( pure Ġ= Ġtrue ) ĊĠĠĠ Ġinternal Ġfun Ġbuild Block ( quoted Children : ĠList < O tp Er lang Object >, Ġmetadata : ĠO tp Er lang List ): ĠO tp Er lang Object Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( quoted Children . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> ĠNIL ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġquoted Child Ġ= Ġquoted Children . first () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ@ see Ġhttps :// github . com / elixir - lang / elixir / blob / de 3 9 bb aca 2 7 7 0 0 2 7 9 7 e 5 2 ffb de 6 1 7 ace 0 6 2 3 3 a 2 b / lib / elixir / src / elixir _ parser . y rl # L 5 8 8 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Macro . is Local Call ( quoted Child )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ@ see Ġhttps :// github . com / elixir - lang / elixir / blob / de 3 9 bb aca 2 7 7 0 0 2 7 9 7 e 5 2 ffb de 6 1 7 ace 0 6 2 3 3 a 2 b / lib / elixir / src / elixir _ parser . y rl # L 5 4 7 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ(( quoted Child Ġas ĠO tp Er lang Tuple ). elementAt ( 0 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEX CL AM ATION _ POINT , ĠNOT , ĠUN QUOTE _ SP LIC ING Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠQu ot able Impl . block Function Call ( quoted Children , Ġmetadata ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Child ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquoted Child ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠQu ot able Impl . block Function Call ( quoted Children , Ġmetadata ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ } Ċ