From 9608af7ad2c7a234f2665d70487edcdad17925e8 Mon Sep 17 00:00:00 2001 From: Roberto Raggi Date: Mon, 28 Mar 2011 13:21:37 +0200 Subject: Added support to C++ symbols rewriting. This should simplify full C++ template instantiations. Reviewed-by: Christian Kamm --- src/libs/3rdparty/cplusplus/Symbols.cpp | 128 ++++++++++++++++++++++++++++++++ 1 file changed, 128 insertions(+) (limited to 'src/libs/3rdparty/cplusplus/Symbols.cpp') diff --git a/src/libs/3rdparty/cplusplus/Symbols.cpp b/src/libs/3rdparty/cplusplus/Symbols.cpp index 390215f72d..3c07f1e769 100644 --- a/src/libs/3rdparty/cplusplus/Symbols.cpp +++ b/src/libs/3rdparty/cplusplus/Symbols.cpp @@ -24,6 +24,7 @@ #include "SymbolVisitor.h" #include "TypeMatcher.h" #include "Scope.h" +#include "Templates.h" using namespace CPlusPlus; @@ -32,6 +33,10 @@ UsingNamespaceDirective::UsingNamespaceDirective(TranslationUnit *translationUni : Symbol(translationUnit, sourceLocation, name) { } +UsingNamespaceDirective::UsingNamespaceDirective(Clone *clone, Subst *subst, UsingNamespaceDirective *original) + : Symbol(clone, subst, original) +{ } + UsingNamespaceDirective::~UsingNamespaceDirective() { } @@ -46,6 +51,11 @@ NamespaceAlias::NamespaceAlias(TranslationUnit *translationUnit, : Symbol(translationUnit, sourceLocation, name), _namespaceName(0) { } +NamespaceAlias::NamespaceAlias(Clone *clone, Subst *subst, NamespaceAlias *original) + : Symbol(clone, subst, original) + , _namespaceName(clone->name(original->_namespaceName, subst)) +{ } + NamespaceAlias::~NamespaceAlias() { } @@ -67,6 +77,10 @@ UsingDeclaration::UsingDeclaration(TranslationUnit *translationUnit, : Symbol(translationUnit, sourceLocation, name) { } +UsingDeclaration::UsingDeclaration(Clone *clone, Subst *subst, UsingDeclaration *original) + : Symbol(clone, subst, original) +{ } + UsingDeclaration::~UsingDeclaration() { } @@ -80,6 +94,11 @@ Declaration::Declaration(TranslationUnit *translationUnit, unsigned sourceLocati : Symbol(translationUnit, sourceLocation, name) { } +Declaration::Declaration(Clone *clone, Subst *subst, Declaration *original) + : Symbol(clone, subst, original) + , _type(clone->type(original->_type, subst)) +{ } + Declaration::~Declaration() { } @@ -111,6 +130,12 @@ Argument::Argument(TranslationUnit *translationUnit, unsigned sourceLocation, co _initializer(0) { } +Argument::Argument(Clone *clone, Subst *subst, Argument *original) + : Symbol(clone, subst, original) + , _initializer(clone->stringLiteral(original->_initializer)) + , _type(clone->type(original->_type, subst)) +{ } + Argument::~Argument() { } @@ -136,6 +161,11 @@ TypenameArgument::TypenameArgument(TranslationUnit *translationUnit, unsigned so : Symbol(translationUnit, sourceLocation, name) { } +TypenameArgument::TypenameArgument(Clone *clone, Subst *subst, TypenameArgument *original) + : Symbol(clone, subst, original) + , _type(clone->type(original->_type, subst)) +{ } + TypenameArgument::~TypenameArgument() { } @@ -153,6 +183,12 @@ Function::Function(TranslationUnit *translationUnit, unsigned sourceLocation, co _flags(0) { } +Function::Function(Clone *clone, Subst *subst, Function *original) + : Scope(clone, subst, original) + , _returnType(clone->type(original->_returnType, subst)) + , _flags(original->_flags) +{ } + Function::~Function() { } @@ -376,6 +412,10 @@ Block::Block(TranslationUnit *translationUnit, unsigned sourceLocation) : Scope(translationUnit, sourceLocation, /*name = */ 0) { } +Block::Block(Clone *clone, Subst *subst, Block *original) + : Scope(clone, subst, original) +{ } + Block::~Block() { } @@ -395,6 +435,10 @@ Enum::Enum(TranslationUnit *translationUnit, unsigned sourceLocation, const Name : Scope(translationUnit, sourceLocation, name) { } +Enum::Enum(Clone *clone, Subst *subst, Enum *original) + : Scope(clone, subst, original) +{ } + Enum::~Enum() { } @@ -439,6 +483,10 @@ Template::Template(TranslationUnit *translationUnit, unsigned sourceLocation, co : Scope(translationUnit, sourceLocation, name) { } +Template::Template(Clone *clone, Subst *subst, Template *original) + : Scope(clone, subst, original) +{ } + Template::~Template() { } @@ -496,6 +544,10 @@ Namespace::Namespace(TranslationUnit *translationUnit, unsigned sourceLocation, : Scope(translationUnit, sourceLocation, name) { } +Namespace::Namespace(Clone *clone, Subst *subst, Namespace *original) + : Scope(clone, subst, original) +{ } + Namespace::~Namespace() { } @@ -539,6 +591,12 @@ BaseClass::BaseClass(TranslationUnit *translationUnit, unsigned sourceLocation, _isVirtual(false) { } +BaseClass::BaseClass(Clone *clone, Subst *subst, BaseClass *original) + : Symbol(clone, subst, original) + , _isVirtual(original->_isVirtual) + , _type(clone->type(original->_type, subst)) +{ } + BaseClass::~BaseClass() { } @@ -562,6 +620,10 @@ ForwardClassDeclaration::ForwardClassDeclaration(TranslationUnit *translationUni : Symbol(translationUnit, sourceLocation, name) { } +ForwardClassDeclaration::ForwardClassDeclaration(Clone *clone, Subst *subst, ForwardClassDeclaration *original) + : Symbol(clone, subst, original) +{ } + ForwardClassDeclaration::~ForwardClassDeclaration() { } @@ -600,6 +662,14 @@ Class::Class(TranslationUnit *translationUnit, unsigned sourceLocation, const Na _key(ClassKey) { } +Class::Class(Clone *clone, Subst *subst, Class *original) + : Scope(clone, subst, original) + , _key(original->_key) +{ + for (size_t i = 0; i < original->_baseClasses.size(); ++i) + addBaseClass(clone->symbol(original->_baseClasses.at(i), subst)->asBaseClass()); +} + Class::~Class() { } @@ -672,6 +742,12 @@ QtPropertyDeclaration::QtPropertyDeclaration(TranslationUnit *translationUnit, u , _flags(NoFlags) { } +QtPropertyDeclaration::QtPropertyDeclaration(Clone *clone, Subst *subst, QtPropertyDeclaration *original) + : Symbol(clone, subst, original) + , _type(clone->type(original->_type, subst)) + , _flags(original->_flags) +{ } + QtPropertyDeclaration::~QtPropertyDeclaration() { } @@ -695,6 +771,10 @@ QtEnum::QtEnum(TranslationUnit *translationUnit, unsigned sourceLocation, const : Symbol(translationUnit, sourceLocation, name) { } +QtEnum::QtEnum(Clone *clone, Subst *subst, QtEnum *original) + : Symbol(clone, subst, original) +{ } + QtEnum::~QtEnum() { } @@ -709,6 +789,10 @@ ObjCBaseClass::ObjCBaseClass(TranslationUnit *translationUnit, unsigned sourceLo : Symbol(translationUnit, sourceLocation, name) { } +ObjCBaseClass::ObjCBaseClass(Clone *clone, Subst *subst, ObjCBaseClass *original) + : Symbol(clone, subst, original) +{ } + ObjCBaseClass::~ObjCBaseClass() { } @@ -722,6 +806,10 @@ ObjCBaseProtocol::ObjCBaseProtocol(TranslationUnit *translationUnit, unsigned so : Symbol(translationUnit, sourceLocation, name) { } +ObjCBaseProtocol::ObjCBaseProtocol(Clone *clone, Subst *subst, ObjCBaseProtocol *original) + : Symbol(clone, subst, original) +{ } + ObjCBaseProtocol::~ObjCBaseProtocol() { } @@ -736,7 +824,18 @@ ObjCClass::ObjCClass(TranslationUnit *translationUnit, unsigned sourceLocation, _categoryName(0), _baseClass(0), _isInterface(false) +{ } + +ObjCClass::ObjCClass(Clone *clone, Subst *subst, ObjCClass *original) + : Scope(clone, subst, original) + , _categoryName(clone->name(original->_categoryName, subst)) + , _baseClass(0) + , _isInterface(original->_isInterface) { + if (original->_baseClass) + _baseClass = clone->symbol(original->_baseClass, subst)->asObjCBaseClass(); + for (size_t i = 0; i < original->_protocols.size(); ++i) + addProtocol(clone->symbol(original->_protocols.at(i), subst)->asObjCBaseProtocol()); } ObjCClass::~ObjCClass() @@ -819,6 +918,13 @@ ObjCProtocol::ObjCProtocol(TranslationUnit *translationUnit, unsigned sourceLoca { } +ObjCProtocol::ObjCProtocol(Clone *clone, Subst *subst, ObjCProtocol *original) + : Scope(clone, subst, original) +{ + for (size_t i = 0; i < original->_protocols.size(); ++i) + addProtocol(clone->symbol(original->_protocols.at(i), subst)->asObjCBaseProtocol()); +} + ObjCProtocol::~ObjCProtocol() {} @@ -873,6 +979,10 @@ ObjCForwardClassDeclaration::ObjCForwardClassDeclaration(TranslationUnit *transl { } +ObjCForwardClassDeclaration::ObjCForwardClassDeclaration(Clone *clone, Subst *subst, ObjCForwardClassDeclaration *original) + : Symbol(clone, subst, original) +{ } + ObjCForwardClassDeclaration::~ObjCForwardClassDeclaration() {} @@ -913,6 +1023,10 @@ ObjCForwardProtocolDeclaration::ObjCForwardProtocolDeclaration(TranslationUnit * { } +ObjCForwardProtocolDeclaration::ObjCForwardProtocolDeclaration(Clone *clone, Subst *subst, ObjCForwardProtocolDeclaration *original) + : Symbol(clone, subst, original) +{ } + ObjCForwardProtocolDeclaration::~ObjCForwardProtocolDeclaration() {} @@ -952,6 +1066,12 @@ ObjCMethod::ObjCMethod(TranslationUnit *translationUnit, unsigned sourceLocation _flags(0) { } +ObjCMethod::ObjCMethod(Clone *clone, Subst *subst, ObjCMethod *original) + : Scope(clone, subst, original) + , _returnType(clone->type(original->_returnType, subst)) + , _flags(original->_flags) +{ } + ObjCMethod::~ObjCMethod() { } @@ -1048,6 +1168,14 @@ ObjCPropertyDeclaration::ObjCPropertyDeclaration(TranslationUnit *translationUni _propertyAttributes(None) {} +ObjCPropertyDeclaration::ObjCPropertyDeclaration(Clone *clone, Subst *subst, ObjCPropertyDeclaration *original) + : Symbol(clone, subst, original) + , _getterName(clone->name(original->_getterName, subst)) + , _setterName(clone->name(original->_setterName, subst)) + , _type(clone->type(original->_type, subst)) + , _propertyAttributes(original->_propertyAttributes) +{ } + ObjCPropertyDeclaration::~ObjCPropertyDeclaration() {} -- cgit v1.2.3