From 55936532c295a3eea221ac6aaca7353f41761c76 Mon Sep 17 00:00:00 2001
From: Roberto Raggi <roberto.raggi@nokia.com>
Date: Mon, 19 Jul 2010 19:24:31 +0200
Subject: [PATCH] Disable the copy of SemanticEnvironment.

---
 src/libs/cplusplus/CppRewriter.cpp       | 14 +++++++-------
 src/libs/cplusplus/CppRewriter.h         |  7 +++++--
 src/libs/cplusplus/ResolveExpression.cpp |  2 +-
 3 files changed, 13 insertions(+), 10 deletions(-)

diff --git a/src/libs/cplusplus/CppRewriter.cpp b/src/libs/cplusplus/CppRewriter.cpp
index 2dcec18a419..26c11596ddb 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 4e6d14b3f5a..0e210611281 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 3f2ae7ac82e..651af198717 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);
-- 
GitLab