aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/qml/qqmlinstruction_p.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/qml/qml/qqmlinstruction_p.h')
-rw-r--r--src/qml/qml/qqmlinstruction_p.h558
1 files changed, 558 insertions, 0 deletions
diff --git a/src/qml/qml/qqmlinstruction_p.h b/src/qml/qml/qqmlinstruction_p.h
new file mode 100644
index 0000000000..b7533aca68
--- /dev/null
+++ b/src/qml/qml/qqmlinstruction_p.h
@@ -0,0 +1,558 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/
+**
+** This file is part of the QtQml module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QQMLINSTRUCTION_P_H
+#define QQMLINSTRUCTION_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 <QtCore/qglobal.h>
+#include <private/qqmlpropertycache_p.h>
+
+QT_BEGIN_NAMESPACE
+
+#define FOR_EACH_QML_INSTR(F) \
+ F(Init, init) \
+ F(DeferInit, deferInit) \
+ F(Done, common) \
+ F(CreateCppObject, create) \
+ F(CreateQMLObject, createQml) \
+ F(CompleteQMLObject, completeQml) \
+ F(CreateSimpleObject, createSimple) \
+ F(SetId, setId) \
+ F(SetDefault, common) \
+ F(CreateComponent, createComponent) \
+ F(StoreMetaObject, storeMeta) \
+ F(StoreVariant, storeString) \
+ F(StoreVariantInteger, storeInteger) \
+ F(StoreVariantDouble, storeDouble) \
+ F(StoreVariantBool, storeBool) \
+ F(StoreVar, storeString) \
+ F(StoreVarInteger, storeInteger) \
+ F(StoreVarDouble, storeDouble) \
+ F(StoreVarBool, storeBool) \
+ F(StoreString, storeString) \
+ F(StoreStringList, storeString) \
+ F(StoreStringQList, storeString) \
+ F(StoreTrString, storeTrString) \
+ F(StoreTrIdString, storeTrIdString) \
+ F(StoreByteArray, storeByteArray) \
+ F(StoreUrl, storeUrl) \
+ F(StoreUrlQList, storeUrl) \
+ F(StoreFloat, storeFloat) \
+ F(StoreDouble, storeDouble) \
+ F(StoreDoubleQList, storeDouble) \
+ F(StoreBool, storeBool) \
+ F(StoreBoolQList, storeBool) \
+ F(StoreInteger, storeInteger) \
+ F(StoreIntegerQList, storeInteger) \
+ F(StoreColor, storeColor) \
+ F(StoreDate, storeDate) \
+ F(StoreTime, storeTime) \
+ F(StoreDateTime, storeDateTime) \
+ F(StorePoint, storePoint) \
+ F(StorePointF, storePointF) \
+ F(StoreSize, storeSize) \
+ F(StoreSizeF, storeSizeF) \
+ F(StoreRect, storeRect) \
+ F(StoreRectF, storeRectF) \
+ F(StoreVector3D, storeVector3D) \
+ F(StoreVector4D, storeVector4D) \
+ F(StoreObject, storeObject) \
+ F(AssignCustomType, assignCustomType) \
+ F(AssignSignalObject, assignSignalObject) \
+ F(StoreSignal, storeSignal) \
+ F(StoreImportedScript, storeScript) \
+ F(StoreScriptString, storeScriptString) \
+ F(BeginObject, begin) \
+ F(InitV8Bindings, initV8Bindings) \
+ F(StoreBinding, assignBinding) \
+ F(StoreBindingOnAlias, assignBinding) \
+ F(StoreV8Binding, assignBinding) \
+ F(StoreV4Binding, assignV4Binding) \
+ F(StoreValueSource, assignValueSource) \
+ F(StoreValueInterceptor, assignValueInterceptor) \
+ F(StoreObjectQList, common) \
+ F(AssignObjectList, assignObjectList) \
+ F(StoreVariantObject, storeObject) \
+ F(StoreVarObject, storeObject) \
+ F(StoreInterface, storeObject) \
+ F(FetchAttached, fetchAttached) \
+ F(FetchQList, fetchQmlList) \
+ F(FetchObject, fetch) \
+ F(PopQList, common) \
+ F(Defer, defer) \
+ F(PopFetchedObject, common) \
+ F(FetchValueType, fetchValue) \
+ F(PopValueType, fetchValue)
+
+#if defined(Q_CC_GNU) && (!defined(Q_CC_INTEL) || __INTEL_COMPILER >= 1200)
+# define QML_THREADED_VME_INTERPRETER
+#endif
+
+#ifdef Q_ALIGNOF
+# define QML_INSTR_ALIGN_MASK (Q_ALIGNOF(QQmlInstruction) - 1)
+#else
+# define QML_INSTR_ALIGN_MASK (sizeof(void *) - 1)
+#endif
+
+#ifdef QML_THREADED_VME_INTERPRETER
+# define QML_INSTR_HEADER void *code;
+#else
+# define QML_INSTR_HEADER quint8 instructionType;
+#endif
+
+#define QML_INSTR_ENUM(I, FMT) I,
+#define QML_INSTR_SIZE(I, FMT) ((sizeof(QQmlInstruction::instr_##FMT) + QML_INSTR_ALIGN_MASK) & ~QML_INSTR_ALIGN_MASK)
+
+class QQmlCompiledData;
+union QQmlInstruction
+{
+ enum Type {
+ FOR_EACH_QML_INSTR(QML_INSTR_ENUM)
+ };
+
+ struct instr_common {
+ QML_INSTR_HEADER
+ };
+ struct instr_init {
+ QML_INSTR_HEADER
+ int bindingsSize;
+ int parserStatusSize;
+ int contextCache;
+ int compiledBinding;
+ int objectStackSize;
+ int listStackSize;
+ };
+ struct instr_deferInit {
+ QML_INSTR_HEADER
+ int bindingsSize;
+ int parserStatusSize;
+ int objectStackSize;
+ int listStackSize;
+ };
+ struct instr_createQml {
+ QML_INSTR_HEADER
+ int type;
+ int bindingBits;
+ bool isRoot;
+ };
+ struct instr_completeQml {
+ QML_INSTR_HEADER
+ ushort column;
+ ushort line;
+ bool isRoot;
+ };
+ struct instr_create {
+ QML_INSTR_HEADER
+ int type;
+ int data;
+ ushort column;
+ ushort line;
+ bool isRoot;
+ };
+ struct instr_createSimple {
+ QML_INSTR_HEADER
+ void (*create)(void *);
+ int typeSize;
+ int type;
+ ushort column;
+ ushort line;
+ };
+ struct instr_storeMeta {
+ QML_INSTR_HEADER
+ int data;
+ int aliasData;
+ int propertyCache;
+ };
+ struct instr_setId {
+ QML_INSTR_HEADER
+ int value;
+ int index;
+ };
+ struct instr_assignValueSource {
+ QML_INSTR_HEADER
+ QQmlPropertyRawData property;
+ int owner;
+ int castValue;
+ };
+ struct instr_assignValueInterceptor {
+ QML_INSTR_HEADER
+ QQmlPropertyRawData property;
+ int owner;
+ int castValue;
+ };
+ struct instr_initV8Bindings {
+ QML_INSTR_HEADER
+ ushort programIndex;
+ ushort line;
+ };
+ struct instr_assignV4Binding {
+ QML_INSTR_HEADER
+ unsigned int property;
+ int value;
+ short context;
+ short owner;
+ bool isRoot;
+ ushort line;
+ ushort column;
+ };
+ struct instr_assignBinding {
+ QML_INSTR_HEADER
+ QQmlPropertyRawData property;
+ int value;
+ short context;
+ short owner;
+ bool isRoot;
+ ushort line;
+ ushort column;
+ };
+ struct instr_fetch {
+ QML_INSTR_HEADER
+ int property;
+ ushort line;
+ };
+ struct instr_fetchValue {
+ QML_INSTR_HEADER
+ int property;
+ int type;
+ quint32 bindingSkipList;
+ };
+ struct instr_fetchQmlList {
+ QML_INSTR_HEADER
+ int property;
+ int type;
+ };
+ struct instr_begin {
+ QML_INSTR_HEADER
+ int castValue;
+ };
+ struct instr_storeFloat {
+ QML_INSTR_HEADER
+ int propertyIndex;
+ float value;
+ };
+ struct instr_storeDouble {
+ QML_INSTR_HEADER
+ int propertyIndex;
+ double value;
+ };
+ struct instr_storeInteger {
+ QML_INSTR_HEADER
+ int propertyIndex;
+ int value;
+ };
+ struct instr_storeBool {
+ QML_INSTR_HEADER
+ int propertyIndex;
+ bool value;
+ };
+ struct instr_storeString {
+ QML_INSTR_HEADER
+ int propertyIndex;
+ int value;
+ };
+ struct instr_storeTrString {
+ QML_INSTR_HEADER
+ int propertyIndex;
+ int context;
+ int text;
+ int comment;
+ int n;
+ };
+ struct instr_storeTrIdString {
+ QML_INSTR_HEADER
+ int propertyIndex;
+ int text;
+ int n;
+ };
+ struct instr_storeByteArray {
+ QML_INSTR_HEADER
+ int propertyIndex;
+ int value;
+ };
+ struct instr_storeScriptString {
+ QML_INSTR_HEADER
+ int propertyIndex;
+ int value;
+ int scope;
+ int bindingId;
+ ushort line;
+ ushort column;
+ };
+ struct instr_storeScript {
+ QML_INSTR_HEADER
+ int value;
+ };
+ struct instr_storeUrl {
+ QML_INSTR_HEADER
+ int propertyIndex;
+ int value;
+ };
+ struct instr_storeColor {
+ QML_INSTR_HEADER
+ int propertyIndex;
+ unsigned int value;
+ };
+ struct instr_storeDate {
+ QML_INSTR_HEADER
+ int propertyIndex;
+ int value;
+ };
+ struct instr_storeTime {
+ QML_INSTR_HEADER
+ int propertyIndex;
+ struct QTime {
+ int mds;
+#if defined(Q_OS_WINCE)
+ int startTick;
+#endif
+ } time;
+ };
+ struct instr_storeDateTime {
+ QML_INSTR_HEADER
+ int propertyIndex;
+ int date;
+ instr_storeTime::QTime time;
+ };
+ struct instr_storeRect {
+ QML_INSTR_HEADER
+ int propertyIndex;
+ struct QRect {
+ int x1;
+ int y1;
+ int x2;
+ int y2;
+ } rect;
+ };
+ struct instr_storeRectF {
+ QML_INSTR_HEADER
+ int propertyIndex;
+ struct QRectF {
+ qreal xp;
+ qreal yp;
+ qreal w;
+ qreal h;
+ } rect;
+ };
+ struct instr_storeObject {
+ QML_INSTR_HEADER
+ int propertyIndex;
+ ushort line;
+ };
+ struct instr_assignCustomType {
+ QML_INSTR_HEADER
+ int propertyIndex;
+ int primitive;
+ int type;
+ ushort line;
+ };
+ struct instr_storeSignal {
+ QML_INSTR_HEADER
+ int signalIndex;
+ int value;
+ short context;
+ ushort line;
+ ushort column;
+ };
+ struct instr_assignSignalObject {
+ QML_INSTR_HEADER
+ int signal;
+ ushort line;
+ };
+ struct instr_createComponent {
+ QML_INSTR_HEADER
+ int count;
+ int endLine;
+ int metaObject;
+ ushort column;
+ ushort line;
+ bool isRoot;
+ };
+ struct instr_fetchAttached {
+ QML_INSTR_HEADER
+ int id;
+ ushort line;
+ };
+ struct instr_defer {
+ QML_INSTR_HEADER
+ int deferCount;
+ };
+ struct instr_assignObjectList {
+ QML_INSTR_HEADER
+ ushort line;
+ };
+ struct instr_storePoint {
+ QML_INSTR_HEADER
+ int propertyIndex;
+ struct QPoint {
+ int xp;
+ int yp;
+ } point;
+ };
+ struct instr_storePointF {
+ QML_INSTR_HEADER
+ int propertyIndex;
+ struct QPointF {
+ qreal xp;
+ qreal yp;
+ } point;
+ };
+ struct instr_storeSize {
+ QML_INSTR_HEADER
+ int propertyIndex;
+ struct QSize {
+ int wd;
+ int ht;
+ } size;
+ };
+ struct instr_storeSizeF {
+ QML_INSTR_HEADER
+ int propertyIndex;
+ struct QSizeF {
+ qreal wd;
+ qreal ht;
+ } size;
+ };
+ struct instr_storeVector3D {
+ QML_INSTR_HEADER
+ int propertyIndex;
+ struct QVector3D {
+ float xp;
+ float yp;
+ float zp;
+ } vector;
+ };
+ struct instr_storeVector4D {
+ QML_INSTR_HEADER
+ int propertyIndex;
+ struct QVector4D {
+ float xp;
+ float yp;
+ float zp;
+ float wp;
+ } vector;
+ };
+
+ instr_common common;
+ instr_init init;
+ instr_deferInit deferInit;
+ instr_create create;
+ instr_createQml createQml;
+ instr_completeQml completeQml;
+ instr_createSimple createSimple;
+ instr_storeMeta storeMeta;
+ instr_setId setId;
+ instr_assignValueSource assignValueSource;
+ instr_assignValueInterceptor assignValueInterceptor;
+ instr_initV8Bindings initV8Bindings;
+ instr_assignV4Binding assignV4Binding;
+ instr_assignBinding assignBinding;
+ instr_fetch fetch;
+ instr_fetchValue fetchValue;
+ instr_fetchQmlList fetchQmlList;
+ instr_begin begin;
+ instr_storeFloat storeFloat;
+ instr_storeDouble storeDouble;
+ instr_storeInteger storeInteger;
+ instr_storeBool storeBool;
+ instr_storeString storeString;
+ instr_storeTrString storeTrString;
+ instr_storeTrIdString storeTrIdString;
+ instr_storeByteArray storeByteArray;
+ instr_storeScriptString storeScriptString;
+ instr_storeScript storeScript;
+ instr_storeUrl storeUrl;
+ instr_storeColor storeColor;
+ instr_storeDate storeDate;
+ instr_storeTime storeTime;
+ instr_storeDateTime storeDateTime;
+ instr_storePoint storePoint;
+ instr_storePointF storePointF;
+ instr_storeSize storeSize;
+ instr_storeSizeF storeSizeF;
+ instr_storeRect storeRect;
+ instr_storeRectF storeRectF;
+ instr_storeVector3D storeVector3D;
+ instr_storeVector4D storeVector4D;
+ instr_storeObject storeObject;
+ instr_assignCustomType assignCustomType;
+ instr_storeSignal storeSignal;
+ instr_assignSignalObject assignSignalObject;
+ instr_createComponent createComponent;
+ instr_fetchAttached fetchAttached;
+ instr_defer defer;
+ instr_assignObjectList assignObjectList;
+
+ static int size(Type type);
+};
+
+template<int N>
+struct QQmlInstructionMeta {
+};
+
+#define QML_INSTR_META_TEMPLATE(I, FMT) \
+ template<> struct QQmlInstructionMeta<(int)QQmlInstruction::I> { \
+ enum { Size = QML_INSTR_SIZE(I, FMT) }; \
+ typedef QQmlInstruction::instr_##FMT DataType; \
+ static const DataType &data(const QQmlInstruction &instr) { return instr.FMT; } \
+ static void setData(QQmlInstruction &instr, const DataType &v) { instr.FMT = v; } \
+ };
+FOR_EACH_QML_INSTR(QML_INSTR_META_TEMPLATE);
+#undef QML_INSTR_META_TEMPLATE
+
+template<int Instr>
+class QQmlInstructionData : public QQmlInstructionMeta<Instr>::DataType
+{
+};
+
+QT_END_NAMESPACE
+
+#endif // QQMLINSTRUCTION_P_H