aboutsummaryrefslogtreecommitdiffstats
path: root/ast.cc
diff options
context:
space:
mode:
authorShinichiro Hamaji <shinichiro.hamaji@gmail.com>2015-06-17 15:33:11 +0900
committerShinichiro Hamaji <shinichiro.hamaji@gmail.com>2015-06-18 11:25:44 +0900
commit7e256dfc39efc5f1614686a85fb5c9da6480abb9 (patch)
treeeb30790d43ac6081d9332ac0dfe92ce5960082e5 /ast.cc
parent32750621508da5e68f53bf14f944ad524627eb50 (diff)
downloadplatform_build_kati-7e256dfc39efc5f1614686a85fb5c9da6480abb9.tar.gz
platform_build_kati-7e256dfc39efc5f1614686a85fb5c9da6480abb9.tar.bz2
platform_build_kati-7e256dfc39efc5f1614686a85fb5c9da6480abb9.zip
[C++] Implement ifdef
Diffstat (limited to 'ast.cc')
-rw-r--r--ast.cc24
1 files changed, 24 insertions, 0 deletions
diff --git a/ast.cc b/ast.cc
index 79cea85..31a6ef4 100644
--- a/ast.cc
+++ b/ast.cc
@@ -41,6 +41,21 @@ string CommandAST::DebugString() const {
expr->DebugString().c_str(), LOCF(loc()));
}
+string IfAST::DebugString() const {
+ const char* opstr = "???";
+ switch (op) {
+ case CondOp::IFEQ: opstr = "ifeq"; break;
+ case CondOp::IFNEQ: opstr = "ifneq"; break;
+ case CondOp::IFDEF: opstr = "ifdef"; break;
+ case CondOp::IFNDEF: opstr = "ifndef"; break;
+ }
+ return StringPrintf("IfAST(op=%s, lhs=%s, rhs=%s loc=%s:%d)",
+ opstr,
+ lhs->DebugString().c_str(),
+ rhs->DebugString().c_str(),
+ LOCF(loc()));
+}
+
string IncludeAST::DebugString() const {
return StringPrintf("IncludeAST(%s, loc=%s:%d)",
expr->DebugString().c_str(), LOCF(loc()));
@@ -72,6 +87,15 @@ void CommandAST::Eval(Evaluator* ev) const {
ev->EvalCommand(this);
}
+IfAST::~IfAST() {
+ delete lhs;
+ delete rhs;
+}
+
+void IfAST::Eval(Evaluator* ev) const {
+ ev->EvalIf(this);
+}
+
IncludeAST::~IncludeAST() {
delete expr;
}