aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/jsruntime/qv4value.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/qml/jsruntime/qv4value.cpp')
-rw-r--r--src/qml/jsruntime/qv4value.cpp52
1 files changed, 27 insertions, 25 deletions
diff --git a/src/qml/jsruntime/qv4value.cpp b/src/qml/jsruntime/qv4value.cpp
index 95c95b1974..e34ac9c764 100644
--- a/src/qml/jsruntime/qv4value.cpp
+++ b/src/qml/jsruntime/qv4value.cpp
@@ -77,24 +77,24 @@ int Value::toUInt16() const
bool Value::toBoolean() const
{
- switch (type()) {
- case Value::Undefined_Type:
- case Value::Null_Type:
+ if (isInteger() || isBoolean())
+ return static_cast<bool>(int_32());
+
+ if (isUndefined() || isNull())
return false;
- case Value::Boolean_Type:
- case Value::Integer_Type:
- return (bool)int_32();
- case Value::Managed_Type:
+
+ if (isManaged()) {
#ifdef V4_BOOTSTRAP
Q_UNIMPLEMENTED();
#else
- if (isString())
- return stringValue()->toQString().length() > 0;
+ if (String *s = stringValue())
+ return s->toQString().length() > 0;
#endif
return true;
- default: // double
- return doubleValue() && !std::isnan(doubleValue());
}
+
+ // double
+ return doubleValue() && !std::isnan(doubleValue());
}
double Value::toInteger() const
@@ -114,8 +114,8 @@ double Value::toNumberImpl() const
#ifdef V4_BOOTSTRAP
Q_UNIMPLEMENTED();
#else
- if (isString())
- return RuntimeHelpers::stringToNumber(stringValue()->toQString());
+ if (String *s = stringValue())
+ return RuntimeHelpers::stringToNumber(s->toQString());
{
Q_ASSERT(isObject());
Scope scope(objectValue()->engine());
@@ -150,8 +150,8 @@ QString Value::toQStringNoThrow() const
else
return QStringLiteral("false");
case Value::Managed_Type:
- if (isString())
- return stringValue()->toQString();
+ if (String *s = stringValue())
+ return s->toQString();
{
Q_ASSERT(isObject());
Scope scope(objectValue()->engine());
@@ -203,8 +203,8 @@ QString Value::toQString() const
else
return QStringLiteral("false");
case Value::Managed_Type:
- if (isString())
- return stringValue()->toQString();
+ if (String *s = stringValue())
+ return s->toQString();
{
Q_ASSERT(isObject());
Scope scope(objectValue()->engine());
@@ -228,8 +228,10 @@ QString Value::toQString() const
bool Value::sameValue(Value other) const {
if (_val == other._val)
return true;
- if (isString() && other.isString())
- return stringValue()->isEqualTo(other.stringValue());
+ String *s = stringValue();
+ String *os = other.stringValue();
+ if (s && os)
+ return s->isEqualTo(os);
if (isInteger() && other.isDouble())
return int_32() ? (double(int_32()) == other.doubleValue()) : (other._val == 0);
if (isDouble() && other.isInteger())
@@ -298,15 +300,15 @@ double Primitive::toInteger(double number)
#ifndef V4_BOOTSTRAP
Heap::String *Value::toString(ExecutionEngine *e) const
{
- if (isString())
- return stringValue()->d();
+ if (String *s = stringValue())
+ return s->d();
return RuntimeHelpers::convertToString(e, *this);
}
Heap::Object *Value::toObject(ExecutionEngine *e) const
{
- if (isObject())
- return objectValue()->d();
+ if (Object *o = objectValue())
+ return o->d();
return RuntimeHelpers::convertToObject(e, *this);
}
@@ -330,8 +332,8 @@ uint Value::asArrayLength(bool *ok) const
}
return idx;
}
- if (isString())
- return stringValue()->toUInt(ok);
+ if (String *s = stringValue())
+ return s->toUInt(ok);
uint idx = toUInt32();
double d = toNumber();