104bool GenericScriptElement::iterateDirectSubpaths(
const DomItem &self, DirectVisitor visitor)
const
107 for (
auto it = m_children.begin(); it != m_children.end(); ++it) {
109 [&self, &visitor, &it](
auto &&e) {
return wrap(self, visitor, it->first, e); },
112 for (
auto it = m_values.begin(); it != m_values.end(); ++it) {
113 cont &= self.invokeVisitorOnValue(visitor, PathEls::Field(it->first), it->second);
118void GenericScriptElement::updatePathFromOwner(
const Path &p)
120 BaseT::updatePathFromOwner(p);
121 for (
auto it = m_children.begin(); it != m_children.end(); ++it) {
122 std::visit(qOverloadedVisitor{ [&p, &it](ScriptElementVariant &e) {
123 e.base()->updatePathFromOwner(p.withField(it->first));
125 [&p, &it](ScriptList &list) {
126 list.updatePathFromOwner(p.withField(it->first));
132void GenericScriptElement::createFileLocations(
const FileLocations::Tree &base)
134 BaseT::createFileLocations(base);
135 for (
auto it = m_children.begin(); it != m_children.end(); ++it) {
138 [&base](ScriptElementVariant &e) { e.base()->createFileLocations(base); },
139 [&base](ScriptList &list) { list.createFileLocations(base); } },
144bool BlockStatement::iterateDirectSubpaths(
const DomItem &self, DirectVisitor visitor)
const
148 cont &= wrap(self, visitor, Fields::statements, m_statements);
164bool IdentifierExpression::iterateDirectSubpaths(
const DomItem &self, DirectVisitor visitor)
const
167 cont &= self.invokeVisitorOnValue(visitor, PathEls::Field(Fields::identifier), m_name);
171bool Literal::iterateDirectSubpaths(
const DomItem &self, DirectVisitor visitor)
const
175 [&cont, &visitor, &self](
auto &&e) {
176 cont &= self.invokeVisitorOnValue(visitor, PathEls::Field(Fields::value), e);
182bool IfStatement::iterateDirectSubpaths(
const DomItem &self, DirectVisitor visitor)
const
186 cont &= wrap(self, visitor, Fields::condition, m_condition);
187 cont &= wrap(self, visitor, Fields::consequence, m_consequence);
188 cont &= wrap(self, visitor, Fields::alternative, m_alternative);
192void IfStatement::updatePathFromOwner(
const Path &p)
194 BaseT::updatePathFromOwner(p);
195 if (
auto ptr = m_condition.base())
196 ptr->updatePathFromOwner(p.withField(Fields::condition));
197 if (
auto ptr = m_consequence.base())
198 ptr->updatePathFromOwner(p.withField(Fields::consequence));
199 if (
auto ptr = m_alternative.base())
200 ptr->updatePathFromOwner(p.withField(Fields::alternative));
203void IfStatement::createFileLocations(
const FileLocations::Tree &base)
205 BaseT::createFileLocations(base);
206 if (
auto ptr = m_condition.base())
207 ptr->createFileLocations(base);
208 if (
auto ptr = m_consequence.base())
209 ptr->createFileLocations(base);
210 if (
auto ptr = m_alternative.base())
211 ptr->createFileLocations(base);
214bool ForStatement::iterateDirectSubpaths(
const DomItem &self, DirectVisitor visitor)
const
217 cont &= wrap(self, visitor, Fields::initializer, m_initializer);
218 cont &= wrap(self, visitor, Fields::declarations, m_declarations);
219 cont &= wrap(self, visitor, Fields::condition, m_condition);
220 cont &= wrap(self, visitor, Fields::expression, m_expression);
221 cont &= wrap(self, visitor, Fields::body, m_body);
225void ForStatement::updatePathFromOwner(
const Path &p)
227 BaseT::updatePathFromOwner(p);
228 if (
auto ptr = m_initializer.base())
229 ptr->updatePathFromOwner(p.withField(Fields::initializer));
230 if (
auto ptr = m_declarations.base())
231 ptr->updatePathFromOwner(p.withField(Fields::declarations));
232 if (
auto ptr = m_condition.base())
233 ptr->updatePathFromOwner(p.withField(Fields::condition));
234 if (
auto ptr = m_expression.base())
235 ptr->updatePathFromOwner(p.withField(Fields::expression));
236 if (
auto ptr = m_body.base())
237 ptr->updatePathFromOwner(p.withField(Fields::body));
240void ForStatement::createFileLocations(
const FileLocations::Tree &base)
242 BaseT::createFileLocations(base);
243 if (
auto ptr = m_initializer.base())
244 ptr->createFileLocations(base);
245 if (
auto ptr = m_declarations.base())
246 ptr->createFileLocations(base);
247 if (
auto ptr = m_condition.base())
248 ptr->createFileLocations(base);
249 if (
auto ptr = m_expression.base())
250 ptr->createFileLocations(base);
251 if (
auto ptr = m_body.base())
252 ptr->createFileLocations(base);
255bool BinaryExpression::iterateDirectSubpaths(
const DomItem &self, DirectVisitor visitor)
const
258 cont &= wrap(self, visitor, Fields::left, m_left);
259 cont &= self.invokeVisitorOnValue(visitor, PathEls::Field(Fields::operation), m_operator);
260 cont &= wrap(self, visitor, Fields::right, m_right);
273void BinaryExpression::createFileLocations(
const FileLocations::Tree &base)
275 BaseT::createFileLocations(base);
276 if (
auto ptr = m_left.base())
277 ptr->createFileLocations(base);
278 if (
auto ptr = m_right.base())
279 ptr->createFileLocations(base);
282bool VariableDeclarationEntry::iterateDirectSubpaths(
const DomItem &self, DirectVisitor visitor)
const
285 cont &= self.invokeVisitorOnValue(visitor, PathEls::Field(Fields::scopeType), m_scopeType);
286 cont &= wrap(self, visitor, Fields::identifier, m_identifier);
287 cont &= wrap(self, visitor, Fields::initializer, m_initializer);
291void VariableDeclarationEntry::updatePathFromOwner(
const Path &p)
293 BaseT::updatePathFromOwner(p);
294 if (
auto ptr = m_identifier.base())
295 ptr->updatePathFromOwner(p.withField(Fields::identifier));
296 if (
auto ptr = m_initializer.base())
297 ptr->updatePathFromOwner(p.withField(Fields::initializer));
300void VariableDeclarationEntry::createFileLocations(
const FileLocations::Tree &base)
302 BaseT::createFileLocations(base);
303 if (
auto ptr = m_identifier.base())
304 ptr->createFileLocations(base);
305 if (
auto ptr = m_initializer.base())
306 ptr->createFileLocations(base);
309bool VariableDeclaration::iterateDirectSubpaths(
const DomItem &self, DirectVisitor visitor)
const
312 cont &= wrap(self, visitor, Fields::declarations, m_declarations);
328bool ReturnStatement::iterateDirectSubpaths(
const DomItem &self, DirectVisitor visitor)
const
331 cont &= wrap(self, visitor, Fields::expression, m_expression);
342void ReturnStatement::createFileLocations(
const FileLocations::Tree &base)
344 BaseT::createFileLocations(base);
345 if (
auto ptr = m_expression.base())
346 ptr->createFileLocations(base);
349void ScriptList::replaceKindForGenericChildren(DomType oldType, DomType newType)
351 for (
auto &it : m_list) {
352 if (
auto current = it.data()) {
353 if (
auto genericElement =
354 std::get_if<std::shared_ptr<ScriptElements::GenericScriptElement>>(
356 if ((*genericElement)->kind() == oldType)
357 (*genericElement)->setKind(newType);