Exemple #1
0
function expand(Environment $env, $code)
{
    $walker = new Walker();
    $forms = buildForms($code);
    return array_map(function ($form) use($walker, $env) {
        return $walker->expand($env, $form);
    }, $forms);
}
Exemple #2
0
 /**
  * @test
  * @dataProvider provideExpand
  */
 public function expand($expected, $sexpr, array $macros = [])
 {
     $walker = new Walker();
     $env = Environment::standard();
     foreach ($macros as $name => $pair) {
         list($argsSexpr, $bodySexpr) = $pair;
         $macroArgs = $this->parseSexpr($argsSexpr);
         $macroBody = $this->parseSexpr($bodySexpr);
         $env[$name] = new SpecialOp\MacroOp($macroArgs, $macroBody);
     }
     $form = $this->parseSexpr($sexpr);
     $expanded = $walker->expand($env, $form);
     $this->assertEquals($expected, $expanded->getAst());
 }