package Ġio . github . aed ans . m Ċ Ċ import Ġio . github . aed ans . k ons . Nil Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠA ed an ĠSmith . Ċ Ġ*/ Ċ Ċ class ĠMacro ( function : Ġ( Any ) Ġ-> ĠAny ) Ġ: Ġ( Expression ) Ġ-> ĠExpression Ġby Ġfunction Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠtoString () Ġ= Ġ" m . Macro " Ċ } Ċ Ċ fun ĠIterator < Expression >. expand Macros ( env : ĠRuntime Environment ) Ġ= Ġas Sequence () ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . expand ( env ) Ġ} ĊĠĠĠĠĠĠĠ Ġ. iterator () Ċ Ċ fun ĠExpression . expand ( env : ĠRuntime Environment ): ĠExpression Ġ= Ġtake If Instance < S Expression >() ĊĠĠĠĠĠĠĠ Ġ? . map Ġ{ Ġit . expand ( env ) Ġ} ĊĠĠĠĠĠĠĠ Ġ? . to Cons List () ĊĠĠĠĠĠĠĠ Ġ? . take If Ġ{ Ġit Ġ!== ĠNil Ġ} ĊĠĠĠĠĠĠĠ Ġ? . let Ġ{ Ġexpr Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpr [ 0 ]. take If Instance < Identifier Expression >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ Ġenv . getVar ( it . name ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . take If Instance < Macro >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ Ġmacro Ġ-> Ġmacro ( expr . unsafe C dr ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . expand ( env ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġexpr ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ?: Ġthis Ċ