26 using IndexType = std::vector<QV4::CompiledData::InlineComponent>::size_type;
27 using IndexField = quint32_le_bitfield_member<0, 30, IndexType>;
28 using TemporaryMarkField = quint32_le_bitfield_member<30, 1>;
29 using PermanentMarkField = quint32_le_bitfield_member<31, 1>;
30 quint32_le_bitfield_union<IndexField, TemporaryMarkField, PermanentMarkField> m_data;
47 m_data.set<TemporaryMarkField>(0);
48 m_data.set<PermanentMarkField>(1);
53 m_data.set<TemporaryMarkField>(1);
70 const std::vector<InlineComponent> &allICs)
72 using CompiledObject =
typename ObjectContainer::CompiledObject;
76 for (
typename std::vector<InlineComponent>::size_type
i = 0;
i < allICs.size(); ++
i) {
77 const auto& ic = allICs[
i];
78 const CompiledObject *
obj = objectContainer->objectAt(ic.objectIndex);
82 const auto targetType = targetTypeRef->type();
83 if (targetType.isInlineComponentType()
86 return objectContainer->stringAt(icSearched.nameIndex)
87 == targetType.elementName();
91 adjacencyList[std::distance(allICs.cbegin(), icIt)].push_back(&
target);
95 if (
obj->inheritedTypeNameIndex != 0) {
97 createEdgeFromTypeRef(parentTypeRef);
100 auto referencedInICObjectIndex = ic.objectIndex + 1;
101 while (
int(referencedInICObjectIndex) < objectContainer->objectCount()) {
102 auto potentiallyReferencedInICObject = objectContainer->objectAt(referencedInICObjectIndex);
104 = !potentiallyReferencedInICObject->hasFlag(
106 && potentiallyReferencedInICObject->hasFlag(
110 createEdgeFromTypeRef(objectContainer->resolvedType(potentiallyReferencedInICObject->inheritedTypeNameIndex));
111 ++referencedInICObjectIndex;
140 nodesSorted.reserve(nodes.size());
143 auto currentNodeIt = std::find_if(nodes.begin(), nodes.end(), [](
const Node& node) {
144 return !node.hasPermanentMark();
148 while (currentNodeIt != nodes.end() && !hasCycle) {
149 Node& currentNode = *currentNodeIt;
150 topoVisit(¤tNode, adjacencyList, hasCycle, nodesSorted);
151 currentNodeIt = std::find_if(nodes.begin(), nodes.end(), [](
const Node& node) {
152 return !node.hasPermanentMark();