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.cpp40
1 files changed, 20 insertions, 20 deletions
diff --git a/src/shared/cplusplus/Symbols.cpp b/src/shared/cplusplus/Symbols.cpp
index c1dcec44a4..2016d565ca 100644
--- a/src/shared/cplusplus/Symbols.cpp
+++ b/src/shared/cplusplus/Symbols.cpp
@@ -191,14 +191,14 @@ void TypenameArgument::visitSymbol0(SymbolVisitor *visitor)
Function::Function(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name)
: ScopedSymbol(translationUnit, sourceLocation, name),
- _templateParameters(0),
- _flags(0)
-{ _arguments = new Scope(this); }
+ _templateParameters(0),
+ _block(0),
+ _flags(0)
+{ }
Function::~Function()
{
delete _templateParameters;
- delete _arguments;
}
bool Function::isNormal() const
@@ -219,6 +219,12 @@ int Function::methodKey() const
void Function::setMethodKey(int key)
{ f._methodKey = key; }
+Block *Function::block() const
+{ return _block; }
+
+void Function::setBlock(Block *block)
+{ _block = block; }
+
unsigned Function::templateParameterCount() const
{
if (! _templateParameters)
@@ -255,13 +261,13 @@ bool Function::isEqualTo(const Type *other) const
const Name *l = identity();
const Name *r = o->identity();
if (l == r || (l && l->isEqualTo(r))) {
- if (_arguments->symbolCount() != o->_arguments->symbolCount())
+ if (argumentCount() != o->argumentCount())
return false;
else if (! _returnType.isEqualTo(o->_returnType))
return false;
- for (unsigned i = 0; i < _arguments->symbolCount(); ++i) {
- Symbol *l = _arguments->symbolAt(i);
- Symbol *r = o->_arguments->symbolAt(i);
+ for (unsigned i = 0; i < argumentCount(); ++i) {
+ Symbol *l = argumentAt(i);
+ Symbol *r = o->argumentAt(i);
if (! l->type().isEqualTo(r->type()))
return false;
}
@@ -334,17 +340,14 @@ bool Function::hasReturnType() const
unsigned Function::argumentCount() const
{
- if (! _arguments)
- return 0;
+ if (_block)
+ return memberCount() - 1;
- return _arguments->symbolCount();
+ return memberCount();
}
Symbol *Function::argumentAt(unsigned index) const
-{ return _arguments->symbolAt(index); }
-
-Scope *Function::arguments() const
-{ return _arguments; }
+{ return memberAt(index); }
bool Function::hasArguments() const
{
@@ -356,8 +359,8 @@ unsigned Function::minimumArgumentCount() const
{
unsigned index = 0;
- for (; index < _arguments->symbolCount(); ++index) {
- if (Argument *arg = _arguments->symbolAt(index)->asArgument()) {
+ for (; index < argumentCount(); ++index) {
+ if (Argument *arg = argumentAt(index)->asArgument()) {
if (arg->hasInitializer())
break;
}
@@ -405,9 +408,6 @@ void Function::setAmbiguous(bool isAmbiguous)
void Function::visitSymbol0(SymbolVisitor *visitor)
{
if (visitor->visit(this)) {
- for (unsigned i = 0; i < _arguments->symbolCount(); ++i) {
- visitSymbol(_arguments->symbolAt(i), visitor);
- }
for (unsigned i = 0; i < memberCount(); ++i) {
visitSymbol(memberAt(i), visitor);
}