aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@digia.com>2013-09-25 14:03:52 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-09-28 13:33:35 +0200
commitc79cc3f30d395c94d4f14b978903d7db4ad871dc (patch)
tree7f07362d68d2d14a9c8a98eb8aa0ef0e816654f9 /src/qml
parent4d40fa24c3ee8def2f27bd237fc8dec25cf3f473 (diff)
Make Encode not inherit from Value
This allows Encoding of Returned<> pointers, and directly assigning them to a Value. Change-Id: I0f22b9921ca5712538f22029fa5449242649e01c Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'src/qml')
-rw-r--r--src/qml/jsapi/qjsvalue.cpp12
-rw-r--r--src/qml/jsruntime/qv4argumentsobject.cpp2
-rw-r--r--src/qml/jsruntime/qv4scopedvalue_p.h24
3 files changed, 20 insertions, 18 deletions
diff --git a/src/qml/jsapi/qjsvalue.cpp b/src/qml/jsapi/qjsvalue.cpp
index a22f77b2b0..2afeff0a07 100644
--- a/src/qml/jsapi/qjsvalue.cpp
+++ b/src/qml/jsapi/qjsvalue.cpp
@@ -66,7 +66,7 @@ QV4::ReturnedValue QJSValuePrivate::getValue(QV4::ExecutionEngine *e)
return QV4::Encode::undefined();
}
if (value.asString() == &string) {
- value = QV4::Value::fromString(engine->newString(string.toQString()));
+ value = QV4::Encode(engine->newString(string.toQString()));
PersistentValuePrivate **listRoot = &engine->memoryManager->m_persistentValues;
prev = listRoot;
next = *listRoot;
@@ -508,13 +508,13 @@ QJSValue QJSValue::call(const QJSValueList &args)
Scope scope(engine);
ScopedCallData callData(scope, args.length());
- callData->thisObject = Value::fromObject(engine->globalObject);
+ callData->thisObject = Encode(engine->globalObject);
for (int i = 0; i < args.size(); ++i) {
if (!args.at(i).d->checkEngine(engine)) {
qWarning("QJSValue::call() failed: cannot call function with argument created in a different engine");
return QJSValue();
}
- callData->args[i] = QV4::Value::fromReturnedValue(args.at(i).d->getValue(engine));
+ callData->args[i] = args.at(i).d->getValue(engine);
}
ScopedValue result(scope);
@@ -565,13 +565,13 @@ QJSValue QJSValue::callWithInstance(const QJSValue &instance, const QJSValueList
}
ScopedCallData callData(scope, args.size());
- callData->thisObject = QV4::Value::fromReturnedValue(instance.d->getValue(engine));
+ callData->thisObject = instance.d->getValue(engine);
for (int i = 0; i < args.size(); ++i) {
if (!args.at(i).d->checkEngine(engine)) {
qWarning("QJSValue::call() failed: cannot call function with argument created in a different engine");
return QJSValue();
}
- callData->args[i] = QV4::Value::fromReturnedValue(args.at(i).d->getValue(engine));
+ callData->args[i] = args.at(i).d->getValue(engine);
}
ScopedValue result(scope);
@@ -620,7 +620,7 @@ QJSValue QJSValue::callAsConstructor(const QJSValueList &args)
qWarning("QJSValue::callAsConstructor() failed: cannot construct function with argument created in a different engine");
return QJSValue();
}
- callData->args[i] = QV4::Value::fromReturnedValue(args.at(i).d->getValue(engine));
+ callData->args[i] = args.at(i).d->getValue(engine);
}
ScopedValue result(scope);
diff --git a/src/qml/jsruntime/qv4argumentsobject.cpp b/src/qml/jsruntime/qv4argumentsobject.cpp
index 61922c9d53..06e75d8085 100644
--- a/src/qml/jsruntime/qv4argumentsobject.cpp
+++ b/src/qml/jsruntime/qv4argumentsobject.cpp
@@ -71,7 +71,7 @@ ArgumentsObject::ArgumentsObject(CallContext *context)
} else {
internalClass = engine()->argumentsObjectClass;
Q_ASSERT(CalleePropertyIndex == internalClass->find(context->engine->id_callee));
- memberData[CalleePropertyIndex].value = Value::fromObject(context->function);
+ memberData[CalleePropertyIndex].value = Encode(context->function);
isNonStrictArgumentsObject = true;
uint numAccessors = qMin((int)context->function->formalParameterCount, context->realArgumentCount);
diff --git a/src/qml/jsruntime/qv4scopedvalue_p.h b/src/qml/jsruntime/qv4scopedvalue_p.h
index 4c44d37af8..4f250cd03e 100644
--- a/src/qml/jsruntime/qv4scopedvalue_p.h
+++ b/src/qml/jsruntime/qv4scopedvalue_p.h
@@ -538,31 +538,32 @@ private:
CallData *ptr;
};
-struct Encode : private Value {
+struct Encode {
static ReturnedValue undefined() {
- return quint64(Undefined_Type) << Tag_Shift;
+ return quint64(Value::Undefined_Type) << Value::Tag_Shift;
}
static ReturnedValue null() {
- return quint64(_Null_Type) << Tag_Shift;
+ return quint64(Value::_Null_Type) << Value::Tag_Shift;
}
Encode(bool b) {
- tag = _Boolean_Type;
- int_32 = b;
+ val = (quint64(Value::_Boolean_Type) << Value::Tag_Shift) | (uint)b;
}
Encode(double d) {
- setDouble(d);
+ Value v;
+ v.setDouble(d);
+ val = v.val;
}
Encode(int i) {
- tag = _Integer_Type;
- int_32 = i;
+ val = (quint64(Value::_Integer_Type) << Value::Tag_Shift) | i;
}
Encode(uint i) {
if (i <= INT_MAX) {
- tag = _Integer_Type;
- int_32 = i;
+ val = (quint64(Value::_Integer_Type) << Value::Tag_Shift) | i;
} else {
- setDouble(i);
+ Value v;
+ v.setDouble(i);
+ val = v.val;
}
}
Encode(ReturnedValue v) {
@@ -577,6 +578,7 @@ struct Encode : private Value {
operator ReturnedValue() const {
return val;
}
+ quint64 val;
};
inline SafeValue &SafeValue::operator =(const ScopedValue &v)