aboutsummaryrefslogtreecommitdiff
path: root/command.cc
diff options
context:
space:
mode:
authorShinichiro Hamaji <shinichiro.hamaji@gmail.com>2015-06-29 18:38:35 +0900
committerShinichiro Hamaji <shinichiro.hamaji@gmail.com>2015-06-29 20:49:28 +0900
commite7992752dbfe23d0a88312b4279531c39512b9a6 (patch)
treeebbbff517aed82fe2b04d9cbb0903865fc997c44 /command.cc
parent94d7a61c9edd45b6c6b0f19c60e64aeddfdc8e46 (diff)
[C++] Introduce Symbol
Diffstat (limited to 'command.cc')
-rw-r--r--command.cc25
1 files changed, 12 insertions, 13 deletions
diff --git a/command.cc b/command.cc
index 39aa9fc..f696cd5 100644
--- a/command.cc
+++ b/command.cc
@@ -94,33 +94,33 @@ class AutoSuffixFVar : public AutoVar {
};
void AutoAtVar::Eval(Evaluator*, string* s) const {
- AppendString(ce_->current_dep_node()->output, s);
+ *s += ce_->current_dep_node()->output.str();
}
void AutoLessVar::Eval(Evaluator*, string* s) const {
auto& ai = ce_->current_dep_node()->actual_inputs;
if (!ai.empty())
- AppendString(ai[0], s);
+ *s += ai[0].str();
}
void AutoHatVar::Eval(Evaluator*, string* s) const {
unordered_set<StringPiece> seen;
WordWriter ww(s);
- for (StringPiece ai : ce_->current_dep_node()->actual_inputs) {
- if (seen.insert(ai).second)
- ww.Write(ai);
+ for (Symbol ai : ce_->current_dep_node()->actual_inputs) {
+ if (seen.insert(ai.str()).second)
+ ww.Write(ai.str());
}
}
void AutoPlusVar::Eval(Evaluator*, string* s) const {
WordWriter ww(s);
- for (StringPiece ai : ce_->current_dep_node()->actual_inputs) {
- ww.Write(ai);
+ for (Symbol ai : ce_->current_dep_node()->actual_inputs) {
+ ww.Write(ai.str());
}
}
void AutoStarVar::Eval(Evaluator*, string* s) const {
- AppendString(StripExt(ce_->current_dep_node()->output), s);
+ AppendString(StripExt(ce_->current_dep_node()->output.str()), s);
}
void AutoSuffixDVar::Eval(Evaluator* ev, string* s) const {
@@ -163,9 +163,9 @@ CommandEvaluator::CommandEvaluator(Evaluator* ev)
Vars* vars = ev_->mutable_vars();
#define INSERT_AUTO_VAR(name, sym) do { \
Var* v = new name(this, sym); \
- (*vars)[STRING_PIECE(sym)] = v; \
- (*vars)[STRING_PIECE(sym"D")] = new AutoSuffixDVar(this, sym"D", v); \
- (*vars)[STRING_PIECE(sym"F")] = new AutoSuffixFVar(this, sym"F", v); \
+ (*vars)[Intern(sym)] = v; \
+ (*vars)[Intern(sym"D")] = new AutoSuffixDVar(this, sym"D", v); \
+ (*vars)[Intern(sym"F")] = new AutoSuffixFVar(this, sym"F", v); \
} while (0)
INSERT_AUTO_VAR(AutoAtVar, "@");
INSERT_AUTO_VAR(AutoLessVar, "<");
@@ -198,8 +198,7 @@ void CommandEvaluator::Eval(DepNode* n, vector<Command*>* commands) {
ParseCommandPrefixes(&cmd, &echo, &ignore_error);
if (!cmd.empty()) {
- Command* command = new Command;
- command->output = n->output;
+ Command* command = new Command(n->output);
command->cmd = make_shared<string>(cmd.as_string());
command->echo = echo;
command->ignore_error = ignore_error;