Skip to content

Commit a98a829

Browse files
authored
Clean up. (#20)
Co-authored-by: Bowen Fu <missing>
1 parent 018475b commit a98a829

File tree

2 files changed

+6
-50
lines changed

2 files changed

+6
-50
lines changed

include/lisp/parser.h

Lines changed: 5 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -369,28 +369,6 @@ inline auto tryMacroCall(ExprPtr const& expr, std::shared_ptr<Env> const& env) -
369369
return expr;
370370
}
371371

372-
inline auto parseAndEvalMacroCall(ExprPtr const& expr, std::shared_ptr<Env> const& env) -> ExprPtr
373-
{
374-
auto cons = dynamic_cast<Cons*>(expr.get());
375-
if (!cons)
376-
{
377-
return expr;
378-
}
379-
auto car = cons->car();
380-
auto cdr = cons->cdr();
381-
auto carStr = asString(car);
382-
if (!carStr.has_value())
383-
{
384-
// do nothing
385-
return expr;
386-
}
387-
if (env->variableDefined(carStr.value()))
388-
{
389-
return parse(expr)->eval(env);
390-
}
391-
return expr;
392-
}
393-
394372
inline auto parse(ExprPtr const& expr) -> ExprPtr
395373
{
396374
if (auto e = tryCons(expr))
@@ -466,34 +444,14 @@ inline auto parseAsQuoted(ExprPtr const& expr, std::optional<int32_t> quasiquote
466444
return consToQuoted(expr, quasiquoteLevel);
467445
}
468446

469-
template <typename Func>
470-
void forEach(ExprPtr const& expr, Func func)
471-
{
472-
if (auto e = dynamic_cast<Cons const*>(expr.get()))
473-
{
474-
forEach(e->car(), func);
475-
forEach(e->cdr(), func);
476-
}
477-
func(expr);
478-
}
479-
480-
inline auto defineMacros(ExprPtr const& expr, std::shared_ptr<Env> const& env) -> ExprPtr
481-
{
482-
auto func = [&env](auto const& expr)
483-
{
484-
if (auto macroDefinition = parseMacroDefinition(expr))
485-
{
486-
macroDefinition->eval(env);
487-
return nil();
488-
}
489-
return expr;
490-
};
491-
return transform(expr, func);
492-
}
493-
494447
// FIXME
495448
inline auto expandMacros(ExprPtr const& expr, std::shared_ptr<Env> const& env) -> ExprPtr
496449
{
450+
if (auto macroDefinition = parseMacroDefinition(expr))
451+
{
452+
macroDefinition->eval(env);
453+
return nil();
454+
}
497455
if (auto e = tryMacroCall(expr, env))
498456
{
499457
return e;

sample/loop.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -147,13 +147,11 @@ auto eval(std::string const& input, std::shared_ptr<Env> const& env)
147147
Lexer lex(input);
148148
MetaParser p(lex);
149149
std::string result;
150-
// auto macroEnv = std::make_shared<Env>();
151150
auto macroEnv = env;
152151
do
153152
{
154153
auto me = p.sexpr();
155-
auto de = defineMacros(me, macroEnv);
156-
auto ee = expandMacros(de, macroEnv);
154+
auto ee = expandMacros(me, macroEnv);
157155
#if DEBUG
158156
std::cout << "ee ## " << ee->toString() << std::endl;
159157
#endif // DEBUG

0 commit comments

Comments
 (0)