diff options
author | Lars Knoll <lars.knoll@digia.com> | 2013-09-25 14:03:52 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-09-28 13:33:35 +0200 |
commit | c79cc3f30d395c94d4f14b978903d7db4ad871dc (patch) | |
tree | 7f07362d68d2d14a9c8a98eb8aa0ef0e816654f9 /src/qml | |
parent | 4d40fa24c3ee8def2f27bd237fc8dec25cf3f473 (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.cpp | 12 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4argumentsobject.cpp | 2 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4scopedvalue_p.h | 24 |
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) |