aboutsummaryrefslogtreecommitdiff
path: root/var.cc
diff options
context:
space:
mode:
authorShinichiro Hamaji <shinichiro.hamaji@gmail.com>2015-06-15 19:53:36 +0900
committerShinichiro Hamaji <shinichiro.hamaji@gmail.com>2015-06-18 11:25:42 +0900
commit4c469b36fb8cf2240f8b9f41448dc6f9e1d3df55 (patch)
tree7544348c6b8fa20b8c0600bae28225f18b14b629 /var.cc
parent776ca3085c44e6570813270df75278849c37d400 (diff)
downloadkati-4c469b36fb8cf2240f8b9f41448dc6f9e1d3df55.tar.gz
[C++] Implementing +=
Diffstat (limited to 'var.cc')
-rw-r--r--var.cc16
1 files changed, 16 insertions, 0 deletions
diff --git a/var.cc b/var.cc
index 9bac8a2..ee708f4 100644
--- a/var.cc
+++ b/var.cc
@@ -1,5 +1,6 @@
#include "var.h"
+#include "log.h"
#include "value.h"
UndefinedVar kUndefinedBuf;
@@ -11,6 +12,10 @@ Var::Var() {
Var::~Var() {
}
+void Var::AppendVar(Evaluator*, Value*) {
+ CHECK(false);
+}
+
SimpleVar::SimpleVar(shared_ptr<string> v, const char* origin)
: v_(v), origin_(origin) {
}
@@ -19,6 +24,13 @@ void SimpleVar::Eval(Evaluator*, string* s) const {
*s += *v_;
}
+void SimpleVar::AppendVar(Evaluator* ev, Value* v) {
+ shared_ptr<string> s = make_shared<string>(*v_);
+ s->push_back(' ');
+ v->Eval(ev, s.get());
+ v_ = s;
+}
+
string SimpleVar::DebugString() const {
return *v_;
}
@@ -31,6 +43,10 @@ void RecursiveVar::Eval(Evaluator* ev, string* s) const {
v_->Eval(ev, s);
}
+void RecursiveVar::AppendVar(Evaluator*, Value* v) {
+ v_ = NewExpr3(v_, NewLiteral(" "), v);
+}
+
string RecursiveVar::DebugString() const {
return v_->DebugString();
}