File indexing completed on 2024-04-28 15:52:49

0001 /*
0002     SPDX-FileCopyrightText: 2009 Milian Wolff <mail@milianw.de>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "integraltypeextended.h"
0008 
0009 #include <language/duchain/types/typeregister.h>
0010 
0011 using namespace KDevelop;
0012 
0013 namespace Php
0014 {
0015 
0016 REGISTER_TYPE(IntegralTypeExtended);
0017 
0018 IntegralTypeExtended::IntegralTypeExtended(const IntegralTypeExtended& rhs)
0019   : IntegralType(copyData<IntegralTypeExtended>(*rhs.d_func()))
0020 {
0021 }
0022 
0023 IntegralTypeExtended::IntegralTypeExtended(IntegralTypeExtendedData& data)
0024   : IntegralType(data)
0025 {
0026 }
0027 
0028 IntegralTypeExtended::IntegralTypeExtended(uint type)
0029   : IntegralType(createData<IntegralTypeExtended>())
0030 {
0031   setDataType(type);
0032   setModifiers(ConstModifier);
0033 }
0034 
0035 
0036 QString IntegralTypeExtended::toString() const
0037 {
0038     if ( d_func()->m_dataType == TypeResource ) {
0039         return QStringLiteral("resource");
0040     } else if (d_func()->m_dataType == TypeCallable) {
0041         return QStringLiteral("callable");
0042     } else if (d_func()->m_dataType == TypeObject) {
0043         return QStringLiteral("object");
0044     }
0045     return KDevelop::IntegralType::toString();
0046 }
0047 
0048 KDevelop::AbstractType* IntegralTypeExtended::clone() const
0049 {
0050     return new IntegralTypeExtended(*this);
0051 }
0052 
0053 uint IntegralTypeExtended::hash() const
0054 {
0055     return 4 * KDevelop::IntegralType::hash();
0056 }
0057 
0058 bool IntegralTypeExtended::equals(const KDevelop::AbstractType* rhs) const
0059 {
0060     if( this == rhs ) {
0061         return true;
0062     }
0063 
0064     if ( !IntegralType::equals(rhs) ) {
0065         return false;
0066     }
0067 
0068     Q_ASSERT( dynamic_cast<const IntegralTypeExtended*>(rhs) );
0069 
0070     const IntegralTypeExtended* type = static_cast<const IntegralTypeExtended*>(rhs);
0071 
0072     return d_func()->m_dataType == type->d_func()->m_dataType;
0073 }
0074 
0075 }