当前位置: 首页>>代码示例>>C++>>正文


C++ CompoundStmt::child_begin方法代码示例

本文整理汇总了C++中CompoundStmt::child_begin方法的典型用法代码示例。如果您正苦于以下问题:C++ CompoundStmt::child_begin方法的具体用法?C++ CompoundStmt::child_begin怎么用?C++ CompoundStmt::child_begin使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在CompoundStmt的用法示例。


在下文中一共展示了CompoundStmt::child_begin方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: unrollRecordAssigns

//--------------------------------------------------------- 
void unrollRecordAssigns(StmtEditor& editor, Stmt* S)
{    
  const RecordType *RT;
  for (stmt_iterator<BinaryOperator> i = stmt_ibegin(S), 
       e = stmt_iend(S); i != e;)
  {
    BinaryOperator* BO = *i;
    if (BO->getOpcode() == BO_Assign && 
        (RT = BO->getType()->getAsStructureType()) != 0 && 
        editor.getStatementOfExpression(BO) == BO)  // ensures top level assign
    {
      CompoundStmt* CS = editor.ensureCompoundParent(BO);
      std::vector<Stmt*> compoundStmts(CS->child_begin(), CS->child_end());
      std::vector<Stmt*>::iterator insertPos = 
        std::find(compoundStmts.begin(), compoundStmts.end(), BO);
      assert(insertPos != compoundStmts.end());
      insertPos = compoundStmts.erase(insertPos);
      RecordAssignUnroller unroller(editor, RT->getDecl(), BO);
      compoundStmts.insert(insertPos, 
        unroller.compoundStmts.begin(), unroller.compoundStmts.end());
      editor.replaceStmts(CS, &compoundStmts[0], compoundStmts.size());
      i = stmt_ibegin(S);
    }
    else
    {
      ++i;
    }
  }
}
开发者ID:kevinzhang334455,项目名称:Scout,代码行数:30,代码来源:Toolbox.cpp

示例2: removeInnerAssigns

//--------------------------------------------------------- 
void removeInnerAssigns(StmtEditor& editor, Stmt* S)
{    
  for (stmt_iterator<BinaryOperator> i = stmt_ibegin(S), 
       e = stmt_iend(S); i != e;)
  {
    if (i->getOpcode() == BO_Assign && 
        isa<Expr>(editor.getParent(*i)))
    {
      Stmt* exprStmt = editor.getStatementOfExpression(*i);
      CompoundStmt* CS = editor.ensureCompoundParent(exprStmt);
      std::vector<Stmt*> compoundStmts(CS->child_begin(), CS->child_end());
      std::vector<Stmt*>::iterator insertPos = 
        std::find(compoundStmts.begin(), compoundStmts.end(), exprStmt);
      assert(insertPos != compoundStmts.end());
      compoundStmts.insert(insertPos, *i);
      editor.replaceStatement(*i, selectInnerAssignResult(*i));
      editor.replaceStmts(CS, &compoundStmts[0], compoundStmts.size());
      i = stmt_ibegin(S);
    }
    else
    {
      ++i;
    }
  }
}
开发者ID:kevinzhang334455,项目名称:Scout,代码行数:26,代码来源:Toolbox.cpp


注:本文中的CompoundStmt::child_begin方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。