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; }
void UserFunctionCallsite::setSource(const UserFunction::Ptr &userFunction, const VariableSlotID cacheSlotOffset) { m_functionDeclaration = userFunction; m_body = userFunction->body(); m_expressionSlotOffset = userFunction->expressionSlotOffset(); const int len = m_operands.size(); const VariableDeclaration::List varDecls(userFunction->argumentDeclarations()); for(int i = 0; i < len; ++i) { /* We don't want evaluation caches for range variables, it's not necessary since * the item is already cached in DynamicContext::rangeVariable(). */ if(m_operands.at(i)->is(IDRangeVariableReference)) continue; /* Note that we pass in cacheSlotOffset + i here instead of varDecls.at(i)->slot since * we want independent caches for each callsite. */ m_operands[i] = Expression::Ptr(new EvaluationCache<false>(m_operands.at(i), varDecls.at(i), cacheSlotOffset + i)); } }
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; }