Changeset View
Changeset View
Standalone View
Standalone View
src/qmljsc/compilerpasses/asttoirpass.cpp
Show First 20 Lines • Show All 49 Lines • ▼ Show 20 Line(s) | 49 | { | |||
---|---|---|---|---|---|
50 | m_stack << m_file; | 50 | m_stack << m_file; | ||
51 | return true; | 51 | return true; | ||
52 | } | 52 | } | ||
53 | 53 | | |||
54 | 54 | | |||
55 | bool AstToIRPass::visit(QQmlJS::AST::UiImport *import) | 55 | bool AstToIRPass::visit(QQmlJS::AST::UiImport *import) | ||
56 | { | 56 | { | ||
57 | Q_ASSERT(import); | 57 | Q_ASSERT(import); | ||
58 | IR::ImportDescription desc; | 58 | QString name; | ||
59 | int versionMajor; | ||||
60 | int versionMinor; | ||||
59 | 61 | | |||
60 | if (!import->fileName.isEmpty()) { | 62 | if (!import->fileName.isEmpty()) { | ||
61 | // TODO: Decide between directory and file import | 63 | // TODO: Decide between directory and file import | ||
62 | desc.kind = IR::ImportDescription::Kind_FileImport; | 64 | name = import->fileName.toString(); | ||
63 | desc.name = import->fileName.toString(); | | |||
64 | } else if (import->importUri && !import->importUri->name.isEmpty()) { | 65 | } else if (import->importUri && !import->importUri->name.isEmpty()) { | ||
65 | desc.kind = IR::ImportDescription::Kind_ModuleImport; | | |||
66 | QQmlJS::AST::UiQualifiedId *id = import->importUri; | 66 | QQmlJS::AST::UiQualifiedId *id = import->importUri; | ||
67 | desc.name = id->name.toString(); | 67 | name = id->name.toString(); | ||
68 | while ((id = id->next)){ | 68 | while ((id = id->next)){ | ||
69 | desc.name += "."; | 69 | name += "."; | ||
70 | desc.name += id->name; | 70 | name += id->name; | ||
71 | } | 71 | } | ||
72 | QStringRef versionRef(import->importUri->name.string(), import->versionToken.offset, import->versionToken.length); | 72 | QStringRef versionRef(import->importUri->name.string(), import->versionToken.offset, import->versionToken.length); | ||
73 | QmlIR::IRBuilder::extractVersion(versionRef, &desc.versionMajor, &desc.versionMinor); | 73 | QmlIR::IRBuilder::extractVersion(versionRef, &versionMajor, &versionMinor); | ||
74 | 74 | | |||
75 | IR::Module *module = 0; | 75 | IR::Module *module = 0; | ||
76 | try { | 76 | try { | ||
77 | module = ModuleLoading::loadModule(desc); | 77 | module = ModuleLoading::loadModule(name, versionMajor, versionMinor); | ||
78 | } catch (Error *error) { | 78 | } catch (Error *error) { | ||
79 | QQmlJS::AST::SourceLocation token = import->fileNameToken; | 79 | QQmlJS::AST::SourceLocation token = import->fileNameToken; | ||
80 | error->setLine(token.startLine); | 80 | error->setLine(token.startLine); | ||
81 | error->setColumn(token.startColumn); | 81 | error->setColumn(token.startColumn); | ||
82 | throw error; | 82 | throw error; | ||
83 | } | 83 | } | ||
84 | // assert(module->loadingState() == IR::Module::Successful, import->firstSourceLocation(), QStringLiteral("Can't load module %1.").arg(desc.name)); | 84 | // assert(module->loadingState() == IR::Module::Successful, import->firstSourceLocation(), QStringLiteral("Can't load module %1.").arg(desc.name)); | ||
85 | m_file->addModule(module, import->importId.toString()); | 85 | m_file->addModule(module, import->importId.toString()); | ||
▲ Show 20 Lines • Show All 241 Lines • Show Last 20 Lines |