File indexing completed on 2024-05-05 16:42:24
0001 /* 0002 SPDX-FileCopyrightText: 2011 Sven Brauch <svenbrauch@googlemail.com> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #ifndef PYTHONFUNCTIONDECLARATION_H 0008 #define PYTHONFUNCTIONDECLARATION_H 0009 0010 #include <language/duchain/functiondeclaration.h> 0011 #include <serialization/indexedstring.h> 0012 0013 #include "pythonduchainexport.h" 0014 0015 namespace Python { 0016 0017 class KDEVPYTHONDUCHAIN_EXPORT FunctionDeclarationData : public KDevelop::FunctionDeclarationData 0018 { 0019 public: 0020 FunctionDeclarationData() 0021 : KDevelop::FunctionDeclarationData() 0022 , m_isStatic(false) 0023 , m_isClassMethod(false) 0024 , m_isProperty(false) 0025 , m_vararg(-1) 0026 , m_kwarg(-1) {} 0027 0028 FunctionDeclarationData(const FunctionDeclarationData& rhs) 0029 : KDevelop::FunctionDeclarationData(rhs) 0030 , m_isStatic(rhs.m_isStatic) 0031 , m_isClassMethod(rhs.m_isClassMethod) 0032 , m_isProperty(rhs.m_isProperty) 0033 , m_vararg(rhs.m_vararg) 0034 , m_kwarg(rhs.m_kwarg) {} 0035 0036 ~FunctionDeclarationData() {} 0037 0038 bool m_isStatic: 1; 0039 bool m_isClassMethod: 1; 0040 bool m_isProperty: 1; //TODO real property declarations 0041 short m_vararg; 0042 short m_kwarg; 0043 }; 0044 0045 class KDEVPYTHONDUCHAIN_EXPORT FunctionDeclaration : public KDevelop::FunctionDeclaration 0046 { 0047 public: 0048 FunctionDeclaration(const FunctionDeclaration &rhs); 0049 FunctionDeclaration(const KDevelop::RangeInRevision &range, KDevelop::DUContext *context); 0050 FunctionDeclaration(FunctionDeclarationData &data); 0051 FunctionDeclaration(FunctionDeclarationData &data, const KDevelop::RangeInRevision &range, KDevelop::DUContext *context); 0052 ~FunctionDeclaration() override; 0053 0054 enum { 0055 Identity = 126 0056 }; 0057 0058 inline void setVararg(short vararg) { 0059 d_func_dynamic()->m_vararg = vararg; 0060 } 0061 0062 inline short vararg() const { 0063 return d_func()->m_vararg; 0064 } 0065 0066 inline void setKwarg(short kwarg) { 0067 d_func_dynamic()->m_kwarg = kwarg; 0068 } 0069 0070 inline short kwarg() const { 0071 return d_func()->m_kwarg; 0072 } 0073 0074 inline bool isStatic() const { 0075 return d_func()->m_isStatic; 0076 } 0077 0078 inline void setStatic(bool isStatic) { 0079 d_func_dynamic()->m_isStatic = isStatic; 0080 } 0081 inline bool isClassMethod() const { 0082 return d_func()->m_isClassMethod; 0083 } 0084 0085 inline void setClassMethod(bool isClassMethod) { 0086 d_func_dynamic()->m_isClassMethod = isClassMethod; 0087 } 0088 0089 inline bool isProperty() const { 0090 return d_func()->m_isProperty; 0091 } 0092 0093 inline void setProperty(bool isProperty) { 0094 d_func_dynamic()->m_isProperty = isProperty; 0095 } 0096 0097 typedef KDevelop::DUChainPointer<FunctionDeclaration> Ptr; 0098 0099 private: 0100 DUCHAIN_DECLARE_DATA(FunctionDeclaration); 0101 }; 0102 0103 typedef KDevelop::DUChainPointer<FunctionDeclaration> FunctionDeclarationPointer; 0104 } // namespace Python 0105 0106 #endif // PYTHONFUNCTIONDECLARATION_H