summaryrefslogtreecommitdiff
path: root/src/shared/cplusplus/Symbols.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/shared/cplusplus/Symbols.cpp')
-rw-r--r--src/shared/cplusplus/Symbols.cpp43
1 files changed, 43 insertions, 0 deletions
diff --git a/src/shared/cplusplus/Symbols.cpp b/src/shared/cplusplus/Symbols.cpp
index e19e2d123b..8b1a15e79d 100644
--- a/src/shared/cplusplus/Symbols.cpp
+++ b/src/shared/cplusplus/Symbols.cpp
@@ -221,6 +221,10 @@ bool Function::isEqualTo(const Type *other) const
return false;
else if (isVolatile() != o->isVolatile())
return false;
+#ifdef ICHECK_BUILD
+ else if (isInvokable() != o->isInvokable())
+ return false;
+#endif
const Name *l = identity();
const Name *r = o->identity();
@@ -240,6 +244,35 @@ bool Function::isEqualTo(const Type *other) const
return false;
}
+#ifdef ICHECK_BUILD
+bool Function::isEqualTo(const Function* fct, bool ignoreName/* = false*/) const
+{
+ if(!ignoreName)
+ return isEqualTo((Type*)fct);
+
+ if (! fct)
+ return false;
+ else if (isConst() != fct->isConst())
+ return false;
+ else if (isVolatile() != fct->isVolatile())
+ return false;
+ else if (isInvokable() != fct->isInvokable())
+ return false;
+
+ if (_arguments->symbolCount() != fct->_arguments->symbolCount())
+ return false;
+ else if (! _returnType.isEqualTo(fct->_returnType))
+ return false;
+ for (unsigned i = 0; i < _arguments->symbolCount(); ++i) {
+ Symbol *l = _arguments->symbolAt(i);
+ Symbol *r = fct->_arguments->symbolAt(i);
+ if (! l->type().isEqualTo(r->type()))
+ return false;
+ }
+ return true;
+}
+#endif
+
void Function::accept0(TypeVisitor *visitor)
{ visitor->visit(this); }
@@ -316,6 +349,16 @@ bool Function::isPureVirtual() const
void Function::setPureVirtual(bool isPureVirtual)
{ f._isPureVirtual = isPureVirtual; }
+#ifdef ICHECK_BUILD
+
+bool Function::isInvokable() const
+{ return f._isInvokable == 1; }
+
+void Function::setInvokable(bool isInvokable)
+{ f._isInvokable = isInvokable; }
+
+#endif
+
bool Function::isAmbiguous() const
{ return f._isAmbiguous; }