#ifndef EVAL_H_ #define EVAL_H_ #include #include #include "loc.h" #include "string_piece.h" using namespace std; class AssignAST; class CommandAST; class Makefile; class Rule; class RuleAST; class Var; class Vars; struct EvalResult { ~EvalResult(); vector rules; Vars* vars; unordered_map rule_vars; // TODO: read_mks unordered_map exports; }; class Evaluator { public: Evaluator(const Vars* vars); ~Evaluator(); void EvalAssign(const AssignAST* ast); void EvalRule(const RuleAST* ast); void EvalCommand(const CommandAST* ast); Var* LookupVar(StringPiece name); // For target specific variables. Var* LookupVarInCurrentScope(StringPiece name); EvalResult* GetEvalResult(); const Loc& loc() const { return loc_; } #if 0 const vector& rules() const { return rules_; } const Vars* vars() const { return vars_; } const unordered_map& rule_vars() const { return rule_vars_; } #endif void Error(const string& msg); private: const Vars* in_vars_; Vars* vars_; unordered_map rule_vars_; vector rules_; Rule* last_rule_; Loc loc_; }; #endif // EVAL_H_