Fix restoring IR from cache files
Commit eeb08d9537
was missing the code to
restore the aliases, the AST function formals as well as the object
flags/id.
This also fixes crashes with the QML compiler.
Change-Id: I1c50816dc77ae66edbc3ddc7146da4edfd4170f4
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
This commit is contained in:
parent
05a88efb26
commit
c6917f27cb
|
@ -2116,7 +2116,8 @@ QmlIR::Object *IRLoader::loadObject(const QV4::CompiledData::Object *serializedO
|
|||
|
||||
object->indexOfDefaultPropertyOrAlias = serializedObject->indexOfDefaultPropertyOrAlias;
|
||||
object->defaultPropertyIsAlias = serializedObject->defaultPropertyIsAlias;
|
||||
|
||||
object->flags = serializedObject->flags;
|
||||
object->id = serializedObject->id;
|
||||
object->location = serializedObject->location;
|
||||
object->locationOfIdProperty = serializedObject->locationOfIdProperty;
|
||||
|
||||
|
@ -2175,6 +2176,15 @@ QmlIR::Object *IRLoader::loadObject(const QV4::CompiledData::Object *serializedO
|
|||
object->properties->append(p);
|
||||
}
|
||||
|
||||
{
|
||||
const QV4::CompiledData::Alias *serializedAlias = serializedObject->aliasTable();
|
||||
for (uint i = 0; i < serializedObject->nAliases; ++i, ++serializedAlias) {
|
||||
QmlIR::Alias *a = pool->New<QmlIR::Alias>();
|
||||
*static_cast<QV4::CompiledData::Alias*>(a) = *serializedAlias;
|
||||
object->aliases->append(a);
|
||||
}
|
||||
}
|
||||
|
||||
QQmlJS::Engine *jsParserEngine = &output->jsParserEngine;
|
||||
|
||||
const QV4::CompiledData::LEUInt32 *functionIdx = serializedObject->functionOffsetTable();
|
||||
|
@ -2205,6 +2215,11 @@ QmlIR::Object *IRLoader::loadObject(const QV4::CompiledData::Object *serializedO
|
|||
const QString name = unit->stringAt(compiledFunction->nameIndex);
|
||||
f->functionDeclaration = new(pool) QQmlJS::AST::FunctionDeclaration(jsParserEngine->newStringRef(name), paramList, /*body*/0);
|
||||
|
||||
f->formals.allocate(pool, int(compiledFunction->nFormals));
|
||||
formalNameIdx = compiledFunction->formalsTable();
|
||||
for (uint i = 0; i < compiledFunction->nFormals; ++i, ++formalNameIdx)
|
||||
f->formals[i] = *formalNameIdx;
|
||||
|
||||
object->functions->append(f);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue