aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/jsruntime/qv4lookup.cpp
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@digia.com>2013-09-11 22:45:47 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-09-18 13:13:38 +0200
commit2187beaaae09d3cf279f50d1f606ef6077250bfe (patch)
treec9f175d7ef98a8c94cf4f16fd57bf1b3edd512a7 /src/qml/jsruntime/qv4lookup.cpp
parent6c9f1c8ed93374c16ca6ac540f39e98b451be0d8 (diff)
Convert lookups to use ReturnedValue
Change-Id: Idbcd1fbd2aa43775ce8c1a3d8fac29a6b58b678a Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'src/qml/jsruntime/qv4lookup.cpp')
-rw-r--r--src/qml/jsruntime/qv4lookup.cpp288
1 files changed, 112 insertions, 176 deletions
diff --git a/src/qml/jsruntime/qv4lookup.cpp b/src/qml/jsruntime/qv4lookup.cpp
index e2392d84f5..2b609752c9 100644
--- a/src/qml/jsruntime/qv4lookup.cpp
+++ b/src/qml/jsruntime/qv4lookup.cpp
@@ -87,12 +87,10 @@ Property *Lookup::lookup(Object *obj, PropertyAttributes *attrs)
}
-void Lookup::getterGeneric(QV4::Lookup *l, QV4::Value *result, const QV4::Value &object)
+ReturnedValue Lookup::getterGeneric(QV4::Lookup *l, const QV4::Value &object)
{
- if (Object *o = object.asObject()) {
- o->getLookup(l, result);
- return;
- }
+ if (Object *o = object.asObject())
+ return o->getLookup(l);
ExecutionEngine *engine = l->name->engine();
Object *proto;
@@ -108,8 +106,7 @@ void Lookup::getterGeneric(QV4::Lookup *l, QV4::Value *result, const QV4::Value
if (l->name == engine->id_length) {
// special case, as the property is on the object itself
l->getter = stringLengthGetter;
- stringLengthGetter(l, result, object);
- return;
+ return stringLengthGetter(l, object);
}
break;
case Value::Integer_Type:
@@ -127,121 +124,94 @@ void Lookup::getterGeneric(QV4::Lookup *l, QV4::Value *result, const QV4::Value
l->getter = Lookup::primitiveGetter0;
else if (l->level == 1)
l->getter = Lookup::primitiveGetter1;
- if (result)
- *result = p->value;
- return;
+ return p->value.asReturnedValue();
} else {
if (l->level == 0)
l->getter = Lookup::primitiveGetterAccessor0;
else if (l->level == 1)
l->getter = Lookup::primitiveGetterAccessor1;
- if (result)
- *result = p->value;
- Value res = Value::fromReturnedValue(proto->getValue(object, p, attrs));
- if (result)
- *result = res;
- return;
+ return proto->getValue(object, p, attrs);
}
}
- if (result)
- *result = Value::undefinedValue();
+ return Value::undefinedValue().asReturnedValue();
}
-void Lookup::getter0(Lookup *l, Value *result, const Value &object)
+ReturnedValue Lookup::getter0(Lookup *l, const Value &object)
{
if (Object *o = object.asObject()) {
- if (l->classList[0] == o->internalClass) {
- if (result)
- *result = o->memberData[l->index].value;
- return;
- }
+ if (l->classList[0] == o->internalClass)
+ return o->memberData[l->index].value.asReturnedValue();
}
l->getter = getterGeneric;
- getterGeneric(l, result, object);
+ return getterGeneric(l, object);
}
-void Lookup::getter1(Lookup *l, Value *result, const Value &object)
+ReturnedValue Lookup::getter1(Lookup *l, const Value &object)
{
if (Object *o = object.asObject()) {
if (l->classList[0] == o->internalClass &&
- l->classList[1] == o->prototype()->internalClass) {
- if (result)
- *result = o->prototype()->memberData[l->index].value;
- return;
- }
+ l->classList[1] == o->prototype()->internalClass)
+ return o->prototype()->memberData[l->index].value.asReturnedValue();
}
l->getter = getterGeneric;
- getterGeneric(l, result, object);
+ return getterGeneric(l, object);
}
-void Lookup::getter2(Lookup *l, Value *result, const Value &object)
+ReturnedValue Lookup::getter2(Lookup *l, const Value &object)
{
if (Object *o = object.asObject()) {
if (l->classList[0] == o->internalClass) {
o = o->prototype();
if (l->classList[1] == o->internalClass) {
o = o->prototype();
- if (l->classList[2] == o->internalClass) {
- if (result)
- *result = o->memberData[l->index].value;
- return;
- }
+ if (l->classList[2] == o->internalClass)
+ return o->memberData[l->index].value.asReturnedValue();
}
}
}
l->getter = getterGeneric;
- getterGeneric(l, result, object);
+ return getterGeneric(l, object);
}
-void Lookup::getterAccessor0(Lookup *l, Value *result, const Value &object)
+ReturnedValue Lookup::getterAccessor0(Lookup *l, const Value &object)
{
if (Object *o = object.asObject()) {
if (l->classList[0] == o->internalClass) {
Scope scope(o->engine());
- Value res;
FunctionObject *getter = o->memberData[l->index].getter();
- if (!getter) {
- res = Value::undefinedValue();
- } else {
- ScopedCallData callData(scope, 0);
- callData->thisObject = object;
- res = Value::fromReturnedValue(getter->call(callData));
- }
- if (result)
- *result = res;
- return;
+ if (!getter)
+ return Value::undefinedValue().asReturnedValue();
+
+ ScopedCallData callData(scope, 0);
+ callData->thisObject = object;
+ return getter->call(callData);
}
}
l->getter = getterGeneric;
- getterGeneric(l, result, object);
+ return getterGeneric(l, object);
}
-void Lookup::getterAccessor1(Lookup *l, Value *result, const Value &object)
+ReturnedValue Lookup::getterAccessor1(Lookup *l, const Value &object)
{
if (Object *o = object.asObject()) {
if (l->classList[0] == o->internalClass &&
l->classList[1] == o->prototype()->internalClass) {
Scope scope(o->engine());
- Value res;
FunctionObject *getter = o->prototype()->memberData[l->index].getter();
- if (!getter) {
- res = Value::undefinedValue();
- } else {
- ScopedCallData callData(scope, 0);
- callData->thisObject = object;
- res = Value::fromReturnedValue(getter->call(callData));
- }
- if (result)
- *result = res;
- return;
+ if (!getter)
+ return Value::undefinedValue().asReturnedValue();
+
+ ScopedCallData callData(scope, 0);
+ callData->thisObject = object;
+ return getter->call(callData);
}
}
l->getter = getterGeneric;
- getterGeneric(l, result, object);
+ return getterGeneric(l, object);
}
-void Lookup::getterAccessor2(Lookup *l, Value *result, const Value &object)
+ReturnedValue Lookup::getterAccessor2(Lookup *l, const Value &object)
{
if (Object *o = object.asObject()) {
if (l->classList[0] == o->internalClass) {
@@ -250,57 +220,46 @@ void Lookup::getterAccessor2(Lookup *l, Value *result, const Value &object)
o = o->prototype();
if (l->classList[2] == o->internalClass) {
Scope scope(o->engine());
- Value res;
FunctionObject *getter = o->memberData[l->index].getter();
- if (!getter) {
- res = Value::undefinedValue();
- } else {
- ScopedCallData callData(scope, 0);
- callData->thisObject = object;
- res = Value::fromReturnedValue(getter->call(callData));
- }
- if (result)
- *result = res;
- return;
+ if (!getter)
+ return Value::undefinedValue().asReturnedValue();
+
+ ScopedCallData callData(scope, 0);
+ callData->thisObject = object;
+ return getter->call(callData);
}
}
}
}
l->getter = getterGeneric;
- getterGeneric(l, result, object);
+ return getterGeneric(l, object);
}
-void Lookup::primitiveGetter0(Lookup *l, Value *result, const Value &object)
+ReturnedValue Lookup::primitiveGetter0(Lookup *l, const Value &object)
{
if (object.type() == l->type) {
Object *o = l->proto;
- if (l->classList[0] == o->internalClass) {
- if (result)
- *result = o->memberData[l->index].value;
- return;
- }
+ if (l->classList[0] == o->internalClass)
+ return o->memberData[l->index].value.asReturnedValue();
}
l->getter = getterGeneric;
- getterGeneric(l, result, object);
+ return getterGeneric(l, object);
}
-void Lookup::primitiveGetter1(Lookup *l, Value *result, const Value &object)
+ReturnedValue Lookup::primitiveGetter1(Lookup *l, const Value &object)
{
if (object.type() == l->type) {
Object *o = l->proto;
if (l->classList[0] == o->internalClass &&
- l->classList[1] == o->prototype()->internalClass) {
- if (result)
- *result = o->prototype()->memberData[l->index].value;
- return;
- }
+ l->classList[1] == o->prototype()->internalClass)
+ return o->prototype()->memberData[l->index].value.asReturnedValue();
}
l->getter = getterGeneric;
- getterGeneric(l, result, object);
+ return getterGeneric(l, object);
}
-void Lookup::primitiveGetterAccessor0(Lookup *l, Value *result, const Value &object)
+ReturnedValue Lookup::primitiveGetterAccessor0(Lookup *l, const Value &object)
{
if (object.type() == l->type) {
Object *o = l->proto;
@@ -308,23 +267,19 @@ void Lookup::primitiveGetterAccessor0(Lookup *l, Value *result, const Value &obj
Scope scope(o->engine());
Value res;
FunctionObject *getter = o->memberData[l->index].getter();
- if (!getter) {
- res = Value::undefinedValue();
- } else {
- ScopedCallData callData(scope, 0);
- callData->thisObject = object;
- res = Value::fromReturnedValue(getter->call(callData));
- }
- if (result)
- *result = res;
- return;
+ if (!getter)
+ return Value::undefinedValue().asReturnedValue();
+
+ ScopedCallData callData(scope, 0);
+ callData->thisObject = object;
+ return getter->call(callData);
}
}
l->getter = getterGeneric;
- getterGeneric(l, result, object);
+ return getterGeneric(l, object);
}
-void Lookup::primitiveGetterAccessor1(Lookup *l, Value *result, const Value &object)
+ReturnedValue Lookup::primitiveGetterAccessor1(Lookup *l, const Value &object)
{
if (object.type() == l->type) {
Object *o = l->proto;
@@ -333,35 +288,29 @@ void Lookup::primitiveGetterAccessor1(Lookup *l, Value *result, const Value &obj
Scope scope(o->engine());
Value res;
FunctionObject *getter = o->prototype()->memberData[l->index].getter();
- if (!getter) {
- res = Value::undefinedValue();
- } else {
- ScopedCallData callData(scope, 0);
- callData->thisObject = object;
- res = Value::fromReturnedValue(getter->call(callData));
- }
- if (result)
- *result = res;
- return;
+ if (!getter)
+ return Value::undefinedValue().asReturnedValue();
+
+ ScopedCallData callData(scope, 0);
+ callData->thisObject = object;
+ return getter->call(callData);
}
}
l->getter = getterGeneric;
- getterGeneric(l, result, object);
+ return getterGeneric(l, object);
}
-void Lookup::stringLengthGetter(Lookup *l, Value *result, const Value &object)
+ReturnedValue Lookup::stringLengthGetter(Lookup *l, const Value &object)
{
- if (String *s = object.asString()) {
- if (result)
- *result = Value::fromUInt32(s->length());
- return;
- }
+ if (String *s = object.asString())
+ return Value::fromUInt32(s->length()).asReturnedValue();
+
l->getter = getterGeneric;
- getterGeneric(l, result, object);
+ return getterGeneric(l, object);
}
-void Lookup::globalGetterGeneric(Lookup *l, ExecutionContext *ctx, Value *result)
+ReturnedValue Lookup::globalGetterGeneric(Lookup *l, ExecutionContext *ctx)
{
Object *o = ctx->engine->globalObject;
PropertyAttributes attrs;
@@ -374,8 +323,7 @@ void Lookup::globalGetterGeneric(Lookup *l, ExecutionContext *ctx, Value *result
l->globalGetter = globalGetter1;
else if (l->level == 2)
l->globalGetter = globalGetter2;
- *result = p->value;
- return;
+ return p->value.asReturnedValue();
} else {
if (l->level == 0)
l->globalGetter = globalGetterAccessor0;
@@ -383,39 +331,34 @@ void Lookup::globalGetterGeneric(Lookup *l, ExecutionContext *ctx, Value *result
l->globalGetter = globalGetterAccessor1;
else if (l->level == 2)
l->globalGetter = globalGetterAccessor2;
- Value res = Value::fromReturnedValue(o->getValue(p, attrs));
- if (result)
- *result = res;
- return;
+ return o->getValue(p, attrs);
}
}
ctx->throwReferenceError(Value::fromString(l->name));
}
-void Lookup::globalGetter0(Lookup *l, ExecutionContext *ctx, Value *result)
+ReturnedValue Lookup::globalGetter0(Lookup *l, ExecutionContext *ctx)
{
Object *o = ctx->engine->globalObject;
- if (l->classList[0] == o->internalClass) {
- *result = o->memberData[l->index].value;
- return;
- }
+ if (l->classList[0] == o->internalClass)
+ return o->memberData[l->index].value.asReturnedValue();
+
l->globalGetter = globalGetterGeneric;
- globalGetterGeneric(l, ctx, result);
+ return globalGetterGeneric(l, ctx);
}
-void Lookup::globalGetter1(Lookup *l, ExecutionContext *ctx, Value *result)
+ReturnedValue Lookup::globalGetter1(Lookup *l, ExecutionContext *ctx)
{
Object *o = ctx->engine->globalObject;
if (l->classList[0] == o->internalClass &&
- l->classList[1] == o->prototype()->internalClass) {
- *result = o->prototype()->memberData[l->index].value;
- return;
- }
+ l->classList[1] == o->prototype()->internalClass)
+ return o->prototype()->memberData[l->index].value.asReturnedValue();
+
l->globalGetter = globalGetterGeneric;
- globalGetterGeneric(l, ctx, result);
+ return globalGetterGeneric(l, ctx);
}
-void Lookup::globalGetter2(Lookup *l, ExecutionContext *ctx, Value *result)
+ReturnedValue Lookup::globalGetter2(Lookup *l, ExecutionContext *ctx)
{
Object *o = ctx->engine->globalObject;
if (l->classList[0] == o->internalClass) {
@@ -423,55 +366,50 @@ void Lookup::globalGetter2(Lookup *l, ExecutionContext *ctx, Value *result)
if (l->classList[1] == o->internalClass) {
o = o->prototype();
if (l->classList[2] == o->internalClass) {
- *result = o->prototype()->memberData[l->index].value;
- return;
+ return o->prototype()->memberData[l->index].value.asReturnedValue();
}
}
}
l->globalGetter = globalGetterGeneric;
- globalGetterGeneric(l, ctx, result);
+ return globalGetterGeneric(l, ctx);
}
-void Lookup::globalGetterAccessor0(Lookup *l, ExecutionContext *ctx, Value *result)
+ReturnedValue Lookup::globalGetterAccessor0(Lookup *l, ExecutionContext *ctx)
{
Object *o = ctx->engine->globalObject;
if (l->classList[0] == o->internalClass) {
Scope scope(o->engine());
FunctionObject *getter = o->memberData[l->index].getter();
- if (!getter) {
- *result = Value::undefinedValue();
- } else {
- ScopedCallData callData(scope, 0);
- callData->thisObject = Value::undefinedValue();
- *result = Value::fromReturnedValue(getter->call(callData));
- }
- return;
+ if (!getter)
+ return Value::undefinedValue().asReturnedValue();
+
+ ScopedCallData callData(scope, 0);
+ callData->thisObject = Value::undefinedValue();
+ return getter->call(callData);
}
l->globalGetter = globalGetterGeneric;
- globalGetterGeneric(l, ctx, result);
+ return globalGetterGeneric(l, ctx);
}
-void Lookup::globalGetterAccessor1(Lookup *l, ExecutionContext *ctx, Value *result)
+ReturnedValue Lookup::globalGetterAccessor1(Lookup *l, ExecutionContext *ctx)
{
Object *o = ctx->engine->globalObject;
if (l->classList[0] == o->internalClass &&
l->classList[1] == o->prototype()->internalClass) {
Scope scope(o->engine());
FunctionObject *getter = o->prototype()->memberData[l->index].getter();
- if (!getter) {
- *result = Value::undefinedValue();
- } else {
- ScopedCallData callData(scope, 0);
- callData->thisObject = Value::undefinedValue();
- *result = Value::fromReturnedValue(getter->call(callData));
- }
- return;
+ if (!getter)
+ return Value::undefinedValue().asReturnedValue();
+
+ ScopedCallData callData(scope, 0);
+ callData->thisObject = Value::undefinedValue();
+ return getter->call(callData);
}
l->globalGetter = globalGetterGeneric;
- globalGetterGeneric(l, ctx, result);
+ return globalGetterGeneric(l, ctx);
}
-void Lookup::globalGetterAccessor2(Lookup *l, ExecutionContext *ctx, Value *result)
+ReturnedValue Lookup::globalGetterAccessor2(Lookup *l, ExecutionContext *ctx)
{
Object *o = ctx->engine->globalObject;
if (l->classList[0] == o->internalClass) {
@@ -481,19 +419,17 @@ void Lookup::globalGetterAccessor2(Lookup *l, ExecutionContext *ctx, Value *resu
if (l->classList[2] == o->internalClass) {
Scope scope(o->engine());
FunctionObject *getter = o->memberData[l->index].getter();
- if (!getter) {
- *result = Value::undefinedValue();
- } else {
- ScopedCallData callData(scope, 0);
- callData->thisObject = Value::undefinedValue();
- *result = Value::fromReturnedValue(getter->call(callData));
- }
- return;
+ if (!getter)
+ return Value::undefinedValue().asReturnedValue();
+
+ ScopedCallData callData(scope, 0);
+ callData->thisObject = Value::undefinedValue();
+ return getter->call(callData);
}
}
}
l->globalGetter = globalGetterGeneric;
- globalGetterGeneric(l, ctx, result);
+ return globalGetterGeneric(l, ctx);
}
void Lookup::setterGeneric(Lookup *l, const Value &object, const Value &value)