Expression::Ptr DocFN::typeCheck(const StaticContext::Ptr &context, const SequenceType::Ptr &reqType) { /* See the doxygen documentation for this function for the explanation * to why this implementation is here, as opposed to in * qsequencegeneratingfns.cpp. */ Q_ASSERT(context); prepareStaticBaseURI(context); const Expression::Ptr uriOp(m_operands.first()); if(!uriOp->isEvaluated()) return Expression::Ptr(FunctionCall::typeCheck(context, reqType)); const Item uriItem(uriOp->evaluateSingleton(context->dynamicContext())); if(!uriItem) return EmptySequence::create(this, context)->typeCheck(context, reqType); // TODO test this /* These two lines were previously in a separate function but are now duplicated * in DocFN::evaluateSingleton(), as part of a workaround for solaris-cc-64. */ const QUrl mayRela(AnyURI::toQUrl<ReportContext::FODC0005>(uriItem.stringValue(), context, this)); const QUrl uri(context->resolveURI(mayRela, staticBaseURI())); /* The URI is supplied statically, so, let's try to be clever. */ Q_ASSERT_X(context->resourceLoader(), Q_FUNC_INFO, "No resource loader is set in the StaticContext."); m_type = context->resourceLoader()->announceDocument(uri, ResourceLoader::MayUse); if(m_type) { Q_ASSERT(CommonSequenceTypes::ZeroOrOneDocumentNode->matches(m_type)); return Expression::Ptr(FunctionCall::typeCheck(context, reqType)); } else { context->error(QtXmlPatterns::tr("It will not be possible to retrieve %1.").arg(formatURI(uri)), ReportContext::FODC0002, this); return Expression::Ptr(); } }