2008-12-02 12:01:29 +01:00
|
|
|
// Copyright (c) 2008 Roberto Raggi <roberto.raggi@gmail.com>
|
|
|
|
|
//
|
|
|
|
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
|
|
|
// of this software and associated documentation files (the "Software"), to deal
|
|
|
|
|
// in the Software without restriction, including without limitation the rights
|
|
|
|
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
|
|
|
// copies of the Software, and to permit persons to whom the Software is
|
|
|
|
|
// furnished to do so, subject to the following conditions:
|
|
|
|
|
//
|
|
|
|
|
// The above copyright notice and this permission notice shall be included in
|
|
|
|
|
// all copies or substantial portions of the Software.
|
|
|
|
|
//
|
|
|
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
|
|
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
|
|
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
|
|
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
|
|
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
|
|
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
|
|
|
// THE SOFTWARE.
|
|
|
|
|
|
|
|
|
|
#ifndef CPLUSPLUS_SYMBOLS_H
|
|
|
|
|
#define CPLUSPLUS_SYMBOLS_H
|
|
|
|
|
|
|
|
|
|
#include "CPlusPlusForwardDeclarations.h"
|
|
|
|
|
#include "Symbol.h"
|
|
|
|
|
#include "Type.h"
|
|
|
|
|
#include "FullySpecifiedType.h"
|
2010-08-11 12:26:02 +02:00
|
|
|
#include "Scope.h"
|
2010-03-18 15:21:07 +01:00
|
|
|
#include <vector>
|
2009-10-20 11:21:25 +02:00
|
|
|
|
|
|
|
|
namespace CPlusPlus {
|
2008-12-02 12:01:29 +01:00
|
|
|
|
|
|
|
|
class CPLUSPLUS_EXPORT UsingNamespaceDirective: public Symbol
|
|
|
|
|
{
|
|
|
|
|
public:
|
2009-12-01 12:46:15 +01:00
|
|
|
UsingNamespaceDirective(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name);
|
2011-03-28 13:21:37 +02:00
|
|
|
UsingNamespaceDirective(Clone *clone, Subst *subst, UsingNamespaceDirective *original);
|
2008-12-02 12:01:29 +01:00
|
|
|
virtual ~UsingNamespaceDirective();
|
|
|
|
|
|
|
|
|
|
// Symbol's interface
|
|
|
|
|
virtual FullySpecifiedType type() const;
|
|
|
|
|
|
2009-02-09 16:15:02 +01:00
|
|
|
virtual const UsingNamespaceDirective *asUsingNamespaceDirective() const
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
|
|
|
|
virtual UsingNamespaceDirective *asUsingNamespaceDirective()
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
2008-12-02 12:01:29 +01:00
|
|
|
protected:
|
|
|
|
|
virtual void visitSymbol0(SymbolVisitor *visitor);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
class CPLUSPLUS_EXPORT UsingDeclaration: public Symbol
|
|
|
|
|
{
|
|
|
|
|
public:
|
2009-12-01 12:46:15 +01:00
|
|
|
UsingDeclaration(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name);
|
2011-03-28 13:21:37 +02:00
|
|
|
UsingDeclaration(Clone *clone, Subst *subst, UsingDeclaration *original);
|
2008-12-02 12:01:29 +01:00
|
|
|
virtual ~UsingDeclaration();
|
|
|
|
|
|
|
|
|
|
// Symbol's interface
|
|
|
|
|
virtual FullySpecifiedType type() const;
|
|
|
|
|
|
2009-02-09 16:15:02 +01:00
|
|
|
virtual const UsingDeclaration *asUsingDeclaration() const
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
|
|
|
|
virtual UsingDeclaration *asUsingDeclaration()
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
2008-12-02 12:01:29 +01:00
|
|
|
protected:
|
|
|
|
|
virtual void visitSymbol0(SymbolVisitor *visitor);
|
|
|
|
|
};
|
|
|
|
|
|
2010-05-05 10:18:11 +02:00
|
|
|
class CPLUSPLUS_EXPORT NamespaceAlias: public Symbol
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
NamespaceAlias(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name);
|
2011-03-28 13:21:37 +02:00
|
|
|
NamespaceAlias(Clone *clone, Subst *subst, NamespaceAlias *original);
|
2010-05-05 10:18:11 +02:00
|
|
|
virtual ~NamespaceAlias();
|
|
|
|
|
|
|
|
|
|
const Name *namespaceName() const;
|
|
|
|
|
void setNamespaceName(const Name *namespaceName);
|
|
|
|
|
|
|
|
|
|
// Symbol's interface
|
|
|
|
|
virtual FullySpecifiedType type() const;
|
|
|
|
|
|
|
|
|
|
virtual const NamespaceAlias *asNamespaceAlias() const
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
|
|
|
|
virtual NamespaceAlias *asNamespaceAlias()
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
virtual void visitSymbol0(SymbolVisitor *visitor);
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
const Name *_namespaceName;
|
|
|
|
|
};
|
|
|
|
|
|
2008-12-02 12:01:29 +01:00
|
|
|
class CPLUSPLUS_EXPORT Declaration: public Symbol
|
|
|
|
|
{
|
|
|
|
|
public:
|
2009-12-01 12:46:15 +01:00
|
|
|
Declaration(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name);
|
2011-03-28 13:21:37 +02:00
|
|
|
Declaration(Clone *clone, Subst *subst, Declaration *original);
|
2008-12-02 12:01:29 +01:00
|
|
|
virtual ~Declaration();
|
|
|
|
|
|
2009-11-17 14:37:45 +01:00
|
|
|
void setType(const FullySpecifiedType &type);
|
2012-01-28 22:58:08 +04:00
|
|
|
void setInitializer(StringLiteral const* initializer);
|
2008-12-02 12:01:29 +01:00
|
|
|
|
|
|
|
|
// Symbol's interface
|
|
|
|
|
virtual FullySpecifiedType type() const;
|
2012-01-28 22:58:08 +04:00
|
|
|
const StringLiteral *getInitializer() const;
|
2008-12-02 12:01:29 +01:00
|
|
|
|
2009-02-09 16:15:02 +01:00
|
|
|
virtual const Declaration *asDeclaration() const
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
|
|
|
|
virtual Declaration *asDeclaration()
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
2011-05-09 13:52:03 +02:00
|
|
|
virtual EnumeratorDeclaration *asEnumeratorDeclarator()
|
|
|
|
|
{ return 0; }
|
|
|
|
|
|
|
|
|
|
virtual const EnumeratorDeclaration *asEnumeratorDeclarator() const
|
|
|
|
|
{ return 0; }
|
|
|
|
|
|
2008-12-02 12:01:29 +01:00
|
|
|
protected:
|
|
|
|
|
virtual void visitSymbol0(SymbolVisitor *visitor);
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
FullySpecifiedType _type;
|
2012-01-28 22:58:08 +04:00
|
|
|
const StringLiteral *_initializer;
|
2008-12-02 12:01:29 +01:00
|
|
|
};
|
|
|
|
|
|
2011-05-09 13:52:03 +02:00
|
|
|
class CPLUSPLUS_EXPORT EnumeratorDeclaration: public Declaration
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
EnumeratorDeclaration(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name);
|
|
|
|
|
virtual ~EnumeratorDeclaration();
|
|
|
|
|
|
|
|
|
|
const StringLiteral *constantValue() const;
|
|
|
|
|
void setConstantValue(const StringLiteral *constantValue);
|
|
|
|
|
|
|
|
|
|
virtual EnumeratorDeclaration *asEnumeratorDeclarator()
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
|
|
|
|
virtual const EnumeratorDeclaration *asEnumeratorDeclarator() const
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
const StringLiteral *_constantValue;
|
|
|
|
|
};
|
|
|
|
|
|
2008-12-02 12:01:29 +01:00
|
|
|
class CPLUSPLUS_EXPORT Argument: public Symbol
|
|
|
|
|
{
|
|
|
|
|
public:
|
2009-12-01 12:46:15 +01:00
|
|
|
Argument(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name);
|
2011-03-28 13:21:37 +02:00
|
|
|
Argument(Clone *clone, Subst *subst, Argument *original);
|
2008-12-02 12:01:29 +01:00
|
|
|
virtual ~Argument();
|
|
|
|
|
|
2009-11-17 14:37:45 +01:00
|
|
|
void setType(const FullySpecifiedType &type);
|
2008-12-02 12:01:29 +01:00
|
|
|
|
|
|
|
|
bool hasInitializer() const;
|
2009-12-08 11:34:22 +01:00
|
|
|
|
|
|
|
|
const StringLiteral *initializer() const;
|
|
|
|
|
void setInitializer(const StringLiteral *initializer);
|
2008-12-02 12:01:29 +01:00
|
|
|
|
|
|
|
|
// Symbol's interface
|
|
|
|
|
virtual FullySpecifiedType type() const;
|
|
|
|
|
|
2009-02-09 16:15:02 +01:00
|
|
|
virtual const Argument *asArgument() const
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
|
|
|
|
virtual Argument *asArgument()
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
2008-12-02 12:01:29 +01:00
|
|
|
protected:
|
|
|
|
|
virtual void visitSymbol0(SymbolVisitor *visitor);
|
|
|
|
|
|
|
|
|
|
private:
|
2009-12-08 11:34:22 +01:00
|
|
|
const StringLiteral *_initializer;
|
2010-09-03 12:11:15 +02:00
|
|
|
FullySpecifiedType _type;
|
2008-12-02 12:01:29 +01:00
|
|
|
};
|
|
|
|
|
|
2009-12-08 11:58:27 +01:00
|
|
|
class CPLUSPLUS_EXPORT TypenameArgument: public Symbol
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
TypenameArgument(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name);
|
2011-03-28 13:21:37 +02:00
|
|
|
TypenameArgument(Clone *clone, Subst *subst, TypenameArgument *original);
|
2009-12-08 11:58:27 +01:00
|
|
|
virtual ~TypenameArgument();
|
|
|
|
|
|
|
|
|
|
void setType(const FullySpecifiedType &type);
|
|
|
|
|
|
|
|
|
|
// Symbol's interface
|
|
|
|
|
virtual FullySpecifiedType type() const;
|
|
|
|
|
|
|
|
|
|
virtual const TypenameArgument *asTypenameArgument() const
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
|
|
|
|
virtual TypenameArgument *asTypenameArgument()
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
virtual void visitSymbol0(SymbolVisitor *visitor);
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
FullySpecifiedType _type;
|
|
|
|
|
};
|
|
|
|
|
|
2010-08-11 12:26:02 +02:00
|
|
|
class CPLUSPLUS_EXPORT Block: public Scope
|
2008-12-02 12:01:29 +01:00
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
Block(TranslationUnit *translationUnit, unsigned sourceLocation);
|
2011-03-28 13:21:37 +02:00
|
|
|
Block(Clone *clone, Subst *subst, Block *original);
|
2008-12-02 12:01:29 +01:00
|
|
|
virtual ~Block();
|
|
|
|
|
|
|
|
|
|
// Symbol's interface
|
|
|
|
|
virtual FullySpecifiedType type() const;
|
|
|
|
|
|
2009-02-09 16:15:02 +01:00
|
|
|
virtual const Block *asBlock() const
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
|
|
|
|
virtual Block *asBlock()
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
2008-12-02 12:01:29 +01:00
|
|
|
protected:
|
|
|
|
|
virtual void visitSymbol0(SymbolVisitor *visitor);
|
|
|
|
|
};
|
|
|
|
|
|
2009-02-16 15:43:24 +01:00
|
|
|
class CPLUSPLUS_EXPORT ForwardClassDeclaration: public Symbol, public Type
|
|
|
|
|
{
|
|
|
|
|
public:
|
2009-12-01 12:46:15 +01:00
|
|
|
ForwardClassDeclaration(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name);
|
2011-03-28 13:21:37 +02:00
|
|
|
ForwardClassDeclaration(Clone *clone, Subst *subst, ForwardClassDeclaration *original);
|
2009-02-16 15:43:24 +01:00
|
|
|
virtual ~ForwardClassDeclaration();
|
|
|
|
|
|
|
|
|
|
virtual FullySpecifiedType type() const;
|
|
|
|
|
|
|
|
|
|
virtual bool isEqualTo(const Type *other) const;
|
|
|
|
|
|
|
|
|
|
virtual const ForwardClassDeclaration *asForwardClassDeclaration() const
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
|
|
|
|
virtual ForwardClassDeclaration *asForwardClassDeclaration()
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
|
|
|
|
virtual const ForwardClassDeclaration *asForwardClassDeclarationType() const
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
|
|
|
|
virtual ForwardClassDeclaration *asForwardClassDeclarationType()
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
virtual void visitSymbol0(SymbolVisitor *visitor);
|
|
|
|
|
virtual void accept0(TypeVisitor *visitor);
|
2009-11-23 11:56:44 +01:00
|
|
|
virtual bool matchType0(const Type *otherType, TypeMatcher *matcher) const;
|
2009-02-16 15:43:24 +01:00
|
|
|
};
|
|
|
|
|
|
2010-08-11 12:26:02 +02:00
|
|
|
class CPLUSPLUS_EXPORT Enum: public Scope, public Type
|
2008-12-02 12:01:29 +01:00
|
|
|
{
|
|
|
|
|
public:
|
2009-12-01 12:46:15 +01:00
|
|
|
Enum(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name);
|
2011-03-28 13:21:37 +02:00
|
|
|
Enum(Clone *clone, Subst *subst, Enum *original);
|
2008-12-02 12:01:29 +01:00
|
|
|
virtual ~Enum();
|
|
|
|
|
|
|
|
|
|
// Symbol's interface
|
|
|
|
|
virtual FullySpecifiedType type() const;
|
|
|
|
|
|
|
|
|
|
// Type's interface
|
|
|
|
|
virtual bool isEqualTo(const Type *other) const;
|
|
|
|
|
|
2009-02-09 16:15:02 +01:00
|
|
|
virtual const Enum *asEnum() const
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
|
|
|
|
virtual Enum *asEnum()
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
2009-02-09 17:44:06 +01:00
|
|
|
virtual const Enum *asEnumType() const
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
|
|
|
|
virtual Enum *asEnumType()
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
2012-10-25 07:56:01 +02:00
|
|
|
bool isScoped() const;
|
|
|
|
|
void setScoped(bool scoped);
|
|
|
|
|
|
2008-12-02 12:01:29 +01:00
|
|
|
protected:
|
|
|
|
|
virtual void visitSymbol0(SymbolVisitor *visitor);
|
|
|
|
|
virtual void accept0(TypeVisitor *visitor);
|
2009-11-23 11:56:44 +01:00
|
|
|
virtual bool matchType0(const Type *otherType, TypeMatcher *matcher) const;
|
2012-10-25 07:56:01 +02:00
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
bool _isScoped;
|
2008-12-02 12:01:29 +01:00
|
|
|
};
|
|
|
|
|
|
2010-08-11 12:26:02 +02:00
|
|
|
class CPLUSPLUS_EXPORT Function: public Scope, public Type
|
2008-12-02 12:01:29 +01:00
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
enum MethodKey {
|
|
|
|
|
NormalMethod,
|
|
|
|
|
SlotMethod,
|
2010-02-06 14:32:25 +01:00
|
|
|
SignalMethod,
|
|
|
|
|
InvokableMethod
|
2008-12-02 12:01:29 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
public:
|
2009-12-01 12:46:15 +01:00
|
|
|
Function(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name);
|
2011-03-28 13:21:37 +02:00
|
|
|
Function(Clone *clone, Subst *subst, Function *original);
|
2008-12-02 12:01:29 +01:00
|
|
|
virtual ~Function();
|
|
|
|
|
|
|
|
|
|
bool isNormal() const;
|
|
|
|
|
bool isSignal() const;
|
|
|
|
|
bool isSlot() const;
|
2010-04-23 09:42:22 +02:00
|
|
|
bool isInvokable() const;
|
2008-12-02 12:01:29 +01:00
|
|
|
int methodKey() const;
|
|
|
|
|
void setMethodKey(int key);
|
|
|
|
|
|
|
|
|
|
FullySpecifiedType returnType() const;
|
2009-11-17 14:37:45 +01:00
|
|
|
void setReturnType(const FullySpecifiedType &returnType);
|
2008-12-02 12:01:29 +01:00
|
|
|
|
2009-03-26 16:43:38 +01:00
|
|
|
/** Convenience function that returns whether the function returns something (including void). */
|
|
|
|
|
bool hasReturnType() const;
|
|
|
|
|
|
2008-12-02 12:01:29 +01:00
|
|
|
unsigned argumentCount() const;
|
|
|
|
|
Symbol *argumentAt(unsigned index) const;
|
|
|
|
|
|
2009-03-26 16:43:38 +01:00
|
|
|
/** Convenience function that returns whether the function receives any arguments. */
|
|
|
|
|
bool hasArguments() const;
|
2010-08-03 17:34:51 +02:00
|
|
|
unsigned minimumArgumentCount() const;
|
2009-03-26 16:43:38 +01:00
|
|
|
|
2009-09-25 13:45:13 +02:00
|
|
|
bool isVirtual() const;
|
|
|
|
|
void setVirtual(bool isVirtual);
|
|
|
|
|
|
2012-06-25 23:49:17 +04:00
|
|
|
bool isOverride() const;
|
|
|
|
|
void setOverride(bool isOverride);
|
|
|
|
|
|
|
|
|
|
bool isFinal() const;
|
|
|
|
|
void setFinal(bool isFinal);
|
|
|
|
|
|
2008-12-02 12:01:29 +01:00
|
|
|
bool isVariadic() const;
|
|
|
|
|
void setVariadic(bool isVariadic);
|
|
|
|
|
|
|
|
|
|
bool isConst() const;
|
|
|
|
|
void setConst(bool isConst);
|
|
|
|
|
|
|
|
|
|
bool isVolatile() const;
|
|
|
|
|
void setVolatile(bool isVolatile);
|
|
|
|
|
|
|
|
|
|
bool isPureVirtual() const;
|
|
|
|
|
void setPureVirtual(bool isPureVirtual);
|
|
|
|
|
|
|
|
|
|
// Symbol's interface
|
|
|
|
|
virtual FullySpecifiedType type() const;
|
|
|
|
|
|
|
|
|
|
// Type's interface
|
|
|
|
|
virtual bool isEqualTo(const Type *other) const;
|
|
|
|
|
|
2009-02-09 16:15:02 +01:00
|
|
|
virtual const Function *asFunction() const
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
|
|
|
|
virtual Function *asFunction()
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
2009-02-09 17:44:06 +01:00
|
|
|
virtual const Function *asFunctionType() const
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
|
|
|
|
virtual Function *asFunctionType()
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
2009-03-17 14:46:35 +01:00
|
|
|
bool isAmbiguous() const; // internal
|
|
|
|
|
void setAmbiguous(bool isAmbiguous); // internal
|
|
|
|
|
|
2010-12-10 10:32:46 +01:00
|
|
|
bool maybeValidPrototype(unsigned actualArgumentCount) const;
|
|
|
|
|
|
2008-12-02 12:01:29 +01:00
|
|
|
protected:
|
|
|
|
|
virtual void visitSymbol0(SymbolVisitor *visitor);
|
|
|
|
|
virtual void accept0(TypeVisitor *visitor);
|
2009-11-23 11:56:44 +01:00
|
|
|
virtual bool matchType0(const Type *otherType, TypeMatcher *matcher) const;
|
2008-12-02 12:01:29 +01:00
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
FullySpecifiedType _returnType;
|
2009-07-27 21:47:03 +02:00
|
|
|
struct Flags {
|
2009-09-25 13:45:13 +02:00
|
|
|
unsigned _isVirtual: 1;
|
2012-06-25 23:49:17 +04:00
|
|
|
unsigned _isOverride: 1;
|
|
|
|
|
unsigned _isFinal: 1;
|
2009-07-27 21:47:03 +02:00
|
|
|
unsigned _isVariadic: 1;
|
|
|
|
|
unsigned _isPureVirtual: 1;
|
|
|
|
|
unsigned _isConst: 1;
|
|
|
|
|
unsigned _isVolatile: 1;
|
|
|
|
|
unsigned _isAmbiguous: 1;
|
|
|
|
|
unsigned _methodKey: 3;
|
|
|
|
|
};
|
2008-12-02 12:01:29 +01:00
|
|
|
union {
|
|
|
|
|
unsigned _flags;
|
2009-07-27 21:47:03 +02:00
|
|
|
Flags f;
|
2008-12-02 12:01:29 +01:00
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
|
2010-08-11 13:46:32 +02:00
|
|
|
class CPLUSPLUS_EXPORT Template: public Scope, public Type
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
Template(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name);
|
2011-03-28 13:21:37 +02:00
|
|
|
Template(Clone *clone, Subst *subst, Template *original);
|
2010-08-11 13:46:32 +02:00
|
|
|
virtual ~Template();
|
|
|
|
|
|
|
|
|
|
unsigned templateParameterCount() const;
|
|
|
|
|
Symbol *templateParameterAt(unsigned index) const;
|
|
|
|
|
Symbol *declaration() const;
|
|
|
|
|
|
|
|
|
|
// Symbol's interface
|
|
|
|
|
virtual FullySpecifiedType type() const;
|
|
|
|
|
|
|
|
|
|
// Type's interface
|
|
|
|
|
virtual bool isEqualTo(const Type *other) const;
|
|
|
|
|
|
|
|
|
|
virtual const Template *asTemplate() const
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
|
|
|
|
virtual Template *asTemplate()
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
|
|
|
|
virtual const Template *asTemplateType() const
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
|
|
|
|
virtual Template *asTemplateType()
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
virtual void visitSymbol0(SymbolVisitor *visitor);
|
|
|
|
|
virtual void accept0(TypeVisitor *visitor);
|
|
|
|
|
virtual bool matchType0(const Type *otherType, TypeMatcher *matcher) const;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
2010-08-11 12:26:02 +02:00
|
|
|
class CPLUSPLUS_EXPORT Namespace: public Scope, public Type
|
2008-12-02 12:01:29 +01:00
|
|
|
{
|
|
|
|
|
public:
|
2009-12-01 12:46:15 +01:00
|
|
|
Namespace(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name);
|
2011-03-28 13:21:37 +02:00
|
|
|
Namespace(Clone *clone, Subst *subst, Namespace *original);
|
2008-12-02 12:01:29 +01:00
|
|
|
virtual ~Namespace();
|
|
|
|
|
|
|
|
|
|
// Symbol's interface
|
|
|
|
|
virtual FullySpecifiedType type() const;
|
|
|
|
|
|
|
|
|
|
// Type's interface
|
|
|
|
|
virtual bool isEqualTo(const Type *other) const;
|
|
|
|
|
|
2009-02-09 16:15:02 +01:00
|
|
|
virtual const Namespace *asNamespace() const
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
|
|
|
|
virtual Namespace *asNamespace()
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
2009-02-09 17:44:06 +01:00
|
|
|
virtual const Namespace *asNamespaceType() const
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
|
|
|
|
virtual Namespace *asNamespaceType()
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
2012-02-02 10:19:58 +01:00
|
|
|
bool isInline() const
|
|
|
|
|
{ return _isInline; }
|
|
|
|
|
|
|
|
|
|
void setInline(bool onoff)
|
|
|
|
|
{ _isInline = onoff; }
|
|
|
|
|
|
2008-12-02 12:01:29 +01:00
|
|
|
protected:
|
|
|
|
|
virtual void visitSymbol0(SymbolVisitor *visitor);
|
|
|
|
|
virtual void accept0(TypeVisitor *visitor);
|
2009-11-23 11:56:44 +01:00
|
|
|
virtual bool matchType0(const Type *otherType, TypeMatcher *matcher) const;
|
2012-02-02 10:19:58 +01:00
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
bool _isInline;
|
2008-12-02 12:01:29 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
class CPLUSPLUS_EXPORT BaseClass: public Symbol
|
|
|
|
|
{
|
|
|
|
|
public:
|
2009-12-01 12:46:15 +01:00
|
|
|
BaseClass(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name);
|
2011-03-28 13:21:37 +02:00
|
|
|
BaseClass(Clone *clone, Subst *subst, BaseClass *original);
|
2008-12-02 12:01:29 +01:00
|
|
|
virtual ~BaseClass();
|
|
|
|
|
|
|
|
|
|
bool isVirtual() const;
|
|
|
|
|
void setVirtual(bool isVirtual);
|
|
|
|
|
|
|
|
|
|
// Symbol's interface
|
|
|
|
|
virtual FullySpecifiedType type() const;
|
2010-01-06 11:23:41 +01:00
|
|
|
void setType(const FullySpecifiedType &type);
|
2008-12-02 12:01:29 +01:00
|
|
|
|
2009-02-09 16:15:02 +01:00
|
|
|
virtual const BaseClass *asBaseClass() const
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
|
|
|
|
virtual BaseClass *asBaseClass()
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
2008-12-02 12:01:29 +01:00
|
|
|
protected:
|
|
|
|
|
virtual void visitSymbol0(SymbolVisitor *visitor);
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
bool _isVirtual;
|
2010-01-06 11:23:41 +01:00
|
|
|
FullySpecifiedType _type;
|
2008-12-02 12:01:29 +01:00
|
|
|
};
|
|
|
|
|
|
2010-08-11 12:26:02 +02:00
|
|
|
class CPLUSPLUS_EXPORT Class: public Scope, public Type
|
2008-12-02 12:01:29 +01:00
|
|
|
{
|
|
|
|
|
public:
|
2009-12-01 12:46:15 +01:00
|
|
|
Class(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name);
|
2011-03-28 13:21:37 +02:00
|
|
|
Class(Clone *clone, Subst *subst, Class *original);
|
2008-12-02 12:01:29 +01:00
|
|
|
virtual ~Class();
|
|
|
|
|
|
|
|
|
|
enum Key {
|
|
|
|
|
ClassKey,
|
|
|
|
|
StructKey,
|
|
|
|
|
UnionKey
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
bool isClass() const;
|
|
|
|
|
bool isStruct() const;
|
|
|
|
|
bool isUnion() const;
|
|
|
|
|
Key classKey() const;
|
|
|
|
|
void setClassKey(Key key);
|
|
|
|
|
|
|
|
|
|
unsigned baseClassCount() const;
|
|
|
|
|
BaseClass *baseClassAt(unsigned index) const;
|
|
|
|
|
void addBaseClass(BaseClass *baseClass);
|
|
|
|
|
|
|
|
|
|
// Symbol's interface
|
|
|
|
|
virtual FullySpecifiedType type() const;
|
|
|
|
|
|
|
|
|
|
// Type's interface
|
|
|
|
|
virtual bool isEqualTo(const Type *other) const;
|
|
|
|
|
|
2009-02-09 16:15:02 +01:00
|
|
|
virtual const Class *asClass() const
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
|
|
|
|
virtual Class *asClass()
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
2009-02-09 17:44:06 +01:00
|
|
|
virtual const Class *asClassType() const
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
|
|
|
|
virtual Class *asClassType()
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
2008-12-02 12:01:29 +01:00
|
|
|
protected:
|
|
|
|
|
virtual void visitSymbol0(SymbolVisitor *visitor);
|
|
|
|
|
virtual void accept0(TypeVisitor *visitor);
|
2009-11-23 11:56:44 +01:00
|
|
|
virtual bool matchType0(const Type *otherType, TypeMatcher *matcher) const;
|
2008-12-02 12:01:29 +01:00
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
Key _key;
|
2010-03-18 15:21:07 +01:00
|
|
|
std::vector<BaseClass *> _baseClasses;
|
2008-12-02 12:01:29 +01:00
|
|
|
};
|
|
|
|
|
|
2010-12-06 12:16:45 +01:00
|
|
|
class CPLUSPLUS_EXPORT QtPropertyDeclaration: public Symbol
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
enum Flag {
|
2010-12-06 13:10:09 +01:00
|
|
|
NoFlags = 0,
|
2010-12-06 12:16:45 +01:00
|
|
|
ReadFunction = 1 << 0,
|
|
|
|
|
WriteFunction = 1 << 1,
|
2013-10-08 13:42:39 +02:00
|
|
|
MemberVariable = 1 << 2,
|
|
|
|
|
ResetFunction = 1 << 3,
|
|
|
|
|
NotifyFunction = 1 << 4,
|
|
|
|
|
DesignableFlag = 1 << 5,
|
|
|
|
|
DesignableFunction = 1 << 6,
|
|
|
|
|
ScriptableFlag = 1 << 7,
|
|
|
|
|
ScriptableFunction = 1 << 8,
|
|
|
|
|
StoredFlag = 1 << 9,
|
|
|
|
|
StoredFunction = 1 << 10,
|
|
|
|
|
UserFlag = 1 << 11,
|
|
|
|
|
UserFunction = 1 << 12,
|
|
|
|
|
ConstantFlag = 1 << 13,
|
|
|
|
|
FinalFlag = 1 << 14
|
2010-12-06 12:16:45 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
QtPropertyDeclaration(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name);
|
2011-03-28 13:21:37 +02:00
|
|
|
QtPropertyDeclaration(Clone *clone, Subst *subst, QtPropertyDeclaration *original);
|
2010-12-06 12:16:45 +01:00
|
|
|
virtual ~QtPropertyDeclaration();
|
|
|
|
|
|
|
|
|
|
void setType(const FullySpecifiedType &type);
|
|
|
|
|
|
|
|
|
|
void setFlags(int flags);
|
|
|
|
|
int flags() const;
|
|
|
|
|
|
|
|
|
|
// Symbol's interface
|
|
|
|
|
virtual FullySpecifiedType type() const;
|
|
|
|
|
|
|
|
|
|
virtual const QtPropertyDeclaration *asQtPropertyDeclaration() const
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
|
|
|
|
virtual QtPropertyDeclaration *asQtPropertyDeclaration()
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
virtual void visitSymbol0(SymbolVisitor *visitor);
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
FullySpecifiedType _type;
|
|
|
|
|
int _flags;
|
|
|
|
|
};
|
|
|
|
|
|
2010-12-06 13:10:09 +01:00
|
|
|
class CPLUSPLUS_EXPORT QtEnum: public Symbol
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
QtEnum(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name);
|
2011-03-28 13:21:37 +02:00
|
|
|
QtEnum(Clone *clone, Subst *subst, QtEnum *original);
|
2010-12-06 13:10:09 +01:00
|
|
|
virtual ~QtEnum();
|
|
|
|
|
|
|
|
|
|
// Symbol's interface
|
|
|
|
|
virtual FullySpecifiedType type() const;
|
|
|
|
|
|
|
|
|
|
virtual const QtEnum *asQtEnum() const
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
|
|
|
|
virtual QtEnum *asQtEnum()
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
virtual void visitSymbol0(SymbolVisitor *visitor);
|
|
|
|
|
};
|
|
|
|
|
|
2009-10-05 18:02:01 +02:00
|
|
|
class CPLUSPLUS_EXPORT ObjCBaseClass: public Symbol
|
|
|
|
|
{
|
|
|
|
|
public:
|
2009-12-01 12:46:15 +01:00
|
|
|
ObjCBaseClass(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name);
|
2011-03-28 13:21:37 +02:00
|
|
|
ObjCBaseClass(Clone *clone, Subst *subst, ObjCBaseClass *original);
|
2009-10-05 18:02:01 +02:00
|
|
|
virtual ~ObjCBaseClass();
|
|
|
|
|
|
|
|
|
|
// Symbol's interface
|
|
|
|
|
virtual FullySpecifiedType type() const;
|
|
|
|
|
|
|
|
|
|
virtual const ObjCBaseClass *asObjCBaseClass() const
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
|
|
|
|
virtual ObjCBaseClass *asObjCBaseClass()
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
virtual void visitSymbol0(SymbolVisitor *visitor);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
class CPLUSPLUS_EXPORT ObjCBaseProtocol: public Symbol
|
|
|
|
|
{
|
|
|
|
|
public:
|
2009-12-01 12:46:15 +01:00
|
|
|
ObjCBaseProtocol(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name);
|
2011-03-28 13:21:37 +02:00
|
|
|
ObjCBaseProtocol(Clone *clone, Subst *subst, ObjCBaseProtocol *original);
|
2009-10-05 18:02:01 +02:00
|
|
|
virtual ~ObjCBaseProtocol();
|
|
|
|
|
|
|
|
|
|
// Symbol's interface
|
|
|
|
|
virtual FullySpecifiedType type() const;
|
|
|
|
|
|
|
|
|
|
virtual const ObjCBaseProtocol *asObjCBaseProtocol() const
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
|
|
|
|
virtual ObjCBaseProtocol *asObjCBaseProtocol()
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
virtual void visitSymbol0(SymbolVisitor *visitor);
|
|
|
|
|
};
|
|
|
|
|
|
2009-09-28 11:46:00 +02:00
|
|
|
class CPLUSPLUS_EXPORT ObjCForwardProtocolDeclaration: public Symbol, public Type
|
2009-07-28 16:34:15 +02:00
|
|
|
{
|
|
|
|
|
public:
|
2009-12-01 12:46:15 +01:00
|
|
|
ObjCForwardProtocolDeclaration(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name);
|
2011-03-28 13:21:37 +02:00
|
|
|
ObjCForwardProtocolDeclaration(Clone *clone, Subst *subst, ObjCForwardProtocolDeclaration *original);
|
2009-07-28 16:34:15 +02:00
|
|
|
virtual ~ObjCForwardProtocolDeclaration();
|
|
|
|
|
|
|
|
|
|
virtual FullySpecifiedType type() const;
|
|
|
|
|
|
2009-09-28 11:46:00 +02:00
|
|
|
virtual bool isEqualTo(const Type *other) const;
|
|
|
|
|
|
2009-07-28 16:34:15 +02:00
|
|
|
virtual const ObjCForwardProtocolDeclaration *asObjCForwardProtocolDeclaration() const
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
|
|
|
|
virtual ObjCForwardProtocolDeclaration *asObjCForwardProtocolDeclaration()
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
2009-09-28 11:46:00 +02:00
|
|
|
virtual const ObjCForwardProtocolDeclaration *asObjCForwardProtocolDeclarationType() const
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
|
|
|
|
virtual ObjCForwardProtocolDeclaration *asObjCForwardProtocolDeclarationType()
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
2009-07-28 16:34:15 +02:00
|
|
|
protected:
|
|
|
|
|
virtual void visitSymbol0(SymbolVisitor *visitor);
|
2009-09-28 11:46:00 +02:00
|
|
|
virtual void accept0(TypeVisitor *visitor);
|
2009-11-23 11:56:44 +01:00
|
|
|
virtual bool matchType0(const Type *otherType, TypeMatcher *matcher) const;
|
2009-07-28 16:34:15 +02:00
|
|
|
};
|
|
|
|
|
|
2010-08-11 12:26:02 +02:00
|
|
|
class CPLUSPLUS_EXPORT ObjCProtocol: public Scope, public Type
|
2009-07-28 16:34:15 +02:00
|
|
|
{
|
|
|
|
|
public:
|
2009-12-01 12:46:15 +01:00
|
|
|
ObjCProtocol(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name);
|
2011-03-28 13:21:37 +02:00
|
|
|
ObjCProtocol(Clone *clone, Subst *subst, ObjCProtocol *original);
|
2009-07-28 16:34:15 +02:00
|
|
|
virtual ~ObjCProtocol();
|
|
|
|
|
|
2010-03-30 15:35:42 +02:00
|
|
|
unsigned protocolCount() const;
|
|
|
|
|
ObjCBaseProtocol *protocolAt(unsigned index) const;
|
|
|
|
|
void addProtocol(ObjCBaseProtocol *protocol);
|
2009-10-05 18:02:01 +02:00
|
|
|
|
2009-07-28 16:34:15 +02:00
|
|
|
// Symbol's interface
|
|
|
|
|
virtual FullySpecifiedType type() const;
|
|
|
|
|
|
|
|
|
|
// Type's interface
|
|
|
|
|
virtual bool isEqualTo(const Type *other) const;
|
|
|
|
|
|
|
|
|
|
virtual const ObjCProtocol *asObjCProtocol() const
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
|
|
|
|
virtual ObjCProtocol *asObjCProtocol()
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
|
|
|
|
virtual const ObjCProtocol *asObjCProtocolType() const
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
|
|
|
|
virtual ObjCProtocol *asObjCProtocolType()
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
virtual void visitSymbol0(SymbolVisitor *visitor);
|
|
|
|
|
virtual void accept0(TypeVisitor *visitor);
|
2009-11-23 11:56:44 +01:00
|
|
|
virtual bool matchType0(const Type *otherType, TypeMatcher *matcher) const;
|
2009-07-28 16:34:15 +02:00
|
|
|
|
|
|
|
|
private:
|
2010-03-18 15:21:07 +01:00
|
|
|
std::vector<ObjCBaseProtocol *> _protocols;
|
2009-07-28 16:34:15 +02:00
|
|
|
};
|
|
|
|
|
|
2009-09-28 11:46:00 +02:00
|
|
|
class CPLUSPLUS_EXPORT ObjCForwardClassDeclaration: public Symbol, public Type
|
2009-07-28 16:34:15 +02:00
|
|
|
{
|
|
|
|
|
public:
|
2009-12-01 12:46:15 +01:00
|
|
|
ObjCForwardClassDeclaration(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name);
|
2011-03-28 13:21:37 +02:00
|
|
|
ObjCForwardClassDeclaration(Clone *clone, Subst *subst, ObjCForwardClassDeclaration *original);
|
2009-07-28 16:34:15 +02:00
|
|
|
virtual ~ObjCForwardClassDeclaration();
|
|
|
|
|
|
|
|
|
|
virtual FullySpecifiedType type() const;
|
|
|
|
|
|
2009-09-28 11:46:00 +02:00
|
|
|
virtual bool isEqualTo(const Type *other) const;
|
|
|
|
|
|
2009-07-28 16:34:15 +02:00
|
|
|
virtual const ObjCForwardClassDeclaration *asObjCForwardClassDeclaration() const
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
|
|
|
|
virtual ObjCForwardClassDeclaration *asObjCForwardClassDeclaration()
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
2009-09-28 11:46:00 +02:00
|
|
|
virtual const ObjCForwardClassDeclaration *asObjCForwardClassDeclarationType() const
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
|
|
|
|
virtual ObjCForwardClassDeclaration *asObjCForwardClassDeclarationType()
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
2009-07-28 16:34:15 +02:00
|
|
|
protected:
|
|
|
|
|
virtual void visitSymbol0(SymbolVisitor *visitor);
|
2009-09-28 11:46:00 +02:00
|
|
|
virtual void accept0(TypeVisitor *visitor);
|
2009-11-23 11:56:44 +01:00
|
|
|
virtual bool matchType0(const Type *otherType, TypeMatcher *matcher) const;
|
2009-07-28 16:34:15 +02:00
|
|
|
};
|
|
|
|
|
|
2010-08-11 12:26:02 +02:00
|
|
|
class CPLUSPLUS_EXPORT ObjCClass: public Scope, public Type
|
2009-07-28 16:34:15 +02:00
|
|
|
{
|
|
|
|
|
public:
|
2009-12-01 12:46:15 +01:00
|
|
|
ObjCClass(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name);
|
2011-03-28 13:21:37 +02:00
|
|
|
ObjCClass(Clone *clone, Subst *subst, ObjCClass *original);
|
2009-07-28 16:34:15 +02:00
|
|
|
virtual ~ObjCClass();
|
|
|
|
|
|
2010-03-30 15:35:42 +02:00
|
|
|
bool isInterface() const;
|
|
|
|
|
void setInterface(bool isInterface);
|
2009-08-05 18:30:18 +02:00
|
|
|
|
2010-03-30 15:35:42 +02:00
|
|
|
bool isCategory() const;
|
|
|
|
|
const Name *categoryName() const;
|
|
|
|
|
void setCategoryName(const Name *categoryName);
|
2009-09-28 11:46:00 +02:00
|
|
|
|
2010-03-30 15:35:42 +02:00
|
|
|
ObjCBaseClass *baseClass() const;
|
|
|
|
|
void setBaseClass(ObjCBaseClass *baseClass);
|
2009-09-28 11:46:00 +02:00
|
|
|
|
2010-03-30 15:35:42 +02:00
|
|
|
unsigned protocolCount() const;
|
|
|
|
|
ObjCBaseProtocol *protocolAt(unsigned index) const;
|
|
|
|
|
void addProtocol(ObjCBaseProtocol *protocol);
|
2009-09-28 11:46:00 +02:00
|
|
|
|
2009-07-28 16:34:15 +02:00
|
|
|
// Symbol's interface
|
|
|
|
|
virtual FullySpecifiedType type() const;
|
|
|
|
|
|
|
|
|
|
// Type's interface
|
|
|
|
|
virtual bool isEqualTo(const Type *other) const;
|
|
|
|
|
|
|
|
|
|
virtual const ObjCClass *asObjCClass() const
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
|
|
|
|
virtual ObjCClass *asObjCClass()
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
|
|
|
|
virtual const ObjCClass *asObjCClassType() const
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
|
|
|
|
virtual ObjCClass *asObjCClassType()
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
virtual void visitSymbol0(SymbolVisitor *visitor);
|
|
|
|
|
virtual void accept0(TypeVisitor *visitor);
|
2009-11-23 11:56:44 +01:00
|
|
|
virtual bool matchType0(const Type *otherType, TypeMatcher *matcher) const;
|
2009-07-28 16:34:15 +02:00
|
|
|
|
|
|
|
|
private:
|
2009-12-01 12:46:15 +01:00
|
|
|
const Name *_categoryName;
|
2009-10-05 18:02:01 +02:00
|
|
|
ObjCBaseClass * _baseClass;
|
2010-03-18 15:21:07 +01:00
|
|
|
std::vector<ObjCBaseProtocol *> _protocols;
|
2010-09-03 12:11:15 +02:00
|
|
|
bool _isInterface;
|
2009-07-28 16:34:15 +02:00
|
|
|
};
|
|
|
|
|
|
2010-08-11 12:26:02 +02:00
|
|
|
class CPLUSPLUS_EXPORT ObjCMethod: public Scope, public Type
|
2009-08-05 18:30:18 +02:00
|
|
|
{
|
|
|
|
|
public:
|
2009-12-01 12:46:15 +01:00
|
|
|
ObjCMethod(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name);
|
2011-03-28 13:21:37 +02:00
|
|
|
ObjCMethod(Clone *clone, Subst *subst, ObjCMethod *original);
|
2009-08-05 18:30:18 +02:00
|
|
|
virtual ~ObjCMethod();
|
|
|
|
|
|
|
|
|
|
FullySpecifiedType returnType() const;
|
2009-11-17 14:37:45 +01:00
|
|
|
void setReturnType(const FullySpecifiedType &returnType);
|
2009-08-05 18:30:18 +02:00
|
|
|
|
|
|
|
|
/** Convenience function that returns whether the function returns something (including void). */
|
|
|
|
|
bool hasReturnType() const;
|
|
|
|
|
|
|
|
|
|
unsigned argumentCount() const;
|
|
|
|
|
Symbol *argumentAt(unsigned index) const;
|
|
|
|
|
|
|
|
|
|
/** Convenience function that returns whether the function receives any arguments. */
|
|
|
|
|
bool hasArguments() const;
|
|
|
|
|
|
|
|
|
|
bool isVariadic() const;
|
|
|
|
|
void setVariadic(bool isVariadic);
|
|
|
|
|
|
|
|
|
|
// Symbol's interface
|
|
|
|
|
virtual FullySpecifiedType type() const;
|
|
|
|
|
|
|
|
|
|
// Type's interface
|
|
|
|
|
virtual bool isEqualTo(const Type *other) const;
|
|
|
|
|
|
|
|
|
|
virtual const ObjCMethod *asObjCMethod() const
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
|
|
|
|
virtual ObjCMethod *asObjCMethod()
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
|
|
|
|
virtual const ObjCMethod *asObjCMethodType() const
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
|
|
|
|
virtual ObjCMethod *asObjCMethodType()
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
virtual void visitSymbol0(SymbolVisitor *visitor);
|
|
|
|
|
virtual void accept0(TypeVisitor *visitor);
|
2009-11-23 11:56:44 +01:00
|
|
|
virtual bool matchType0(const Type *otherType, TypeMatcher *matcher) const;
|
2009-08-05 18:30:18 +02:00
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
FullySpecifiedType _returnType;
|
|
|
|
|
struct Flags {
|
|
|
|
|
unsigned _isVariadic: 1;
|
|
|
|
|
};
|
|
|
|
|
union {
|
|
|
|
|
unsigned _flags;
|
|
|
|
|
Flags f;
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
|
2009-11-11 09:32:05 +01:00
|
|
|
class CPLUSPLUS_EXPORT ObjCPropertyDeclaration: public Symbol
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
enum PropertyAttributes {
|
|
|
|
|
None = 0,
|
|
|
|
|
Assign = 1 << 0,
|
|
|
|
|
Retain = 1 << 1,
|
|
|
|
|
Copy = 1 << 2,
|
|
|
|
|
ReadOnly = 1 << 3,
|
|
|
|
|
ReadWrite = 1 << 4,
|
|
|
|
|
Getter = 1 << 5,
|
|
|
|
|
Setter = 1 << 6,
|
|
|
|
|
NonAtomic = 1 << 7,
|
|
|
|
|
|
|
|
|
|
WritabilityMask = ReadOnly | ReadWrite,
|
2010-02-25 12:39:39 +01:00
|
|
|
SetterSemanticsMask = Assign | Retain | Copy
|
2009-11-11 09:32:05 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
ObjCPropertyDeclaration(TranslationUnit *translationUnit,
|
|
|
|
|
unsigned sourceLocation,
|
2009-12-01 12:46:15 +01:00
|
|
|
const Name *name);
|
2011-03-28 13:21:37 +02:00
|
|
|
ObjCPropertyDeclaration(Clone *clone, Subst *subst, ObjCPropertyDeclaration *original);
|
2009-11-11 09:32:05 +01:00
|
|
|
virtual ~ObjCPropertyDeclaration();
|
|
|
|
|
|
2010-03-30 15:35:42 +02:00
|
|
|
bool hasAttribute(int attribute) const;
|
|
|
|
|
void setAttributes(int attributes);
|
2009-11-11 09:32:05 +01:00
|
|
|
|
2010-03-30 15:35:42 +02:00
|
|
|
bool hasGetter() const;
|
|
|
|
|
bool hasSetter() const;
|
2009-11-11 09:32:05 +01:00
|
|
|
|
2010-03-30 15:35:42 +02:00
|
|
|
const Name *getterName() const;
|
2009-11-11 09:32:05 +01:00
|
|
|
|
2010-03-30 15:35:42 +02:00
|
|
|
void setGetterName(const Name *getterName);
|
2009-11-11 09:32:05 +01:00
|
|
|
|
2010-03-30 15:35:42 +02:00
|
|
|
const Name *setterName() const;
|
|
|
|
|
void setSetterName(const Name *setterName);
|
2009-11-11 09:32:05 +01:00
|
|
|
|
2010-03-30 15:35:42 +02:00
|
|
|
void setType(const FullySpecifiedType &type);
|
2009-11-11 09:32:05 +01:00
|
|
|
|
|
|
|
|
// Symbol's interface
|
|
|
|
|
virtual FullySpecifiedType type() const;
|
|
|
|
|
|
2010-01-22 13:23:56 +01:00
|
|
|
virtual const ObjCPropertyDeclaration *asObjCPropertyDeclaration() const
|
2009-11-11 09:32:05 +01:00
|
|
|
{ return this; }
|
|
|
|
|
|
|
|
|
|
virtual ObjCPropertyDeclaration *asObjCPropertyDeclaration()
|
|
|
|
|
{ return this; }
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
virtual void visitSymbol0(SymbolVisitor *visitor);
|
|
|
|
|
|
|
|
|
|
private:
|
2009-12-01 12:46:15 +01:00
|
|
|
const Name *_getterName;
|
|
|
|
|
const Name *_setterName;
|
2010-09-03 12:11:15 +02:00
|
|
|
FullySpecifiedType _type;
|
|
|
|
|
int _propertyAttributes;
|
2009-11-11 09:32:05 +01:00
|
|
|
};
|
|
|
|
|
|
2011-02-04 09:52:39 +01:00
|
|
|
} // namespace CPlusPlus
|
2009-10-20 11:21:25 +02:00
|
|
|
|
2008-12-02 12:01:29 +01:00
|
|
|
|
|
|
|
|
#endif // CPLUSPLUS_SYMBOLS_H
|