异常信息附加引用环信息
This commit is contained in:
parent
44c93754dd
commit
e84bb426f5
|
@ -31,6 +31,25 @@ QString FragmentExistsCheck::name() const {
|
|||
return u8"FragmentExistsCheck";
|
||||
}
|
||||
|
||||
QList<std::shared_ptr<FragmentGraphHelper>> example_novel::FragmentGraphCheck::refers_cycle_check(
|
||||
std::shared_ptr<FragmentGraphHelper> item, QList<std::shared_ptr<FragmentGraphHelper>> prevs) const {
|
||||
if (prevs.contains(item)) {
|
||||
return prevs << item;
|
||||
}
|
||||
|
||||
auto next_list = item->nextList();
|
||||
if (next_list.size()) {
|
||||
prevs << item;
|
||||
for (auto next : next_list) {
|
||||
auto ref_link = refers_cycle_check(next, prevs);
|
||||
if (ref_link.size())
|
||||
return ref_link;
|
||||
}
|
||||
}
|
||||
|
||||
return QList<std::shared_ptr<FragmentGraphHelper>>();
|
||||
}
|
||||
|
||||
void FragmentGraphCheck::setElement(std::shared_ptr<FragmentGraphHelper> inst)
|
||||
{
|
||||
elements_store[inst->nodePeer()->signature()] = inst;
|
||||
|
@ -165,8 +184,19 @@ void FragmentGraphCheck::validCheck(std::shared_ptr<const ast_gen::ElementAccess
|
|||
}
|
||||
|
||||
// 理论上不应该有残余
|
||||
if (elements_store.size())
|
||||
throw new lib_parse::CheckException(u8"情节图存在环形结构");
|
||||
if (elements_store.size()) {
|
||||
for (auto node : elements_store.values()) {
|
||||
auto cycle_link = refers_cycle_check(node);
|
||||
|
||||
QString error_msg = u8"Parse[0x0006]Çé½Úͼ´æÔÚ»·Ðνṹ£º\n";
|
||||
for (auto n : cycle_link) {
|
||||
error_msg += QString(u8"%1->").arg(n->nodePeer()->signature());
|
||||
}
|
||||
|
||||
if (cycle_link.size())
|
||||
throw new lib_parse::CheckException(error_msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
QString example_novel::FragmentGraphCheck::name() const {
|
||||
|
|
|
@ -20,6 +20,9 @@ namespace example_novel {
|
|||
private:
|
||||
QHash<QString, std::shared_ptr<FragmentGraphHelper>> elements_store;
|
||||
|
||||
QList<std::shared_ptr<FragmentGraphHelper>> refers_cycle_check(
|
||||
std::shared_ptr<FragmentGraphHelper> item, QList<std::shared_ptr<FragmentGraphHelper>> prevs = QList<std::shared_ptr<FragmentGraphHelper>>()) const;
|
||||
|
||||
public:
|
||||
void setElement(std::shared_ptr<FragmentGraphHelper> inst);
|
||||
std::shared_ptr<FragmentGraphHelper> getElement(const QString &signature) const;
|
||||
|
|
Loading…
Reference in New Issue