From 9d7b27f5bf44a46707e6d50ebf51ecf73f91dd1b Mon Sep 17 00:00:00 2001 From: Simon Hausmann Date: Fri, 5 Dec 2014 16:32:56 +0100 Subject: Clean up JS .import/.pragma directive scanning There's a scanner in QQmlJS::Lexer::scanDirectives that can parse those, so let's get rid of extra parser that operates on a string. Instead this way we can do the scanning all in one shot, avoid detaching a copy of the source code string and (most importantly) bring the parser closer to the copy in Qt Creator, which uses the directives approach to extract imports and pragma. Change-Id: Iff6eb8d91a45d8a70f383f953115692be48259de Reviewed-by: Fawzi Mohamed --- src/qml/qml/qqmltypeloader.cpp | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) (limited to 'src/qml/qml/qqmltypeloader.cpp') diff --git a/src/qml/qml/qqmltypeloader.cpp b/src/qml/qml/qqmltypeloader.cpp index 927577a9e1..4b7fe9eb04 100644 --- a/src/qml/qml/qqmltypeloader.cpp +++ b/src/qml/qml/qqmltypeloader.cpp @@ -2584,20 +2584,10 @@ void QQmlScriptBlob::dataReceived(const Data &data) QV4::ExecutionEngine *v4 = QV8Engine::getV4(m_typeLoader->engine()); QmlIR::Document irUnit(v4->debugger != 0); - QQmlJS::DiagnosticMessage metaDataError; - irUnit.extractScriptMetaData(source, &metaDataError); - if (!metaDataError.message.isEmpty()) { - QQmlError e; - e.setUrl(finalUrl()); - e.setLine(metaDataError.loc.startLine); - e.setColumn(metaDataError.loc.startColumn); - e.setDescription(metaDataError.message); - setError(e); - return; - } + QmlIR::ScriptDirectivesCollector collector(&irUnit.jsParserEngine, &irUnit.jsGenerator); QList errors; - QQmlRefPointer unit = QV4::Script::precompile(&irUnit.jsModule, &irUnit.jsGenerator, v4, finalUrl(), source, &errors); + QQmlRefPointer unit = QV4::Script::precompile(&irUnit.jsModule, &irUnit.jsGenerator, v4, finalUrl(), source, &errors, &collector); // No need to addref on unit, it's initial refcount is 1 source.clear(); if (!errors.isEmpty()) { @@ -2608,6 +2598,9 @@ void QQmlScriptBlob::dataReceived(const Data &data) unit.take(new EmptyCompilationUnit); } irUnit.javaScriptCompilationUnit = unit; + irUnit.imports = collector.imports; + if (collector.hasPragmaLibrary) + irUnit.unitFlags |= QV4::CompiledData::Unit::IsSharedLibrary; QmlIR::QmlUnitGenerator qmlGenerator; QV4::CompiledData::Unit *unitData = qmlGenerator.generate(irUnit); -- cgit v1.2.3