no need to store substring within rule_inst
parent
4c4c06228e
commit
4fd81d83ef
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue