diff --git a/src/libs/cplusplus/CppRewriter.cpp b/src/libs/cplusplus/CppRewriter.cpp index 2dcec18a419ce34ad9fa063b06b5f2897722e9e7..26c11596ddba3e3e1cdc9279ef4053788c587f8e 100644 --- a/src/libs/cplusplus/CppRewriter.cpp +++ b/src/libs/cplusplus/CppRewriter.cpp @@ -43,7 +43,7 @@ using namespace CPlusPlus; class CPlusPlus::Rewrite { public: - Rewrite(Control *control, const SubstitutionEnvironment &env) + Rewrite(Control *control, SubstitutionEnvironment *env) : control(control), env(env), rewriteType(this), rewriteName(this) {} class RewriteType: public TypeVisitor @@ -118,7 +118,7 @@ public: virtual void visit(NamedType *type) { - FullySpecifiedType ty = rewrite->env.apply(type->name(), rewrite); + FullySpecifiedType ty = rewrite->env->apply(type->name(), rewrite); if (! ty->isUndefinedType()) temps.append(rewrite->rewriteType(ty)); else { @@ -281,7 +281,7 @@ public: public: // attributes Control *control; - SubstitutionEnvironment env; + SubstitutionEnvironment *env; RewriteType rewriteType; RewriteName rewriteName; }; @@ -309,9 +309,9 @@ FullySpecifiedType ContextSubstitution::apply(const Name *name, Rewrite *rewrite << r.scope()->owner()->column(); ContextSubstitution subst(_context, s->scope()); - rewrite->env.enter(&subst); + rewrite->env->enter(&subst); FullySpecifiedType ty = rewrite->rewriteType(s->type()); - rewrite->env.leave(); + rewrite->env->leave(); return ty; } @@ -348,7 +348,7 @@ FullySpecifiedType SubstitutionMap::apply(const Name *name, Rewrite *) const } FullySpecifiedType CPlusPlus::rewriteType(const FullySpecifiedType &type, - const SubstitutionEnvironment &env, + SubstitutionEnvironment *env, Control *control) { Rewrite rewrite(control, env); @@ -356,7 +356,7 @@ FullySpecifiedType CPlusPlus::rewriteType(const FullySpecifiedType &type, } const Name *CPlusPlus::rewriteName(const Name *name, - const SubstitutionEnvironment &env, + SubstitutionEnvironment *env, Control *control) { Rewrite rewrite(control, env); diff --git a/src/libs/cplusplus/CppRewriter.h b/src/libs/cplusplus/CppRewriter.h index 4e6d14b3f5a03d7811796837b2fdfd9ab0ca696c..0e210611281e4eaee8e2919e84c2ab0fa07b08ea 100644 --- a/src/libs/cplusplus/CppRewriter.h +++ b/src/libs/cplusplus/CppRewriter.h @@ -50,9 +50,12 @@ public: class CPLUSPLUS_EXPORT SubstitutionEnvironment { + Q_DISABLE_COPY(SubstitutionEnvironment) QList<Substitution *> substs; public: + SubstitutionEnvironment() {} + FullySpecifiedType apply(const Name *name, Rewrite *rewrite) const { if (name) { @@ -107,11 +110,11 @@ private: }; CPLUSPLUS_EXPORT FullySpecifiedType rewriteType(const FullySpecifiedType &type, - const SubstitutionEnvironment &env, + SubstitutionEnvironment *env, Control *control); CPLUSPLUS_EXPORT const Name *rewriteName(const Name *name, - const SubstitutionEnvironment &env, + SubstitutionEnvironment *env, Control *control); } // end of namespace CPlusPlus diff --git a/src/libs/cplusplus/ResolveExpression.cpp b/src/libs/cplusplus/ResolveExpression.cpp index 3f2ae7ac82e12157d8e62e53544e2f481f1207ae..651af198717ce0e8eda5934b19faf716b17eb788 100644 --- a/src/libs/cplusplus/ResolveExpression.cpp +++ b/src/libs/cplusplus/ResolveExpression.cpp @@ -572,7 +572,7 @@ QList<LookupItem> ResolveExpression::getMembers(ClassOrNamespace *binding, const env.enter(&ctxSubst); env.enter(&map); - FullySpecifiedType instantiatedTy = rewriteType(decl->type(), env, _context.control().data()); + FullySpecifiedType instantiatedTy = rewriteType(decl->type(), &env, _context.control().data()); Overview oo; oo.setShowReturnTypes(true);