Expression::Ptr CallTemplate::typeCheck(const StaticContext::Ptr &context, const SequenceType::Ptr &reqType) { /* Check XTSE0680, that every @c xsl:with-param has a corresponding @c * xsl:param declaration. */ { const WithParam::Hash::const_iterator end(m_withParams.constEnd()); for(WithParam::Hash::const_iterator it(m_withParams.constBegin()); it != end; ++it) { if(!VariableDeclaration::contains(m_template->templateParameters, it.value()->name())) Template::raiseXTSE0680(context, it.value()->name(), this); } } const Expression::Ptr me(TemplateInvoker::typeCheck(context, reqType)); const VariableDeclaration::List args(m_template->templateParameters); const VariableDeclaration::List::const_iterator end(args.constEnd()); VariableDeclaration::List::const_iterator it(args.constBegin()); for(; it != end; ++it) { // TODO Q_ASSERT((*it)->sequenceType); } return me; }
bool VariableDeclaration::contains(const VariableDeclaration::List &list, const QXmlName &lookup) { VariableDeclaration::List::const_iterator it(list.constBegin()); const VariableDeclaration::List::const_iterator end(list.constEnd()); for(; it != end; ++it) { if((*it)->name == lookup) return true; } return false; }