From fade61a8a9397f44d31c5ab4ede57e5259de8880 Mon Sep 17 00:00:00 2001
From: Roberto Raggi <roberto.raggi@nokia.com>
Date: Tue, 1 Dec 2009 11:33:13 +0100
Subject: [PATCH] Use const literals.

---
 src/libs/cplusplus/CheckUndefinedSymbols.cpp  | 26 ++---
 src/libs/cplusplus/CheckUndefinedSymbols.h    |  2 +-
 src/libs/cplusplus/CppBindings.cpp            | 26 ++---
 src/libs/cplusplus/CppBindings.h              | 16 ++--
 src/libs/cplusplus/CppDocument.cpp            |  6 +-
 src/libs/cplusplus/FindUsages.cpp             |  8 +-
 src/libs/cplusplus/FindUsages.h               |  4 +-
 src/libs/cplusplus/GenTemplateInstance.cpp    |  8 +-
 src/libs/cplusplus/GenTemplateInstance.h      |  2 +-
 src/libs/cplusplus/LookupContext.cpp          | 10 +-
 src/libs/cplusplus/LookupContext.h            |  2 +-
 src/libs/cplusplus/NamePrettyPrinter.cpp      |  9 +-
 src/libs/cplusplus/ResolveExpression.cpp      |  4 +-
 src/plugins/cppeditor/cppeditor.cpp           |  8 +-
 src/plugins/cppeditor/cpphoverhandler.cpp     |  4 +-
 src/plugins/cpptools/cppfindreferences.cpp    | 12 +--
 src/plugins/qmleditor/qmleditor.cpp           |  2 +-
 .../qmleditor/qmlexpressionundercursor.cpp    |  2 +-
 src/shared/cplusplus/ASTVisitor.cpp           | 12 +--
 src/shared/cplusplus/ASTVisitor.h             | 12 +--
 src/shared/cplusplus/CheckDeclaration.cpp     |  4 +-
 src/shared/cplusplus/CheckName.cpp            | 12 +--
 src/shared/cplusplus/CheckSpecifier.cpp       |  4 +-
 src/shared/cplusplus/Control.cpp              | 74 +++++++--------
 src/shared/cplusplus/Control.h                | 39 ++++----
 src/shared/cplusplus/DiagnosticClient.h       |  2 +-
 src/shared/cplusplus/LiteralTable.h           | 94 +++++++++----------
 src/shared/cplusplus/Name.h                   |  5 +-
 src/shared/cplusplus/Names.cpp                | 32 +++----
 src/shared/cplusplus/Names.h                  | 26 ++---
 src/shared/cplusplus/Parser.cpp               |  6 +-
 src/shared/cplusplus/Scope.cpp                |  4 +-
 src/shared/cplusplus/Scope.h                  |  2 +-
 src/shared/cplusplus/Symbol.cpp               | 16 ++--
 src/shared/cplusplus/Symbol.h                 | 10 +-
 src/shared/cplusplus/Token.h                  |  8 +-
 src/shared/cplusplus/TranslationUnit.cpp      | 36 +++----
 src/shared/cplusplus/TranslationUnit.h        | 28 +++---
 38 files changed, 286 insertions(+), 291 deletions(-)

