From 4b3388172904e629fc6f6f1e3a6323e8fe12b97f Mon Sep 17 00:00:00 2001 From: Wolfgang Beck Date: Tue, 19 Jan 2010 15:26:08 +1000 Subject: Merge ichecker branch changes into the mainline. New project can be found under src/tools/ICheck --- src/shared/cplusplus/Symbols.cpp | 43 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) (limited to 'src/shared/cplusplus/Symbols.cpp') 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; } -- cgit v1.2.1