diff options
Diffstat (limited to 'src/qml/qml/v4/qv4irbuilder.cpp')
-rw-r--r-- | src/qml/qml/v4/qv4irbuilder.cpp | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/qml/qml/v4/qv4irbuilder.cpp b/src/qml/qml/v4/qv4irbuilder.cpp index 31ed9a5a6a..82da09f485 100644 --- a/src/qml/qml/v4/qv4irbuilder.cpp +++ b/src/qml/qml/v4/qv4irbuilder.cpp @@ -116,8 +116,16 @@ bool QV4IRBuilder::operator()(QQmlJS::IR::Function *function, //_block->MOVE(_block->TEMP(IR::InvalidType), r.code); if (r.code) { - const QMetaObject *m = 0; - const IR::Type targetType = irTypeFromVariantType(m_expression->property->type, m_engine, m); + IR::Type targetType = IR::InvalidType; + + // This is the only operation where variant is supported: + QQmlPropertyData *data = &m_expression->property->core; + if (data->propType == QMetaType::QVariant) { + targetType = (data->isVMEProperty() ? IR::VarType : IR::VariantType); + } else { + targetType = irTypeFromVariantType(data->propType, m_engine, 0); + } + if (targetType != r.type()) { IR::Expr *x = _block->TEMP(targetType); _block->MOVE(x, r, true); |