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; }