no need to store substring within rule_inst

master
Daniel Kolesa 2018-04-23 00:09:47 +02:00
parent 4c4c06228e
commit 4fd81d83ef
1 changed files with 4 additions and 4 deletions

View File

@ -287,7 +287,6 @@ struct make {
private: private:
struct rule_inst { struct rule_inst {
std::vector<std::string> deps; std::vector<std::string> deps;
string_range sub;
make_rule *rule; make_rule *rule;
}; };
@ -405,6 +404,7 @@ private:
} }
rule_inst *frule = nullptr; rule_inst *frule = nullptr;
bool exact = false; bool exact = false;
string_range prev_sub{};
for (auto &rule: p_rules) { for (auto &rule: p_rules) {
if (target == string_range{rule.target()}) { if (target == string_range{rule.target()}) {
rlist.emplace_back(); rlist.emplace_back();
@ -436,7 +436,6 @@ private:
rlist.emplace_back(); rlist.emplace_back();
rule_inst &sr = rlist.back(); rule_inst &sr = rlist.back();
sr.rule = &rule; sr.rule = &rule;
sr.sub = sub;
sr.deps.reserve(rule.depends().size()); sr.deps.reserve(rule.depends().size());
for (auto &d: rule.depends()) { for (auto &d: rule.depends()) {
string_range dp = d; string_range dp = d;
@ -452,15 +451,16 @@ private:
} }
} }
if (frule) { if (frule) {
if (sub.size() == frule->sub.size()) { if (sub.size() == prev_sub.size()) {
throw make_error{"redefinition of rule '%s'", target}; throw make_error{"redefinition of rule '%s'", target};
} }
if (sub.size() < frule->sub.size()) { if (sub.size() < prev_sub.size()) {
*frule = sr; *frule = sr;
rlist.pop_back(); rlist.pop_back();
} }
} else { } else {
frule = &sr; frule = &sr;
prev_sub = sub;
} }
} }
} }