From 0422bcbbd599cafe87735087804a434b78e353ff Mon Sep 17 00:00:00 2001 From: Roberto Raggi <qtc-committer@nokia.com> Date: Mon, 22 Dec 2008 14:10:47 +0100 Subject: [PATCH] Some more clean up in the preprocessor. --- src/libs/cplusplus/CppDocument.h | 3 +- src/libs/cplusplus/Macro.cpp | 89 +++++++++++++++++++ src/libs/cplusplus/{pp-macro.h => Macro.h} | 34 +------ src/libs/cplusplus/PreprocessorClient.cpp | 42 +++++++++ .../{pp-client.h => PreprocessorClient.h} | 15 ++-- ...onment.cpp => PreprocessorEnvironment.cpp} | 15 ++-- ...nvironment.h => PreprocessorEnvironment.h} | 4 +- src/libs/cplusplus/cplusplus.pro | 12 +-- src/libs/cplusplus/pp-engine.h | 2 +- src/libs/cplusplus/pp-macro-expander.cpp | 6 +- src/libs/cplusplus/pp.h | 6 +- 11 files changed, 164 insertions(+), 64 deletions(-) create mode 100644 src/libs/cplusplus/Macro.cpp rename src/libs/cplusplus/{pp-macro.h => Macro.h} (79%) create mode 100644 src/libs/cplusplus/PreprocessorClient.cpp rename src/libs/cplusplus/{pp-client.h => PreprocessorClient.h} (94%) rename src/libs/cplusplus/{pp-environment.cpp => PreprocessorEnvironment.cpp} (95%) rename src/libs/cplusplus/{pp-environment.h => PreprocessorEnvironment.h} (97%) diff --git a/src/libs/cplusplus/CppDocument.h b/src/libs/cplusplus/CppDocument.h index 98b5ed1a2ad..d872dd3a1af 100644 --- a/src/libs/cplusplus/CppDocument.h +++ b/src/libs/cplusplus/CppDocument.h @@ -35,8 +35,7 @@ #define CPPDOCUMENT_H #include <CPlusPlusForwardDeclarations.h> - -#include "pp-macro.h" +#include "Macro.h" #include <QByteArray> #include <QList> diff --git a/src/libs/cplusplus/Macro.cpp b/src/libs/cplusplus/Macro.cpp new file mode 100644 index 00000000000..d5492b983b7 --- /dev/null +++ b/src/libs/cplusplus/Macro.cpp @@ -0,0 +1,89 @@ +/*************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Qt Software Information (qt-info@nokia.com) +** +** +** Non-Open Source Usage +** +** Licensees may use this file in accordance with the Qt Beta Version +** License Agreement, Agreement version 2.2 provided with the Software or, +** alternatively, in accordance with the terms contained in a written +** agreement between you and Nokia. +** +** GNU General Public License Usage +** +** Alternatively, this file may be used under the terms of the GNU General +** Public License versions 2.0 or 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the packaging +** of this file. Please review the following information to ensure GNU +** General Public Licensing requirements will be met: +** +** http://www.fsf.org/licensing/licenses/info/GPLv2.html and +** http://www.gnu.org/copyleft/gpl.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt GPL Exception +** version 1.3, included in the file GPL_EXCEPTION.txt in this package. +** +***************************************************************************/ +/* + Copyright 2005 Roberto Raggi <roberto@kdevelop.org> + + Permission to use, copy, modify, distribute, and sell this software and its + documentation for any purpose is hereby granted without fee, provided that + the above copyright notice appear in all copies and that both that + copyright notice and this permission notice appear in supporting + documentation. + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + KDEVELOP TEAM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + +#include "Macro.h" + +using namespace CPlusPlus; + +Macro::Macro() + : _next(0), + _hashcode(0), + _line(0), + _state(0) +{ } + +QString Macro::toString() const +{ + QString text; + if (_hidden) + text += QLatin1String("#undef "); + else + text += QLatin1String("#define "); + text += QString::fromUtf8(_name.constData(), _name.size()); + if (_functionLike) { + text += QLatin1Char('('); + bool first = true; + foreach (const QByteArray formal, _formals) { + if (! first) + text += QLatin1String(", "); + else + first = false; + text += QString::fromUtf8(formal.constData(), formal.size()); + } + if (_variadic) + text += QLatin1String("..."); + text += QLatin1Char(')'); + } + text += QLatin1Char(' '); + text += QString::fromUtf8(_definition.constData(), _definition.size()); + return text; +} diff --git a/src/libs/cplusplus/pp-macro.h b/src/libs/cplusplus/Macro.h similarity index 79% rename from src/libs/cplusplus/pp-macro.h rename to src/libs/cplusplus/Macro.h index 36fe7995ad2..3957f13fab6 100644 --- a/src/libs/cplusplus/pp-macro.h +++ b/src/libs/cplusplus/Macro.h @@ -64,12 +64,7 @@ namespace CPlusPlus { class CPLUSPLUS_EXPORT Macro { public: - Macro() - : _next(0), - _hashcode(0), - _line(0), - _state(0) - { } + Macro(); QByteArray name() const { return _name; } @@ -119,32 +114,7 @@ public: void setVariadic(bool isVariadic) { _variadic = isVariadic; } - QString toString() const - { - QString text; - if (_hidden) - text += QLatin1String("#undef "); - else - text += QLatin1String("#define "); - text += QString::fromUtf8(_name.constData(), _name.size()); - if (_functionLike) { - text += QLatin1Char('('); - bool first = true; - foreach (const QByteArray formal, _formals) { - if (! first) - text += QLatin1String(", "); - else - first = false; - text += QString::fromUtf8(formal.constData(), formal.size()); - } - if (_variadic) - text += QLatin1String("..."); - text += QLatin1Char(')'); - } - text += QLatin1Char(' '); - text += QString::fromUtf8(_definition.constData(), _definition.size()); - return text; - } + QString toString() const; // ### private Macro *_next; diff --git a/src/libs/cplusplus/PreprocessorClient.cpp b/src/libs/cplusplus/PreprocessorClient.cpp new file mode 100644 index 00000000000..2eb5656446e --- /dev/null +++ b/src/libs/cplusplus/PreprocessorClient.cpp @@ -0,0 +1,42 @@ +/*************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Qt Software Information (qt-info@nokia.com) +** +** +** Non-Open Source Usage +** +** Licensees may use this file in accordance with the Qt Beta Version +** License Agreement, Agreement version 2.2 provided with the Software or, +** alternatively, in accordance with the terms contained in a written +** agreement between you and Nokia. +** +** GNU General Public License Usage +** +** Alternatively, this file may be used under the terms of the GNU General +** Public License versions 2.0 or 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the packaging +** of this file. Please review the following information to ensure GNU +** General Public Licensing requirements will be met: +** +** http://www.fsf.org/licensing/licenses/info/GPLv2.html and +** http://www.gnu.org/copyleft/gpl.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt GPL Exception +** version 1.3, included in the file GPL_EXCEPTION.txt in this package. +** +***************************************************************************/ + +#include "PreprocessorClient.h" + +using namespace CPlusPlus; + +Client::Client() +{ } + +Client::~Client() +{ } diff --git a/src/libs/cplusplus/pp-client.h b/src/libs/cplusplus/PreprocessorClient.h similarity index 94% rename from src/libs/cplusplus/pp-client.h rename to src/libs/cplusplus/PreprocessorClient.h index d7dd49b18b7..2d37dac3e6d 100644 --- a/src/libs/cplusplus/pp-client.h +++ b/src/libs/cplusplus/PreprocessorClient.h @@ -35,10 +35,12 @@ #define CPLUSPLUS_PP_CLIENT_H #include <CPlusPlusForwardDeclarations.h> +#include <QtGlobal> -#include <QByteArray> -#include <QString> -#include <QFile> +QT_BEGIN_NAMESPACE +class QByteArray; +class QString; +QT_END_NAMESPACE namespace CPlusPlus { @@ -56,11 +58,8 @@ public: }; public: - Client() - { } - - virtual ~Client() - { } + Client(); + virtual ~Client(); virtual void macroAdded(const Macro ¯o) = 0; virtual void sourceNeeded(QString &fileName, IncludeType mode, diff --git a/src/libs/cplusplus/pp-environment.cpp b/src/libs/cplusplus/PreprocessorEnvironment.cpp similarity index 95% rename from src/libs/cplusplus/pp-environment.cpp rename to src/libs/cplusplus/PreprocessorEnvironment.cpp index 7b93c275d3d..693fe6160ea 100644 --- a/src/libs/cplusplus/pp-environment.cpp +++ b/src/libs/cplusplus/PreprocessorEnvironment.cpp @@ -50,16 +50,15 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -#include "pp-environment.h" -#include "pp.h" - +#include "PreprocessorEnvironment.h" +#include "Macro.h" #include <cstring> using namespace CPlusPlus; Environment::Environment() : currentLine(0), - hide_next(false), + hideNext(false), _macros(0), _allocated_macros(0), _macro_count(-1), @@ -94,7 +93,7 @@ Macro *Environment::bind(const Macro &__macro) Q_ASSERT(! __macro.name().isEmpty()); Macro *m = new Macro (__macro); - m->_hashcode = hash_code(m->name()); + m->_hashcode = hashCode(m->name()); if (++_macro_count == _allocated_macros) { if (! _allocated_macros) @@ -192,12 +191,12 @@ bool Environment::isBuiltinMacro(const QByteArray &s) const return false; } -Macro *Environment::resolve (const QByteArray &name) const +Macro *Environment::resolve(const QByteArray &name) const { if (! _macros) return 0; - Macro *it = _hash[hash_code (name) % _hash_count]; + Macro *it = _hash[hashCode(name) % _hash_count]; for (; it; it = it->_next) { if (it->name() != name) continue; @@ -208,7 +207,7 @@ Macro *Environment::resolve (const QByteArray &name) const return it; } -unsigned Environment::hash_code (const QByteArray &s) +unsigned Environment::hashCode(const QByteArray &s) { unsigned hash_value = 0; diff --git a/src/libs/cplusplus/pp-environment.h b/src/libs/cplusplus/PreprocessorEnvironment.h similarity index 97% rename from src/libs/cplusplus/pp-environment.h rename to src/libs/cplusplus/PreprocessorEnvironment.h index 97d0fe02d3c..48ee5b2715a 100644 --- a/src/libs/cplusplus/pp-environment.h +++ b/src/libs/cplusplus/PreprocessorEnvironment.h @@ -90,13 +90,13 @@ public: { return _macros + _macro_count + 1; } private: - static unsigned hash_code (const QByteArray &s); + static unsigned hashCode(const QByteArray &s); void rehash(); public: QByteArray currentFile; unsigned currentLine; - bool hide_next; + bool hideNext; private: Macro **_macros; diff --git a/src/libs/cplusplus/cplusplus.pro b/src/libs/cplusplus/cplusplus.pro index b8bde402825..f89d4d3f862 100644 --- a/src/libs/cplusplus/cplusplus.pro +++ b/src/libs/cplusplus/cplusplus.pro @@ -22,14 +22,14 @@ HEADERS += \ TypePrettyPrinter.h \ ResolveExpression.h \ LookupContext.h \ + PreprocessorClient.h \ + PreprocessorEnvironment.h \ + Macro.h \ pp.h \ pp-cctype.h \ pp-engine.h \ pp-macro-expander.h \ - pp-scanner.h \ - pp-client.h \ - pp-environment.h \ - pp-macro.h + pp-scanner.h SOURCES += \ SimpleLexer.cpp \ @@ -44,8 +44,10 @@ SOURCES += \ TypePrettyPrinter.cpp \ ResolveExpression.cpp \ LookupContext.cpp \ + PreprocessorClient.cpp \ + PreprocessorEnvironment.cpp \ + Macro.cpp \ pp-engine.cpp \ - pp-environment.cpp \ pp-macro-expander.cpp \ pp-scanner.cpp diff --git a/src/libs/cplusplus/pp-engine.h b/src/libs/cplusplus/pp-engine.h index 7ff0005c393..d0a573aed9c 100644 --- a/src/libs/cplusplus/pp-engine.h +++ b/src/libs/cplusplus/pp-engine.h @@ -53,7 +53,7 @@ #ifndef CPLUSPLUS_PP_ENGINE_H #define CPLUSPLUS_PP_ENGINE_H -#include "pp-client.h" +#include "PreprocessorClient.h" #include <Token.h> #include <QVector> diff --git a/src/libs/cplusplus/pp-macro-expander.cpp b/src/libs/cplusplus/pp-macro-expander.cpp index 5b0f20b66c5..40bbc8090b6 100644 --- a/src/libs/cplusplus/pp-macro-expander.cpp +++ b/src/libs/cplusplus/pp-macro-expander.cpp @@ -213,12 +213,12 @@ const char *MacroExpander::operator () (const char *__first, const char *__last, } Macro *macro = env.resolve (fast_name); - if (! macro || macro->isHidden() || env.hide_next) + if (! macro || macro->isHidden() || env.hideNext) { if (fast_name.size () == 7 && fast_name [0] == 'd' && fast_name == "defined") - env.hide_next = true; + env.hideNext = true; else - env.hide_next = false; + env.hideNext = false; if (fast_name.size () == 8 && fast_name [0] == '_' && fast_name [1] == '_') { diff --git a/src/libs/cplusplus/pp.h b/src/libs/cplusplus/pp.h index 2cf40eed096..96c81867163 100644 --- a/src/libs/cplusplus/pp.h +++ b/src/libs/cplusplus/pp.h @@ -53,11 +53,11 @@ #ifndef CPLUSPLUS_PREPROCESSOR_H #define CPLUSPLUS_PREPROCESSOR_H -#include "pp-macro.h" -#include "pp-environment.h" +#include "Macro.h" +#include "PreprocessorClient.h" +#include "PreprocessorEnvironment.h" #include "pp-scanner.h" #include "pp-macro-expander.h" #include "pp-engine.h" -#include "pp-client.h" #endif // CPLUSPLUS_PREPROCESSOR_H -- GitLab