diff --git a/src/libs/cplusplus/CheckUndefinedSymbols.cpp b/src/libs/cplusplus/CheckUndefinedSymbols.cpp
index 51d02a0dc47..f3d27df502d 100644
--- a/src/libs/cplusplus/CheckUndefinedSymbols.cpp
+++ b/src/libs/cplusplus/CheckUndefinedSymbols.cpp
@@ -65,7 +65,7 @@ void CheckUndefinedSymbols::operator()(AST *ast)
 QByteArray CheckUndefinedSymbols::templateParameterName(NameAST *ast) const
 {
     if (ast && ast->name) {
-        if (Identifier *id = ast->name->identifier())
+        if (const Identifier *id = ast->name->identifier())
             return QByteArray::fromRawData(id->chars(), id->size());
     }
 
@@ -92,7 +92,7 @@ bool CheckUndefinedSymbols::isType(const QByteArray &name) const
             Symbol *member = members->symbolAt(m);
 
             if (member->isTypedef() && member->isDeclaration()) {
-                if (Identifier *id = member->identifier()) {
+                if (const Identifier *id = member->identifier()) {
                     if (name == id->chars())
                         return true;
                 }
@@ -114,7 +114,7 @@ bool CheckUndefinedSymbols::isType(const QByteArray &name) const
     return _types.contains(name);
 }
 
-bool CheckUndefinedSymbols::isType(Identifier *id) const
+bool CheckUndefinedSymbols::isType(const Identifier *id) const
 {
     if (! id)
         return false;
@@ -127,7 +127,7 @@ void CheckUndefinedSymbols::addType(Name *name)
     if (! name)
         return;
 
-    if (Identifier *id = name->identifier())
+    if (const Identifier *id = name->identifier())
         _types.insert(QByteArray(id->chars(), id->size()));
 }
 
@@ -136,7 +136,7 @@ void CheckUndefinedSymbols::addProtocol(Name *name)
     if (!name)
         return;
 
-    if (Identifier *id = name->identifier())
+    if (const Identifier *id = name->identifier())
         _protocols.insert(QByteArray(id->chars(), id->size()));
 }
 
@@ -176,7 +176,7 @@ void CheckUndefinedSymbols::buildTypeMap(NamespaceBinding *binding, QSet<Namespa
     if (! processed->contains(binding)) {
         processed->insert(binding);
 
-        if (Identifier *id = binding->identifier()) {
+        if (const Identifier *id = binding->identifier()) {
             _namespaceNames.insert(QByteArray(id->chars(), id->size()));
         }
 
@@ -256,7 +256,7 @@ bool CheckUndefinedSymbols::visit(NamedTypeSpecifierAST *ast)
             unsigned line, col;
             getTokenStartPosition(ast->firstToken(), &line, &col);
             // qWarning() << _doc->fileName() << line << col;
-        } else if (Identifier *id = ast->name->name->identifier()) {
+        } else if (const Identifier *id = ast->name->name->identifier()) {
             if (! isType(id)) {
                 if (FunctionDeclaratorAST *functionDeclarator = currentFunctionDeclarator()) {
                     if (functionDeclarator->as_cpp_initializer)
@@ -368,7 +368,7 @@ bool CheckUndefinedSymbols::visit(BaseSpecifierAST *base)
         bool resolvedBaseClassName = false;
 
         if (Name *name = nameAST->name) {
-            Identifier *id = name->identifier();
+            const Identifier *id = name->identifier();
             const QByteArray spell = QByteArray::fromRawData(id->chars(), id->size());
             if (isType(spell))
                 resolvedBaseClassName = true;
@@ -406,7 +406,7 @@ bool CheckUndefinedSymbols::visit(QualifiedNameAST *ast)
         QualifiedNameId *q = ast->name->asQualifiedNameId();
         for (unsigned i = 0; i < q->nameCount() - 1; ++i) {
             Name *name = q->nameAt(i);
-            if (Identifier *id = name->identifier()) {
+            if (const Identifier *id = name->identifier()) {
                 const QByteArray spell = QByteArray::fromRawData(id->chars(), id->size());
                 if (! (_namespaceNames.contains(spell) || isType(id))) {
                     translationUnit()->warning(ast->firstToken(),
@@ -475,7 +475,7 @@ bool CheckUndefinedSymbols::visit(ObjCClassDeclarationAST *ast)
         bool resolvedSuperClassName = false;
 
         if (Name *name = nameAST->name) {
-            Identifier *id = name->identifier();
+            const Identifier *id = name->identifier();
             const QByteArray spell = QByteArray::fromRawData(id->chars(), id->size());
             if (isType(spell))
                 resolvedSuperClassName = true;
@@ -497,7 +497,7 @@ bool CheckUndefinedSymbols::visit(ObjCProtocolRefsAST *ast)
             bool resolvedProtocolName = false;
 
             if (Name *name = nameAST->name) {
-                Identifier *id = name->identifier();
+                const Identifier *id = name->identifier();
                 const QByteArray spell = QByteArray::fromRawData(id->chars(), id->size());
                 if (isProtocol(spell))
                     resolvedProtocolName = true;
@@ -522,11 +522,11 @@ bool CheckUndefinedSymbols::visit(ObjCProtocolRefsAST *ast)
 bool CheckUndefinedSymbols::visit(ObjCPropertyDeclarationAST *ast)
 {
     for (List<ObjCPropertyDeclaration *> *iter = ast->symbols; iter; iter = iter->next) {
-        if (Name *getterName = iter->value->getterName()) {
+        if (/*Name *getterName = */ iter->value->getterName()) {
             // FIXME: resolve the symbol for the name, and check its signature.
         }
 
-        if (Name *setterName = iter->value->setterName()) {
+        if (/*Name *setterName = */ iter->value->setterName()) {
             // FIXME: resolve the symbol for the name, and check its signature.
         }
     }
diff --git a/src/libs/cplusplus/CheckUndefinedSymbols.h b/src/libs/cplusplus/CheckUndefinedSymbols.h
index 4a13b6ee2dc..e6610a2564f 100644
--- a/src/libs/cplusplus/CheckUndefinedSymbols.h
+++ b/src/libs/cplusplus/CheckUndefinedSymbols.h
@@ -52,7 +52,7 @@ public:
 protected:
     using ASTVisitor::visit;
 
-    bool isType(Identifier *id) const;
+    bool isType(const Identifier *id) const;
     bool isType(const QByteArray &name) const;
 
     void addType(Name *name);
diff --git a/src/libs/cplusplus/CppBindings.cpp b/src/libs/cplusplus/CppBindings.cpp
index c916ab4b8b1..2faf1aa6b7f 100644
--- a/src/libs/cplusplus/CppBindings.cpp
+++ b/src/libs/cplusplus/CppBindings.cpp
@@ -57,7 +57,7 @@ Location::Location(Symbol *symbol)
       _sourceLocation(symbol->sourceLocation())
 { }
 
-Location::Location(StringLiteral *fileId, unsigned sourceLocation)
+Location::Location(const StringLiteral *fileId, unsigned sourceLocation)
     : _fileId(fileId), _sourceLocation(sourceLocation)
 { }
 
@@ -93,7 +93,7 @@ NameId *NamespaceBinding::name() const
     return 0;
 }
 
-Identifier *NamespaceBinding::identifier() const
+const Identifier *NamespaceBinding::identifier() const
 {
     if (NameId *nameId = name())
         return nameId->identifier();
@@ -113,7 +113,7 @@ NamespaceBinding *NamespaceBinding::globalNamespaceBinding()
     return it;
 }
 
-Binding *NamespaceBinding::findClassOrNamespaceBinding(Identifier *id, QSet<Binding *> *processed)
+Binding *NamespaceBinding::findClassOrNamespaceBinding(const Identifier *id, QSet<Binding *> *processed)
 {
     if (processed->contains(this))
         return 0;
@@ -156,7 +156,7 @@ ClassBinding *NamespaceBinding::findClassBinding(Name *name, QSet<Binding *> *pr
         Binding *current = this;
 
         for (unsigned i = 0; i < q->nameCount(); ++i) {
-            Identifier *nameId = q->nameAt(i)->identifier();
+            const Identifier *nameId = q->nameAt(i)->identifier();
             if (! nameId)
                 return 0;
 
@@ -173,7 +173,7 @@ ClassBinding *NamespaceBinding::findClassBinding(Name *name, QSet<Binding *> *pr
 
     processed->insert(this);
 
-    Identifier *id = name->identifier();
+    const Identifier *id = name->identifier();
 
     foreach (ClassBinding *classBinding, classBindings) {
         if (id->isEqualTo(classBinding->identifier()))
@@ -306,7 +306,7 @@ static void closure(const Location &loc,
 
     Q_ASSERT(name->isNameId());
 
-    Identifier *id = name->asNameId()->identifier();
+    const Identifier *id = name->asNameId()->identifier();
     bool ignoreUsingDirectives = false;
 
     foreach (Namespace *symbol, binding->symbols) {
@@ -394,7 +394,7 @@ QByteArray NamespaceBinding::qualifiedId() const
     s.append(parent->qualifiedId());
     s.append("::");
 
-    if (Identifier *id = identifier())
+    if (const Identifier *id = identifier())
         s.append(id->chars(), id->size());
 
     else
@@ -409,7 +409,7 @@ QByteArray ClassBinding::qualifiedId() const
     QByteArray s = parent->qualifiedId();
     s += "::";
 
-    if (Identifier *id = identifier())
+    if (const Identifier *id = identifier())
         s.append(id->chars(), id->size());
 
     else
@@ -418,7 +418,7 @@ QByteArray ClassBinding::qualifiedId() const
     return s;
 }
 
-Binding *ClassBinding::findClassOrNamespaceBinding(Identifier *id, QSet<Binding *> *processed)
+Binding *ClassBinding::findClassOrNamespaceBinding(const Identifier *id, QSet<Binding *> *processed)
 {
     if (id->isEqualTo(identifier()))
         return this;
@@ -461,7 +461,7 @@ ClassBinding *ClassBinding::findClassBinding(Name *name, QSet<Binding *> *proces
         Binding *currentBinding = this;
 
         for (unsigned i = 0; i < q->nameCount() - 1; ++i) {
-            Identifier *id = q->nameAt(i)->identifier();
+            const Identifier *id = q->nameAt(i)->identifier();
             if (! id)
                 return 0;
 
@@ -479,12 +479,12 @@ ClassBinding *ClassBinding::findClassBinding(Name *name, QSet<Binding *> *proces
         return 0;
     }
 
-    if (Identifier *id = name->identifier()) {
+    if (const Identifier *id = name->identifier()) {
         if (id->isEqualTo(identifier()))
             return this;
 
         foreach (ClassBinding *nestedClassBinding, children) {
-            if (Identifier *nestedClassId = nestedClassBinding->identifier()) {
+            if (const Identifier *nestedClassId = nestedClassBinding->identifier()) {
                 if (nestedClassId->isEqualTo(id))
                     return nestedClassBinding;
             }
@@ -557,7 +557,7 @@ Name *ClassBinding::name() const
     return symbols.first()->name();
 }
 
-Identifier *ClassBinding::identifier() const
+const Identifier *ClassBinding::identifier() const
 {
     if (Name *n = name())
         return n->identifier();
diff --git a/src/libs/cplusplus/CppBindings.h b/src/libs/cplusplus/CppBindings.h
index 0ba95de0984..4bce41bcbc5 100644
--- a/src/libs/cplusplus/CppBindings.h
+++ b/src/libs/cplusplus/CppBindings.h
@@ -53,7 +53,7 @@ class CPLUSPLUS_EXPORT Location
 public:
     Location();
     Location(Symbol *symbol);
-    Location(StringLiteral *fileId, unsigned sourceLocation);
+    Location(const StringLiteral *fileId, unsigned sourceLocation);
 
     inline bool isValid() const
     { return _fileId != 0; }
@@ -61,14 +61,14 @@ public:
     inline operator bool() const
     { return _fileId != 0; }
 
-    inline StringLiteral *fileId() const
+    inline const StringLiteral *fileId() const
     { return _fileId; }
 
     inline unsigned sourceLocation() const
     { return _sourceLocation; }
 
 private:
-    StringLiteral *_fileId;
+    const StringLiteral *_fileId;
     unsigned _sourceLocation;
 };
 
@@ -85,7 +85,7 @@ public:
     virtual ClassBinding *asClassBinding() { return 0; }
 
     virtual ClassBinding *findClassBinding(Name *name, QSet<Binding *> *processed) = 0;
-    virtual Binding *findClassOrNamespaceBinding(Identifier *id, QSet<Binding *> *processed) = 0;
+    virtual Binding *findClassOrNamespaceBinding(const Identifier *id, QSet<Binding *> *processed) = 0;
 };
 
 class CPLUSPLUS_EXPORT NamespaceBinding: public Binding
@@ -101,7 +101,7 @@ public:
     NameId *name() const;
 
     /// Returns this binding's identifier.
-    Identifier *identifier() const;
+    const Identifier *identifier() const;
 
     /// Returns the binding for the global namespace (aka ::).
     NamespaceBinding *globalNamespaceBinding();
@@ -117,7 +117,7 @@ public:
                                        bool lookAtParent = true);
 
     virtual ClassBinding *findClassBinding(Name *name, QSet<Binding *> *processed);
-    virtual Binding *findClassOrNamespaceBinding(Identifier *id, QSet<Binding *> *processed);
+    virtual Binding *findClassOrNamespaceBinding(const Identifier *id, QSet<Binding *> *processed);
 
     /// Helpers.
     virtual QByteArray qualifiedId() const;
@@ -168,11 +168,11 @@ public:
     Name *name() const;
 
     /// Returns this binding's identifier.
-    Identifier *identifier() const;
+    const Identifier *identifier() const;
     virtual QByteArray qualifiedId() const;
 
     virtual ClassBinding *findClassBinding(Name *name, QSet<Binding *> *processed);
-    virtual Binding *findClassOrNamespaceBinding(Identifier *id, QSet<Binding *> *processed);
+    virtual Binding *findClassOrNamespaceBinding(const Identifier *id, QSet<Binding *> *processed);
 
     void dump();
 
diff --git a/src/libs/cplusplus/CppDocument.cpp b/src/libs/cplusplus/CppDocument.cpp
index 24614c06e19..ba6409280ac 100644
--- a/src/libs/cplusplus/CppDocument.cpp
+++ b/src/libs/cplusplus/CppDocument.cpp
@@ -66,7 +66,7 @@ public:
     { }
 
     virtual void report(int level,
-                        StringLiteral *fileId,
+                        const StringLiteral *fileId,
                         unsigned line, unsigned column,
                         const char *format, va_list ap)
     {
@@ -118,8 +118,8 @@ Document::Document(const QString &fileName)
     _control->setDiagnosticClient(new DocumentDiagnosticClient(this, &_diagnosticMessages));
 
     const QByteArray localFileName = fileName.toUtf8();
-    StringLiteral *fileId = _control->findOrInsertStringLiteral(localFileName.constData(),
-                                                                localFileName.size());
+    const StringLiteral *fileId = _control->findOrInsertStringLiteral(localFileName.constData(),
+                                                                      localFileName.size());
     _translationUnit = new TranslationUnit(_control, fileId);
     _translationUnit->setQtMocRunEnabled(true);
     _translationUnit->setObjCEnabled(true);
diff --git a/src/libs/cplusplus/FindUsages.cpp b/src/libs/cplusplus/FindUsages.cpp
index 396e9c8a5e7..bc9175740f8 100644
--- a/src/libs/cplusplus/FindUsages.cpp
+++ b/src/libs/cplusplus/FindUsages.cpp
@@ -57,7 +57,7 @@ void FindUsages::setGlobalNamespaceBinding(NamespaceBindingPtr globalNamespaceBi
     _globalNamespaceBinding = globalNamespaceBinding;
 }
 
-QList<int> FindUsages::operator()(Symbol *symbol, Identifier *id, AST *ast)
+QList<int> FindUsages::operator()(Symbol *symbol, const Identifier *id, AST *ast)
 {
     _processed.clear();
     _references.clear();
@@ -344,7 +344,7 @@ bool FindUsages::visit(QualifiedNameAST *ast)
 
 bool FindUsages::visit(EnumeratorAST *ast)
 {
-    Identifier *id = identifier(ast->identifier_token);
+    const Identifier *id = identifier(ast->identifier_token);
     if (id == _id) {
         LookupContext context = currentContext(ast);
         const QList<Symbol *> candidates = context.resolve(control()->nameId(id));
@@ -358,7 +358,7 @@ bool FindUsages::visit(EnumeratorAST *ast)
 
 bool FindUsages::visit(SimpleNameAST *ast)
 {
-    Identifier *id = identifier(ast->identifier_token);
+    const Identifier *id = identifier(ast->identifier_token);
     if (id == _id) {
         LookupContext context = currentContext(ast);
         const QList<Symbol *> candidates = context.resolve(ast->name);
@@ -370,7 +370,7 @@ bool FindUsages::visit(SimpleNameAST *ast)
 
 bool FindUsages::visit(DestructorNameAST *ast)
 {
-    Identifier *id = identifier(ast->identifier_token);
+    const Identifier *id = identifier(ast->identifier_token);
     if (id == _id) {
         LookupContext context = currentContext(ast);
         const QList<Symbol *> candidates = context.resolve(ast->name);
diff --git a/src/libs/cplusplus/FindUsages.h b/src/libs/cplusplus/FindUsages.h
index 667ad18485a..4109a252df1 100644
--- a/src/libs/cplusplus/FindUsages.h
+++ b/src/libs/cplusplus/FindUsages.h
@@ -64,7 +64,7 @@ public:
 
     void setGlobalNamespaceBinding(NamespaceBindingPtr globalNamespaceBinding);
 
-    QList<int> operator()(Symbol *symbol, Identifier *id, AST *ast);
+    QList<int> operator()(Symbol *symbol, const Identifier *id, AST *ast);
 
 protected:
     using ASTVisitor::visit;
@@ -101,7 +101,7 @@ protected:
 
 private:
     QFutureInterface<Usage> *_future;
-    Identifier *_id;
+    const Identifier *_id;
     Symbol *_declSymbol;
     Document::Ptr _doc;
     Snapshot _snapshot;
diff --git a/src/libs/cplusplus/GenTemplateInstance.cpp b/src/libs/cplusplus/GenTemplateInstance.cpp
index 0267efeefa8..eaa515923a3 100644
--- a/src/libs/cplusplus/GenTemplateInstance.cpp
+++ b/src/libs/cplusplus/GenTemplateInstance.cpp
@@ -55,7 +55,7 @@ public:
     FullySpecifiedType apply(Name *name);
     FullySpecifiedType apply(const FullySpecifiedType &type);
 
-    int findSubstitution(Identifier *id) const;
+    int findSubstitution(const Identifier *id) const;
     FullySpecifiedType applySubstitution(int index) const;
 
 private:
@@ -218,7 +218,7 @@ private:
         Control *control() const
         { return q->control(); }
 
-        int findSubstitution(Identifier *id) const
+        int findSubstitution(const Identifier *id) const
         { return q->findSubstitution(id); }
 
         FullySpecifiedType applySubstitution(int index) const
@@ -337,12 +337,12 @@ FullySpecifiedType ApplySubstitution::apply(const FullySpecifiedType &type)
     return ty;
 }
 
-int ApplySubstitution::findSubstitution(Identifier *id) const
+int ApplySubstitution::findSubstitution(const Identifier *id) const
 {
     Q_ASSERT(id != 0);
 
     for (int index = 0; index < substitution.size(); ++index) {
-        QPair<Identifier *, FullySpecifiedType> s = substitution.at(index);
+        QPair<const Identifier *, FullySpecifiedType> s = substitution.at(index);
 
         if (id->isEqualTo(s.first))
             return index;
diff --git a/src/libs/cplusplus/GenTemplateInstance.h b/src/libs/cplusplus/GenTemplateInstance.h
index a59d1a74717..8db5bd9d934 100644
--- a/src/libs/cplusplus/GenTemplateInstance.h
+++ b/src/libs/cplusplus/GenTemplateInstance.h
@@ -44,7 +44,7 @@ namespace CPlusPlus {
 class CPLUSPLUS_EXPORT GenTemplateInstance
 {
 public:
-    typedef QList< QPair<Identifier *, FullySpecifiedType> > Substitution;
+    typedef QList< QPair<const Identifier *, FullySpecifiedType> > Substitution;
 
 public:
     GenTemplateInstance(const LookupContext &context, const Substitution &substitution);
diff --git a/src/libs/cplusplus/LookupContext.cpp b/src/libs/cplusplus/LookupContext.cpp
index f125d202cd4..dbfa6710210 100644
--- a/src/libs/cplusplus/LookupContext.cpp
+++ b/src/libs/cplusplus/LookupContext.cpp
@@ -240,7 +240,7 @@ QList<Symbol *> LookupContext::resolve(Name *name, const QList<Scope *> &visible
     else if (OperatorNameId *opId = name->asOperatorNameId())
         return resolveOperatorNameId(opId, visibleScopes, mode);
 
-    else if (Identifier *id = name->identifier()) {
+    else if (const Identifier *id = name->identifier()) {
         for (int scopeIndex = 0; scopeIndex < visibleScopes.size(); ++scopeIndex) {
             Scope *scope = visibleScopes.at(scopeIndex);
 
@@ -251,7 +251,7 @@ QList<Symbol *> LookupContext::resolve(Name *name, const QList<Scope *> &visible
                 else if (! maybeValidSymbol(symbol, mode, candidates))
                     continue; // skip it, we're not looking for this kind of symbols
 
-                else if (Identifier *symbolId = symbol->identifier()) {
+                else if (const Identifier *symbolId = symbol->identifier()) {
                     if (! symbolId->isEqualTo(id))
                         continue; // skip it, the symbol's id is not compatible with this lookup.
                 }
@@ -265,7 +265,7 @@ QList<Symbol *> LookupContext::resolve(Name *name, const QList<Scope *> &visible
                         Name *classOrNamespaceName = control()->qualifiedNameId(q->names(),
                                                                                 q->nameCount() - 1);
 
-                        if (Identifier *classOrNamespaceNameId = identifier(classOrNamespaceName)) {
+                        if (const Identifier *classOrNamespaceNameId = identifier(classOrNamespaceName)) {
                             if (classOrNamespaceNameId->isEqualTo(id))
                                 continue;
                         }
@@ -299,7 +299,7 @@ QList<Symbol *> LookupContext::resolve(Name *name, const QList<Scope *> &visible
     return candidates;
 }
 
-Identifier *LookupContext::identifier(const Name *name) const
+const Identifier *LookupContext::identifier(const Name *name) const
 {
     if (name)
         return name->identifier();
@@ -667,7 +667,7 @@ Symbol *LookupContext::canonicalSymbol(Symbol *symbol,
     if (! canonicalSymbol)
         return 0;
 
-    if (Identifier *symbolId = canonicalSymbol->identifier()) {
+    if (const Identifier *symbolId = canonicalSymbol->identifier()) {
         if (symbolId && canonicalSymbol->type()->isFunctionType()) {
             Class *enclosingClass = canonicalSymbol->scope()->owner()->asClass();
             const QList<ClassBinding *> classBindings = visibleClassBindings(enclosingClass, globalNamespace);
diff --git a/src/libs/cplusplus/LookupContext.h b/src/libs/cplusplus/LookupContext.h
index 3eca2fce315..06339d0a980 100644
--- a/src/libs/cplusplus/LookupContext.h
+++ b/src/libs/cplusplus/LookupContext.h
@@ -198,7 +198,7 @@ private:
     QList<Scope *> resolveNestedNameSpecifier(QualifiedNameId *q,
                                                const QList<Scope *> &visibleScopes) const;
 
-    Identifier *identifier(const Name *name) const;
+    const Identifier *identifier(const Name *name) const;
 
     QList<Scope *> buildVisibleScopes();
 
diff --git a/src/libs/cplusplus/NamePrettyPrinter.cpp b/src/libs/cplusplus/NamePrettyPrinter.cpp
index cee4f77fea9..607d3a65923 100644
--- a/src/libs/cplusplus/NamePrettyPrinter.cpp
+++ b/src/libs/cplusplus/NamePrettyPrinter.cpp
@@ -64,7 +64,7 @@ QString NamePrettyPrinter::switchName(const QString &name)
 
 void NamePrettyPrinter::visit(NameId *name)
 {
-    Identifier *id = name->identifier();
+    const Identifier *id = name->identifier();
     if (id)
         _name = QString::fromLatin1(id->chars(), id->size());
     else
@@ -73,7 +73,7 @@ void NamePrettyPrinter::visit(NameId *name)
 
 void NamePrettyPrinter::visit(TemplateNameId *name)
 {
-    Identifier *id = name->identifier();
+    const Identifier *id = name->identifier();
     if (id)
         _name = QString::fromLatin1(id->chars(), id->size());
     else
@@ -95,7 +95,7 @@ void NamePrettyPrinter::visit(TemplateNameId *name)
 
 void NamePrettyPrinter::visit(DestructorNameId *name)
 {
-    Identifier *id = name->identifier();
+    const Identifier *id = name->identifier();
     _name += QLatin1Char('~');
     _name += QString::fromLatin1(id->chars(), id->size());
 }
@@ -261,8 +261,7 @@ void NamePrettyPrinter::visit(SelectorNameId *name)
         if (!n)
             continue;
 
-        Identifier *id = n->identifier();
-        if (id) {
+        if (const Identifier *id = n->identifier()) {
             _name += QString::fromLatin1(id->chars(), id->size());
 
             if (name->hasArguments() || name->nameCount() > 1)
diff --git a/src/libs/cplusplus/ResolveExpression.cpp b/src/libs/cplusplus/ResolveExpression.cpp
index 2d2b3defa1a..3701728557d 100644
--- a/src/libs/cplusplus/ResolveExpression.cpp
+++ b/src/libs/cplusplus/ResolveExpression.cpp
@@ -226,7 +226,7 @@ bool ResolveExpression::visit(SizeofExpressionAST *)
 bool ResolveExpression::visit(NumericLiteralAST *ast)
 {
     Type *type = 0;
-    NumericLiteral *literal = numericLiteral(ast->literal_token);
+    const NumericLiteral *literal = numericLiteral(ast->literal_token);
 
     if (literal->isChar())
         type = control()->integerType(IntegerType::Char);
@@ -723,7 +723,7 @@ ResolveExpression::resolveMember(Name *memberName, Class *klass,
                 if (i < klass->templateParameterCount()) {
                     Name *templArgName = klass->templateParameterAt(i)->name();
                     if (templArgName && templArgName->identifier()) {
-                        Identifier *templArgId = templArgName->identifier();
+                        const Identifier *templArgId = templArgName->identifier();
                         subst.append(qMakePair(templArgId, templArgTy));
                     }
                 }
diff --git a/src/plugins/cppeditor/cppeditor.cpp b/src/plugins/cppeditor/cppeditor.cpp
index a5192acdf91..e627e4ddc3f 100644
--- a/src/plugins/cppeditor/cppeditor.cpp
+++ b/src/plugins/cppeditor/cppeditor.cpp
@@ -219,7 +219,7 @@ protected:
         if (! (ast && ast->name))
             return false;
 
-        Identifier *id = ast->name->identifier();
+        const Identifier *id = ast->name->identifier();
 
         if (scope) {
             for (Symbol *member = scope->lookat(id); member; member = member->next()) {
@@ -1701,9 +1701,9 @@ void CPPEditor::performQuickFix(int index)
 {
     CPPQuickFixCollector *quickFixCollector = CppPlugin::instance()->quickFixCollector();
     QuickFixOperationPtr op = m_quickFixes.at(index);
-    //quickFixCollector->perform(op);
-    op->createChangeSet();
-    setChangeSet(op->changeSet());
+    quickFixCollector->perform(op);
+    //op->createChangeSet();
+    //setChangeSet(op->changeSet());
 }
 
 void CPPEditor::contextMenuEvent(QContextMenuEvent *e)
diff --git a/src/plugins/cppeditor/cpphoverhandler.cpp b/src/plugins/cppeditor/cpphoverhandler.cpp
index 46315187a07..5bcaba448d6 100644
--- a/src/plugins/cppeditor/cpphoverhandler.cpp
+++ b/src/plugins/cppeditor/cpphoverhandler.cpp
@@ -162,7 +162,7 @@ static QString buildHelpId(Symbol *symbol, Name *name)
 
         if (owner && owner->name() && ! scope->isEnumScope()) {
             Name *name = owner->name();
-            Identifier *id = 0;
+            const Identifier *id = 0;
 
             if (NameId *nameId = name->asNameId())
                 id = nameId->identifier();
@@ -341,7 +341,7 @@ void CppHoverHandler::updateHelpIdAndTooltip(TextEditor::ITextEditor *editor, in
             if (resolvedSymbol && resolvedSymbol->scope()
                 && resolvedSymbol->scope()->isClassScope()) {
                 Class *enclosingClass = resolvedSymbol->scope()->owner()->asClass();
-                if (Identifier *id = enclosingClass->identifier()) {
+                if (const Identifier *id = enclosingClass->identifier()) {
                     if (id->isEqualTo(resolvedSymbol->identifier()))
                         resolvedSymbol = enclosingClass;
                 }
diff --git a/src/plugins/cpptools/cppfindreferences.cpp b/src/plugins/cpptools/cppfindreferences.cpp
index 3486641558b..aca2d8c3bff 100644
--- a/src/plugins/cpptools/cppfindreferences.cpp
+++ b/src/plugins/cpptools/cppfindreferences.cpp
@@ -79,8 +79,8 @@ QList<int> CppFindReferences::references(Symbol *symbol,
                                          Document::Ptr doc,
                                          const Snapshot& snapshot) const
 {
-    Identifier *id = 0;
-    if (Identifier *symbolId = symbol->identifier())
+    const Identifier *id = 0;
+    if (const Identifier *symbolId = symbol->identifier())
         id = doc->control()->findIdentifier(symbolId->chars(), symbolId->size());
 
     QList<int> references;
@@ -106,7 +106,7 @@ static void find_helper(QFutureInterface<Usage> &future,
     QTime tm;
     tm.start();
 
-    Identifier *symbolId = symbol->identifier();
+    const Identifier *symbolId = symbol->identifier();
     Q_ASSERT(symbolId != 0);
 
     const QString sourceFile = QString::fromUtf8(symbol->fileName(), symbol->fileNameLength());
@@ -142,7 +142,7 @@ static void find_helper(QFutureInterface<Usage> &future,
 
         if (Document::Ptr previousDoc = snapshot.value(fileName)) {
             Control *control = previousDoc->control();
-            Identifier *id = control->findIdentifier(symbolId->chars(), symbolId->size());
+            const Identifier *id = control->findIdentifier(symbolId->chars(), symbolId->size());
             if (! id)
                 continue; // skip this document, it's not using symbolId.
         }
@@ -164,7 +164,7 @@ static void find_helper(QFutureInterface<Usage> &future,
         doc->tokenize();
 
         Control *control = doc->control();
-        if (Identifier *id = control->findIdentifier(symbolId->chars(), symbolId->size())) {
+        if (const Identifier *id = control->findIdentifier(symbolId->chars(), symbolId->size())) {
             QTime tm;
             tm.start();
             doc->parse();
@@ -202,7 +202,7 @@ void CppFindReferences::findUsages(Symbol *symbol)
 
 void CppFindReferences::renameUsages(Symbol *symbol)
 {
-    if (Identifier *id = symbol->identifier()) {
+    if (const Identifier *id = symbol->identifier()) {
         const QString textToReplace = QString::fromUtf8(id->chars(), id->size());
 
         Find::SearchResult *search = _resultWindow->startNewSearch(Find::SearchResultWindow::SearchAndReplace);
diff --git a/src/plugins/qmleditor/qmleditor.cpp b/src/plugins/qmleditor/qmleditor.cpp
index 8b25ce5a61e..498c2e4cd5e 100644
--- a/src/plugins/qmleditor/qmleditor.cpp
+++ b/src/plugins/qmleditor/qmleditor.cpp
@@ -666,7 +666,7 @@ static int blockStartState(const QTextBlock &block)
         return state & 0xff;
 }
 
-void ScriptEditor::indentBlock(QTextDocument *, QTextBlock block, QChar typedChar)
+void ScriptEditor::indentBlock(QTextDocument *, QTextBlock block, QChar /*typedChar*/)
 {
     TextEditor::TabSettings ts = tabSettings();
 
diff --git a/src/plugins/qmleditor/qmlexpressionundercursor.cpp b/src/plugins/qmleditor/qmlexpressionundercursor.cpp
index 4bb17bdeb66..2c7ee0b3bad 100644
--- a/src/plugins/qmleditor/qmlexpressionundercursor.cpp
+++ b/src/plugins/qmleditor/qmlexpressionundercursor.cpp
@@ -104,7 +104,7 @@ namespace QmlEditor {
             }
 
         protected:
-            virtual bool visit(Block *ast)
+            virtual bool visit(Block * /*ast*/)
             {
                 // TODO
 //                if (_pos > ast->lbraceToken.end() && _pos < ast->rbraceToken.offset) {
diff --git a/src/shared/cplusplus/ASTVisitor.cpp b/src/shared/cplusplus/ASTVisitor.cpp
index 9281efdf2b9..4f93c06d0a4 100644
--- a/src/shared/cplusplus/ASTVisitor.cpp
+++ b/src/shared/cplusplus/ASTVisitor.cpp
@@ -89,28 +89,28 @@ int ASTVisitor::tokenKind(unsigned index) const
 const char *ASTVisitor::spell(unsigned index) const
 { return translationUnit()->spell(index); }
 
-Identifier *ASTVisitor::identifier(unsigned index) const
+const Identifier *ASTVisitor::identifier(unsigned index) const
 { return translationUnit()->identifier(index); }
 
-Literal *ASTVisitor::literal(unsigned index) const
+const Literal *ASTVisitor::literal(unsigned index) const
 { return translationUnit()->literal(index); }
 
-NumericLiteral *ASTVisitor::numericLiteral(unsigned index) const
+const NumericLiteral *ASTVisitor::numericLiteral(unsigned index) const
 { return translationUnit()->numericLiteral(index); }
 
-StringLiteral *ASTVisitor::stringLiteral(unsigned index) const
+const StringLiteral *ASTVisitor::stringLiteral(unsigned index) const
 { return translationUnit()->stringLiteral(index); }
 
 void ASTVisitor::getPosition(unsigned offset,
                              unsigned *line,
                              unsigned *column,
-                             StringLiteral **fileName) const
+                             const StringLiteral **fileName) const
 { translationUnit()->getPosition(offset, line, column, fileName); }
 
 void ASTVisitor::getTokenPosition(unsigned index,
                                   unsigned *line,
                                   unsigned *column,
-                                  StringLiteral **fileName) const
+                                  const StringLiteral **fileName) const
 { translationUnit()->getTokenPosition(index, line, column, fileName); }
 
 void ASTVisitor::getTokenStartPosition(unsigned index, unsigned *line, unsigned *column) const
diff --git a/src/shared/cplusplus/ASTVisitor.h b/src/shared/cplusplus/ASTVisitor.h
index 7d73ba3ed54..d4ebdcc81ab 100644
--- a/src/shared/cplusplus/ASTVisitor.h
+++ b/src/shared/cplusplus/ASTVisitor.h
@@ -72,20 +72,20 @@ public:
     const Token &tokenAt(unsigned index) const;
     int tokenKind(unsigned index) const;
     const char *spell(unsigned index) const;
-    Identifier *identifier(unsigned index) const;
-    Literal *literal(unsigned index) const;
-    NumericLiteral *numericLiteral(unsigned index) const;
-    StringLiteral *stringLiteral(unsigned index) const;
+    const Identifier *identifier(unsigned index) const;
+    const Literal *literal(unsigned index) const;
+    const NumericLiteral *numericLiteral(unsigned index) const;
+    const StringLiteral *stringLiteral(unsigned index) const;
 
     void getPosition(unsigned offset,
                      unsigned *line,
                      unsigned *column = 0,
-                     StringLiteral **fileName = 0) const;
+                     const StringLiteral **fileName = 0) const;
 
     void getTokenPosition(unsigned index,
                           unsigned *line,
                           unsigned *column = 0,
-                          StringLiteral **fileName = 0) const;
+                          const StringLiteral **fileName = 0) const;
 
     void getTokenStartPosition(unsigned index, unsigned *line, unsigned *column) const;
     void getTokenEndPosition(unsigned index, unsigned *line, unsigned *column) const;
diff --git a/src/shared/cplusplus/CheckDeclaration.cpp b/src/shared/cplusplus/CheckDeclaration.cpp
index d7d7029fa21..3fa5922a026 100644
--- a/src/shared/cplusplus/CheckDeclaration.cpp
+++ b/src/shared/cplusplus/CheckDeclaration.cpp
@@ -378,7 +378,7 @@ bool CheckDeclaration::visit(LinkageSpecificationAST *ast)
 
 bool CheckDeclaration::visit(NamespaceAST *ast)
 {
-    Identifier *id = identifier(ast->identifier_token);
+    const Identifier *id = identifier(ast->identifier_token);
     Name *namespaceName = control()->nameId(id);
 
     unsigned sourceLocation = ast->firstToken();
@@ -718,7 +718,7 @@ bool CheckDeclaration::visit(ObjCPropertyDeclarationAST *ast)
         if (!attrAst)
             continue;
 
-        Identifier *attrId = identifier(attrAst->attribute_identifier_token);
+        const Identifier *attrId = identifier(attrAst->attribute_identifier_token);
         if (attrId == control()->objcGetterId()) {
             if (checkPropertyAttribute(attrAst, propAttrs, ObjCPropertyDeclaration::Getter)) {
                 getterName = semantic()->check(attrAst->method_selector, _scope);
diff --git a/src/shared/cplusplus/CheckName.cpp b/src/shared/cplusplus/CheckName.cpp
index 63a1885128a..1ad29a27d30 100644
--- a/src/shared/cplusplus/CheckName.cpp
+++ b/src/shared/cplusplus/CheckName.cpp
@@ -343,7 +343,7 @@ bool CheckName::visit(ConversionFunctionIdAST *ast)
 
 bool CheckName::visit(SimpleNameAST *ast)
 {
-    Identifier *id = identifier(ast->identifier_token);
+    const Identifier *id = identifier(ast->identifier_token);
     _name = control()->nameId(id);
     ast->name = _name;
     return false;
@@ -351,7 +351,7 @@ bool CheckName::visit(SimpleNameAST *ast)
 
 bool CheckName::visit(DestructorNameAST *ast)
 {
-    Identifier *id = identifier(ast->identifier_token);
+    const Identifier *id = identifier(ast->identifier_token);
     _name = control()->destructorNameId(id);
     ast->name = _name;
     return false;
@@ -359,7 +359,7 @@ bool CheckName::visit(DestructorNameAST *ast)
 
 bool CheckName::visit(TemplateIdAST *ast)
 {
-    Identifier *id = identifier(ast->identifier_token);
+    const Identifier *id = identifier(ast->identifier_token);
     std::vector<FullySpecifiedType> templateArguments;
     for (TemplateArgumentListAST *it = ast->template_argument_list; it;
             it = it->next) {
@@ -380,7 +380,7 @@ bool CheckName::visit(ObjCSelectorWithoutArgumentsAST *ast)
 {
     if (ast->name_token) {
         std::vector<Name *> names;
-        Identifier *id = control()->findOrInsertIdentifier(spell(ast->name_token));
+        const Identifier *id = control()->findOrInsertIdentifier(spell(ast->name_token));
         NameId *nameId = control()->nameId(id);
         names.push_back(nameId);
         _name = control()->selectorNameId(&names[0], names.size(), false);
@@ -395,7 +395,7 @@ bool CheckName::visit(ObjCSelectorWithArgumentsAST *ast)
     std::vector<Name *> names;
     for (ObjCSelectorArgumentListAST *it = ast->selector_argument_list; it; it = it->next) {
         if (it->value->name_token) {
-            Identifier *id = control()->findOrInsertIdentifier(spell(it->value->name_token));
+            const Identifier *id = control()->findOrInsertIdentifier(spell(it->value->name_token));
             NameId *nameId = control()->nameId(id);
             names.push_back(nameId);
         } else {
@@ -420,7 +420,7 @@ bool CheckName::visit(ObjCMessageArgumentDeclarationAST *ast)
         type = semantic()->check(ast->type_name, _scope);
 
     if (ast->param_name_token) {
-        Identifier *id = identifier(ast->param_name_token);
+        const Identifier *id = identifier(ast->param_name_token);
         _name = control()->nameId(id);
         ast->name = _name;
 
diff --git a/src/shared/cplusplus/CheckSpecifier.cpp b/src/shared/cplusplus/CheckSpecifier.cpp
index c7604c5ee66..7f06e2de386 100644
--- a/src/shared/cplusplus/CheckSpecifier.cpp
+++ b/src/shared/cplusplus/CheckSpecifier.cpp
@@ -386,7 +386,7 @@ bool CheckSpecifier::visit(EnumSpecifierAST *ast)
     _fullySpecifiedType.setType(e);
     for (EnumeratorListAST *it = ast->enumerator_list; it; it = it->next) {
         EnumeratorAST *enumerator = it->value;
-        Identifier *id = identifier(enumerator->identifier_token);
+        const Identifier *id = identifier(enumerator->identifier_token);
         if (! id)
             continue;
         NameId *enumeratorName = control()->nameId(id);
@@ -403,7 +403,7 @@ bool CheckSpecifier::visit(TypeofSpecifierAST *ast)
     return false;
 }
 
-bool CheckSpecifier::visit(AttributeSpecifierAST *ast)
+bool CheckSpecifier::visit(AttributeSpecifierAST * /*ast*/)
 {
     return false;
 }
diff --git a/src/shared/cplusplus/Control.cpp b/src/shared/cplusplus/Control.cpp
index 6a949cec7b5..1cd2ad51b02 100644
--- a/src/shared/cplusplus/Control.cpp
+++ b/src/shared/cplusplus/Control.cpp
@@ -184,17 +184,17 @@ public:
         delete_array_entries(symbols);
     }
 
-    NameId *findOrInsertNameId(Identifier *id)
+    NameId *findOrInsertNameId(const Identifier *id)
     {
         if (! id)
             return 0;
-        std::map<Identifier *, NameId *>::iterator it = nameIds.lower_bound(id);
+        std::map<const Identifier *, NameId *>::iterator it = nameIds.lower_bound(id);
         if (it == nameIds.end() || it->first != id)
             it = nameIds.insert(it, std::make_pair(id, new NameId(id)));
         return it->second;
     }
 
-    TemplateNameId *findOrInsertTemplateNameId(Identifier *id,
+    TemplateNameId *findOrInsertTemplateNameId(const Identifier *id,
         const std::vector<FullySpecifiedType> &templateArguments)
     {
         if (! id)
@@ -213,11 +213,11 @@ public:
         return it->second;
     }
 
-    DestructorNameId *findOrInsertDestructorNameId(Identifier *id)
+    DestructorNameId *findOrInsertDestructorNameId(const Identifier *id)
     {
         if (! id)
             return 0;
-        std::map<Identifier *, DestructorNameId *>::iterator it = destructorNameIds.lower_bound(id);
+        std::map<const Identifier *, DestructorNameId *>::iterator it = destructorNameIds.lower_bound(id);
         if (it == destructorNameIds.end() || it->first != id)
             it = destructorNameIds.insert(it, std::make_pair(id, new DestructorNameId(id)));
         return it->second;
@@ -441,10 +441,10 @@ public:
     }
 
     struct TemplateNameIdKey {
-        Identifier *id;
+        const Identifier *id;
         std::vector<FullySpecifiedType> templateArguments;
 
-        TemplateNameIdKey(Identifier *id, const std::vector<FullySpecifiedType> &templateArguments)
+        TemplateNameIdKey(const Identifier *id, const std::vector<FullySpecifiedType> &templateArguments)
             : id(id), templateArguments(templateArguments)
         { }
 
@@ -522,8 +522,8 @@ public:
     // ### replace std::map with lookup tables. ASAP!
 
     // names
-    std::map<Identifier *, NameId *> nameIds;
-    std::map<Identifier *, DestructorNameId *> destructorNameIds;
+    std::map<const Identifier *, NameId *> nameIds;
+    std::map<const Identifier *, DestructorNameId *> destructorNameIds;
     std::map<int, OperatorNameId *> operatorNameIds;
     std::map<FullySpecifiedType, ConversionNameId *> conversionNameIds;
     std::map<TemplateNameIdKey, TemplateNameId *> templateNameIds;
@@ -544,14 +544,14 @@ public:
     std::vector<Symbol *> symbols;
 
     // ObjC context keywords:
-    Identifier *objcGetterId;
-    Identifier *objcSetterId;
-    Identifier *objcReadwriteId;
-    Identifier *objcReadonlyId;
-    Identifier *objcAssignId;
-    Identifier *objcRetainId;
-    Identifier *objcCopyId;
-    Identifier *objcNonatomicId;
+    const Identifier *objcGetterId;
+    const Identifier *objcSetterId;
+    const Identifier *objcReadwriteId;
+    const Identifier *objcReadonlyId;
+    const Identifier *objcAssignId;
+    const Identifier *objcRetainId;
+    const Identifier *objcCopyId;
+    const Identifier *objcNonatomicId;
 };
 
 Control::Control()
@@ -587,13 +587,13 @@ DiagnosticClient *Control::diagnosticClient() const
 void Control::setDiagnosticClient(DiagnosticClient *diagnosticClient)
 { d->diagnosticClient = diagnosticClient; }
 
-Identifier *Control::findIdentifier(const char *chars, unsigned size) const
+const Identifier *Control::findIdentifier(const char *chars, unsigned size) const
 { return d->identifiers.findLiteral(chars, size); }
 
-Identifier *Control::findOrInsertIdentifier(const char *chars, unsigned size)
+const Identifier *Control::findOrInsertIdentifier(const char *chars, unsigned size)
 { return d->identifiers.findOrInsertLiteral(chars, size); }
 
-Identifier *Control::findOrInsertIdentifier(const char *chars)
+const Identifier *Control::findOrInsertIdentifier(const char *chars)
 {
     unsigned length = std::strlen(chars);
     return findOrInsertIdentifier(chars, length);
@@ -617,36 +617,36 @@ Control::NumericLiteralIterator Control::firstNumericLiteral() const
 Control::NumericLiteralIterator Control::lastNumericLiteral() const
 { return d->numericLiterals.end(); }
 
-StringLiteral *Control::findOrInsertStringLiteral(const char *chars, unsigned size)
+const StringLiteral *Control::findOrInsertStringLiteral(const char *chars, unsigned size)
 { return d->stringLiterals.findOrInsertLiteral(chars, size); }
 
-StringLiteral *Control::findOrInsertStringLiteral(const char *chars)
+const StringLiteral *Control::findOrInsertStringLiteral(const char *chars)
 {
     unsigned length = std::strlen(chars);
     return findOrInsertStringLiteral(chars, length);
 }
 
-NumericLiteral *Control::findOrInsertNumericLiteral(const char *chars, unsigned size)
+const NumericLiteral *Control::findOrInsertNumericLiteral(const char *chars, unsigned size)
 { return d->numericLiterals.findOrInsertLiteral(chars, size); }
 
-NumericLiteral *Control::findOrInsertNumericLiteral(const char *chars)
+const NumericLiteral *Control::findOrInsertNumericLiteral(const char *chars)
 {
     unsigned length = std::strlen(chars);
     return findOrInsertNumericLiteral(chars, length);
 }
 
-NameId *Control::nameId(Identifier *id)
+NameId *Control::nameId(const Identifier *id)
 { return d->findOrInsertNameId(id); }
 
-TemplateNameId *Control::templateNameId(Identifier *id,
-       FullySpecifiedType *const args,
-       unsigned argv)
+TemplateNameId *Control::templateNameId(const Identifier *id,
+                                        FullySpecifiedType *const args,
+                                        unsigned argv)
 {
     std::vector<FullySpecifiedType> templateArguments(args, args + argv);
     return d->findOrInsertTemplateNameId(id, templateArguments);
 }
 
-DestructorNameId *Control::destructorNameId(Identifier *id)
+DestructorNameId *Control::destructorNameId(const Identifier *id)
 { return d->findOrInsertDestructorNameId(id); }
 
 OperatorNameId *Control::operatorNameId(int kind)
@@ -755,26 +755,26 @@ ObjCMethod *Control::newObjCMethod(unsigned sourceLocation, Name *name)
 ObjCPropertyDeclaration *Control::newObjCPropertyDeclaration(unsigned sourceLocation, Name *name)
 { return d->newObjCPropertyDeclaration(sourceLocation, name); }
 
-Identifier *Control::objcGetterId() const
+const Identifier *Control::objcGetterId() const
 { return d->objcGetterId; }
 
-Identifier *Control::objcSetterId() const
+const Identifier *Control::objcSetterId() const
 { return d->objcSetterId; }
 
-Identifier *Control::objcReadwriteId() const
+const Identifier *Control::objcReadwriteId() const
 { return d->objcReadwriteId; }
 
-Identifier *Control::objcReadonlyId() const
+const Identifier *Control::objcReadonlyId() const
 { return d->objcReadonlyId; }
 
-Identifier *Control::objcAssignId() const
+const Identifier *Control::objcAssignId() const
 { return d->objcAssignId; }
 
-Identifier *Control::objcRetainId() const
+const Identifier *Control::objcRetainId() const
 { return d->objcRetainId; }
 
-Identifier *Control::objcCopyId() const
+const Identifier *Control::objcCopyId() const
 { return d->objcCopyId; }
 
-Identifier *Control::objcNonatomicId() const
+const Identifier *Control::objcNonatomicId() const
 { return d->objcNonatomicId; }
diff --git a/src/shared/cplusplus/Control.h b/src/shared/cplusplus/Control.h
index 53203f832f3..3fc8543ab1e 100644
--- a/src/shared/cplusplus/Control.h
+++ b/src/shared/cplusplus/Control.h
@@ -66,15 +66,15 @@ public:
     void setDiagnosticClient(DiagnosticClient *diagnosticClient);
 
     /// Returns the canonical name id.
-    NameId *nameId(Identifier *id);
+    NameId *nameId(const Identifier *id);
 
     /// Returns the canonical template name id.
-    TemplateNameId *templateNameId(Identifier *id,
+    TemplateNameId *templateNameId(const Identifier *id,
                                    FullySpecifiedType *const args = 0,
                                    unsigned argc = 0);
 
     /// Returns the canonical destructor name id.
-    DestructorNameId *destructorNameId(Identifier *id);
+    DestructorNameId *destructorNameId(const Identifier *id);
 
     /// Returns the canonical operator name id.
     OperatorNameId *operatorNameId(int operatorId);
@@ -171,19 +171,18 @@ public:
     ObjCPropertyDeclaration *newObjCPropertyDeclaration(unsigned sourceLocation, Name *name);
 
     // Objective-C specific context keywords.
-    Identifier *objcGetterId() const;
-    Identifier *objcSetterId() const;
-    Identifier *objcReadwriteId() const;
-    Identifier *objcReadonlyId() const;
-    Identifier *objcAssignId() const;
-    Identifier *objcRetainId() const;
-    Identifier *objcCopyId() const;
-    Identifier *objcNonatomicId() const;
-
-    Identifier *findIdentifier(const char *chars, unsigned size) const;
-
-    Identifier *findOrInsertIdentifier(const char *chars, unsigned size);
-    Identifier *findOrInsertIdentifier(const char *chars);
+    const Identifier *objcGetterId() const;
+    const Identifier *objcSetterId() const;
+    const Identifier *objcReadwriteId() const;
+    const Identifier *objcReadonlyId() const;
+    const Identifier *objcAssignId() const;
+    const Identifier *objcRetainId() const;
+    const Identifier *objcCopyId() const;
+    const Identifier *objcNonatomicId() const;
+
+    const Identifier *findIdentifier(const char *chars, unsigned size) const;
+    const Identifier *findOrInsertIdentifier(const char *chars, unsigned size);
+    const Identifier *findOrInsertIdentifier(const char *chars);
 
     typedef const Identifier *const *IdentifierIterator;
     typedef const StringLiteral *const *StringLiteralIterator;
@@ -198,11 +197,11 @@ public:
     NumericLiteralIterator firstNumericLiteral() const;
     NumericLiteralIterator lastNumericLiteral() const;
 
-    StringLiteral *findOrInsertStringLiteral(const char *chars, unsigned size);
-    StringLiteral *findOrInsertStringLiteral(const char *chars);
+    const StringLiteral *findOrInsertStringLiteral(const char *chars, unsigned size);
+    const StringLiteral *findOrInsertStringLiteral(const char *chars);
 
-    NumericLiteral *findOrInsertNumericLiteral(const char *chars, unsigned size);
-    NumericLiteral *findOrInsertNumericLiteral(const char *chars);
+    const NumericLiteral *findOrInsertNumericLiteral(const char *chars, unsigned size);
+    const NumericLiteral *findOrInsertNumericLiteral(const char *chars);
 
 private:
     class Data;
diff --git a/src/shared/cplusplus/DiagnosticClient.h b/src/shared/cplusplus/DiagnosticClient.h
index ff83a4c6f9a..2c1434cbafe 100644
--- a/src/shared/cplusplus/DiagnosticClient.h
+++ b/src/shared/cplusplus/DiagnosticClient.h
@@ -71,7 +71,7 @@ public:
     virtual ~DiagnosticClient();
 
     virtual void report(int level,
-                        StringLiteral *fileName,
+                        const StringLiteral *fileName,
                         unsigned line, unsigned column,
                         const char *format, va_list ap) = 0;
 };
diff --git a/src/shared/cplusplus/LiteralTable.h b/src/shared/cplusplus/LiteralTable.h
index ff4246748f9..408db390531 100644
--- a/src/shared/cplusplus/LiteralTable.h
+++ b/src/shared/cplusplus/LiteralTable.h
@@ -61,7 +61,7 @@ class LiteralTable
     void operator =(const LiteralTable &other);
 
 public:
-    typedef _Literal **iterator;
+    typedef _Literal *const *iterator;
 
 public:
     LiteralTable()
@@ -74,14 +74,14 @@ public:
 
     ~LiteralTable()
     {
-       if (_literals) {
-           _Literal **lastLiteral = _literals + _literalCount + 1;
-           for (_Literal **it = _literals; it != lastLiteral; ++it)
-              delete *it;
-           std::free(_literals);
-       }
-       if (_buckets)
-           std::free(_buckets);
+        if (_literals) {
+            _Literal **lastLiteral = _literals + _literalCount + 1;
+            for (_Literal **it = _literals; it != lastLiteral; ++it)
+                delete *it;
+            std::free(_literals);
+        }
+        if (_buckets)
+            std::free(_buckets);
     }
 
     bool empty() const
@@ -90,7 +90,7 @@ public:
     unsigned size() const
     { return _literalCount + 1; }
 
-    _Literal *at(unsigned index) const
+    const _Literal *at(unsigned index) const
     { return _literals[index]; }
 
     iterator begin() const
@@ -99,53 +99,53 @@ public:
     iterator end() const
     { return _literals + _literalCount + 1; }
 
-    _Literal *findLiteral(const char *chars, unsigned size) const
+    const _Literal *findLiteral(const char *chars, unsigned size) const
     {
-       if (_buckets) {
-           unsigned h = _Literal::hashCode(chars, size);
-           _Literal *literal = _buckets[h % _allocatedBuckets];
-           for (; literal; literal = static_cast<_Literal *>(literal->_next)) {
-               if (literal->size() == size && ! std::strncmp(literal->chars(), chars, size))
-                  return literal;
-           }
-       }
-
-       return 0;
-   }
+        if (_buckets) {
+            unsigned h = _Literal::hashCode(chars, size);
+            _Literal *literal = _buckets[h % _allocatedBuckets];
+            for (; literal; literal = static_cast<_Literal *>(literal->_next)) {
+                if (literal->size() == size && ! std::strncmp(literal->chars(), chars, size))
+                    return literal;
+            }
+        }
+
+        return 0;
+    }
 
-   _Literal *findOrInsertLiteral(const char *chars, unsigned size)
+    const _Literal *findOrInsertLiteral(const char *chars, unsigned size)
     {
-       if (_buckets) {
-           unsigned h = _Literal::hashCode(chars, size);
-           _Literal *literal = _buckets[h % _allocatedBuckets];
-           for (; literal; literal = static_cast<_Literal *>(literal->_next)) {
-               if (literal->size() == size && ! std::strncmp(literal->chars(), chars, size))
-                  return literal;
-           }
-       }
+        if (_buckets) {
+            unsigned h = _Literal::hashCode(chars, size);
+            _Literal *literal = _buckets[h % _allocatedBuckets];
+            for (; literal; literal = static_cast<_Literal *>(literal->_next)) {
+                if (literal->size() == size && ! std::strncmp(literal->chars(), chars, size))
+                    return literal;
+            }
+        }
 
-       _Literal *literal = new _Literal(chars, size);
+        _Literal *literal = new _Literal(chars, size);
 
-       if (++_literalCount == _allocatedLiterals) {
-           _allocatedLiterals <<= 1;
+        if (++_literalCount == _allocatedLiterals) {
+            _allocatedLiterals <<= 1;
 
-           if (! _allocatedLiterals)
-              _allocatedLiterals = 256;
+            if (! _allocatedLiterals)
+                _allocatedLiterals = 256;
 
-           _literals = (_Literal **) std::realloc(_literals, sizeof(_Literal *) * _allocatedLiterals);
-       }
+            _literals = (_Literal **) std::realloc(_literals, sizeof(_Literal *) * _allocatedLiterals);
+        }
 
-       _literals[_literalCount] = literal;
+        _literals[_literalCount] = literal;
 
-       if (! _buckets || _literalCount >= _allocatedBuckets * .6)
-           rehash();
-       else {
-           unsigned h = literal->hashCode() % _allocatedBuckets;
-           literal->_next = _buckets[h];
-           _buckets[h] = literal;
-       }
+        if (! _buckets || _literalCount >= _allocatedBuckets * .6)
+            rehash();
+        else {
+            unsigned h = literal->hashCode() % _allocatedBuckets;
+            literal->_next = _buckets[h];
+            _buckets[h] = literal;
+        }
 
-       return literal;
+        return literal;
     }
 
 protected:
diff --git a/src/shared/cplusplus/Name.h b/src/shared/cplusplus/Name.h
index 45dfef86e65..8559b6ea2ee 100644
--- a/src/shared/cplusplus/Name.h
+++ b/src/shared/cplusplus/Name.h
@@ -56,14 +56,11 @@ namespace CPlusPlus {
 
 class CPLUSPLUS_EXPORT Name
 {
-    Name(const Name &other);
-    void operator =(const Name &other);
-
 public:
     Name();
     virtual ~Name();
 
-    virtual Identifier *identifier() const = 0;
+    virtual const Identifier *identifier() const = 0;
 
     bool isNameId() const;
     bool isTemplateNameId() const;
diff --git a/src/shared/cplusplus/Names.cpp b/src/shared/cplusplus/Names.cpp
index e73abb5c471..65703f804b3 100644
--- a/src/shared/cplusplus/Names.cpp
+++ b/src/shared/cplusplus/Names.cpp
@@ -73,7 +73,7 @@ QualifiedNameId::~QualifiedNameId()
 void QualifiedNameId::accept0(NameVisitor *visitor)
 { visitor->visit(this); }
 
-Identifier *QualifiedNameId::identifier() const
+const Identifier *QualifiedNameId::identifier() const
 {
     if (Name *u = unqualifiedNameId())
         return u->identifier();
@@ -122,7 +122,7 @@ bool QualifiedNameId::isEqualTo(const Name *other) const
     return true;
 }
 
-NameId::NameId(Identifier *identifier)
+NameId::NameId(const Identifier *identifier)
     : _identifier(identifier)
 { }
 
@@ -132,7 +132,7 @@ NameId::~NameId()
 void NameId::accept0(NameVisitor *visitor)
 { visitor->visit(this); }
 
-Identifier *NameId::identifier() const
+const Identifier *NameId::identifier() const
 { return _identifier; }
 
 bool NameId::isEqualTo(const Name *other) const
@@ -140,12 +140,12 @@ bool NameId::isEqualTo(const Name *other) const
     const NameId *nameId = other->asNameId();
     if (! nameId)
         return false;
-    Identifier *l = identifier();
-    Identifier *r = nameId->identifier();
+    const Identifier *l = identifier();
+    const Identifier *r = nameId->identifier();
     return l->isEqualTo(r);
 }
 
-DestructorNameId::DestructorNameId(Identifier *identifier)
+DestructorNameId::DestructorNameId(const Identifier *identifier)
     : _identifier(identifier)
 { }
 
@@ -155,7 +155,7 @@ DestructorNameId::~DestructorNameId()
 void DestructorNameId::accept0(NameVisitor *visitor)
 { visitor->visit(this); }
 
-Identifier *DestructorNameId::identifier() const
+const Identifier *DestructorNameId::identifier() const
 { return _identifier; }
 
 bool DestructorNameId::isEqualTo(const Name *other) const
@@ -163,12 +163,12 @@ bool DestructorNameId::isEqualTo(const Name *other) const
     const DestructorNameId *d = other->asDestructorNameId();
     if (! d)
         return false;
-    Identifier *l = identifier();
-    Identifier *r = d->identifier();
+    const Identifier *l = identifier();
+    const Identifier *r = d->identifier();
     return l->isEqualTo(r);
 }
 
-TemplateNameId::TemplateNameId(Identifier *identifier,
+TemplateNameId::TemplateNameId(const Identifier *identifier,
         const FullySpecifiedType templateArguments[],
         unsigned templateArgumentCount)
     : _identifier(identifier),
@@ -188,7 +188,7 @@ TemplateNameId::~TemplateNameId()
 void TemplateNameId::accept0(NameVisitor *visitor)
 { visitor->visit(this); }
 
-Identifier *TemplateNameId::identifier() const
+const Identifier *TemplateNameId::identifier() const
 { return _identifier; }
 
 unsigned TemplateNameId::templateArgumentCount() const
@@ -205,8 +205,8 @@ bool TemplateNameId::isEqualTo(const Name *other) const
     const TemplateNameId *t = other->asTemplateNameId();
     if (! t)
         return false;
-    Identifier *l = identifier();
-    Identifier *r = t->identifier();
+    const Identifier *l = identifier();
+    const Identifier *r = t->identifier();
     if (! l->isEqualTo(r))
         return false;
     if (_templateArgumentCount != t->_templateArgumentCount)
@@ -233,7 +233,7 @@ void OperatorNameId::accept0(NameVisitor *visitor)
 int OperatorNameId::kind() const
 { return _kind; }
 
-Identifier *OperatorNameId::identifier() const
+const Identifier *OperatorNameId::identifier() const
 { return 0; }
 
 bool OperatorNameId::isEqualTo(const Name *other) const
@@ -257,7 +257,7 @@ void ConversionNameId::accept0(NameVisitor *visitor)
 FullySpecifiedType ConversionNameId::type() const
 { return _type; }
 
-Identifier *ConversionNameId::identifier() const
+const Identifier *ConversionNameId::identifier() const
 { return 0; }
 
 bool ConversionNameId::isEqualTo(const Name *other) const
@@ -287,7 +287,7 @@ SelectorNameId::~SelectorNameId()
 void SelectorNameId::accept0(NameVisitor *visitor)
 { visitor->visit(this); }
 
-Identifier *SelectorNameId::identifier() const
+const Identifier *SelectorNameId::identifier() const
 {
     if (! _nameCount)
         return 0;
diff --git a/src/shared/cplusplus/Names.h b/src/shared/cplusplus/Names.h
index a30bffb0135..5629747de3f 100644
--- a/src/shared/cplusplus/Names.h
+++ b/src/shared/cplusplus/Names.h
@@ -63,7 +63,7 @@ public:
                     bool isGlobal = false);
     virtual ~QualifiedNameId();
 
-    virtual Identifier *identifier() const;
+    virtual const Identifier *identifier() const;
 
     unsigned nameCount() const;
     Name *nameAt(unsigned index) const;
@@ -92,10 +92,10 @@ private:
 class CPLUSPLUS_EXPORT NameId: public Name
 {
 public:
-    NameId(Identifier *identifier);
+    NameId(const Identifier *identifier);
     virtual ~NameId();
 
-    virtual Identifier *identifier() const;
+    virtual const Identifier *identifier() const;
 
     virtual bool isEqualTo(const Name *other) const;
 
@@ -109,16 +109,16 @@ protected:
     virtual void accept0(NameVisitor *visitor);
 
 private:
-    Identifier *_identifier;
+    const Identifier *_identifier;
 };
 
 class CPLUSPLUS_EXPORT DestructorNameId: public Name
 {
 public:
-    DestructorNameId(Identifier *identifier);
+    DestructorNameId(const Identifier *identifier);
     virtual ~DestructorNameId();
 
-    virtual Identifier *identifier() const;
+    virtual const Identifier *identifier() const;
 
     virtual bool isEqualTo(const Name *other) const;
 
@@ -132,18 +132,18 @@ protected:
     virtual void accept0(NameVisitor *visitor);
 
 private:
-    Identifier *_identifier;
+    const Identifier *_identifier;
 };
 
 class CPLUSPLUS_EXPORT TemplateNameId: public Name
 {
 public:
-    TemplateNameId(Identifier *identifier,
+    TemplateNameId(const Identifier *identifier,
                    const FullySpecifiedType templateArguments[],
                    unsigned templateArgumentCount);
     virtual ~TemplateNameId();
 
-    virtual Identifier *identifier() const;
+    virtual const Identifier *identifier() const;
 
     // ### find a better name
     unsigned templateArgumentCount() const;
@@ -162,7 +162,7 @@ protected:
     virtual void accept0(NameVisitor *visitor);
 
 private:
-    Identifier *_identifier;
+    const Identifier *_identifier;
     FullySpecifiedType *_templateArguments;
     unsigned _templateArgumentCount;
 };
@@ -230,7 +230,7 @@ public:
 
     int kind() const;
 
-    virtual Identifier *identifier() const;
+    virtual const Identifier *identifier() const;
     virtual bool isEqualTo(const Name *other) const;
 
     virtual const OperatorNameId *asOperatorNameId() const
@@ -254,7 +254,7 @@ public:
 
     FullySpecifiedType type() const;
 
-    virtual Identifier *identifier() const;
+    virtual const Identifier *identifier() const;
     virtual bool isEqualTo(const Name *other) const;
 
     virtual const ConversionNameId *asConversionNameId() const
@@ -278,7 +278,7 @@ public:
                    bool hasArguments);
     virtual ~SelectorNameId();
 
-    virtual Identifier *identifier() const;
+    virtual const Identifier *identifier() const;
 
     unsigned nameCount() const;
     Name *nameAt(unsigned index) const;
diff --git a/src/shared/cplusplus/Parser.cpp b/src/shared/cplusplus/Parser.cpp
index a4be22f5b4c..f3019639360 100644
--- a/src/shared/cplusplus/Parser.cpp
+++ b/src/shared/cplusplus/Parser.cpp
@@ -4981,7 +4981,7 @@ bool Parser::parseObjCPropertyAttribute(ObjCPropertyAttributeAST *&node)
 
     node = new (_pool) ObjCPropertyAttributeAST;
 
-    Identifier *id = tok().identifier;
+    const Identifier *id = tok().identifier;
     const int k = classifyObjectiveCTypeQualifiers(id->chars(), id->size());
     switch (k) {
     case Token_copy:
@@ -5079,7 +5079,7 @@ bool Parser::parseObjCTypeQualifiers(unsigned &type_qualifier)
     if (LA() != T_IDENTIFIER)
         return false;
 
-    Identifier *id = tok().identifier;
+    const Identifier *id = tok().identifier;
     const int k = classifyObjectiveCTypeQualifiers(id->chars(), id->size());
     if (k == Token_identifier)
         return false;
@@ -5092,7 +5092,7 @@ bool Parser::peekAtObjCContextKeyword(int kind)
     if (LA() != T_IDENTIFIER)
         return false;
 
-    Identifier *id = tok().identifier;
+    const Identifier *id = tok().identifier;
     const int k = classifyObjectiveCTypeQualifiers(id->chars(), id->size());
     return k == kind;
 }
diff --git a/src/shared/cplusplus/Scope.cpp b/src/shared/cplusplus/Scope.cpp
index 0a7dd294d49..76d09eb2dcf 100644
--- a/src/shared/cplusplus/Scope.cpp
+++ b/src/shared/cplusplus/Scope.cpp
@@ -212,14 +212,14 @@ Symbol *Scope::lookat(Name *name) const
     else if (OperatorNameId *opId = name->asOperatorNameId())
         return lookat(opId->kind());
 
-    else if (Identifier *id = name->identifier())
+    else if (const Identifier *id = name->identifier())
         return lookat(id);
 
     else
         return 0;
 }
 
-Symbol *Scope::lookat(Identifier *id) const
+Symbol *Scope::lookat(const Identifier *id) const
 {
     if (! _hash || ! id)
         return 0;
diff --git a/src/shared/cplusplus/Scope.h b/src/shared/cplusplus/Scope.h
index c05a718ff37..8587ade8c58 100644
--- a/src/shared/cplusplus/Scope.h
+++ b/src/shared/cplusplus/Scope.h
@@ -130,7 +130,7 @@ public:
     iterator lastSymbol() const;
 
     Symbol *lookat(Name *name) const;
-    Symbol *lookat(Identifier *id) const;
+    Symbol *lookat(const Identifier *id) const;
     Symbol *lookat(int operatorId) const;
 
 private:
diff --git a/src/shared/cplusplus/Symbol.cpp b/src/shared/cplusplus/Symbol.cpp
index 316fccaaecd..57e74e13839 100644
--- a/src/shared/cplusplus/Symbol.cpp
+++ b/src/shared/cplusplus/Symbol.cpp
@@ -232,7 +232,7 @@ void Symbol::setSourceLocation(unsigned sourceLocation)
 unsigned Symbol::line() const
 {
     unsigned line = 0, column = 0;
-    StringLiteral *fileId = 0;
+    const StringLiteral *fileId = 0;
     translationUnit()->getPosition(_sourceOffset, &line, &column, &fileId);
     return line;
 }
@@ -240,26 +240,26 @@ unsigned Symbol::line() const
 unsigned Symbol::column() const
 {
     unsigned line = 0, column = 0;
-    StringLiteral *fileId = 0;
+    const StringLiteral *fileId = 0;
     translationUnit()->getPosition(_sourceOffset, &line, &column, &fileId);
     return column;
 }
 
-StringLiteral *Symbol::fileId() const
+const StringLiteral *Symbol::fileId() const
 {
     unsigned line = 0, column = 0;
-    StringLiteral *fileId = 0;
+    const StringLiteral *fileId = 0;
     translationUnit()->getPosition(_sourceOffset, &line, &column, &fileId);
     return fileId;
 }
 
-void Symbol::getPosition(unsigned *line, unsigned *column, StringLiteral **fileId) const
+void Symbol::getPosition(unsigned *line, unsigned *column, const StringLiteral **fileId) const
 { translationUnit()->getPosition(_sourceOffset, line, column, fileId); }
 
-void Symbol::getStartPosition(unsigned *line, unsigned *column, StringLiteral **fileId) const
+void Symbol::getStartPosition(unsigned *line, unsigned *column, const StringLiteral **fileId) const
 { translationUnit()->getPosition(_startOffset, line, column, fileId); }
 
-void Symbol::getEndPosition(unsigned *line, unsigned *column, StringLiteral **fileId) const
+void Symbol::getEndPosition(unsigned *line, unsigned *column, const StringLiteral **fileId) const
 { translationUnit()->getPosition(_endOffset, line, column, fileId); }
 
 const char *Symbol::fileName() const
@@ -302,7 +302,7 @@ void Symbol::setName(Name *name)
     }
 }
 
-Identifier *Symbol::identifier() const
+const Identifier *Symbol::identifier() const
 {
     if (_name)
         return _name->identifier();
diff --git a/src/shared/cplusplus/Symbol.h b/src/shared/cplusplus/Symbol.h
index 61abe02c7e1..7230a8e0c8d 100644
--- a/src/shared/cplusplus/Symbol.h
+++ b/src/shared/cplusplus/Symbol.h
@@ -102,7 +102,7 @@ public:
     unsigned column() const;
 
     /// Returns this Symbol's file name.
-    StringLiteral *fileId() const;
+    const StringLiteral *fileId() const;
 
     /// Returns this Symbol's file name.
     const char *fileName() const;
@@ -116,9 +116,9 @@ public:
     unsigned endOffset() const;
     void setEndOffset(unsigned offset);
 
-    void getPosition(unsigned *line, unsigned *column = 0, StringLiteral **fileId = 0) const;
-    void getStartPosition(unsigned *line, unsigned *column = 0, StringLiteral **fileId = 0) const;
-    void getEndPosition(unsigned *line, unsigned *column = 0, StringLiteral **fileId = 0) const;
+    void getPosition(unsigned *line, unsigned *column = 0, const StringLiteral **fileId = 0) const;
+    void getStartPosition(unsigned *line, unsigned *column = 0, const StringLiteral **fileId = 0) const;
+    void getEndPosition(unsigned *line, unsigned *column = 0, const StringLiteral **fileId = 0) const;
 
     /// Returns this Symbol's name.
     Name *name() const;
@@ -127,7 +127,7 @@ public:
     void setName(Name *name); // ### dangerous
 
     /// Returns this Symbol's (optional) identifier
-    Identifier *identifier() const;
+    const Identifier *identifier() const;
 
     /// Returns this Symbol's storage class specifier.
     int storage() const;
diff --git a/src/shared/cplusplus/Token.h b/src/shared/cplusplus/Token.h
index acbe3927ba2..cd1cf577c6d 100644
--- a/src/shared/cplusplus/Token.h
+++ b/src/shared/cplusplus/Token.h
@@ -335,10 +335,10 @@ public:
 
     union {
         void *ptr;
-        Literal *literal;
-        NumericLiteral *number;
-        StringLiteral *string;
-        Identifier *identifier;
+        const Literal *literal;
+        const NumericLiteral *number;
+        const StringLiteral *string;
+        const Identifier *identifier;
         unsigned close_brace;
         unsigned lineno;
     };
diff --git a/src/shared/cplusplus/TranslationUnit.cpp b/src/shared/cplusplus/TranslationUnit.cpp
index 92f2bfb5ce5..fe39d5bb6f4 100644
--- a/src/shared/cplusplus/TranslationUnit.cpp
+++ b/src/shared/cplusplus/TranslationUnit.cpp
@@ -60,7 +60,7 @@
 
 using namespace CPlusPlus;
 
-TranslationUnit::TranslationUnit(Control *control, StringLiteral *fileId)
+TranslationUnit::TranslationUnit(Control *control, const StringLiteral *fileId)
     : _control(control),
       _fileId(fileId),
       _firstSourceChar(0),
@@ -96,7 +96,7 @@ void TranslationUnit::setObjCEnabled(bool onoff)
 Control *TranslationUnit::control() const
 { return _control; }
 
-StringLiteral *TranslationUnit::fileId() const
+const StringLiteral *TranslationUnit::fileId() const
 { return _fileId; }
 
 const char *TranslationUnit::fileName() const
@@ -137,16 +137,16 @@ const char *TranslationUnit::spell(unsigned index) const
     return _tokens->at(index).spell();
 }
 
-Identifier *TranslationUnit::identifier(unsigned index) const
+const Identifier *TranslationUnit::identifier(unsigned index) const
 { return _tokens->at(index).identifier; }
 
-Literal *TranslationUnit::literal(unsigned index) const
+const Literal *TranslationUnit::literal(unsigned index) const
 { return _tokens->at(index).literal; }
 
-StringLiteral *TranslationUnit::stringLiteral(unsigned index) const
+const StringLiteral *TranslationUnit::stringLiteral(unsigned index) const
 { return _tokens->at(index).string; }
 
-NumericLiteral *TranslationUnit::numericLiteral(unsigned index) const
+const NumericLiteral *TranslationUnit::numericLiteral(unsigned index) const
 { return _tokens->at(index).number; }
 
 unsigned TranslationUnit::matchingBrace(unsigned index) const
@@ -181,8 +181,8 @@ void TranslationUnit::tokenize()
     pushLineOffset(0);
     pushPreprocessorLine(0, 1, fileId());
 
-    Identifier *lineId   = control()->findOrInsertIdentifier("line");
-    Identifier *genId    = control()->findOrInsertIdentifier("gen");
+    const Identifier *lineId   = control()->findOrInsertIdentifier("line");
+    const Identifier *genId    = control()->findOrInsertIdentifier("gen");
 
     bool generated = false;
     Token tk;
@@ -211,8 +211,8 @@ void TranslationUnit::tokenize()
                     unsigned line = (unsigned) strtoul(tk.spell(), 0, 0);
                     lex(&tk);
                     if (! tk.f.newline && tk.is(T_STRING_LITERAL)) {
-                        StringLiteral *fileName = control()->findOrInsertStringLiteral(tk.string->chars(),
-                                                                                       tk.string->size());
+                        const StringLiteral *fileName = control()->findOrInsertStringLiteral(tk.string->chars(),
+                                                                                             tk.string->size());
                         pushPreprocessorLine(offset, line, fileName);
                         lex(&tk);
                     }
@@ -303,7 +303,7 @@ void TranslationUnit::pushLineOffset(unsigned offset)
 
 void TranslationUnit::pushPreprocessorLine(unsigned offset,
                                            unsigned line,
-                                           StringLiteral *fileName)
+                                           const StringLiteral *fileName)
 { _ppLines.push_back(PPLine(offset, line, fileName)); }
 
 unsigned TranslationUnit::findLineNumber(unsigned offset) const
@@ -339,23 +339,23 @@ unsigned TranslationUnit::findColumnNumber(unsigned offset, unsigned lineNumber)
 void TranslationUnit::getTokenPosition(unsigned index,
                                        unsigned *line,
                                        unsigned *column,
-                                       StringLiteral **fileName) const
+                                       const StringLiteral **fileName) const
 { return getPosition(tokenAt(index).offset, line, column, fileName); }
 
 void TranslationUnit::getTokenStartPosition(unsigned index, unsigned *line,
                                             unsigned *column,
-                                            StringLiteral **fileName) const
+                                            const StringLiteral **fileName) const
 { return getPosition(tokenAt(index).begin(), line, column, fileName); }
 
 void TranslationUnit::getTokenEndPosition(unsigned index, unsigned *line,
                                           unsigned *column,
-                                          StringLiteral **fileName) const
+                                          const StringLiteral **fileName) const
 { return getPosition(tokenAt(index).end(), line, column, fileName); }
 
 void TranslationUnit::getPosition(unsigned tokenOffset,
                                   unsigned *line,
                                   unsigned *column,
-                                  StringLiteral **fileName) const
+                                  const StringLiteral **fileName) const
 {
     unsigned lineNumber = findLineNumber(tokenOffset);
     unsigned columnNumber = findColumnNumber(tokenOffset, lineNumber);
@@ -389,7 +389,7 @@ void TranslationUnit::warning(unsigned index, const char *format, ...)
     index = std::min(index, tokenCount() - 1);
 
     unsigned line = 0, column = 0;
-    StringLiteral *fileName = 0;
+    const StringLiteral *fileName = 0;
     getTokenPosition(index, &line, &column, &fileName);
 
     if (DiagnosticClient *client = control()->diagnosticClient()) {
@@ -420,7 +420,7 @@ void TranslationUnit::error(unsigned index, const char *format, ...)
     index = std::min(index, tokenCount() - 1);
 
     unsigned line = 0, column = 0;
-    StringLiteral *fileName = 0;
+    const StringLiteral *fileName = 0;
     getTokenPosition(index, &line, &column, &fileName);
 
     if (DiagnosticClient *client = control()->diagnosticClient()) {
@@ -451,7 +451,7 @@ void TranslationUnit::fatal(unsigned index, const char *format, ...)
     index = std::min(index, tokenCount() - 1);
 
     unsigned line = 0, column = 0;
-    StringLiteral *fileName = 0;
+    const StringLiteral *fileName = 0;
     getTokenPosition(index, &line, &column, &fileName);
 
     if (DiagnosticClient *client = control()->diagnosticClient()) {
diff --git a/src/shared/cplusplus/TranslationUnit.h b/src/shared/cplusplus/TranslationUnit.h
index cc26f44be41..b10a4f3f3f8 100644
--- a/src/shared/cplusplus/TranslationUnit.h
+++ b/src/shared/cplusplus/TranslationUnit.h
@@ -65,12 +65,12 @@ class CPLUSPLUS_EXPORT TranslationUnit
     void operator =(const TranslationUnit &other);
 
 public:
-    TranslationUnit(Control *control, StringLiteral *fileId);
+    TranslationUnit(Control *control, const StringLiteral *fileId);
     ~TranslationUnit();
 
     Control *control() const;
 
-    StringLiteral *fileId() const;
+    const StringLiteral *fileId() const;
     const char *fileName() const;
     unsigned fileNameLength() const;
 
@@ -86,10 +86,10 @@ public:
     const char *spell(unsigned index) const;
 
     unsigned matchingBrace(unsigned index) const;
-    Identifier *identifier(unsigned index) const;
-    Literal *literal(unsigned index) const;
-    StringLiteral *stringLiteral(unsigned index) const;
-    NumericLiteral *numericLiteral(unsigned index) const;
+    const Identifier *identifier(unsigned index) const;
+    const Literal *literal(unsigned index) const;
+    const StringLiteral *stringLiteral(unsigned index) const;
+    const NumericLiteral *numericLiteral(unsigned index) const;
 
     MemoryPool *memoryPool() const;
     AST *ast() const;
@@ -129,26 +129,26 @@ public:
 
     void getTokenStartPosition(unsigned index, unsigned *line,
                                unsigned *column = 0,
-                               StringLiteral **fileName = 0) const;
+                               const StringLiteral **fileName = 0) const;
 
     void getTokenEndPosition(unsigned index, unsigned *line,
                              unsigned *column = 0,
-                             StringLiteral **fileName = 0) const;
+                             const StringLiteral **fileName = 0) const;
 
     void getPosition(unsigned offset,
                      unsigned *line,
                      unsigned *column = 0,
-                     StringLiteral **fileName = 0) const;
+                     const StringLiteral **fileName = 0) const;
 
     void getTokenPosition(unsigned index,
                           unsigned *line,
                           unsigned *column = 0,
-                          StringLiteral **fileName = 0) const;
+                          const StringLiteral **fileName = 0) const;
 
     void pushLineOffset(unsigned offset);
     void pushPreprocessorLine(unsigned offset,
                               unsigned line,
-                              StringLiteral *fileName);
+                              const StringLiteral *fileName);
 
     unsigned findPreviousLineOffset(unsigned tokenIndex) const;
 
@@ -156,11 +156,11 @@ public:
     struct PPLine {
         unsigned offset;
         unsigned line;
-        StringLiteral *fileName;
+        const StringLiteral *fileName;
 
         PPLine(unsigned offset = 0,
                unsigned line = 0,
-               StringLiteral *fileName = 0)
+               const StringLiteral *fileName = 0)
             : offset(offset), line(line), fileName(fileName)
         { }
 
@@ -181,7 +181,7 @@ private:
     void showErrorLine(unsigned index, unsigned column, FILE *out);
 
     Control *_control;
-    StringLiteral *_fileId;
+    const StringLiteral *_fileId;
     const char *_firstSourceChar;
     const char *_lastSourceChar;
     Array<Token, 8> *_tokens;
-- 
GitLab