File indexing completed on 2024-05-12 04:37:55
0001 /* 0002 SPDX-FileCopyrightText: 2007 Hamish Rodda <rodda@kde.org> 0003 SPDX-FileCopyrightText: 2007-2008 David Nolden <david.nolden.kdevelop@art-master.de> 0004 0005 SPDX-License-Identifier: LGPL-2.0-only 0006 */ 0007 0008 #include "abstractfunctiondeclaration.h" 0009 0010 #include "types/functiontype.h" 0011 #include "declaration.h" 0012 #include "ducontext.h" 0013 #include <serialization/indexedstring.h> 0014 0015 namespace KDevelop { 0016 AbstractFunctionDeclaration::~AbstractFunctionDeclaration() 0017 { 0018 } 0019 0020 bool AbstractFunctionDeclaration::isVirtual() const 0021 { 0022 return data()->m_isVirtual; 0023 } 0024 0025 void AbstractFunctionDeclaration::setVirtual(bool isVirtual) 0026 { 0027 dynamicData()->m_isVirtual = isVirtual; 0028 } 0029 0030 bool AbstractFunctionDeclaration::isInline() const 0031 { 0032 return data()->m_isInline; 0033 } 0034 0035 void AbstractFunctionDeclaration::setInline(bool isInline) 0036 { 0037 dynamicData()->m_isInline = isInline; 0038 } 0039 0040 bool AbstractFunctionDeclaration::isExplicit() const 0041 { 0042 return data()->m_isExplicit; 0043 } 0044 0045 void AbstractFunctionDeclaration::setExplicit(bool isExplicit) 0046 { 0047 dynamicData()->m_isExplicit = isExplicit; 0048 } 0049 0050 void AbstractFunctionDeclaration::setFunctionSpecifiers(FunctionSpecifiers specifiers) 0051 { 0052 dynamicData()->m_isInline = specifiers & InlineSpecifier; 0053 dynamicData()->m_isExplicit = specifiers & ExplicitSpecifier; 0054 dynamicData()->m_isVirtual = specifiers & VirtualSpecifier; 0055 } 0056 0057 IndexedString AbstractFunctionDeclaration::defaultParameterForArgument(int index) const 0058 { 0059 FunctionType::Ptr fType = dynamic_cast<const Declaration*>(this)->type<FunctionType>(); 0060 if (fType && index >= 0 && index < fType->arguments().size()) { 0061 index -= (fType->arguments().size() - defaultParametersSize()); 0062 if (index >= 0 && index < ( int )defaultParametersSize()) 0063 return defaultParameters()[index]; 0064 } 0065 0066 return IndexedString(); 0067 } 0068 0069 void AbstractFunctionDeclaration::setInternalFunctionContext(DUContext* context) 0070 { 0071 Q_ASSERT(!context || context->type() == DUContext::Function); 0072 dynamicData()->m_functionContext = context; 0073 } 0074 DUContext* AbstractFunctionDeclaration::internalFunctionContext() const 0075 { 0076 return data()->m_functionContext.context(); 0077 } 0078 }