aboutsummaryrefslogtreecommitdiff
path: root/exec.cc
diff options
context:
space:
mode:
authorShinichiro Hamaji <shinichiro.hamaji@gmail.com>2015-06-17 06:14:20 +0900
committerShinichiro Hamaji <shinichiro.hamaji@gmail.com>2015-06-18 11:25:44 +0900
commit133bf671988ededdf6bf7926323e8a6cfa83624a (patch)
treeadcdc37a878c1a26aea62a5b444a2f49263e0307 /exec.cc
parent810fd03ef36afedeef832c5e78171b9e26a97e00 (diff)
downloadkati-133bf671988ededdf6bf7926323e8a6cfa83624a.tar.gz
[C++] Split lines in CreateRunners
Diffstat (limited to 'exec.cc')
-rw-r--r--exec.cc15
1 files changed, 14 insertions, 1 deletions
diff --git a/exec.cc b/exec.cc
index 82f49b0..91d996d 100644
--- a/exec.cc
+++ b/exec.cc
@@ -64,10 +64,23 @@ class Executor {
void CreateRunners(DepNode* n, vector<Runner*>* runners) {
unique_ptr<Evaluator> ev(new Evaluator(vars_));
for (Value* v : n->cmds) {
+ shared_ptr<string> cmd = v->Eval(ev.get());
+ while (true) {
+ size_t index = cmd->find('\n');
+ if (index == string::npos)
+ break;
+
+ Runner* runner = new Runner;
+ runner->output = n->output;
+ runner->cmd = make_shared<string>(cmd->substr(0, index));
+ runners->push_back(runner);
+ cmd = make_shared<string>(cmd->substr(index + 1));
+ }
Runner* runner = new Runner;
runner->output = n->output;
- runner->cmd = v->Eval(ev.get());
+ runner->cmd = cmd;
runners->push_back(runner);
+ continue;
}
}