示例#1
0
void FunctionIds::Visit(const super_ast::FunctionDeclaration* function_declaration) {
    std::string signature = function_declaration->name();
    if (ids_.find(signature) != ids_.end()) {
        std::cout << "Duplicate function signature: " << signature << std::endl;
        return;
    } else {
        
        ids_[signature] = FunctionInfo(next_id_++,
                                       function_declaration->line());
    }
    function_declaration->AcceptChildren(*this);
}
CSMes::modifications_t FunctionListModel::compareCSMesFunction(TreeList *item_p) const
{
  bool ok;
  CSMes::modifications_t modif=CSMes::MODIFICATIONS_UNDEFINED;
  int diff=item_p->data(ITEM_DIFFERENCE).toInt(&ok);
  if (ok)
  {
    modif=static_cast<CSMes::modifications_t >(diff);
    return modif;
  }
  QString scoped_name=functionName(item_p,true);
  if (scoped_name.isEmpty())
  { // Namespace or class
    int nb=item_p->childCount();
    for (int i=0;i<nb;i++)
    {
      bool ok;
      TreeList *child_item_p=item_p->child(i);
      CSMes::modifications_t modif_item=CSMes::MODIFICATIONS_UNDEFINED;
      int diff=child_item_p->data(ITEM_DIFFERENCE).toInt(&ok);
      if (ok)
        modif_item=static_cast<CSMes::modifications_t >(diff);
      else
        modif_item=compareCSMesFunction(child_item_p);

      modif=CSMes::combineModifications(modif,modif_item);
    }
  }
  else
  {
    QString proto=item_p->data(ITEM_DESCRIPTION).toString();
    CSMes::functionskey_t func;
    {
      QString src=item_p->data(ITEM_FILE_NAME).toString();
      bool valid=!src.isEmpty();
      int start_line_pre   = valid?item_p->data(ITEM_START_LINE).toInt():-1;
      int start_line_org   = valid?item_p->data(ITEM_START_LINE_ORIG).toInt():-1;
      int end_line_pre     = valid?item_p->data(ITEM_END_LINE).toInt():-1;
      int end_line_org     = valid?item_p->data(ITEM_END_LINE_ORIG).toInt():-1;
      int start_column_pre = valid?item_p->data(ITEM_START_COLUMN).toInt():-1;
      int end_column_pre   = valid?item_p->data(ITEM_END_COLUMN).toInt():-1;
      int end_column_org   = -1;
      int start_column_org = -1;
      func.source=src;
      func.method=FunctionInfo(scoped_name,proto,start_line_org,start_column_org,end_line_org,end_column_org,start_line_pre,start_column_pre,end_line_pre,end_column_pre);
    }

    CSMes::functionskey_t func_ref;
    {
      QString src_ref=item_p->data(ITEM_FILE_NAME_REF).toString();
      bool valid=!src_ref.isEmpty();
      int start_line_ref_org   = valid?item_p->data(ITEM_START_LINE_REF_ORIG).toInt():-1;
      int end_line_ref_org     = valid?item_p->data(ITEM_END_LINE_REF_ORIG).toInt():-1;
      int start_line_ref_pre   = valid?item_p->data(ITEM_START_LINE_REF).toInt():-1;
      int end_line_ref_pre     = valid?item_p->data(ITEM_END_LINE_REF).toInt():-1;
      int start_column_ref_pre = valid?item_p->data(ITEM_START_COLUMN_REF).toInt():-1;
      int end_column_ref_pre   = valid?item_p->data(ITEM_END_COLUMN_REF).toInt():-1;
      int end_column_ref_org   = -1;
      int start_column_ref_org = -1;
      func_ref.source=src_ref;
      func_ref.method=FunctionInfo(scoped_name,proto,start_line_ref_org,start_column_ref_org,end_line_ref_org,end_column_ref_org,start_line_ref_pre,start_column_ref_pre,end_line_ref_pre,end_column_ref_pre);
    }

    modif=csmes_p->compareCSMesFunction(func,func_ref);
  }

  item_p->setData(ITEM_DIFFERENCE,modif);
  return modif;
}