diff options
-rw-r--r-- | eval.cc | 4 | ||||
-rw-r--r-- | eval.h | 4 | ||||
-rw-r--r-- | func.cc | 14 |
3 files changed, 22 insertions, 0 deletions
@@ -129,3 +129,7 @@ EvalResult* Evaluator::GetEvalResult() { er->rule_vars.swap(rule_vars_); return er; } + +void Evaluator::Error(const string& msg) { + ERROR("%s:%d: %s", loc_.filename, loc_.lineno, msg.c_str()); +} @@ -41,6 +41,8 @@ class Evaluator { EvalResult* GetEvalResult(); + const Loc& loc() const { return loc_; } + #if 0 const vector<Rule*>& rules() const { return rules_; } const Vars* vars() const { return vars_; } @@ -49,6 +51,8 @@ class Evaluator { } #endif + void Error(const string& msg); + private: const Vars* in_vars_; Vars* vars_; @@ -4,6 +4,7 @@ #include <unordered_map> +#include "eval.h" #include "log.h" #include "strutil.h" @@ -15,8 +16,21 @@ void BuiltinInfoFunc(const vector<Value*>& args, Evaluator* ev, string*) { fflush(stdout); } +void BuiltinWarningFunc(const vector<Value*>& args, Evaluator* ev, string*) { + shared_ptr<string> a = args[0]->Eval(ev); + printf("%s:%d: %s\n", ev->loc().filename, ev->loc().lineno, a->c_str()); + fflush(stdout); +} + +void BuiltinErrorFunc(const vector<Value*>& args, Evaluator* ev, string*) { + shared_ptr<string> a = args[0]->Eval(ev); + ev->Error(StringPrintf("*** %s.", a->c_str())); +} + FuncInfo g_func_infos[] = { { "info", &BuiltinInfoFunc, 1 }, + { "warning", &BuiltinWarningFunc, 1 }, + { "error", &BuiltinErrorFunc, 1 }, }; unordered_map<StringPiece, FuncInfo*>* g_func_info_map; |