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


C++ VariableId::isValid方法代码示例

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


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

示例1: visit

void ExprWalker::visit(SgInitializedName* sgn)
{
  VariableId vid = vidm.variableId(sgn);
  
  // some SgInitializedName do not have symbols
  // VariableId is not created for such SgInitializedName
  // check and return if we are processing such SgInitializedName
  if(!vid.isValid()) {
    //cerr << "WARNING: Skipping SgInitializedName sgn->get_name() = " << sgn->get_name() << " with no symbol\n";
    return;
  }

  DefUseVarsInfo rduvi;
  SgInitializer* initializer = sgn->get_initializer();
  if(initializer) {
    rduvi = getDefUseVarsInfo_rec(initializer, vidm, false);
  }

  // SgInitializedName always define a variable
  // it should always be in def_set
  VarsInfo& def_vars_info = duvi.getDefVarsInfoMod();
  
  // determine the type info
  VariableIdTypeInfo sgn_type_info = getVariableIdTypeInfo(vid, vidm);

  if(vidm.getModeVariableIdForEachArrayElement() && sgn_type_info == arrayType)
    // When defining an array, define all its elements.
    duvi.addAllArrayElements(sgn, vidm, true);
  else
    def_vars_info.first.insert(VariableIdInfo(vid, sgn_type_info));

  duvi = duvi + rduvi;
}
开发者ID:billhoffman,项目名称:rose-develop,代码行数:33,代码来源:defUseQuery.C

示例2: createVariableValueRangeInfo

VariableValueRangeInfo VariableConstInfo::createVariableValueRangeInfo(VariableId varId, VarConstSetMap& map) {
    ROSE_ASSERT(map.size()>0);
    ROSE_ASSERT(varId.isValid());
    set<CppCapsuleConstIntLattice> cppCapsuleSet=map[varId];
    AType::ConstIntLattice minVal;
    AType::ConstIntLattice maxVal;
    // in case the set of collected assignments is empty, bot is returned (min and max remain bot).
    if(cppCapsuleSet.size()==0)
        return VariableValueRangeInfo(AType::ConstIntLattice(AType::Bot()));
    for(set<CppCapsuleConstIntLattice>::iterator i=cppCapsuleSet.begin(); i!=cppCapsuleSet.end(); ++i) {
        AType::ConstIntLattice aint=(*i).getValue();
        if(aint.isTop()) {
            return VariableValueRangeInfo(AType::ConstIntLattice(AType::Top()));
        }

        if(minVal.isBot() && maxVal.isBot()) {
            minVal=aint;
            maxVal=aint;
            continue;
        }
        if((aint<minVal).isTrue())
            minVal=aint;
        if((aint>maxVal).isTrue())
            maxVal=aint;
    }
    if(minVal.isBot()||maxVal.isBot())
        return VariableValueRangeInfo(AType::ConstIntLattice(AType::Bot()));
    return VariableValueRangeInfo(minVal,maxVal);
}
开发者ID:alexjohn1362,项目名称:rose,代码行数:29,代码来源:FIConstAnalysis.C

示例3:

// base case for the recursion
void SPRAY::ComputeAddressTakenInfo::OperandToVariableId::visit(SgVarRefExp *sgn)
{ 
  if(debuglevel > 0) debugPrint(sgn);
  VariableId id = cati.vidm.variableId(sgn);
  ROSE_ASSERT(id.isValid());
  // insert the id into VariableIdSet
  cati.addressTakenInfo.second.insert(id);
}
开发者ID:8l,项目名称:rose,代码行数:9,代码来源:addressTakenAnalysis.C

示例4: uniqueShortVariableName

/*! 
  * \author Markus Schordan
  * \date 2012.
 */
string VariableIdMapping::uniqueShortVariableName(VariableId varId) {
  if(!isTemporaryVariableId(varId)) {
    if(!varId.isValid())
      return "$invalidId";
    else
      return variableName(varId)+"_"+varId.toString().substr(1);
    //return SgNodeHelper::uniqueLongVariableName(getSymbol(varId));
  } else {
    return string("tmp")+"_"+varId.toString().substr(1);
  }
}
开发者ID:innotkauker,项目名称:rose-develop,代码行数:15,代码来源:VariableIdMapping.C

示例5: variableIdsOfAstSubTree

VariableIdMapping::VariableIdSet VariableIdMapping::variableIdsOfAstSubTree(SgNode* node) {
  VariableIdSet vset;
  RoseAst ast(node);
  for(RoseAst::iterator i=ast.begin();i!=ast.end();++i) {
    VariableId vid; // default creates intentionally an invalid id.
    if(SgVariableDeclaration* varDecl=isSgVariableDeclaration(*i)) {
      vid=variableId(varDecl);
    } else if(SgVarRefExp* varRefExp=isSgVarRefExp(*i)) {
      vid=variableId(varRefExp);
    } else if(SgInitializedName* initName=isSgInitializedName(*i)) {
      vid=variableId(initName);
    }
    if(vid.isValid())
      vset.insert(vid);
  }
  return vset;
}
开发者ID:innotkauker,项目名称:rose-develop,代码行数:17,代码来源:VariableIdMapping.C

