aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@digia.com>2013-09-09 11:07:21 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-09-11 13:02:19 +0200
commit6324e987e23b4fefc622f1fc6493baa1a3e47ee9 (patch)
treed06619a7feea6034b13c6ee4111d7ad65a064558 /src/qml
parented4c36b0b86c3d452a96ceb8bb6b41d709543a45 (diff)
More work on converting calling conventions to fit the new GC scheme
Change-Id: I4283cc85ad599b62a8efbe9268680287cf74097e Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'src/qml')
-rw-r--r--src/qml/jsruntime/qv4runtime.cpp71
-rw-r--r--src/qml/jsruntime/qv4runtime_p.h22
-rw-r--r--src/qml/jsruntime/qv4sparsearray.cpp2
-rw-r--r--src/qml/jsruntime/qv4vme_moth.cpp22
4 files changed, 61 insertions, 56 deletions
diff --git a/src/qml/jsruntime/qv4runtime.cpp b/src/qml/jsruntime/qv4runtime.cpp
index 43db0b63de..2a3f96429c 100644
--- a/src/qml/jsruntime/qv4runtime.cpp
+++ b/src/qml/jsruntime/qv4runtime.cpp
@@ -823,12 +823,12 @@ void __qmljs_call_property_lookup(ExecutionContext *context, ValueRef result, ui
*result = res;
}
-void __qmljs_call_element(ExecutionContext *context, ValueRef result, const Value &index, CallDataRef callData)
+void __qmljs_call_element(ExecutionContext *context, ValueRef result, const ValueRef index, CallDataRef callData)
{
Object *baseObject = callData->thisObject.toObject(context);
callData->thisObject = Value::fromObject(baseObject);
- Object *o = baseObject->get(index.toString(context)).asObject();
+ Object *o = baseObject->get(index->toString(context)).asObject();
if (!o)
context->throwTypeError();
@@ -837,9 +837,9 @@ void __qmljs_call_element(ExecutionContext *context, ValueRef result, const Valu
*result = res;
}
-void __qmljs_call_value(ExecutionContext *context, ValueRef result, const Value &func, CallDataRef callData)
+void __qmljs_call_value(ExecutionContext *context, ValueRef result, const ValueRef func, CallDataRef callData)
{
- Object *o = func.asObject();
+ Object *o = func->asObject();
if (!o)
context->throwTypeError();
@@ -880,9 +880,9 @@ void __qmljs_construct_activation_property(ExecutionContext *context, ValueRef r
*result = res;
}
-void __qmljs_construct_value(ExecutionContext *context, ValueRef result, const Value &func, CallDataRef callData)
+void __qmljs_construct_value(ExecutionContext *context, ValueRef result, const ValueRef func, CallDataRef callData)
{
- Object *f = func.asObject();
+ Object *f = func->asObject();
if (!f)
context->throwTypeError();
@@ -891,9 +891,9 @@ void __qmljs_construct_value(ExecutionContext *context, ValueRef result, const V
*result = res;
}
-void __qmljs_construct_property(ExecutionContext *context, ValueRef result, const Value &base, String *name, CallDataRef callData)
+void __qmljs_construct_property(ExecutionContext *context, ValueRef result, const ValueRef base, String *name, CallDataRef callData)
{
- Object *thisObject = base.toObject(context);
+ Object *thisObject = base->toObject(context);
Value func = thisObject->get(name);
Object *f = func.asObject();
@@ -910,12 +910,12 @@ void __qmljs_throw(ExecutionContext *context, const Value &value)
Exception::throwException(context, value);
}
-void __qmljs_builtin_typeof(ExecutionContext *ctx, ValueRef result, const Value &value)
+void __qmljs_builtin_typeof(ExecutionContext *ctx, ValueRef result, const ValueRef value)
{
if (!result)
return;
String *res = 0;
- switch (value.type()) {
+ switch (value->type()) {
case Value::Undefined_Type:
res = ctx->engine->id_undefined;
break;
@@ -929,7 +929,7 @@ void __qmljs_builtin_typeof(ExecutionContext *ctx, ValueRef result, const Value
res = ctx->engine->id_string;
break;
case Value::Object_Type:
- if (value.objectValue()->asFunctionObject())
+ if (value->objectValue()->asFunctionObject())
res = ctx->engine->id_function;
else
res = ctx->engine->id_object; // ### implementation-defined
@@ -943,29 +943,34 @@ void __qmljs_builtin_typeof(ExecutionContext *ctx, ValueRef result, const Value
void __qmljs_builtin_typeof_name(ExecutionContext *context, ValueRef result, String *name)
{
- Value res;
- __qmljs_builtin_typeof(context, &res, context->getPropertyNoThrow(name));
+ ValueScope scope(context);
+ ScopedValue res(scope);
+ ScopedValue prop(scope, context->getPropertyNoThrow(name));
+ __qmljs_builtin_typeof(context, res, prop);
if (result)
*result = res;
}
-void __qmljs_builtin_typeof_member(ExecutionContext *context, ValueRef result, const Value &base,
+void __qmljs_builtin_typeof_member(ExecutionContext *context, ValueRef result, const ValueRef base,
String *name)
{
- Object *obj = base.toObject(context);
- Value res;
- __qmljs_builtin_typeof(context, &res, obj->get(name));
+ ValueScope scope(context);
+ Object *obj = base->toObject(context);
+ ScopedValue res(scope);
+ ScopedValue prop(scope, obj->get(name));
+ __qmljs_builtin_typeof(context, res, prop);
if (result)
*result = res;
}
-void __qmljs_builtin_typeof_element(ExecutionContext *context, ValueRef result, const Value &base,
- const Value &index)
+void __qmljs_builtin_typeof_element(ExecutionContext *context, ValueRef result, const ValueRef base, const ValueRef index)
{
- String *name = index.toString(context);
- Object *obj = base.toObject(context);
- Value res;
- __qmljs_builtin_typeof(context, &res, obj->get(name));
+ ValueScope scope(context);
+ String *name = index->toString(context);
+ Object *obj = base->toObject(context);
+ ScopedValue res(scope);
+ ScopedValue prop(scope, obj->get(name));
+ __qmljs_builtin_typeof(context, res, prop);
if (result)
*result = res;
}
@@ -1003,9 +1008,9 @@ void __qmljs_builtin_post_increment_name(ExecutionContext *context, ValueRef res
context->setProperty(name, v);
}
-void __qmljs_builtin_post_increment_member(ExecutionContext *context, ValueRef result, const Value &base, String *name)
+void __qmljs_builtin_post_increment_member(ExecutionContext *context, ValueRef result, const ValueRef base, String *name)
{
- Object *o = base.toObject(context);
+ Object *o = base->toObject(context);
Value v = o->get(name);
@@ -1023,9 +1028,9 @@ void __qmljs_builtin_post_increment_member(ExecutionContext *context, ValueRef r
o->put(name, v);
}
-void __qmljs_builtin_post_increment_element(ExecutionContext *context, ValueRef result, const Value &base, const Value *index)
+void __qmljs_builtin_post_increment_element(ExecutionContext *context, ValueRef result, const ValueRef base, const ValueRef index)
{
- Object *o = base.toObject(context);
+ Object *o = base->toObject(context);
uint idx = index->asArrayIndex();
@@ -1083,9 +1088,9 @@ void __qmljs_builtin_post_decrement_name(ExecutionContext *context, ValueRef res
context->setProperty(name, v);
}
-void __qmljs_builtin_post_decrement_member(ExecutionContext *context, ValueRef result, const Value &base, String *name)
+void __qmljs_builtin_post_decrement_member(ExecutionContext *context, ValueRef result, const ValueRef base, String *name)
{
- Object *o = base.toObject(context);
+ Object *o = base->toObject(context);
Value v = o->get(name);
@@ -1103,14 +1108,14 @@ void __qmljs_builtin_post_decrement_member(ExecutionContext *context, ValueRef r
o->put(name, v);
}
-void __qmljs_builtin_post_decrement_element(ExecutionContext *context, ValueRef result, const Value &base, const Value &index)
+void __qmljs_builtin_post_decrement_element(ExecutionContext *context, ValueRef result, const ValueRef base, const ValueRef index)
{
- Object *o = base.toObject(context);
+ Object *o = base->toObject(context);
- uint idx = index.asArrayIndex();
+ uint idx = index->asArrayIndex();
if (idx == UINT_MAX) {
- String *s = index.toString(context);
+ String *s = index->toString(context);
return __qmljs_builtin_post_decrement_member(context, result, base, s);
}
diff --git a/src/qml/jsruntime/qv4runtime_p.h b/src/qml/jsruntime/qv4runtime_p.h
index 5c941d4b5d..ea4643f2a9 100644
--- a/src/qml/jsruntime/qv4runtime_p.h
+++ b/src/qml/jsruntime/qv4runtime_p.h
@@ -94,27 +94,27 @@ struct InternalClass;
void __qmljs_call_activation_property(QV4::ExecutionContext *, QV4::ValueRef result, QV4::String *name, CallDataRef callData);
void __qmljs_call_property(QV4::ExecutionContext *context, QV4::ValueRef result, QV4::String *name, CallDataRef callData);
void __qmljs_call_property_lookup(ExecutionContext *context, ValueRef result, uint index, CallDataRef callData);
-void __qmljs_call_element(ExecutionContext *context, ValueRef result, const Value &index, CallDataRef callData);
-void __qmljs_call_value(QV4::ExecutionContext *context, QV4::ValueRef result, const QV4::Value &func, CallDataRef callData);
+void __qmljs_call_element(ExecutionContext *context, ValueRef result, const ValueRef index, CallDataRef callData);
+void __qmljs_call_value(QV4::ExecutionContext *context, QV4::ValueRef result, const QV4::ValueRef func, CallDataRef callData);
void __qmljs_construct_activation_property(QV4::ExecutionContext *, QV4::ValueRef result, QV4::String *name, CallDataRef callData);
-void __qmljs_construct_property(QV4::ExecutionContext *context, QV4::ValueRef result, const QV4::Value &base, QV4::String *name, CallDataRef callData);
-void __qmljs_construct_value(QV4::ExecutionContext *context, QV4::ValueRef result, const QV4::Value &func, CallDataRef callData);
+void __qmljs_construct_property(QV4::ExecutionContext *context, QV4::ValueRef result, const QV4::ValueRef base, QV4::String *name, CallDataRef callData);
+void __qmljs_construct_value(QV4::ExecutionContext *context, QV4::ValueRef result, const QV4::ValueRef func, CallDataRef callData);
-void __qmljs_builtin_typeof(QV4::ExecutionContext *ctx, QV4::ValueRef result, const QV4::Value &val);
+void __qmljs_builtin_typeof(QV4::ExecutionContext *ctx, QV4::ValueRef result, const QV4::ValueRef val);
void __qmljs_builtin_typeof_name(QV4::ExecutionContext *context, QV4::ValueRef result, QV4::String *name);
-void __qmljs_builtin_typeof_member(QV4::ExecutionContext* context, QV4::ValueRef result, const QV4::Value &base, QV4::String *name);
-void __qmljs_builtin_typeof_element(QV4::ExecutionContext* context, QV4::ValueRef result, const QV4::Value &base, const QV4::Value &index);
+void __qmljs_builtin_typeof_member(QV4::ExecutionContext* context, QV4::ValueRef result, const QV4::ValueRef base, QV4::String *name);
+void __qmljs_builtin_typeof_element(QV4::ExecutionContext* context, QV4::ValueRef result, const QV4::ValueRef base, const QV4::ValueRef index);
void __qmljs_builtin_post_increment(QV4::ValueRef result, QV4::ValueRef val);
void __qmljs_builtin_post_increment_name(QV4::ExecutionContext *context, QV4::ValueRef result, QV4::String *name);
-void __qmljs_builtin_post_increment_member(QV4::ExecutionContext *context, QV4::ValueRef result, const QV4::Value &base, QV4::String *name);
-void __qmljs_builtin_post_increment_element(QV4::ExecutionContext *context, QV4::ValueRef result, const QV4::Value &base, const QV4::Value *index);
+void __qmljs_builtin_post_increment_member(QV4::ExecutionContext *context, QV4::ValueRef result, const QV4::ValueRef base, QV4::String *name);
+void __qmljs_builtin_post_increment_element(QV4::ExecutionContext *context, QV4::ValueRef result, const QV4::ValueRef base, const QV4::ValueRef index);
void __qmljs_builtin_post_decrement(QV4::ValueRef result, QV4::ValueRef val);
void __qmljs_builtin_post_decrement_name(QV4::ExecutionContext *context, QV4::ValueRef result, QV4::String *name);
-void __qmljs_builtin_post_decrement_member(QV4::ExecutionContext *context, QV4::ValueRef result, const QV4::Value &base, QV4::String *name);
-void __qmljs_builtin_post_decrement_element(QV4::ExecutionContext *context, QV4::ValueRef result, const QV4::Value &base, const QV4::Value &index);
+void __qmljs_builtin_post_decrement_member(QV4::ExecutionContext *context, QV4::ValueRef result, const QV4::ValueRef base, QV4::String *name);
+void __qmljs_builtin_post_decrement_element(QV4::ExecutionContext *context, QV4::ValueRef result, const QV4::ValueRef base, const QV4::ValueRef index);
void Q_NORETURN __qmljs_builtin_rethrow(QV4::ExecutionContext *context);
QV4::ExecutionContext *__qmljs_builtin_push_with_scope(const QV4::Value &o, QV4::ExecutionContext *ctx);
diff --git a/src/qml/jsruntime/qv4sparsearray.cpp b/src/qml/jsruntime/qv4sparsearray.cpp
index 5b720d2fef..f21855ebc9 100644
--- a/src/qml/jsruntime/qv4sparsearray.cpp
+++ b/src/qml/jsruntime/qv4sparsearray.cpp
@@ -66,7 +66,7 @@ bool ArrayElementLessThan::operator()(const Property &p1, const Property &p2) co
callData->args[0] = p1.value;
callData->args[1] = p2.value;
Value result = Value::undefinedValue();
- __qmljs_call_value(m_context, &result, m_comparefn, callData.ptr);
+ __qmljs_call_value(m_context, &result, QV4::ValueRef::fromRawValue(&m_comparefn), callData);
return result.toNumber() <= 0;
}
return p1.value.toString(m_context)->toQString() < p2.value.toString(m_context)->toQString();
diff --git a/src/qml/jsruntime/qv4vme_moth.cpp b/src/qml/jsruntime/qv4vme_moth.cpp
index cd8d2c8e4e..67b1e6135a 100644
--- a/src/qml/jsruntime/qv4vme_moth.cpp
+++ b/src/qml/jsruntime/qv4vme_moth.cpp
@@ -325,7 +325,7 @@ QV4::Value VME::run(QV4::ExecutionContext *context, const uchar *&code,
callData->tag = 0;
callData->argc = instr.argc;
callData->thisObject = QV4::Value::undefinedValue();
- __qmljs_call_value(context, VALUEPTR(instr.result), VALUE(instr.dest), callData);
+ __qmljs_call_value(context, VALUEPTR(instr.result), VALUEPTR(instr.dest), callData);
MOTH_END_INSTR(CallValue)
MOTH_BEGIN_INSTR(CallProperty)
@@ -344,7 +344,7 @@ QV4::Value VME::run(QV4::ExecutionContext *context, const uchar *&code,
callData->tag = 0;
callData->argc = instr.argc;
callData->thisObject = VALUE(instr.base);
- __qmljs_call_element(context, VALUEPTR(instr.result), VALUE(instr.index), callData);
+ __qmljs_call_element(context, VALUEPTR(instr.result), VALUEPTR(instr.index), callData);
MOTH_END_INSTR(CallElement)
MOTH_BEGIN_INSTR(CallActivationProperty)
@@ -422,11 +422,11 @@ QV4::Value VME::run(QV4::ExecutionContext *context, const uchar *&code,
MOTH_END_INSTR(CallBuiltinDeleteName)
MOTH_BEGIN_INSTR(CallBuiltinTypeofMember)
- __qmljs_builtin_typeof_member(context, VALUEPTR(instr.result), VALUE(instr.base), runtimeStrings[instr.member]);
+ __qmljs_builtin_typeof_member(context, VALUEPTR(instr.result), VALUEPTR(instr.base), runtimeStrings[instr.member]);
MOTH_END_INSTR(CallBuiltinTypeofMember)
MOTH_BEGIN_INSTR(CallBuiltinTypeofSubscript)
- __qmljs_builtin_typeof_element(context, VALUEPTR(instr.result), VALUE(instr.base), VALUE(instr.index));
+ __qmljs_builtin_typeof_element(context, VALUEPTR(instr.result), VALUEPTR(instr.base), VALUEPTR(instr.index));
MOTH_END_INSTR(CallBuiltinTypeofSubscript)
MOTH_BEGIN_INSTR(CallBuiltinTypeofName)
@@ -434,15 +434,15 @@ QV4::Value VME::run(QV4::ExecutionContext *context, const uchar *&code,
MOTH_END_INSTR(CallBuiltinTypeofName)
MOTH_BEGIN_INSTR(CallBuiltinTypeofValue)
- __qmljs_builtin_typeof(context, VALUEPTR(instr.result), VALUE(instr.value));
+ __qmljs_builtin_typeof(context, VALUEPTR(instr.result), VALUEPTR(instr.value));
MOTH_END_INSTR(CallBuiltinTypeofValue)
MOTH_BEGIN_INSTR(CallBuiltinPostIncMember)
- __qmljs_builtin_post_increment_member(context, VALUEPTR(instr.result), VALUE(instr.base), runtimeStrings[instr.member]);
+ __qmljs_builtin_post_increment_member(context, VALUEPTR(instr.result), VALUEPTR(instr.base), runtimeStrings[instr.member]);
MOTH_END_INSTR(CallBuiltinTypeofMember)
MOTH_BEGIN_INSTR(CallBuiltinPostIncSubscript)
- __qmljs_builtin_post_increment_element(context, VALUEPTR(instr.result), VALUE(instr.base), VALUEPTR(instr.index));
+ __qmljs_builtin_post_increment_element(context, VALUEPTR(instr.result), VALUEPTR(instr.base), VALUEPTR(instr.index));
MOTH_END_INSTR(CallBuiltinTypeofSubscript)
MOTH_BEGIN_INSTR(CallBuiltinPostIncName)
@@ -454,11 +454,11 @@ QV4::Value VME::run(QV4::ExecutionContext *context, const uchar *&code,
MOTH_END_INSTR(CallBuiltinTypeofValue)
MOTH_BEGIN_INSTR(CallBuiltinPostDecMember)
- __qmljs_builtin_post_decrement_member(context, VALUEPTR(instr.result), VALUE(instr.base), runtimeStrings[instr.member]);
+ __qmljs_builtin_post_decrement_member(context, VALUEPTR(instr.result), VALUEPTR(instr.base), runtimeStrings[instr.member]);
MOTH_END_INSTR(CallBuiltinTypeofMember)
MOTH_BEGIN_INSTR(CallBuiltinPostDecSubscript)
- __qmljs_builtin_post_decrement_element(context, VALUEPTR(instr.result), VALUE(instr.base), VALUE(instr.index));
+ __qmljs_builtin_post_decrement_element(context, VALUEPTR(instr.result), VALUEPTR(instr.base), VALUEPTR(instr.index));
MOTH_END_INSTR(CallBuiltinTypeofSubscript)
MOTH_BEGIN_INSTR(CallBuiltinPostDecName)
@@ -502,7 +502,7 @@ QV4::Value VME::run(QV4::ExecutionContext *context, const uchar *&code,
callData->tag = 0;
callData->argc = instr.argc;
callData->thisObject = QV4::Value::undefinedValue();
- __qmljs_construct_value(context, VALUEPTR(instr.result), VALUE(instr.func), callData);
+ __qmljs_construct_value(context, VALUEPTR(instr.result), VALUEPTR(instr.func), callData);
MOTH_END_INSTR(CreateValue)
MOTH_BEGIN_INSTR(CreateProperty)
@@ -511,7 +511,7 @@ QV4::Value VME::run(QV4::ExecutionContext *context, const uchar *&code,
callData->tag = 0;
callData->argc = instr.argc;
callData->thisObject = QV4::Value::undefinedValue();
- __qmljs_construct_property(context, VALUEPTR(instr.result), VALUE(instr.base), runtimeStrings[instr.name], callData);
+ __qmljs_construct_property(context, VALUEPTR(instr.result), VALUEPTR(instr.base), runtimeStrings[instr.name], callData);
MOTH_END_INSTR(CreateProperty)
MOTH_BEGIN_INSTR(CreateActivationProperty)