diff --git a/src/interpreter.cc b/src/interpreter.cc index 8b93d3e..c822f55 100644 --- a/src/interpreter.cc +++ b/src/interpreter.cc @@ -71,11 +71,12 @@ Result Interpreter::eval(Ast &&ast) case Ast::Type::Literal: switch (ast.token.type) { case Token::Type::Symbol: - { + if (ast.token.source != "nil") { auto const value = env().find(std::string(ast.token.source)); assert(value, "Missing variable error is not implemented yet"); return *value; } + return Value{}; default: return Value::from(ast.token); diff --git a/src/tests/interpreter.cc b/src/tests/interpreter.cc index 8f93e59..9576223 100644 --- a/src/tests/interpreter.cc +++ b/src/tests/interpreter.cc @@ -40,7 +40,7 @@ suite intepreter_test = [] { should("evaluate literals") = [] { evaluates_to(Value{}, "nil"); evaluates_to(Value::number(Number(10)), "10"); - evaluates_to(Value::symbol("notexistingsymbol"), "notexistingsymbol"); + // evaluates_to(Value::symbol("notexistingsymbol"), "notexistingsymbol"); }; should("evaluate arithmetic") = [] { @@ -52,7 +52,7 @@ suite intepreter_test = [] { should("call builtin functions") = [] { evaluates_to(Value::symbol("nil"), "typeof nil"); - evaluates_to(Value::symbol("symbol"), "typeof foo"); + // evaluates_to(Value::symbol("symbol"), "typeof foo"); evaluates_to(Value::symbol("number"), "typeof 100"); produces_output("say 5", "5\n");