本文整理汇总了C++中ExprVector::rend方法的典型用法代码示例。如果您正苦于以下问题:C++ ExprVector::rend方法的具体用法?C++ ExprVector::rend怎么用?C++ ExprVector::rend使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ExprVector
的用法示例。
在下文中一共展示了ExprVector::rend方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: handleOneASE
void ReduceArraySize::handleOneASE(const ArraySubscriptExpr *ASE)
{
const Type *ASETy = ASE->getType().getTypePtr();
if (!ASETy->isScalarType() && !ASETy->isStructureType() &&
!ASETy->isUnionType())
return;
ExprVector IdxExprs;
const Expr *BaseE = getBaseExprAndIdxExprs(ASE, IdxExprs);
TransAssert(BaseE && "Empty Base expression!");
const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(BaseE);
if (!DRE)
return;
const ValueDecl *OrigDecl = DRE->getDecl();
const VarDecl *VD = dyn_cast<VarDecl>(OrigDecl);
if (!VD)
return;
const VarDecl *CanonicalVD = VD->getCanonicalDecl();
DimValueVector *DimVec = VarDeclToDim[CanonicalVD];
// It's possible DimVec is NULL, e.g.,
// int main(..., char *argv[]) {
// ... argv[1] ...
// }
if (!DimVec)
return;
TransAssert((DimVec->size() >= IdxExprs.size()) &&
"More indices than it should be!");
unsigned int DimIdx = 0;
for (ExprVector::reverse_iterator I = IdxExprs.rbegin(),
E = IdxExprs.rend(); I != E; ++I) {
int OldIdx = (*DimVec)[DimIdx];
if (OldIdx == -1) {
DimIdx++;
continue;
}
const Expr *IdxE = (*I);
if (isIntegerExpr(IdxE)) {
int Idx = getIndexAsInteger(IdxE);
if (Idx > OldIdx)
(*DimVec)[DimIdx] = Idx;
}
else {
(*DimVec)[DimIdx] = -1;
}
DimIdx++;
}
}