aboutsummaryrefslogtreecommitdiffstats
path: root/sources/shiboken2/ApiExtractor/clangparser/clangutils.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'sources/shiboken2/ApiExtractor/clangparser/clangutils.cpp')
-rw-r--r--sources/shiboken2/ApiExtractor/clangparser/clangutils.cpp276
1 files changed, 0 insertions, 276 deletions
diff --git a/sources/shiboken2/ApiExtractor/clangparser/clangutils.cpp b/sources/shiboken2/ApiExtractor/clangparser/clangutils.cpp
deleted file mode 100644
index 8bee28cdf..000000000
--- a/sources/shiboken2/ApiExtractor/clangparser/clangutils.cpp
+++ /dev/null
@@ -1,276 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of Qt for Python.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "clangutils.h"
-
-#include <QtCore/QDebug>
-#include <QtCore/QDir>
-#include <QtCore/QHashFunctions>
-#include <QtCore/QProcess>
-
-bool operator==(const CXCursor &c1, const CXCursor &c2)
-{
- return c1.kind == c2.kind
- && c1.xdata == c2.xdata
- && std::equal(c1.data, c1.data + sizeof(c1.data) / sizeof(c1.data[0]), c2.data);
-}
-
-uint qHash(const CXCursor &c, uint seed)
-{
- return qHash(c.kind) ^ qHash(c.xdata) ^ qHash(c.data[0])
- ^ qHash(c.data[1]) ^ qHash(c.data[2]) ^ seed;
-}
-
-bool operator==(const CXType &t1, const CXType &t2)
-{
- return t1.kind == t2.kind && t1.data[0] == t2.data[0]
- && t1.data[1] == t2.data[1];
-}
-
-uint qHash(const CXType &ct, uint seed)
-{
- return uint(ct.kind) ^ uint(0xFFFFFFFF & quintptr(ct.data[0]))
- ^ uint(0xFFFFFFFF & quintptr(ct.data[1])) ^ seed;
-}
-
-namespace clang {
-
-SourceLocation getExpansionLocation(const CXSourceLocation &location)
-{
- SourceLocation result;
- CXFile file; // void *
- clang_getExpansionLocation(location, &file, &result.line, &result.column, &result.offset);
- const CXString cxFileName = clang_getFileName(file);
- // Has been observed to be 0 for invalid locations
- if (const char *cFileName = clang_getCString(cxFileName))
- result.file = QString::fromUtf8(cFileName);
- clang_disposeString(cxFileName);
- return result;
-}
-
-SourceLocation getCursorLocation(const CXCursor &cursor)
-{
- const CXSourceRange extent = clang_getCursorExtent(cursor);
- return getExpansionLocation(clang_getRangeStart(extent));
-}
-
-CXString getFileNameFromLocation(const CXSourceLocation &location)
-{
- CXFile file;
- unsigned line;
- unsigned column;
- unsigned offset;
- clang_getExpansionLocation(location, &file, &line, &column, &offset);
- return clang_getFileName(file);
-}
-
-SourceRange getCursorRange(const CXCursor &cursor)
-{
- const CXSourceRange extent = clang_getCursorExtent(cursor);
- return qMakePair(getExpansionLocation(clang_getRangeStart(extent)),
- getExpansionLocation(clang_getRangeEnd(extent)));
-}
-
-QString getCursorKindName(CXCursorKind cursorKind)
-{
- CXString kindName = clang_getCursorKindSpelling(cursorKind);
- const QString result = QString::fromUtf8(clang_getCString(kindName));
- clang_disposeString(kindName);
- return result;
-}
-
-QString getCursorSpelling(const CXCursor &cursor)
-{
- CXString cursorSpelling = clang_getCursorSpelling(cursor);
- const QString result = QString::fromUtf8(clang_getCString(cursorSpelling));
- clang_disposeString(cursorSpelling);
- return result;
-}
-
-QString getCursorDisplayName(const CXCursor &cursor)
-{
- CXString displayName = clang_getCursorDisplayName(cursor);
- const QString result = QString::fromUtf8(clang_getCString(displayName));
- clang_disposeString(displayName);
- return result;
-}
-
-QString getTypeName(const CXType &type)
-{
- CXString typeSpelling = clang_getTypeSpelling(type);
- const QString result = QString::fromUtf8(clang_getCString(typeSpelling));
- clang_disposeString(typeSpelling);
- return result;
-}
-
-Diagnostic::Diagnostic(const QString &m, const CXCursor &c, CXDiagnosticSeverity s)
- : message(m), location(getCursorLocation(c)), source(Other), severity(s)
-{
-}
-
-Diagnostic Diagnostic::fromCXDiagnostic(CXDiagnostic cd)
-{
- Diagnostic result;
- result.source = Clang;
- CXString spelling = clang_getDiagnosticSpelling(cd);
- result.message = QString::fromUtf8(clang_getCString(spelling));
- clang_disposeString(spelling);
- result.severity = clang_getDiagnosticSeverity(cd);
- result.location = getExpansionLocation(clang_getDiagnosticLocation(cd));
-
- CXDiagnosticSet childDiagnostics = clang_getChildDiagnostics(cd);
- if (const unsigned childCount = clang_getNumDiagnosticsInSet(childDiagnostics)) {
- result.childMessages.reserve(int(childCount));
- const unsigned format = clang_defaultDiagnosticDisplayOptions();
- for (unsigned i = 0; i < childCount; ++i) {
- CXDiagnostic childDiagnostic = clang_getDiagnosticInSet(childDiagnostics, i);
- CXString cdm = clang_formatDiagnostic(childDiagnostic, format);
- result.childMessages.append(QString::fromUtf8(clang_getCString(cdm)));
- clang_disposeString(cdm);
- clang_disposeDiagnostic(childDiagnostic);
- }
- }
-
- return result;
-}
-
-QVector<Diagnostic> getDiagnostics(CXTranslationUnit tu)
-{
- QVector<Diagnostic> result;
- const unsigned count = clang_getNumDiagnostics(tu);
- result.reserve(int(count));
- for (unsigned i = 0; i < count; ++i) {
- const CXDiagnostic d = clang_getDiagnostic(tu, i);
- result.append(Diagnostic::fromCXDiagnostic(d));
- clang_disposeDiagnostic(d);
- }
- return result;
-}
-
-QPair<int, int> parseTemplateArgumentList(const QString &l,
- const TemplateArgumentHandler &handler,
- int from)
-{
- const int ltPos = l.indexOf(QLatin1Char('<'), from);
- if (ltPos == - 1)
- return qMakePair(-1, -1);
- int startPos = ltPos + 1;
- int level = 1;
- for (int p = startPos, end = l.size(); p < end; ) {
- const char c = l.at(p).toLatin1();
- switch (c) {
- case ',':
- case '>':
- handler(level, l.midRef(startPos, p - startPos).trimmed());
- ++p;
- if (c == '>') {
- if (--level == 0)
- return qMakePair(ltPos, p);
- // Skip over next ',': "a<b<c,d>,e>"
- for (; p < end && (l.at(p).isSpace() || l.at(p) == QLatin1Char(',')); ++p) {}
- }
- startPos = p;
- break;
- case '<':
- handler(level, l.midRef(startPos, p - startPos).trimmed());
- ++level;
- startPos = ++p;
- break;
- default:
- ++p;
- break;
- }
- }
- return qMakePair(-1, -1);
-}
-
-CXDiagnosticSeverity maxSeverity(const QVector<Diagnostic> &ds)
-{
- CXDiagnosticSeverity result = CXDiagnostic_Ignored;
- for (const Diagnostic& d : ds) {
- if (d.severity > result)
- result = d.severity;
- }
- return result;
-}
-
-#ifndef QT_NO_DEBUG_STREAM
-
-QDebug operator<<(QDebug s, const SourceLocation &l)
-{
- QDebugStateSaver saver(s);
- s.nospace();
- s.noquote();
- s << QDir::toNativeSeparators(l.file) << ':' << l.line;
- if (l.column)
- s << ':' << l.column;
- return s;
-}
-
-// Roughly follow g++ format:
-// file.cpp:214:37: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
-QDebug operator<<(QDebug s, const Diagnostic &d)
-{
- QDebugStateSaver saver(s);
- s.nospace();
- s.noquote();
- s << d.location << ": ";
- switch (d.severity) {
- case CXDiagnostic_Ignored:
- s << "ignored";
- break;
- case CXDiagnostic_Note:
- s << "note";
- break;
- case CXDiagnostic_Warning:
- s << "warning";
- break;
- case CXDiagnostic_Error:
- s << "error";
- break;
- case CXDiagnostic_Fatal:
- s << "fatal";
- break;
- }
- s << ": " << d.message;
-
- if (d.source != Diagnostic::Clang)
- s << " [other]";
-
- if (const int childMessagesCount = d.childMessages.size()) {
- s << '\n';
- for (int i = 0; i < childMessagesCount; ++i)
- s << " " << d.childMessages.at(i) << '\n';
- }
-
- return s;
-}
-
-#endif // QT_NO_DEBUG_STREAM
-
-} // namespace clang