Example #1
0
ASTNode *DelayedFuncFactory::createInstance(const VectorOfASTNodes &args, XPath2MemoryManager* memMgr) const
{
  if(function_ == 0) {
    DynamicContext *context = (DynamicContext*)query_->getStaticContext();

    if(body_ == 0) {
      const_cast<const XMLCh *&>(body_) = context->getMemoryManager()->getPooledString(body8_);
    }

    XQLexer lexer(memMgr, _LANG_FUNCDECL_, query_->getFile(), line_, column_, body_);
    XQParserArgs args(&lexer, query_);
    XQParser::yyparse(&args);

    const_cast<XQUserFunction*&>(function_) = args._function;
    function_->setDelayed(true);

    query_->addFunction(function_);
    function_->staticResolutionStage1(context);

    AutoDelete<Optimizer> optimizer(XQilla::createOptimizer(context, XQilla::NO_OPTIMIZATION));
    optimizer->startOptimize(function_);
  }
  return function_->createInstance(args, memMgr);
}