aboutsummaryrefslogtreecommitdiff
path: root/var.h
diff options
context:
space:
mode:
Diffstat (limited to 'var.h')
-rw-r--r--var.h39
1 files changed, 39 insertions, 0 deletions
diff --git a/var.h b/var.h
index fadd155..ee6b32c 100644
--- a/var.h
+++ b/var.h
@@ -19,6 +19,7 @@
#include <string>
#include <unordered_map>
+#include "ast.h"
#include "string_piece.h"
#include "value.h"
@@ -118,6 +119,44 @@ class UndefinedVar : public Var {
extern UndefinedVar* kUndefined;
+class RuleVar : public Var {
+ public:
+ RuleVar(Var* v, AssignOp op)
+ : v_(v), op_(op) {}
+ virtual ~RuleVar() {
+ delete v_;
+ }
+
+ virtual const char* Flavor() const {
+ return v_->Flavor();
+ }
+ virtual const char* Origin() const {
+ return v_->Origin();
+ }
+ virtual bool IsDefined() const {
+ return v_->IsDefined();
+ }
+ virtual void Eval(Evaluator* ev, string* s) const {
+ v_->Eval(ev, s);
+ }
+ virtual void AppendVar(Evaluator* ev, Value* v) {
+ v_->AppendVar(ev, v);
+ }
+ virtual StringPiece String() const override {
+ return v_->String();
+ }
+ virtual string DebugString() const override {
+ return v_->DebugString();
+ }
+
+ Var* v() const { return v_; }
+ AssignOp op() const { return op_; }
+
+ private:
+ Var* v_;
+ AssignOp op_;
+};
+
class Vars : public unordered_map<StringPiece, Var*> {
public:
~Vars();