source: trunk/src/declarative/qml/parser/qdeclarativejsengine_p.h

Last change on this file was 846, checked in by Dmitry A. Kuminov, 14 years ago

trunk: Merged in qt 4.7.2 sources from branches/vendor/nokia/qt.

File size: 4.6 KB
Line 
1/****************************************************************************
2**
3** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
4** All rights reserved.
5** Contact: Nokia Corporation (qt-info@nokia.com)
6**
7** This file is part of the QtDeclarative module of the Qt Toolkit.
8**
9** $QT_BEGIN_LICENSE:LGPL$
10** Commercial Usage
11** Licensees holding valid Qt Commercial licenses may use this file in
12** accordance with the Qt Commercial License Agreement provided with the
13** Software or, alternatively, in accordance with the terms contained in
14** a written agreement between you and Nokia.
15**
16** GNU Lesser General Public License Usage
17** Alternatively, this file may be used under the terms of the GNU Lesser
18** General Public License version 2.1 as published by the Free Software
19** Foundation and appearing in the file LICENSE.LGPL included in the
20** packaging of this file. Please review the following information to
21** ensure the GNU Lesser General Public License version 2.1 requirements
22** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
23**
24** In addition, as a special exception, Nokia gives you certain additional
25** rights. These rights are described in the Nokia Qt LGPL Exception
26** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
27**
28** GNU General Public License Usage
29** Alternatively, this file may be used under the terms of the GNU
30** General Public License version 3.0 as published by the Free Software
31** Foundation and appearing in the file LICENSE.GPL included in the
32** packaging of this file. Please review the following information to
33** ensure the GNU General Public License version 3.0 requirements will be
34** met: http://www.gnu.org/copyleft/gpl.html.
35**
36** If you have questions regarding the use of this file, please contact
37** Nokia at qt-info@nokia.com.
38** $QT_END_LICENSE$
39**
40****************************************************************************/
41
42#ifndef QDECLARATIVEJSENGINE_P_H
43#define QDECLARATIVEJSENGINE_P_H
44
45//
46// W A R N I N G
47// -------------
48//
49// This file is not part of the Qt API. It exists purely as an
50// implementation detail. This header file may change from version to
51// version without notice, or even be removed.
52//
53// We mean it.
54//
55
56#include "private/qdeclarativejsglobal_p.h"
57#include "private/qdeclarativejsastfwd_p.h"
58
59#include <QString>
60#include <QSet>
61
62QT_QML_BEGIN_NAMESPACE
63
64namespace QDeclarativeJS {
65class QML_PARSER_EXPORT NameId
66{
67 QString _text;
68
69public:
70 NameId(const QChar *u, int s)
71 : _text(u, s)
72 { }
73
74 const QString asString() const
75 { return _text; }
76
77 bool operator == (const NameId &other) const
78 { return _text == other._text; }
79
80 bool operator != (const NameId &other) const
81 { return _text != other._text; }
82
83 bool operator < (const NameId &other) const
84 { return _text < other._text; }
85};
86
87uint qHash(const QDeclarativeJS::NameId &id);
88
89} // end of namespace QDeclarativeJS
90
91#if defined(Q_CC_MSVC) && _MSC_VER <= 1300
92//this ensures that code outside QDeclarativeJS can use the hash function
93//it also a workaround for some compilers
94inline uint qHash(const QDeclarativeJS::NameId &nameId) { return QDeclarativeJS::qHash(nameId); }
95#endif
96
97namespace QDeclarativeJS {
98
99class Lexer;
100class NodePool;
101
102namespace Ecma {
103
104class QML_PARSER_EXPORT RegExp
105{
106public:
107 enum RegExpFlag {
108 Global = 0x01,
109 IgnoreCase = 0x02,
110 Multiline = 0x04
111 };
112
113public:
114 static int flagFromChar(const QChar &);
115 static QString flagsToString(int flags);
116};
117
118} // end of namespace Ecma
119
120class QML_PARSER_EXPORT DiagnosticMessage
121{
122public:
123 enum Kind { Warning, Error };
124
125 DiagnosticMessage()
126 : kind(Error) {}
127
128 DiagnosticMessage(Kind kind, const AST::SourceLocation &loc, const QString &message)
129 : kind(kind), loc(loc), message(message) {}
130
131 bool isWarning() const
132 { return kind == Warning; }
133
134 bool isError() const
135 { return kind == Error; }
136
137 Kind kind;
138 AST::SourceLocation loc;
139 QString message;
140};
141
142class QML_PARSER_EXPORT Engine
143{
144 Lexer *_lexer;
145 NodePool *_nodePool;
146 QSet<NameId> _literals;
147 QList<QDeclarativeJS::AST::SourceLocation> _comments;
148
149public:
150 Engine();
151 ~Engine();
152
153 QSet<NameId> literals() const;
154
155 void addComment(int pos, int len, int line, int col);
156 QList<QDeclarativeJS::AST::SourceLocation> comments() const;
157
158 NameId *intern(const QChar *u, int s);
159
160 static QString toString(NameId *id);
161
162 Lexer *lexer() const;
163 void setLexer(Lexer *lexer);
164
165 NodePool *nodePool() const;
166 void setNodePool(NodePool *nodePool);
167};
168
169} // end of namespace QDeclarativeJS
170
171QT_QML_END_NAMESPACE
172
173#endif // QDECLARATIVEJSENGINE_P_H
Note: See TracBrowser for help on using the repository browser.