diff --git a/language/interpreter.cc b/language/interpreter.cc index cc8f522..4e7f60d 100755 --- a/language/interpreter.cc +++ b/language/interpreter.cc @@ -103,13 +103,13 @@ private: if (fv.params.size() <= args.size()) { auto callEnv = make_shared(); - callEnv->declare("self", f, false); + callEnv->initialize("self", f, false); for (auto i = 0u; i < fv.params.size(); i++) { auto param = fv.params[i]; auto arg = args[i]; auto val = eval(*arg, env); - callEnv->declare(param.name, val, param.mut); + callEnv->initialize(param.name, val, param.mut); } return fv.eval(callEnv); @@ -167,7 +167,7 @@ private: if (env->has(var)) { env->assign(var, val); } else { - env->declare(var, val, mut == "mut"); + env->initialize(var, val, mut == "mut"); } return val; }; diff --git a/language/interpreter.hpp b/language/interpreter.hpp index cb2b3de..defceb8 100755 --- a/language/interpreter.hpp +++ b/language/interpreter.hpp @@ -217,15 +217,17 @@ struct Environment outer_->assign(s, val); return; } + // NOTREACHED + throw std::logic_error("invalid internal condition."); } - void declare(const std::string& s, const Value& val, bool mut) { + void initialize(const std::string& s, const Value& val, bool mut) { assert(!has(s)); dic_[s] = Symbol{val, mut}; } void setup_built_in_functions() { - declare( + initialize( "pp", Value(Value::FunctionValue { { {"arg", true} },