|
|
@ -62,20 +62,17 @@ ValuePtr Eval::evalImpl() |
|
|
|
return evalAst(ast, env); |
|
|
|
return evalAst(ast, env); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
auto list = std::static_pointer_cast<List>(ast); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (list->empty()) { |
|
|
|
|
|
|
|
return ast; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ast = macroExpand(ast, env); |
|
|
|
ast = macroExpand(ast, env); |
|
|
|
|
|
|
|
|
|
|
|
if (!is<List>(ast.get())) { |
|
|
|
if (!is<List>(ast.get())) { |
|
|
|
return evalAst(ast, env); |
|
|
|
return evalAst(ast, env); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// Macro-expand modifies `ast', so get the new list
|
|
|
|
auto list = std::static_pointer_cast<List>(ast); |
|
|
|
list = std::static_pointer_cast<List>(ast); |
|
|
|
|
|
|
|
|
|
|
|
if (list->empty()) { |
|
|
|
|
|
|
|
return ast; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// Special forms
|
|
|
|
// Special forms
|
|
|
|
auto nodes = list->nodes(); |
|
|
|
auto nodes = list->nodes(); |
|
|
|