Value Filter::evaluate() const { Value result = m_expression->evaluate(); NodeSet& nodes = result.modifiableNodeSet(); nodes.sort(); EvaluationContext& evaluationContext = Expression::evaluationContext(); for (unsigned i = 0; i < m_predicates.size(); i++) { NodeSet newNodes; evaluationContext.size = nodes.size(); evaluationContext.position = 0; for (unsigned j = 0; j < nodes.size(); j++) { Node* node = nodes[j]; evaluationContext.node = node; ++evaluationContext.position; if (evaluatePredicate(*m_predicates[i])) newNodes.append(node); } nodes = WTF::move(newNodes); } return result; }
Value Filter::evaluate() const { Value result = m_expression->evaluate(); NodeSet& nodes = result.modifiableNodeSet(); nodes.sort(); EvaluationContext& evaluationContext = Expression::evaluationContext(); for (auto& predicate : m_predicates) { NodeSet newNodes; evaluationContext.size = nodes.size(); evaluationContext.position = 0; for (auto& node : nodes) { evaluationContext.node = node; ++evaluationContext.position; if (evaluatePredicate(*predicate)) newNodes.append(node.copyRef()); } nodes = WTFMove(newNodes); } return result; }
void EvaluateNamespaceStaticAsserts(Context& context, const AST::Node<AST::NamespaceData>& astNamespaceDataNode) { for (const auto& astStaticAssertNode: astNamespaceDataNode->staticAsserts) { const auto& astPredicateNode = astStaticAssertNode->expression(); const auto astPredicate = ConvertPredicate(context, astPredicateNode); auto evaluateResult = evaluatePredicate(context, astPredicate, AST::TemplateVarMap()); if (evaluateResult.failed()) { context.issueDiag(StaticAssertPredicateIsFalseDiag(), astPredicateNode.location(), std::move(evaluateResult)); } } for (const auto& astNamespaceNode: astNamespaceDataNode->namespaces) { auto& astChildNamespace = astNamespaceNode->nameSpace(); PushScopeElement pushScopeElement(context.scopeStack(), ScopeElement::Namespace(astChildNamespace)); EvaluateNamespaceStaticAsserts(context, astNamespaceNode->data()); } }