// Copyright (C) 2016 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only #ifndef QQMLJSENGINE_P_H #define QQMLJSENGINE_P_H // // W A R N I N G // ------------- // // This file is not part of the Qt API. It exists purely as an // implementation detail. This header file may change from version to // version without notice, or even be removed. // // We mean it. // #include "qqmljsglobal_p.h" #include #include #include #include QT_BEGIN_NAMESPACE namespace QQmlJS { class Lexer; class MemoryPool; class QML_PARSER_EXPORT Directives { public: virtual ~Directives() {} virtual void pragmaLibrary() { } virtual void importFile(const QString &jsfile, const QString &module, int line, int column) { Q_UNUSED(jsfile); Q_UNUSED(module); Q_UNUSED(line); Q_UNUSED(column); } virtual void importModule(const QString &uri, const QString &version, const QString &module, int line, int column) { Q_UNUSED(uri); Q_UNUSED(version); Q_UNUSED(module); Q_UNUSED(line); Q_UNUSED(column); } }; class Engine { Lexer *_lexer = nullptr; Directives *_directives = nullptr; MemoryPool _pool; QList _comments; QStringList _extraCode; QString _code; public: void setCode(const QString &code) { _code = code; } const QString &code() const { return _code; } void addComment(int pos, int len, int line, int col) { Q_ASSERT(len >= 0); _comments.append(QQmlJS::SourceLocation(pos, len, line, col)); } QList comments() const { return _comments; } Lexer *lexer() const { return _lexer; } void setLexer(Lexer *lexer) { _lexer = lexer; } Directives *directives() const { return _directives; } void setDirectives(Directives *directives) { _directives = directives; } MemoryPool *pool() { return &_pool; } const MemoryPool *pool() const { return &_pool; } QStringView midRef(int position, int size) { return QStringView{_code}.mid(position, size); } QStringView newStringRef(const QString &text) { _extraCode.append(text); return QStringView{_extraCode.last()}; } QStringView newStringRef(const QChar *chars, int size) { return newStringRef(QString(chars, size)); } }; } // end of namespace QQmlJS QT_END_NAMESPACE #endif // QQMLJSENGINE_P_H