From df9c37ef18c0ec7a00b9e25e24b8b5bd25b140f8 Mon Sep 17 00:00:00 2001 From: Bowen Fu Date: Fri, 17 Dec 2021 20:28:43 +0800 Subject: [PATCH] Clean up. --- include/lisp/parser.h | 52 +++++-------------------------------------- sample/loop.cpp | 4 +--- 2 files changed, 6 insertions(+), 50 deletions(-) diff --git a/include/lisp/parser.h b/include/lisp/parser.h index b1006c7..83f91cd 100644 --- a/include/lisp/parser.h +++ b/include/lisp/parser.h @@ -369,28 +369,6 @@ inline auto tryMacroCall(ExprPtr const& expr, std::shared_ptr const& env) - return expr; } -inline auto parseAndEvalMacroCall(ExprPtr const& expr, std::shared_ptr const& env) -> ExprPtr -{ - auto cons = dynamic_cast(expr.get()); - if (!cons) - { - return expr; - } - auto car = cons->car(); - auto cdr = cons->cdr(); - auto carStr = asString(car); - if (!carStr.has_value()) - { - // do nothing - return expr; - } - if (env->variableDefined(carStr.value())) - { - return parse(expr)->eval(env); - } - return expr; -} - inline auto parse(ExprPtr const& expr) -> ExprPtr { if (auto e = tryCons(expr)) @@ -466,34 +444,14 @@ inline auto parseAsQuoted(ExprPtr const& expr, std::optional quasiquote return consToQuoted(expr, quasiquoteLevel); } -template -void forEach(ExprPtr const& expr, Func func) -{ - if (auto e = dynamic_cast(expr.get())) - { - forEach(e->car(), func); - forEach(e->cdr(), func); - } - func(expr); -} - -inline auto defineMacros(ExprPtr const& expr, std::shared_ptr const& env) -> ExprPtr -{ - auto func = [&env](auto const& expr) - { - if (auto macroDefinition = parseMacroDefinition(expr)) - { - macroDefinition->eval(env); - return nil(); - } - return expr; - }; - return transform(expr, func); -} - // FIXME inline auto expandMacros(ExprPtr const& expr, std::shared_ptr const& env) -> ExprPtr { + if (auto macroDefinition = parseMacroDefinition(expr)) + { + macroDefinition->eval(env); + return nil(); + } if (auto e = tryMacroCall(expr, env)) { return e; diff --git a/sample/loop.cpp b/sample/loop.cpp index 61cdbb7..4cd354b 100644 --- a/sample/loop.cpp +++ b/sample/loop.cpp @@ -147,13 +147,11 @@ auto eval(std::string const& input, std::shared_ptr const& env) Lexer lex(input); MetaParser p(lex); std::string result; - // auto macroEnv = std::make_shared(); auto macroEnv = env; do { auto me = p.sexpr(); - auto de = defineMacros(me, macroEnv); - auto ee = expandMacros(de, macroEnv); + auto ee = expandMacros(me, macroEnv); #if DEBUG std::cout << "ee ## " << ee->toString() << std::endl; #endif // DEBUG