summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoberto Raggi <roberto.raggi@nokia.com>2009-10-07 13:56:59 +0200
committercon <qtc-committer@nokia.com>2009-10-07 19:18:17 +0200
commitc33a5f38ae85484d1330a9057db58224e228babd (patch)
treef665135fbf8d983701b25d4bbed55727bf4aeda0
parentac7a6afd22c25bb831e3f9182127840ac91a2023 (diff)
downloadqt-creator-c33a5f38ae85484d1330a9057db58224e228babd.tar.gz
Removed the MacroResolver
Unfortunately, the MacroResolver does not scale and we get pretty bad performances when parsing big projects. (cherry picked from commit 77aa3064783d64cc7d028772a59f13e5f0cd4780)
-rw-r--r--src/libs/cplusplus/FastPreprocessor.cpp49
-rw-r--r--src/libs/cplusplus/FastPreprocessor.h16
-rw-r--r--src/plugins/cppeditor/cppeditor.cpp4
-rw-r--r--src/plugins/cpptools/cppfindreferences.cpp8
-rw-r--r--src/shared/cplusplus/CPlusPlusForwardDeclarations.h1
-rw-r--r--src/shared/cplusplus/Control.cpp15
-rw-r--r--src/shared/cplusplus/Control.h15
-rw-r--r--src/shared/cplusplus/Parser.cpp12
-rw-r--r--src/shared/cplusplus/Parser.h2
9 files changed, 3 insertions, 119 deletions
diff --git a/src/libs/cplusplus/FastPreprocessor.cpp b/src/libs/cplusplus/FastPreprocessor.cpp
index 4a4c10d732..b61f61cee7 100644
--- a/src/libs/cplusplus/FastPreprocessor.cpp
+++ b/src/libs/cplusplus/FastPreprocessor.cpp
@@ -34,55 +34,6 @@
using namespace CPlusPlus;
-FastMacroResolver::FastMacroResolver(TranslationUnit *unit, const Snapshot &snapshot)
- : _unit(unit), _snapshot(snapshot)
-{
- const QString fileName = QString::fromUtf8(unit->fileName(), unit->fileNameLength());
-
- QSet<QString> processed;
- updateCache(fileName, &processed);
-}
-
-bool FastMacroResolver::isMacro(TranslationUnit *unit, unsigned tokenIndex) const
-{
- if (unit != _unit){
- qWarning() << Q_FUNC_INFO << "unexpected translation unit:" << unit->fileName();
- return false;
- }
-
- const Token &tk = unit->tokenAt(tokenIndex);
- if (tk.isNot(T_IDENTIFIER))
- return false;
-
- Identifier *id = tk.identifier;
- const QByteArray macroName = QByteArray::fromRawData(id->chars(), id->size());
- return _cachedMacros.contains(macroName);
-}
-
-void FastMacroResolver::updateCache(const QString &fileName, QSet<QString> *processed)
-{
- if (processed->contains(fileName))
- return;
-
- processed->insert(fileName);
-
- if (Document::Ptr doc = _snapshot.value(fileName)) {
- const QList<Macro> definedMacros = doc->definedMacros();
-
- for (int i = definedMacros.size() - 1; i != -1; --i) {
- const Macro &macro = definedMacros.at(i);
-
- if (macro.isHidden())
- _cachedMacros.remove(macro.name());
- else
- _cachedMacros.insert(macro.name());
- }
-
- foreach (const Document::Include &incl, doc->includes())
- updateCache(incl.fileName(), processed);
- }
-}
-
FastPreprocessor::FastPreprocessor(const Snapshot &snapshot)
: _snapshot(snapshot),
_preproc(this, &_env)
diff --git a/src/libs/cplusplus/FastPreprocessor.h b/src/libs/cplusplus/FastPreprocessor.h
index 83d1bb257f..ebbc8d1752 100644
--- a/src/libs/cplusplus/FastPreprocessor.h
+++ b/src/libs/cplusplus/FastPreprocessor.h
@@ -41,22 +41,6 @@
namespace CPlusPlus {
-class CPLUSPLUS_EXPORT FastMacroResolver: public MacroResolver
-{
-public:
- FastMacroResolver(TranslationUnit *unit, const Snapshot &snapshot);
-
- virtual bool isMacro(TranslationUnit *unit, unsigned tokenIndex) const;
-
-private:
- void updateCache(const QString &fileName, QSet<QString> *processed);
-
-private:
- TranslationUnit *_unit;
- Snapshot _snapshot;
- QSet<QByteArray> _cachedMacros;
-};
-
class CPLUSPLUS_EXPORT FastPreprocessor: public Client
{
Environment _env;
diff --git a/src/plugins/cppeditor/cppeditor.cpp b/src/plugins/cppeditor/cppeditor.cpp
index d048f6dee9..13228855f9 100644
--- a/src/plugins/cppeditor/cppeditor.cpp
+++ b/src/plugins/cppeditor/cppeditor.cpp
@@ -2090,11 +2090,7 @@ SemanticInfo SemanticHighlighter::semanticInfo(const Source &source)
snapshot = source.snapshot;
doc = source.snapshot.documentFromSource(preprocessedCode, source.fileName);
-
- FastMacroResolver fastMacroResolver(doc->translationUnit(), snapshot);
- doc->control()->setMacroResolver(&fastMacroResolver);
doc->check();
- doc->control()->setMacroResolver(0);
}
Control *control = doc->control();
diff --git a/src/plugins/cpptools/cppfindreferences.cpp b/src/plugins/cpptools/cppfindreferences.cpp
index 6d9b9f8d0e..26f9a18696 100644
--- a/src/plugins/cpptools/cppfindreferences.cpp
+++ b/src/plugins/cpptools/cppfindreferences.cpp
@@ -531,13 +531,7 @@ static void find_helper(QFutureInterface<Utils::FileSearchResult> &future,
if (Identifier *id = control->findIdentifier(symbolId->chars(), symbolId->size())) {
QTime tm;
tm.start();
- TranslationUnit *unit = doc->translationUnit();
- Control *control = doc->control();
-
- FastMacroResolver fastMacroResolver(unit, snapshot);
- control->setMacroResolver(&fastMacroResolver);
doc->parse();
- control->setMacroResolver(0);
//qDebug() << "***" << unit->fileName() << "parsed in:" << tm.elapsed();
@@ -548,6 +542,8 @@ static void find_helper(QFutureInterface<Utils::FileSearchResult> &future,
tm.start();
Process process(doc, snapshot, &future);
+
+ TranslationUnit *unit = doc->translationUnit();
process(symbol, id, unit->ast());
//qDebug() << "***" << unit->fileName() << "processed in:" << tm.elapsed();
diff --git a/src/shared/cplusplus/CPlusPlusForwardDeclarations.h b/src/shared/cplusplus/CPlusPlusForwardDeclarations.h
index 2467d4c56b..b060f11dfa 100644
--- a/src/shared/cplusplus/CPlusPlusForwardDeclarations.h
+++ b/src/shared/cplusplus/CPlusPlusForwardDeclarations.h
@@ -83,7 +83,6 @@ class Semantic;
class Control;
class MemoryPool;
class DiagnosticClient;
-class MacroResolver;
class Identifier;
class Literal;
diff --git a/src/shared/cplusplus/Control.cpp b/src/shared/cplusplus/Control.cpp
index 6338d99fd2..30c5552bbe 100644
--- a/src/shared/cplusplus/Control.cpp
+++ b/src/shared/cplusplus/Control.cpp
@@ -59,11 +59,6 @@
CPLUSPLUS_BEGIN_NAMESPACE
-MacroResolver::MacroResolver()
-{ }
-
-MacroResolver::~MacroResolver()
-{ }
template <typename _Iterator>
static void delete_map_entries(_Iterator first, _Iterator last)
@@ -93,8 +88,7 @@ public:
Data(Control *control)
: control(control),
translationUnit(0),
- diagnosticClient(0),
- macroResolver(0)
+ diagnosticClient(0)
{ }
~Data()
@@ -539,7 +533,6 @@ public:
Control *control;
TranslationUnit *translationUnit;
DiagnosticClient *diagnosticClient;
- MacroResolver *macroResolver;
LiteralTable<Identifier> identifiers;
LiteralTable<StringLiteral> stringLiterals;
LiteralTable<NumericLiteral> numericLiterals;
@@ -602,12 +595,6 @@ TranslationUnit *Control::switchTranslationUnit(TranslationUnit *unit)
return previousTranslationUnit;
}
-MacroResolver *Control::macroResolver() const
-{ return d->macroResolver; }
-
-void Control::setMacroResolver(MacroResolver *macroResolver)
-{ d->macroResolver = macroResolver; }
-
DiagnosticClient *Control::diagnosticClient() const
{ return d->diagnosticClient; }
diff --git a/src/shared/cplusplus/Control.h b/src/shared/cplusplus/Control.h
index 060be182b6..9a41629fea 100644
--- a/src/shared/cplusplus/Control.h
+++ b/src/shared/cplusplus/Control.h
@@ -55,18 +55,6 @@
CPLUSPLUS_BEGIN_HEADER
CPLUSPLUS_BEGIN_NAMESPACE
-class CPLUSPLUS_EXPORT MacroResolver
-{
- MacroResolver(const MacroResolver &other);
- void operator = (const MacroResolver &other);
-
-public:
- MacroResolver();
- virtual ~MacroResolver();
-
- virtual bool isMacro(TranslationUnit *unit, unsigned tokenIndex) const = 0;
-};
-
class CPLUSPLUS_EXPORT Control
{
public:
@@ -76,9 +64,6 @@ public:
TranslationUnit *translationUnit() const;
TranslationUnit *switchTranslationUnit(TranslationUnit *unit);
- MacroResolver *macroResolver() const;
- void setMacroResolver(MacroResolver *macroResolver);
-
DiagnosticClient *diagnosticClient() const;
void setDiagnosticClient(DiagnosticClient *diagnosticClient);
diff --git a/src/shared/cplusplus/Parser.cpp b/src/shared/cplusplus/Parser.cpp
index d335b5ebff..958d740a58 100644
--- a/src/shared/cplusplus/Parser.cpp
+++ b/src/shared/cplusplus/Parser.cpp
@@ -244,14 +244,6 @@ void Parser::match(int kind, unsigned *token)
}
}
-bool Parser::isMacro(unsigned tokenIndex) const
-{
- if (MacroResolver *r = _control->macroResolver())
- return r->isMacro(_translationUnit, tokenIndex);
-
- return false;
-}
-
bool Parser::parseClassOrNamespaceName(NameAST *&node)
{
if (LA() == T_IDENTIFIER) {
@@ -2561,10 +2553,6 @@ bool Parser::parseBuiltinTypeSpecifier(SpecifierAST *&node)
bool Parser::parseSimpleDeclaration(DeclarationAST *&node,
bool acceptStructDeclarator)
{
- if (LA() == T_IDENTIFIER && isMacro(cursor())) {
- // printf("***** found macro reference `%s'\n", tok().identifier->chars());
- }
-
unsigned qt_invokable_token = 0;
if (acceptStructDeclarator && (LA() == T_Q_SIGNAL || LA() == T_Q_SLOT))
qt_invokable_token = consumeToken();
diff --git a/src/shared/cplusplus/Parser.h b/src/shared/cplusplus/Parser.h
index 1bd6700f53..2f274e93ab 100644
--- a/src/shared/cplusplus/Parser.h
+++ b/src/shared/cplusplus/Parser.h
@@ -286,8 +286,6 @@ private:
inline void rewind(unsigned cursor)
{ _tokenIndex = cursor; }
- bool isMacro(unsigned tokenIndex) const;
-
private:
TranslationUnit *_translationUnit;
Control *_control;