36bool VariantObject::virtualIsEqualTo(Managed *m, Managed *other)
38 Q_ASSERT(m->as<QV4::VariantObject>());
39 QV4::VariantObject *lv =
static_cast<QV4::VariantObject *>(m);
41 if (QV4::VariantObject *rv = other->as<QV4::VariantObject>())
42 return lv->d()->data() == rv->d()->data();
44 if (QV4::QQmlValueTypeWrapper *v = other->as<QQmlValueTypeWrapper>())
45 return v->isEqual(lv->d()->data());
71void VariantPrototype::init()
73 defineDefaultProperty(QStringLiteral(
"preserve"), method_preserve, 0);
74 defineDefaultProperty(QStringLiteral(
"destroy"), method_destroy, 0);
75 defineDefaultProperty(engine()->id_valueOf(), method_valueOf, 0);
76 defineDefaultProperty(engine()->id_toString(), method_toString, 0);
98ReturnedValue VariantPrototype::method_toString(
const FunctionObject *b,
const Value *thisObject,
const Value *,
int)
100 ExecutionEngine *v4 = b->engine();
101 const VariantObject *o = thisObject->as<QV4::VariantObject>();
104 const QVariant variant = o->d()->data();
105 QString result = variant.toString();
106 if (result.isEmpty() && !variant.canConvert(QMetaType(QMetaType::QString))) {
113 return Encode(v4->newString(result));
116ReturnedValue VariantPrototype::method_valueOf(
const FunctionObject *b,
const Value *thisObject,
const Value *,
int)
118 const VariantObject *o = thisObject->as<QV4::VariantObject>();
120 QVariant v = o->d()->data();
121 switch (v.userType()) {
122 case QMetaType::UnknownType:
123 return Encode::undefined();
124 case QMetaType::QString:
125 return Encode(b->engine()->newString(v.toString()));
127 return Encode(v.toInt());
128 case QMetaType::Double:
129 case QMetaType::UInt:
130 return Encode(v.toDouble());
131 case QMetaType::Bool:
132 return Encode(v.toBool());
134 if (QMetaType(v.metaType()).flags() & QMetaType::IsEnumeration)
135 if (v.metaType().sizeOf() <= qsizetype(
sizeof(
int)))
136 return Encode(v.toInt());
137 if (v.canConvert<
double>())
138 return Encode(v.toDouble());
139 if (v.canConvert<
int>())
140 return Encode(v.toInt());
141 if (v.canConvert<uint>())
142 return Encode(v.toUInt());
143 if (v.canConvert<
bool>())
144 return Encode(v.toBool());
145 if (v.canConvert<QString>())
146 return Encode(b->engine()->newString(v.toString()));
150 return thisObject->asReturnedValue();