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); }
/** * @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()); }