File indexing completed on 2024-05-12 04:39:13
0001 /* 0002 SPDX-FileCopyrightText: 2014 Kevin Funk <kfunk@kde.org> 0003 0004 SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0005 */ 0006 0007 #include "macrodefinition.h" 0008 0009 #include <language/duchain/appendedlist.h> 0010 #include <language/duchain/declarationdata.h> 0011 0012 using namespace KDevelop; 0013 0014 DEFINE_LIST_MEMBER_HASH(MacroDefinitionData, parameters, IndexedString) 0015 0016 class MacroDefinitionData : public DeclarationData 0017 { 0018 public: 0019 MacroDefinitionData() 0020 : isFunctionLike(false) 0021 { 0022 initializeAppendedLists(); 0023 } 0024 MacroDefinitionData(const MacroDefinitionData& rhs) 0025 : DeclarationData(rhs) 0026 , definition(rhs.definition) 0027 , isFunctionLike(rhs.isFunctionLike) 0028 { 0029 initializeAppendedLists(); 0030 copyListsFrom(rhs); 0031 } 0032 ~MacroDefinitionData() 0033 { 0034 freeAppendedLists(); 0035 } 0036 0037 MacroDefinitionData& operator=(const MacroDefinitionData& rhs) = delete; 0038 0039 IndexedString definition; 0040 bool isFunctionLike : 1; 0041 0042 START_APPENDED_LISTS_BASE(MacroDefinitionData, DeclarationData); 0043 APPENDED_LIST_FIRST(MacroDefinitionData, IndexedString, parameters); 0044 END_APPENDED_LISTS(MacroDefinitionData, parameters); 0045 }; 0046 0047 MacroDefinition::MacroDefinition(const MacroDefinition& rhs) 0048 : Declaration(*new MacroDefinitionData(*rhs.d_func())) 0049 { 0050 } 0051 0052 MacroDefinition::MacroDefinition(MacroDefinitionData& data) 0053 : Declaration(data) 0054 { 0055 } 0056 0057 MacroDefinition::MacroDefinition(const RangeInRevision& range, DUContext* context ) 0058 : Declaration(*new MacroDefinitionData, range) 0059 { 0060 d_func_dynamic()->setClassId(this); 0061 setKind(Declaration::Macro); 0062 if(context) 0063 setContext(context); 0064 } 0065 0066 MacroDefinition::~MacroDefinition() 0067 { 0068 } 0069 0070 IndexedString MacroDefinition::definition() const 0071 { 0072 return d_func()->definition; 0073 } 0074 0075 void MacroDefinition::setDefinition(const IndexedString& definition) 0076 { 0077 d_func_dynamic()->definition = definition; 0078 } 0079 0080 bool MacroDefinition::isFunctionLike() const 0081 { 0082 return d_func()->isFunctionLike; 0083 } 0084 0085 void MacroDefinition::setFunctionLike(bool isFunctionLike) 0086 { 0087 d_func_dynamic()->isFunctionLike = isFunctionLike; 0088 } 0089 0090 const IndexedString* MacroDefinition::parameters() const 0091 { 0092 return d_func()->parameters(); 0093 } 0094 0095 unsigned int MacroDefinition::parametersSize() const 0096 { 0097 return d_func()->parametersSize(); 0098 } 0099 0100 void MacroDefinition::addParameter(const IndexedString& str) 0101 { 0102 d_func_dynamic()->parametersList().append(str); 0103 } 0104 0105 void MacroDefinition::clearParameters() 0106 { 0107 d_func_dynamic()->parametersList().clear(); 0108 } 0109 0110 QString MacroDefinition::toString() const 0111 { 0112 return i18n("Macro %1", identifier().toString()); 0113 } 0114 0115 DUCHAIN_DEFINE_TYPE(MacroDefinition)