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:
Simon Hausmann 2017-03-06 10:29:47 +01:00
parent 05a88efb26
commit c6917f27cb
1 changed files with 16 additions and 1 deletions

View File

@ -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);
}