示例6: visit

void ExprWalker::visit(SgVarRefExp* sgn)
{
  // get the VariableId
  VariableId vid = vidm.variableId(sgn);
  
  ROSE_ASSERT(vid.isValid());

  // determine type info
  VariableIdTypeInfo sgn_type_info = getVariableIdTypeInfo(vid, vidm); 

  VarsInfo& def_vars_info = duvi.getDefVarsInfoMod();
  VarsInfo& use_vars_info = duvi.getUseVarsInfoMod();

  if(isModExpr) {
    def_vars_info.first.insert(VariableIdInfo(vid, sgn_type_info));
  }
  else {
    use_vars_info.first.insert(VariableIdInfo(vid, sgn_type_info));
  }
}
开发者ID:8l,项目名称:rose,代码行数:20,代码来源:defUseQuery.C

示例7: listify


//.........这里部分代码省略.........
              if(_variableIdMapping->hasArrayType(arrayVarId)) {
                // has already correct id
                // nothing to do
              } else if(_variableIdMapping->hasPointerType(arrayVarId)) {
                // in case it is a pointer retrieve pointer value
                //cout<<"DEBUG: pointer-array access!"<<endl;
                if(pstate->varExists(arrayVarId)) {
                  AValue aValuePtr=pstate2[arrayVarId].getValue();
                  // convert integer to VariableId
                  int aValueInt=aValuePtr.getIntValue();
                  // change arrayVarId to refered array!
                  //cout<<"DEBUG: defering pointer-to-array: ptr:"<<_variableIdMapping->variableName(arrayVarId);
                  arrayVarId=_variableIdMapping->variableIdFromCode(aValueInt);
                  //cout<<" to "<<_variableIdMapping->variableName(arrayVarId)<<endl;//DEBUG
                } else {
                  cerr<<"Error: pointer variable does not exist in PState."<<endl;
                  exit(1);
                }
              } else {
                cerr<<"Error: unkown type of array or pointer."<<endl;
                exit(1);
              }
              VariableId arrayElementId;
              AValue aValue=rhsResult.value();
              if(aValue.isConstInt()) {
                int index=aValue.getIntValue();
                arrayElementId=_variableIdMapping->variableIdOfArrayElement(arrayVarId,index);
                //cout<<"DEBUG: arrayElementVarId:"<<arrayElementId.toString()<<":"<<_variableIdMapping->variableName(arrayVarId)<<" Index:"<<index<<endl;
              } else {
                cerr<<"Error: array index cannot be evaluated to a constant. Not supported yet."<<endl;
                cerr<<"expr: "<<varRefExp->unparseToString()<<endl;
                exit(1);
              }
              ROSE_ASSERT(arrayElementId.isValid());
              // read value of variable var id (same as for VarRefExp - TODO: reuse)
              if(pstate->varExists(arrayElementId)) {
                res.result=pstate2[arrayElementId].getValue();
                //cout<<"DEBUG: retrieved value:"<<res.result<<endl;
                if(res.result.isTop() && useConstraints) {
                  AType::ConstIntLattice val=res.estate.constraints()->varConstIntLatticeValue(arrayElementId);
                  res.result=val;
                }
                return listify(res);
              } else {
                cerr<<"Error: Array Element does not exist (out of array access?)"<<endl;
                cerr<<"array-element-id: "<<arrayElementId.toString()<<" name:"<<_variableIdMapping->variableName(arrayElementId)<<endl;
                cerr<<"PState: "<<pstate->toString(_variableIdMapping)<<endl;
                cerr<<"AST: "<<node->unparseToString()<<endl;
                exit(1);
              }
            } else {
              cerr<<"Error: array-access uses expr for denoting the array. Not supported yet."<<endl;
              cerr<<"expr: "<<lhs->unparseToString()<<endl;
              cerr<<"arraySkip: "<<getSkipArrayAccesses()<<endl;
              exit(1);
            }
          }
          break;
        }
        default:
            cerr << "Binary Op:"<<SgNodeHelper::nodeToString(node)<<"(nodetype:"<<node->class_name()<<")"<<endl;
          throw "Error: evalConstInt::unkown binary operation.";
        }
      }
    }
    return resultList;
开发者ID:InstRO,项目名称:InstRO-ROSE-edg4x,代码行数:67,代码来源:ExprAnalyzer.C


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