本文整理汇总了C++中TypeManager::create_type方法的典型用法代码示例。如果您正苦于以下问题:C++ TypeManager::create_type方法的具体用法?C++ TypeManager::create_type怎么用?C++ TypeManager::create_type使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类TypeManager
的用法示例。
在下文中一共展示了TypeManager::create_type方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: thePosVarExpr
forlet_clause::forlet_clause(
static_context* sctx,
CompilerCB* ccb,
const QueryLoc& loc,
flwor_clause::ClauseKind kind,
var_expr* varExpr,
expr* domainExpr,
var_expr* posVarExpr,
var_expr* scoreVarExpr,
bool isAllowingEmpty,
bool lazy)
:
forletwin_clause(sctx, ccb, loc, kind, varExpr, domainExpr),
thePosVarExpr(posVarExpr),
theScoreVarExpr(scoreVarExpr),
theAllowingEmpty(isAllowingEmpty),
theLazyEval(lazy)
{
if (thePosVarExpr != NULL)
thePosVarExpr->set_flwor_clause(this);
if (theScoreVarExpr != NULL)
theScoreVarExpr->set_flwor_clause(this);
if (varExpr != NULL && sctx != NULL)
{
RootTypeManager& rtm = GENV_TYPESYSTEM;
TypeManager* tm = sctx->get_typemanager();
xqtref_t declaredType = varExpr->get_type();
if (declaredType != NULL)
{
if (kind == flwor_clause::for_clause && declaredType->is_empty())
{
RAISE_ERROR(err::XPTY0004, loc,
ERROR_PARAMS(ZED(BadType_23o), "empty-sequence"));
}
xqtref_t domainType = domainExpr->get_return_type();
if (!TypeOps::is_equal(tm, *rtm.ITEM_TYPE_STAR, *declaredType, loc))
{
if (kind == flwor_clause::for_clause)
{
SequenceType::Quantifier domQuant = domainType->get_quantifier();
SequenceType::Quantifier declQuant = declaredType->get_quantifier();
if (theAllowingEmpty &&
(declQuant == SequenceType::QUANT_ONE ||
declQuant == SequenceType::QUANT_PLUS))
{
declaredType = tm->create_type(*declaredType, SequenceType::QUANT_PLUS);
}
else
{
declaredType = tm->create_type(*declaredType, domQuant);
}
}
if (!TypeOps::is_subtype(tm, *domainType, *declaredType, loc))
{
xqtref_t varType = TypeOps::intersect_type(*domainType, *declaredType, tm);
if (TypeOps::is_equal(tm, *varType, *rtm.NONE_TYPE, loc))
{
RAISE_ERROR(err::XPTY0004, loc,
ERROR_PARAMS(ZED(BadType_23o), *domainType, ZED(NoTreatAs_4), *declaredType));
}
domainExpr = theCCB->theEM->
create_treat_expr(sctx,
domainExpr->get_udf(),
loc,
domainExpr,
declaredType,
TREAT_TYPE_MATCH);
set_expr(domainExpr);
}
}
}
}
}