aboutsummaryrefslogtreecommitdiffstats
path: root/src/qmlcompiler/qqmlsasourcelocation.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/qmlcompiler/qqmlsasourcelocation.cpp')
-rw-r--r--src/qmlcompiler/qqmlsasourcelocation.cpp125
1 files changed, 125 insertions, 0 deletions
diff --git a/src/qmlcompiler/qqmlsasourcelocation.cpp b/src/qmlcompiler/qqmlsasourcelocation.cpp
new file mode 100644
index 0000000000..63b61cce5b
--- /dev/null
+++ b/src/qmlcompiler/qqmlsasourcelocation.cpp
@@ -0,0 +1,125 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "qqmlsasourcelocation.h"
+#include "qqmlsasourcelocation_p.h"
+
+QT_BEGIN_NAMESPACE
+
+using namespace Qt::StringLiterals;
+
+namespace QQmlSA {
+
+static_assert(SourceLocationPrivate::sizeOfSourceLocation() == sizeof(SourceLocation));
+
+/*!
+ \class QQmlSA::SourceLocation
+ \inmodule QtQmlCompiler
+
+ \brief Represents a location or region in the source code.
+ */
+QQmlSA::SourceLocation::SourceLocation(quint32 offset, quint32 length, quint32 line, quint32 column)
+{
+ new (m_data) QQmlJS::SourceLocation{ offset, length, line, column };
+}
+
+// explicitly defaulted out-of-line for PIMPL
+QQmlSA::SourceLocation::SourceLocation(const SourceLocation &other) = default;
+QQmlSA::SourceLocation & QQmlSA::SourceLocation::operator=(const QQmlSA::SourceLocation &other) = default;
+SourceLocation::~SourceLocation() = default;
+
+bool QQmlSA::SourceLocation::isValid() const
+{
+ return QQmlSA::SourceLocationPrivate::sourceLocation(*this).isValid();
+}
+
+/*!
+ Returns the offset of the beginning of this source location.
+ */
+quint32 QQmlSA::SourceLocation::begin() const
+{
+ return QQmlSA::SourceLocationPrivate::sourceLocation(*this).begin();
+}
+
+/*!
+ Returns the offset of the end of this source location.
+ */
+quint32 QQmlSA::SourceLocation::end() const
+{
+ return QQmlSA::SourceLocationPrivate::sourceLocation(*this).end();
+}
+
+/*!
+ Returns the offset of the beginning of this source location.
+ */
+quint32 QQmlSA::SourceLocation::offset() const
+{
+ return QQmlSA::SourceLocationPrivate::sourceLocation(*this).offset;
+}
+
+/*!
+ Returns the length of this source location.
+ */
+quint32 QQmlSA::SourceLocation::length() const
+{
+ return QQmlSA::SourceLocationPrivate::sourceLocation(*this).length;
+}
+
+/*!
+ Returns the line number containing the beginning of this source location.
+ */
+quint32 QQmlSA::SourceLocation::startLine() const
+{
+ return QQmlSA::SourceLocationPrivate::sourceLocation(*this).startLine;
+}
+
+/*!
+ Returns the column number containing the beginning of this source location.
+ */
+quint32 QQmlSA::SourceLocation::startColumn() const
+{
+ return QQmlSA::SourceLocationPrivate::sourceLocation(*this).startColumn;
+}
+
+/*!
+ Returns a source location of lenth zero pointing to the beginning of this
+ source location.
+ */
+QQmlSA::SourceLocation QQmlSA::SourceLocation::startZeroLengthLocation() const
+{
+ QQmlSA::SourceLocation saLocation;
+ auto &wrappedLocation = reinterpret_cast<QQmlJS::SourceLocation &>(saLocation.m_data);
+ wrappedLocation =
+ QQmlSA::SourceLocationPrivate::sourceLocation(*this).startZeroLengthLocation();
+
+ return saLocation;
+}
+
+/*!
+ Returns a source location of lenth zero pointing to the end of this source
+ location pointing to \a text.
+ */
+QQmlSA::SourceLocation QQmlSA::SourceLocation::endZeroLengthLocation(QStringView text) const
+{
+ QQmlSA::SourceLocation saLocation;
+ auto &wrappedLocation = reinterpret_cast<QQmlJS::SourceLocation &>(saLocation.m_data);
+ wrappedLocation = wrappedLocation.endZeroLengthLocation(text);
+
+ return saLocation;
+}
+
+qsizetype QQmlSA::SourceLocation::qHashImpl(const SourceLocation &location, qsizetype seed)
+{
+ return qHash(QQmlSA::SourceLocationPrivate::sourceLocation(location), seed);
+}
+
+bool QQmlSA::SourceLocation::operatorEqualsImpl(const SourceLocation &lhs,
+ const SourceLocation &rhs)
+{
+ return QQmlSA::SourceLocationPrivate::sourceLocation(lhs)
+ == QQmlSA::SourceLocationPrivate::sourceLocation(rhs);
+}
+
+} // namespace QQmlSA
+
+QT_END_NAMESPACE