diff options
author | Lars Knoll <lars.knoll@digia.com> | 2013-09-11 22:45:47 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-09-18 13:13:38 +0200 |
commit | 2187beaaae09d3cf279f50d1f606ef6077250bfe (patch) | |
tree | c9f175d7ef98a8c94cf4f16fd57bf1b3edd512a7 /src/qml/jsruntime/qv4lookup.cpp | |
parent | 6c9f1c8ed93374c16ca6ac540f39e98b451be0d8 (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.cpp | 288 |
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) |