Initial import from the monolithic Qt.
[profile/ivi/qtdeclarative.git] / src / declarative / qml / qdeclarativeinstruction.cpp
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 ** No Commercial Usage
11 ** This file contains pre-release code and may not be distributed.
12 ** You may use this file in accordance with the terms and conditions
13 ** contained in the Technology Preview License Agreement accompanying
14 ** this package.
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 ** If you have questions regarding the use of this file, please contact
29 ** Nokia at qt-info@nokia.com.
30 **
31 **
32 **
33 **
34 **
35 **
36 **
37 **
38 ** $QT_END_LICENSE$
39 **
40 ****************************************************************************/
41
42 #include "private/qdeclarativeinstruction_p.h"
43
44 #include "private/qdeclarativecompiler_p.h"
45
46 #include <QtCore/qdebug.h>
47
48 QT_BEGIN_NAMESPACE
49
50 void QDeclarativeCompiledData::dump(QDeclarativeInstruction *instr, int idx)
51 {
52 #ifdef QT_NO_DEBUG_STREAM
53     Q_UNUSED(instr)
54     Q_UNUSED(idx)
55 #else
56     QByteArray lineNumber = QByteArray::number(instr->line);
57     if (instr->line == (unsigned short)-1)
58         lineNumber = "NA";
59     const char *line = lineNumber.constData();
60
61     switch(instr->type) {
62     case QDeclarativeInstruction::Init:
63         qWarning().nospace() << idx << "\t\t" << line << "\t" << "INIT\t\t\t" << instr->init.bindingsSize << "\t" << instr->init.parserStatusSize << "\t" << instr->init.contextCache << "\t" << instr->init.compiledBinding;
64         break;
65     case QDeclarativeInstruction::CreateObject:
66         qWarning().nospace() << idx << "\t\t" << line << "\t" << "CREATE\t\t\t" << instr->create.type << "\t" << instr->create.bindingBits << "\t\t" << types.at(instr->create.type).className;
67         break;
68     case QDeclarativeInstruction::CreateSimpleObject:
69         qWarning().nospace() << idx << "\t\t" << line << "\t" << "CREATE_SIMPLE\t\t" << instr->createSimple.typeSize;
70         break;
71     case QDeclarativeInstruction::SetId:
72         qWarning().nospace() << idx << "\t\t" << line << "\t" << "SETID\t\t\t" << instr->setId.value << "\t\t\t" << primitives.at(instr->setId.value);
73         break;
74     case QDeclarativeInstruction::SetDefault:
75         qWarning().nospace() << idx << "\t\t" << line << "\t" << "SET_DEFAULT";
76         break;
77     case QDeclarativeInstruction::CreateComponent:
78         qWarning().nospace() << idx << "\t\t" << line << "\t" << "CREATE_COMPONENT\t" << instr->createComponent.count;
79         break;
80     case QDeclarativeInstruction::StoreMetaObject:
81         qWarning().nospace() << idx << "\t\t" << line << "\t" << "STORE_META\t\t" << instr->storeMeta.data;
82         break;
83
84     case QDeclarativeInstruction::StoreFloat:
85         qWarning().nospace() << idx << "\t\t" << line << "\t" << "STORE_FLOAT\t\t" << instr->storeFloat.propertyIndex << "\t" << instr->storeFloat.value;
86         break;
87     case QDeclarativeInstruction::StoreDouble:
88         qWarning().nospace() << idx << "\t\t" << line << "\t" << "STORE_DOUBLE\t\t" << instr->storeDouble.propertyIndex << "\t" << instr->storeDouble.value;
89         break;
90     case QDeclarativeInstruction::StoreInteger:
91         qWarning().nospace() << idx << "\t\t" << line << "\t" << "STORE_INTEGER\t\t" << instr->storeInteger.propertyIndex << "\t" << instr->storeInteger.value;
92         break;
93     case QDeclarativeInstruction::StoreBool:
94         qWarning().nospace() << idx << "\t\t" << line << "\t" << "STORE_BOOL\t\t" << instr->storeBool.propertyIndex << "\t" << instr->storeBool.value;
95         break;
96     case QDeclarativeInstruction::StoreString:
97         qWarning().nospace() << idx << "\t\t" << line << "\t" << "STORE_STRING\t\t" << instr->storeString.propertyIndex << "\t" << instr->storeString.value << "\t\t" << primitives.at(instr->storeString.value);
98         break;
99     case QDeclarativeInstruction::StoreUrl:
100         qWarning().nospace() << idx << "\t\t" << line << "\t" << "STORE_URL\t\t" << instr->storeUrl.propertyIndex << "\t" << instr->storeUrl.value << "\t\t" << urls.at(instr->storeUrl.value);
101         break;
102     case QDeclarativeInstruction::StoreColor:
103         qWarning().nospace() << idx << "\t\t" << line << "\t" << "STORE_COLOR\t\t" << instr->storeColor.propertyIndex << "\t\t\t" << QString::number(instr->storeColor.value, 16);
104         break;
105     case QDeclarativeInstruction::StoreDate:
106         qWarning().nospace() << idx << "\t\t" << line << "\t" << "STORE_DATE\t\t" << instr->storeDate.propertyIndex << "\t" << instr->storeDate.value;
107         break;
108     case QDeclarativeInstruction::StoreTime:
109         qWarning().nospace() << idx << "\t\t" << line << "\t" << "STORE_TIME\t\t" << instr->storeTime.propertyIndex << "\t" << instr->storeTime.valueIndex;
110         break;
111     case QDeclarativeInstruction::StoreDateTime:
112         qWarning().nospace() << idx << "\t\t" << line << "\t" << "STORE_DATETIME\t\t" << instr->storeDateTime.propertyIndex << "\t" << instr->storeDateTime.valueIndex;
113         break;
114     case QDeclarativeInstruction::StorePoint:
115         qWarning().nospace() << idx << "\t\t" << line << "\t" << "STORE_POINT\t\t" << instr->storeRealPair.propertyIndex << "\t" << instr->storeRealPair.valueIndex;
116         break;
117     case QDeclarativeInstruction::StorePointF:
118         qWarning().nospace() << idx << "\t\t" << line << "\t" << "STORE_POINTF\t\t" << instr->storeRealPair.propertyIndex << "\t" << instr->storeRealPair.valueIndex;
119         break;
120     case QDeclarativeInstruction::StoreSize:
121         qWarning().nospace() << idx << "\t\t" << line << "\t" << "STORE_SIZE\t\t" << instr->storeRealPair.propertyIndex << "\t" << instr->storeRealPair.valueIndex;
122         break;
123     case QDeclarativeInstruction::StoreSizeF:
124         qWarning().nospace() << idx << "\t\t" << line << "\t" << "STORE_SIZEF\t\t" << instr->storeRealPair.propertyIndex << "\t" << instr->storeRealPair.valueIndex;
125         break;
126     case QDeclarativeInstruction::StoreRect:
127         qWarning().nospace() << idx << "\t\t" << line << "\t" << "STORE_RECT\t\t" << instr->storeRect.propertyIndex << "\t" << instr->storeRect.valueIndex;
128         break;
129     case QDeclarativeInstruction::StoreRectF:
130         qWarning().nospace() << idx << "\t\t" << line << "\t" << "STORE_RECTF\t\t" << instr->storeRect.propertyIndex << "\t" << instr->storeRect.valueIndex;
131         break;
132     case QDeclarativeInstruction::StoreVector3D:
133         qWarning().nospace() << idx << "\t\t" << line << "\t" << "STORE_VECTOR3D\t\t" << instr->storeVector3D.propertyIndex << "\t" << instr->storeVector3D.valueIndex;
134         break;
135     case QDeclarativeInstruction::StoreVariant:
136         qWarning().nospace() << idx << "\t\t" << line << "\t" << "STORE_VARIANT\t\t" << instr->storeString.propertyIndex << "\t" << instr->storeString.value << "\t\t" << primitives.at(instr->storeString.value);
137         break;
138     case QDeclarativeInstruction::StoreVariantInteger:
139         qWarning().nospace() << idx << "\t\t" << line << "\t" << "STORE_VARIANT_INTEGER\t\t" << instr->storeInteger.propertyIndex << "\t" << instr->storeInteger.value;
140         break;
141     case QDeclarativeInstruction::StoreVariantDouble:
142         qWarning().nospace() << idx << "\t\t" << line << "\t" << "STORE_VARIANT_DOUBLE\t\t" << instr->storeDouble.propertyIndex << "\t" << instr->storeDouble.value;
143         break;
144     case QDeclarativeInstruction::StoreVariantBool:
145         qWarning().nospace() << idx << "\t\t" << line << "\t" << "STORE_VARIANT_BOOL\t\t" << instr->storeBool.propertyIndex << "\t" << instr->storeBool.value;
146         break;
147     case QDeclarativeInstruction::StoreObject:
148         qWarning().nospace() << idx << "\t\t" << line << "\t" << "STORE_OBJECT\t\t" << instr->storeObject.propertyIndex;
149         break;
150     case QDeclarativeInstruction::StoreVariantObject:
151         qWarning().nospace() << idx << "\t\t" << line << "\t" << "STORE_VARIANT_OBJECT\t" << instr->storeObject.propertyIndex;
152         break;
153     case QDeclarativeInstruction::StoreInterface:
154         qWarning().nospace() << idx << "\t\t" << line << "\t" << "STORE_INTERFACE\t\t" << instr->storeObject.propertyIndex;
155         break;
156
157     case QDeclarativeInstruction::StoreSignal:
158         qWarning().nospace() << idx << "\t\t" << line << "\t" << "STORE_SIGNAL\t\t" << instr->storeSignal.signalIndex << "\t" << instr->storeSignal.value << "\t\t" << primitives.at(instr->storeSignal.value);
159         break;
160     case QDeclarativeInstruction::StoreImportedScript:
161         qWarning().nospace() << idx << "\t\t" << line << "\t" << "STORE_IMPORTED_SCRIPT\t" << instr->storeScript.value;
162         break;
163     case QDeclarativeInstruction::StoreScriptString:
164         qWarning().nospace() << idx << "\t\t" << line << "\t" << "STORE_SCRIPT_STRING\t" << instr->storeScriptString.propertyIndex << "\t" << instr->storeScriptString.value << "\t" << instr->storeScriptString.scope;
165         break;
166
167     case QDeclarativeInstruction::AssignSignalObject:
168         qWarning().nospace() << idx << "\t\t" << line << "\t" << "ASSIGN_SIGNAL_OBJECT\t" << instr->assignSignalObject.signal << "\t\t\t" << datas.at(instr->assignSignalObject.signal);
169         break;
170     case QDeclarativeInstruction::AssignCustomType:
171         qWarning().nospace() << idx << "\t\t" << line << "\t" << "ASSIGN_CUSTOMTYPE\t" << instr->assignCustomType.propertyIndex << "\t" << instr->assignCustomType.valueIndex;
172         break;
173
174     case QDeclarativeInstruction::StoreBinding:
175         qWarning().nospace() << idx << "\t\t" << line << "\t" << "STORE_BINDING\t" << instr->assignBinding.property << "\t" << instr->assignBinding.value << "\t" << instr->assignBinding.context;
176         break;
177     case QDeclarativeInstruction::StoreBindingOnAlias:
178         qWarning().nospace() << idx << "\t\t" << line << "\t" << "STORE_BINDING_ALIAS\t" << instr->assignBinding.property << "\t" << instr->assignBinding.value << "\t" << instr->assignBinding.context;
179         break;
180     case QDeclarativeInstruction::StoreCompiledBinding:
181         qWarning().nospace() << idx << "\t\t" << line << "\t" << "STORE_COMPILED_BINDING\t" << instr->assignBinding.property << "\t" << instr->assignBinding.value << "\t" << instr->assignBinding.context;
182         break;
183     case QDeclarativeInstruction::StoreValueSource:
184         qWarning().nospace() << idx << "\t\t" << line << "\t" << "STORE_VALUE_SOURCE\t" << instr->assignValueSource.property << "\t" << instr->assignValueSource.castValue;
185         break;
186     case QDeclarativeInstruction::StoreValueInterceptor:
187         qWarning().nospace() << idx << "\t\t" << line << "\t" << "STORE_VALUE_INTERCEPTOR\t" << instr->assignValueInterceptor.property << "\t" << instr->assignValueInterceptor.castValue;
188         break;
189
190     case QDeclarativeInstruction::BeginObject:
191         qWarning().nospace() << idx << "\t\t" << line << "\t" << "BEGIN\t\t\t" << instr->begin.castValue;
192         break;
193     case QDeclarativeInstruction::StoreObjectQList:
194         qWarning().nospace() << idx << "\t\t" << line << "\t" << "STORE_OBJECT_QLIST";
195         break;
196     case QDeclarativeInstruction::AssignObjectList:
197         qWarning().nospace() << idx << "\t\t" << line << "\t" << "ASSIGN_OBJECT_LIST";
198         break;
199     case QDeclarativeInstruction::FetchAttached:
200         qWarning().nospace() << idx << "\t\t" << line << "\t" << "FETCH_ATTACHED\t\t" << instr->fetchAttached.id;
201         break;
202     case QDeclarativeInstruction::FetchQList:
203         qWarning().nospace() << idx << "\t\t" << line << "\t" << "FETCH_QLIST\t\t" << instr->fetch.property;
204         break;
205     case QDeclarativeInstruction::FetchObject:
206         qWarning().nospace() << idx << "\t\t" << line << "\t" << "FETCH\t\t\t" << instr->fetch.property;
207         break;
208     case QDeclarativeInstruction::FetchValueType:
209         qWarning().nospace() << idx << "\t\t" << line << "\t" << "FETCH_VALUE\t\t" << instr->fetchValue.property << "\t" << instr->fetchValue.type << "\t" << instr->fetchValue.bindingSkipList;
210         break;
211     case QDeclarativeInstruction::PopFetchedObject:
212         qWarning().nospace() << idx << "\t\t" << line << "\t" << "POP";
213         break;
214     case QDeclarativeInstruction::PopQList:
215         qWarning().nospace() << idx << "\t\t" << line << "\t" << "POP_QLIST";
216         break;
217     case QDeclarativeInstruction::PopValueType:
218         qWarning().nospace() << idx << "\t\t" << line << "\t" << "POP_VALUE\t\t" << instr->fetchValue.property << "\t" << instr->fetchValue.type;
219         break;
220     case QDeclarativeInstruction::Defer:
221         qWarning().nospace() << idx << "\t\t" << line << "\t" << "DEFER" << "\t\t\t" << instr->defer.deferCount;
222         break;
223     default:
224         qWarning().nospace() << idx << "\t\t" << line << "\t" << "XXX UNKNOWN INSTRUCTION" << "\t" << instr->type;
225         break;
226     }
227 #endif // QT_NO_DEBUG_STREAM
228 }
229
230 QT_END_NAMESPACE