Qt 4.8
qdeclarativeparser_p.h
Go to the documentation of this file.
1 /****************************************************************************
2 **
3 ** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
4 ** Contact: http://www.qt-project.org/legal
5 **
6 ** This file is part of the QtDeclarative module of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:LGPL$
9 ** Commercial License Usage
10 ** Licensees holding valid commercial Qt licenses may use this file in
11 ** accordance with the commercial license agreement provided with the
12 ** Software or, alternatively, in accordance with the terms contained in
13 ** a written agreement between you and Digia. For licensing terms and
14 ** conditions see http://qt.digia.com/licensing. For further information
15 ** use the contact form at http://qt.digia.com/contact-us.
16 **
17 ** GNU Lesser General Public License Usage
18 ** Alternatively, this file may be used under the terms of the GNU Lesser
19 ** General Public License version 2.1 as published by the Free Software
20 ** Foundation and appearing in the file LICENSE.LGPL included in the
21 ** packaging of this file. Please review the following information to
22 ** ensure the GNU Lesser General Public License version 2.1 requirements
23 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
24 **
25 ** In addition, as a special exception, Digia gives you certain additional
26 ** rights. These rights are described in the Digia Qt LGPL Exception
27 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
28 **
29 ** GNU General Public License Usage
30 ** Alternatively, this file may be used under the terms of the GNU
31 ** General Public License version 3.0 as published by the Free Software
32 ** Foundation and appearing in the file LICENSE.GPL included in the
33 ** packaging of this file. Please review the following information to
34 ** ensure the GNU General Public License version 3.0 requirements will be
35 ** met: http://www.gnu.org/copyleft/gpl.html.
36 **
37 **
38 ** $QT_END_LICENSE$
39 **
40 ****************************************************************************/
41 
42 #ifndef QDECLARATIVEPARSER_P_H
43 #define QDECLARATIVEPARSER_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 "qdeclarative.h"
57 
58 #include <QtCore/qbytearray.h>
59 #include <QtCore/qlist.h>
60 #include <QtCore/qurl.h>
61 #include <QtCore/qstring.h>
62 #include <QtCore/qstringlist.h>
63 
64 #include <private/qobject_p.h>
65 #include <private/qdeclarativerefcount_p.h>
66 #include <private/qdeclarativeglobal_p.h>
67 
69 
71 
72 QT_MODULE(Declarative)
73 
75 namespace QDeclarativeJS { namespace AST { class Node; } }
76 
77 /*
78  XXX
79 
80  These types are created (and owned) by the QDeclarativeXmlParser and consumed by the
81  QDeclarativeCompiler. During the compilation phase the compiler will update some of
82  the fields for both its own use and for the use of the upcoming QDeclarativeDom API.
83 
84  The types are part of the generic sounding "QDeclarativeParser" namespace for legacy
85  reasons (there used to be more in this namespace) and will be cleaned up and
86  migrated into a more appropriate location shortly.
87 */
89 {
90  struct Location
91  {
92  Location() : line(-1), column(-1) {}
93  int line;
94  int column;
95  };
96 
98  {
99  LocationRange() : offset(0), length(0) {}
102  };
103 
105  {
109 
110  bool operator<(LocationSpan &o) const {
111  return (start.line < o.start.line) ||
112  (start.line == o.start.line && start.column < o.start.column);
113  }
114  };
115 
116  class Property;
118  {
119  public:
120  Object();
121  virtual ~Object();
122 
123  // Type of the object. The integer is an index into the
124  // QDeclarativeCompiledData::types array, or -1 if the object is a property
125  // group.
126  int type;
127  // The url of this object if it is an external type. Used by the DOM
129 
130  // version information if type is defined in library or C++
133 
134  // The fully-qualified name of this type
136  // The class name
138  // The id assigned to the object (if any). Set by the QDeclarativeCompiler
140  // The id index assigned to the object (if any). Set by the QDeclarativeCompiler
141  int idIndex;
142  // Custom parsed data
144  // Bit mask of the properties assigned bindings
146  void setBindingBit(int);
147  // Returns the metaobject for this type, or 0 if not available.
148  // Internally selectd between the metatype and extObject variables
149  const QMetaObject *metaObject() const;
150 
151  // The compile time metaobject for this type
153  // The synthesized metaobject, if QML added signals or properties to
154  // this type. Otherwise null
156  QByteArray metadata; // Generated by compiler
157  QByteArray synthdata; // Generated by compiler
158  QDeclarativePropertyCache *synthCache; // Generated by compiler
159 
160  Property *getDefaultProperty();
161  Property *getProperty(const QByteArray &name, bool create=true);
162 
165 
166  // Output of the compilation phase (these properties continue to exist
167  // in either the defaultProperty or properties members too)
168  void addValueProperty(Property *);
169  void addSignalProperty(Property *);
170  void addAttachedProperty(Property *);
171  void addGroupedProperty(Property *);
172  void addValueTypeProperty(Property *);
173  void addScriptStringProperty(Property *, int = 0);
180 
181  // Script blocks that were nested under this object
182  struct ScriptBlock {
183  enum Pragma {
184  None = 0x00000000,
185  Shared = 0x00000001
186  };
187  Q_DECLARE_FLAGS(Pragmas, Pragma)
188 
189  QString code;
190  QString file;
191  Pragmas pragmas;
192  };
193 
194  // The bytes to cast instances by to get to the QDeclarativeParserStatus
195  // interface. -1 indicates the type doesn't support this interface.
196  // Set by the QDeclarativeCompiler.
197  int parserStatusCast;
198 
200 
202  DynamicProperty();
203  DynamicProperty(const DynamicProperty &);
204 
205  enum Type { Variant, Int, Bool, Real, String, Url, Color, Time, Date, DateTime, Alias, Custom, CustomList };
206 
213  };
214  struct DynamicSignal {
215  DynamicSignal();
216  DynamicSignal(const DynamicSignal &);
217 
221  };
222  struct DynamicSlot {
223  DynamicSlot();
224  DynamicSlot(const DynamicSlot &);
225 
230  };
231 
232  // The list of dynamic properties
234  // The list of dynamic signals
236  // The list of dynamic slots
238  };
239 
241  {
242  public:
243  enum Type {
249  };
250 
251  Variant();
252  Variant(const Variant &);
253  Variant(bool);
254  Variant(double, const QString &asWritten=QString());
255  Variant(const QString &);
257  Variant &operator=(const Variant &);
258 
259  Type type() const;
260 
261  bool isBoolean() const { return type() == Boolean; }
262  bool isNumber() const { return type() == Number; }
263  bool isString() const { return type() == String; }
264  bool isScript() const { return type() == Script; }
265  bool isStringList() const;
266 
267  bool asBoolean() const;
268  QString asString() const;
269  double asNumber() const;
270  QString asScript() const;
271  QDeclarativeJS::AST::Node *asAST() const;
272  QStringList asStringList() const;
273 
274  private:
276  union {
277  bool b;
278  double d;
280  };
282  };
283 
285  {
286  public:
287  Value();
288  virtual ~Value();
289 
290  enum Type {
291  // The type of this value assignment is not yet known
293  // This is used as a literal property assignment
295  // This is used as a property binding assignment
297  // This is used as a QDeclarativePropertyValueSource assignment
299  // This is used as a QDeclarativePropertyValueInterceptor assignment
301  // This is used as a property QObject assignment
303  // This is used as a signal object assignment
305  // This is used as a signal expression assignment
307  // This is used as an id assignment only
308  Id
309  };
311 
312  // ### Temporary (for id only)
313  QString primitive() const { return value.isString() ? value.asString() : value.asScript(); }
314 
315  // Primitive value
317  // Object value
319 
321  };
322 
324  {
325  public:
326  Property();
327  Property(const QByteArray &n);
328  virtual ~Property();
329 
330  // The Object to which this property is attached
332 
333  Object *getValue(const LocationSpan &);
334  void addValue(Value *v);
335  void addOnValue(Value *v);
336 
337  // The QVariant::Type of the property, or 0 (QVariant::Invalid) if
338  // unknown.
339  int type;
340  // The metaobject index of this property, or -1 if unknown.
341  int index;
342 
343  // Returns true if this is an empty property - both value and values
344  // are unset.
345  bool isEmpty() const;
346  // The list of values assigned to this property. Content in values
347  // and value are mutually exclusive
349  // The list of values assigned to this property using the "on" syntax
351  // The accessed property. This is used to represent dot properties.
352  // Content in value and values are mutually exclusive.
354  // The property name
356  // True if this property was accessed as the default property.
357  bool isDefault;
358  // True if the setting of this property will be deferred. Set by the
359  // QDeclarativeCompiler
361  // True if this property is a value-type pseudo-property
363  // True if this property is a property alias. Set by the
364  // QDeclarativeCompiler
365  bool isAlias;
366 
370  };
371 }
372 
373 Q_DECLARE_OPERATORS_FOR_FLAGS(QDeclarativeParser::Object::ScriptBlock::Pragmas);
374 
376 
378 
380 
381 #endif // QDECLARATIVEPARSER_P_H
The QMetaObject class contains meta-information about Qt objects.
Definition: qobjectdefs.h:304
int type
Definition: qmetatype.cpp:239
QList< Property * > attachedProperties
#define QT_END_NAMESPACE
This macro expands to.
Definition: qglobal.h:90
#define QT_MODULE(x)
Definition: qglobal.h:2783
#define QT_BEGIN_HEADER
Definition: qglobal.h:136
#define Q_DECLARE_FLAGS(Flags, Enum)
The Q_DECLARE_FLAGS() macro expands to.
Definition: qglobal.h:2348
The QByteArray class provides an array of bytes.
Definition: qbytearray.h:135
static Expression::Ptr create(Expression *const expr, const YYLTYPE &sourceLocator, const ParserContext *const parseInfo)
QList< Property * > valueProperties
The QUrl class provides a convenient interface for working with URLs.
Definition: qurl.h:61
The QString class provides a Unicode character string.
Definition: qstring.h:83
The QHash class is a template class that provides a hash-table-based dictionary.
Definition: qdatastream.h:66
QAbstractDynamicMetaObject extObject
QDeclarativePropertyCache * synthCache
#define QT_BEGIN_NAMESPACE
This macro expands to.
Definition: qglobal.h:89
QList< DynamicSlot > dynamicSlots
static QString getValue(const QAInterface &interface)
static bool isEmpty(const char *str)
QList< DynamicProperty > dynamicProperties
const char * name
QList< QPair< Property *, int > > scriptStringProperties
The QStringList class provides a list of strings.
Definition: qstringlist.h:66
QList< DynamicSignal > dynamicSignals
QList< Property * > signalProperties
#define Q_DECLARE_METATYPE(TYPE)
This macro makes the type Type known to QMetaType as long as it provides a public default constructor...
Definition: qmetatype.h:265
#define None
QDeclarativeJS::AST::Node * n
#define Q_DECLARATIVE_EXPORT
Definition: qglobal.h:1454
bool operator<(LocationSpan &o) const
QList< Property * > groupedProperties
QList< Property * > valueTypeProperties
static QTestResult::TestLocation location
Definition: qtestresult.cpp:63
unsigned int quint32
Definition: qglobal.h:938
#define QT_END_HEADER
Definition: qglobal.h:137
Q_DECLARE_OPERATORS_FOR_FLAGS(QDeclarativeParser::Object::ScriptBlock::Pragmas)
The QList class is a template class that provides lists.
Definition: qdatastream.h:62
QHash< QByteArray, Property * > properties