summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoberto Raggi <qtc-committer@nokia.com>2008-12-08 12:59:33 +0100
committerRoberto Raggi <qtc-committer@nokia.com>2008-12-08 12:59:57 +0100
commit310d50fd0760eed3558d56709b49dca9ffc74530 (patch)
treec1bc9a443c155348b4ddacb5fdcfd50dd6a94b0a
parent942363913cd907097703ecbbe4a9da98df9613d9 (diff)
downloadqt-creator-310d50fd0760eed3558d56709b49dca9ffc74530.tar.gz
Use Macros.
-rw-r--r--src/libs/cplusplus/CppDocument.cpp19
-rw-r--r--src/libs/cplusplus/CppDocument.h15
-rw-r--r--src/libs/cplusplus/pp-cctype.h10
-rw-r--r--src/libs/cplusplus/pp-client.h6
-rw-r--r--src/libs/cplusplus/pp-engine.cpp21
-rw-r--r--src/libs/cplusplus/pp-engine.h2
-rw-r--r--src/libs/cplusplus/pp-environment.cpp4
-rw-r--r--src/libs/cplusplus/pp-environment.h8
-rw-r--r--src/libs/cplusplus/pp-macro.h45
-rw-r--r--src/plugins/cpptools/cppcodecompletion.cpp4
-rw-r--r--src/plugins/cpptools/cppmodelmanager.cpp20
11 files changed, 69 insertions, 85 deletions
diff --git a/src/libs/cplusplus/CppDocument.cpp b/src/libs/cplusplus/CppDocument.cpp
index 3a280416d9..45ad1f569a 100644
--- a/src/libs/cplusplus/CppDocument.cpp
+++ b/src/libs/cplusplus/CppDocument.cpp
@@ -138,19 +138,9 @@ void Document::addIncludeFile(const QString &fileName)
_includedFiles.append(fileName);
}
-QByteArray Document::definedMacros() const
+void Document::appendMacro(const Macro &macro)
{
- return _definedMacros;
-}
-
-void Document::appendMacro(const QByteArray &macroName, const QByteArray &text)
-{
- int index = macroName.indexOf('(');
- if (index == -1)
- _macroNames.insert(macroName);
- else
- _macroNames.insert(macroName.left(index));
- _definedMacros += text;
+ _definedMacros.append(macro);
}
void Document::addMacroUse(unsigned offset, unsigned length)
@@ -251,11 +241,6 @@ void Document::stopSkippingBlocks(unsigned stop)
_skippedBlocks.back() = Block(start, stop);
}
-QSet<QByteArray> Document::macroNames() const
-{
- return _macroNames;
-}
-
bool Document::parse(ParseMode mode)
{
TranslationUnit::ParseMode m = TranslationUnit::ParseTranlationUnit;
diff --git a/src/libs/cplusplus/CppDocument.h b/src/libs/cplusplus/CppDocument.h
index e952913a07..d289c579e9 100644
--- a/src/libs/cplusplus/CppDocument.h
+++ b/src/libs/cplusplus/CppDocument.h
@@ -36,6 +36,8 @@
#include <CPlusPlusForwardDeclarations.h>
+#include "pp-macro.h"
+
#include <QByteArray>
#include <QList>
#include <QSet>
@@ -45,6 +47,8 @@
namespace CPlusPlus {
+class Macro;
+
class CPLUSPLUS_EXPORT Document
{
Document(const Document &other);
@@ -63,10 +67,7 @@ public:
QStringList includedFiles() const;
void addIncludeFile(const QString &fileName);
- QByteArray definedMacros() const;
- QSet<QByteArray> macroNames() const;
-
- void appendMacro(const QByteArray &macroName, const QByteArray &text);
+ void appendMacro(const Macro &macro);
void addMacroUse(unsigned offset, unsigned length);
@@ -81,6 +82,9 @@ public:
Scope *globalSymbols() const; // ### deprecate?
Namespace *globalNamespace() const;
+ QList<Macro> definedMacros() const
+ { return _definedMacros; }
+
Symbol *findSymbolAt(unsigned line, unsigned column) const;
void setSource(const QByteArray &source);
@@ -191,8 +195,7 @@ private:
TranslationUnit *_translationUnit;
Namespace *_globalNamespace;
QList<DiagnosticMessage> _diagnosticMessages;
- QByteArray _definedMacros;
- QSet<QByteArray> _macroNames;
+ QList<Macro> _definedMacros;
QList<Block> _skippedBlocks;
QList<Block> _macroUses;
};
diff --git a/src/libs/cplusplus/pp-cctype.h b/src/libs/cplusplus/pp-cctype.h
index bec9c25aef..b7558ae505 100644
--- a/src/libs/cplusplus/pp-cctype.h
+++ b/src/libs/cplusplus/pp-cctype.h
@@ -53,20 +53,22 @@
#ifndef PP_CCTYPE_H
#define PP_CCTYPE_H
+#include <CPlusPlusForwardDeclarations.h>
+
#include <cctype>
namespace CPlusPlus {
-inline bool pp_isalpha (int __ch)
+inline bool CPLUSPLUS_EXPORT pp_isalpha (int __ch)
{ return std::isalpha ((unsigned char) __ch) != 0; }
-inline bool pp_isalnum (int __ch)
+inline bool CPLUSPLUS_EXPORT pp_isalnum (int __ch)
{ return std::isalnum ((unsigned char) __ch) != 0; }
-inline bool pp_isdigit (int __ch)
+inline bool CPLUSPLUS_EXPORT pp_isdigit (int __ch)
{ return std::isdigit ((unsigned char) __ch) != 0; }
-inline bool pp_isspace (int __ch)
+inline bool CPLUSPLUS_EXPORT pp_isspace (int __ch)
{ return std::isspace ((unsigned char) __ch) != 0; }
} // namespace CPlusPlus
diff --git a/src/libs/cplusplus/pp-client.h b/src/libs/cplusplus/pp-client.h
index 35df649733..2fc781f22f 100644
--- a/src/libs/cplusplus/pp-client.h
+++ b/src/libs/cplusplus/pp-client.h
@@ -34,6 +34,8 @@
#ifndef PP_CLIENT_H
#define PP_CLIENT_H
+#include <CPlusPlusForwardDeclarations.h>
+
#include <QByteArray>
#include <QString>
#include <QFile>
@@ -42,7 +44,7 @@ namespace CPlusPlus {
class Macro;
-class Client
+class CPLUSPLUS_EXPORT Client
{
Client(const Client &other);
void operator=(const Client &other);
@@ -60,7 +62,7 @@ public:
virtual ~Client()
{ }
- virtual void macroAdded(const QByteArray &macroId, const QByteArray &text) = 0;
+ virtual void macroAdded(const Macro &macro) = 0;
virtual void sourceNeeded(QString &fileName, IncludeType mode) = 0; // ### FIX the signature.
virtual void startExpandingMacro(unsigned offset,
diff --git a/src/libs/cplusplus/pp-engine.cpp b/src/libs/cplusplus/pp-engine.cpp
index f2e1d4908e..7bdc9b95d6 100644
--- a/src/libs/cplusplus/pp-engine.cpp
+++ b/src/libs/cplusplus/pp-engine.cpp
@@ -906,16 +906,8 @@ void pp::processDefine(TokenIterator firstToken, TokenIterator lastToken)
env.bind(macro);
- QByteArray macroText;
- macroText.reserve(64);
- macroText += "#define ";
-
- macroText += macroId;
- macroText += ' ';
- macroText += macro.definition;
- macroText += '\n';
-
- client->macroAdded(macroId, macroText);
+ if (client)
+ client->macroAdded(macro);
}
void pp::processIf(TokenIterator firstToken, TokenIterator lastToken)
@@ -1019,13 +1011,10 @@ void pp::processUndef(TokenIterator firstToken, TokenIterator lastToken)
if (tk->is(T_IDENTIFIER)) {
const QByteArray macroName = tokenText(*tk);
- env.remove(macroName);
+ const Macro *macro = env.remove(macroName);
- QByteArray macroText;
- macroText += "#undef ";
- macroText += macroName;
- macroText += '\n';
- client->macroAdded(macroName, macroText);
+ if (client && macro)
+ client->macroAdded(*macro);
}
}
diff --git a/src/libs/cplusplus/pp-engine.h b/src/libs/cplusplus/pp-engine.h
index d0729b3715..c909ffab3a 100644
--- a/src/libs/cplusplus/pp-engine.h
+++ b/src/libs/cplusplus/pp-engine.h
@@ -134,7 +134,7 @@ namespace CPlusPlus {
#undef PP_DEFINE_BIN_OP
};
- class pp
+ class CPLUSPLUS_EXPORT pp
{
Client *client;
Environment &env;
diff --git a/src/libs/cplusplus/pp-environment.cpp b/src/libs/cplusplus/pp-environment.cpp
index b06d41757d..a1ade3b189 100644
--- a/src/libs/cplusplus/pp-environment.cpp
+++ b/src/libs/cplusplus/pp-environment.cpp
@@ -115,12 +115,12 @@ Macro *Environment::bind(const Macro &__macro)
return m;
}
-void Environment::remove (const QByteArray &name)
+Macro *Environment::remove (const QByteArray &name)
{
Macro macro;
macro.name = name;
macro.hidden = true;
- bind(macro);
+ return bind(macro);
}
bool Environment::isBuiltinMacro(const QByteArray &s) const
diff --git a/src/libs/cplusplus/pp-environment.h b/src/libs/cplusplus/pp-environment.h
index e3d130871b..e2a75d29b8 100644
--- a/src/libs/cplusplus/pp-environment.h
+++ b/src/libs/cplusplus/pp-environment.h
@@ -53,14 +53,16 @@
#ifndef PP_ENVIRONMENT_H
#define PP_ENVIRONMENT_H
+#include "CPlusPlusForwardDeclarations.h"
+
#include <QVector>
#include <QByteArray>
namespace CPlusPlus {
-struct Macro;
+class Macro;
-class Environment
+class CPLUSPLUS_EXPORT Environment
{
public:
Environment();
@@ -70,7 +72,7 @@ public:
Macro *macroAt(unsigned index) const;
Macro *bind(const Macro &macro);
- void remove(const QByteArray &name);
+ Macro *remove(const QByteArray &name);
Macro *resolve(const QByteArray &name) const;
bool isBuiltinMacro(const QByteArray &name) const;
diff --git a/src/libs/cplusplus/pp-macro.h b/src/libs/cplusplus/pp-macro.h
index b091abd618..494b7a4de7 100644
--- a/src/libs/cplusplus/pp-macro.h
+++ b/src/libs/cplusplus/pp-macro.h
@@ -53,42 +53,43 @@
#ifndef PP_MACRO_H
#define PP_MACRO_H
+#include <CPlusPlusForwardDeclarations.h>
+
#include <QByteArray>
#include <QVector>
namespace CPlusPlus {
- struct Macro
+class CPLUSPLUS_EXPORT Macro
+{
+public:
+ QByteArray name;
+ QByteArray definition;
+ QVector<QByteArray> formals;
+ QByteArray fileName;
+ int line;
+ Macro *next;
+ unsigned hashcode;
+
+ union
{
- QByteArray name;
- QByteArray definition;
- QVector<QByteArray> formals;
- QByteArray fileName;
- int line;
- int lines;
- Macro *next;
- unsigned hashcode;
+ unsigned state;
- union
+ struct
{
- unsigned state;
-
- struct
- {
- unsigned hidden: 1;
- unsigned function_like: 1;
- unsigned variadics: 1;
- };
+ unsigned hidden: 1;
+ unsigned function_like: 1;
+ unsigned variadics: 1;
};
+ };
- inline Macro():
+ inline Macro():
line(0),
- lines(0),
next(0),
hashcode(0),
state(0)
- { }
- };
+ { }
+};
} // namespace CPlusPlus
diff --git a/src/plugins/cpptools/cppcodecompletion.cpp b/src/plugins/cpptools/cppcodecompletion.cpp
index 7568d2c887..47ac5c5767 100644
--- a/src/plugins/cpptools/cppcodecompletion.cpp
+++ b/src/plugins/cpptools/cppcodecompletion.cpp
@@ -699,7 +699,9 @@ void CppCodeCompletion::addMacros(const LookupContext &context)
continue;
processed.insert(fn);
if (Document::Ptr doc = context.document(fn)) {
- macroNames += doc->macroNames();
+ foreach (const Macro macro, doc->definedMacros()) {
+ macroNames.insert(macro.name);
+ }
todo += doc->includedFiles();
}
}
diff --git a/src/plugins/cpptools/cppmodelmanager.cpp b/src/plugins/cpptools/cppmodelmanager.cpp
index af885de622..e8359da2b5 100644
--- a/src/plugins/cpptools/cppmodelmanager.cpp
+++ b/src/plugins/cpptools/cppmodelmanager.cpp
@@ -31,7 +31,7 @@
**
***************************************************************************/
-#include "pp.h"
+#include <cplusplus/pp.h>
#include "cppmodelmanager.h"
#include "cpphoverhandler.h"
@@ -129,8 +129,7 @@ protected:
void mergeEnvironment(CPlusPlus::Document::Ptr doc);
void mergeEnvironment(CPlusPlus::Document::Ptr doc, QSet<QString> *processed);
- virtual void macroAdded(const QByteArray &macroName,
- const QByteArray &macroText);
+ virtual void macroAdded(const Macro &macro);
virtual void startExpandingMacro(unsigned offset,
const Macro &macro,
const QByteArray &originalText);
@@ -295,12 +294,12 @@ QByteArray CppPreprocessor::tryIncludeFile(QString &fileName, IncludeType type)
return QByteArray();
}
-void CppPreprocessor::macroAdded(const QByteArray &macroName, const QByteArray &macroText)
+void CppPreprocessor::macroAdded(const Macro &macro)
{
if (! m_currentDoc)
return;
- m_currentDoc->appendMacro(macroName, macroText);
+ m_currentDoc->appendMacro(macro);
}
void CppPreprocessor::startExpandingMacro(unsigned offset,
@@ -340,14 +339,13 @@ void CppPreprocessor::mergeEnvironment(Document::Ptr doc, QSet<QString> *process
processed->insert(fn);
- foreach (QString includedFile, doc->includedFiles())
+ foreach (QString includedFile, doc->includedFiles()) {
mergeEnvironment(m_documents.value(includedFile), processed);
+ }
- const QByteArray macros = doc->definedMacros();
- QByteArray localFileName = doc->fileName().toUtf8();
-
- QByteArray dummy;
- m_proc(localFileName, macros, &dummy);
+ foreach (const Macro macro, doc->definedMacros()) {
+ env.bind(macro);
+ }
}
void CppPreprocessor::startSkippingBlocks(unsigned offset)