From 002a5d4303b3b182ae4abc4a752c49787c1c2821 Mon Sep 17 00:00:00 2001 From: Lars Knoll Date: Thu, 15 Jan 2015 11:36:57 +0100 Subject: Get rid of most uses of ValueRef Instead pass a const Value & into the functions With our new inheritance structure, we can get rid of ValueRef and instead simply pass a pointer to a Value again. Pointers to Values are safe to use again now, as they are now guaranteed to be in a place where the GC knows about them. Change-Id: I44c606fde764db3993b8128fd6fb781d3a298e53 Reviewed-by: Simon Hausmann --- src/qml/compiler/qv4ssa.cpp | 16 +- src/qml/jsapi/qjsvalue.cpp | 18 +- src/qml/jsapi/qjsvalueiterator.cpp | 2 +- src/qml/jsruntime/qv4argumentsobject.cpp | 2 +- src/qml/jsruntime/qv4argumentsobject_p.h | 2 +- src/qml/jsruntime/qv4arraydata.cpp | 18 +- src/qml/jsruntime/qv4arraydata_p.h | 14 +- src/qml/jsruntime/qv4arrayobject.cpp | 5 +- src/qml/jsruntime/qv4context.cpp | 12 +- src/qml/jsruntime/qv4context_p.h | 6 +- src/qml/jsruntime/qv4dateobject_p.h | 4 +- src/qml/jsruntime/qv4debugging.cpp | 2 +- src/qml/jsruntime/qv4engine.cpp | 130 +++++----- src/qml/jsruntime/qv4engine_p.h | 24 +- src/qml/jsruntime/qv4errorobject.cpp | 16 +- src/qml/jsruntime/qv4errorobject_p.h | 14 +- src/qml/jsruntime/qv4functionobject.cpp | 2 +- src/qml/jsruntime/qv4functionobject_p.h | 4 +- src/qml/jsruntime/qv4include.cpp | 10 +- src/qml/jsruntime/qv4include_p.h | 4 +- src/qml/jsruntime/qv4jsonobject.cpp | 28 +-- src/qml/jsruntime/qv4jsonobject_p.h | 4 +- src/qml/jsruntime/qv4lookup.cpp | 198 +++++++-------- src/qml/jsruntime/qv4lookup_p.h | 82 +++--- src/qml/jsruntime/qv4managed_p.h | 6 +- src/qml/jsruntime/qv4object.cpp | 40 +-- src/qml/jsruntime/qv4object_p.h | 50 ++-- src/qml/jsruntime/qv4objectproto.cpp | 8 +- src/qml/jsruntime/qv4objectproto_p.h | 4 +- src/qml/jsruntime/qv4persistent.cpp | 16 +- src/qml/jsruntime/qv4persistent_p.h | 7 +- src/qml/jsruntime/qv4qobjectwrapper.cpp | 114 ++++----- src/qml/jsruntime/qv4qobjectwrapper_p.h | 14 +- src/qml/jsruntime/qv4runtime.cpp | 336 ++++++++++++------------- src/qml/jsruntime/qv4runtime_p.h | 310 +++++++++++------------ src/qml/jsruntime/qv4scopedvalue_p.h | 44 ++-- src/qml/jsruntime/qv4script.cpp | 2 +- src/qml/jsruntime/qv4script_p.h | 2 +- src/qml/jsruntime/qv4sequenceobject.cpp | 38 +-- src/qml/jsruntime/qv4sequenceobject_p.h | 2 +- src/qml/jsruntime/qv4serialize.cpp | 51 ++-- src/qml/jsruntime/qv4serialize_p.h | 4 +- src/qml/jsruntime/qv4stringobject.cpp | 2 +- src/qml/jsruntime/qv4stringobject_p.h | 2 +- src/qml/jsruntime/qv4typedarray.cpp | 42 ++-- src/qml/jsruntime/qv4typedarray_p.h | 4 +- src/qml/jsruntime/qv4value.cpp | 2 +- src/qml/jsruntime/qv4value_p.h | 7 +- src/qml/jsruntime/qv4vme_moth.cpp | 76 +++--- src/qml/qml/ftw/qhashedstring_p.h | 4 +- src/qml/qml/qqmlbinding.cpp | 4 +- src/qml/qml/qqmlbinding_p.h | 2 +- src/qml/qml/qqmlboundsignal.cpp | 4 +- src/qml/qml/qqmlboundsignal_p.h | 2 +- src/qml/qml/qqmlcomponent.cpp | 4 +- src/qml/qml/qqmlcomponent_p.h | 2 +- src/qml/qml/qqmlcontextwrapper.cpp | 16 +- src/qml/qml/qqmlcontextwrapper_p.h | 6 +- src/qml/qml/qqmljavascriptexpression.cpp | 8 +- src/qml/qml/qqmljavascriptexpression_p.h | 4 +- src/qml/qml/qqmllistwrapper.cpp | 2 +- src/qml/qml/qqmllistwrapper_p.h | 2 +- src/qml/qml/qqmllocale.cpp | 4 +- src/qml/qml/qqmlobjectcreator.cpp | 2 +- src/qml/qml/qqmlproperty.cpp | 30 +-- src/qml/qml/qqmlproperty_p.h | 2 +- src/qml/qml/qqmltypeloader.cpp | 4 +- src/qml/qml/qqmltypewrapper.cpp | 4 +- src/qml/qml/qqmltypewrapper_p.h | 2 +- src/qml/qml/qqmlvaluetypewrapper.cpp | 4 +- src/qml/qml/qqmlvaluetypewrapper_p.h | 2 +- src/qml/qml/qqmlvmemetaobject.cpp | 4 +- src/qml/qml/qqmlvmemetaobject_p.h | 4 +- src/qml/qml/qqmlxmlhttprequest.cpp | 32 +-- src/qml/qml/v8/qv8engine.cpp | 2 +- src/qml/qml/v8/qv8engine_p.h | 4 +- src/qml/types/qqmldelegatemodel.cpp | 34 +-- src/qml/types/qqmldelegatemodel_p_p.h | 12 +- src/qml/types/qqmllistmodel.cpp | 41 ++- src/qml/types/qqmllistmodel_p_p.h | 4 +- src/quick/items/context2d/qquickcanvasitem.cpp | 2 +- src/quick/items/context2d/qquickcontext2d.cpp | 6 +- src/quick/items/qquickloader.cpp | 2 +- 83 files changed, 1025 insertions(+), 1036 deletions(-) (limited to 'src') diff --git a/src/qml/compiler/qv4ssa.cpp b/src/qml/compiler/qv4ssa.cpp index 85da241af8..789732bf07 100644 --- a/src/qml/compiler/qv4ssa.cpp +++ b/src/qml/compiler/qv4ssa.cpp @@ -3747,42 +3747,42 @@ bool tryOptimizingComparison(Expr *&expr) switch (b->op) { case OpGt: - leftConst->value = Runtime::compareGreaterThan(&l, &r); + leftConst->value = Runtime::compareGreaterThan(l, r); leftConst->type = BoolType; expr = leftConst; return true; case OpLt: - leftConst->value = Runtime::compareLessThan(&l, &r); + leftConst->value = Runtime::compareLessThan(l, r); leftConst->type = BoolType; expr = leftConst; return true; case OpGe: - leftConst->value = Runtime::compareGreaterEqual(&l, &r); + leftConst->value = Runtime::compareGreaterEqual(l, r); leftConst->type = BoolType; expr = leftConst; return true; case OpLe: - leftConst->value = Runtime::compareLessEqual(&l, &r); + leftConst->value = Runtime::compareLessEqual(l, r); leftConst->type = BoolType; expr = leftConst; return true; case OpStrictEqual: - leftConst->value = Runtime::compareStrictEqual(&l, &r); + leftConst->value = Runtime::compareStrictEqual(l, r); leftConst->type = BoolType; expr = leftConst; return true; case OpEqual: - leftConst->value = Runtime::compareEqual(&l, &r); + leftConst->value = Runtime::compareEqual(l, r); leftConst->type = BoolType; expr = leftConst; return true; case OpStrictNotEqual: - leftConst->value = Runtime::compareStrictNotEqual(&l, &r); + leftConst->value = Runtime::compareStrictNotEqual(l, r); leftConst->type = BoolType; expr = leftConst; return true; case OpNotEqual: - leftConst->value = Runtime::compareNotEqual(&l, &r); + leftConst->value = Runtime::compareNotEqual(l, r); leftConst->type = BoolType; expr = leftConst; return true; diff --git a/src/qml/jsapi/qjsvalue.cpp b/src/qml/jsapi/qjsvalue.cpp index 5310b56af1..ac47e2b5c2 100644 --- a/src/qml/jsapi/qjsvalue.cpp +++ b/src/qml/jsapi/qjsvalue.cpp @@ -861,16 +861,16 @@ QJSValue& QJSValue::operator=(const QJSValue& other) return *this; } -static bool js_equal(const QString &string, QV4::ValueRef value) +static bool js_equal(const QString &string, const QV4::Value &value) { - if (value->isString()) - return string == value->stringValue()->toQString(); - if (value->isNumber()) - return RuntimeHelpers::stringToNumber(string) == value->asDouble(); - if (value->isBoolean()) - return RuntimeHelpers::stringToNumber(string) == double(value->booleanValue()); - if (value->isObject()) { - Scope scope(value->objectValue()->engine()); + if (value.isString()) + return string == value.stringValue()->toQString(); + if (value.isNumber()) + return RuntimeHelpers::stringToNumber(string) == value.asDouble(); + if (value.isBoolean()) + return RuntimeHelpers::stringToNumber(string) == double(value.booleanValue()); + if (value.isObject()) { + Scope scope(value.objectValue()->engine()); ScopedValue p(scope, RuntimeHelpers::toPrimitive(value, PREFERREDTYPE_HINT)); return js_equal(string, p); } diff --git a/src/qml/jsapi/qjsvalueiterator.cpp b/src/qml/jsapi/qjsvalueiterator.cpp index 6f78f71f48..968864fbc6 100644 --- a/src/qml/jsapi/qjsvalueiterator.cpp +++ b/src/qml/jsapi/qjsvalueiterator.cpp @@ -195,7 +195,7 @@ QJSValue QJSValueIterator::value() const if (!d_ptr->currentName && d_ptr->currentIndex == UINT_MAX) return QJSValue(); - QV4::ScopedValue v(scope, obj->getValue(obj, &d_ptr->currentProperty, d_ptr->currentAttributes)); + QV4::ScopedValue v(scope, obj->getValue(*obj, &d_ptr->currentProperty, d_ptr->currentAttributes)); if (scope.hasException()) { engine->catchException(); return QJSValue(); diff --git a/src/qml/jsruntime/qv4argumentsobject.cpp b/src/qml/jsruntime/qv4argumentsobject.cpp index 5e002446ed..f48ab9e39d 100644 --- a/src/qml/jsruntime/qv4argumentsobject.cpp +++ b/src/qml/jsruntime/qv4argumentsobject.cpp @@ -160,7 +160,7 @@ ReturnedValue ArgumentsObject::getIndexed(Managed *m, uint index, bool *hasPrope return Encode::undefined(); } -void ArgumentsObject::putIndexed(Managed *m, uint index, const ValueRef value) +void ArgumentsObject::putIndexed(Managed *m, uint index, const Value &value) { ArgumentsObject *args = static_cast(m); if (!args->fullyCreated() && index >= static_cast(args->context()->callData->argc)) diff --git a/src/qml/jsruntime/qv4argumentsobject_p.h b/src/qml/jsruntime/qv4argumentsobject_p.h index ca7fdffa6c..970fa03d2a 100644 --- a/src/qml/jsruntime/qv4argumentsobject_p.h +++ b/src/qml/jsruntime/qv4argumentsobject_p.h @@ -112,7 +112,7 @@ struct ArgumentsObject: Object { bool defineOwnProperty(ExecutionEngine *engine, uint index, const Property *desc, PropertyAttributes attrs); static ReturnedValue getIndexed(Managed *m, uint index, bool *hasProperty); - static void putIndexed(Managed *m, uint index, const ValueRef value); + static void putIndexed(Managed *m, uint index, const Value &value); static bool deleteIndexedProperty(Managed *m, uint index); static PropertyAttributes queryIndexed(const Managed *m, uint index); static void markObjects(Heap::Base *that, ExecutionEngine *e); diff --git a/src/qml/jsruntime/qv4arraydata.cpp b/src/qml/jsruntime/qv4arraydata.cpp index 8f1fe1bbe6..3157a41d21 100644 --- a/src/qml/jsruntime/qv4arraydata.cpp +++ b/src/qml/jsruntime/qv4arraydata.cpp @@ -229,7 +229,7 @@ ReturnedValue SimpleArrayData::get(const Heap::ArrayData *d, uint index) return dd->data(index).asReturnedValue(); } -bool SimpleArrayData::put(Object *o, uint index, ValueRef value) +bool SimpleArrayData::put(Object *o, uint index, const Value &value) { Heap::SimpleArrayData *dd = static_cast(o->d()->arrayData); Q_ASSERT(index >= dd->len || !dd->attrs || !dd->attrs[index].isAccessor()); @@ -317,7 +317,7 @@ uint SimpleArrayData::length(const Heap::ArrayData *d) return d->len; } -bool SimpleArrayData::putArray(Object *o, uint index, Value *values, uint n) +bool SimpleArrayData::putArray(Object *o, uint index, const Value *values, uint n) { Heap::SimpleArrayData *dd = static_cast(o->d()->arrayData); if (index + n > dd->alloc) { @@ -414,9 +414,9 @@ ReturnedValue SparseArrayData::get(const Heap::ArrayData *d, uint index) return s->arrayData[index].asReturnedValue(); } -bool SparseArrayData::put(Object *o, uint index, ValueRef value) +bool SparseArrayData::put(Object *o, uint index, const Value &value) { - if (value->isEmpty()) + if (value.isEmpty()) return true; Heap::SparseArrayData *s = static_cast(o->d()->arrayData); @@ -546,7 +546,7 @@ uint SparseArrayData::length(const Heap::ArrayData *d) return n ? n->key() + 1 : 0; } -bool SparseArrayData::putArray(Object *o, uint index, Value *values, uint n) +bool SparseArrayData::putArray(Object *o, uint index, const Value *values, uint n) { for (uint i = 0; i < n; ++i) put(o, index + i, values[i]); @@ -636,7 +636,7 @@ Property *ArrayData::insert(Object *o, uint index, bool isAccessor) class ArrayElementLessThan { public: - inline ArrayElementLessThan(ExecutionEngine *engine, Object *thisObject, const ValueRef comparefn) + inline ArrayElementLessThan(ExecutionEngine *engine, Object *thisObject, const Value &comparefn) : m_engine(engine), thisObject(thisObject), m_comparefn(comparefn) {} bool operator()(Value v1, Value v2) const; @@ -644,7 +644,7 @@ public: private: ExecutionEngine *m_engine; Object *thisObject; - const ValueRef m_comparefn; + const Value &m_comparefn; }; @@ -727,7 +727,7 @@ top: } -void ArrayData::sort(ExecutionEngine *engine, Object *thisObject, const ValueRef comparefn, uint len) +void ArrayData::sort(ExecutionEngine *engine, Object *thisObject, const Value &comparefn, uint len) { if (!len) return; @@ -738,7 +738,7 @@ void ArrayData::sort(ExecutionEngine *engine, Object *thisObject, const ValueRef if (!arrayData || !arrayData->length()) return; - if (!(comparefn->isUndefined() || comparefn->asObject())) { + if (!(comparefn.isUndefined() || comparefn.asObject())) { engine->throwTypeError(); return; } diff --git a/src/qml/jsruntime/qv4arraydata_p.h b/src/qml/jsruntime/qv4arraydata_p.h index 76451480c3..5ae3883647 100644 --- a/src/qml/jsruntime/qv4arraydata_p.h +++ b/src/qml/jsruntime/qv4arraydata_p.h @@ -61,8 +61,8 @@ struct ArrayVTable uint type; Heap::ArrayData *(*reallocate)(Object *o, uint n, bool enforceAttributes); ReturnedValue (*get)(const Heap::ArrayData *d, uint index); - bool (*put)(Object *o, uint index, ValueRef value); - bool (*putArray)(Object *o, uint index, Value *values, uint n); + bool (*put)(Object *o, uint index, const Value &value); + bool (*putArray)(Object *o, uint index, const Value *values, uint n); bool (*del)(Object *o, uint index); void (*setAttribute)(Object *o, uint index, PropertyAttributes attrs); void (*push_front)(Object *o, Value *values, uint n); @@ -203,7 +203,7 @@ struct Q_QML_EXPORT ArrayData : public Managed static void ensureAttributes(Object *o); static void realloc(Object *o, Type newType, uint alloc, bool enforceAttributes); - static void sort(ExecutionEngine *engine, Object *thisObject, const ValueRef comparefn, uint dataLen); + static void sort(ExecutionEngine *engine, Object *thisObject, const Value &comparefn, uint dataLen); static uint append(Object *obj, ArrayObject *otherObj, uint n); static Property *insert(Object *o, uint index, bool isAccessor = false); }; @@ -224,8 +224,8 @@ struct Q_QML_EXPORT SimpleArrayData : public ArrayData static void markObjects(Heap::Base *d, ExecutionEngine *e); static ReturnedValue get(const Heap::ArrayData *d, uint index); - static bool put(Object *o, uint index, ValueRef value); - static bool putArray(Object *o, uint index, Value *values, uint n); + static bool put(Object *o, uint index, const Value &value); + static bool putArray(Object *o, uint index, const Value *values, uint n); static bool del(Object *o, uint index); static void setAttribute(Object *o, uint index, PropertyAttributes attrs); static void push_front(Object *o, Value *values, uint n); @@ -253,8 +253,8 @@ struct Q_QML_EXPORT SparseArrayData : public ArrayData static Heap::ArrayData *reallocate(Object *o, uint n, bool enforceAttributes); static ReturnedValue get(const Heap::ArrayData *d, uint index); - static bool put(Object *o, uint index, ValueRef value); - static bool putArray(Object *o, uint index, Value *values, uint n); + static bool put(Object *o, uint index, const Value &value); + static bool putArray(Object *o, uint index, const Value *values, uint n); static bool del(Object *o, uint index); static void setAttribute(Object *o, uint index, PropertyAttributes attrs); static void push_front(Object *o, Value *values, uint n); diff --git a/src/qml/jsruntime/qv4arrayobject.cpp b/src/qml/jsruntime/qv4arrayobject.cpp index 6c677e856f..d3c16bc2c0 100644 --- a/src/qml/jsruntime/qv4arrayobject.cpp +++ b/src/qml/jsruntime/qv4arrayobject.cpp @@ -143,9 +143,8 @@ ReturnedValue ArrayPrototype::method_concat(CallContext *ctx) ScopedObject thisObject(scope, ctx->d()->callData->thisObject.toObject(scope.engine)); if (!thisObject) return Encode::undefined(); - ScopedArrayObject instance(scope, thisObject); - if (instance) { - result->copyArrayData(instance); + if (thisObject->isArrayObject()) { + result->copyArrayData(thisObject); } else { result->arraySet(0, thisObject); } diff --git a/src/qml/jsruntime/qv4context.cpp b/src/qml/jsruntime/qv4context.cpp index 29f4278879..3db957c9bb 100644 --- a/src/qml/jsruntime/qv4context.cpp +++ b/src/qml/jsruntime/qv4context.cpp @@ -87,7 +87,7 @@ Heap::WithContext *ExecutionContext::newWithContext(Object *with) return d()->engine->memoryManager->alloc(d()->engine, with); } -Heap::CatchContext *ExecutionContext::newCatchContext(String *exceptionVarName, const ValueRef exceptionValue) +Heap::CatchContext *ExecutionContext::newCatchContext(String *exceptionVarName, const Value &exceptionValue) { return d()->engine->memoryManager->alloc(d()->engine, exceptionVarName, exceptionValue); } @@ -146,7 +146,7 @@ Heap::WithContext::WithContext(ExecutionEngine *engine, QV4::Object *with) withObject = with ? with->d() : 0; } -Heap::CatchContext::CatchContext(ExecutionEngine *engine, QV4::String *exceptionVarName, const ValueRef exceptionValue) +Heap::CatchContext::CatchContext(ExecutionEngine *engine, QV4::String *exceptionVarName, const Value &exceptionValue) : Heap::ExecutionContext(engine, Heap::ExecutionContext::Type_CatchContext) { strictMode = parent->strictMode; @@ -282,7 +282,7 @@ void ExecutionContext::markObjects(Heap::Base *m, ExecutionEngine *engine) } } -void ExecutionContext::setProperty(String *name, const ValueRef value) +void ExecutionContext::setProperty(String *name, const Value &value) { Scope scope(this); ScopedContext ctx(scope, this); @@ -294,7 +294,7 @@ void ExecutionContext::setProperty(String *name, const ValueRef value) return; } } else if (ctx->d()->type == Heap::ExecutionContext::Type_CatchContext && static_cast(ctx->d())->exceptionVarName->isEqualTo(name)) { - static_cast(ctx->d())->exceptionValue = *value; + static_cast(ctx->d())->exceptionValue = value; return; } else { ScopedObject activation(scope, (Object *)0); @@ -304,10 +304,10 @@ void ExecutionContext::setProperty(String *name, const ValueRef value) uint index = c->function->function->internalClass->find(name); if (index < UINT_MAX) { if (index < c->function->formalParameterCount()) { - c->callData->args[c->function->formalParameterCount() - index - 1] = *value; + c->callData->args[c->function->formalParameterCount() - index - 1] = value; } else { index -= c->function->formalParameterCount(); - c->locals[index] = *value; + c->locals[index] = value; } return; } diff --git a/src/qml/jsruntime/qv4context_p.h b/src/qml/jsruntime/qv4context_p.h index 0b70677cb3..4d27b0456c 100644 --- a/src/qml/jsruntime/qv4context_p.h +++ b/src/qml/jsruntime/qv4context_p.h @@ -118,7 +118,7 @@ struct GlobalContext : ExecutionContext { }; struct CatchContext : ExecutionContext { - CatchContext(ExecutionEngine *engine, QV4::String *exceptionVarName, const ValueRef exceptionValue); + CatchContext(ExecutionEngine *engine, QV4::String *exceptionVarName, const Value &exceptionValue); StringValue exceptionVarName; Value exceptionValue; }; @@ -144,12 +144,12 @@ struct Q_QML_EXPORT ExecutionContext : public Managed Heap::CallContext *newCallContext(FunctionObject *f, CallData *callData); Heap::WithContext *newWithContext(Object *with); - Heap::CatchContext *newCatchContext(String *exceptionVarName, const ValueRef exceptionValue); + Heap::CatchContext *newCatchContext(String *exceptionVarName, const Value &exceptionValue); Heap::CallContext *newQmlContext(FunctionObject *f, Object *qml); void createMutableBinding(String *name, bool deletable); - void setProperty(String *name, const ValueRef value); + void setProperty(String *name, const Value &value); ReturnedValue getProperty(String *name); ReturnedValue getPropertyAndBase(String *name, Heap::Object **base); bool deleteProperty(String *name); diff --git a/src/qml/jsruntime/qv4dateobject_p.h b/src/qml/jsruntime/qv4dateobject_p.h index 9b0eb91109..4bb911d44e 100644 --- a/src/qml/jsruntime/qv4dateobject_p.h +++ b/src/qml/jsruntime/qv4dateobject_p.h @@ -52,7 +52,7 @@ struct DateObject : Object { value = Encode(qSNaN()); } - DateObject(QV4::ExecutionEngine *engine, const ValueRef date) + DateObject(QV4::ExecutionEngine *engine, const Value &date) : Object(engine->emptyClass, engine->datePrototype.asObject()) { value = date; @@ -74,7 +74,7 @@ struct DateObject: Object { Value date() const { return d()->value; } Value &date() { return d()->value; } - void setDate(const ValueRef date) { d()->value = date; } + void setDate(const Value &date) { d()->value = date; } QDateTime toQDateTime() const; }; diff --git a/src/qml/jsruntime/qv4debugging.cpp b/src/qml/jsruntime/qv4debugging.cpp index 01ee9585c3..46eac6eb2b 100644 --- a/src/qml/jsruntime/qv4debugging.cpp +++ b/src/qml/jsruntime/qv4debugging.cpp @@ -484,7 +484,7 @@ void Debugger::collectReturnedValue(Collector *collector) const return; Scope scope(m_engine); - ScopedObject o(scope, m_returnedValue); + ScopedObject o(scope, m_returnedValue.valueRef()); collector->collect(o); } diff --git a/src/qml/jsruntime/qv4engine.cpp b/src/qml/jsruntime/qv4engine.cpp index 366e5c7603..9dba5c2275 100644 --- a/src/qml/jsruntime/qv4engine.cpp +++ b/src/qml/jsruntime/qv4engine.cpp @@ -533,21 +533,21 @@ Heap::String *ExecutionEngine::newIdentifier(const QString &text) return identifierTable->insertString(text); } -Heap::Object *ExecutionEngine::newStringObject(const ValueRef value) +Heap::Object *ExecutionEngine::newStringObject(const Value &value) { Scope scope(this); Scoped object(scope, memoryManager->alloc(this, value)); return object->d(); } -Heap::Object *ExecutionEngine::newNumberObject(const ValueRef value) +Heap::Object *ExecutionEngine::newNumberObject(const Value &value) { Scope scope(this); Scoped object(scope, memoryManager->alloc(this, value)); return object->d(); } -Heap::Object *ExecutionEngine::newBooleanObject(const ValueRef value) +Heap::Object *ExecutionEngine::newBooleanObject(const Value &value) { Scope scope(this); ScopedObject object(scope, memoryManager->alloc(this, value)); @@ -582,7 +582,7 @@ Heap::ArrayObject *ExecutionEngine::newArrayObject(InternalClass *ic, Object *pr } -Heap::DateObject *ExecutionEngine::newDateObject(const ValueRef value) +Heap::DateObject *ExecutionEngine::newDateObject(const Value &value) { Scope scope(this); Scoped object(scope, memoryManager->alloc(this, value)); @@ -625,7 +625,7 @@ Heap::RegExpObject *ExecutionEngine::newRegExpObject(const QRegExp &re) return object->d(); } -Heap::Object *ExecutionEngine::newErrorObject(const ValueRef value) +Heap::Object *ExecutionEngine::newErrorObject(const Value &value) { Scope scope(this); ScopedObject object(scope, memoryManager->alloc(emptyClass, errorPrototype.asObject(), value)); @@ -677,7 +677,7 @@ Heap::Object *ExecutionEngine::newRangeErrorObject(const QString &message) return o->d(); } -Heap::Object *ExecutionEngine::newURIErrorObject(const ValueRef message) +Heap::Object *ExecutionEngine::newURIErrorObject(const Value &message) { Scope scope(this); ScopedObject o(scope, memoryManager->alloc(this, message)); @@ -985,7 +985,7 @@ QmlExtensions *ExecutionEngine::qmlExtensions() return m_qmlExtensions; } -ReturnedValue ExecutionEngine::throwError(const ValueRef value) +ReturnedValue ExecutionEngine::throwError(const Value &value) { // we can get in here with an exception already set, as the runtime // doesn't check after every operation that can throw. @@ -1058,10 +1058,10 @@ ReturnedValue ExecutionEngine::throwTypeError(const QString &message) return throwError(error); } -ReturnedValue ExecutionEngine::throwReferenceError(const ValueRef value) +ReturnedValue ExecutionEngine::throwReferenceError(const Value &value) { Scope scope(this); - ScopedString s(scope, value->toString(this)); + ScopedString s(scope, value.toString(this)); QString msg = s->toQString() + QStringLiteral(" is not defined"); ScopedObject error(scope, newReferenceErrorObject(msg)); return throwError(error); @@ -1082,16 +1082,16 @@ ReturnedValue ExecutionEngine::throwRangeError(const QString &message) return throwError(error); } -ReturnedValue ExecutionEngine::throwRangeError(const ValueRef value) +ReturnedValue ExecutionEngine::throwRangeError(const Value &value) { Scope scope(this); - ScopedString s(scope, value->toString(this)); + ScopedString s(scope, value.toString(this)); QString msg = s->toQString() + QStringLiteral(" out of range"); ScopedObject error(scope, newRangeErrorObject(msg)); return throwError(error); } -ReturnedValue ExecutionEngine::throwURIError(const ValueRef msg) +ReturnedValue ExecutionEngine::throwURIError(const Value &msg) { Scope scope(this); ScopedObject error(scope, newURIErrorObject(msg)); @@ -1148,10 +1148,10 @@ bool ExecutionEngine::recheckCStackLimits() // Variant conversion code typedef QSet V4ObjectSet; -static QVariant toVariant(QV4::ExecutionEngine *e, const QV4::ValueRef value, int typeHint, bool createJSValueForObjects, V4ObjectSet *visitedObjects); -static QObject *qtObjectFromJS(QV4::ExecutionEngine *engine, const QV4::ValueRef value); +static QVariant toVariant(QV4::ExecutionEngine *e, const QV4::Value &value, int typeHint, bool createJSValueForObjects, V4ObjectSet *visitedObjects); +static QObject *qtObjectFromJS(QV4::ExecutionEngine *engine, const QV4::Value &value); static QVariant objectToVariant(QV4::ExecutionEngine *e, QV4::Object *o, V4ObjectSet *visitedObjects = 0); -static bool convertToNativeQObject(QV4::ExecutionEngine *e, const QV4::ValueRef value, +static bool convertToNativeQObject(QV4::ExecutionEngine *e, const QV4::Value &value, const QByteArray &targetType, void **result); static QV4::ReturnedValue variantListToJS(QV4::ExecutionEngine *v4, const QVariantList &lst); @@ -1162,22 +1162,22 @@ static QV4::ReturnedValue variantToJS(QV4::ExecutionEngine *v4, const QVariant & } -QVariant ExecutionEngine::toVariant(const ValueRef value, int typeHint, bool createJSValueForObjects) +QVariant ExecutionEngine::toVariant(const Value &value, int typeHint, bool createJSValueForObjects) { return ::toVariant(this, value, typeHint, createJSValueForObjects, 0); } -static QVariant toVariant(QV4::ExecutionEngine *e, const QV4::ValueRef value, int typeHint, bool createJSValueForObjects, V4ObjectSet *visitedObjects) +static QVariant toVariant(QV4::ExecutionEngine *e, const QV4::Value &value, int typeHint, bool createJSValueForObjects, V4ObjectSet *visitedObjects) { - Q_ASSERT (!value->isEmpty()); + Q_ASSERT (!value.isEmpty()); QV4::Scope scope(e); - if (QV4::VariantObject *v = value->as()) + if (QV4::VariantObject *v = value.as()) return v->d()->data; if (typeHint == QVariant::Bool) - return QVariant(value->toBoolean()); + return QVariant(value.toBoolean()); if (typeHint == QMetaType::QJsonValue) return QVariant::fromValue(QV4::JsonObject::toJsonValue(value)); @@ -1185,10 +1185,10 @@ static QVariant toVariant(QV4::ExecutionEngine *e, const QV4::ValueRef value, in if (typeHint == qMetaTypeId()) return QVariant::fromValue(QJSValue(e, value.asReturnedValue())); - if (value->asObject()) { + if (value.asObject()) { QV4::ScopedObject object(scope, value); if (typeHint == QMetaType::QJsonObject - && !value->asArrayObject() && !value->asFunctionObject()) { + && !value.asArrayObject() && !value.asFunctionObject()) { return QVariant::fromValue(QV4::JsonObject::toJsonObject(object)); } else if (QV4::QObjectWrapper *wrapper = object->as()) { return qVariantFromValue(wrapper->object()); @@ -1204,7 +1204,7 @@ static QVariant toVariant(QV4::ExecutionEngine *e, const QV4::ValueRef value, in return QV4::SequencePrototype::toVariant(object); } - if (value->asArrayObject()) { + if (value.asArrayObject()) { QV4::ScopedArrayObject a(scope, value); if (typeHint == qMetaTypeId >()) { QList list; @@ -1230,21 +1230,21 @@ static QVariant toVariant(QV4::ExecutionEngine *e, const QV4::ValueRef value, in return retn; } - if (value->isUndefined()) + if (value.isUndefined()) return QVariant(); - if (value->isNull()) + if (value.isNull()) return QVariant(QMetaType::VoidStar, (void *)0); - if (value->isBoolean()) - return value->booleanValue(); - if (value->isInteger()) - return value->integerValue(); - if (value->isNumber()) - return value->asDouble(); - if (value->isString()) - return value->stringValue()->toQString(); - if (QV4::QQmlLocaleData *ld = value->as()) + if (value.isBoolean()) + return value.booleanValue(); + if (value.isInteger()) + return value.integerValue(); + if (value.isNumber()) + return value.asDouble(); + if (value.isString()) + return value.stringValue()->toQString(); + if (QV4::QQmlLocaleData *ld = value.as()) return ld->d()->locale; - if (QV4::DateObject *d = value->asDateObject()) + if (QV4::DateObject *d = value.asDateObject()) return d->toQDateTime(); // NOTE: since we convert QTime to JS Date, round trip will change the variant type (to QDateTime)! @@ -1607,77 +1607,77 @@ QV4::ReturnedValue ExecutionEngine::metaTypeToJS(int type, const void *data) // Converts a JS value to a meta-type. // data must point to a place that can store a value of the given type. // Returns true if conversion succeeded, false otherwise. -bool ExecutionEngine::metaTypeFromJS(const QV4::ValueRef value, int type, void *data) +bool ExecutionEngine::metaTypeFromJS(const QV4::Value &value, int type, void *data) { QV4::Scope scope(this); // check if it's one of the types we know switch (QMetaType::Type(type)) { case QMetaType::Bool: - *reinterpret_cast(data) = value->toBoolean(); + *reinterpret_cast(data) = value.toBoolean(); return true; case QMetaType::Int: - *reinterpret_cast(data) = value->toInt32(); + *reinterpret_cast(data) = value.toInt32(); return true; case QMetaType::UInt: - *reinterpret_cast(data) = value->toUInt32(); + *reinterpret_cast(data) = value.toUInt32(); return true; case QMetaType::LongLong: - *reinterpret_cast(data) = qlonglong(value->toInteger()); + *reinterpret_cast(data) = qlonglong(value.toInteger()); return true; case QMetaType::ULongLong: - *reinterpret_cast(data) = qulonglong(value->toInteger()); + *reinterpret_cast(data) = qulonglong(value.toInteger()); return true; case QMetaType::Double: - *reinterpret_cast(data) = value->toNumber(); + *reinterpret_cast(data) = value.toNumber(); return true; case QMetaType::QString: - if (value->isUndefined() || value->isNull()) + if (value.isUndefined() || value.isNull()) *reinterpret_cast(data) = QString(); else - *reinterpret_cast(data) = value->toQString(); + *reinterpret_cast(data) = value.toQString(); return true; case QMetaType::Float: - *reinterpret_cast(data) = value->toNumber(); + *reinterpret_cast(data) = value.toNumber(); return true; case QMetaType::Short: - *reinterpret_cast(data) = short(value->toInt32()); + *reinterpret_cast(data) = short(value.toInt32()); return true; case QMetaType::UShort: - *reinterpret_cast(data) = value->toUInt16(); + *reinterpret_cast(data) = value.toUInt16(); return true; case QMetaType::Char: - *reinterpret_cast(data) = char(value->toInt32()); + *reinterpret_cast(data) = char(value.toInt32()); return true; case QMetaType::UChar: - *reinterpret_cast(data) = (unsigned char)(value->toInt32()); + *reinterpret_cast(data) = (unsigned char)(value.toInt32()); return true; case QMetaType::QChar: - if (value->isString()) { - QString str = value->stringValue()->toQString(); + if (value.isString()) { + QString str = value.stringValue()->toQString(); *reinterpret_cast(data) = str.isEmpty() ? QChar() : str.at(0); } else { - *reinterpret_cast(data) = QChar(ushort(value->toUInt16())); + *reinterpret_cast(data) = QChar(ushort(value.toUInt16())); } return true; case QMetaType::QDateTime: - if (QV4::DateObject *d = value->asDateObject()) { + if (QV4::DateObject *d = value.asDateObject()) { *reinterpret_cast(data) = d->toQDateTime(); return true; } break; case QMetaType::QDate: - if (QV4::DateObject *d = value->asDateObject()) { + if (QV4::DateObject *d = value.asDateObject()) { *reinterpret_cast(data) = d->toQDateTime().date(); return true; } break; case QMetaType::QRegExp: - if (QV4::RegExpObject *r = value->as()) { + if (QV4::RegExpObject *r = value.as()) { *reinterpret_cast(data) = r->toQRegExp(); return true; } break; case QMetaType::QObjectStar: { - QV4::QObjectWrapper *qobjectWrapper = value->as(); - if (qobjectWrapper || value->isNull()) { + QV4::QObjectWrapper *qobjectWrapper = value.as(); + if (qobjectWrapper || value.isNull()) { *reinterpret_cast(data) = qtObjectFromJS(scope.engine, value); return true; } break; @@ -1761,16 +1761,16 @@ bool ExecutionEngine::metaTypeFromJS(const QV4::ValueRef value, int type, void * QByteArray name = QMetaType::typeName(type); if (convertToNativeQObject(this, value, name, reinterpret_cast(data))) return true; - if (value->as() && name.endsWith('*')) { + if (value.as() && name.endsWith('*')) { int valueType = QMetaType::type(name.left(name.size()-1)); - QVariant &var = value->as()->d()->data; + QVariant &var = value.as()->d()->data; if (valueType == var.userType()) { // We have T t, T* is requested, so return &t. *reinterpret_cast(data) = var.data(); return true; - } else if (value->isObject()) { + } else if (value.isObject()) { // Look in the prototype chain. - QV4::ScopedObject proto(scope, value->objectValue()->prototype()); + QV4::ScopedObject proto(scope, value.objectValue()->prototype()); while (proto) { bool canCast = false; if (QV4::VariantObject *vo = proto->as()) { @@ -1794,7 +1794,7 @@ bool ExecutionEngine::metaTypeFromJS(const QV4::ValueRef value, int type, void * proto = proto->prototype(); } } - } else if (value->isNull() && name.endsWith('*')) { + } else if (value.isNull() && name.endsWith('*')) { *reinterpret_cast(data) = 0; return true; } else if (type == qMetaTypeId()) { @@ -1805,7 +1805,7 @@ bool ExecutionEngine::metaTypeFromJS(const QV4::ValueRef value, int type, void * return false; } -static bool convertToNativeQObject(QV4::ExecutionEngine *e, const QV4::ValueRef value, const QByteArray &targetType, void **result) +static bool convertToNativeQObject(QV4::ExecutionEngine *e, const Value &value, const QByteArray &targetType, void **result) { if (!targetType.endsWith('*')) return false; @@ -1820,9 +1820,9 @@ static bool convertToNativeQObject(QV4::ExecutionEngine *e, const QV4::ValueRef return false; } -static QObject *qtObjectFromJS(QV4::ExecutionEngine *engine, const QV4::ValueRef value) +static QObject *qtObjectFromJS(QV4::ExecutionEngine *engine, const Value &value) { - if (!value->isObject()) + if (!value.isObject()) return 0; QV4::Scope scope(engine); diff --git a/src/qml/jsruntime/qv4engine_p.h b/src/qml/jsruntime/qv4engine_p.h index 9ccebf6a8d..e482aeffa9 100644 --- a/src/qml/jsruntime/qv4engine_p.h +++ b/src/qml/jsruntime/qv4engine_p.h @@ -260,29 +260,29 @@ public: Heap::String *newString(const QString &s = QString()); Heap::String *newIdentifier(const QString &text); - Heap::Object *newStringObject(const ValueRef value); - Heap::Object *newNumberObject(const ValueRef value); - Heap::Object *newBooleanObject(const ValueRef value); + Heap::Object *newStringObject(const Value &value); + Heap::Object *newNumberObject(const Value &value); + Heap::Object *newBooleanObject(const Value &value); Heap::ArrayObject *newArrayObject(int count = 0); Heap::ArrayObject *newArrayObject(const QStringList &list); Heap::ArrayObject *newArrayObject(InternalClass *ic, Object *prototype); - Heap::DateObject *newDateObject(const ValueRef value); + Heap::DateObject *newDateObject(const Value &value); Heap::DateObject *newDateObject(const QDateTime &dt); Heap::RegExpObject *newRegExpObject(const QString &pattern, int flags); Heap::RegExpObject *newRegExpObject(RegExp *re, bool global); Heap::RegExpObject *newRegExpObject(const QRegExp &re); - Heap::Object *newErrorObject(const ValueRef value); + Heap::Object *newErrorObject(const Value &value); Heap::Object *newSyntaxErrorObject(const QString &message, const QString &fileName, int line, int column); Heap::Object *newSyntaxErrorObject(const QString &message); Heap::Object *newReferenceErrorObject(const QString &message); Heap::Object *newReferenceErrorObject(const QString &message, const QString &fileName, int lineNumber, int columnNumber); Heap::Object *newTypeErrorObject(const QString &message); Heap::Object *newRangeErrorObject(const QString &message); - Heap::Object *newURIErrorObject(const ValueRef message); + Heap::Object *newURIErrorObject(const Value &message); Heap::Object *newVariantObject(const QVariant &v); @@ -310,7 +310,7 @@ public: Value exceptionValue; StackTrace exceptionStackTrace; - ReturnedValue throwError(const ValueRef value); + ReturnedValue throwError(const Value &value); ReturnedValue catchException(StackTrace *trace = 0); ReturnedValue throwError(const QString &message); @@ -318,23 +318,23 @@ public: ReturnedValue throwSyntaxError(const QString &message, const QString &fileName, int lineNumber, int column); ReturnedValue throwTypeError(); ReturnedValue throwTypeError(const QString &message); - ReturnedValue throwReferenceError(const ValueRef value); + ReturnedValue throwReferenceError(const Value &value); ReturnedValue throwReferenceError(const QString &value, const QString &fileName, int lineNumber, int column); - ReturnedValue throwRangeError(const ValueRef value); + ReturnedValue throwRangeError(const Value &value); ReturnedValue throwRangeError(const QString &message); - ReturnedValue throwURIError(const ValueRef msg); + ReturnedValue throwURIError(const Value &msg); ReturnedValue throwUnimplemented(const QString &message); // Use only inside catch(...) -- will re-throw if no JS exception QQmlError catchExceptionAsQmlError(); // variant conversions - QVariant toVariant(const QV4::ValueRef value, int typeHint, bool createJSValueForObjects = true); + QVariant toVariant(const QV4::Value &value, int typeHint, bool createJSValueForObjects = true); QV4::ReturnedValue fromVariant(const QVariant &); QVariantMap variantMapFromJS(QV4::Object *o); - bool metaTypeFromJS(const QV4::ValueRef value, int type, void *data); + bool metaTypeFromJS(const Value &value, int type, void *data); QV4::ReturnedValue metaTypeToJS(int type, const void *data); private: diff --git a/src/qml/jsruntime/qv4errorobject.cpp b/src/qml/jsruntime/qv4errorobject.cpp index 30c7fe188a..bdbec790ca 100644 --- a/src/qml/jsruntime/qv4errorobject.cpp +++ b/src/qml/jsruntime/qv4errorobject.cpp @@ -73,7 +73,7 @@ Heap::ErrorObject::ErrorObject(InternalClass *ic, QV4::Object *prototype) e->defineDefaultProperty(QStringLiteral("name"), s); } -Heap::ErrorObject::ErrorObject(InternalClass *ic, QV4::Object *prototype, const ValueRef message, ErrorType t) +Heap::ErrorObject::ErrorObject(InternalClass *ic, QV4::Object *prototype, const Value &message, ErrorType t) : Heap::Object(ic, prototype) { errorType = t; @@ -83,7 +83,7 @@ Heap::ErrorObject::ErrorObject(InternalClass *ic, QV4::Object *prototype, const e->defineAccessorProperty(QStringLiteral("stack"), QV4::ErrorObject::method_get_stack, 0); - if (!message->isUndefined()) + if (!message.isUndefined()) e->defineDefaultProperty(QStringLiteral("message"), message); ScopedString s(scope); e->defineDefaultProperty(QStringLiteral("name"), (s = scope.engine->newString(e->className()))); @@ -182,7 +182,7 @@ DEFINE_OBJECT_VTABLE(ErrorObject); DEFINE_OBJECT_VTABLE(SyntaxErrorObject); -Heap::SyntaxErrorObject::SyntaxErrorObject(ExecutionEngine *engine, const ValueRef msg) +Heap::SyntaxErrorObject::SyntaxErrorObject(ExecutionEngine *engine, const Value &msg) : Heap::ErrorObject(engine->emptyClass, engine->syntaxErrorPrototype.asObject(), msg, SyntaxError) { } @@ -192,12 +192,12 @@ Heap::SyntaxErrorObject::SyntaxErrorObject(ExecutionEngine *engine, const QStrin { } -Heap::EvalErrorObject::EvalErrorObject(ExecutionEngine *engine, const ValueRef message) +Heap::EvalErrorObject::EvalErrorObject(ExecutionEngine *engine, const Value &message) : Heap::ErrorObject(engine->emptyClass, engine->evalErrorPrototype.asObject(), message, EvalError) { } -Heap::RangeErrorObject::RangeErrorObject(ExecutionEngine *engine, const ValueRef message) +Heap::RangeErrorObject::RangeErrorObject(ExecutionEngine *engine, const Value &message) : Heap::ErrorObject(engine->emptyClass, engine->rangeErrorPrototype.asObject(), message, RangeError) { } @@ -207,7 +207,7 @@ Heap::RangeErrorObject::RangeErrorObject(ExecutionEngine *engine, const QString { } -Heap::ReferenceErrorObject::ReferenceErrorObject(ExecutionEngine *engine, const ValueRef message) +Heap::ReferenceErrorObject::ReferenceErrorObject(ExecutionEngine *engine, const Value &message) : Heap::ErrorObject(engine->emptyClass, engine->referenceErrorPrototype.asObject(), message, ReferenceError) { } @@ -222,7 +222,7 @@ Heap::ReferenceErrorObject::ReferenceErrorObject(ExecutionEngine *engine, const { } -Heap::TypeErrorObject::TypeErrorObject(ExecutionEngine *engine, const ValueRef message) +Heap::TypeErrorObject::TypeErrorObject(ExecutionEngine *engine, const Value &message) : Heap::ErrorObject(engine->emptyClass, engine->typeErrorPrototype.asObject(), message, TypeError) { } @@ -232,7 +232,7 @@ Heap::TypeErrorObject::TypeErrorObject(ExecutionEngine *engine, const QString &m { } -Heap::URIErrorObject::URIErrorObject(ExecutionEngine *engine, const ValueRef message) +Heap::URIErrorObject::URIErrorObject(ExecutionEngine *engine, const Value &message) : Heap::ErrorObject(engine->emptyClass, engine->uRIErrorPrototype.asObject(), message, URIError) { } diff --git a/src/qml/jsruntime/qv4errorobject_p.h b/src/qml/jsruntime/qv4errorobject_p.h index 54762d8172..c583ea0372 100644 --- a/src/qml/jsruntime/qv4errorobject_p.h +++ b/src/qml/jsruntime/qv4errorobject_p.h @@ -56,7 +56,7 @@ struct ErrorObject : Object { }; ErrorObject(InternalClass *ic, QV4::Object *prototype); - ErrorObject(InternalClass *ic, QV4::Object *prototype, const ValueRef message, ErrorType t = Error); + ErrorObject(InternalClass *ic, QV4::Object *prototype, const Value &message, ErrorType t = Error); ErrorObject(InternalClass *ic, QV4::Object *prototype, const QString &message, ErrorType t = Error); ErrorObject(InternalClass *ic, QV4::Object *prototype, const QString &message, const QString &fileName, int line, int column, ErrorType t = Error); @@ -66,32 +66,32 @@ struct ErrorObject : Object { }; struct EvalErrorObject : ErrorObject { - EvalErrorObject(ExecutionEngine *engine, const ValueRef message); + EvalErrorObject(ExecutionEngine *engine, const Value &message); }; struct RangeErrorObject : ErrorObject { - RangeErrorObject(ExecutionEngine *engine, const ValueRef message); + RangeErrorObject(ExecutionEngine *engine, const Value &message); RangeErrorObject(ExecutionEngine *engine, const QString &msg); }; struct ReferenceErrorObject : ErrorObject { - ReferenceErrorObject(ExecutionEngine *engine, const ValueRef message); + ReferenceErrorObject(ExecutionEngine *engine, const Value &message); ReferenceErrorObject(ExecutionEngine *engine, const QString &msg); ReferenceErrorObject(ExecutionEngine *engine, const QString &msg, const QString &fileName, int lineNumber, int columnNumber); }; struct SyntaxErrorObject : ErrorObject { - SyntaxErrorObject(ExecutionEngine *engine, const ValueRef message); + SyntaxErrorObject(ExecutionEngine *engine, const Value &message); SyntaxErrorObject(ExecutionEngine *engine, const QString &msg, const QString &fileName, int lineNumber, int columnNumber); }; struct TypeErrorObject : ErrorObject { - TypeErrorObject(ExecutionEngine *engine, const ValueRef message); + TypeErrorObject(ExecutionEngine *engine, const Value &message); TypeErrorObject(ExecutionEngine *engine, const QString &msg); }; struct URIErrorObject : ErrorObject { - URIErrorObject(ExecutionEngine *engine, const ValueRef message); + URIErrorObject(ExecutionEngine *engine, const Value &message); }; struct ErrorCtor : Heap::FunctionObject { diff --git a/src/qml/jsruntime/qv4functionobject.cpp b/src/qml/jsruntime/qv4functionobject.cpp index 2678186a6a..f49d53f6f6 100644 --- a/src/qml/jsruntime/qv4functionobject.cpp +++ b/src/qml/jsruntime/qv4functionobject.cpp @@ -620,7 +620,7 @@ DEFINE_OBJECT_VTABLE(IndexedBuiltinFunction); DEFINE_OBJECT_VTABLE(BoundFunction); Heap::BoundFunction::BoundFunction(QV4::ExecutionContext *scope, QV4::FunctionObject *target, - const ValueRef boundThis, QV4::MemberData *boundArgs) + const Value &boundThis, QV4::MemberData *boundArgs) : Heap::FunctionObject(scope, QStringLiteral("__bound function__")) , target(target->d()) , boundArgs(boundArgs ? boundArgs->d() : 0) diff --git a/src/qml/jsruntime/qv4functionobject_p.h b/src/qml/jsruntime/qv4functionobject_p.h index b971ca6568..844b622837 100644 --- a/src/qml/jsruntime/qv4functionobject_p.h +++ b/src/qml/jsruntime/qv4functionobject_p.h @@ -95,7 +95,7 @@ struct ScriptFunction : SimpleScriptFunction { }; struct BoundFunction : FunctionObject { - BoundFunction(QV4::ExecutionContext *scope, QV4::FunctionObject *target, const ValueRef boundThis, QV4::MemberData *boundArgs); + BoundFunction(QV4::ExecutionContext *scope, QV4::FunctionObject *target, const Value &boundThis, QV4::MemberData *boundArgs); FunctionObject *target; Value boundThis; MemberData *boundArgs; @@ -221,7 +221,7 @@ struct ScriptFunction: SimpleScriptFunction { struct BoundFunction: FunctionObject { V4_OBJECT2(BoundFunction, FunctionObject) - static Heap::BoundFunction *create(ExecutionContext *scope, FunctionObject *target, const ValueRef boundThis, QV4::MemberData *boundArgs) + static Heap::BoundFunction *create(ExecutionContext *scope, FunctionObject *target, const Value &boundThis, QV4::MemberData *boundArgs) { return scope->engine()->memoryManager->alloc(scope, target, boundThis, boundArgs); } diff --git a/src/qml/jsruntime/qv4include.cpp b/src/qml/jsruntime/qv4include.cpp index 56e7717c26..57aea74313 100644 --- a/src/qml/jsruntime/qv4include.cpp +++ b/src/qml/jsruntime/qv4include.cpp @@ -50,11 +50,11 @@ QT_BEGIN_NAMESPACE QV4Include::QV4Include(const QUrl &url, QV4::ExecutionEngine *engine, QQmlContextData *context, - const QV4::ValueRef qmlglobal, const QV4::ValueRef callback) + const QV4::Value &qmlglobal, const QV4::Value &callback) : v4(engine), m_network(0), m_reply(0), m_url(url), m_redirectCount(0), m_context(context) { m_qmlglobal.set(engine, qmlglobal); - if (callback->asFunctionObject()) + if (callback.asFunctionObject()) m_callbackFunction.set(engine, callback); m_resultObject.set(v4, resultValue(v4)); @@ -90,11 +90,11 @@ QV4::ReturnedValue QV4Include::resultValue(QV4::ExecutionEngine *v4, Status stat return o.asReturnedValue(); } -void QV4Include::callback(const QV4::ValueRef callback, const QV4::ValueRef status) +void QV4Include::callback(const QV4::Value &callback, const QV4::Value &status) { - if (!callback->isObject()) + if (!callback.isObject()) return; - QV4::ExecutionEngine *v4 = callback->asObject()->engine(); + QV4::ExecutionEngine *v4 = callback.asObject()->engine(); QV4::Scope scope(v4); QV4::ScopedFunctionObject f(scope, callback); if (!f) diff --git a/src/qml/jsruntime/qv4include_p.h b/src/qml/jsruntime/qv4include_p.h index c6b153502f..419314f40d 100644 --- a/src/qml/jsruntime/qv4include_p.h +++ b/src/qml/jsruntime/qv4include_p.h @@ -77,13 +77,13 @@ private Q_SLOTS: private: QV4Include(const QUrl &url, QV4::ExecutionEngine *engine, QQmlContextData *context, - const QV4::ValueRef qmlglobal, const QV4::ValueRef callback); + const QV4::Value &qmlglobal, const QV4::Value &callback); ~QV4Include(); QV4::ReturnedValue result(); static QV4::ReturnedValue resultValue(QV4::ExecutionEngine *v4, Status status = Loading); - static void callback(const QV4::ValueRef callback, const QV4::ValueRef status); + static void callback(const QV4::Value &callback, const QV4::Value &status); QV4::ExecutionEngine *v4; QNetworkAccessManager *m_network; diff --git a/src/qml/jsruntime/qv4jsonobject.cpp b/src/qml/jsruntime/qv4jsonobject.cpp index aa16b62716..ffeaa1b1db 100644 --- a/src/qml/jsruntime/qv4jsonobject.cpp +++ b/src/qml/jsruntime/qv4jsonobject.cpp @@ -752,8 +752,7 @@ QString Stringify::Str(const QString &key, ValueRef v) if (o) { if (!o->asFunctionObject()) { if (o->asArrayObject()) { - ScopedArrayObject a(scope, o); - return JA(a); + return JA(static_cast(o.getPointer())); } else { return JO(o); } @@ -973,29 +972,28 @@ ReturnedValue JsonObject::fromJsonValue(ExecutionEngine *engine, const QJsonValu return Encode::undefined(); } -QJsonValue JsonObject::toJsonValue(const ValueRef value, - V4ObjectSet &visitedObjects) +QJsonValue JsonObject::toJsonValue(const Value &value, V4ObjectSet &visitedObjects) { - if (value->isNumber()) - return QJsonValue(value->toNumber()); - else if (value->isBoolean()) - return QJsonValue((bool)value->booleanValue()); - else if (value->isNull()) + if (value.isNumber()) + return QJsonValue(value.toNumber()); + else if (value.isBoolean()) + return QJsonValue((bool)value.booleanValue()); + else if (value.isNull()) return QJsonValue(QJsonValue::Null); - else if (value->isUndefined()) + else if (value.isUndefined()) return QJsonValue(QJsonValue::Undefined); - else if (value->isString()) - return QJsonValue(value->toQString()); + else if (value.isString()) + return QJsonValue(value.toQString()); - Q_ASSERT(value->isObject()); - Scope scope(value->asObject()->engine()); + Q_ASSERT(value.isObject()); + Scope scope(value.asObject()->engine()); ScopedArrayObject a(scope, value); if (a) return toJsonArray(a, visitedObjects); ScopedObject o(scope, value); if (o) return toJsonObject(o, visitedObjects); - return QJsonValue(value->toQString()); + return QJsonValue(value.toQString()); } QV4::ReturnedValue JsonObject::fromJsonObject(ExecutionEngine *engine, const QJsonObject &object) diff --git a/src/qml/jsruntime/qv4jsonobject_p.h b/src/qml/jsruntime/qv4jsonobject_p.h index 32d890c488..c257c51762 100644 --- a/src/qml/jsruntime/qv4jsonobject_p.h +++ b/src/qml/jsruntime/qv4jsonobject_p.h @@ -65,7 +65,7 @@ public: static ReturnedValue fromJsonObject(ExecutionEngine *engine, const QJsonObject &object); static ReturnedValue fromJsonArray(ExecutionEngine *engine, const QJsonArray &array); - static inline QJsonValue toJsonValue(const QV4::ValueRef value) + static inline QJsonValue toJsonValue(const QV4::Value &value) { V4ObjectSet visitedObjects; return toJsonValue(value, visitedObjects); } static inline QJsonObject toJsonObject(QV4::Object *o) { V4ObjectSet visitedObjects; return toJsonObject(o, visitedObjects); } @@ -73,7 +73,7 @@ public: { V4ObjectSet visitedObjects; return toJsonArray(a, visitedObjects); } private: - static QJsonValue toJsonValue(const QV4::ValueRef value, V4ObjectSet &visitedObjects); + static QJsonValue toJsonValue(const QV4::Value &value, V4ObjectSet &visitedObjects); static QJsonObject toJsonObject(Object *o, V4ObjectSet &visitedObjects); static QJsonArray toJsonArray(ArrayObject *a, V4ObjectSet &visitedObjects); diff --git a/src/qml/jsruntime/qv4lookup.cpp b/src/qml/jsruntime/qv4lookup.cpp index c0297696db..68c7407149 100644 --- a/src/qml/jsruntime/qv4lookup.cpp +++ b/src/qml/jsruntime/qv4lookup.cpp @@ -39,7 +39,7 @@ QT_BEGIN_NAMESPACE using namespace QV4; -ReturnedValue Lookup::lookup(ValueRef thisObject, Object *o, PropertyAttributes *attrs) +ReturnedValue Lookup::lookup(const Value &thisObject, Object *o, PropertyAttributes *attrs) { ExecutionEngine *engine = o->engine(); Identifier *name = engine->currentContext()->compilationUnit->runtimeStrings[nameIndex]->identifier; @@ -105,25 +105,25 @@ ReturnedValue Lookup::lookup(Object *thisObject, PropertyAttributes *attrs) return Primitive::emptyValue().asReturnedValue(); } -ReturnedValue Lookup::indexedGetterGeneric(Lookup *l, const ValueRef object, const ValueRef index) +ReturnedValue Lookup::indexedGetterGeneric(Lookup *l, const Value &object, const Value &index) { - if (object->isObject() && index->asArrayIndex() < UINT_MAX) { + if (object.isObject() && index.asArrayIndex() < UINT_MAX) { l->indexedGetter = indexedGetterObjectInt; return indexedGetterObjectInt(l, object, index); } return indexedGetterFallback(l, object, index); } -ReturnedValue Lookup::indexedGetterFallback(Lookup *l, const ValueRef object, const ValueRef index) +ReturnedValue Lookup::indexedGetterFallback(Lookup *l, const Value &object, const Value &index) { Q_UNUSED(l); Scope scope(l->engine); - uint idx = index->asArrayIndex(); + uint idx = index.asArrayIndex(); ScopedObject o(scope, object); if (!o) { if (idx < UINT_MAX) { - if (String *str = object->asString()) { + if (String *str = object.asString()) { if (idx >= (uint)str->toQString().length()) { return Encode::undefined(); } @@ -132,8 +132,8 @@ ReturnedValue Lookup::indexedGetterFallback(Lookup *l, const ValueRef object, co } } - if (object->isNullOrUndefined()) { - QString message = QStringLiteral("Cannot read property '%1' of %2").arg(index->toQStringNoThrow()).arg(object->toQStringNoThrow()); + if (object.isNullOrUndefined()) { + QString message = QStringLiteral("Cannot read property '%1' of %2").arg(index.toQStringNoThrow()).arg(object.toQStringNoThrow()); return l->engine->throwTypeError(message); } @@ -152,7 +152,7 @@ ReturnedValue Lookup::indexedGetterFallback(Lookup *l, const ValueRef object, co return o->getIndexed(idx); } - ScopedString name(scope, index->toString(scope.engine)); + ScopedString name(scope, index.toString(scope.engine)); if (scope.hasException()) return Encode::undefined(); return o->get(name); @@ -160,13 +160,13 @@ ReturnedValue Lookup::indexedGetterFallback(Lookup *l, const ValueRef object, co } -ReturnedValue Lookup::indexedGetterObjectInt(Lookup *l, const ValueRef object, const ValueRef index) +ReturnedValue Lookup::indexedGetterObjectInt(Lookup *l, const Value &object, const Value &index) { - uint idx = index->asArrayIndex(); - if (idx == UINT_MAX || !object->isObject()) + uint idx = index.asArrayIndex(); + if (idx == UINT_MAX || !object.isObject()) return indexedGetterGeneric(l, object, index); - Object *o = object->objectValue(); + Object *o = object.objectValue(); if (o->d()->arrayData && o->d()->arrayData->type == Heap::ArrayData::Simple) { Heap::SimpleArrayData *s = static_cast(o->d()->arrayData); if (idx < s->len) @@ -177,11 +177,11 @@ ReturnedValue Lookup::indexedGetterObjectInt(Lookup *l, const ValueRef object, c return indexedGetterFallback(l, object, index); } -void Lookup::indexedSetterGeneric(Lookup *l, const ValueRef object, const ValueRef index, const ValueRef v) +void Lookup::indexedSetterGeneric(Lookup *l, const Value &object, const Value &index, const Value &v) { - if (object->isObject()) { - Object *o = object->objectValue(); - if (o->d()->arrayData && o->d()->arrayData->type == Heap::ArrayData::Simple && index->asArrayIndex() < UINT_MAX) { + if (object.isObject()) { + Object *o = object.objectValue(); + if (o->d()->arrayData && o->d()->arrayData->type == Heap::ArrayData::Simple && index.asArrayIndex() < UINT_MAX) { l->indexedSetter = indexedSetterObjectInt; indexedSetterObjectInt(l, object, index, v); return; @@ -190,14 +190,14 @@ void Lookup::indexedSetterGeneric(Lookup *l, const ValueRef object, const ValueR indexedSetterFallback(l, object, index, v); } -void Lookup::indexedSetterFallback(Lookup *l, const ValueRef object, const ValueRef index, const ValueRef value) +void Lookup::indexedSetterFallback(Lookup *l, const Value &object, const Value &index, const Value &value) { Scope scope(l->engine); - ScopedObject o(scope, object->toObject(scope.engine)); + ScopedObject o(scope, object.toObject(scope.engine)); if (scope.engine->hasException) return; - uint idx = index->asArrayIndex(); + uint idx = index.asArrayIndex(); if (idx < UINT_MAX) { if (o->d()->arrayData && o->d()->arrayData->type == Heap::ArrayData::Simple) { Heap::SimpleArrayData *s = static_cast(o->d()->arrayData); @@ -210,19 +210,19 @@ void Lookup::indexedSetterFallback(Lookup *l, const ValueRef object, const Value return; } - ScopedString name(scope, index->toString(scope.engine)); + ScopedString name(scope, index.toString(scope.engine)); o->put(name, value); } -void Lookup::indexedSetterObjectInt(Lookup *l, const ValueRef object, const ValueRef index, const ValueRef v) +void Lookup::indexedSetterObjectInt(Lookup *l, const Value &object, const Value &index, const Value &v) { - uint idx = index->asArrayIndex(); - if (idx == UINT_MAX || !object->isObject()) { + uint idx = index.asArrayIndex(); + if (idx == UINT_MAX || !object.isObject()) { indexedSetterGeneric(l, object, index, v); return; } - Object *o = object->objectValue(); + Object *o = object.objectValue(); if (o->d()->arrayData && o->d()->arrayData->type == Heap::ArrayData::Simple) { Heap::SimpleArrayData *s = static_cast(o->d()->arrayData); if (idx < s->len) { @@ -233,13 +233,13 @@ void Lookup::indexedSetterObjectInt(Lookup *l, const ValueRef object, const Valu indexedSetterFallback(l, object, index, v); } -ReturnedValue Lookup::getterGeneric(Lookup *l, ExecutionEngine *engine, const ValueRef object) +ReturnedValue Lookup::getterGeneric(Lookup *l, ExecutionEngine *engine, const Value &object) { - if (Object *o = object->asObject()) + if (Object *o = object.asObject()) return o->getLookup(l); Object *proto; - switch (object->type()) { + switch (object.type()) { case Value::Undefined_Type: case Value::Null_Type: return engine->throwTypeError(); @@ -247,7 +247,7 @@ ReturnedValue Lookup::getterGeneric(Lookup *l, ExecutionEngine *engine, const Va proto = engine->booleanPrototype.asObject(); break; case Value::Managed_Type: { - Q_ASSERT(object->isString()); + Q_ASSERT(object.isString()); proto = engine->stringPrototype.asObject(); Scope scope(engine); ScopedString name(scope, engine->currentContext()->compilationUnit->runtimeStrings[l->nameIndex]); @@ -266,7 +266,7 @@ ReturnedValue Lookup::getterGeneric(Lookup *l, ExecutionEngine *engine, const Va PropertyAttributes attrs; ReturnedValue v = l->lookup(object, proto, &attrs); if (v != Primitive::emptyValue().asReturnedValue()) { - l->type = object->type(); + l->type = object.type(); l->proto = proto; if (attrs.isData()) { if (l->level == 0) @@ -286,12 +286,12 @@ ReturnedValue Lookup::getterGeneric(Lookup *l, ExecutionEngine *engine, const Va return Encode::undefined(); } -ReturnedValue Lookup::getterTwoClasses(Lookup *l, ExecutionEngine *engine, const ValueRef object) +ReturnedValue Lookup::getterTwoClasses(Lookup *l, ExecutionEngine *engine, const Value &object) { Lookup l1 = *l; if (l1.getter == Lookup::getter0 || l1.getter == Lookup::getter1) { - if (Object *o = object->asObject()) { + if (Object *o = object.asObject()) { ReturnedValue v = o->getLookup(l); Lookup l2 = *l; @@ -322,34 +322,34 @@ ReturnedValue Lookup::getterTwoClasses(Lookup *l, ExecutionEngine *engine, const return getterFallback(l, engine, object); } -ReturnedValue Lookup::getterFallback(Lookup *l, ExecutionEngine *engine, const ValueRef object) +ReturnedValue Lookup::getterFallback(Lookup *l, ExecutionEngine *engine, const Value &object) { QV4::Scope scope(engine); - QV4::ScopedObject o(scope, object->toObject(scope.engine)); + QV4::ScopedObject o(scope, object.toObject(scope.engine)); if (!o) return Encode::undefined(); ScopedString name(scope, engine->currentContext()->compilationUnit->runtimeStrings[l->nameIndex]); return o->get(name); } -ReturnedValue Lookup::getter0(Lookup *l, ExecutionEngine *engine, const ValueRef object) +ReturnedValue Lookup::getter0(Lookup *l, ExecutionEngine *engine, const Value &object) { - if (object->isManaged()) { + if (object.isManaged()) { // we can safely cast to a QV4::Object here. If object is actually a string, // the internal class won't match - Object *o = object->objectValue(); + Object *o = object.objectValue(); if (l->classList[0] == o->internalClass()) return o->memberData()->data[l->index].asReturnedValue(); } return getterTwoClasses(l, engine, object); } -ReturnedValue Lookup::getter1(Lookup *l, ExecutionEngine *engine, const ValueRef object) +ReturnedValue Lookup::getter1(Lookup *l, ExecutionEngine *engine, const Value &object) { - if (object->isManaged()) { + if (object.isManaged()) { // we can safely cast to a QV4::Object here. If object is actually a string, // the internal class won't match - Object *o = object->objectValue(); + Object *o = object.objectValue(); if (l->classList[0] == o->internalClass() && l->classList[1] == o->prototype()->internalClass) return o->prototype()->memberData->data[l->index].asReturnedValue(); @@ -357,12 +357,12 @@ ReturnedValue Lookup::getter1(Lookup *l, ExecutionEngine *engine, const ValueRef return getterTwoClasses(l, engine, object); } -ReturnedValue Lookup::getter2(Lookup *l, ExecutionEngine *engine, const ValueRef object) +ReturnedValue Lookup::getter2(Lookup *l, ExecutionEngine *engine, const Value &object) { - if (object->isManaged()) { + if (object.isManaged()) { // we can safely cast to a QV4::Object here. If object is actually a string, // the internal class won't match - Object *o = object->objectValue(); + Object *o = object.objectValue(); if (l->classList[0] == o->internalClass()) { Heap::Object *p = o->prototype(); if (l->classList[1] == p->internalClass) { @@ -376,12 +376,12 @@ ReturnedValue Lookup::getter2(Lookup *l, ExecutionEngine *engine, const ValueRef return getterFallback(l, engine, object); } -ReturnedValue Lookup::getter0getter0(Lookup *l, ExecutionEngine *engine, const ValueRef object) +ReturnedValue Lookup::getter0getter0(Lookup *l, ExecutionEngine *engine, const Value &object) { - if (object->isManaged()) { + if (object.isManaged()) { // we can safely cast to a QV4::Object here. If object is actually a string, // the internal class won't match - Object *o = object->objectValue(); + Object *o = object.objectValue(); if (l->classList[0] == o->internalClass()) return o->memberData()->data[l->index].asReturnedValue(); if (l->classList[2] == o->internalClass()) @@ -391,12 +391,12 @@ ReturnedValue Lookup::getter0getter0(Lookup *l, ExecutionEngine *engine, const V return getterFallback(l, engine, object); } -ReturnedValue Lookup::getter0getter1(Lookup *l, ExecutionEngine *engine, const ValueRef object) +ReturnedValue Lookup::getter0getter1(Lookup *l, ExecutionEngine *engine, const Value &object) { - if (object->isManaged()) { + if (object.isManaged()) { // we can safely cast to a QV4::Object here. If object is actually a string, // the internal class won't match - Object *o = object->objectValue(); + Object *o = object.objectValue(); if (l->classList[0] == o->internalClass()) return o->memberData()->data[l->index].asReturnedValue(); if (l->classList[2] == o->internalClass() && @@ -407,12 +407,12 @@ ReturnedValue Lookup::getter0getter1(Lookup *l, ExecutionEngine *engine, const V return getterFallback(l, engine, object); } -ReturnedValue Lookup::getter1getter1(Lookup *l, ExecutionEngine *engine, const ValueRef object) +ReturnedValue Lookup::getter1getter1(Lookup *l, ExecutionEngine *engine, const Value &object) { - if (object->isManaged()) { + if (object.isManaged()) { // we can safely cast to a QV4::Object here. If object is actually a string, // the internal class won't match - Object *o = object->objectValue(); + Object *o = object.objectValue(); if (l->classList[0] == o->internalClass() && l->classList[1] == o->prototype()->internalClass) return o->prototype()->memberData->data[l->index].asReturnedValue(); @@ -426,12 +426,12 @@ ReturnedValue Lookup::getter1getter1(Lookup *l, ExecutionEngine *engine, const V } -ReturnedValue Lookup::getterAccessor0(Lookup *l, ExecutionEngine *engine, const ValueRef object) +ReturnedValue Lookup::getterAccessor0(Lookup *l, ExecutionEngine *engine, const Value &object) { - if (object->isManaged()) { + if (object.isManaged()) { // we can safely cast to a QV4::Object here. If object is actually a string, // the internal class won't match - Object *o = object->objectValue(); + Object *o = object.objectValue(); if (l->classList[0] == o->internalClass()) { Scope scope(o->engine()); ScopedFunctionObject getter(scope, o->propertyAt(l->index)->getter()); @@ -439,7 +439,7 @@ ReturnedValue Lookup::getterAccessor0(Lookup *l, ExecutionEngine *engine, const return Encode::undefined(); ScopedCallData callData(scope, 0); - callData->thisObject = *object; + callData->thisObject = object; return getter->call(callData); } } @@ -447,12 +447,12 @@ ReturnedValue Lookup::getterAccessor0(Lookup *l, ExecutionEngine *engine, const return getterFallback(l, engine, object); } -ReturnedValue Lookup::getterAccessor1(Lookup *l, ExecutionEngine *engine, const ValueRef object) +ReturnedValue Lookup::getterAccessor1(Lookup *l, ExecutionEngine *engine, const Value &object) { - if (object->isManaged()) { + if (object.isManaged()) { // we can safely cast to a QV4::Object here. If object is actually a string, // the internal class won't match - Heap::Object *o = object->objectValue()->d(); + Heap::Object *o = object.objectValue()->d(); if (l->classList[0] == o->internalClass && l->classList[1] == o->prototype->internalClass) { Scope scope(o->internalClass->engine); @@ -461,7 +461,7 @@ ReturnedValue Lookup::getterAccessor1(Lookup *l, ExecutionEngine *engine, const return Encode::undefined(); ScopedCallData callData(scope, 0); - callData->thisObject = *object; + callData->thisObject = object; return getter->call(callData); } } @@ -469,12 +469,12 @@ ReturnedValue Lookup::getterAccessor1(Lookup *l, ExecutionEngine *engine, const return getterFallback(l, engine, object); } -ReturnedValue Lookup::getterAccessor2(Lookup *l, ExecutionEngine *engine, const ValueRef object) +ReturnedValue Lookup::getterAccessor2(Lookup *l, ExecutionEngine *engine, const Value &object) { - if (object->isManaged()) { + if (object.isManaged()) { // we can safely cast to a QV4::Object here. If object is actually a string, // the internal class won't match - Heap::Object *o = object->objectValue()->d(); + Heap::Object *o = object.objectValue()->d(); if (l->classList[0] == o->internalClass) { o = o->prototype; if (l->classList[1] == o->internalClass) { @@ -486,7 +486,7 @@ ReturnedValue Lookup::getterAccessor2(Lookup *l, ExecutionEngine *engine, const return Encode::undefined(); ScopedCallData callData(scope, 0); - callData->thisObject = *object; + callData->thisObject = object; return getter->call(callData); } } @@ -496,9 +496,9 @@ ReturnedValue Lookup::getterAccessor2(Lookup *l, ExecutionEngine *engine, const return getterFallback(l, engine, object); } -ReturnedValue Lookup::primitiveGetter0(Lookup *l, ExecutionEngine *engine, const ValueRef object) +ReturnedValue Lookup::primitiveGetter0(Lookup *l, ExecutionEngine *engine, const Value &object) { - if (object->type() == l->type) { + if (object.type() == l->type) { Object *o = l->proto; if (l->classList[0] == o->internalClass()) return o->memberData()->data[l->index].asReturnedValue(); @@ -507,9 +507,9 @@ ReturnedValue Lookup::primitiveGetter0(Lookup *l, ExecutionEngine *engine, const return getterGeneric(l, engine, object); } -ReturnedValue Lookup::primitiveGetter1(Lookup *l, ExecutionEngine *engine, const ValueRef object) +ReturnedValue Lookup::primitiveGetter1(Lookup *l, ExecutionEngine *engine, const Value &object) { - if (object->type() == l->type) { + if (object.type() == l->type) { Object *o = l->proto; if (l->classList[0] == o->internalClass() && l->classList[1] == o->prototype()->internalClass) @@ -519,9 +519,9 @@ ReturnedValue Lookup::primitiveGetter1(Lookup *l, ExecutionEngine *engine, const return getterGeneric(l, engine, object); } -ReturnedValue Lookup::primitiveGetterAccessor0(Lookup *l, ExecutionEngine *engine, const ValueRef object) +ReturnedValue Lookup::primitiveGetterAccessor0(Lookup *l, ExecutionEngine *engine, const Value &object) { - if (object->type() == l->type) { + if (object.type() == l->type) { Object *o = l->proto; if (l->classList[0] == o->internalClass()) { Scope scope(o->engine()); @@ -530,7 +530,7 @@ ReturnedValue Lookup::primitiveGetterAccessor0(Lookup *l, ExecutionEngine *engin return Encode::undefined(); ScopedCallData callData(scope, 0); - callData->thisObject = *object; + callData->thisObject = object; return getter->call(callData); } } @@ -538,9 +538,9 @@ ReturnedValue Lookup::primitiveGetterAccessor0(Lookup *l, ExecutionEngine *engin return getterGeneric(l, engine, object); } -ReturnedValue Lookup::primitiveGetterAccessor1(Lookup *l, ExecutionEngine *engine, const ValueRef object) +ReturnedValue Lookup::primitiveGetterAccessor1(Lookup *l, ExecutionEngine *engine, const Value &object) { - if (object->type() == l->type) { + if (object.type() == l->type) { Object *o = l->proto; if (l->classList[0] == o->internalClass() && l->classList[1] == o->prototype()->internalClass) { @@ -550,7 +550,7 @@ ReturnedValue Lookup::primitiveGetterAccessor1(Lookup *l, ExecutionEngine *engin return Encode::undefined(); ScopedCallData callData(scope, 0); - callData->thisObject = *object; + callData->thisObject = object; return getter->call(callData); } } @@ -558,18 +558,18 @@ ReturnedValue Lookup::primitiveGetterAccessor1(Lookup *l, ExecutionEngine *engin return getterGeneric(l, engine, object); } -ReturnedValue Lookup::stringLengthGetter(Lookup *l, ExecutionEngine *engine, const ValueRef object) +ReturnedValue Lookup::stringLengthGetter(Lookup *l, ExecutionEngine *engine, const Value &object) { - if (String *s = object->asString()) + if (String *s = object.asString()) return Encode(s->d()->length()); l->getter = getterGeneric; return getterGeneric(l, engine, object); } -ReturnedValue Lookup::arrayLengthGetter(Lookup *l, ExecutionEngine *engine, const ValueRef object) +ReturnedValue Lookup::arrayLengthGetter(Lookup *l, ExecutionEngine *engine, const Value &object) { - if (ArrayObject *a = object->asArrayObject()) + if (ArrayObject *a = object.asArrayObject()) return a->memberData()->data[Heap::ArrayObject::LengthPropertyIndex].asReturnedValue(); l->getter = getterGeneric; @@ -701,7 +701,7 @@ ReturnedValue Lookup::globalGetterAccessor2(Lookup *l, ExecutionEngine *engine) return globalGetterGeneric(l, engine); } -void Lookup::setterGeneric(Lookup *l, ExecutionEngine *engine, const ValueRef object, const ValueRef value) +void Lookup::setterGeneric(Lookup *l, ExecutionEngine *engine, const Value &object, const Value &value) { Scope scope(engine); ScopedObject o(scope, object); @@ -716,11 +716,11 @@ void Lookup::setterGeneric(Lookup *l, ExecutionEngine *engine, const ValueRef ob o->setLookup(l, value); } -void Lookup::setterTwoClasses(Lookup *l, ExecutionEngine *engine, const ValueRef object, const ValueRef value) +void Lookup::setterTwoClasses(Lookup *l, ExecutionEngine *engine, const Value &object, const Value &value) { Lookup l1 = *l; - if (Object *o = object->asObject()) { + if (Object *o = object.asObject()) { o->setLookup(l, value); if (l->setter == Lookup::setter0) { @@ -735,35 +735,35 @@ void Lookup::setterTwoClasses(Lookup *l, ExecutionEngine *engine, const ValueRef setterFallback(l, engine, object, value); } -void Lookup::setterFallback(Lookup *l, ExecutionEngine *engine, const ValueRef object, const ValueRef value) +void Lookup::setterFallback(Lookup *l, ExecutionEngine *engine, const Value &object, const Value &value) { QV4::Scope scope(engine); - QV4::ScopedObject o(scope, object->toObject(scope.engine)); + QV4::ScopedObject o(scope, object.toObject(scope.engine)); if (o) { ScopedString name(scope, engine->currentContext()->compilationUnit->runtimeStrings[l->nameIndex]); o->put(name, value); } } -void Lookup::setter0(Lookup *l, ExecutionEngine *engine, const ValueRef object, const ValueRef value) +void Lookup::setter0(Lookup *l, ExecutionEngine *engine, const Value &object, const Value &value) { - Object *o = static_cast(object->asManaged()); + Object *o = static_cast(object.asManaged()); if (o && o->internalClass() == l->classList[0]) { - o->memberData()->data[l->index] = *value; + o->memberData()->data[l->index] = value; return; } setterTwoClasses(l, engine, object, value); } -void Lookup::setterInsert0(Lookup *l, ExecutionEngine *engine, const ValueRef object, const ValueRef value) +void Lookup::setterInsert0(Lookup *l, ExecutionEngine *engine, const Value &object, const Value &value) { - Object *o = static_cast(object->asManaged()); + Object *o = static_cast(object.asManaged()); if (o && o->internalClass() == l->classList[0]) { if (!o->prototype()) { if (!o->memberData() || l->index >= o->memberData()->size) o->ensureMemberIndex(l->index); - o->memberData()->data[l->index] = *value; + o->memberData()->data[l->index] = value; o->setInternalClass(l->classList[3]); return; } @@ -773,15 +773,15 @@ void Lookup::setterInsert0(Lookup *l, ExecutionEngine *engine, const ValueRef ob setterFallback(l, engine, object, value); } -void Lookup::setterInsert1(Lookup *l, ExecutionEngine *engine, const ValueRef object, const ValueRef value) +void Lookup::setterInsert1(Lookup *l, ExecutionEngine *engine, const Value &object, const Value &value) { - Object *o = static_cast(object->asManaged()); + Object *o = static_cast(object.asManaged()); if (o && o->internalClass() == l->classList[0]) { Heap::Object *p = o->prototype(); if (p && p->internalClass == l->classList[1]) { if (!o->memberData() || l->index >= o->memberData()->size) o->ensureMemberIndex(l->index); - o->memberData()->data[l->index] = *value; + o->memberData()->data[l->index] = value; o->setInternalClass(l->classList[3]); return; } @@ -791,9 +791,9 @@ void Lookup::setterInsert1(Lookup *l, ExecutionEngine *engine, const ValueRef ob setterFallback(l, engine, object, value); } -void Lookup::setterInsert2(Lookup *l, ExecutionEngine *engine, const ValueRef object, const ValueRef value) +void Lookup::setterInsert2(Lookup *l, ExecutionEngine *engine, const Value &object, const Value &value) { - Object *o = static_cast(object->asManaged()); + Object *o = static_cast(object.asManaged()); if (o && o->internalClass() == l->classList[0]) { Heap::Object *p = o->prototype(); if (p && p->internalClass == l->classList[1]) { @@ -801,7 +801,7 @@ void Lookup::setterInsert2(Lookup *l, ExecutionEngine *engine, const ValueRef ob if (p && p->internalClass == l->classList[2]) { if (!o->memberData() || l->index >= o->memberData()->size) o->ensureMemberIndex(l->index); - o->memberData()->data[l->index] = *value; + o->memberData()->data[l->index] = value; o->setInternalClass(l->classList[3]); return; } @@ -812,16 +812,16 @@ void Lookup::setterInsert2(Lookup *l, ExecutionEngine *engine, const ValueRef ob setterFallback(l, engine, object, value); } -void Lookup::setter0setter0(Lookup *l, ExecutionEngine *engine, const ValueRef object, const ValueRef value) +void Lookup::setter0setter0(Lookup *l, ExecutionEngine *engine, const Value &object, const Value &value) { - Object *o = static_cast(object->asManaged()); + Object *o = static_cast(object.asManaged()); if (o) { if (o->internalClass() == l->classList[0]) { - o->memberData()->data[l->index] = *value; + o->memberData()->data[l->index] = value; return; } if (o->internalClass() == l->classList[1]) { - o->memberData()->data[l->index2] = *value; + o->memberData()->data[l->index2] = value; return; } } diff --git a/src/qml/jsruntime/qv4lookup_p.h b/src/qml/jsruntime/qv4lookup_p.h index d491a62ddc..73cfddca5d 100644 --- a/src/qml/jsruntime/qv4lookup_p.h +++ b/src/qml/jsruntime/qv4lookup_p.h @@ -47,11 +47,11 @@ namespace QV4 { struct Lookup { enum { Size = 4 }; union { - ReturnedValue (*indexedGetter)(Lookup *l, const ValueRef object, const ValueRef index); - void (*indexedSetter)(Lookup *l, const ValueRef object, const ValueRef index, const ValueRef v); - ReturnedValue (*getter)(Lookup *l, ExecutionEngine *engine, const ValueRef object); + ReturnedValue (*indexedGetter)(Lookup *l, const Value &object, const Value &index); + void (*indexedSetter)(Lookup *l, const Value &object, const Value &index, const Value &v); + ReturnedValue (*getter)(Lookup *l, ExecutionEngine *engine, const Value &object); ReturnedValue (*globalGetter)(Lookup *l, ExecutionEngine *engine); - void (*setter)(Lookup *l, ExecutionEngine *engine, const ValueRef object, const ValueRef v); + void (*setter)(Lookup *l, ExecutionEngine *engine, const Value &object, const Value &v); }; union { ExecutionEngine *engine; @@ -70,34 +70,34 @@ struct Lookup { uint index; uint nameIndex; - static ReturnedValue indexedGetterGeneric(Lookup *l, const ValueRef object, const ValueRef index); - static ReturnedValue indexedGetterFallback(Lookup *l, const ValueRef object, const ValueRef index); - static ReturnedValue indexedGetterObjectInt(Lookup *l, const ValueRef object, const ValueRef index); - - static void indexedSetterGeneric(Lookup *l, const ValueRef object, const ValueRef index, const ValueRef v); - static void indexedSetterFallback(Lookup *l, const ValueRef object, const ValueRef index, const ValueRef value); - static void indexedSetterObjectInt(Lookup *l, const ValueRef object, const ValueRef index, const ValueRef v); - - static ReturnedValue getterGeneric(Lookup *l, ExecutionEngine *engine, const ValueRef object); - static ReturnedValue getterTwoClasses(Lookup *l, ExecutionEngine *engine, const ValueRef object); - static ReturnedValue getterFallback(Lookup *l, ExecutionEngine *engine, const ValueRef object); - - static ReturnedValue getter0(Lookup *l, ExecutionEngine *engine, const ValueRef object); - static ReturnedValue getter1(Lookup *l, ExecutionEngine *engine, const ValueRef object); - static ReturnedValue getter2(Lookup *l, ExecutionEngine *engine, const ValueRef object); - static ReturnedValue getter0getter0(Lookup *l, ExecutionEngine *engine, const ValueRef object); - static ReturnedValue getter0getter1(Lookup *l, ExecutionEngine *engine, const ValueRef object); - static ReturnedValue getter1getter1(Lookup *l, ExecutionEngine *engine, const ValueRef object); - static ReturnedValue getterAccessor0(Lookup *l, ExecutionEngine *engine, const ValueRef object); - static ReturnedValue getterAccessor1(Lookup *l, ExecutionEngine *engine, const ValueRef object); - static ReturnedValue getterAccessor2(Lookup *l, ExecutionEngine *engine, const ValueRef object); - - static ReturnedValue primitiveGetter0(Lookup *l, ExecutionEngine *engine, const ValueRef object); - static ReturnedValue primitiveGetter1(Lookup *l, ExecutionEngine *engine, const ValueRef object); - static ReturnedValue primitiveGetterAccessor0(Lookup *l, ExecutionEngine *engine, const ValueRef object); - static ReturnedValue primitiveGetterAccessor1(Lookup *l, ExecutionEngine *engine, const ValueRef object); - static ReturnedValue stringLengthGetter(Lookup *l, ExecutionEngine *engine, const ValueRef object); - static ReturnedValue arrayLengthGetter(Lookup *l, ExecutionEngine *engine, const ValueRef object); + static ReturnedValue indexedGetterGeneric(Lookup *l, const Value &object, const Value &index); + static ReturnedValue indexedGetterFallback(Lookup *l, const Value &object, const Value &index); + static ReturnedValue indexedGetterObjectInt(Lookup *l, const Value &object, const Value &index); + + static void indexedSetterGeneric(Lookup *l, const Value &object, const Value &index, const Value &v); + static void indexedSetterFallback(Lookup *l, const Value &object, const Value &index, const Value &value); + static void indexedSetterObjectInt(Lookup *l, const Value &object, const Value &index, const Value &v); + + static ReturnedValue getterGeneric(Lookup *l, ExecutionEngine *engine, const Value &object); + static ReturnedValue getterTwoClasses(Lookup *l, ExecutionEngine *engine, const Value &object); + static ReturnedValue getterFallback(Lookup *l, ExecutionEngine *engine, const Value &object); + + static ReturnedValue getter0(Lookup *l, ExecutionEngine *engine, const Value &object); + static ReturnedValue getter1(Lookup *l, ExecutionEngine *engine, const Value &object); + static ReturnedValue getter2(Lookup *l, ExecutionEngine *engine, const Value &object); + static ReturnedValue getter0getter0(Lookup *l, ExecutionEngine *engine, const Value &object); + static ReturnedValue getter0getter1(Lookup *l, ExecutionEngine *engine, const Value &object); + static ReturnedValue getter1getter1(Lookup *l, ExecutionEngine *engine, const Value &object); + static ReturnedValue getterAccessor0(Lookup *l, ExecutionEngine *engine, const Value &object); + static ReturnedValue getterAccessor1(Lookup *l, ExecutionEngine *engine, const Value &object); + static ReturnedValue getterAccessor2(Lookup *l, ExecutionEngine *engine, const Value &object); + + static ReturnedValue primitiveGetter0(Lookup *l, ExecutionEngine *engine, const Value &object); + static ReturnedValue primitiveGetter1(Lookup *l, ExecutionEngine *engine, const Value &object); + static ReturnedValue primitiveGetterAccessor0(Lookup *l, ExecutionEngine *engine, const Value &object); + static ReturnedValue primitiveGetterAccessor1(Lookup *l, ExecutionEngine *engine, const Value &object); + static ReturnedValue stringLengthGetter(Lookup *l, ExecutionEngine *engine, const Value &object); + static ReturnedValue arrayLengthGetter(Lookup *l, ExecutionEngine *engine, const Value &object); static ReturnedValue globalGetterGeneric(Lookup *l, ExecutionEngine *engine); static ReturnedValue globalGetter0(Lookup *l, ExecutionEngine *engine); @@ -107,16 +107,16 @@ struct Lookup { static ReturnedValue globalGetterAccessor1(Lookup *l, ExecutionEngine *engine); static ReturnedValue globalGetterAccessor2(Lookup *l, ExecutionEngine *engine); - static void setterGeneric(Lookup *l, ExecutionEngine *engine, const ValueRef object, const ValueRef value); - static void setterTwoClasses(Lookup *l, ExecutionEngine *engine, const ValueRef object, const ValueRef value); - static void setterFallback(Lookup *l, ExecutionEngine *engine, const ValueRef object, const ValueRef value); - static void setter0(Lookup *l, ExecutionEngine *engine, const ValueRef object, const ValueRef value); - static void setterInsert0(Lookup *l, ExecutionEngine *engine, const ValueRef object, const ValueRef value); - static void setterInsert1(Lookup *l, ExecutionEngine *engine, const ValueRef object, const ValueRef value); - static void setterInsert2(Lookup *l, ExecutionEngine *engine, const ValueRef object, const ValueRef value); - static void setter0setter0(Lookup *l, ExecutionEngine *engine, const ValueRef object, const ValueRef value); + static void setterGeneric(Lookup *l, ExecutionEngine *engine, const Value &object, const Value &value); + static void setterTwoClasses(Lookup *l, ExecutionEngine *engine, const Value &object, const Value &value); + static void setterFallback(Lookup *l, ExecutionEngine *engine, const Value &object, const Value &value); + static void setter0(Lookup *l, ExecutionEngine *engine, const Value &object, const Value &value); + static void setterInsert0(Lookup *l, ExecutionEngine *engine, const Value &object, const Value &value); + static void setterInsert1(Lookup *l, ExecutionEngine *engine, const Value &object, const Value &value); + static void setterInsert2(Lookup *l, ExecutionEngine *engine, const Value &object, const Value &value); + static void setter0setter0(Lookup *l, ExecutionEngine *engine, const Value &object, const Value &value); - ReturnedValue lookup(ValueRef thisObject, Object *obj, PropertyAttributes *attrs); + ReturnedValue lookup(const Value &thisObject, Object *obj, PropertyAttributes *attrs); ReturnedValue lookup(Object *obj, PropertyAttributes *attrs); }; diff --git a/src/qml/jsruntime/qv4managed_p.h b/src/qml/jsruntime/qv4managed_p.h index 6636cb19cf..5f73ab61b3 100644 --- a/src/qml/jsruntime/qv4managed_p.h +++ b/src/qml/jsruntime/qv4managed_p.h @@ -129,14 +129,14 @@ struct ObjectVTable ReturnedValue (*construct)(Managed *, CallData *data); ReturnedValue (*get)(Managed *, String *name, bool *hasProperty); ReturnedValue (*getIndexed)(Managed *, uint index, bool *hasProperty); - void (*put)(Managed *, String *name, const ValueRef value); - void (*putIndexed)(Managed *, uint index, const ValueRef value); + void (*put)(Managed *, String *name, const Value &value); + void (*putIndexed)(Managed *, uint index, const Value &value); PropertyAttributes (*query)(const Managed *, String *name); PropertyAttributes (*queryIndexed)(const Managed *, uint index); bool (*deleteProperty)(Managed *m, String *name); bool (*deleteIndexedProperty)(Managed *m, uint index); ReturnedValue (*getLookup)(Managed *m, Lookup *l); - void (*setLookup)(Managed *m, Lookup *l, const ValueRef v); + void (*setLookup)(Managed *m, Lookup *l, const Value &v); uint (*getLength)(const Managed *m); void (*advanceIterator)(Managed *m, ObjectIterator *it, Heap::String **name, uint *index, Property *p, PropertyAttributes *attributes); }; diff --git a/src/qml/jsruntime/qv4object.cpp b/src/qml/jsruntime/qv4object.cpp index 13c792d784..f83e2c67bf 100644 --- a/src/qml/jsruntime/qv4object.cpp +++ b/src/qml/jsruntime/qv4object.cpp @@ -73,14 +73,14 @@ bool Object::setPrototype(Object *proto) return true; } -void Object::put(ExecutionEngine *engine, const QString &name, const ValueRef value) +void Object::put(ExecutionEngine *engine, const QString &name, const Value &value) { Scope scope(engine); ScopedString n(scope, engine->newString(name)); put(n, value); } -ReturnedValue Object::getValue(const ValueRef thisObject, const Property *p, PropertyAttributes attrs) +ReturnedValue Object::getValue(const Value &thisObject, const Property *p, PropertyAttributes attrs) { if (!attrs.isAccessor()) return p->value.asReturnedValue(); @@ -90,11 +90,11 @@ ReturnedValue Object::getValue(const ValueRef thisObject, const Property *p, Pro Scope scope(p->getter()->internalClass->engine); ScopedFunctionObject getter(scope, p->getter()); ScopedCallData callData(scope); - callData->thisObject = *thisObject; + callData->thisObject = thisObject; return getter->call(callData); } -void Object::putValue(Property *pd, PropertyAttributes attrs, const ValueRef value) +void Object::putValue(Property *pd, PropertyAttributes attrs, const Value &value) { if (internalClass()->engine->hasException) return; @@ -104,7 +104,7 @@ void Object::putValue(Property *pd, PropertyAttributes attrs, const ValueRef val Scope scope(set->internalClass->engine); ScopedFunctionObject setter(scope, set); ScopedCallData callData(scope, 1); - callData->args[0] = *value; + callData->args[0] = value; callData->thisObject = this; setter->call(callData); return; @@ -115,7 +115,7 @@ void Object::putValue(Property *pd, PropertyAttributes attrs, const ValueRef val if (!attrs.isWritable()) goto reject; - pd->value = *value; + pd->value = value; return; reject: @@ -123,7 +123,7 @@ void Object::putValue(Property *pd, PropertyAttributes attrs, const ValueRef val engine()->throwTypeError(); } -void Object::defineDefaultProperty(const QString &name, ValueRef value) +void Object::defineDefaultProperty(const QString &name, const Value &value) { ExecutionEngine *e = engine(); Scope scope(e); @@ -171,7 +171,7 @@ void Object::defineAccessorProperty(String *name, ReturnedValue (*getter)(CallCo insertMember(name, p, QV4::Attr_Accessor|QV4::Attr_NotConfigurable|QV4::Attr_NotEnumerable); } -void Object::defineReadonlyProperty(const QString &name, ValueRef value) +void Object::defineReadonlyProperty(const QString &name, const Value &value) { QV4::ExecutionEngine *e = engine(); Scope scope(e); @@ -179,7 +179,7 @@ void Object::defineReadonlyProperty(const QString &name, ValueRef value) defineReadonlyProperty(s, value); } -void Object::defineReadonlyProperty(String *name, ValueRef value) +void Object::defineReadonlyProperty(String *name, const Value &value) { insertMember(name, value, Attr_ReadOnly); } @@ -385,12 +385,12 @@ ReturnedValue Object::getIndexed(Managed *m, uint index, bool *hasProperty) return static_cast(m)->internalGetIndexed(index, hasProperty); } -void Object::put(Managed *m, String *name, const ValueRef value) +void Object::put(Managed *m, String *name, const Value &value) { static_cast(m)->internalPut(name, value); } -void Object::putIndexed(Managed *m, uint index, const ValueRef value) +void Object::putIndexed(Managed *m, uint index, const Value &value) { static_cast(m)->internalPutIndexed(index, value); } @@ -464,7 +464,7 @@ ReturnedValue Object::getLookup(Managed *m, Lookup *l) return Encode::undefined(); } -void Object::setLookup(Managed *m, Lookup *l, const ValueRef value) +void Object::setLookup(Managed *m, Lookup *l, const Value &value) { Scope scope(static_cast(m)->engine()); ScopedObject o(scope, static_cast(m)); @@ -477,7 +477,7 @@ void Object::setLookup(Managed *m, Lookup *l, const ValueRef value) l->classList[0] = o->internalClass(); l->index = idx; l->setter = Lookup::setter0; - o->memberData()->data[idx] = *value; + o->memberData()->data[idx] = value; return; } @@ -647,7 +647,7 @@ ReturnedValue Object::internalGetIndexed(uint index, bool *hasProperty) // Section 8.12.5 -void Object::internalPut(String *name, const ValueRef value) +void Object::internalPut(String *name, const Value &value) { if (internalClass()->engine->hasException) return; @@ -676,7 +676,7 @@ void Object::internalPut(String *name, const ValueRef value) goto reject; else if (isArrayObject() && name->equals(engine()->id_length)) { bool ok; - uint l = value->asArrayLength(&ok); + uint l = value.asArrayLength(&ok); if (!ok) { engine()->throwRangeError(value); return; @@ -685,7 +685,7 @@ void Object::internalPut(String *name, const ValueRef value) if (!ok) goto reject; } else { - pd->value = *value; + pd->value = value; } return; } else if (!prototype()) { @@ -715,7 +715,7 @@ void Object::internalPut(String *name, const ValueRef value) Scope scope(engine()); ScopedFunctionObject setter(scope, pd->setter()); ScopedCallData callData(scope, 1); - callData->args[0] = *value; + callData->args[0] = value; callData->thisObject = this; setter->call(callData); return; @@ -733,7 +733,7 @@ void Object::internalPut(String *name, const ValueRef value) } } -void Object::internalPutIndexed(uint index, const ValueRef value) +void Object::internalPutIndexed(uint index, const Value &value) { if (internalClass()->engine->hasException) return; @@ -760,7 +760,7 @@ void Object::internalPutIndexed(uint index, const ValueRef value) } else if (!attrs.isWritable()) goto reject; else - pd->value = *value; + pd->value = value; return; } else if (!prototype()) { if (!isExtensible()) @@ -789,7 +789,7 @@ void Object::internalPutIndexed(uint index, const ValueRef value) Scope scope(engine()); ScopedFunctionObject setter(scope, pd->setter()); ScopedCallData callData(scope, 1); - callData->args[0] = *value; + callData->args[0] = value; callData->thisObject = this; setter->call(callData); return; diff --git a/src/qml/jsruntime/qv4object_p.h b/src/qml/jsruntime/qv4object_p.h index a566716590..bbc9f4ae40 100644 --- a/src/qml/jsruntime/qv4object_p.h +++ b/src/qml/jsruntime/qv4object_p.h @@ -106,38 +106,38 @@ struct Q_QML_EXPORT Object: Managed { // // helpers // - void put(ExecutionEngine *engine, const QString &name, const ValueRef value); + void put(ExecutionEngine *engine, const QString &name, const Value &value); - static ReturnedValue getValue(const ValueRef thisObject, const Property *p, PropertyAttributes attrs); + static ReturnedValue getValue(const Value &thisObject, const Property *p, PropertyAttributes attrs); ReturnedValue getValue(const Property *p, PropertyAttributes attrs) const { Scope scope(this->engine()); ScopedValue t(scope, const_cast(this)); return getValue(t, p, attrs); } - void putValue(Property *pd, PropertyAttributes attrs, const ValueRef value); + void putValue(Property *pd, PropertyAttributes attrs, const Value &value); /* The spec default: Writable: true, Enumerable: false, Configurable: true */ - void defineDefaultProperty(String *name, ValueRef value) { + void defineDefaultProperty(String *name, const Value &value) { insertMember(name, value, Attr_Data|Attr_NotEnumerable); } - void defineDefaultProperty(const QString &name, ValueRef value); + void defineDefaultProperty(const QString &name, const Value &value); void defineDefaultProperty(const QString &name, ReturnedValue (*code)(CallContext *), int argumentCount = 0); void defineDefaultProperty(String *name, ReturnedValue (*code)(CallContext *), int argumentCount = 0); void defineAccessorProperty(const QString &name, ReturnedValue (*getter)(CallContext *), ReturnedValue (*setter)(CallContext *)); void defineAccessorProperty(String *name, ReturnedValue (*getter)(CallContext *), ReturnedValue (*setter)(CallContext *)); /* Fixed: Writable: false, Enumerable: false, Configurable: false */ - void defineReadonlyProperty(const QString &name, ValueRef value); - void defineReadonlyProperty(String *name, ValueRef value); + void defineReadonlyProperty(const QString &name, const Value &value); + void defineReadonlyProperty(String *name, const Value &value); void ensureMemberIndex(QV4::ExecutionEngine *e, uint idx) { d()->memberData = MemberData::reallocate(e, d()->memberData, idx); } - void insertMember(String *s, const ValueRef v, PropertyAttributes attributes = Attr_Data) { + void insertMember(String *s, const Value &v, PropertyAttributes attributes = Attr_Data) { Scope scope(engine()); ScopedProperty p(scope); - p->value = *v; + p->value = v; insertMember(s, p, attributes); } void insertMember(String *s, const Property *p, PropertyAttributes attributes); @@ -155,9 +155,9 @@ public: void setArrayLengthUnchecked(uint l); void arraySet(uint index, const Property *p, PropertyAttributes attributes = Attr_Data); - void arraySet(uint index, ValueRef value); + void arraySet(uint index, const Value &value); - bool arrayPut(uint index, ValueRef value) { + bool arrayPut(uint index, const Value &value) { return arrayData()->vtable()->put(this, index, value); } bool arrayPut(uint index, Value *values, uint n) { @@ -172,7 +172,7 @@ public: } } - void push_back(const ValueRef v); + void push_back(const Value &v); ArrayData::Type arrayType() const { return arrayData() ? d()->arrayData->type : Heap::ArrayData::Simple; @@ -216,9 +216,9 @@ public: { return vtable()->get(this, name, hasProperty); } inline ReturnedValue getIndexed(uint idx, bool *hasProperty = 0) { return vtable()->getIndexed(this, idx, hasProperty); } - inline void put(String *name, const ValueRef v) + inline void put(String *name, const Value &v) { vtable()->put(this, name, v); } - inline void putIndexed(uint idx, const ValueRef v) + inline void putIndexed(uint idx, const Value &v) { vtable()->putIndexed(this, idx, v); } PropertyAttributes query(String *name) const { return vtable()->query(this, name); } @@ -230,7 +230,7 @@ public: { return vtable()->deleteIndexedProperty(this, index); } ReturnedValue getLookup(Lookup *l) { return vtable()->getLookup(this, l); } - void setLookup(Lookup *l, const ValueRef v) + void setLookup(Lookup *l, const Value &v) { vtable()->setLookup(this, l, v); } void advanceIterator(ObjectIterator *it, Heap::String **name, uint *index, Property *p, PropertyAttributes *attributes) { vtable()->advanceIterator(this, it, name, index, p, attributes); } @@ -246,22 +246,22 @@ protected: static ReturnedValue call(Managed *m, CallData *); static ReturnedValue get(Managed *m, String *name, bool *hasProperty); static ReturnedValue getIndexed(Managed *m, uint index, bool *hasProperty); - static void put(Managed *m, String *name, const ValueRef value); - static void putIndexed(Managed *m, uint index, const ValueRef value); + static void put(Managed *m, String *name, const Value &value); + static void putIndexed(Managed *m, uint index, const Value &value); static PropertyAttributes query(const Managed *m, String *name); static PropertyAttributes queryIndexed(const Managed *m, uint index); static bool deleteProperty(Managed *m, String *name); static bool deleteIndexedProperty(Managed *m, uint index); static ReturnedValue getLookup(Managed *m, Lookup *l); - static void setLookup(Managed *m, Lookup *l, const ValueRef v); + static void setLookup(Managed *m, Lookup *l, const Value &v); static void advanceIterator(Managed *m, ObjectIterator *it, Heap::String **name, uint *index, Property *p, PropertyAttributes *attributes); static uint getLength(const Managed *m); private: ReturnedValue internalGet(String *name, bool *hasProperty); ReturnedValue internalGetIndexed(uint index, bool *hasProperty); - void internalPut(String *name, const ValueRef value); - void internalPutIndexed(uint index, const ValueRef value); + void internalPut(String *name, const Value &value); + void internalPutIndexed(uint index, const Value &value); bool internalDeleteProperty(String *name); bool internalDeleteIndexedProperty(uint index); @@ -278,7 +278,7 @@ struct BooleanObject : Object { value = Encode((bool)false); } - BooleanObject(ExecutionEngine *engine, const ValueRef val) + BooleanObject(ExecutionEngine *engine, const Value &val) : Object(engine->emptyClass, engine->booleanPrototype.asObject()) { value = val; @@ -293,7 +293,7 @@ struct NumberObject : Object { value = Encode((int)0); } - NumberObject(ExecutionEngine *engine, const ValueRef val) + NumberObject(ExecutionEngine *engine, const Value &val) : Object(engine->emptyClass, engine->numberPrototype.asObject()) { value = val; @@ -353,7 +353,7 @@ inline void Object::setArrayLengthUnchecked(uint l) memberData()->data[Heap::ArrayObject::LengthPropertyIndex] = Primitive::fromUInt32(l); } -inline void Object::push_back(const ValueRef v) +inline void Object::push_back(const Value &v) { arrayCreate(); @@ -382,14 +382,14 @@ inline void Object::arraySet(uint index, const Property *p, PropertyAttributes a } -inline void Object::arraySet(uint index, ValueRef value) +inline void Object::arraySet(uint index, const Value &value) { arrayCreate(); if (index > 0x1000 && index > 2*d()->arrayData->alloc) { initSparseArray(); } Property *pd = ArrayData::insert(this, index); - pd->value = value ? *value : Primitive::undefinedValue(); + pd->value = value; if (isArrayObject() && index >= getLength()) setArrayLengthUnchecked(index + 1); } diff --git a/src/qml/jsruntime/qv4objectproto.cpp b/src/qml/jsruntime/qv4objectproto.cpp index b1bc6ab5c0..b3302d214d 100644 --- a/src/qml/jsruntime/qv4objectproto.cpp +++ b/src/qml/jsruntime/qv4objectproto.cpp @@ -135,7 +135,7 @@ ReturnedValue ObjectPrototype::method_getOwnPropertyDescriptor(CallContext *ctx) return ctx->engine()->throwTypeError(); if (ArgumentsObject::isNonStrictArgumentsObject(O)) - Scoped(scope, O)->fullyCreate(); + static_cast(O.getPointer())->fullyCreate(); ScopedValue v(scope, ctx->argument(1)); ScopedString name(scope, v->toString(scope.engine)); @@ -266,7 +266,7 @@ ReturnedValue ObjectPrototype::method_freeze(CallContext *ctx) return ctx->engine()->throwTypeError(); if (ArgumentsObject::isNonStrictArgumentsObject(o)) - Scoped(scope, o)->fullyCreate(); + static_cast(o.getPointer())->fullyCreate(); o->setInternalClass(o->internalClass()->frozen()); @@ -560,7 +560,7 @@ ReturnedValue ObjectPrototype::method_set_proto(CallContext *ctx) return Encode::undefined(); } -void ObjectPrototype::toPropertyDescriptor(ExecutionEngine *engine, const ValueRef v, Property *desc, PropertyAttributes *attrs) +void ObjectPrototype::toPropertyDescriptor(ExecutionEngine *engine, const Value &v, Property *desc, PropertyAttributes *attrs) { Scope scope(engine); ScopedObject o(scope, v); @@ -666,7 +666,7 @@ ReturnedValue ObjectPrototype::fromPropertyDescriptor(ExecutionEngine *engine, c } -Heap::ArrayObject *ObjectPrototype::getOwnPropertyNames(ExecutionEngine *v4, const ValueRef o) +Heap::ArrayObject *ObjectPrototype::getOwnPropertyNames(ExecutionEngine *v4, const Value &o) { Scope scope(v4); ScopedArrayObject array(scope, v4->newArrayObject()); diff --git a/src/qml/jsruntime/qv4objectproto_p.h b/src/qml/jsruntime/qv4objectproto_p.h index 4bbcb297be..65893a3ccf 100644 --- a/src/qml/jsruntime/qv4objectproto_p.h +++ b/src/qml/jsruntime/qv4objectproto_p.h @@ -88,10 +88,10 @@ struct ObjectPrototype: Object static ReturnedValue method_get_proto(CallContext *ctx); static ReturnedValue method_set_proto(CallContext *ctx); - static void toPropertyDescriptor(ExecutionEngine *engine, const ValueRef v, Property *desc, PropertyAttributes *attrs); + static void toPropertyDescriptor(ExecutionEngine *engine, const Value &v, Property *desc, PropertyAttributes *attrs); static ReturnedValue fromPropertyDescriptor(ExecutionEngine *engine, const Property *desc, PropertyAttributes attrs); - static Heap::ArrayObject *getOwnPropertyNames(ExecutionEngine *v4, const ValueRef o); + static Heap::ArrayObject *getOwnPropertyNames(ExecutionEngine *v4, const Value &o); }; diff --git a/src/qml/jsruntime/qv4persistent.cpp b/src/qml/jsruntime/qv4persistent.cpp index 1b191f3384..0b3c7a4da0 100644 --- a/src/qml/jsruntime/qv4persistent.cpp +++ b/src/qml/jsruntime/qv4persistent.cpp @@ -216,7 +216,7 @@ PersistentValue::PersistentValue(const PersistentValue &other) } } -PersistentValue::PersistentValue(ExecutionEngine *engine, const ValueRef value) +PersistentValue::PersistentValue(ExecutionEngine *engine, const Value &value) { val = engine->memoryManager->m_persistentValues->allocate(); *val = value; @@ -228,6 +228,16 @@ PersistentValue::PersistentValue(ExecutionEngine *engine, ReturnedValue value) *val = value; } +PersistentValue::PersistentValue(ExecutionEngine *engine, Object *object) + : val(0) +{ + if (!object) + return; + + val = engine->memoryManager->m_persistentValues->allocate(); + *val = object; +} + PersistentValue::~PersistentValue() { PersistentValueStorage::free(val); @@ -274,7 +284,7 @@ PersistentValue &PersistentValue::operator=(Object *object) return *this; } -void PersistentValue::set(ExecutionEngine *engine, const ValueRef value) +void PersistentValue::set(ExecutionEngine *engine, const Value &value) { if (!val) val = engine->memoryManager->m_persistentValues->allocate(); @@ -323,7 +333,7 @@ WeakValue::~WeakValue() PersistentValueStorage::free(val); } -void WeakValue::set(ExecutionEngine *engine, const ValueRef value) +void WeakValue::set(ExecutionEngine *engine, const Value &value) { if (!val) val = engine->memoryManager->m_weakValues->allocate(); diff --git a/src/qml/jsruntime/qv4persistent_p.h b/src/qml/jsruntime/qv4persistent_p.h index b71f943f80..02d4007f62 100644 --- a/src/qml/jsruntime/qv4persistent_p.h +++ b/src/qml/jsruntime/qv4persistent_p.h @@ -79,10 +79,11 @@ public: PersistentValue &operator=(Object *object); ~PersistentValue(); - PersistentValue(ExecutionEngine *engine, const ValueRef value); + PersistentValue(ExecutionEngine *engine, const Value &value); PersistentValue(ExecutionEngine *engine, ReturnedValue value); + PersistentValue(ExecutionEngine *engine, Object *object); - void set(ExecutionEngine *engine, const ValueRef value); + void set(ExecutionEngine *engine, const Value &value); void set(ExecutionEngine *engine, ReturnedValue value); void set(ExecutionEngine *engine, Heap::Base *obj); @@ -126,7 +127,7 @@ public: WeakValue &operator=(const WeakValue &other); ~WeakValue(); - void set(ExecutionEngine *engine, const ValueRef value); + void set(ExecutionEngine *engine, const Value &value); void set(ExecutionEngine *engine, ReturnedValue value); void set(ExecutionEngine *engine, Heap::Base *obj); diff --git a/src/qml/jsruntime/qv4qobjectwrapper.cpp b/src/qml/jsruntime/qv4qobjectwrapper.cpp index 9fb7ad96fa..6190dd0bad 100644 --- a/src/qml/jsruntime/qv4qobjectwrapper.cpp +++ b/src/qml/jsruntime/qv4qobjectwrapper.cpp @@ -94,10 +94,10 @@ static QPair extractQtMethod(QV4::FunctionObject *function) return qMakePair((QObject *)0, -1); } -static QPair extractQtSignal(const ValueRef value) +static QPair extractQtSignal(const Value &value) { - if (value->isObject()) { - QV4::ExecutionEngine *v4 = value->asObject()->engine(); + if (value.isObject()) { + QV4::ExecutionEngine *v4 = value.asObject()->engine(); QV4::Scope scope(v4); QV4::ScopedFunctionObject function(scope, value); if (function) @@ -418,7 +418,7 @@ ReturnedValue QObjectWrapper::getQmlProperty(QV4::ExecutionEngine *engine, QQmlC } bool QObjectWrapper::setQmlProperty(ExecutionEngine *engine, QQmlContextData *qmlContext, QObject *object, String *name, - QObjectWrapper::RevisionMode revisionMode, const ValueRef value) + QObjectWrapper::RevisionMode revisionMode, const Value &value) { if (QQmlData::wasDeleted(object)) return false; @@ -444,7 +444,7 @@ bool QObjectWrapper::setQmlProperty(ExecutionEngine *engine, QQmlContextData *qm return true; } -void QObjectWrapper::setProperty(QObject *object, ExecutionContext *ctx, QQmlPropertyData *property, const ValueRef value) +void QObjectWrapper::setProperty(QObject *object, ExecutionContext *ctx, QQmlPropertyData *property, const Value &value) { if (!property->isWritable() && !property->isQList()) { QString error = QLatin1String("Cannot assign to read-only property \"") + @@ -472,7 +472,7 @@ void QObjectWrapper::setProperty(QObject *object, ExecutionContext *ctx, QQmlPro // binding assignment. QQmlContextData *callingQmlContext = QV4::QmlContextWrapper::callingContext(ctx->d()->engine); - QV4::Scoped bindingFunction(scope, f); + QV4::Scoped bindingFunction(scope, (const Value &)f); bindingFunction->initBindingLocation(); newBinding = new QQmlBinding(value, object, callingQmlContext); @@ -500,18 +500,18 @@ void QObjectWrapper::setProperty(QObject *object, ExecutionContext *ctx, QQmlPro void *argv[] = { &o, 0, &status, &flags }; \ QMetaObject::metacall(object, QMetaObject::WriteProperty, property->coreIndex, argv); - if (value->isNull() && property->isQObject()) { + if (value.isNull() && property->isQObject()) { PROPERTY_STORE(QObject*, 0); - } else if (value->isUndefined() && property->isResettable()) { + } else if (value.isUndefined() && property->isResettable()) { void *a[] = { 0 }; QMetaObject::metacall(object, QMetaObject::ResetProperty, property->coreIndex, a); - } else if (value->isUndefined() && property->propType == qMetaTypeId()) { + } else if (value.isUndefined() && property->propType == qMetaTypeId()) { PROPERTY_STORE(QVariant, QVariant()); - } else if (value->isUndefined() && property->propType == QMetaType::QJsonValue) { + } else if (value.isUndefined() && property->propType == QMetaType::QJsonValue) { PROPERTY_STORE(QJsonValue, QJsonValue(QJsonValue::Undefined)); } else if (!newBinding && property->propType == qMetaTypeId()) { PROPERTY_STORE(QJSValue, QJSValue(ctx->d()->engine, value.asReturnedValue())); - } else if (value->isUndefined() && property->propType != qMetaTypeId()) { + } else if (value.isUndefined() && property->propType != qMetaTypeId()) { QString error = QLatin1String("Cannot assign [undefined] to "); if (!QMetaType::typeName(property->propType)) error += QLatin1String("[unknown property type]"); @@ -519,28 +519,28 @@ void QObjectWrapper::setProperty(QObject *object, ExecutionContext *ctx, QQmlPro error += QLatin1String(QMetaType::typeName(property->propType)); ctx->engine()->throwError(error); return; - } else if (value->asFunctionObject()) { + } else if (value.asFunctionObject()) { // this is handled by the binding creation above - } else if (property->propType == QMetaType::Int && value->isNumber()) { - PROPERTY_STORE(int, value->asDouble()); - } else if (property->propType == QMetaType::QReal && value->isNumber()) { - PROPERTY_STORE(qreal, qreal(value->asDouble())); - } else if (property->propType == QMetaType::Float && value->isNumber()) { - PROPERTY_STORE(float, float(value->asDouble())); - } else if (property->propType == QMetaType::Double && value->isNumber()) { - PROPERTY_STORE(double, double(value->asDouble())); - } else if (property->propType == QMetaType::QString && value->isString()) { - PROPERTY_STORE(QString, value->toQStringNoThrow()); + } else if (property->propType == QMetaType::Int && value.isNumber()) { + PROPERTY_STORE(int, value.asDouble()); + } else if (property->propType == QMetaType::QReal && value.isNumber()) { + PROPERTY_STORE(qreal, qreal(value.asDouble())); + } else if (property->propType == QMetaType::Float && value.isNumber()) { + PROPERTY_STORE(float, float(value.asDouble())); + } else if (property->propType == QMetaType::Double && value.isNumber()) { + PROPERTY_STORE(double, double(value.asDouble())); + } else if (property->propType == QMetaType::QString && value.isString()) { + PROPERTY_STORE(QString, value.toQStringNoThrow()); } else if (property->isVarProperty()) { QQmlVMEMetaObject *vmemo = QQmlVMEMetaObject::get(object); Q_ASSERT(vmemo); vmemo->setVMEProperty(property->coreIndex, value); - } else if (property->propType == qMetaTypeId() && (value->isUndefined() || value->isPrimitive())) { - QQmlScriptString ss(value->toQStringNoThrow(), 0 /* context */, object); - if (value->isNumber()) { - ss.d->numberValue = value->toNumber(); + } else if (property->propType == qMetaTypeId() && (value.isUndefined() || value.isPrimitive())) { + QQmlScriptString ss(value.toQStringNoThrow(), 0 /* context */, object); + if (value.isNumber()) { + ss.d->numberValue = value.toNumber(); ss.d->isNumberLiteral = true; - } else if (value->isString()) { + } else if (value.isString()) { ss.d->script = QV4::CompiledData::Binding::escapedString(ss.d->script); ss.d->isStringLiteral = true; } @@ -639,7 +639,7 @@ ReturnedValue QObjectWrapper::getProperty(QObject *object, ExecutionContext *ctx return getProperty(object, ctx, property, captureRequired); } -void QObjectWrapper::setProperty(ExecutionContext *ctx, int propertyIndex, const ValueRef value) +void QObjectWrapper::setProperty(ExecutionContext *ctx, int propertyIndex, const Value &value) { if (QQmlData::wasDeleted(d()->object)) return; @@ -681,7 +681,7 @@ QV4::ReturnedValue QObjectWrapper::get(Managed *m, String *name, bool *hasProper return that->getQmlProperty(qmlContext, name, IgnoreRevision, hasProperty, /*includeImports*/ true); } -void QObjectWrapper::put(Managed *m, String *name, const ValueRef value) +void QObjectWrapper::put(Managed *m, String *name, const Value &value) { QObjectWrapper *that = static_cast(m); ExecutionEngine *v4 = that->engine(); @@ -853,7 +853,7 @@ struct QObjectSlotDispatcher : public QtPrivate::QSlotObjectBase if (slotIndexToDisconnect != -1) { // This is a QObject function wrapper if (connection->thisObject.isUndefined() == thisObject->isUndefined() && - (connection->thisObject.isUndefined() || RuntimeHelpers::strictEqual(connection->thisObject, thisObject))) { + (connection->thisObject.isUndefined() || RuntimeHelpers::strictEqual(*connection->thisObject.valueRef(), thisObject))) { QV4::ScopedFunctionObject f(scope, connection->function.value()); QPair connectedFunctionData = extractQtMethod(f); @@ -865,9 +865,9 @@ struct QObjectSlotDispatcher : public QtPrivate::QSlotObjectBase } } else { // This is a normal JS function - if (RuntimeHelpers::strictEqual(connection->function, function) && + if (RuntimeHelpers::strictEqual(*connection->function.valueRef(), function) && connection->thisObject.isUndefined() == thisObject->isUndefined() && - (connection->thisObject.isUndefined() || RuntimeHelpers::strictEqual(connection->thisObject, thisObject))) { + (connection->thisObject.isUndefined() || RuntimeHelpers::strictEqual(*connection->thisObject.valueRef(), thisObject))) { *ret = true; return; } @@ -1089,7 +1089,7 @@ struct CallArgument { inline void *dataPtr(); inline void initAsType(int type); - inline void fromValue(int type, ExecutionEngine *, const ValueRef); + inline void fromValue(int type, ExecutionEngine *, const Value &); inline ReturnedValue toValue(ExecutionEngine *); private: @@ -1174,9 +1174,9 @@ static QV4::ReturnedValue CallMethod(const QQmlObjectOrGadget &object, int index The conversion table is copied out of the \l QScript::callQtMethod() function. */ -static int MatchScore(const QV4::ValueRef actual, int conversionType) +static int MatchScore(const QV4::Value &actual, int conversionType) { - if (actual->isNumber()) { + if (actual.isNumber()) { switch (conversionType) { case QMetaType::Double: return 0; @@ -1203,7 +1203,7 @@ static int MatchScore(const QV4::ValueRef actual, int conversionType) default: return 10; } - } else if (actual->isString()) { + } else if (actual.isString()) { switch (conversionType) { case QMetaType::QString: return 0; @@ -1212,7 +1212,7 @@ static int MatchScore(const QV4::ValueRef actual, int conversionType) default: return 10; } - } else if (actual->isBoolean()) { + } else if (actual.isBoolean()) { switch (conversionType) { case QMetaType::Bool: return 0; @@ -1221,7 +1221,7 @@ static int MatchScore(const QV4::ValueRef actual, int conversionType) default: return 10; } - } else if (actual->asDateObject()) { + } else if (actual.asDateObject()) { switch (conversionType) { case QMetaType::QDateTime: return 0; @@ -1232,14 +1232,14 @@ static int MatchScore(const QV4::ValueRef actual, int conversionType) default: return 10; } - } else if (actual->as()) { + } else if (actual.as()) { switch (conversionType) { case QMetaType::QRegExp: return 0; default: return 10; } - } else if (actual->asArrayObject()) { + } else if (actual.asArrayObject()) { switch (conversionType) { case QMetaType::QJsonArray: return 3; @@ -1254,7 +1254,7 @@ static int MatchScore(const QV4::ValueRef actual, int conversionType) default: return 10; } - } else if (actual->isNull()) { + } else if (actual.isNull()) { switch (conversionType) { case QMetaType::VoidStar: case QMetaType::QObjectStar: @@ -1268,7 +1268,7 @@ static int MatchScore(const QV4::ValueRef actual, int conversionType) return 10; } } - } else if (QV4::Object *obj = actual->asObject()) { + } else if (QV4::Object *obj = actual.asObject()) { if (obj->as()) { if (conversionType == qMetaTypeId()) return 0; @@ -1562,7 +1562,7 @@ void CallArgument::initAsType(int callType) } } -void CallArgument::fromValue(int callType, QV4::ExecutionEngine *engine, const QV4::ValueRef value) +void CallArgument::fromValue(int callType, QV4::ExecutionEngine *engine, const QV4::Value &value) { if (type != 0) { cleanup(); @@ -1576,31 +1576,31 @@ void CallArgument::fromValue(int callType, QV4::ExecutionEngine *engine, const Q qjsValuePtr = new (&allocData) QJSValue(scope.engine, value.asReturnedValue()); type = qMetaTypeId(); } else if (callType == QMetaType::Int) { - intValue = quint32(value->toInt32()); + intValue = quint32(value.toInt32()); type = callType; } else if (callType == QMetaType::UInt) { - intValue = quint32(value->toUInt32()); + intValue = quint32(value.toUInt32()); type = callType; } else if (callType == QMetaType::Bool) { - boolValue = value->toBoolean(); + boolValue = value.toBoolean(); type = callType; } else if (callType == QMetaType::Double) { - doubleValue = double(value->toNumber()); + doubleValue = double(value.toNumber()); type = callType; } else if (callType == QMetaType::Float) { - floatValue = float(value->toNumber()); + floatValue = float(value.toNumber()); type = callType; } else if (callType == QMetaType::QString) { - if (value->isNull() || value->isUndefined()) + if (value.isNull() || value.isUndefined()) qstringPtr = new (&allocData) QString(); else - qstringPtr = new (&allocData) QString(value->toQStringNoThrow()); + qstringPtr = new (&allocData) QString(value.toQStringNoThrow()); type = callType; } else if (callType == QMetaType::QObjectStar) { qobjectPtr = 0; - if (QV4::QObjectWrapper *qobjectWrapper = value->as()) + if (QV4::QObjectWrapper *qobjectWrapper = value.as()) qobjectPtr = qobjectWrapper->object(); - else if (QV4::QmlTypeWrapper *qmlTypeWrapper = value->as()) + else if (QV4::QmlTypeWrapper *qmlTypeWrapper = value.as()) queryEngine = qmlTypeWrapper->isSingleton(); type = callType; } else if (callType == qMetaTypeId()) { @@ -1622,13 +1622,13 @@ void CallArgument::fromValue(int callType, QV4::ExecutionEngine *engine, const Q } } else { QObject *o = 0; - if (QV4::QObjectWrapper *qobjectWrapper = value->as()) + if (QV4::QObjectWrapper *qobjectWrapper = value.as()) o = qobjectWrapper->object(); qlistPtr->append(o); } type = callType; } else if (callType == qMetaTypeId()) { - handlePtr = new (&allocData) QQmlV4Handle(value->asReturnedValue()); + handlePtr = new (&allocData) QQmlV4Handle(value.asReturnedValue()); type = callType; } else if (callType == QMetaType::QJsonArray) { QV4::ScopedArrayObject a(scope, value); @@ -1731,7 +1731,7 @@ QV4::ReturnedValue CallArgument::toValue(QV4::ExecutionEngine *engine) } } -ReturnedValue QObjectMethod::create(ExecutionContext *scope, QObject *object, int index, const ValueRef qmlGlobal) +ReturnedValue QObjectMethod::create(ExecutionContext *scope, QObject *object, int index, const Value &qmlGlobal) { Scope valueScope(scope); Scoped method(valueScope, scope->d()->engine->memoryManager->alloc(scope)); @@ -1746,7 +1746,7 @@ ReturnedValue QObjectMethod::create(ExecutionContext *scope, QObject *object, in return method.asReturnedValue(); } -ReturnedValue QObjectMethod::create(ExecutionContext *scope, QQmlValueTypeWrapper *valueType, int index, const ValueRef qmlGlobal) +ReturnedValue QObjectMethod::create(ExecutionContext *scope, QQmlValueTypeWrapper *valueType, int index, const Value &qmlGlobal) { Scope valueScope(scope); Scoped method(valueScope, scope->d()->engine->memoryManager->alloc(scope)); @@ -1795,7 +1795,7 @@ QV4::ReturnedValue QObjectMethod::method_toString(QV4::ExecutionContext *ctx) return ctx->d()->engine->newString(result)->asReturnedValue(); } -QV4::ReturnedValue QObjectMethod::method_destroy(QV4::ExecutionContext *ctx, const ValueRef args, int argc) +QV4::ReturnedValue QObjectMethod::method_destroy(QV4::ExecutionContext *ctx, const Value *args, int argc) { if (!d()->object) return Encode::undefined(); diff --git a/src/qml/jsruntime/qv4qobjectwrapper_p.h b/src/qml/jsruntime/qv4qobjectwrapper_p.h index f0dd440ce3..742391a72b 100644 --- a/src/qml/jsruntime/qv4qobjectwrapper_p.h +++ b/src/qml/jsruntime/qv4qobjectwrapper_p.h @@ -107,28 +107,28 @@ struct Q_QML_EXPORT QObjectWrapper : public Object ReturnedValue getQmlProperty(QQmlContextData *qmlContext, String *name, RevisionMode revisionMode, bool *hasProperty = 0, bool includeImports = false); static ReturnedValue getQmlProperty(ExecutionEngine *engine, QQmlContextData *qmlContext, QObject *object, String *name, RevisionMode revisionMode, bool *hasProperty = 0); - static bool setQmlProperty(ExecutionEngine *engine, QQmlContextData *qmlContext, QObject *object, String *name, RevisionMode revisionMode, const ValueRef value); + static bool setQmlProperty(ExecutionEngine *engine, QQmlContextData *qmlContext, QObject *object, String *name, RevisionMode revisionMode, const Value &value); static ReturnedValue wrap(ExecutionEngine *engine, QObject *object); using Object::get; static ReturnedValue getProperty(QObject *object, ExecutionContext *ctx, int propertyIndex, bool captureRequired); - void setProperty(ExecutionContext *ctx, int propertyIndex, const ValueRef value); + void setProperty(ExecutionContext *ctx, int propertyIndex, const Value &value); protected: static bool isEqualTo(Managed *that, Managed *o); private: static ReturnedValue getProperty(QObject *object, ExecutionContext *ctx, QQmlPropertyData *property, bool captureRequired = true); - static void setProperty(QObject *object, ExecutionContext *ctx, QQmlPropertyData *property, const ValueRef value); + static void setProperty(QObject *object, ExecutionContext *ctx, QQmlPropertyData *property, const Value &value); static ReturnedValue create(ExecutionEngine *engine, QObject *object); QQmlPropertyData *findProperty(ExecutionEngine *engine, QQmlContextData *qmlContext, String *name, RevisionMode revisionMode, QQmlPropertyData *local) const; static ReturnedValue get(Managed *m, String *name, bool *hasProperty); - static void put(Managed *m, String *name, const ValueRef value); + static void put(Managed *m, String *name, const Value &value); static PropertyAttributes query(const Managed *, String *name); static void advanceIterator(Managed *m, ObjectIterator *it, Heap::String **name, uint *index, Property *p, PropertyAttributes *attributes); static void markObjects(Heap::Base *that, QV4::ExecutionEngine *e); @@ -147,14 +147,14 @@ struct Q_QML_EXPORT QObjectMethod : public QV4::FunctionObject enum { DestroyMethod = -1, ToStringMethod = -2 }; - static ReturnedValue create(QV4::ExecutionContext *scope, QObject *object, int index, const ValueRef qmlGlobal = Primitive::undefinedValue()); - static ReturnedValue create(QV4::ExecutionContext *scope, QQmlValueTypeWrapper *valueType, int index, const ValueRef qmlGlobal = Primitive::undefinedValue()); + static ReturnedValue create(QV4::ExecutionContext *scope, QObject *object, int index, const Value &qmlGlobal = Primitive::undefinedValue()); + static ReturnedValue create(QV4::ExecutionContext *scope, QQmlValueTypeWrapper *valueType, int index, const Value &qmlGlobal = Primitive::undefinedValue()); int methodIndex() const { return d()->index; } QObject *object() const { return d()->object.data(); } QV4::ReturnedValue method_toString(QV4::ExecutionContext *ctx); - QV4::ReturnedValue method_destroy(QV4::ExecutionContext *ctx, const ValueRef args, int argc); + QV4::ReturnedValue method_destroy(QV4::ExecutionContext *ctx, const Value *args, int argc); static ReturnedValue call(Managed *, CallData *callData); diff --git a/src/qml/jsruntime/qv4runtime.cpp b/src/qml/jsruntime/qv4runtime.cpp index 61a277b9b5..fdff79538c 100644 --- a/src/qml/jsruntime/qv4runtime.cpp +++ b/src/qml/jsruntime/qv4runtime.cpp @@ -272,32 +272,32 @@ ReturnedValue Runtime::closure(ExecutionEngine *engine, int functionId) return FunctionObject::createScriptFunction(ScopedContext(scope, engine->currentContext()), clos)->asReturnedValue(); } -ReturnedValue Runtime::deleteElement(ExecutionEngine *engine, const ValueRef base, const ValueRef index) +ReturnedValue Runtime::deleteElement(ExecutionEngine *engine, const Value &base, const Value &index) { Scope scope(engine); ScopedObject o(scope, base); if (o) { - uint n = index->asArrayIndex(); + uint n = index.asArrayIndex(); if (n < UINT_MAX) { return Encode((bool)o->deleteIndexedProperty(n)); } } - ScopedString name(scope, index->toString(engine)); + ScopedString name(scope, index.toString(engine)); return Runtime::deleteMemberString(engine, base, name); } -ReturnedValue Runtime::deleteMember(ExecutionEngine *engine, const ValueRef base, int nameIndex) +ReturnedValue Runtime::deleteMember(ExecutionEngine *engine, const Value &base, int nameIndex) { Scope scope(engine); ScopedString name(scope, engine->currentContext()->compilationUnit->runtimeStrings[nameIndex]); return deleteMemberString(engine, base, name); } -ReturnedValue Runtime::deleteMemberString(ExecutionEngine *engine, const ValueRef base, String *name) +ReturnedValue Runtime::deleteMemberString(ExecutionEngine *engine, const Value &base, String *name) { Scope scope(engine); - ScopedObject obj(scope, base->toObject(engine)); + ScopedObject obj(scope, base.toObject(engine)); if (scope.engine->hasException) return Encode::undefined(); return Encode(obj->deleteProperty(name)); @@ -311,17 +311,17 @@ ReturnedValue Runtime::deleteName(ExecutionEngine *engine, int nameIndex) return Encode(ctx->deleteProperty(name)); } -QV4::ReturnedValue Runtime::instanceof(ExecutionEngine *engine, const ValueRef left, const ValueRef right) +QV4::ReturnedValue Runtime::instanceof(ExecutionEngine *engine, const Value &left, const Value &right) { Scope scope(engine); - ScopedFunctionObject f(scope, right->asFunctionObject()); + ScopedFunctionObject f(scope, right.asFunctionObject()); if (!f) return engine->throwTypeError(); if (f->isBoundFunction()) f = static_cast(f.getPointer())->target(); - ScopedObject v(scope, left->asObject()); + ScopedObject v(scope, left.asObject()); if (!v) return Encode(false); @@ -341,15 +341,15 @@ QV4::ReturnedValue Runtime::instanceof(ExecutionEngine *engine, const ValueRef l return Encode(false); } -QV4::ReturnedValue Runtime::in(ExecutionEngine *engine, const ValueRef left, const ValueRef right) +QV4::ReturnedValue Runtime::in(ExecutionEngine *engine, const Value &left, const Value &right) { - if (!right->isObject()) + if (!right.isObject()) return engine->throwTypeError(); Scope scope(engine); - ScopedString s(scope, left->toString(engine)); + ScopedString s(scope, left.toString(engine)); if (scope.hasException()) return Encode::undefined(); - bool r = right->objectValue()->hasProperty(s); + bool r = right.objectValue()->hasProperty(s); return Encode(r); } @@ -426,10 +426,10 @@ ReturnedValue RuntimeHelpers::objectDefaultValue(Object *object, int typeHint) -Heap::Object *RuntimeHelpers::convertToObject(ExecutionEngine *engine, const ValueRef value) +Heap::Object *RuntimeHelpers::convertToObject(ExecutionEngine *engine, const Value &value) { - Q_ASSERT(!value->isObject()); - switch (value->type()) { + Q_ASSERT(!value.isObject()); + switch (value.type()) { case Value::Undefined_Type: case Value::Null_Type: engine->throwTypeError(); @@ -437,7 +437,7 @@ Heap::Object *RuntimeHelpers::convertToObject(ExecutionEngine *engine, const Val case Value::Boolean_Type: return engine->newBooleanObject(value); case Value::Managed_Type: - Q_ASSERT(value->isString()); + Q_ASSERT(value.isString()); return engine->newStringObject(value); case Value::Integer_Type: default: // double @@ -445,9 +445,9 @@ Heap::Object *RuntimeHelpers::convertToObject(ExecutionEngine *engine, const Val } } -Heap::String *RuntimeHelpers::convertToString(ExecutionEngine *engine, const ValueRef value) +Heap::String *RuntimeHelpers::convertToString(ExecutionEngine *engine, const Value &value) { - switch (value->type()) { + switch (value.type()) { case Value::Empty_Type: Q_ASSERT(!"empty Value encountered"); case Value::Undefined_Type: @@ -455,30 +455,30 @@ Heap::String *RuntimeHelpers::convertToString(ExecutionEngine *engine, const Val case Value::Null_Type: return engine->id_null->d(); case Value::Boolean_Type: - if (value->booleanValue()) + if (value.booleanValue()) return engine->id_true->d(); else return engine->id_false->d(); case Value::Managed_Type: - if (value->isString()) - return value->stringValue()->d(); + if (value.isString()) + return value.stringValue()->d(); { Scope scope(engine); ScopedValue prim(scope, RuntimeHelpers::toPrimitive(value, STRING_HINT)); return RuntimeHelpers::convertToString(engine, prim); } case Value::Integer_Type: - return RuntimeHelpers::stringFromNumber(engine, value->int_32); + return RuntimeHelpers::stringFromNumber(engine, value.int_32); default: // double - return RuntimeHelpers::stringFromNumber(engine, value->doubleValue()); + return RuntimeHelpers::stringFromNumber(engine, value.doubleValue()); } // switch } // This is slightly different from the method above, as // the + operator requires a slightly different conversion -static Heap::String *convert_to_string_add(ExecutionEngine *engine, const ValueRef value) +static Heap::String *convert_to_string_add(ExecutionEngine *engine, const Value &value) { - switch (value->type()) { + switch (value.type()) { case Value::Empty_Type: Q_ASSERT(!"empty Value encountered"); case Value::Undefined_Type: @@ -486,26 +486,26 @@ static Heap::String *convert_to_string_add(ExecutionEngine *engine, const ValueR case Value::Null_Type: return engine->id_null->d(); case Value::Boolean_Type: - if (value->booleanValue()) + if (value.booleanValue()) return engine->id_true->d(); else return engine->id_false->d(); case Value::Managed_Type: - if (value->isString()) - return value->stringValue()->d(); + if (value.isString()) + return value.stringValue()->d(); { Scope scope(engine); ScopedValue prim(scope, RuntimeHelpers::toPrimitive(value, PREFERREDTYPE_HINT)); return RuntimeHelpers::convertToString(engine, prim); } case Value::Integer_Type: - return RuntimeHelpers::stringFromNumber(engine, value->int_32); + return RuntimeHelpers::stringFromNumber(engine, value.int_32); default: // double - return RuntimeHelpers::stringFromNumber(engine, value->doubleValue()); + return RuntimeHelpers::stringFromNumber(engine, value.doubleValue()); } // switch } -QV4::ReturnedValue RuntimeHelpers::addHelper(ExecutionEngine *engine, const ValueRef left, const ValueRef right) +QV4::ReturnedValue RuntimeHelpers::addHelper(ExecutionEngine *engine, const Value &left, const Value &right) { Scope scope(engine); @@ -529,21 +529,21 @@ QV4::ReturnedValue RuntimeHelpers::addHelper(ExecutionEngine *engine, const Valu return Encode(x + y); } -QV4::ReturnedValue Runtime::addString(ExecutionEngine *engine, const QV4::ValueRef left, const QV4::ValueRef right) +QV4::ReturnedValue Runtime::addString(ExecutionEngine *engine, const Value &left, const Value &right) { - Q_ASSERT(left->isString() || right->isString()); + Q_ASSERT(left.isString() || right.isString()); - if (left->isString() && right->isString()) { - if (!left->stringValue()->d()->length()) - return right->asReturnedValue(); - if (!right->stringValue()->d()->length()) - return left->asReturnedValue(); - return (engine->memoryManager->alloc(left->stringValue()->d(), right->stringValue()->d()))->asReturnedValue(); + if (left.isString() && right.isString()) { + if (!left.stringValue()->d()->length()) + return right.asReturnedValue(); + if (!right.stringValue()->d()->length()) + return left.asReturnedValue(); + return (engine->memoryManager->alloc(left.stringValue()->d(), right.stringValue()->d()))->asReturnedValue(); } Scope scope(engine); - ScopedValue pleft(scope, *left); - ScopedValue pright(scope, *right); + ScopedValue pleft(scope, left); + ScopedValue pright(scope, right); if (!pleft->isString()) pleft = convert_to_string_add(engine, left); @@ -558,25 +558,25 @@ QV4::ReturnedValue Runtime::addString(ExecutionEngine *engine, const QV4::ValueR return (engine->memoryManager->alloc(pleft->stringValue()->d(), pright->stringValue()->d()))->asReturnedValue(); } -void Runtime::setProperty(ExecutionEngine *engine, const ValueRef object, int nameIndex, const ValueRef value) +void Runtime::setProperty(ExecutionEngine *engine, const Value &object, int nameIndex, const Value &value) { Scope scope(engine); ScopedString name(scope, engine->currentContext()->compilationUnit->runtimeStrings[nameIndex]); - ScopedObject o(scope, object->toObject(engine)); + ScopedObject o(scope, object.toObject(engine)); if (!o) return; o->put(name, value); } -ReturnedValue Runtime::getElement(ExecutionEngine *engine, const ValueRef object, const ValueRef index) +ReturnedValue Runtime::getElement(ExecutionEngine *engine, const Value &object, const Value &index) { Scope scope(engine); - uint idx = index->asArrayIndex(); + uint idx = index.asArrayIndex(); ScopedObject o(scope, object); if (!o) { if (idx < UINT_MAX) { - if (String *str = object->asString()) { + if (String *str = object.asString()) { if (idx >= (uint)str->toQString().length()) { return Encode::undefined(); } @@ -585,8 +585,8 @@ ReturnedValue Runtime::getElement(ExecutionEngine *engine, const ValueRef object } } - if (object->isNullOrUndefined()) { - QString message = QStringLiteral("Cannot read property '%1' of %2").arg(index->toQStringNoThrow()).arg(object->toQStringNoThrow()); + if (object.isNullOrUndefined()) { + QString message = QStringLiteral("Cannot read property '%1' of %2").arg(index.toQStringNoThrow()).arg(object.toQStringNoThrow()); return engine->throwTypeError(message); } @@ -605,20 +605,20 @@ ReturnedValue Runtime::getElement(ExecutionEngine *engine, const ValueRef object return o->getIndexed(idx); } - ScopedString name(scope, index->toString(engine)); + ScopedString name(scope, index.toString(engine)); if (scope.hasException()) return Encode::undefined(); return o->get(name); } -void Runtime::setElement(ExecutionEngine *engine, const ValueRef object, const ValueRef index, const ValueRef value) +void Runtime::setElement(ExecutionEngine *engine, const Value &object, const Value &index, const Value &value) { Scope scope(engine); - ScopedObject o(scope, object->toObject(engine)); + ScopedObject o(scope, object.toObject(engine)); if (scope.engine->hasException) return; - uint idx = index->asArrayIndex(); + uint idx = index.asArrayIndex(); if (idx < UINT_MAX) { if (o->arrayType() == Heap::ArrayData::Simple) { Heap::SimpleArrayData *s = static_cast(o->arrayData()); @@ -631,31 +631,31 @@ void Runtime::setElement(ExecutionEngine *engine, const ValueRef object, const V return; } - ScopedString name(scope, index->toString(engine)); + ScopedString name(scope, index.toString(engine)); o->put(name, value); } -ReturnedValue Runtime::foreachIterator(ExecutionEngine *engine, const ValueRef in) +ReturnedValue Runtime::foreachIterator(ExecutionEngine *engine, const Value &in) { Scope scope(engine); ScopedObject o(scope, (Object *)0); - if (!in->isNullOrUndefined()) - o = in->toObject(engine); + if (!in.isNullOrUndefined()) + o = in.toObject(engine); return engine->newForEachIteratorObject(o)->asReturnedValue(); } -ReturnedValue Runtime::foreachNextPropertyName(const ValueRef foreach_iterator) +ReturnedValue Runtime::foreachNextPropertyName(const Value &foreach_iterator) { - Q_ASSERT(foreach_iterator->isObject()); + Q_ASSERT(foreach_iterator.isObject()); - ForEachIteratorObject *it = static_cast(foreach_iterator->objectValue()); + ForEachIteratorObject *it = static_cast(foreach_iterator.objectValue()); Q_ASSERT(it->as()); return it->nextPropertyName(); } -void Runtime::setActivationProperty(ExecutionEngine *engine, int nameIndex, const ValueRef value) +void Runtime::setActivationProperty(ExecutionEngine *engine, int nameIndex, const Value &value) { Scope scope(engine); ScopedString name(scope, engine->currentContext()->compilationUnit->runtimeStrings[nameIndex]); @@ -663,7 +663,7 @@ void Runtime::setActivationProperty(ExecutionEngine *engine, int nameIndex, cons ctx->setProperty(name, value); } -ReturnedValue Runtime::getProperty(ExecutionEngine *engine, const ValueRef object, int nameIndex) +ReturnedValue Runtime::getProperty(ExecutionEngine *engine, const Value &object, int nameIndex) { Scope scope(engine); ScopedString name(scope, engine->currentContext()->compilationUnit->runtimeStrings[nameIndex]); @@ -672,8 +672,8 @@ ReturnedValue Runtime::getProperty(ExecutionEngine *engine, const ValueRef objec if (o) return o->get(name); - if (object->isNullOrUndefined()) { - QString message = QStringLiteral("Cannot read property '%1' of %2").arg(name->toQString()).arg(object->toQStringNoThrow()); + if (object.isNullOrUndefined()) { + QString message = QStringLiteral("Cannot read property '%1' of %2").arg(name->toQString()).arg(object.toQStringNoThrow()); return engine->throwTypeError(message); } @@ -693,36 +693,36 @@ ReturnedValue Runtime::getActivationProperty(ExecutionEngine *engine, int nameIn #endif // V4_BOOTSTRAP -uint RuntimeHelpers::equalHelper(const ValueRef x, const ValueRef y) +uint RuntimeHelpers::equalHelper(const Value &x, const Value &y) { - Q_ASSERT(x->type() != y->type() || (x->isManaged() && (x->isString() != y->isString()))); + Q_ASSERT(x.type() != y.type() || (x.isManaged() && (x.isString() != y.isString()))); - if (x->isNumber() && y->isNumber()) - return x->asDouble() == y->asDouble(); - if (x->isNull() && y->isUndefined()) { + if (x.isNumber() && y.isNumber()) + return x.asDouble() == y.asDouble(); + if (x.isNull() && y.isUndefined()) { return true; - } else if (x->isUndefined() && y->isNull()) { + } else if (x.isUndefined() && y.isNull()) { return true; - } else if (x->isNumber() && y->isString()) { + } else if (x.isNumber() && y.isString()) { double dy = RuntimeHelpers::toNumber(y); - return x->asDouble() == dy; - } else if (x->isString() && y->isNumber()) { + return x.asDouble() == dy; + } else if (x.isString() && y.isNumber()) { double dx = RuntimeHelpers::toNumber(x); - return dx == y->asDouble(); - } else if (x->isBoolean()) { - return Runtime::compareEqual(Primitive::fromDouble((double) x->booleanValue()), y); - } else if (y->isBoolean()) { - return Runtime::compareEqual(x, Primitive::fromDouble((double) y->booleanValue())); + return dx == y.asDouble(); + } else if (x.isBoolean()) { + return Runtime::compareEqual(Primitive::fromDouble((double) x.booleanValue()), y); + } else if (y.isBoolean()) { + return Runtime::compareEqual(x, Primitive::fromDouble((double) y.booleanValue())); } else { #ifdef V4_BOOTSTRAP Q_UNIMPLEMENTED(); #else - if ((x->isNumber() || x->isString()) && y->isObject()) { - Scope scope(y->objectValue()->engine()); + if ((x.isNumber() || x.isString()) && y.isObject()) { + Scope scope(y.objectValue()->engine()); ScopedValue py(scope, RuntimeHelpers::toPrimitive(y, PREFERREDTYPE_HINT)); return Runtime::compareEqual(x, py); - } else if (x->isObject() && (y->isNumber() || y->isString())) { - Scope scope(x->objectValue()->engine()); + } else if (x.isObject() && (y.isNumber() || y.isString())) { + Scope scope(x.objectValue()->engine()); ScopedValue px(scope, RuntimeHelpers::toPrimitive(x, PREFERREDTYPE_HINT)); return Runtime::compareEqual(px, y); } @@ -732,42 +732,42 @@ uint RuntimeHelpers::equalHelper(const ValueRef x, const ValueRef y) return false; } -Bool RuntimeHelpers::strictEqual(const ValueRef x, const ValueRef y) +Bool RuntimeHelpers::strictEqual(const Value &x, const Value &y) { TRACE2(x, y); - if (x->rawValue() == y->rawValue()) + if (x.rawValue() == y.rawValue()) // NaN != NaN - return !x->isNaN(); + return !x.isNaN(); - if (x->isNumber()) - return y->isNumber() && x->asDouble() == y->asDouble(); - if (x->isManaged()) - return y->isManaged() && x->cast()->isEqualTo(y->cast()); + if (x.isNumber()) + return y.isNumber() && x.asDouble() == y.asDouble(); + if (x.isManaged()) + return y.isManaged() && x.cast()->isEqualTo(y.cast()); return false; } -QV4::Bool Runtime::compareGreaterThan(const QV4::ValueRef l, const QV4::ValueRef r) +QV4::Bool Runtime::compareGreaterThan(const Value &l, const Value &r) { TRACE2(l, r); - if (l->isInteger() && r->isInteger()) - return l->integerValue() > r->integerValue(); - if (l->isNumber() && r->isNumber()) - return l->asDouble() > r->asDouble(); - if (l->isString() && r->isString()) { + if (l.isInteger() && r.isInteger()) + return l.integerValue() > r.integerValue(); + if (l.isNumber() && r.isNumber()) + return l.asDouble() > r.asDouble(); + if (l.isString() && r.isString()) { #ifdef V4_BOOTSTRAP Q_UNIMPLEMENTED(); return false; #else - return r->stringValue()->compare(l->stringValue()); + return r.stringValue()->compare(l.stringValue()); #endif } - if (l->isObject() || r->isObject()) { + if (l.isObject() || r.isObject()) { #ifdef V4_BOOTSTRAP Q_UNIMPLEMENTED(); #else - QV4::ExecutionEngine *e = (l->isObject() ? l->objectValue() : r->objectValue())->engine(); + QV4::ExecutionEngine *e = (l.isObject() ? l.objectValue() : r.objectValue())->engine(); QV4::Scope scope(e); QV4::ScopedValue pl(scope, RuntimeHelpers::toPrimitive(l, QV4::NUMBER_HINT)); QV4::ScopedValue pr(scope, RuntimeHelpers::toPrimitive(r, QV4::NUMBER_HINT)); @@ -780,27 +780,27 @@ QV4::Bool Runtime::compareGreaterThan(const QV4::ValueRef l, const QV4::ValueRef return dl > dr; } -QV4::Bool Runtime::compareLessThan(const QV4::ValueRef l, const QV4::ValueRef r) +QV4::Bool Runtime::compareLessThan(const Value &l, const Value &r) { TRACE2(l, r); - if (l->isInteger() && r->isInteger()) - return l->integerValue() < r->integerValue(); - if (l->isNumber() && r->isNumber()) - return l->asDouble() < r->asDouble(); - if (l->isString() && r->isString()) { + if (l.isInteger() && r.isInteger()) + return l.integerValue() < r.integerValue(); + if (l.isNumber() && r.isNumber()) + return l.asDouble() < r.asDouble(); + if (l.isString() && r.isString()) { #ifdef V4_BOOTSTRAP Q_UNIMPLEMENTED(); return false; #else - return l->stringValue()->compare(r->stringValue()); + return l.stringValue()->compare(r.stringValue()); #endif } - if (l->isObject() || r->isObject()) { + if (l.isObject() || r.isObject()) { #ifdef V4_BOOTSTRAP Q_UNIMPLEMENTED(); #else - QV4::ExecutionEngine *e = (l->isObject() ? l->objectValue() : r->objectValue())->engine(); + QV4::ExecutionEngine *e = (l.isObject() ? l.objectValue() : r.objectValue())->engine(); QV4::Scope scope(e); QV4::ScopedValue pl(scope, RuntimeHelpers::toPrimitive(l, QV4::NUMBER_HINT)); QV4::ScopedValue pr(scope, RuntimeHelpers::toPrimitive(r, QV4::NUMBER_HINT)); @@ -813,27 +813,27 @@ QV4::Bool Runtime::compareLessThan(const QV4::ValueRef l, const QV4::ValueRef r) return dl < dr; } -QV4::Bool Runtime::compareGreaterEqual(const QV4::ValueRef l, const QV4::ValueRef r) +QV4::Bool Runtime::compareGreaterEqual(const Value &l, const Value &r) { TRACE2(l, r); - if (l->isInteger() && r->isInteger()) - return l->integerValue() >= r->integerValue(); - if (l->isNumber() && r->isNumber()) - return l->asDouble() >= r->asDouble(); - if (l->isString() && r->isString()) { + if (l.isInteger() && r.isInteger()) + return l.integerValue() >= r.integerValue(); + if (l.isNumber() && r.isNumber()) + return l.asDouble() >= r.asDouble(); + if (l.isString() && r.isString()) { #ifdef V4_BOOTSTRAP Q_UNIMPLEMENTED(); return false; #else - return !l->stringValue()->compare(r->stringValue()); + return !l.stringValue()->compare(r.stringValue()); #endif } - if (l->isObject() || r->isObject()) { + if (l.isObject() || r.isObject()) { #ifdef V4_BOOTSTRAP Q_UNIMPLEMENTED(); #else - QV4::ExecutionEngine *e = (l->isObject() ? l->objectValue() : r->objectValue())->engine(); + QV4::ExecutionEngine *e = (l.isObject() ? l.objectValue() : r.objectValue())->engine(); QV4::Scope scope(e); QV4::ScopedValue pl(scope, RuntimeHelpers::toPrimitive(l, QV4::NUMBER_HINT)); QV4::ScopedValue pr(scope, RuntimeHelpers::toPrimitive(r, QV4::NUMBER_HINT)); @@ -846,27 +846,27 @@ QV4::Bool Runtime::compareGreaterEqual(const QV4::ValueRef l, const QV4::ValueRe return dl >= dr; } -QV4::Bool Runtime::compareLessEqual(const QV4::ValueRef l, const QV4::ValueRef r) +QV4::Bool Runtime::compareLessEqual(const Value &l, const Value &r) { TRACE2(l, r); - if (l->isInteger() && r->isInteger()) - return l->integerValue() <= r->integerValue(); - if (l->isNumber() && r->isNumber()) - return l->asDouble() <= r->asDouble(); - if (l->isString() && r->isString()) { + if (l.isInteger() && r.isInteger()) + return l.integerValue() <= r.integerValue(); + if (l.isNumber() && r.isNumber()) + return l.asDouble() <= r.asDouble(); + if (l.isString() && r.isString()) { #ifdef V4_BOOTSTRAP Q_UNIMPLEMENTED(); return false; #else - return !r->stringValue()->compare(l->stringValue()); + return !r.stringValue()->compare(l.stringValue()); #endif } - if (l->isObject() || r->isObject()) { + if (l.isObject() || r.isObject()) { #ifdef V4_BOOTSTRAP Q_UNIMPLEMENTED(); #else - QV4::ExecutionEngine *e = (l->isObject() ? l->objectValue() : r->objectValue())->engine(); + QV4::ExecutionEngine *e = (l.isObject() ? l.objectValue() : r.objectValue())->engine(); QV4::Scope scope(e); QV4::ScopedValue pl(scope, RuntimeHelpers::toPrimitive(l, QV4::NUMBER_HINT)); QV4::ScopedValue pr(scope, RuntimeHelpers::toPrimitive(r, QV4::NUMBER_HINT)); @@ -880,7 +880,7 @@ QV4::Bool Runtime::compareLessEqual(const QV4::ValueRef l, const QV4::ValueRef r } #ifndef V4_BOOTSTRAP -Bool Runtime::compareInstanceof(ExecutionEngine *engine, const ValueRef left, const ValueRef right) +Bool Runtime::compareInstanceof(ExecutionEngine *engine, const Value &left, const Value &right) { TRACE2(left, right); @@ -889,7 +889,7 @@ Bool Runtime::compareInstanceof(ExecutionEngine *engine, const ValueRef left, co return v->booleanValue(); } -uint Runtime::compareIn(ExecutionEngine *engine, const ValueRef left, const ValueRef right) +uint Runtime::compareIn(ExecutionEngine *engine, const Value &left, const Value &right) { TRACE2(left, right); @@ -986,11 +986,11 @@ ReturnedValue Runtime::callPropertyLookup(ExecutionEngine *engine, uint index, C return v.objectValue()->call(callData); } -ReturnedValue Runtime::callElement(ExecutionEngine *engine, const ValueRef index, CallData *callData) +ReturnedValue Runtime::callElement(ExecutionEngine *engine, const Value &index, CallData *callData) { Scope scope(engine); ScopedObject baseObject(scope, callData->thisObject.toObject(engine)); - ScopedString s(scope, index->toString(engine)); + ScopedString s(scope, index.toString(engine)); if (scope.engine->hasException) return Encode::undefined(); @@ -1003,12 +1003,12 @@ ReturnedValue Runtime::callElement(ExecutionEngine *engine, const ValueRef index return o->call(callData); } -ReturnedValue Runtime::callValue(ExecutionEngine *engine, const ValueRef func, CallData *callData) +ReturnedValue Runtime::callValue(ExecutionEngine *engine, const Value &func, CallData *callData) { - if (!func->isObject()) + if (!func.isObject()) return engine->throwTypeError(); - return func->objectValue()->call(callData); + return func.objectValue()->call(callData); } @@ -1042,9 +1042,9 @@ ReturnedValue Runtime::constructActivationProperty(ExecutionEngine *engine, int return f->construct(callData); } -ReturnedValue Runtime::constructValue(ExecutionEngine *engine, const ValueRef func, CallData *callData) +ReturnedValue Runtime::constructValue(ExecutionEngine *engine, const Value &func, CallData *callData) { - Object *f = func->asObject(); + Object *f = func.asObject(); if (!f) return engine->throwTypeError(); @@ -1078,17 +1078,17 @@ ReturnedValue Runtime::constructPropertyLookup(ExecutionEngine *engine, uint ind } -void Runtime::throwException(ExecutionEngine *engine, const ValueRef value) +void Runtime::throwException(ExecutionEngine *engine, const Value &value) { - if (!value->isEmpty()) + if (!value.isEmpty()) engine->throwError(value); } -ReturnedValue Runtime::typeofValue(ExecutionEngine *engine, const ValueRef value) +ReturnedValue Runtime::typeofValue(ExecutionEngine *engine, const Value &value) { Scope scope(engine); ScopedString res(scope); - switch (value->type()) { + switch (value.type()) { case Value::Undefined_Type: res = engine->id_undefined; break; @@ -1099,9 +1099,9 @@ ReturnedValue Runtime::typeofValue(ExecutionEngine *engine, const ValueRef value res = engine->id_boolean; break; case Value::Managed_Type: - if (value->isString()) + if (value.isString()) res = engine->id_string; - else if (value->objectValue()->asFunctionObject()) + else if (value.objectValue()->asFunctionObject()) res = engine->id_function; else res = engine->id_object; // ### implementation-defined @@ -1124,32 +1124,32 @@ QV4::ReturnedValue Runtime::typeofName(ExecutionEngine *engine, int nameIndex) return Runtime::typeofValue(engine, prop); } -QV4::ReturnedValue Runtime::typeofMember(ExecutionEngine *engine, const ValueRef base, int nameIndex) +QV4::ReturnedValue Runtime::typeofMember(ExecutionEngine *engine, const Value &base, int nameIndex) { Scope scope(engine); ScopedString name(scope, engine->currentContext()->compilationUnit->runtimeStrings[nameIndex]); - ScopedObject obj(scope, base->toObject(engine)); + ScopedObject obj(scope, base.toObject(engine)); if (scope.engine->hasException) return Encode::undefined(); ScopedValue prop(scope, obj->get(name)); return Runtime::typeofValue(engine, prop); } -QV4::ReturnedValue Runtime::typeofElement(ExecutionEngine *engine, const ValueRef base, const ValueRef index) +QV4::ReturnedValue Runtime::typeofElement(ExecutionEngine *engine, const Value &base, const Value &index) { Scope scope(engine); - ScopedString name(scope, index->toString(engine)); - ScopedObject obj(scope, base->toObject(engine)); + ScopedString name(scope, index.toString(engine)); + ScopedObject obj(scope, base.toObject(engine)); if (scope.engine->hasException) return Encode::undefined(); ScopedValue prop(scope, obj->get(name)); return Runtime::typeofValue(engine, prop); } -void Runtime::pushWithScope(const ValueRef o, ExecutionEngine *engine) +void Runtime::pushWithScope(const Value &o, ExecutionEngine *engine) { Scope scope(engine); - ScopedObject obj(scope, o->toObject(engine)); + ScopedObject obj(scope, o.toObject(engine)); ScopedContext ctx(scope, engine->currentContext()); ctx->newWithContext(obj); } @@ -1248,42 +1248,42 @@ QV4::ReturnedValue Runtime::setupArgumentsObject(ExecutionEngine *engine) #endif // V4_BOOTSTRAP -QV4::ReturnedValue Runtime::increment(const QV4::ValueRef value) +QV4::ReturnedValue Runtime::increment(const Value &value) { TRACE1(value); - if (value->isInteger() && value->integerValue() < INT_MAX) - return Encode(value->integerValue() + 1); + if (value.isInteger() && value.integerValue() < INT_MAX) + return Encode(value.integerValue() + 1); else { - double d = value->toNumber(); + double d = value.toNumber(); return Encode(d + 1.); } } -QV4::ReturnedValue Runtime::decrement(const QV4::ValueRef value) +QV4::ReturnedValue Runtime::decrement(const Value &value) { TRACE1(value); - if (value->isInteger() && value->integerValue() > INT_MIN) - return Encode(value->integerValue() - 1); + if (value.isInteger() && value.integerValue() > INT_MIN) + return Encode(value.integerValue() - 1); else { - double d = value->toNumber(); + double d = value.toNumber(); return Encode(d - 1.); } } #ifndef V4_BOOTSTRAP -QV4::ReturnedValue RuntimeHelpers::toString(ExecutionEngine *engine, const QV4::ValueRef value) +QV4::ReturnedValue RuntimeHelpers::toString(ExecutionEngine *engine, const Value &value) { - if (value->isString()) + if (value.isString()) return value.asReturnedValue(); return RuntimeHelpers::convertToString(engine, value)->asReturnedValue(); } -QV4::ReturnedValue RuntimeHelpers::toObject(ExecutionEngine *engine, const QV4::ValueRef value) +QV4::ReturnedValue RuntimeHelpers::toObject(ExecutionEngine *engine, const Value &value) { - if (value->isObject()) + if (value.isObject()) return value.asReturnedValue(); Heap::Object *o = RuntimeHelpers::convertToObject(engine, value); @@ -1295,16 +1295,16 @@ QV4::ReturnedValue RuntimeHelpers::toObject(ExecutionEngine *engine, const QV4:: #endif // V4_BOOTSTRAP -ReturnedValue Runtime::toDouble(const ValueRef value) +ReturnedValue Runtime::toDouble(const Value &value) { TRACE1(value); - return Encode(value->toNumber()); + return Encode(value.toNumber()); } -int Runtime::toInt(const ValueRef value) +int Runtime::toInt(const Value &value) { TRACE1(value); - return value->toInt32(); + return value.toInt32(); } int Runtime::doubleToInt(const double &d) @@ -1313,10 +1313,10 @@ int Runtime::doubleToInt(const double &d) return Primitive::toInt32(d); } -unsigned Runtime::toUInt(const ValueRef value) +unsigned Runtime::toUInt(const Value &value) { TRACE1(value); - return value->toUInt32(); + return value.toUInt32(); } unsigned Runtime::doubleToUInt(const double &d) @@ -1355,7 +1355,7 @@ ReturnedValue Runtime::getQmlScopeObject(NoThrowEngine *engine) return QObjectWrapper::wrap(engine, c->getScopeObject()); } -ReturnedValue Runtime::getQmlQObjectProperty(ExecutionEngine *engine, const ValueRef object, int propertyIndex, bool captureRequired) +ReturnedValue Runtime::getQmlQObjectProperty(ExecutionEngine *engine, const Value &object, int propertyIndex, bool captureRequired) { Scope scope(engine); QV4::Scoped wrapper(scope, object); @@ -1380,7 +1380,7 @@ QV4::ReturnedValue Runtime::getQmlAttachedProperty(ExecutionEngine *engine, int return QV4::QObjectWrapper::getProperty(attachedObject, ctx, propertyIndex, /*captureRequired*/true); } -ReturnedValue Runtime::getQmlSingletonQObjectProperty(ExecutionEngine *engine, const ValueRef object, int propertyIndex, bool captureRequired) +ReturnedValue Runtime::getQmlSingletonQObjectProperty(ExecutionEngine *engine, const Value &object, int propertyIndex, bool captureRequired) { Scope scope(engine); QV4::Scoped wrapper(scope, object); @@ -1392,7 +1392,7 @@ ReturnedValue Runtime::getQmlSingletonQObjectProperty(ExecutionEngine *engine, c return QV4::QObjectWrapper::getProperty(wrapper->singletonObject(), ctx, propertyIndex, captureRequired); } -void Runtime::setQmlQObjectProperty(ExecutionEngine *engine, const ValueRef object, int propertyIndex, const ValueRef value) +void Runtime::setQmlQObjectProperty(ExecutionEngine *engine, const Value &object, int propertyIndex, const Value &value) { Scope scope(engine); QV4::Scoped wrapper(scope, object); diff --git a/src/qml/jsruntime/qv4runtime_p.h b/src/qml/jsruntime/qv4runtime_p.h index 4d70a66156..13c28cfea7 100644 --- a/src/qml/jsruntime/qv4runtime_p.h +++ b/src/qml/jsruntime/qv4runtime_p.h @@ -92,40 +92,40 @@ struct Q_QML_PRIVATE_EXPORT Runtime { static ReturnedValue callActivationProperty(ExecutionEngine *engine, int nameIndex, CallData *callData); static ReturnedValue callProperty(ExecutionEngine *engine, int nameIndex, CallData *callData); static ReturnedValue callPropertyLookup(ExecutionEngine *engine, uint index, CallData *callData); - static ReturnedValue callElement(ExecutionEngine *engine, const ValueRef index, CallData *callData); - static ReturnedValue callValue(ExecutionEngine *engine, const ValueRef func, CallData *callData); + static ReturnedValue callElement(ExecutionEngine *engine, const Value &index, CallData *callData); + static ReturnedValue callValue(ExecutionEngine *engine, const Value &func, CallData *callData); // construct static ReturnedValue constructGlobalLookup(ExecutionEngine *engine, uint index, CallData *callData); static ReturnedValue constructActivationProperty(ExecutionEngine *engine, int nameIndex, CallData *callData); static ReturnedValue constructProperty(ExecutionEngine *engine, int nameIndex, CallData *callData); static ReturnedValue constructPropertyLookup(ExecutionEngine *engine, uint index, CallData *callData); - static ReturnedValue constructValue(ExecutionEngine *engine, const ValueRef func, CallData *callData); + static ReturnedValue constructValue(ExecutionEngine *engine, const Value &func, CallData *callData); // set & get - static void setActivationProperty(ExecutionEngine *engine, int nameIndex, const ValueRef value); - static void setProperty(ExecutionEngine *engine, const ValueRef object, int nameIndex, const ValueRef value); - static void setElement(ExecutionEngine *engine, const ValueRef object, const ValueRef index, const ValueRef value); - static ReturnedValue getProperty(ExecutionEngine *engine, const ValueRef object, int nameIndex); + static void setActivationProperty(ExecutionEngine *engine, int nameIndex, const Value &value); + static void setProperty(ExecutionEngine *engine, const Value &object, int nameIndex, const Value &value); + static void setElement(ExecutionEngine *engine, const Value &object, const Value &index, const Value &value); + static ReturnedValue getProperty(ExecutionEngine *engine, const Value &object, int nameIndex); static ReturnedValue getActivationProperty(ExecutionEngine *engine, int nameIndex); - static ReturnedValue getElement(ExecutionEngine *engine, const ValueRef object, const ValueRef index); + static ReturnedValue getElement(ExecutionEngine *engine, const Value &object, const Value &index); // typeof - static ReturnedValue typeofValue(ExecutionEngine *engine, const ValueRef val); + static ReturnedValue typeofValue(ExecutionEngine *engine, const Value &val); static ReturnedValue typeofName(ExecutionEngine *engine, int nameIndex); - static ReturnedValue typeofMember(ExecutionEngine *engine, const ValueRef base, int nameIndex); - static ReturnedValue typeofElement(ExecutionEngine *engine, const ValueRef base, const ValueRef index); + static ReturnedValue typeofMember(ExecutionEngine *engine, const Value &base, int nameIndex); + static ReturnedValue typeofElement(ExecutionEngine *engine, const Value &base, const Value &index); // delete - static ReturnedValue deleteElement(ExecutionEngine *engine, const ValueRef base, const ValueRef index); - static ReturnedValue deleteMember(ExecutionEngine *engine, const ValueRef base, int nameIndex); - static ReturnedValue deleteMemberString(ExecutionEngine *engine, const ValueRef base, String *name); + static ReturnedValue deleteElement(ExecutionEngine *engine, const Value &base, const Value &index); + static ReturnedValue deleteMember(ExecutionEngine *engine, const Value &base, int nameIndex); + static ReturnedValue deleteMemberString(ExecutionEngine *engine, const Value &base, String *name); static ReturnedValue deleteName(ExecutionEngine *engine, int nameIndex); // exceptions & scopes - static void throwException(ExecutionEngine *engine, const ValueRef value); + static void throwException(ExecutionEngine *engine, const Value &value); static ReturnedValue unwindException(ExecutionEngine *engine); - static void pushWithScope(const ValueRef o, ExecutionEngine *engine); + static void pushWithScope(const Value &o, ExecutionEngine *engine); static void pushCatchScope(NoThrowEngine *engine, int exceptionVarNameIndex); static void popScope(ExecutionEngine *engine); @@ -143,66 +143,66 @@ struct Q_QML_PRIVATE_EXPORT Runtime { static ReturnedValue regexpLiteral(ExecutionEngine *engine, int id); // foreach - static ReturnedValue foreachIterator(ExecutionEngine *engine, const ValueRef in); - static ReturnedValue foreachNextPropertyName(const ValueRef foreach_iterator); + static ReturnedValue foreachIterator(ExecutionEngine *engine, const Value &in); + static ReturnedValue foreachNextPropertyName(const Value &foreach_iterator); // unary operators - typedef ReturnedValue (*UnaryOperation)(const ValueRef); - static ReturnedValue uPlus(const ValueRef value); - static ReturnedValue uMinus(const ValueRef value); - static ReturnedValue uNot(const ValueRef value); - static ReturnedValue complement(const ValueRef value); - static ReturnedValue increment(const ValueRef value); - static ReturnedValue decrement(const ValueRef value); + typedef ReturnedValue (*UnaryOperation)(const Value &value); + static ReturnedValue uPlus(const Value &value); + static ReturnedValue uMinus(const Value &value); + static ReturnedValue uNot(const Value &value); + static ReturnedValue complement(const Value &value); + static ReturnedValue increment(const Value &value); + static ReturnedValue decrement(const Value &value); // binary operators - typedef ReturnedValue (*BinaryOperation)(const ValueRef left, const ValueRef right); - typedef ReturnedValue (*BinaryOperationContext)(ExecutionEngine *engine, const ValueRef left, const ValueRef right); - - static ReturnedValue instanceof(ExecutionEngine *engine, const ValueRef left, const ValueRef right); - static ReturnedValue in(ExecutionEngine *engine, const ValueRef left, const ValueRef right); - static ReturnedValue add(ExecutionEngine *engine, const ValueRef left, const ValueRef right); - static ReturnedValue addString(ExecutionEngine *engine, const ValueRef left, const ValueRef right); - static ReturnedValue bitOr(const ValueRef left, const ValueRef right); - static ReturnedValue bitXor(const ValueRef left, const ValueRef right); - static ReturnedValue bitAnd(const ValueRef left, const ValueRef right); - static ReturnedValue sub(const ValueRef left, const ValueRef right); - static ReturnedValue mul(const ValueRef left, const ValueRef right); - static ReturnedValue div(const ValueRef left, const ValueRef right); - static ReturnedValue mod(const ValueRef left, const ValueRef right); - static ReturnedValue shl(const ValueRef left, const ValueRef right); - static ReturnedValue shr(const ValueRef left, const ValueRef right); - static ReturnedValue ushr(const ValueRef left, const ValueRef right); - static ReturnedValue greaterThan(const ValueRef left, const ValueRef right); - static ReturnedValue lessThan(const ValueRef left, const ValueRef right); - static ReturnedValue greaterEqual(const ValueRef left, const ValueRef right); - static ReturnedValue lessEqual(const ValueRef left, const ValueRef right); - static ReturnedValue equal(const ValueRef left, const ValueRef right); - static ReturnedValue notEqual(const ValueRef left, const ValueRef right); - static ReturnedValue strictEqual(const ValueRef left, const ValueRef right); - static ReturnedValue strictNotEqual(const ValueRef left, const ValueRef right); + typedef ReturnedValue (*BinaryOperation)(const Value &left, const Value &right); + typedef ReturnedValue (*BinaryOperationContext)(ExecutionEngine *engine, const Value &left, const Value &right); + + static ReturnedValue instanceof(ExecutionEngine *engine, const Value &left, const Value &right); + static ReturnedValue in(ExecutionEngine *engine, const Value &left, const Value &right); + static ReturnedValue add(ExecutionEngine *engine, const Value &left, const Value &right); + static ReturnedValue addString(ExecutionEngine *engine, const Value &left, const Value &right); + static ReturnedValue bitOr(const Value &left, const Value &right); + static ReturnedValue bitXor(const Value &left, const Value &right); + static ReturnedValue bitAnd(const Value &left, const Value &right); + static ReturnedValue sub(const Value &left, const Value &right); + static ReturnedValue mul(const Value &left, const Value &right); + static ReturnedValue div(const Value &left, const Value &right); + static ReturnedValue mod(const Value &left, const Value &right); + static ReturnedValue shl(const Value &left, const Value &right); + static ReturnedValue shr(const Value &left, const Value &right); + static ReturnedValue ushr(const Value &left, const Value &right); + static ReturnedValue greaterThan(const Value &left, const Value &right); + static ReturnedValue lessThan(const Value &left, const Value &right); + static ReturnedValue greaterEqual(const Value &left, const Value &right); + static ReturnedValue lessEqual(const Value &left, const Value &right); + static ReturnedValue equal(const Value &left, const Value &right); + static ReturnedValue notEqual(const Value &left, const Value &right); + static ReturnedValue strictEqual(const Value &left, const Value &right); + static ReturnedValue strictNotEqual(const Value &left, const Value &right); // comparisons - typedef Bool (*CompareOperation)(const ValueRef left, const ValueRef right); - static Bool compareGreaterThan(const ValueRef l, const ValueRef r); - static Bool compareLessThan(const ValueRef l, const ValueRef r); - static Bool compareGreaterEqual(const ValueRef l, const ValueRef r); - static Bool compareLessEqual(const ValueRef l, const ValueRef r); - static Bool compareEqual(const ValueRef left, const ValueRef right); - static Bool compareNotEqual(const ValueRef left, const ValueRef right); - static Bool compareStrictEqual(const ValueRef left, const ValueRef right); - static Bool compareStrictNotEqual(const ValueRef left, const ValueRef right); - - typedef Bool (*CompareOperationContext)(ExecutionEngine *engine, const ValueRef left, const ValueRef right); - static Bool compareInstanceof(ExecutionEngine *engine, const ValueRef left, const ValueRef right); - static Bool compareIn(ExecutionEngine *engine, const ValueRef left, const ValueRef right); + typedef Bool (*CompareOperation)(const Value &left, const Value &right); + static Bool compareGreaterThan(const Value &l, const Value &r); + static Bool compareLessThan(const Value &l, const Value &r); + static Bool compareGreaterEqual(const Value &l, const Value &r); + static Bool compareLessEqual(const Value &l, const Value &r); + static Bool compareEqual(const Value &left, const Value &right); + static Bool compareNotEqual(const Value &left, const Value &right); + static Bool compareStrictEqual(const Value &left, const Value &right); + static Bool compareStrictNotEqual(const Value &left, const Value &right); + + typedef Bool (*CompareOperationContext)(ExecutionEngine *engine, const Value &left, const Value &right); + static Bool compareInstanceof(ExecutionEngine *engine, const Value &left, const Value &right); + static Bool compareIn(ExecutionEngine *engine, const Value &left, const Value &right); // conversions - static Bool toBoolean(const ValueRef value); - static ReturnedValue toDouble(const ValueRef value); - static int toInt(const ValueRef value); + static Bool toBoolean(const Value &value); + static ReturnedValue toDouble(const Value &value); + static int toInt(const Value &value); static int doubleToInt(const double &d); - static unsigned toUInt(const ValueRef value); + static unsigned toUInt(const Value &value); static unsigned doubleToUInt(const double &d); // qml @@ -212,175 +212,175 @@ struct Q_QML_PRIVATE_EXPORT Runtime { static ReturnedValue getQmlScopeObject(NoThrowEngine *ctx); static ReturnedValue getQmlSingleton(NoThrowEngine *ctx, int nameIndex); static ReturnedValue getQmlAttachedProperty(ExecutionEngine *engine, int attachedPropertiesId, int propertyIndex); - static ReturnedValue getQmlQObjectProperty(ExecutionEngine *engine, const ValueRef object, int propertyIndex, bool captureRequired); - static ReturnedValue getQmlSingletonQObjectProperty(ExecutionEngine *engine, const ValueRef object, int propertyIndex, bool captureRequired); - static void setQmlQObjectProperty(ExecutionEngine *engine, const ValueRef object, int propertyIndex, const ValueRef value); + static ReturnedValue getQmlQObjectProperty(ExecutionEngine *engine, const Value &object, int propertyIndex, bool captureRequired); + static ReturnedValue getQmlSingletonQObjectProperty(ExecutionEngine *engine, const Value &object, int propertyIndex, bool captureRequired); + static void setQmlQObjectProperty(ExecutionEngine *engine, const Value &object, int propertyIndex, const Value &value); }; struct Q_QML_PRIVATE_EXPORT RuntimeHelpers { static ReturnedValue objectDefaultValue(Object *object, int typeHint); - static ReturnedValue toPrimitive(const ValueRef value, int typeHint); + static ReturnedValue toPrimitive(const Value &value, int typeHint); static double stringToNumber(const QString &s); static Heap::String *stringFromNumber(ExecutionEngine *engine, double number); - static double toNumber(const ValueRef value); + static double toNumber(const Value &value); static void numberToString(QString *result, double num, int radix = 10); - static ReturnedValue toString(ExecutionEngine *engine, const ValueRef value); - static Heap::String *convertToString(ExecutionEngine *engine, const ValueRef value); + static ReturnedValue toString(ExecutionEngine *engine, const Value &value); + static Heap::String *convertToString(ExecutionEngine *engine, const Value &value); - static ReturnedValue toObject(ExecutionEngine *engine, const ValueRef value); - static Heap::Object *convertToObject(ExecutionEngine *engine, const ValueRef value); + static ReturnedValue toObject(ExecutionEngine *engine, const Value &value); + static Heap::Object *convertToObject(ExecutionEngine *engine, const Value &value); - static Bool equalHelper(const ValueRef x, const ValueRef y); - static Bool strictEqual(const ValueRef x, const ValueRef y); + static Bool equalHelper(const Value &x, const Value &y); + static Bool strictEqual(const Value &x, const Value &y); - static ReturnedValue addHelper(ExecutionEngine *engine, const ValueRef left, const ValueRef right); + static ReturnedValue addHelper(ExecutionEngine *engine, const Value &left, const Value &right); }; // type conversion and testing #ifndef V4_BOOTSTRAP -inline ReturnedValue RuntimeHelpers::toPrimitive(const ValueRef value, int typeHint) +inline ReturnedValue RuntimeHelpers::toPrimitive(const Value &value, int typeHint) { - Object *o = value->asObject(); + Object *o = value.asObject(); if (!o) return value.asReturnedValue(); return RuntimeHelpers::objectDefaultValue(o, typeHint); } #endif -inline double RuntimeHelpers::toNumber(const ValueRef value) +inline double RuntimeHelpers::toNumber(const Value &value) { - return value->toNumber(); + return value.toNumber(); } -inline ReturnedValue Runtime::uPlus(const ValueRef value) +inline ReturnedValue Runtime::uPlus(const Value &value) { TRACE1(value); - if (value->isNumber()) + if (value.isNumber()) return value.asReturnedValue(); - if (value->integerCompatible()) - return Encode(value->int_32); + if (value.integerCompatible()) + return Encode(value.int_32); - double n = value->toNumberImpl(); + double n = value.toNumberImpl(); return Encode(n); } -inline ReturnedValue Runtime::uMinus(const ValueRef value) +inline ReturnedValue Runtime::uMinus(const Value &value) { TRACE1(value); // +0 != -0, so we need to convert to double when negating 0 - if (value->isInteger() && value->integerValue()) - return Encode(-value->integerValue()); + if (value.isInteger() && value.integerValue()) + return Encode(-value.integerValue()); else { double n = RuntimeHelpers::toNumber(value); return Encode(-n); } } -inline ReturnedValue Runtime::complement(const ValueRef value) +inline ReturnedValue Runtime::complement(const Value &value) { TRACE1(value); - int n = value->toInt32(); + int n = value.toInt32(); return Encode((int)~n); } -inline ReturnedValue Runtime::uNot(const ValueRef value) +inline ReturnedValue Runtime::uNot(const Value &value) { TRACE1(value); - bool b = value->toBoolean(); + bool b = value.toBoolean(); return Encode(!b); } // binary operators -inline ReturnedValue Runtime::bitOr(const ValueRef left, const ValueRef right) +inline ReturnedValue Runtime::bitOr(const Value &left, const Value &right) { TRACE2(left, right); - int lval = left->toInt32(); - int rval = right->toInt32(); + int lval = left.toInt32(); + int rval = right.toInt32(); return Encode(lval | rval); } -inline ReturnedValue Runtime::bitXor(const ValueRef left, const ValueRef right) +inline ReturnedValue Runtime::bitXor(const Value &left, const Value &right) { TRACE2(left, right); - int lval = left->toInt32(); - int rval = right->toInt32(); + int lval = left.toInt32(); + int rval = right.toInt32(); return Encode(lval ^ rval); } -inline ReturnedValue Runtime::bitAnd(const ValueRef left, const ValueRef right) +inline ReturnedValue Runtime::bitAnd(const Value &left, const Value &right) { TRACE2(left, right); - int lval = left->toInt32(); - int rval = right->toInt32(); + int lval = left.toInt32(); + int rval = right.toInt32(); return Encode(lval & rval); } #ifndef V4_BOOTSTRAP -inline ReturnedValue Runtime::add(ExecutionEngine *engine, const ValueRef left, const ValueRef right) +inline ReturnedValue Runtime::add(ExecutionEngine *engine, const Value &left, const Value &right) { TRACE2(left, right); - if (Q_LIKELY(left->isInteger() && right->isInteger())) - return add_int32(left->integerValue(), right->integerValue()); - if (left->isNumber() && right->isNumber()) - return Primitive::fromDouble(left->asDouble() + right->asDouble()).asReturnedValue(); + if (Q_LIKELY(left.isInteger() && right.isInteger())) + return add_int32(left.integerValue(), right.integerValue()); + if (left.isNumber() && right.isNumber()) + return Primitive::fromDouble(left.asDouble() + right.asDouble()).asReturnedValue(); return RuntimeHelpers::addHelper(engine, left, right); } #endif // V4_BOOTSTRAP -inline ReturnedValue Runtime::sub(const ValueRef left, const ValueRef right) +inline ReturnedValue Runtime::sub(const Value &left, const Value &right) { TRACE2(left, right); - if (Q_LIKELY(left->isInteger() && right->isInteger())) - return sub_int32(left->integerValue(), right->integerValue()); + if (Q_LIKELY(left.isInteger() && right.isInteger())) + return sub_int32(left.integerValue(), right.integerValue()); - double lval = left->isNumber() ? left->asDouble() : left->toNumberImpl(); - double rval = right->isNumber() ? right->asDouble() : right->toNumberImpl(); + double lval = left.isNumber() ? left.asDouble() : left.toNumberImpl(); + double rval = right.isNumber() ? right.asDouble() : right.toNumberImpl(); return Primitive::fromDouble(lval - rval).asReturnedValue(); } -inline ReturnedValue Runtime::mul(const ValueRef left, const ValueRef right) +inline ReturnedValue Runtime::mul(const Value &left, const Value &right) { TRACE2(left, right); - if (Q_LIKELY(left->isInteger() && right->isInteger())) - return mul_int32(left->integerValue(), right->integerValue()); + if (Q_LIKELY(left.isInteger() && right.isInteger())) + return mul_int32(left.integerValue(), right.integerValue()); - double lval = left->isNumber() ? left->asDouble() : left->toNumberImpl(); - double rval = right->isNumber() ? right->asDouble() : right->toNumberImpl(); + double lval = left.isNumber() ? left.asDouble() : left.toNumberImpl(); + double rval = right.isNumber() ? right.asDouble() : right.toNumberImpl(); return Primitive::fromDouble(lval * rval).asReturnedValue(); } -inline ReturnedValue Runtime::div(const ValueRef left, const ValueRef right) +inline ReturnedValue Runtime::div(const Value &left, const Value &right) { TRACE2(left, right); - double lval = left->toNumber(); - double rval = right->toNumber(); + double lval = left.toNumber(); + double rval = right.toNumber(); return Primitive::fromDouble(lval / rval).asReturnedValue(); } -inline ReturnedValue Runtime::mod(const ValueRef left, const ValueRef right) +inline ReturnedValue Runtime::mod(const Value &left, const Value &right) { TRACE2(left, right); - if (Value::integerCompatible(*left, *right) && right->integerValue() != 0) { - int intRes = left->integerValue() % right->integerValue(); - if (intRes != 0 || left->integerValue() >= 0) + if (Value::integerCompatible(left, right) && right.integerValue() != 0) { + int intRes = left.integerValue() % right.integerValue(); + if (intRes != 0 || left.integerValue() >= 0) return Encode(intRes); } @@ -389,36 +389,36 @@ inline ReturnedValue Runtime::mod(const ValueRef left, const ValueRef right) return Primitive::fromDouble(std::fmod(lval, rval)).asReturnedValue(); } -inline ReturnedValue Runtime::shl(const ValueRef left, const ValueRef right) +inline ReturnedValue Runtime::shl(const Value &left, const Value &right) { TRACE2(left, right); - int lval = left->toInt32(); - int rval = right->toInt32() & 0x1f; + int lval = left.toInt32(); + int rval = right.toInt32() & 0x1f; return Encode((int)(lval << rval)); } -inline ReturnedValue Runtime::shr(const ValueRef left, const ValueRef right) +inline ReturnedValue Runtime::shr(const Value &left, const Value &right) { TRACE2(left, right); - int lval = left->toInt32(); - unsigned rval = right->toUInt32() & 0x1f; + int lval = left.toInt32(); + unsigned rval = right.toUInt32() & 0x1f; return Encode((int)(lval >> rval)); } -inline ReturnedValue Runtime::ushr(const ValueRef left, const ValueRef right) +inline ReturnedValue Runtime::ushr(const Value &left, const Value &right) { TRACE2(left, right); - unsigned lval = left->toUInt32(); - unsigned rval = right->toUInt32() & 0x1f; + unsigned lval = left.toUInt32(); + unsigned rval = right.toUInt32() & 0x1f; uint res = lval >> rval; return Encode(res); } -inline ReturnedValue Runtime::greaterThan(const ValueRef left, const ValueRef right) +inline ReturnedValue Runtime::greaterThan(const Value &left, const Value &right) { TRACE2(left, right); @@ -426,7 +426,7 @@ inline ReturnedValue Runtime::greaterThan(const ValueRef left, const ValueRef ri return Encode(r); } -inline ReturnedValue Runtime::lessThan(const ValueRef left, const ValueRef right) +inline ReturnedValue Runtime::lessThan(const Value &left, const Value &right) { TRACE2(left, right); @@ -434,7 +434,7 @@ inline ReturnedValue Runtime::lessThan(const ValueRef left, const ValueRef right return Encode(r); } -inline ReturnedValue Runtime::greaterEqual(const ValueRef left, const ValueRef right) +inline ReturnedValue Runtime::greaterEqual(const Value &left, const Value &right) { TRACE2(left, right); @@ -442,7 +442,7 @@ inline ReturnedValue Runtime::greaterEqual(const ValueRef left, const ValueRef r return Encode(r); } -inline ReturnedValue Runtime::lessEqual(const ValueRef left, const ValueRef right) +inline ReturnedValue Runtime::lessEqual(const Value &left, const Value &right) { TRACE2(left, right); @@ -450,25 +450,25 @@ inline ReturnedValue Runtime::lessEqual(const ValueRef left, const ValueRef righ return Encode(r); } -inline Bool Runtime::compareEqual(const ValueRef left, const ValueRef right) +inline Bool Runtime::compareEqual(const Value &left, const Value &right) { TRACE2(left, right); - if (left->rawValue() == right->rawValue()) + if (left.rawValue() == right.rawValue()) // NaN != NaN - return !left->isNaN(); + return !left.isNaN(); - if (left->type() == right->type()) { - if (!left->isManaged()) + if (left.type() == right.type()) { + if (!left.isManaged()) return false; - if (left->isString() == right->isString()) - return left->cast()->isEqualTo(right->cast()); + if (left.isString() == right.isString()) + return left.cast()->isEqualTo(right.cast()); } return RuntimeHelpers::equalHelper(left, right); } -inline ReturnedValue Runtime::equal(const ValueRef left, const ValueRef right) +inline ReturnedValue Runtime::equal(const Value &left, const Value &right) { TRACE2(left, right); @@ -476,7 +476,7 @@ inline ReturnedValue Runtime::equal(const ValueRef left, const ValueRef right) return Encode(r); } -inline ReturnedValue Runtime::notEqual(const ValueRef left, const ValueRef right) +inline ReturnedValue Runtime::notEqual(const Value &left, const Value &right) { TRACE2(left, right); @@ -484,7 +484,7 @@ inline ReturnedValue Runtime::notEqual(const ValueRef left, const ValueRef right return Encode(r); } -inline ReturnedValue Runtime::strictEqual(const ValueRef left, const ValueRef right) +inline ReturnedValue Runtime::strictEqual(const Value &left, const Value &right) { TRACE2(left, right); @@ -492,7 +492,7 @@ inline ReturnedValue Runtime::strictEqual(const ValueRef left, const ValueRef ri return Encode(r); } -inline ReturnedValue Runtime::strictNotEqual(const ValueRef left, const ValueRef right) +inline ReturnedValue Runtime::strictNotEqual(const Value &left, const Value &right) { TRACE2(left, right); @@ -500,30 +500,30 @@ inline ReturnedValue Runtime::strictNotEqual(const ValueRef left, const ValueRef return Encode(r); } -inline Bool Runtime::compareNotEqual(const ValueRef left, const ValueRef right) +inline Bool Runtime::compareNotEqual(const Value &left, const Value &right) { TRACE2(left, right); return !Runtime::compareEqual(left, right); } -inline Bool Runtime::compareStrictEqual(const ValueRef left, const ValueRef right) +inline Bool Runtime::compareStrictEqual(const Value &left, const Value &right) { TRACE2(left, right); return RuntimeHelpers::strictEqual(left, right); } -inline Bool Runtime::compareStrictNotEqual(const ValueRef left, const ValueRef right) +inline Bool Runtime::compareStrictNotEqual(const Value &left, const Value &right) { TRACE2(left, right); return ! RuntimeHelpers::strictEqual(left, right); } -inline Bool Runtime::toBoolean(const ValueRef value) +inline Bool Runtime::toBoolean(const Value &value) { - return value->toBoolean(); + return value.toBoolean(); } } // namespace QV4 diff --git a/src/qml/jsruntime/qv4scopedvalue_p.h b/src/qml/jsruntime/qv4scopedvalue_p.h index 705e5301dc..d72d23bbe9 100644 --- a/src/qml/jsruntime/qv4scopedvalue_p.h +++ b/src/qml/jsruntime/qv4scopedvalue_p.h @@ -193,6 +193,9 @@ struct ScopedValue return ptr; } + operator Value *() { return ptr; } + operator const Value &() const { return *ptr; } + ReturnedValue asReturnedValue() const { return ptr->val; } Value *ptr; @@ -264,7 +267,14 @@ struct Scoped #endif } - Scoped(const Scope &scope, const ValueRef &v); + Scoped(const Scope &scope, const Value *v) + { + ptr = scope.engine->jsStackTop++; + setPointer(v ? value_cast(*v) : 0); +#ifndef QT_NO_DEBUG + ++scope.size; +#endif + } Scoped(const Scope &scope, T *t) { @@ -326,8 +336,10 @@ struct Scoped setPointer(value_cast(v)); return *this; } - - Scoped &operator=(const ValueRef &v); + Scoped &operator=(Value *v) { + setPointer(v ? value_cast(*v) : 0); + return *this; + } Scoped &operator=(const ReturnedValue &v) { setPointer(value_cast(QV4::Value::fromReturnedValue(v))); @@ -347,6 +359,9 @@ struct Scoped operator T *() { return static_cast(ptr->managed()); } + operator const Value &() const { + return *ptr; + } T *operator->() { return ptr->cast(); @@ -398,23 +413,6 @@ struct ScopedCallData { }; -template -inline Scoped::Scoped(const Scope &scope, const ValueRef &v) -{ - ptr = scope.engine->jsStackTop++; - setPointer(value_cast(*v.operator ->())); -#ifndef QT_NO_DEBUG - ++scope.size; -#endif -} - -template -inline Scoped &Scoped::operator=(const ValueRef &v) -{ - setPointer(value_cast(*v.operator ->())); - return *this; -} - inline Value &Value::operator =(const ScopedValue &v) { val = v.ptr->val; @@ -428,12 +426,6 @@ inline Value &Value::operator=(const Scoped &t) return *this; } -inline Value &Value::operator=(const ValueRef v) -{ - val = v.asReturnedValue(); - return *this; -} - template inline TypedValue &TypedValue::operator =(T *t) { diff --git a/src/qml/jsruntime/qv4script.cpp b/src/qml/jsruntime/qv4script.cpp index 9f49678a3e..a38e87e550 100644 --- a/src/qml/jsruntime/qv4script.cpp +++ b/src/qml/jsruntime/qv4script.cpp @@ -189,7 +189,7 @@ Heap::FunctionObject *QmlBindingWrapper::createQmlCallableForFunction(QQmlContex Script::Script(ExecutionEngine *v4, Object *qml, CompiledData::CompilationUnit *compilationUnit) : line(0), column(0), scope(v4->rootContext()), strictMode(false), inheritContext(true), parsed(false) - , qml(v4, qml->asReturnedValue()), vmFunction(0), parseAsBinding(true) + , qml(v4, qml), vmFunction(0), parseAsBinding(true) { parsed = true; diff --git a/src/qml/jsruntime/qv4script_p.h b/src/qml/jsruntime/qv4script_p.h index f2fd9cb7fc..1c17b75186 100644 --- a/src/qml/jsruntime/qv4script_p.h +++ b/src/qml/jsruntime/qv4script_p.h @@ -118,7 +118,7 @@ struct Q_QML_EXPORT Script { Script(ExecutionEngine *engine, Object *qml, const QString &sourceCode, const QString &source = QString(), int line = 1, int column = 0) : sourceFile(source), line(line), column(column), sourceCode(sourceCode) , scope(engine->rootContext()), strictMode(false), inheritContext(true), parsed(false) - , qml(engine, qml->asReturnedValue()), vmFunction(0), parseAsBinding(true) {} + , qml(engine, qml), vmFunction(0), parseAsBinding(true) {} Script(ExecutionEngine *engine, Object *qml, CompiledData::CompilationUnit *compilationUnit); ~Script(); QString sourceFile; diff --git a/src/qml/jsruntime/qv4sequenceobject.cpp b/src/qml/jsruntime/qv4sequenceobject.cpp index 496a794b32..83fd2efa60 100644 --- a/src/qml/jsruntime/qv4sequenceobject.cpp +++ b/src/qml/jsruntime/qv4sequenceobject.cpp @@ -128,31 +128,31 @@ static QString convertElementToString(bool element) return QStringLiteral("false"); } -template ElementType convertValueToElement(const QV4::ValueRef value); +template ElementType convertValueToElement(const Value &value); -template <> QString convertValueToElement(const QV4::ValueRef value) +template <> QString convertValueToElement(const Value &value) { - return value->toQString(); + return value.toQString(); } -template <> int convertValueToElement(const QV4::ValueRef value) +template <> int convertValueToElement(const Value &value) { - return value->toInt32(); + return value.toInt32(); } -template <> QUrl convertValueToElement(const QV4::ValueRef value) +template <> QUrl convertValueToElement(const Value &value) { - return QUrl(value->toQString()); + return QUrl(value.toQString()); } -template <> qreal convertValueToElement(const QV4::ValueRef value) +template <> qreal convertValueToElement(const Value &value) { - return value->toNumber(); + return value.toNumber(); } -template <> bool convertValueToElement(const ValueRef value) +template <> bool convertValueToElement(const Value &value) { - return value->toBoolean(); + return value.toBoolean(); } namespace QV4 { @@ -215,7 +215,7 @@ public: return Encode::undefined(); } - void containerPutIndexed(uint index, const QV4::ValueRef value) + void containerPutIndexed(uint index, const QV4::Value &value) { if (internalClass()->engine->hasException) return; @@ -345,8 +345,8 @@ public: struct CompareFunctor { - CompareFunctor(QV4::ExecutionContext *ctx, const QV4::ValueRef compareFn) - : m_ctx(ctx), m_compareFn(compareFn) + CompareFunctor(QV4::ExecutionContext *ctx, const QV4::Value &compareFn) + : m_ctx(ctx), m_compareFn(&compareFn) {} bool operator()(typename Container::value_type lhs, typename Container::value_type rhs) @@ -363,7 +363,7 @@ public: private: QV4::ExecutionContext *m_ctx; - QV4::ValueRef m_compareFn; + const QV4::Value *m_compareFn; }; void sort(QV4::CallContext *ctx) @@ -484,7 +484,7 @@ public: static QV4::ReturnedValue getIndexed(QV4::Managed *that, uint index, bool *hasProperty) { return static_cast *>(that)->containerGetIndexed(index, hasProperty); } - static void putIndexed(Managed *that, uint index, const QV4::ValueRef value) + static void putIndexed(Managed *that, uint index, const QV4::Value &value) { static_cast *>(that)->containerPutIndexed(index, value); } static QV4::PropertyAttributes queryIndexed(const QV4::Managed *that, uint index) { return static_cast *>(that)->containerQueryIndexed(index); } @@ -642,15 +642,15 @@ QVariant SequencePrototype::toVariant(Object *object) return QQml##ElementTypeName##List::toVariant(a); \ } else -QVariant SequencePrototype::toVariant(const QV4::ValueRef array, int typeHint, bool *succeeded) +QVariant SequencePrototype::toVariant(const QV4::Value &array, int typeHint, bool *succeeded) { *succeeded = true; - if (!array->asArrayObject()) { + if (!array.asArrayObject()) { *succeeded = false; return QVariant(); } - QV4::Scope scope(array->asObject()->engine()); + QV4::Scope scope(array.asObject()->engine()); QV4::ScopedArrayObject a(scope, array); FOREACH_QML_SEQUENCE_TYPE(SEQUENCE_TO_VARIANT) { /* else */ *succeeded = false; return QVariant(); } diff --git a/src/qml/jsruntime/qv4sequenceobject_p.h b/src/qml/jsruntime/qv4sequenceobject_p.h index 8d08a90869..0009fa45fa 100644 --- a/src/qml/jsruntime/qv4sequenceobject_p.h +++ b/src/qml/jsruntime/qv4sequenceobject_p.h @@ -72,7 +72,7 @@ struct SequencePrototype : public QV4::Object static ReturnedValue fromVariant(QV4::ExecutionEngine *engine, const QVariant& v, bool *succeeded); static int metaTypeForSequence(Object *object); static QVariant toVariant(Object *object); - static QVariant toVariant(const ValueRef array, int typeHint, bool *succeeded); + static QVariant toVariant(const Value &array, int typeHint, bool *succeeded); }; } diff --git a/src/qml/jsruntime/qv4serialize.cpp b/src/qml/jsruntime/qv4serialize.cpp index 017a2cbdb1..765fef3332 100644 --- a/src/qml/jsruntime/qv4serialize.cpp +++ b/src/qml/jsruntime/qv4serialize.cpp @@ -139,20 +139,20 @@ static inline void *popPtr(const char *&data) // serialization/deserialization failures #define ALIGN(size) (((size) + 3) & ~3) -void Serialize::serialize(QByteArray &data, const QV4::ValueRef v, ExecutionEngine *engine) +void Serialize::serialize(QByteArray &data, const QV4::Value &v, ExecutionEngine *engine) { QV4::Scope scope(engine); - if (v->isEmpty()) { + if (v.isEmpty()) { Q_ASSERT(!"Serialize: got empty value"); - } else if (v->isUndefined()) { + } else if (v.isUndefined()) { push(data, valueheader(WorkerUndefined)); - } else if (v->isNull()) { + } else if (v.isNull()) { push(data, valueheader(WorkerNull)); - } else if (v->isBoolean()) { - push(data, valueheader(v->booleanValue() == true ? WorkerTrue : WorkerFalse)); - } else if (v->isString()) { - const QString &qstr = v->toQString(); + } else if (v.isBoolean()) { + push(data, valueheader(v.booleanValue() == true ? WorkerTrue : WorkerFalse)); + } else if (v.isString()) { + const QString &qstr = v.toQString(); int length = qstr.length(); if (length > 0xFFFFFF) { push(data, valueheader(WorkerUndefined)); @@ -168,12 +168,11 @@ void Serialize::serialize(QByteArray &data, const QV4::ValueRef v, ExecutionEngi char *buffer = data.data() + offset; memcpy(buffer, qstr.constData(), length*sizeof(QChar)); - } else if (v->asFunctionObject()) { + } else if (v.asFunctionObject()) { // XXX TODO: Implement passing function objects between the main and // worker scripts push(data, valueheader(WorkerUndefined)); - } else if (v->asArrayObject()) { - QV4::ScopedArrayObject array(scope, v); + } else if (QV4::ArrayObject *array = v.asArrayObject()) { uint length = array->getLength(); if (length > 0xFFFFFF) { push(data, valueheader(WorkerUndefined)); @@ -184,24 +183,23 @@ void Serialize::serialize(QByteArray &data, const QV4::ValueRef v, ExecutionEngi ScopedValue val(scope); for (uint ii = 0; ii < length; ++ii) serialize(data, (val = array->getIndexed(ii)), engine); - } else if (v->isInteger()) { + } else if (v.isInteger()) { reserve(data, 2 * sizeof(quint32)); push(data, valueheader(WorkerInt32)); - push(data, (quint32)v->integerValue()); -// } else if (v->IsUint32()) { + push(data, (quint32)v.integerValue()); +// } else if (v.IsUint32()) { // reserve(data, 2 * sizeof(quint32)); // push(data, valueheader(WorkerUint32)); -// push(data, v->Uint32Value()); - } else if (v->isNumber()) { +// push(data, v.Uint32Value()); + } else if (v.isNumber()) { reserve(data, sizeof(quint32) + sizeof(double)); push(data, valueheader(WorkerNumber)); - push(data, v->asDouble()); - } else if (QV4::DateObject *d = v->asDateObject()) { + push(data, v.asDouble()); + } else if (QV4::DateObject *d = v.asDateObject()) { reserve(data, sizeof(quint32) + sizeof(double)); push(data, valueheader(WorkerDate)); push(data, d->date().asDouble()); - } else if (v->as()) { - Scoped re(scope, v); + } else if (RegExpObject *re = v.as()) { quint32 flags = re->flags(); QString pattern = re->source(); int length = pattern.length() + 1; @@ -220,8 +218,7 @@ void Serialize::serialize(QByteArray &data, const QV4::ValueRef v, ExecutionEngi char *buffer = data.data() + offset; memcpy(buffer, pattern.constData(), length*sizeof(QChar)); - } else if (v->as()) { - Scoped qobjectWrapper(scope, v); + } else if (QObjectWrapper *qobjectWrapper = v.as()) { // XXX TODO: Generalize passing objects between the main thread and worker scripts so // that others can trivially plug in their elements. QQmlListModel *lm = qobject_cast(qobjectWrapper->object()); @@ -234,8 +231,7 @@ void Serialize::serialize(QByteArray &data, const QV4::ValueRef v, ExecutionEngi } // No other QObject's are allowed to be sent push(data, valueheader(WorkerUndefined)); - } else if (v->asObject()) { - ScopedObject o(scope, v); + } else if (Object *o = v.asObject()) { if (o->isListType()) { // valid sequence. we generate a length (sequence length + 1 for the sequence type) uint seqLength = ScopedValue(scope, o->get(engine->id_length))->toUInt32(); @@ -255,7 +251,7 @@ void Serialize::serialize(QByteArray &data, const QV4::ValueRef v, ExecutionEngi } // regular object - QV4::ScopedValue val(scope, *v); + QV4::ScopedValue val(scope, v); QV4::ScopedArrayObject properties(scope, QV4::ObjectPrototype::getOwnPropertyNames(engine, val)); quint32 length = properties->getLength(); if (length > 0xFFFFFF) { @@ -265,12 +261,11 @@ void Serialize::serialize(QByteArray &data, const QV4::ValueRef v, ExecutionEngi push(data, valueheader(WorkerObject, length)); QV4::ScopedValue s(scope); - QV4::ScopedString str(scope); for (quint32 ii = 0; ii < length; ++ii) { s = properties->getIndexed(ii); serialize(data, s, engine); - str = s; + QV4::String *str = s->asString(); val = o->get(str); if (scope.hasException()) scope.engine->catchException(); @@ -390,7 +385,7 @@ ReturnedValue Serialize::deserialize(const char *&data, ExecutionEngine *engine) return QV4::Encode::undefined(); } -QByteArray Serialize::serialize(const QV4::ValueRef value, ExecutionEngine *engine) +QByteArray Serialize::serialize(const QV4::Value &value, ExecutionEngine *engine) { QByteArray rv; serialize(rv, value, engine); diff --git a/src/qml/jsruntime/qv4serialize_p.h b/src/qml/jsruntime/qv4serialize_p.h index 8cab3d58c5..85d56da0d5 100644 --- a/src/qml/jsruntime/qv4serialize_p.h +++ b/src/qml/jsruntime/qv4serialize_p.h @@ -57,11 +57,11 @@ namespace QV4 { class Serialize { public: - static QByteArray serialize(const ValueRef, ExecutionEngine *); + static QByteArray serialize(const Value &, ExecutionEngine *); static ReturnedValue deserialize(const QByteArray &, ExecutionEngine *); private: - static void serialize(QByteArray &, const ValueRef, ExecutionEngine *); + static void serialize(QByteArray &, const Value &, ExecutionEngine *); static ReturnedValue deserialize(const char *&, ExecutionEngine *); }; diff --git a/src/qml/jsruntime/qv4stringobject.cpp b/src/qml/jsruntime/qv4stringobject.cpp index aab1505832..ed4d70270c 100644 --- a/src/qml/jsruntime/qv4stringobject.cpp +++ b/src/qml/jsruntime/qv4stringobject.cpp @@ -82,7 +82,7 @@ Heap::StringObject::StringObject(InternalClass *ic, QV4::Object *prototype) s->defineReadonlyProperty(ic->engine->id_length, Primitive::fromInt32(0)); } -Heap::StringObject::StringObject(ExecutionEngine *engine, const ValueRef val) +Heap::StringObject::StringObject(ExecutionEngine *engine, const Value &val) : Heap::Object(engine->emptyClass, engine->stringPrototype.asObject()) { value = val; diff --git a/src/qml/jsruntime/qv4stringobject_p.h b/src/qml/jsruntime/qv4stringobject_p.h index a5851cb9bb..beddbd0e2e 100644 --- a/src/qml/jsruntime/qv4stringobject_p.h +++ b/src/qml/jsruntime/qv4stringobject_p.h @@ -45,7 +45,7 @@ namespace Heap { struct StringObject : Object { StringObject(InternalClass *ic, QV4::Object *prototype); - StringObject(ExecutionEngine *engine, const ValueRef value); + StringObject(ExecutionEngine *engine, const Value &value); Value value; Property *getIndex(uint index) const; diff --git a/src/qml/jsruntime/qv4typedarray.cpp b/src/qml/jsruntime/qv4typedarray.cpp index ed18174d1c..1b9c5d58e4 100644 --- a/src/qml/jsruntime/qv4typedarray.cpp +++ b/src/qml/jsruntime/qv4typedarray.cpp @@ -46,9 +46,9 @@ ReturnedValue Int8ArrayRead(const char *data, int index) return Encode((int)(signed char)data[index]); } -void Int8ArrayWrite(ExecutionEngine *e, char *data, int index, ValueRef value) +void Int8ArrayWrite(ExecutionEngine *e, char *data, int index, const Value &value) { - signed char v = (signed char)value->toUInt32(); + signed char v = (signed char)value.toUInt32(); if (e->hasException) return; data[index] = v; @@ -59,21 +59,21 @@ ReturnedValue UInt8ArrayRead(const char *data, int index) return Encode((int)(unsigned char)data[index]); } -void UInt8ArrayWrite(ExecutionEngine *e, char *data, int index, ValueRef value) +void UInt8ArrayWrite(ExecutionEngine *e, char *data, int index, const Value &value) { - unsigned char v = (unsigned char)value->toUInt32(); + unsigned char v = (unsigned char)value.toUInt32(); if (e->hasException) return; data[index] = v; } -void UInt8ClampedArrayWrite(ExecutionEngine *e, char *data, int index, ValueRef value) +void UInt8ClampedArrayWrite(ExecutionEngine *e, char *data, int index, const Value &value) { - if (value->isInteger()) { - data[index] = (char)(unsigned char)qBound(0, value->integerValue(), 255); + if (value.isInteger()) { + data[index] = (char)(unsigned char)qBound(0, value.integerValue(), 255); return; } - double d = value->toNumber(); + double d = value.toNumber(); if (e->hasException) return; // ### is there a way to optimise this? @@ -107,9 +107,9 @@ ReturnedValue Int16ArrayRead(const char *data, int index) return Encode((int)*(short *)(data + index)); } -void Int16ArrayWrite(ExecutionEngine *e, char *data, int index, ValueRef value) +void Int16ArrayWrite(ExecutionEngine *e, char *data, int index, const Value &value) { - short v = (short)value->toInt32(); + short v = (short)value.toInt32(); if (e->hasException) return; *(short *)(data + index) = v; @@ -120,9 +120,9 @@ ReturnedValue UInt16ArrayRead(const char *data, int index) return Encode((int)*(unsigned short *)(data + index)); } -void UInt16ArrayWrite(ExecutionEngine *e, char *data, int index, ValueRef value) +void UInt16ArrayWrite(ExecutionEngine *e, char *data, int index, const Value &value) { - unsigned short v = (unsigned short)value->toInt32(); + unsigned short v = (unsigned short)value.toInt32(); if (e->hasException) return; *(unsigned short *)(data + index) = v; @@ -133,9 +133,9 @@ ReturnedValue Int32ArrayRead(const char *data, int index) return Encode(*(int *)(data + index)); } -void Int32ArrayWrite(ExecutionEngine *e, char *data, int index, ValueRef value) +void Int32ArrayWrite(ExecutionEngine *e, char *data, int index, const Value &value) { - int v = (int)value->toInt32(); + int v = (int)value.toInt32(); if (e->hasException) return; *(int *)(data + index) = v; @@ -146,9 +146,9 @@ ReturnedValue UInt32ArrayRead(const char *data, int index) return Encode(*(unsigned int *)(data + index)); } -void UInt32ArrayWrite(ExecutionEngine *e, char *data, int index, ValueRef value) +void UInt32ArrayWrite(ExecutionEngine *e, char *data, int index, const Value &value) { - unsigned int v = (unsigned int)value->toUInt32(); + unsigned int v = (unsigned int)value.toUInt32(); if (e->hasException) return; *(unsigned int *)(data + index) = v; @@ -159,9 +159,9 @@ ReturnedValue Float32ArrayRead(const char *data, int index) return Encode(*(float *)(data + index)); } -void Float32ArrayWrite(ExecutionEngine *e, char *data, int index, ValueRef value) +void Float32ArrayWrite(ExecutionEngine *e, char *data, int index, const Value &value) { - float v = value->toNumber(); + float v = value.toNumber(); if (e->hasException) return; *(float *)(data + index) = v; @@ -172,9 +172,9 @@ ReturnedValue Float64ArrayRead(const char *data, int index) return Encode(*(double *)(data + index)); } -void Float64ArrayWrite(ExecutionEngine *e, char *data, int index, ValueRef value) +void Float64ArrayWrite(ExecutionEngine *e, char *data, int index, const Value &value) { - double v = value->toNumber(); + double v = value.toNumber(); if (e->hasException) return; *(double *)(data + index) = v; @@ -361,7 +361,7 @@ ReturnedValue TypedArray::getIndexed(Managed *m, uint index, bool *hasProperty) return a->d()->type->read(a->d()->buffer->data->data(), byteOffset); } -void TypedArray::putIndexed(Managed *m, uint index, const ValueRef value) +void TypedArray::putIndexed(Managed *m, uint index, const Value &value) { ExecutionEngine *v4 = static_cast(m)->engine(); if (v4->hasException) diff --git a/src/qml/jsruntime/qv4typedarray_p.h b/src/qml/jsruntime/qv4typedarray_p.h index 6c9bcfbba4..78949226b8 100644 --- a/src/qml/jsruntime/qv4typedarray_p.h +++ b/src/qml/jsruntime/qv4typedarray_p.h @@ -43,7 +43,7 @@ namespace QV4 { struct ArrayBuffer; typedef ReturnedValue (*TypedArrayRead)(const char *data, int index); -typedef void (*TypedArrayWrite)(ExecutionEngine *engine, char *data, int index, ValueRef value); +typedef void (*TypedArrayWrite)(ExecutionEngine *engine, char *data, int index, const Value &value); struct TypedArrayOperations { int bytesPerElement; @@ -101,7 +101,7 @@ struct TypedArray : Object static void markObjects(Heap::Base *that, ExecutionEngine *e); static ReturnedValue getIndexed(Managed *m, uint index, bool *hasProperty); - static void putIndexed(Managed *m, uint index, const ValueRef value); + static void putIndexed(Managed *m, uint index, const Value &value); }; struct TypedArrayCtor: FunctionObject diff --git a/src/qml/jsruntime/qv4value.cpp b/src/qml/jsruntime/qv4value.cpp index 784628071b..0f81c94f24 100644 --- a/src/qml/jsruntime/qv4value.cpp +++ b/src/qml/jsruntime/qv4value.cpp @@ -90,7 +90,7 @@ double Value::toNumberImpl() const { Q_ASSERT(isObject()); Scope scope(objectValue()->engine()); - ScopedValue prim(scope, RuntimeHelpers::toPrimitive(ValueRef::fromRawValue(this), NUMBER_HINT)); + ScopedValue prim(scope, RuntimeHelpers::toPrimitive(*this, NUMBER_HINT)); if (scope.engine->hasException) return 0; return prim->toNumber(); diff --git a/src/qml/jsruntime/qv4value_p.h b/src/qml/jsruntime/qv4value_p.h index 58e82f8fe2..22f0e1e4d5 100644 --- a/src/qml/jsruntime/qv4value_p.h +++ b/src/qml/jsruntime/qv4value_p.h @@ -394,7 +394,6 @@ struct Q_QML_PRIVATE_EXPORT Value template Value &operator=(const Scoped &t); - Value &operator=(const ValueRef v); Value &operator=(const Value &v) { val = v.val; return *this; @@ -423,7 +422,6 @@ struct Q_QML_PRIVATE_EXPORT Primitive : public Value static unsigned int toUInt32(double value); inline operator ValueRef(); - Value asValue() const { return *this; } }; inline Primitive Primitive::undefinedValue() @@ -545,6 +543,9 @@ struct ValueRef { return ptr; } + operator Value &() { return *ptr; } + operator const Value &() const { return *ptr; } + operator Value *() { return ptr; } @@ -555,7 +556,7 @@ struct ValueRef { static ValueRef fromRawValue(Value *v) { return ValueRef(v); } - static const ValueRef fromRawValue(const Value *v) { + static const Value &fromRawValue(const Value *v) { return ValueRef(const_cast(v)); } diff --git a/src/qml/jsruntime/qv4vme_moth.cpp b/src/qml/jsruntime/qv4vme_moth.cpp index e86c673bf1..87b1387eed 100644 --- a/src/qml/jsruntime/qv4vme_moth.cpp +++ b/src/qml/jsruntime/qv4vme_moth.cpp @@ -229,57 +229,57 @@ QV4::ReturnedValue VME::run(ExecutionEngine *engine, const uchar *code MOTH_BEGIN_INSTR(StoreName) TRACE(inline, "property name = %s", runtimeStrings[instr.name]->toQString().toUtf8().constData()); - Runtime::setActivationProperty(engine, instr.name, VALUEPTR(instr.source)); + Runtime::setActivationProperty(engine, instr.name, VALUE(instr.source)); CHECK_EXCEPTION; MOTH_END_INSTR(StoreName) MOTH_BEGIN_INSTR(LoadElement) - STOREVALUE(instr.result, Runtime::getElement(engine, VALUEPTR(instr.base), VALUEPTR(instr.index))); + STOREVALUE(instr.result, Runtime::getElement(engine, VALUE(instr.base), VALUE(instr.index))); MOTH_END_INSTR(LoadElement) MOTH_BEGIN_INSTR(LoadElementLookup) QV4::Lookup *l = context->d()->lookups + instr.lookup; - STOREVALUE(instr.result, l->indexedGetter(l, VALUEPTR(instr.base), VALUEPTR(instr.index))); + STOREVALUE(instr.result, l->indexedGetter(l, VALUE(instr.base), VALUE(instr.index))); MOTH_END_INSTR(LoadElementLookup) MOTH_BEGIN_INSTR(StoreElement) - Runtime::setElement(engine, VALUEPTR(instr.base), VALUEPTR(instr.index), VALUEPTR(instr.source)); + Runtime::setElement(engine, VALUE(instr.base), VALUE(instr.index), VALUE(instr.source)); CHECK_EXCEPTION; MOTH_END_INSTR(StoreElement) MOTH_BEGIN_INSTR(StoreElementLookup) QV4::Lookup *l = context->d()->lookups + instr.lookup; - l->indexedSetter(l, VALUEPTR(instr.base), VALUEPTR(instr.index), VALUEPTR(instr.source)); + l->indexedSetter(l, VALUE(instr.base), VALUE(instr.index), VALUE(instr.source)); CHECK_EXCEPTION; MOTH_END_INSTR(StoreElementLookup) MOTH_BEGIN_INSTR(LoadProperty) - STOREVALUE(instr.result, Runtime::getProperty(engine, VALUEPTR(instr.base), instr.name)); + STOREVALUE(instr.result, Runtime::getProperty(engine, VALUE(instr.base), instr.name)); MOTH_END_INSTR(LoadProperty) MOTH_BEGIN_INSTR(GetLookup) QV4::Lookup *l = context->d()->lookups + instr.index; - STOREVALUE(instr.result, l->getter(l, engine, VALUEPTR(instr.base))); + STOREVALUE(instr.result, l->getter(l, engine, VALUE(instr.base))); MOTH_END_INSTR(GetLookup) MOTH_BEGIN_INSTR(StoreProperty) - Runtime::setProperty(engine, VALUEPTR(instr.base), instr.name, VALUEPTR(instr.source)); + Runtime::setProperty(engine, VALUE(instr.base), instr.name, VALUE(instr.source)); CHECK_EXCEPTION; MOTH_END_INSTR(StoreProperty) MOTH_BEGIN_INSTR(SetLookup) QV4::Lookup *l = context->d()->lookups + instr.index; - l->setter(l, engine, VALUEPTR(instr.base), VALUEPTR(instr.source)); + l->setter(l, engine, VALUE(instr.base), VALUE(instr.source)); CHECK_EXCEPTION; MOTH_END_INSTR(SetLookup) MOTH_BEGIN_INSTR(StoreQObjectProperty) - Runtime::setQmlQObjectProperty(engine, VALUEPTR(instr.base), instr.propertyIndex, VALUEPTR(instr.source)); + Runtime::setQmlQObjectProperty(engine, VALUE(instr.base), instr.propertyIndex, VALUE(instr.source)); CHECK_EXCEPTION; MOTH_END_INSTR(StoreQObjectProperty) MOTH_BEGIN_INSTR(LoadQObjectProperty) - STOREVALUE(instr.result, Runtime::getQmlQObjectProperty(engine, VALUEPTR(instr.base), instr.propertyIndex, instr.captureRequired)); + STOREVALUE(instr.result, Runtime::getQmlQObjectProperty(engine, VALUE(instr.base), instr.propertyIndex, instr.captureRequired)); MOTH_END_INSTR(LoadQObjectProperty) MOTH_BEGIN_INSTR(LoadAttachedQObjectProperty) @@ -287,7 +287,7 @@ QV4::ReturnedValue VME::run(ExecutionEngine *engine, const uchar *code MOTH_END_INSTR(LoadAttachedQObjectProperty) MOTH_BEGIN_INSTR(LoadSingletonQObjectProperty) - STOREVALUE(instr.result, Runtime::getQmlSingletonQObjectProperty(engine, VALUEPTR(instr.base), instr.propertyIndex, instr.captureRequired)); + STOREVALUE(instr.result, Runtime::getQmlSingletonQObjectProperty(engine, VALUE(instr.base), instr.propertyIndex, instr.captureRequired)); MOTH_END_INSTR(LoadSingletonQObjectProperty) MOTH_BEGIN_INSTR(Push) @@ -313,7 +313,7 @@ QV4::ReturnedValue VME::run(ExecutionEngine *engine, const uchar *code callData->tag = QV4::Value::Integer_Type; callData->argc = instr.argc; callData->thisObject = QV4::Primitive::undefinedValue(); - STOREVALUE(instr.result, Runtime::callValue(engine, VALUEPTR(instr.dest), callData)); + STOREVALUE(instr.result, Runtime::callValue(engine, VALUE(instr.dest), callData)); MOTH_END_INSTR(CallValue) MOTH_BEGIN_INSTR(CallProperty) @@ -341,7 +341,7 @@ QV4::ReturnedValue VME::run(ExecutionEngine *engine, const uchar *code callData->tag = QV4::Value::Integer_Type; callData->argc = instr.argc; callData->thisObject = VALUE(instr.base); - STOREVALUE(instr.result, Runtime::callElement(engine, VALUEPTR(instr.index), callData)); + STOREVALUE(instr.result, Runtime::callElement(engine, VALUE(instr.index), callData)); MOTH_END_INSTR(CallElement) MOTH_BEGIN_INSTR(CallActivationProperty) @@ -367,7 +367,7 @@ QV4::ReturnedValue VME::run(ExecutionEngine *engine, const uchar *code MOTH_END_INSTR(SetExceptionHandler) MOTH_BEGIN_INSTR(CallBuiltinThrow) - Runtime::throwException(engine, VALUEPTR(instr.arg)); + Runtime::throwException(engine, VALUE(instr.arg)); CHECK_EXCEPTION; MOTH_END_INSTR(CallBuiltinThrow) @@ -381,7 +381,7 @@ QV4::ReturnedValue VME::run(ExecutionEngine *engine, const uchar *code MOTH_END_INSTR(CallBuiltinPushCatchScope) MOTH_BEGIN_INSTR(CallBuiltinPushScope) - Runtime::pushWithScope(VALUEPTR(instr.arg), engine); + Runtime::pushWithScope(VALUE(instr.arg), engine); context = engine->currentContext(); CHECK_EXCEPTION; MOTH_END_INSTR(CallBuiltinPushScope) @@ -392,19 +392,19 @@ QV4::ReturnedValue VME::run(ExecutionEngine *engine, const uchar *code MOTH_END_INSTR(CallBuiltinPopScope) MOTH_BEGIN_INSTR(CallBuiltinForeachIteratorObject) - STOREVALUE(instr.result, Runtime::foreachIterator(engine, VALUEPTR(instr.arg))); + STOREVALUE(instr.result, Runtime::foreachIterator(engine, VALUE(instr.arg))); MOTH_END_INSTR(CallBuiltinForeachIteratorObject) MOTH_BEGIN_INSTR(CallBuiltinForeachNextPropertyName) - STOREVALUE(instr.result, Runtime::foreachNextPropertyName(VALUEPTR(instr.arg))); + STOREVALUE(instr.result, Runtime::foreachNextPropertyName(VALUE(instr.arg))); MOTH_END_INSTR(CallBuiltinForeachNextPropertyName) MOTH_BEGIN_INSTR(CallBuiltinDeleteMember) - STOREVALUE(instr.result, Runtime::deleteMember(engine, VALUEPTR(instr.base), instr.member)); + STOREVALUE(instr.result, Runtime::deleteMember(engine, VALUE(instr.base), instr.member)); MOTH_END_INSTR(CallBuiltinDeleteMember) MOTH_BEGIN_INSTR(CallBuiltinDeleteSubscript) - STOREVALUE(instr.result, Runtime::deleteElement(engine, VALUEPTR(instr.base), VALUEPTR(instr.index))); + STOREVALUE(instr.result, Runtime::deleteElement(engine, VALUE(instr.base), VALUE(instr.index))); MOTH_END_INSTR(CallBuiltinDeleteSubscript) MOTH_BEGIN_INSTR(CallBuiltinDeleteName) @@ -412,11 +412,11 @@ QV4::ReturnedValue VME::run(ExecutionEngine *engine, const uchar *code MOTH_END_INSTR(CallBuiltinDeleteName) MOTH_BEGIN_INSTR(CallBuiltinTypeofMember) - STOREVALUE(instr.result, Runtime::typeofMember(engine, VALUEPTR(instr.base), instr.member)); + STOREVALUE(instr.result, Runtime::typeofMember(engine, VALUE(instr.base), instr.member)); MOTH_END_INSTR(CallBuiltinTypeofMember) MOTH_BEGIN_INSTR(CallBuiltinTypeofSubscript) - STOREVALUE(instr.result, Runtime::typeofElement(engine, VALUEPTR(instr.base), VALUEPTR(instr.index))); + STOREVALUE(instr.result, Runtime::typeofElement(engine, VALUE(instr.base), VALUE(instr.index))); MOTH_END_INSTR(CallBuiltinTypeofSubscript) MOTH_BEGIN_INSTR(CallBuiltinTypeofName) @@ -424,7 +424,7 @@ QV4::ReturnedValue VME::run(ExecutionEngine *engine, const uchar *code MOTH_END_INSTR(CallBuiltinTypeofName) MOTH_BEGIN_INSTR(CallBuiltinTypeofValue) - STOREVALUE(instr.result, Runtime::typeofValue(engine, VALUEPTR(instr.value))); + STOREVALUE(instr.result, Runtime::typeofValue(engine, VALUE(instr.value))); MOTH_END_INSTR(CallBuiltinTypeofValue) MOTH_BEGIN_INSTR(CallBuiltinDeclareVar) @@ -457,7 +457,7 @@ QV4::ReturnedValue VME::run(ExecutionEngine *engine, const uchar *code callData->tag = QV4::Value::Integer_Type; callData->argc = instr.argc; callData->thisObject = QV4::Primitive::undefinedValue(); - STOREVALUE(instr.result, Runtime::constructValue(engine, VALUEPTR(instr.func), callData)); + STOREVALUE(instr.result, Runtime::constructValue(engine, VALUE(instr.func), callData)); MOTH_END_INSTR(CreateValue) MOTH_BEGIN_INSTR(CreateProperty) @@ -515,7 +515,7 @@ QV4::ReturnedValue VME::run(ExecutionEngine *engine, const uchar *code MOTH_END_INSTR(JumpNe) MOTH_BEGIN_INSTR(UNot) - STOREVALUE(instr.result, Runtime::uNot(VALUEPTR(instr.source))); + STOREVALUE(instr.result, Runtime::uNot(VALUE(instr.source))); MOTH_END_INSTR(UNot) MOTH_BEGIN_INSTR(UNotBool) @@ -524,15 +524,15 @@ QV4::ReturnedValue VME::run(ExecutionEngine *engine, const uchar *code MOTH_END_INSTR(UNotBool) MOTH_BEGIN_INSTR(UPlus) - STOREVALUE(instr.result, Runtime::uPlus(VALUEPTR(instr.source))); + STOREVALUE(instr.result, Runtime::uPlus(VALUE(instr.source))); MOTH_END_INSTR(UPlus) MOTH_BEGIN_INSTR(UMinus) - STOREVALUE(instr.result, Runtime::uMinus(VALUEPTR(instr.source))); + STOREVALUE(instr.result, Runtime::uMinus(VALUE(instr.source))); MOTH_END_INSTR(UMinus) MOTH_BEGIN_INSTR(UCompl) - STOREVALUE(instr.result, Runtime::complement(VALUEPTR(instr.source))); + STOREVALUE(instr.result, Runtime::complement(VALUE(instr.source))); MOTH_END_INSTR(UCompl) MOTH_BEGIN_INSTR(UComplInt) @@ -540,31 +540,31 @@ QV4::ReturnedValue VME::run(ExecutionEngine *engine, const uchar *code MOTH_END_INSTR(UComplInt) MOTH_BEGIN_INSTR(Increment) - STOREVALUE(instr.result, Runtime::increment(VALUEPTR(instr.source))); + STOREVALUE(instr.result, Runtime::increment(VALUE(instr.source))); MOTH_END_INSTR(Increment) MOTH_BEGIN_INSTR(Decrement) - STOREVALUE(instr.result, Runtime::decrement(VALUEPTR(instr.source))); + STOREVALUE(instr.result, Runtime::decrement(VALUE(instr.source))); MOTH_END_INSTR(Decrement) MOTH_BEGIN_INSTR(Binop) - STOREVALUE(instr.result, instr.alu(VALUEPTR(instr.lhs), VALUEPTR(instr.rhs))); + STOREVALUE(instr.result, instr.alu(VALUE(instr.lhs), VALUE(instr.rhs))); MOTH_END_INSTR(Binop) MOTH_BEGIN_INSTR(Add) - STOREVALUE(instr.result, Runtime::add(engine, VALUEPTR(instr.lhs), VALUEPTR(instr.rhs))); + STOREVALUE(instr.result, Runtime::add(engine, VALUE(instr.lhs), VALUE(instr.rhs))); MOTH_END_INSTR(Add) MOTH_BEGIN_INSTR(BitAnd) - STOREVALUE(instr.result, Runtime::bitAnd(VALUEPTR(instr.lhs), VALUEPTR(instr.rhs))); + STOREVALUE(instr.result, Runtime::bitAnd(VALUE(instr.lhs), VALUE(instr.rhs))); MOTH_END_INSTR(BitAnd) MOTH_BEGIN_INSTR(BitOr) - STOREVALUE(instr.result, Runtime::bitOr(VALUEPTR(instr.lhs), VALUEPTR(instr.rhs))); + STOREVALUE(instr.result, Runtime::bitOr(VALUE(instr.lhs), VALUE(instr.rhs))); MOTH_END_INSTR(BitOr) MOTH_BEGIN_INSTR(BitXor) - STOREVALUE(instr.result, Runtime::bitXor(VALUEPTR(instr.lhs), VALUEPTR(instr.rhs))); + STOREVALUE(instr.result, Runtime::bitXor(VALUE(instr.lhs), VALUE(instr.rhs))); MOTH_END_INSTR(BitXor) MOTH_BEGIN_INSTR(Shr) @@ -599,15 +599,15 @@ QV4::ReturnedValue VME::run(ExecutionEngine *engine, const uchar *code MOTH_END_INSTR(ShlConst) MOTH_BEGIN_INSTR(Mul) - STOREVALUE(instr.result, Runtime::mul(VALUEPTR(instr.lhs), VALUEPTR(instr.rhs))); + STOREVALUE(instr.result, Runtime::mul(VALUE(instr.lhs), VALUE(instr.rhs))); MOTH_END_INSTR(Mul) MOTH_BEGIN_INSTR(Sub) - STOREVALUE(instr.result, Runtime::sub(VALUEPTR(instr.lhs), VALUEPTR(instr.rhs))); + STOREVALUE(instr.result, Runtime::sub(VALUE(instr.lhs), VALUE(instr.rhs))); MOTH_END_INSTR(Sub) MOTH_BEGIN_INSTR(BinopContext) - STOREVALUE(instr.result, instr.alu(engine, VALUEPTR(instr.lhs), VALUEPTR(instr.rhs))); + STOREVALUE(instr.result, instr.alu(engine, VALUE(instr.lhs), VALUE(instr.rhs))); MOTH_END_INSTR(BinopContext) MOTH_BEGIN_INSTR(Ret) diff --git a/src/qml/qml/ftw/qhashedstring_p.h b/src/qml/qml/ftw/qhashedstring_p.h index 7a7786557e..da5878ed33 100644 --- a/src/qml/qml/ftw/qhashedstring_p.h +++ b/src/qml/qml/ftw/qhashedstring_p.h @@ -224,8 +224,8 @@ public: inline char *cStrData() const { return (char *)ckey; } inline quint16 *utf16Data() const { return (quint16 *)strData->data(); } - inline bool equals(const QV4::ValueRef string) const { - QString s = string->toQStringNoThrow(); + inline bool equals(const QV4::Value &string) const { + QString s = string.toQStringNoThrow(); if (isQString()) { QStringDataPtr dd; dd.ptr = strData; diff --git a/src/qml/qml/qqmlbinding.cpp b/src/qml/qml/qqmlbinding.cpp index 91fa2aa7bd..a65f495293 100644 --- a/src/qml/qml/qqmlbinding.cpp +++ b/src/qml/qml/qqmlbinding.cpp @@ -137,14 +137,14 @@ QQmlBinding::QQmlBinding(const QString &str, QObject *obj, v4function.set(v4, qmlBinding(ctxt, obj, str, url, lineNumber)); } -QQmlBinding::QQmlBinding(const QV4::ValueRef functionPtr, QObject *obj, QQmlContextData *ctxt) +QQmlBinding::QQmlBinding(const QV4::Value &functionPtr, QObject *obj, QQmlContextData *ctxt) : QQmlJavaScriptExpression(&QQmlBinding_jsvtable), QQmlAbstractBinding(Binding) { setNotifyOnValueChanged(true); QQmlAbstractExpression::setContext(ctxt); setScopeObject(obj); - v4function.set(functionPtr->asObject()->engine(), functionPtr); + v4function.set(functionPtr.asObject()->engine(), functionPtr); } QQmlBinding::~QQmlBinding() diff --git a/src/qml/qml/qqmlbinding_p.h b/src/qml/qml/qqmlbinding_p.h index 4a44f11cd4..aded349b4f 100644 --- a/src/qml/qml/qqmlbinding_p.h +++ b/src/qml/qml/qqmlbinding_p.h @@ -73,7 +73,7 @@ public: QQmlBinding(const QString &, QObject *, QQmlContextData *); QQmlBinding(const QString &, QObject *, QQmlContextData *, const QString &url, quint16 lineNumber, quint16 columnNumber); - QQmlBinding(const QV4::ValueRef, QObject *, QQmlContextData *); + QQmlBinding(const QV4::Value &, QObject *, QQmlContextData *); void setTarget(const QQmlProperty &); void setTarget(QObject *, const QQmlPropertyData &, QQmlContextData *); diff --git a/src/qml/qml/qqmlboundsignal.cpp b/src/qml/qml/qqmlboundsignal.cpp index 811efcaef5..126996266f 100644 --- a/src/qml/qml/qqmlboundsignal.cpp +++ b/src/qml/qml/qqmlboundsignal.cpp @@ -86,10 +86,10 @@ QQmlBoundSignalExpression::QQmlBoundSignalExpression(QObject *target, int index, init(ctxt, scope); } -QQmlBoundSignalExpression::QQmlBoundSignalExpression(QObject *target, int index, QQmlContextData *ctxt, QObject *scope, const QV4::ValueRef &function) +QQmlBoundSignalExpression::QQmlBoundSignalExpression(QObject *target, int index, QQmlContextData *ctxt, QObject *scope, const QV4::Value &function) : QQmlJavaScriptExpression(&QQmlBoundSignalExpression_jsvtable), m_index(index), - m_function(function->asObject()->engine(), function), + m_function(function.asObject()->engine(), function), m_target(target), m_extra(0) { diff --git a/src/qml/qml/qqmlboundsignal_p.h b/src/qml/qml/qqmlboundsignal_p.h index 6e0fbe90e6..0efd0a93a8 100644 --- a/src/qml/qml/qqmlboundsignal_p.h +++ b/src/qml/qml/qqmlboundsignal_p.h @@ -68,7 +68,7 @@ public: const QString ¶meterString = QString()); QQmlBoundSignalExpression(QObject *target, int index, - QQmlContextData *ctxt, QObject *scope, const QV4::ValueRef &function); + QQmlContextData *ctxt, QObject *scope, const QV4::Value &function); QQmlBoundSignalExpression(QObject *target, int index, QQmlContextData *ctxt, QObject *scope, QV4::Function *runtimeFunction); diff --git a/src/qml/qml/qqmlcomponent.cpp b/src/qml/qml/qqmlcomponent.cpp index 5aed1bc0dc..e98529a25e 100644 --- a/src/qml/qml/qqmlcomponent.cpp +++ b/src/qml/qml/qqmlcomponent.cpp @@ -1383,7 +1383,7 @@ void QQmlComponent::incubateObject(QQmlV4Function *args) } // XXX used by QSGLoader -void QQmlComponentPrivate::initializeObjectWithInitialProperties(const QV4::ValueRef qmlGlobal, const QV4::ValueRef valuemap, QObject *toCreate) +void QQmlComponentPrivate::initializeObjectWithInitialProperties(const QV4::Value &qmlGlobal, const QV4::Value &valuemap, QObject *toCreate) { QQmlEnginePrivate *ep = QQmlEnginePrivate::get(engine); QV4::ExecutionEngine *v4engine = QV8Engine::getV4(ep->v8engine()); @@ -1392,7 +1392,7 @@ void QQmlComponentPrivate::initializeObjectWithInitialProperties(const QV4::Valu QV4::ScopedValue object(scope, QV4::QObjectWrapper::wrap(v4engine, toCreate)); Q_ASSERT(object->asObject()); - if (!valuemap->isUndefined()) { + if (!valuemap.isUndefined()) { QV4::ScopedObject qmlGlobalObj(scope, qmlGlobal); QV4::ScopedFunctionObject f(scope, QV4::Script::evaluate(v4engine, QString::fromLatin1(INITIALPROPERTIES_SOURCE), qmlGlobalObj)); diff --git a/src/qml/qml/qqmlcomponent_p.h b/src/qml/qml/qqmlcomponent_p.h index 1dcc605ca4..f59c095b91 100644 --- a/src/qml/qml/qqmlcomponent_p.h +++ b/src/qml/qml/qqmlcomponent_p.h @@ -82,7 +82,7 @@ public: QObject *beginCreate(QQmlContextData *); void completeCreate(); - void initializeObjectWithInitialProperties(const QV4::ValueRef qmlGlobal, const QV4::ValueRef valuemap, QObject *toCreate); + void initializeObjectWithInitialProperties(const QV4::Value &qmlGlobal, const QV4::Value &valuemap, QObject *toCreate); QQmlTypeData *typeData; virtual void typeDataReady(QQmlTypeData *); diff --git a/src/qml/qml/qqmlcontextwrapper.cpp b/src/qml/qml/qqmlcontextwrapper.cpp index 29f5152f77..946ea01565 100644 --- a/src/qml/qml/qqmlcontextwrapper.cpp +++ b/src/qml/qml/qqmlcontextwrapper.cpp @@ -99,23 +99,23 @@ QQmlContextData *QmlContextWrapper::callingContext(ExecutionEngine *v4) return !!c ? c->getContext() : 0; } -QQmlContextData *QmlContextWrapper::getContext(const ValueRef value) +QQmlContextData *QmlContextWrapper::getContext(const Value &value) { - if (!value->isObject()) + if (!value.isObject()) return 0; - QV4::ExecutionEngine *v4 = value->asObject()->engine(); + QV4::ExecutionEngine *v4 = value.asObject()->engine(); Scope scope(v4); QV4::Scoped c(scope, value); return c ? c->getContext() : 0; } -void QmlContextWrapper::takeContextOwnership(const ValueRef qmlglobal) +void QmlContextWrapper::takeContextOwnership(const Value &qmlglobal) { - Q_ASSERT(qmlglobal->isObject()); + Q_ASSERT(qmlglobal.isObject()); - QV4::ExecutionEngine *v4 = qmlglobal->asObject()->engine(); + QV4::ExecutionEngine *v4 = qmlglobal.asObject()->engine(); Scope scope(v4); QV4::Scoped c(scope, qmlglobal); Q_ASSERT(c); @@ -182,7 +182,7 @@ ReturnedValue QmlContextWrapper::get(Managed *m, String *name, bool *hasProperty if (hasProperty) *hasProperty = true; if (r.scriptIndex != -1) { - QV4::ScopedObject scripts(scope, context->importedScripts); + QV4::ScopedObject scripts(scope, context->importedScripts.valueRef()); return scripts->getIndexed(r.scriptIndex); } else if (r.type) { return QmlTypeWrapper::create(v4, scopeObject, r.type); @@ -265,7 +265,7 @@ ReturnedValue QmlContextWrapper::get(Managed *m, String *name, bool *hasProperty return Primitive::undefinedValue().asReturnedValue(); } -void QmlContextWrapper::put(Managed *m, String *name, const ValueRef value) +void QmlContextWrapper::put(Managed *m, String *name, const Value &value) { Q_ASSERT(m->as()); QmlContextWrapper *resource = static_cast(m); diff --git a/src/qml/qml/qqmlcontextwrapper_p.h b/src/qml/qml/qqmlcontextwrapper_p.h index 96c7bc9af4..728484ee0a 100644 --- a/src/qml/qml/qqmlcontextwrapper_p.h +++ b/src/qml/qml/qqmlcontextwrapper_p.h @@ -95,16 +95,16 @@ struct Q_QML_EXPORT QmlContextWrapper : Object static ReturnedValue urlScope(ExecutionEngine *v4, const QUrl &); static QQmlContextData *callingContext(ExecutionEngine *v4); - static void takeContextOwnership(const ValueRef qmlglobal); + static void takeContextOwnership(const Value &qmlglobal); inline QObject *getScopeObject() const { return d()->scopeObject; } inline QQmlContextData *getContext() const { return d()->context; } - static QQmlContextData *getContext(const ValueRef value); + static QQmlContextData *getContext(const Value &value); void setReadOnly(bool b) { d()->readOnly = b; } static ReturnedValue get(Managed *m, String *name, bool *hasProperty); - static void put(Managed *m, String *name, const ValueRef value); + static void put(Managed *m, String *name, const Value &value); static void markObjects(Heap::Base *m, ExecutionEngine *engine); static void registerQmlDependencies(ExecutionEngine *context, const CompiledData::Function *compiledFunction); diff --git a/src/qml/qml/qqmljavascriptexpression.cpp b/src/qml/qml/qqmljavascriptexpression.cpp index 5f8190b8dc..447ee76952 100644 --- a/src/qml/qml/qqmljavascriptexpression.cpp +++ b/src/qml/qml/qqmljavascriptexpression.cpp @@ -106,7 +106,7 @@ void QQmlJavaScriptExpression::resetNotifyOnValueChanged() } QV4::ReturnedValue QQmlJavaScriptExpression::evaluate(QQmlContextData *context, - const QV4::ValueRef function, bool *isUndefined) + const QV4::Value &function, bool *isUndefined) { QV4::ExecutionEngine *v4 = QV8Engine::getV4(context->engine); QV4::Scope scope(v4); @@ -116,13 +116,13 @@ QV4::ReturnedValue QQmlJavaScriptExpression::evaluate(QQmlContextData *context, } QV4::ReturnedValue QQmlJavaScriptExpression::evaluate(QQmlContextData *context, - const QV4::ValueRef function, + const QV4::Value &function, QV4::CallData *callData, bool *isUndefined) { Q_ASSERT(context && context->engine); - if (function->isUndefined()) { + if (function.isUndefined()) { if (isUndefined) *isUndefined = true; return QV4::Encode::undefined(); @@ -154,7 +154,7 @@ QV4::ReturnedValue QQmlJavaScriptExpression::evaluate(QQmlContextData *context, callData->thisObject = value; } - result = function->asFunctionObject()->call(callData); + result = function.asFunctionObject()->call(callData); if (scope.hasException()) { if (watcher.wasDeleted()) scope.engine->catchException(); // ignore exception diff --git a/src/qml/qml/qqmljavascriptexpression_p.h b/src/qml/qml/qqmljavascriptexpression_p.h index dc48c2458d..4d0727ed6b 100644 --- a/src/qml/qml/qqmljavascriptexpression_p.h +++ b/src/qml/qml/qqmljavascriptexpression_p.h @@ -102,8 +102,8 @@ public: QQmlJavaScriptExpression(VTable *vtable); - QV4::ReturnedValue evaluate(QQmlContextData *, const QV4::ValueRef function, bool *isUndefined); - QV4::ReturnedValue evaluate(QQmlContextData *, const QV4::ValueRef function, QV4::CallData *callData, bool *isUndefined); + QV4::ReturnedValue evaluate(QQmlContextData *, const QV4::Value &function, bool *isUndefined); + QV4::ReturnedValue evaluate(QQmlContextData *, const QV4::Value &function, QV4::CallData *callData, bool *isUndefined); inline bool notifyOnValueChanged() const; diff --git a/src/qml/qml/qqmllistwrapper.cpp b/src/qml/qml/qqmllistwrapper.cpp index af955ff15c..35adc063aa 100644 --- a/src/qml/qml/qqmllistwrapper.cpp +++ b/src/qml/qml/qqmllistwrapper.cpp @@ -130,7 +130,7 @@ ReturnedValue QmlListWrapper::getIndexed(Managed *m, uint index, bool *hasProper return Primitive::undefinedValue().asReturnedValue(); } -void QmlListWrapper::put(Managed *m, String *name, const ValueRef value) +void QmlListWrapper::put(Managed *m, String *name, const Value &value) { // doesn't do anything. Should we throw? Q_UNUSED(m); diff --git a/src/qml/qml/qqmllistwrapper_p.h b/src/qml/qml/qqmllistwrapper_p.h index 1c2ad03992..976acf421f 100644 --- a/src/qml/qml/qqmllistwrapper_p.h +++ b/src/qml/qml/qqmllistwrapper_p.h @@ -83,7 +83,7 @@ struct Q_QML_EXPORT QmlListWrapper : Object static ReturnedValue get(Managed *m, String *name, bool *hasProperty); static ReturnedValue getIndexed(Managed *m, uint index, bool *hasProperty); - static void put(Managed *m, String *name, const ValueRef value); + static void put(Managed *m, String *name, const Value &value); static void advanceIterator(Managed *m, ObjectIterator *it, Heap::String **name, uint *index, Property *p, PropertyAttributes *attributes); }; diff --git a/src/qml/qml/qqmllocale.cpp b/src/qml/qml/qqmllocale.cpp index 05cfd2e2a1..5a27739156 100644 --- a/src/qml/qml/qqmllocale.cpp +++ b/src/qml/qml/qqmllocale.cpp @@ -55,9 +55,9 @@ DEFINE_OBJECT_VTABLE(QQmlLocaleData); if (!r) \ V4THROW_ERROR("Not a valid Locale object") -static bool isLocaleObject(const QV4::ValueRef val) +static bool isLocaleObject(const QV4::Value &val) { - return val->as(); + return val.as(); } //-------------- diff --git a/src/qml/qml/qqmlobjectcreator.cpp b/src/qml/qml/qqmlobjectcreator.cpp index 8c34fc3997..69b68be8a3 100644 --- a/src/qml/qml/qqmlobjectcreator.cpp +++ b/src/qml/qml/qqmlobjectcreator.cpp @@ -211,7 +211,7 @@ QObject *QQmlObjectCreator::create(int subComponentIndex, QObject *parent, QQmlI context->importedScripts.set(v4, scripts); for (int i = 0; i < compiledData->scripts.count(); ++i) { QQmlScriptData *s = compiledData->scripts.at(i); - scripts->putIndexed(i, s->scriptValueForContext(context)); + scripts->putIndexed(i, *s->scriptValueForContext(context).valueRef()); } } else if (sharedState->creationContext) { context->importedScripts = sharedState->creationContext->importedScripts; diff --git a/src/qml/qml/qqmlproperty.cpp b/src/qml/qml/qqmlproperty.cpp index abdb938e52..228f94503f 100644 --- a/src/qml/qml/qqmlproperty.cpp +++ b/src/qml/qml/qqmlproperty.cpp @@ -1459,7 +1459,7 @@ bool QQmlPropertyPrivate::writeBinding(QObject *object, const QQmlPropertyData &core, QQmlContextData *context, QQmlJavaScriptExpression *expression, - const QV4::ValueRef result, bool isUndefined, + const QV4::Value &result, bool isUndefined, WriteFlags flags) { Q_ASSERT(object); @@ -1481,22 +1481,22 @@ bool QQmlPropertyPrivate::writeBinding(QObject *object, if (!isUndefined && !core.isValueTypeVirtual()) { switch (core.propType) { case QMetaType::Int: - if (result->isInteger()) - QUICK_STORE(int, result->integerValue()) - else if (result->isNumber()) - QUICK_STORE(int, result->doubleValue()) + if (result.isInteger()) + QUICK_STORE(int, result.integerValue()) + else if (result.isNumber()) + QUICK_STORE(int, result.doubleValue()) break; case QMetaType::Double: - if (result->isNumber()) - QUICK_STORE(double, result->asDouble()) + if (result.isNumber()) + QUICK_STORE(double, result.asDouble()) break; case QMetaType::Float: - if (result->isNumber()) - QUICK_STORE(float, result->asDouble()) + if (result.isNumber()) + QUICK_STORE(float, result.asDouble()) break; case QMetaType::QString: - if (result->isString()) - QUICK_STORE(QString, result->toQStringNoThrow()) + if (result.isString()) + QUICK_STORE(QString, result.toQStringNoThrow()) break; default: break; @@ -1514,7 +1514,7 @@ bool QQmlPropertyPrivate::writeBinding(QObject *object, if (isUndefined) { } else if (core.isQList()) { value = QV8Engine::getV4(v8engine)->toVariant(result, qMetaTypeId >()); - } else if (result->isNull() && core.isQObject()) { + } else if (result.isNull() && core.isQObject()) { value = QVariant::fromValue((QObject *)0); } else if (core.propType == qMetaTypeId >()) { value = resolvedUrlSequence(QV8Engine::getV4(v8engine)->toVariant(result, qMetaTypeId >()), context); @@ -1525,7 +1525,7 @@ bool QQmlPropertyPrivate::writeBinding(QObject *object, if (expression->hasError()) { return false; } else if (isVarProperty) { - QV4::FunctionObject *f = result->asFunctionObject(); + QV4::FunctionObject *f = result.asFunctionObject(); if (f && f->isBinding()) { // we explicitly disallow this case to avoid confusion. Users can still store one // in an array in a var property if they need to, but the common case is user error. @@ -1543,7 +1543,7 @@ bool QQmlPropertyPrivate::writeBinding(QObject *object, } else if (isUndefined && type == qMetaTypeId()) { writeValueProperty(object, core, QVariant(), context, flags); } else if (type == qMetaTypeId()) { - QV4::FunctionObject *f = result->asFunctionObject(); + QV4::FunctionObject *f = result.asFunctionObject(); if (f && f->isBinding()) { expression->delayedError()->setErrorDescription(QLatin1String("Invalid use of Qt.binding() in a binding declaration.")); expression->delayedError()->setErrorObject(object); @@ -1561,7 +1561,7 @@ bool QQmlPropertyPrivate::writeBinding(QObject *object, expression->delayedError()->setErrorDescription(errorStr); expression->delayedError()->setErrorObject(object); return false; - } else if (QV4::FunctionObject *f = result->asFunctionObject()) { + } else if (QV4::FunctionObject *f = result.asFunctionObject()) { if (f->isBinding()) expression->delayedError()->setErrorDescription(QLatin1String("Invalid use of Qt.binding() in a binding declaration.")); else diff --git a/src/qml/qml/qqmlproperty_p.h b/src/qml/qml/qqmlproperty_p.h index 70b632c943..4cc9f479d8 100644 --- a/src/qml/qml/qqmlproperty_p.h +++ b/src/qml/qml/qqmlproperty_p.h @@ -140,7 +140,7 @@ public: static bool writeBinding(QObject *, const QQmlPropertyData &, QQmlContextData *context, QQmlJavaScriptExpression *expression, - const QV4::ValueRef result, bool isUndefined, + const QV4::Value &result, bool isUndefined, WriteFlags flags); static int valueTypeCoreIndex(const QQmlProperty &that); static int bindingIndex(const QQmlProperty &that); diff --git a/src/qml/qml/qqmltypeloader.cpp b/src/qml/qml/qqmltypeloader.cpp index 2a000e34e1..7f4161494a 100644 --- a/src/qml/qml/qqmltypeloader.cpp +++ b/src/qml/qml/qqmltypeloader.cpp @@ -2506,10 +2506,10 @@ QV4::PersistentValue QQmlScriptData::scriptValueForContext(QQmlContextData *pare scriptsArray = v4->newArrayObject(scripts.count()); ctxt->importedScripts.set(v4, scriptsArray); } else { - scriptsArray = ctxt->importedScripts; + scriptsArray = ctxt->importedScripts.valueRef(); } for (int ii = 0; ii < scripts.count(); ++ii) - scriptsArray->putIndexed(ii, scripts.at(ii)->scriptData()->scriptValueForContext(ctxt)); + scriptsArray->putIndexed(ii, *scripts.at(ii)->scriptData()->scriptValueForContext(ctxt).valueRef()); if (!hasEngine()) initialize(parentCtxt->engine); diff --git a/src/qml/qml/qqmltypewrapper.cpp b/src/qml/qml/qqmltypewrapper.cpp index 2c0972bced..c8cefb8a4c 100644 --- a/src/qml/qml/qqmltypewrapper.cpp +++ b/src/qml/qml/qqmltypewrapper.cpp @@ -206,7 +206,7 @@ ReturnedValue QmlTypeWrapper::get(Managed *m, String *name, bool *hasProperty) if (r.type) { return create(scope.engine, object, r.type, w->d()->mode); } else if (r.scriptIndex != -1) { - QV4::ScopedObject scripts(scope, context->importedScripts); + QV4::ScopedObject scripts(scope, context->importedScripts.valueRef()); return scripts->getIndexed(r.scriptIndex); } else if (r.importNamespace) { return create(scope.engine, object, context->imports, r.importNamespace); @@ -228,7 +228,7 @@ ReturnedValue QmlTypeWrapper::get(Managed *m, String *name, bool *hasProperty) } -void QmlTypeWrapper::put(Managed *m, String *name, const ValueRef value) +void QmlTypeWrapper::put(Managed *m, String *name, const Value &value) { Q_ASSERT(m->as()); QmlTypeWrapper *w = static_cast(m); diff --git a/src/qml/qml/qqmltypewrapper_p.h b/src/qml/qml/qqmltypewrapper_p.h index 321e0cf0ec..2d2aef2962 100644 --- a/src/qml/qml/qqmltypewrapper_p.h +++ b/src/qml/qml/qqmltypewrapper_p.h @@ -95,7 +95,7 @@ struct Q_QML_EXPORT QmlTypeWrapper : Object static ReturnedValue get(Managed *m, String *name, bool *hasProperty); - static void put(Managed *m, String *name, const ValueRef value); + static void put(Managed *m, String *name, const Value &value); static PropertyAttributes query(const Managed *, String *name); static bool isEqualTo(Managed *that, Managed *o); diff --git a/src/qml/qml/qqmlvaluetypewrapper.cpp b/src/qml/qml/qqmlvaluetypewrapper.cpp index 1e138be341..b80472559b 100644 --- a/src/qml/qml/qqmlvaluetypewrapper.cpp +++ b/src/qml/qml/qqmlvaluetypewrapper.cpp @@ -337,7 +337,7 @@ ReturnedValue QQmlValueTypeWrapper::get(Managed *m, String *name, bool *hasPrope #undef VALUE_TYPE_ACCESSOR } -void QQmlValueTypeWrapper::put(Managed *m, String *name, const ValueRef value) +void QQmlValueTypeWrapper::put(Managed *m, String *name, const Value &value) { Q_ASSERT(m->as()); ExecutionEngine *v4 = static_cast(m)->engine(); @@ -389,7 +389,7 @@ void QQmlValueTypeWrapper::put(Managed *m, String *name, const ValueRef value) cacheData.valueTypeCoreIndex = pd->coreIndex; cacheData.valueTypePropType = property.userType(); - QV4::Scoped bindingFunction(scope, f); + QV4::Scoped bindingFunction(scope, (const Value &)f); bindingFunction->initBindingLocation(); newBinding = new QQmlBinding(value, reference->d()->object, context); diff --git a/src/qml/qml/qqmlvaluetypewrapper_p.h b/src/qml/qml/qqmlvaluetypewrapper_p.h index 2d0fbcbf52..193c353254 100644 --- a/src/qml/qml/qqmlvaluetypewrapper_p.h +++ b/src/qml/qml/qqmlvaluetypewrapper_p.h @@ -88,7 +88,7 @@ public: bool isEqual(const QVariant& value); static ReturnedValue get(Managed *m, String *name, bool *hasProperty); - static void put(Managed *m, String *name, const ValueRef value); + static void put(Managed *m, String *name, const Value &value); static bool isEqualTo(Managed *m, Managed *other); static PropertyAttributes query(const Managed *, String *name); diff --git a/src/qml/qml/qqmlvmemetaobject.cpp b/src/qml/qml/qqmlvmemetaobject.cpp index 40ae8ce35a..3c078ea42a 100644 --- a/src/qml/qml/qqmlvmemetaobject.cpp +++ b/src/qml/qml/qqmlvmemetaobject.cpp @@ -1016,7 +1016,7 @@ QVariant QQmlVMEMetaObject::readPropertyAsVariant(int id) } } -void QQmlVMEMetaObject::writeVarProperty(int id, const QV4::ValueRef value) +void QQmlVMEMetaObject::writeVarProperty(int id, const QV4::Value &value) { Q_ASSERT(id >= firstVarPropertyIndex); if (!ensureVarPropertiesAllocated()) @@ -1195,7 +1195,7 @@ QV4::ReturnedValue QQmlVMEMetaObject::vmeProperty(int index) return readVarProperty(index - propOffset()); } -void QQmlVMEMetaObject::setVMEProperty(int index, const QV4::ValueRef v) +void QQmlVMEMetaObject::setVMEProperty(int index, const QV4::Value &v) { if (index < propOffset()) { Q_ASSERT(parentVMEMetaObject()); diff --git a/src/qml/qml/qqmlvmemetaobject_p.h b/src/qml/qml/qqmlvmemetaobject_p.h index a7df7c6e53..b9cdc0a8cd 100644 --- a/src/qml/qml/qqmlvmemetaobject_p.h +++ b/src/qml/qml/qqmlvmemetaobject_p.h @@ -162,7 +162,7 @@ public: quint16 vmeMethodLineNumber(int index); void setVmeMethod(int index, QV4::ValueRef function); QV4::ReturnedValue vmeProperty(int index); - void setVMEProperty(int index, const QV4::ValueRef v); + void setVMEProperty(int index, const QV4::Value &v); void connectAliasSignal(int index, bool indexInSignalRange); @@ -217,7 +217,7 @@ public: QV4::ReturnedValue method(int); QV4::ReturnedValue readVarProperty(int); - void writeVarProperty(int, const QV4::ValueRef); + void writeVarProperty(int, const QV4::Value &); QVariant readPropertyAsVariant(int); void writeProperty(int, const QVariant &); diff --git a/src/qml/qml/qqmlxmlhttprequest.cpp b/src/qml/qml/qqmlxmlhttprequest.cpp index 7c4413a500..527e9c8446 100644 --- a/src/qml/qml/qqmlxmlhttprequest.cpp +++ b/src/qml/qml/qqmlxmlhttprequest.cpp @@ -93,7 +93,7 @@ static inline QQmlXMLHttpRequestData *xhrdata(ExecutionEngine *v4) return (QQmlXMLHttpRequestData *)v4->v8Engine->xmlHttpRequestData(); } -static ReturnedValue constructMeObject(const ValueRef thisObj, ExecutionEngine *v4) +static ReturnedValue constructMeObject(const Value &thisObj, ExecutionEngine *v4) { Scope scope(v4); ScopedObject meObj(scope, v4->newObject()); @@ -1014,9 +1014,9 @@ public: int replyStatus() const; QString replyStatusText() const; - ReturnedValue open(const ValueRef me, const QString &, const QUrl &, LoadType); - ReturnedValue send(const ValueRef me, const QByteArray &); - ReturnedValue abort(const ValueRef me); + ReturnedValue open(const Value &me, const QString &, const QUrl &, LoadType); + ReturnedValue send(const Value &me, const QByteArray &); + ReturnedValue abort(const Value &me); void addHeader(const QString &, const QString &); QString header(const QString &name); @@ -1059,11 +1059,11 @@ private: void readEncoding(); ReturnedValue getMe() const; - void setMe(const ValueRef me); + void setMe(const Value &me); PersistentValue m_me; - void dispatchCallbackImpl(const ValueRef me); - void dispatchCallback(const ValueRef me); + void dispatchCallbackImpl(const Value &me); + void dispatchCallback(const Value &me); int m_status; QString m_statusText; @@ -1113,7 +1113,7 @@ QString QQmlXMLHttpRequest::replyStatusText() const return m_statusText; } -ReturnedValue QQmlXMLHttpRequest::open(const ValueRef me, const QString &method, const QUrl &url, LoadType loadType) +ReturnedValue QQmlXMLHttpRequest::open(const Value &me, const QString &method, const QUrl &url, LoadType loadType) { destroyNetwork(); m_sendFlag = false; @@ -1258,7 +1258,7 @@ void QQmlXMLHttpRequest::requestFromUrl(const QUrl &url) } } -ReturnedValue QQmlXMLHttpRequest::send(const ValueRef me, const QByteArray &data) +ReturnedValue QQmlXMLHttpRequest::send(const Value &me, const QByteArray &data) { m_errorFlag = false; m_sendFlag = true; @@ -1272,7 +1272,7 @@ ReturnedValue QQmlXMLHttpRequest::send(const ValueRef me, const QByteArray &data return Encode::undefined(); } -ReturnedValue QQmlXMLHttpRequest::abort(const ValueRef me) +ReturnedValue QQmlXMLHttpRequest::abort(const Value &me) { destroyNetwork(); m_responseEntityBody = QByteArray(); @@ -1298,7 +1298,7 @@ ReturnedValue QQmlXMLHttpRequest::getMe() const return m_me.value(); } -void QQmlXMLHttpRequest::setMe(const ValueRef me) +void QQmlXMLHttpRequest::setMe(const Value &me) { m_me.set(v4, me); } @@ -1407,7 +1407,7 @@ void QQmlXMLHttpRequest::finished() if (m_state < HeadersReceived) { m_state = HeadersReceived; fillHeadersList (); - dispatchCallback(m_me); + dispatchCallback(*m_me.valueRef()); } m_responseEntityBody.append(m_network->readAll()); readEncoding(); @@ -1424,11 +1424,11 @@ void QQmlXMLHttpRequest::finished() destroyNetwork(); if (m_state < Loading) { m_state = Loading; - dispatchCallback(m_me); + dispatchCallback(*m_me.valueRef()); } m_state = Done; - dispatchCallback(m_me); + dispatchCallback(*m_me.valueRef()); Scope scope(v4); ScopedValue v(scope, Primitive::undefinedValue()); @@ -1510,7 +1510,7 @@ const QByteArray &QQmlXMLHttpRequest::rawResponseBody() const return m_responseEntityBody; } -void QQmlXMLHttpRequest::dispatchCallbackImpl(const ValueRef me) +void QQmlXMLHttpRequest::dispatchCallbackImpl(const Value &me) { QV4::Scope scope(v4); ScopedObject o(scope, me); @@ -1554,7 +1554,7 @@ void QQmlXMLHttpRequest::dispatchCallbackImpl(const ValueRef me) } -void QQmlXMLHttpRequest::dispatchCallback(const ValueRef me) +void QQmlXMLHttpRequest::dispatchCallback(const Value &me) { dispatchCallbackImpl(me); if (v4->hasException) { diff --git a/src/qml/qml/v8/qv8engine.cpp b/src/qml/qml/v8/qv8engine.cpp index 73113be9ba..154b3830ef 100644 --- a/src/qml/qml/v8/qv8engine.cpp +++ b/src/qml/qml/v8/qv8engine.cpp @@ -223,7 +223,7 @@ void QV8Engine::initializeGlobal() } } -void QV8Engine::freezeObject(const QV4::ValueRef value) +void QV8Engine::freezeObject(const QV4::Value &value) { QV4::Scope scope(m_v4Engine); QV4::ScopedFunctionObject f(scope, m_freezeObject.value()); diff --git a/src/qml/qml/v8/qv8engine_p.h b/src/qml/qml/v8/qv8engine_p.h index 1d3e427877..25f599ca72 100644 --- a/src/qml/qml/v8/qv8engine_p.h +++ b/src/qml/qml/v8/qv8engine_p.h @@ -130,7 +130,7 @@ private: QQmlV4Function &operator=(const QQmlV4Function &); QQmlV4Function(QV4::CallData *callData, QV4::ValueRef retVal, - const QV4::ValueRef global, QQmlContextData *c, QV4::ExecutionEngine *e) + const QV4::Value &global, QQmlContextData *c, QV4::ExecutionEngine *e) : callData(callData), retVal(retVal), ctx(c), e(e) { callData->thisObject.val = global.asReturnedValue(); @@ -194,7 +194,7 @@ public: QQmlContextData *callingContext(); - void freezeObject(const QV4::ValueRef value); + void freezeObject(const QV4::Value &value); // Return the network access manager for this engine. By default this returns the network // access manager of the QQmlEngine. It is overridden in the case of a threaded v8 diff --git a/src/qml/types/qqmldelegatemodel.cpp b/src/qml/types/qqmldelegatemodel.cpp index 61c3e17c63..6db5765a34 100644 --- a/src/qml/types/qqmldelegatemodel.cpp +++ b/src/qml/types/qqmldelegatemodel.cpp @@ -57,10 +57,10 @@ namespace QV4 { namespace Heap { struct DelegateModelGroupFunction : FunctionObject { - DelegateModelGroupFunction(QV4::ExecutionContext *scope, uint flag, QV4::ReturnedValue (*code)(QQmlDelegateModelItem *item, uint flag, const QV4::ValueRef arg)); + DelegateModelGroupFunction(QV4::ExecutionContext *scope, uint flag, QV4::ReturnedValue (*code)(QQmlDelegateModelItem *item, uint flag, const QV4::Value &arg)); uint flag; - QV4::ReturnedValue (*code)(QQmlDelegateModelItem *item, uint flag, const QV4::ValueRef arg); + QV4::ReturnedValue (*code)(QQmlDelegateModelItem *item, uint flag, const QV4::Value &arg); }; struct QQmlDelegateModelGroupChange : Object { @@ -81,7 +81,7 @@ struct DelegateModelGroupFunction : QV4::FunctionObject { V4_OBJECT2(DelegateModelGroupFunction, FunctionObject) - static Heap::DelegateModelGroupFunction *create(QV4::ExecutionContext *scope, uint flag, QV4::ReturnedValue (*code)(QQmlDelegateModelItem *item, uint flag, const QV4::ValueRef arg)) + static Heap::DelegateModelGroupFunction *create(QV4::ExecutionContext *scope, uint flag, QV4::ReturnedValue (*code)(QQmlDelegateModelItem *item, uint flag, const QV4::Value &arg)) { return scope->engine()->memoryManager->alloc(scope, flag, code); } @@ -105,7 +105,7 @@ struct DelegateModelGroupFunction : QV4::FunctionObject } }; -Heap::DelegateModelGroupFunction::DelegateModelGroupFunction(QV4::ExecutionContext *scope, uint flag, QV4::ReturnedValue (*code)(QQmlDelegateModelItem *item, uint flag, const QV4::ValueRef arg)) +Heap::DelegateModelGroupFunction::DelegateModelGroupFunction(QV4::ExecutionContext *scope, uint flag, QV4::ReturnedValue (*code)(QQmlDelegateModelItem *item, uint flag, const QV4::Value &arg)) : QV4::Heap::FunctionObject(scope, QStringLiteral("DelegateModelGroupFunction")) , flag(flag) , code(code) @@ -1621,7 +1621,7 @@ QQmlDelegateModelAttached *QQmlDelegateModel::qmlAttachedProperties(QObject *obj return new QQmlDelegateModelAttached(obj); } -bool QQmlDelegateModelPrivate::insert(Compositor::insert_iterator &before, const QV4::ValueRef object, int groups) +bool QQmlDelegateModelPrivate::insert(Compositor::insert_iterator &before, const QV4::Value &object, int groups) { if (!m_context || !m_context->isValid()) return false; @@ -1629,10 +1629,10 @@ bool QQmlDelegateModelPrivate::insert(Compositor::insert_iterator &before, const QQmlDelegateModelItem *cacheItem = m_adaptorModel.createItem(m_cacheMetaType, m_context->engine(), -1); if (!cacheItem) return false; - if (!object->isObject()) + if (!object.isObject()) return false; - QV4::ExecutionEngine *v4 = object->asObject()->engine(); + QV4::ExecutionEngine *v4 = object.asObject()->engine(); QV4::Scope scope(v4); QV4::ScopedObject o(scope, object); if (!o) @@ -1770,7 +1770,7 @@ int QQmlDelegateModelItemMetaType::parseGroups(const QStringList &groups) const return groupFlags; } -int QQmlDelegateModelItemMetaType::parseGroups(const QV4::ValueRef groups) const +int QQmlDelegateModelItemMetaType::parseGroups(const QV4::Value &groups) const { int groupFlags = 0; QV4::Scope scope(QV8Engine::getV4(v8Engine)); @@ -1847,19 +1847,19 @@ QV4::ReturnedValue QQmlDelegateModelItem::set_groups(QV4::CallContext *ctx) return QV4::Encode::undefined(); } -QV4::ReturnedValue QQmlDelegateModelItem::get_member(QQmlDelegateModelItem *thisItem, uint flag, const QV4::ValueRef) +QV4::ReturnedValue QQmlDelegateModelItem::get_member(QQmlDelegateModelItem *thisItem, uint flag, const QV4::Value &) { return QV4::Encode(bool(thisItem->groups & (1 << flag))); } -QV4::ReturnedValue QQmlDelegateModelItem::set_member(QQmlDelegateModelItem *cacheItem, uint flag, const QV4::ValueRef arg) +QV4::ReturnedValue QQmlDelegateModelItem::set_member(QQmlDelegateModelItem *cacheItem, uint flag, const QV4::Value &arg) { if (!cacheItem->metaType->model) return QV4::Encode::undefined(); QQmlDelegateModelPrivate *model = QQmlDelegateModelPrivate::get(cacheItem->metaType->model); - bool member = arg->toBoolean(); + bool member = arg.toBoolean(); uint groupFlag = (1 << flag); if (member == ((cacheItem->groups & groupFlag) != 0)) return QV4::Encode::undefined(); @@ -1873,7 +1873,7 @@ QV4::ReturnedValue QQmlDelegateModelItem::set_member(QQmlDelegateModelItem *cach return QV4::Encode::undefined(); } -QV4::ReturnedValue QQmlDelegateModelItem::get_index(QQmlDelegateModelItem *thisItem, uint flag, const QV4::ValueRef) +QV4::ReturnedValue QQmlDelegateModelItem::get_index(QQmlDelegateModelItem *thisItem, uint flag, const QV4::Value &) { return QV4::Encode((int)thisItem->groupIndex(Compositor::Group(flag))); } @@ -2494,17 +2494,17 @@ QQmlV4Handle QQmlDelegateModelGroup::get(int index) return QQmlV4Handle(o); } -bool QQmlDelegateModelGroupPrivate::parseIndex(const QV4::ValueRef value, int *index, Compositor::Group *group) const +bool QQmlDelegateModelGroupPrivate::parseIndex(const QV4::Value &value, int *index, Compositor::Group *group) const { - if (value->isNumber()) { - *index = value->toInt32(); + if (value.isNumber()) { + *index = value.toInt32(); return true; } - if (!value->isObject()) + if (!value.isObject()) return false; - QV4::ExecutionEngine *v4 = value->asObject()->engine(); + QV4::ExecutionEngine *v4 = value.asObject()->engine(); QV4::Scope scope(v4); QV4::Scoped object(scope, value); diff --git a/src/qml/types/qqmldelegatemodel_p_p.h b/src/qml/types/qqmldelegatemodel_p_p.h index ced30b9d1b..413ee826ae 100644 --- a/src/qml/types/qqmldelegatemodel_p_p.h +++ b/src/qml/types/qqmldelegatemodel_p_p.h @@ -70,7 +70,7 @@ public: void initializePrototype(); int parseGroups(const QStringList &groupNames) const; - int parseGroups(const QV4::ValueRef groupNames) const; + int parseGroups(const QV4::Value &groupNames) const; QPointer model; const int groupCount; @@ -128,9 +128,9 @@ public: static QV4::ReturnedValue get_model(QV4::CallContext *ctx); static QV4::ReturnedValue get_groups(QV4::CallContext *ctx); static QV4::ReturnedValue set_groups(QV4::CallContext *ctx); - static QV4::ReturnedValue get_member(QQmlDelegateModelItem *thisItem, uint flag, const QV4::ValueRef); - static QV4::ReturnedValue set_member(QQmlDelegateModelItem *thisItem, uint flag, const QV4::ValueRef arg); - static QV4::ReturnedValue get_index(QQmlDelegateModelItem *thisItem, uint flag, const QV4::ValueRef arg); + static QV4::ReturnedValue get_member(QQmlDelegateModelItem *thisItem, uint flag, const QV4::Value &); + static QV4::ReturnedValue set_member(QQmlDelegateModelItem *thisItem, uint flag, const QV4::Value &arg); + static QV4::ReturnedValue get_index(QQmlDelegateModelItem *thisItem, uint flag, const QV4::Value &arg); QV4::ExecutionEngine *v4; QQmlDelegateModelItemMetaType * const metaType; @@ -227,7 +227,7 @@ public: void initPackage(int index, QQuickPackage *package); void destroyingPackage(QQuickPackage *package); - bool parseIndex(const QV4::ValueRef value, int *index, Compositor::Group *group) const; + bool parseIndex(const QV4::Value &value, int *index, Compositor::Group *group) const; bool parseGroupArgs( QQmlV4Function *args, Compositor::Group *group, int *index, int *count, int *groups) const; @@ -290,7 +290,7 @@ public: void emitChanges(); void emitModelUpdated(const QQmlChangeSet &changeSet, bool reset); - bool insert(Compositor::insert_iterator &before, const QV4::ValueRef object, int groups); + bool insert(Compositor::insert_iterator &before, const QV4::Value &object, int groups); static void group_append(QQmlListProperty *property, QQmlDelegateModelGroup *group); static int group_count(QQmlListProperty *property); diff --git a/src/qml/types/qqmllistmodel.cpp b/src/qml/types/qqmllistmodel.cpp index 0abc62b2bf..ea5b58e90a 100644 --- a/src/qml/types/qqmllistmodel.cpp +++ b/src/qml/types/qqmllistmodel.cpp @@ -412,8 +412,6 @@ void ListModel::set(int elementIndex, QV4::Object *object, QVector *roles) QV4::ObjectIterator it(scope, object, QV4::ObjectIterator::WithProtoChain|QV4::ObjectIterator::EnumerableOnly); QV4::ScopedString propertyName(scope); QV4::ScopedValue propertyValue(scope); - QV4::ScopedString s(scope); - QV4::ScopedArrayObject a(scope); while (1) { propertyName = it.nextPropertyNameAsString(propertyValue); if (!propertyName) @@ -423,13 +421,13 @@ void ListModel::set(int elementIndex, QV4::Object *object, QVector *roles) int roleIndex = -1; // Add the value now - if ((s = propertyValue)) { + if (QV4::String *s = propertyValue->asString()) { const ListLayout::Role &r = m_layout->getRoleOrCreate(propertyName, ListLayout::Role::String); roleIndex = e->setStringProperty(r, s->toQString()); } else if (propertyValue->isNumber()) { const ListLayout::Role &r = m_layout->getRoleOrCreate(propertyName, ListLayout::Role::Number); roleIndex = e->setDoubleProperty(r, propertyValue->asDouble()); - } else if ((a = propertyValue)) { + } else if (QV4::ArrayObject *a = propertyValue->asArrayObject()) { const ListLayout::Role &r = m_layout->getRoleOrCreate(propertyName, ListLayout::Role::List); ListModel *subModel = new ListModel(r.subLayout, 0, -1); @@ -489,8 +487,6 @@ void ListModel::set(int elementIndex, QV4::Object *object) QV4::ScopedString propertyName(scope); QV4::ScopedValue propertyValue(scope); QV4::ScopedObject o(scope); - QV4::ScopedArrayObject a(scope); - QV4::Scoped date(scope); while (1) { propertyName = it.nextPropertyNameAsString(propertyValue); if (!propertyName) @@ -506,8 +502,7 @@ void ListModel::set(int elementIndex, QV4::Object *object) if (r.type == ListLayout::Role::Number) { e->setDoublePropertyFast(r, propertyValue->asDouble()); } - } else if (propertyValue->asArrayObject()) { - a = propertyValue; + } else if (QV4::ArrayObject *a = propertyValue->asArrayObject()) { const ListLayout::Role &r = m_layout->getRoleOrCreate(propertyName, ListLayout::Role::List); if (r.type == ListLayout::Role::List) { ListModel *subModel = new ListModel(r.subLayout, 0, -1); @@ -525,15 +520,13 @@ void ListModel::set(int elementIndex, QV4::Object *object) if (r.type == ListLayout::Role::Bool) { e->setBoolPropertyFast(r, propertyValue->booleanValue()); } - } else if (propertyValue->asDateObject()) { - date = propertyValue; + } else if (QV4::DateObject *date = propertyValue->asDateObject()) { const ListLayout::Role &r = m_layout->getRoleOrCreate(propertyName, ListLayout::Role::DateTime); if (r.type == ListLayout::Role::DateTime) { QDateTime dt = date->toQDateTime();; e->setDateTimePropertyFast(r, dt); } - } else if (propertyValue->isObject()) { - o = propertyValue; + } else if (QV4::Object *o = propertyValue->asObject()) { if (QV4::QObjectWrapper *wrapper = o->as()) { QObject *o = wrapper->object(); const ListLayout::Role &r = m_layout->getRoleOrCreate(propertyName, ListLayout::Role::QObject); @@ -607,7 +600,7 @@ int ListModel::setOrCreateProperty(int elementIndex, const QString &key, const Q return roleIndex; } -int ListModel::setExistingProperty(int elementIndex, const QString &key, const QV4::ValueRef data, QV4::ExecutionEngine *eng) +int ListModel::setExistingProperty(int elementIndex, const QString &key, const QV4::Value &data, QV4::ExecutionEngine *eng) { int roleIndex = -1; @@ -1163,7 +1156,7 @@ int ListElement::setVariantProperty(const ListLayout::Role &role, const QVariant return roleIndex; } -int ListElement::setJsProperty(const ListLayout::Role &role, const QV4::ValueRef d, QV4::ExecutionEngine *eng) +int ListElement::setJsProperty(const ListLayout::Role &role, const QV4::Value &d, QV4::ExecutionEngine *eng) { // Check if this key exists yet int roleIndex = -1; @@ -1171,12 +1164,12 @@ int ListElement::setJsProperty(const ListLayout::Role &role, const QV4::ValueRef QV4::Scope scope(eng); // Add the value now - if (d->isString()) { - QString qstr = d->toQString(); + if (d.isString()) { + QString qstr = d.toQString(); roleIndex = setStringProperty(role, qstr); - } else if (d->isNumber()) { - roleIndex = setDoubleProperty(role, d->asDouble()); - } else if (d->asArrayObject()) { + } else if (d.isNumber()) { + roleIndex = setDoubleProperty(role, d.asDouble()); + } else if (d.asArrayObject()) { QV4::ScopedArrayObject a(scope, d); if (role.type == ListLayout::Role::List) { QV4::Scope scope(a->engine()); @@ -1192,13 +1185,13 @@ int ListElement::setJsProperty(const ListLayout::Role &role, const QV4::ValueRef } else { qmlInfo(0) << QString::fromLatin1("Can't assign to existing role '%1' of different type [%2 -> %3]").arg(role.name).arg(roleTypeName(role.type)).arg(roleTypeName(ListLayout::Role::List)); } - } else if (d->isBoolean()) { - roleIndex = setBoolProperty(role, d->booleanValue()); - } else if (d->asDateObject()) { + } else if (d.isBoolean()) { + roleIndex = setBoolProperty(role, d.booleanValue()); + } else if (d.asDateObject()) { QV4::Scoped dd(scope, d); QDateTime dt = dd->toQDateTime(); roleIndex = setDateTimeProperty(role, dt); - } else if (d->isObject()) { + } else if (d.isObject()) { QV4::ScopedObject o(scope, d); QV4::QObjectWrapper *wrapper = o->as(); if (role.type == ListLayout::Role::QObject && wrapper) { @@ -1207,7 +1200,7 @@ int ListElement::setJsProperty(const ListLayout::Role &role, const QV4::ValueRef } else if (role.type == ListLayout::Role::VariantMap) { roleIndex = setVariantMapProperty(role, o); } - } else if (d->isNullOrUndefined()) { + } else if (d.isNullOrUndefined()) { clearProperty(role); } diff --git a/src/qml/types/qqmllistmodel_p_p.h b/src/qml/types/qqmllistmodel_p_p.h index 36d192f2fa..27d0ffcb49 100644 --- a/src/qml/types/qqmllistmodel_p_p.h +++ b/src/qml/types/qqmllistmodel_p_p.h @@ -245,7 +245,7 @@ private: int setVariantProperty(const ListLayout::Role &role, const QVariant &d); - int setJsProperty(const ListLayout::Role &role, const QV4::ValueRef d, QV4::ExecutionEngine *eng); + int setJsProperty(const ListLayout::Role &role, const QV4::Value &d, QV4::ExecutionEngine *eng); int setStringProperty(const ListLayout::Role &role, const QString &s); int setDoubleProperty(const ListLayout::Role &role, double n); @@ -300,7 +300,7 @@ public: void destroy(); int setOrCreateProperty(int elementIndex, const QString &key, const QVariant &data); - int setExistingProperty(int uid, const QString &key, const QV4::ValueRef data, QV4::ExecutionEngine *eng); + int setExistingProperty(int uid, const QString &key, const QV4::Value &data, QV4::ExecutionEngine *eng); QVariant getProperty(int elementIndex, int roleIndex, const QQmlListModel *owner, QV4::ExecutionEngine *eng); ListModel *getListProperty(int elementIndex, const ListLayout::Role &role); diff --git a/src/quick/items/context2d/qquickcanvasitem.cpp b/src/quick/items/context2d/qquickcanvasitem.cpp index f8ed81d2a5..af44b7cfe4 100644 --- a/src/quick/items/context2d/qquickcanvasitem.cpp +++ b/src/quick/items/context2d/qquickcanvasitem.cpp @@ -864,7 +864,7 @@ void QQuickCanvasItem::requestAnimationFrame(QQmlV4Function *args) static int id = 0; - d->animationCallbacks.insert(++id, QV4::PersistentValue(scope.engine, f)); + d->animationCallbacks.insert(++id, QV4::PersistentValue(scope.engine, f->asReturnedValue())); if (isVisible()) polish(); diff --git a/src/quick/items/context2d/qquickcontext2d.cpp b/src/quick/items/context2d/qquickcontext2d.cpp index 87b42f6f19..d38299bb4d 100644 --- a/src/quick/items/context2d/qquickcontext2d.cpp +++ b/src/quick/items/context2d/qquickcontext2d.cpp @@ -887,7 +887,7 @@ struct QQuickJSContext2DPixelData : public QV4::Object V4_NEEDS_DESTROY static QV4::ReturnedValue getIndexed(QV4::Managed *m, uint index, bool *hasProperty); - static void putIndexed(QV4::Managed *m, uint index, const QV4::ValueRef value); + static void putIndexed(QV4::Managed *m, uint index, const QV4::Value &value); static QV4::ReturnedValue proto_get_length(QV4::CallContext *ctx); }; @@ -3122,7 +3122,7 @@ QV4::ReturnedValue QQuickJSContext2DPixelData::getIndexed(QV4::Managed *m, uint return QV4::Encode::undefined(); } -void QQuickJSContext2DPixelData::putIndexed(QV4::Managed *m, uint index, const QV4::ValueRef value) +void QQuickJSContext2DPixelData::putIndexed(QV4::Managed *m, uint index, const QV4::Value &value) { Q_ASSERT(m->as()); QV4::ExecutionEngine *v4 = static_cast(m)->engine(); @@ -3132,7 +3132,7 @@ void QQuickJSContext2DPixelData::putIndexed(QV4::Managed *m, uint index, const Q QV4::Scoped r(scope, static_cast(m)); - const int v = value->toInt32(); + const int v = value.toInt32(); if (r && index < static_cast(r->d()->image.width() * r->d()->image.height() * 4) && v >= 0 && v <= 255) { const quint32 w = r->d()->image.width(); const quint32 row = (index / 4) / w; diff --git a/src/quick/items/qquickloader.cpp b/src/quick/items/qquickloader.cpp index 4123f25b7e..c55a3794f4 100644 --- a/src/quick/items/qquickloader.cpp +++ b/src/quick/items/qquickloader.cpp @@ -645,7 +645,7 @@ void QQuickLoaderPrivate::setInitialState(QObject *obj) Q_ASSERT(v4); QV4::Scope scope(v4); QV4::ScopedValue ipv(scope, initialPropertyValues.value()); - d->initializeObjectWithInitialProperties(qmlGlobalForIpv, ipv, obj); + d->initializeObjectWithInitialProperties(*qmlGlobalForIpv.valueRef(), ipv, obj); } void QQuickLoaderIncubator::statusChanged(Status status) -- cgit v1.2.3