40 ****************************************************************************/ |
40 ****************************************************************************/ |
41 |
41 |
42 #include "private/qdeclarativedom_p.h" |
42 #include "private/qdeclarativedom_p.h" |
43 #include "private/qdeclarativedom_p_p.h" |
43 #include "private/qdeclarativedom_p_p.h" |
44 |
44 |
45 #include "private/qdeclarativecompositetypedata_p.h" |
|
46 #include "private/qdeclarativecompiler_p.h" |
45 #include "private/qdeclarativecompiler_p.h" |
47 #include "private/qdeclarativeengine_p.h" |
46 #include "private/qdeclarativeengine_p.h" |
48 #include "private/qdeclarativescriptparser_p.h" |
47 #include "private/qdeclarativescriptparser_p.h" |
49 #include "private/qdeclarativeglobal_p.h" |
48 #include "private/qdeclarativeglobal_p.h" |
50 |
49 |
143 bool QDeclarativeDomDocument::load(QDeclarativeEngine *engine, const QByteArray &data, const QUrl &url) |
142 bool QDeclarativeDomDocument::load(QDeclarativeEngine *engine, const QByteArray &data, const QUrl &url) |
144 { |
143 { |
145 d->errors.clear(); |
144 d->errors.clear(); |
146 d->imports.clear(); |
145 d->imports.clear(); |
147 |
146 |
148 QDeclarativeCompiledData *component = new QDeclarativeCompiledData(engine); |
147 QDeclarativeEnginePrivate *ep = QDeclarativeEnginePrivate::get(engine); |
149 QDeclarativeCompiler compiler; |
148 QDeclarativeTypeData *td = ep->typeLoader.get(data, url, QDeclarativeTypeLoader::PreserveParser); |
150 |
149 |
151 QDeclarativeCompositeTypeData *td = ((QDeclarativeEnginePrivate *)QDeclarativeEnginePrivate::get(engine))->typeManager.getImmediate(data, url); |
150 if(td->isError()) { |
152 |
151 d->errors = td->errors(); |
153 if(td->status == QDeclarativeCompositeTypeData::Error) { |
|
154 d->errors = td->errors; |
|
155 td->release(); |
152 td->release(); |
156 component->release(); |
|
157 return false; |
153 return false; |
158 } else if(td->status == QDeclarativeCompositeTypeData::Waiting || |
154 } else if(!td->isCompleteOrError()) { |
159 td->status == QDeclarativeCompositeTypeData::WaitingResources) { |
|
160 QDeclarativeError error; |
155 QDeclarativeError error; |
161 error.setDescription(QLatin1String("QDeclarativeDomDocument supports local types only")); |
156 error.setDescription(QLatin1String("QDeclarativeDomDocument supports local types only")); |
162 d->errors << error; |
157 d->errors << error; |
163 td->release(); |
158 td->release(); |
164 component->release(); |
|
165 return false; |
159 return false; |
166 } |
160 } |
167 |
161 |
168 compiler.compile(engine, td, component); |
162 for (int i = 0; i < td->parser().imports().size(); ++i) { |
169 |
163 QDeclarativeScriptParser::Import parserImport = td->parser().imports().at(i); |
170 if (compiler.isError()) { |
|
171 d->errors = compiler.errors(); |
|
172 td->release(); |
|
173 component->release(); |
|
174 return false; |
|
175 } |
|
176 |
|
177 for (int i = 0; i < td->data.imports().size(); ++i) { |
|
178 QDeclarativeScriptParser::Import parserImport = td->data.imports().at(i); |
|
179 QDeclarativeDomImport domImport; |
164 QDeclarativeDomImport domImport; |
180 domImport.d->type = static_cast<QDeclarativeDomImportPrivate::Type>(parserImport.type); |
165 domImport.d->type = static_cast<QDeclarativeDomImportPrivate::Type>(parserImport.type); |
181 domImport.d->uri = parserImport.uri; |
166 domImport.d->uri = parserImport.uri; |
182 domImport.d->qualifier = parserImport.qualifier; |
167 domImport.d->qualifier = parserImport.qualifier; |
183 domImport.d->version = parserImport.version; |
168 domImport.d->version = parserImport.version; |
184 d->imports += domImport; |
169 d->imports += domImport; |
185 } |
170 } |
186 |
171 |
187 if (td->data.tree()) { |
172 if (td->parser().tree()) { |
188 d->root = td->data.tree(); |
173 d->root = td->parser().tree(); |
189 d->root->addref(); |
174 d->root->addref(); |
190 } |
175 } |
191 |
176 |
192 component->release(); |
177 td->release(); |
193 return true; |
178 return true; |
194 } |
179 } |
195 |
180 |
196 /*! |
181 /*! |
197 Returns the last load errors. The load errors will be reset after a |
182 Returns the last load errors. The load errors will be reset after a |