aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@digia.com>2013-09-09 10:46:06 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-09-11 13:02:15 +0200
commited4c36b0b86c3d452a96ceb8bb6b41d709543a45 (patch)
tree17a9ce52aca37ed743806100ab4bee27d30cd094 /src
parenta808e4fc15dfe2aca08786f4b747dde45e455929 (diff)
Start adapting function signatures in the qv4runtime
Move the signatures over to something that will enforce the exact GC later on. Change-Id: I2e1a472aea296cc1862c76c1e6dab5d0d2f5177c Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'src')
-rw-r--r--src/qml/jsruntime/qv4context.cpp9
-rw-r--r--src/qml/jsruntime/qv4context_p.h1
-rw-r--r--src/qml/jsruntime/qv4runtime.cpp105
-rw-r--r--src/qml/jsruntime/qv4runtime_p.h168
-rw-r--r--src/qml/jsruntime/qv4scopedvalue_p.h65
-rw-r--r--src/qml/jsruntime/qv4value_def_p.h2
6 files changed, 205 insertions, 145 deletions
diff --git a/src/qml/jsruntime/qv4context.cpp b/src/qml/jsruntime/qv4context.cpp
index dc10033307..563b6b2709 100644
--- a/src/qml/jsruntime/qv4context.cpp
+++ b/src/qml/jsruntime/qv4context.cpp
@@ -594,15 +594,6 @@ Value ExecutionContext::getPropertyAndBase(String *name, Object **base)
}
-
-void ExecutionContext::inplaceBitOp(String *name, const Value &value, BinOp op)
-{
- Value lhs = getProperty(name);
- Value result;
- op(&result, lhs, value);
- setProperty(name, result);
-}
-
void ExecutionContext::throwError(const Value &value)
{
__qmljs_throw(this, value);
diff --git a/src/qml/jsruntime/qv4context_p.h b/src/qml/jsruntime/qv4context_p.h
index 0a06cf3048..fe10e33c5e 100644
--- a/src/qml/jsruntime/qv4context_p.h
+++ b/src/qml/jsruntime/qv4context_p.h
@@ -145,7 +145,6 @@ struct Q_QML_EXPORT ExecutionContext
Value getProperty(String *name);
Value getPropertyNoThrow(String *name);
Value getPropertyAndBase(String *name, Object **base);
- void inplaceBitOp(String *name, const QV4::Value &value, BinOp op);
bool deleteProperty(String *name);
inline Value argument(unsigned int index = 0);
diff --git a/src/qml/jsruntime/qv4runtime.cpp b/src/qml/jsruntime/qv4runtime.cpp
index 03af2fcae9..43db0b63de 100644
--- a/src/qml/jsruntime/qv4runtime.cpp
+++ b/src/qml/jsruntime/qv4runtime.cpp
@@ -120,14 +120,14 @@ void __qmljs_numberToString(QString *result, double num, int radix)
result->prepend(QLatin1Char('-'));
}
-void __qmljs_init_closure(ExecutionContext *ctx, Value *result, int functionId)
+void __qmljs_init_closure(ExecutionContext *ctx, ValueRef result, int functionId)
{
QV4::Function *clos = ctx->compilationUnit->runtimeFunctions[functionId];
assert(clos);
*result = Value::fromObject(FunctionObject::creatScriptFunction(ctx, clos));
}
-void __qmljs_delete_subscript(ExecutionContext *ctx, Value *result, const Value &base, const Value &index)
+void __qmljs_delete_subscript(ExecutionContext *ctx, ValueRef result, const Value &base, const Value &index)
{
if (Object *o = base.asObject()) {
uint n = index.asArrayIndex();
@@ -143,7 +143,7 @@ void __qmljs_delete_subscript(ExecutionContext *ctx, Value *result, const Value
__qmljs_delete_member(ctx, result, base, name);
}
-void __qmljs_delete_member(ExecutionContext *ctx, Value *result, const Value &base, String *name)
+void __qmljs_delete_member(ExecutionContext *ctx, ValueRef result, const Value &base, String *name)
{
Object *obj = base.toObject(ctx);
Value res = Value::fromBoolean(obj->deleteProperty(name));
@@ -151,7 +151,7 @@ void __qmljs_delete_member(ExecutionContext *ctx, Value *result, const Value &ba
*result = res;
}
-void __qmljs_delete_name(ExecutionContext *ctx, Value *result, String *name)
+void __qmljs_delete_name(ExecutionContext *ctx, ValueRef result, String *name)
{
Value res = Value::fromBoolean(ctx->deleteProperty(name));
if (result)
@@ -178,7 +178,7 @@ void __qmljs_add_helper(ExecutionContext *ctx, ValueRef result, const ValueRef l
*result = Value::fromDouble(x + y);
}
-void __qmljs_instanceof(ExecutionContext *ctx, Value *result, const Value &left, const Value &right)
+void __qmljs_instanceof(ExecutionContext *ctx, ValueRef result, const Value &left, const Value &right)
{
Object *o = right.asObject();
if (!o)
@@ -188,7 +188,7 @@ void __qmljs_instanceof(ExecutionContext *ctx, Value *result, const Value &left,
*result = Value::fromBoolean(r);
}
-void __qmljs_in(ExecutionContext *ctx, Value *result, const Value &left, const Value &right)
+void __qmljs_in(ExecutionContext *ctx, ValueRef result, const Value &left, const Value &right)
{
if (!right.isObject())
ctx->throwTypeError();
@@ -197,19 +197,28 @@ void __qmljs_in(ExecutionContext *ctx, Value *result, const Value &left, const V
*result = Value::fromBoolean(r);
}
+void inplaceBitOp(ExecutionContext *ctx, String *name, const Value &value, BinOp op)
+{
+ Value lhs = ctx->getProperty(name);
+ Value result;
+ op(&result, lhs, value);
+ ctx->setProperty(name, result);
+}
+
+
void __qmljs_inplace_bit_and_name(ExecutionContext *ctx, String *name, const Value &value)
{
- ctx->inplaceBitOp(name, value, __qmljs_bit_and);
+ inplaceBitOp(ctx, name, value, __qmljs_bit_and);
}
void __qmljs_inplace_bit_or_name(ExecutionContext *ctx, String *name, const Value &value)
{
- ctx->inplaceBitOp(name, value, __qmljs_bit_or);
+ inplaceBitOp(ctx, name, value, __qmljs_bit_or);
}
void __qmljs_inplace_bit_xor_name(ExecutionContext *ctx, String *name, const Value &value)
{
- ctx->inplaceBitOp(name, value, __qmljs_bit_xor);
+ inplaceBitOp(ctx, name, value, __qmljs_bit_xor);
}
void __qmljs_inplace_add_name(ExecutionContext *ctx, String *name, const Value &value)
@@ -222,37 +231,37 @@ void __qmljs_inplace_add_name(ExecutionContext *ctx, String *name, const Value &
void __qmljs_inplace_sub_name(ExecutionContext *ctx, String *name, const Value &value)
{
- ctx->inplaceBitOp(name, value, __qmljs_sub);
+ inplaceBitOp(ctx, name, value, __qmljs_sub);
}
void __qmljs_inplace_mul_name(ExecutionContext *ctx, String *name, const Value &value)
{
- ctx->inplaceBitOp(name, value, __qmljs_mul);
+ inplaceBitOp(ctx, name, value, __qmljs_mul);
}
void __qmljs_inplace_div_name(ExecutionContext *ctx, String *name, const Value &value)
{
- ctx->inplaceBitOp(name, value, __qmljs_div);
+ inplaceBitOp(ctx, name, value, __qmljs_div);
}
void __qmljs_inplace_mod_name(ExecutionContext *ctx, String *name, const Value &value)
{
- ctx->inplaceBitOp(name, value, __qmljs_mod);
+ inplaceBitOp(ctx, name, value, __qmljs_mod);
}
void __qmljs_inplace_shl_name(ExecutionContext *ctx, String *name, const Value &value)
{
- ctx->inplaceBitOp(name, value, __qmljs_shl);
+ inplaceBitOp(ctx, name, value, __qmljs_shl);
}
void __qmljs_inplace_shr_name(ExecutionContext *ctx, String *name, const Value &value)
{
- ctx->inplaceBitOp(name, value, __qmljs_shr);
+ inplaceBitOp(ctx, name, value, __qmljs_shr);
}
void __qmljs_inplace_ushr_name(ExecutionContext *ctx, String *name, const Value &value)
{
- ctx->inplaceBitOp(name, value, __qmljs_ushr);
+ inplaceBitOp(ctx, name, value, __qmljs_ushr);
}
void __qmljs_inplace_bit_and_element(ExecutionContext *ctx, const Value &base, const Value &index, const Value &rhs)
@@ -529,7 +538,7 @@ void __qmljs_set_property(ExecutionContext *ctx, const Value &object, String *na
o->put(name, value);
}
-void __qmljs_get_element(ExecutionContext *ctx, Value *result, const Value &object, const Value &index)
+void __qmljs_get_element(ExecutionContext *ctx, ValueRef result, const Value &object, const Value &index)
{
uint idx = index.asArrayIndex();
@@ -622,7 +631,7 @@ void __qmljs_set_element(ExecutionContext *ctx, const Value &object, const Value
o->put(name, value);
}
-void __qmljs_foreach_iterator_object(ExecutionContext *ctx, Value *result, const Value &in)
+void __qmljs_foreach_iterator_object(ExecutionContext *ctx, ValueRef result, const Value &in)
{
Object *o = 0;
if (!in.isNull() && !in.isUndefined())
@@ -631,7 +640,7 @@ void __qmljs_foreach_iterator_object(ExecutionContext *ctx, Value *result, const
*result = Value::fromObject(it);
}
-void __qmljs_foreach_next_property_name(Value *result, const Value &foreach_iterator)
+void __qmljs_foreach_next_property_name(ValueRef result, const Value &foreach_iterator)
{
assert(foreach_iterator.isObject());
@@ -647,7 +656,7 @@ void __qmljs_set_activation_property(ExecutionContext *ctx, String *name, const
ctx->setProperty(name, value);
}
-void __qmljs_get_property(ExecutionContext *ctx, Value *result, const Value &object, String *name)
+void __qmljs_get_property(ExecutionContext *ctx, ValueRef result, const Value &object, String *name)
{
Value res;
Managed *m = object.asManaged();
@@ -666,7 +675,7 @@ void __qmljs_get_property(ExecutionContext *ctx, Value *result, const Value &obj
*result = res;
}
-void __qmljs_get_activation_property(ExecutionContext *ctx, Value *result, String *name)
+void __qmljs_get_activation_property(ExecutionContext *ctx, ValueRef result, String *name)
{
*result = ctx->getProperty(name);
}
@@ -720,7 +729,7 @@ Bool __qmljs_strict_equal(const Value &x, const Value &y)
}
-void __qmljs_call_global_lookup(ExecutionContext *context, Value *result, uint index, CallData *callData)
+void __qmljs_call_global_lookup(ExecutionContext *context, ValueRef result, uint index, CallDataRef callData)
{
Q_ASSERT(callData->thisObject.isUndefined());
@@ -744,7 +753,7 @@ void __qmljs_call_global_lookup(ExecutionContext *context, Value *result, uint i
}
-void __qmljs_call_activation_property(ExecutionContext *context, Value *result, String *name, CallData *callData)
+void __qmljs_call_activation_property(ExecutionContext *context, ValueRef result, String *name, CallDataRef callData)
{
Q_ASSERT(callData->thisObject.isUndefined());
@@ -774,7 +783,7 @@ void __qmljs_call_activation_property(ExecutionContext *context, Value *result,
*result = res;
}
-void __qmljs_call_property(ExecutionContext *context, ValueRef result, String *name, CallData *callData)
+void __qmljs_call_property(ExecutionContext *context, ValueRef result, String *name, CallDataRef callData)
{
Managed *baseObject = callData->thisObject.asManaged();
if (!baseObject) {
@@ -798,7 +807,7 @@ void __qmljs_call_property(ExecutionContext *context, ValueRef result, String *n
*result = res;
}
-void __qmljs_call_property_lookup(ExecutionContext *context, Value *result, uint index, CallData *callData)
+void __qmljs_call_property_lookup(ExecutionContext *context, ValueRef result, uint index, CallDataRef callData)
{
Value func;
@@ -814,7 +823,7 @@ void __qmljs_call_property_lookup(ExecutionContext *context, Value *result, uint
*result = res;
}
-void __qmljs_call_element(ExecutionContext *context, Value *result, const Value &index, CallData *callData)
+void __qmljs_call_element(ExecutionContext *context, ValueRef result, const Value &index, CallDataRef callData)
{
Object *baseObject = callData->thisObject.toObject(context);
callData->thisObject = Value::fromObject(baseObject);
@@ -828,7 +837,7 @@ void __qmljs_call_element(ExecutionContext *context, Value *result, const Value
*result = res;
}
-void __qmljs_call_value(ExecutionContext *context, Value *result, const Value &func, CallData *callData)
+void __qmljs_call_value(ExecutionContext *context, ValueRef result, const Value &func, CallDataRef callData)
{
Object *o = func.asObject();
if (!o)
@@ -840,7 +849,7 @@ void __qmljs_call_value(ExecutionContext *context, Value *result, const Value &f
}
-void __qmljs_construct_global_lookup(ExecutionContext *context, Value *result, uint index, CallData *callData)
+void __qmljs_construct_global_lookup(ExecutionContext *context, ValueRef result, uint index, CallDataRef callData)
{
Q_ASSERT(callData->thisObject.isUndefined());
@@ -859,7 +868,7 @@ void __qmljs_construct_global_lookup(ExecutionContext *context, Value *result, u
}
-void __qmljs_construct_activation_property(ExecutionContext *context, Value *result, String *name, CallData *callData)
+void __qmljs_construct_activation_property(ExecutionContext *context, ValueRef result, String *name, CallDataRef callData)
{
Value func = context->getProperty(name);
Object *f = func.asObject();
@@ -871,7 +880,7 @@ void __qmljs_construct_activation_property(ExecutionContext *context, Value *res
*result = res;
}
-void __qmljs_construct_value(ExecutionContext *context, Value *result, const Value &func, CallData *callData)
+void __qmljs_construct_value(ExecutionContext *context, ValueRef result, const Value &func, CallDataRef callData)
{
Object *f = func.asObject();
if (!f)
@@ -882,7 +891,7 @@ void __qmljs_construct_value(ExecutionContext *context, Value *result, const Val
*result = res;
}
-void __qmljs_construct_property(ExecutionContext *context, Value *result, const Value &base, String *name, CallData *callData)
+void __qmljs_construct_property(ExecutionContext *context, ValueRef result, const Value &base, String *name, CallDataRef callData)
{
Object *thisObject = base.toObject(context);
@@ -901,7 +910,7 @@ void __qmljs_throw(ExecutionContext *context, const Value &value)
Exception::throwException(context, value);
}
-void __qmljs_builtin_typeof(ExecutionContext *ctx, Value *result, const Value &value)
+void __qmljs_builtin_typeof(ExecutionContext *ctx, ValueRef result, const Value &value)
{
if (!result)
return;
@@ -932,7 +941,7 @@ void __qmljs_builtin_typeof(ExecutionContext *ctx, Value *result, const Value &v
*result = Value::fromString(res);
}
-void __qmljs_builtin_typeof_name(ExecutionContext *context, Value *result, String *name)
+void __qmljs_builtin_typeof_name(ExecutionContext *context, ValueRef result, String *name)
{
Value res;
__qmljs_builtin_typeof(context, &res, context->getPropertyNoThrow(name));
@@ -940,7 +949,7 @@ void __qmljs_builtin_typeof_name(ExecutionContext *context, Value *result, Strin
*result = res;
}
-void __qmljs_builtin_typeof_member(ExecutionContext *context, Value *result, const Value &base,
+void __qmljs_builtin_typeof_member(ExecutionContext *context, ValueRef result, const Value &base,
String *name)
{
Object *obj = base.toObject(context);
@@ -950,7 +959,7 @@ void __qmljs_builtin_typeof_member(ExecutionContext *context, Value *result, con
*result = res;
}
-void __qmljs_builtin_typeof_element(ExecutionContext *context, Value *result, const Value &base,
+void __qmljs_builtin_typeof_element(ExecutionContext *context, ValueRef result, const Value &base,
const Value &index)
{
String *name = index.toString(context);
@@ -961,7 +970,7 @@ void __qmljs_builtin_typeof_element(ExecutionContext *context, Value *result, co
*result = res;
}
-void __qmljs_builtin_post_increment(Value *result, Value *val)
+void __qmljs_builtin_post_increment(ValueRef result, ValueRef val)
{
if (val->isInteger() && val->integerValue() < INT_MAX) {
if (result)
@@ -976,7 +985,7 @@ void __qmljs_builtin_post_increment(Value *result, Value *val)
*result = Value::fromDouble(d);
}
-void __qmljs_builtin_post_increment_name(ExecutionContext *context, Value *result, String *name)
+void __qmljs_builtin_post_increment_name(ExecutionContext *context, ValueRef result, String *name)
{
Value v = context->getProperty(name);
@@ -994,7 +1003,7 @@ void __qmljs_builtin_post_increment_name(ExecutionContext *context, Value *resul
context->setProperty(name, v);
}
-void __qmljs_builtin_post_increment_member(ExecutionContext *context, Value *result, const Value &base, String *name)
+void __qmljs_builtin_post_increment_member(ExecutionContext *context, ValueRef result, const Value &base, String *name)
{
Object *o = base.toObject(context);
@@ -1014,7 +1023,7 @@ void __qmljs_builtin_post_increment_member(ExecutionContext *context, Value *res
o->put(name, v);
}
-void __qmljs_builtin_post_increment_element(ExecutionContext *context, Value *result, const Value &base, const Value *index)
+void __qmljs_builtin_post_increment_element(ExecutionContext *context, ValueRef result, const Value &base, const Value *index)
{
Object *o = base.toObject(context);
@@ -1041,7 +1050,7 @@ void __qmljs_builtin_post_increment_element(ExecutionContext *context, Value *re
o->putIndexed(idx, v);
}
-void __qmljs_builtin_post_decrement(Value *result, Value *val)
+void __qmljs_builtin_post_decrement(ValueRef result, ValueRef val)
{
if (val->isInteger() && val->integerValue() > INT_MIN) {
if (result)
@@ -1056,7 +1065,7 @@ void __qmljs_builtin_post_decrement(Value *result, Value *val)
*result = Value::fromDouble(d);
}
-void __qmljs_builtin_post_decrement_name(ExecutionContext *context, Value *result, String *name)
+void __qmljs_builtin_post_decrement_name(ExecutionContext *context, ValueRef result, String *name)
{
Value v = context->getProperty(name);
@@ -1074,7 +1083,7 @@ void __qmljs_builtin_post_decrement_name(ExecutionContext *context, Value *resul
context->setProperty(name, v);
}
-void __qmljs_builtin_post_decrement_member(ExecutionContext *context, Value *result, const Value &base, String *name)
+void __qmljs_builtin_post_decrement_member(ExecutionContext *context, ValueRef result, const Value &base, String *name)
{
Object *o = base.toObject(context);
@@ -1094,7 +1103,7 @@ void __qmljs_builtin_post_decrement_member(ExecutionContext *context, Value *res
o->put(name, v);
}
-void __qmljs_builtin_post_decrement_element(ExecutionContext *context, Value *result, const Value &base, const Value &index)
+void __qmljs_builtin_post_decrement_element(ExecutionContext *context, ValueRef result, const Value &base, const Value &index)
{
Object *o = base.toObject(context);
@@ -1152,7 +1161,7 @@ void __qmljs_builtin_define_property(ExecutionContext *ctx, const Value &object,
pd->value = val ? *val : Value::undefinedValue();
}
-void __qmljs_builtin_define_array(ExecutionContext *ctx, Value *array, Value *values, uint length)
+void __qmljs_builtin_define_array(ExecutionContext *ctx, ValueRef array, Value *values, uint length)
{
ArrayObject *a = ctx->engine->newArrayObject();
@@ -1188,7 +1197,7 @@ void __qmljs_builtin_define_getter_setter(ExecutionContext *ctx, const Value &ob
pd->setSetter(setter ? setter->asFunctionObject() : 0);
}
-void __qmljs_builtin_define_object_literal(QV4::ExecutionContext *ctx, QV4::Value *result, const QV4::Value *args, int classId)
+void __qmljs_builtin_define_object_literal(QV4::ExecutionContext *ctx, ValueRef result, const QV4::Value *args, int classId)
{
QV4::InternalClass *klass = ctx->compilationUnit->runtimeClasses[classId];
Object *o = ctx->engine->newObject(klass);
@@ -1207,7 +1216,7 @@ void __qmljs_builtin_define_object_literal(QV4::ExecutionContext *ctx, QV4::Valu
*result = Value::fromObject(o);
}
-void __qmljs_builtin_setup_arguments_object(ExecutionContext *ctx, Value *result)
+void __qmljs_builtin_setup_arguments_object(ExecutionContext *ctx, ValueRef result)
{
assert(ctx->type >= ExecutionContext::Type_CallContext);
CallContext *c = static_cast<CallContext *>(ctx);
@@ -1264,12 +1273,12 @@ unsigned __qmljs_double_to_uint32(const double &d)
return Value::toUInt32(d);
}
-void __qmljs_value_from_string(Value *result, String *string)
+void __qmljs_value_from_string(ValueRef result, String *string)
{
*result = Value::fromString(string);
}
-void __qmljs_lookup_runtime_regexp(ExecutionContext *ctx, Value *result, int id)
+void __qmljs_lookup_runtime_regexp(ExecutionContext *ctx, ValueRef result, int id)
{
*result = ctx->compilationUnit->runtimeRegularExpressions[id];
}
diff --git a/src/qml/jsruntime/qv4runtime_p.h b/src/qml/jsruntime/qv4runtime_p.h
index 4c147a3a32..5c941d4b5d 100644
--- a/src/qml/jsruntime/qv4runtime_p.h
+++ b/src/qml/jsruntime/qv4runtime_p.h
@@ -91,30 +91,30 @@ struct ExecutionEngine;
struct InternalClass;
// context
-void __qmljs_call_activation_property(QV4::ExecutionContext *, QV4::Value *result, QV4::String *name, CallData *callData);
-void __qmljs_call_property(QV4::ExecutionContext *context, QV4::ValueRef result, QV4::String *name, CallData *callData);
-void __qmljs_call_property_lookup(ExecutionContext *context, Value *result, uint index, CallData *callData);
-void __qmljs_call_element(ExecutionContext *context, Value *result, const Value &index, CallData *callData);
-void __qmljs_call_value(QV4::ExecutionContext *context, QV4::Value *result, const QV4::Value &func, CallData *callData);
-
-void __qmljs_construct_activation_property(QV4::ExecutionContext *, QV4::Value *result, QV4::String *name, CallData *callData);
-void __qmljs_construct_property(QV4::ExecutionContext *context, QV4::Value *result, const QV4::Value &base, QV4::String *name, CallData *callData);
-void __qmljs_construct_value(QV4::ExecutionContext *context, QV4::Value *result, const QV4::Value &func, CallData *callData);
-
-void __qmljs_builtin_typeof(QV4::ExecutionContext *ctx, QV4::Value *result, const QV4::Value &val);
-void __qmljs_builtin_typeof_name(QV4::ExecutionContext *context, QV4::Value* result, QV4::String *name);
-void __qmljs_builtin_typeof_member(QV4::ExecutionContext* context, QV4::Value* result, const QV4::Value &base, QV4::String *name);
-void __qmljs_builtin_typeof_element(QV4::ExecutionContext* context, QV4::Value *result, const QV4::Value &base, const QV4::Value &index);
-
-void __qmljs_builtin_post_increment(QV4::Value *result, QV4::Value *val);
-void __qmljs_builtin_post_increment_name(QV4::ExecutionContext *context, QV4::Value *result, QV4::String *name);
-void __qmljs_builtin_post_increment_member(QV4::ExecutionContext *context, QV4::Value *result, const QV4::Value &base, QV4::String *name);
-void __qmljs_builtin_post_increment_element(QV4::ExecutionContext *context, QV4::Value *result, const QV4::Value &base, const QV4::Value *index);
-
-void __qmljs_builtin_post_decrement(QV4::Value *result, QV4::Value *val);
-void __qmljs_builtin_post_decrement_name(QV4::ExecutionContext *context, QV4::Value *result, QV4::String *name);
-void __qmljs_builtin_post_decrement_member(QV4::ExecutionContext *context, QV4::Value *result, const QV4::Value &base, QV4::String *name);
-void __qmljs_builtin_post_decrement_element(QV4::ExecutionContext *context, QV4::Value *result, const QV4::Value &base, const QV4::Value &index);
+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_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_builtin_typeof(QV4::ExecutionContext *ctx, QV4::ValueRef result, const QV4::Value &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_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_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 Q_NORETURN __qmljs_builtin_rethrow(QV4::ExecutionContext *context);
QV4::ExecutionContext *__qmljs_builtin_push_with_scope(const QV4::Value &o, QV4::ExecutionContext *ctx);
@@ -122,16 +122,16 @@ QV4::ExecutionContext *__qmljs_builtin_push_catch_scope(QV4::String *exceptionVa
QV4::ExecutionContext *__qmljs_builtin_pop_scope(QV4::ExecutionContext *ctx);
void __qmljs_builtin_declare_var(QV4::ExecutionContext *ctx, bool deletable, QV4::String *name);
void __qmljs_builtin_define_property(QV4::ExecutionContext *ctx, const QV4::Value &object, QV4::String *name, QV4::Value *val);
-void __qmljs_builtin_define_array(QV4::ExecutionContext *ctx, QV4::Value *array, QV4::Value *values, uint length);
+void __qmljs_builtin_define_array(QV4::ExecutionContext *ctx, QV4::ValueRef array, QV4::Value *values, uint length);
void __qmljs_builtin_define_getter_setter(QV4::ExecutionContext *ctx, const QV4::Value &object, QV4::String *name, const QV4::Value *getter, const QV4::Value *setter);
-void __qmljs_builtin_define_object_literal(QV4::ExecutionContext *ctx, QV4::Value *result, const QV4::Value *args, int classId);
-void __qmljs_builtin_setup_arguments_object(ExecutionContext *ctx, QV4::Value *result);
+void __qmljs_builtin_define_object_literal(QV4::ExecutionContext *ctx, QV4::ValueRef result, const QV4::Value *args, int classId);
+void __qmljs_builtin_setup_arguments_object(ExecutionContext *ctx, QV4::ValueRef result);
-void __qmljs_value_from_string(QV4::Value *result, QV4::String *string);
-void __qmljs_lookup_runtime_regexp(QV4::ExecutionContext *ctx, QV4::Value *result, int id);
+void __qmljs_value_from_string(QV4::ValueRef result, QV4::String *string);
+void __qmljs_lookup_runtime_regexp(QV4::ExecutionContext *ctx, QV4::ValueRef result, int id);
// constructors
-void __qmljs_init_closure(QV4::ExecutionContext *ctx, QV4::Value *result, int functionId);
+void __qmljs_init_closure(QV4::ExecutionContext *ctx, QV4::ValueRef result, int functionId);
// strings
Q_QML_EXPORT double __qmljs_string_to_number(const QString &s);
@@ -142,19 +142,19 @@ QV4::String *__qmljs_string_concat(QV4::ExecutionContext *ctx, QV4::String *firs
Q_QML_EXPORT QV4::Value __qmljs_object_default_value(QV4::Object *object, int typeHint);
void __qmljs_set_activation_property(QV4::ExecutionContext *ctx, QV4::String *name, const QV4::Value& value);
void __qmljs_set_property(QV4::ExecutionContext *ctx, const QV4::Value &object, QV4::String *name, const QV4::Value &value);
-void __qmljs_get_property(QV4::ExecutionContext *ctx, QV4::Value *result, const QV4::Value &object, QV4::String *name);
-void __qmljs_get_activation_property(QV4::ExecutionContext *ctx, QV4::Value *result, QV4::String *name);
+void __qmljs_get_property(QV4::ExecutionContext *ctx, QV4::ValueRef result, const QV4::Value &object, QV4::String *name);
+void __qmljs_get_activation_property(QV4::ExecutionContext *ctx, QV4::ValueRef result, QV4::String *name);
-void __qmljs_call_global_lookup(QV4::ExecutionContext *context, QV4::Value *result, uint index, CallData *callData);
-void __qmljs_construct_global_lookup(QV4::ExecutionContext *context, QV4::Value *result, uint index, CallData *callData);
+void __qmljs_call_global_lookup(QV4::ExecutionContext *context, QV4::ValueRef result, uint index, CallDataRef callData);
+void __qmljs_construct_global_lookup(QV4::ExecutionContext *context, QV4::ValueRef result, uint index, CallDataRef callData);
-void __qmljs_get_element(QV4::ExecutionContext *ctx, QV4::Value *retval, const QV4::Value &object, const QV4::Value &index);
+void __qmljs_get_element(QV4::ExecutionContext *ctx, QV4::ValueRef retval, const QV4::Value &object, const QV4::Value &index);
void __qmljs_set_element(QV4::ExecutionContext *ctx, const QV4::Value &object, const QV4::Value &index, const QV4::Value &value);
// For each
-void __qmljs_foreach_iterator_object(QV4::ExecutionContext *ctx, QV4::Value *result, const QV4::Value &in);
-void __qmljs_foreach_next_property_name(QV4::Value *result, const QV4::Value &foreach_iterator);
+void __qmljs_foreach_iterator_object(QV4::ExecutionContext *ctx, QV4::ValueRef result, const QV4::Value &in);
+void __qmljs_foreach_next_property_name(QV4::ValueRef result, const QV4::Value &foreach_iterator);
// type conversion and testing
QV4::Value __qmljs_to_primitive(const QV4::Value &value, int typeHint);
@@ -184,37 +184,37 @@ Q_QML_EXPORT int __qmljs_double_to_int32(const double &d);
Q_QML_EXPORT unsigned __qmljs_value_to_uint32(const Value &value);
Q_QML_EXPORT unsigned __qmljs_double_to_uint32(const double &d);
-void __qmljs_delete_subscript(QV4::ExecutionContext *ctx, QV4::Value *result, const QV4::Value &base, const QV4::Value &index);
-void __qmljs_delete_member(QV4::ExecutionContext *ctx, QV4::Value *result, const QV4::Value &base, QV4::String *name);
-void __qmljs_delete_name(QV4::ExecutionContext *ctx, QV4::Value *result, QV4::String *name);
+void __qmljs_delete_subscript(QV4::ExecutionContext *ctx, QV4::ValueRef result, const QV4::Value &base, const QV4::Value &index);
+void __qmljs_delete_member(QV4::ExecutionContext *ctx, QV4::ValueRef result, const QV4::Value &base, QV4::String *name);
+void __qmljs_delete_name(QV4::ExecutionContext *ctx, QV4::ValueRef result, QV4::String *name);
void Q_NORETURN __qmljs_throw(QV4::ExecutionContext*, const QV4::Value &value);
// binary operators
-//typedef void (*BinOp)(QV4::Value *result, const QV4::Value &left, const QV4::Value &right);
-typedef void (*BinOpContext)(QV4::ExecutionContext *ctx, QV4::Value *result, const QV4::Value &left, const QV4::Value &right);
-
-void __qmljs_instanceof(QV4::ExecutionContext *ctx, QV4::Value *result, const QV4::Value &left, const QV4::Value &right);
-void __qmljs_in(QV4::ExecutionContext *ctx, QV4::Value *result, const QV4::Value &left, const QV4::Value &right);
-void __qmljs_add(ExecutionContext *ctx, QV4::Value *result, const QV4::Value &left, const QV4::Value &right);
-void __qmljs_bit_or(QV4::Value *result, const QV4::Value &left, const QV4::Value &right);
-void __qmljs_bit_xor(QV4::Value *result, const QV4::Value &left, const QV4::Value &right);
-void __qmljs_bit_and(QV4::Value *result, const QV4::Value &left, const QV4::Value &right);
-void __qmljs_sub(QV4::Value *result, const QV4::Value &left, const QV4::Value &right);
-void __qmljs_mul(QV4::Value *result, const QV4::Value &left, const QV4::Value &right);
-void __qmljs_div(QV4::Value *result, const QV4::Value &left, const QV4::Value &right);
-void __qmljs_mod(QV4::Value *result, const QV4::Value &left, const QV4::Value &right);
-void __qmljs_shl(QV4::Value *result, const QV4::Value &left, const QV4::Value &right);
-void __qmljs_shr(QV4::Value *result, const QV4::Value &left, const QV4::Value &right);
-void __qmljs_ushr(QV4::Value *result, const QV4::Value &left, const QV4::Value &right);
-void __qmljs_gt(QV4::Value *result, const QV4::Value &left, const QV4::Value &right);
-void __qmljs_lt(QV4::Value *result, const QV4::Value &left, const QV4::Value &right);
-void __qmljs_ge(QV4::Value *result, const QV4::Value &left, const QV4::Value &right);
-void __qmljs_le(QV4::Value *result, const QV4::Value &left, const QV4::Value &right);
-void __qmljs_eq(QV4::Value *result, const QV4::Value &left, const QV4::Value &right);
-void __qmljs_ne(QV4::Value *result, const QV4::Value &left, const QV4::Value &right);
-void __qmljs_se(QV4::Value *result, const QV4::Value &left, const QV4::Value &right);
-void __qmljs_sne(QV4::Value *result, const QV4::Value &left, const QV4::Value &right);
+typedef void (*BinOp)(QV4::ValueRef result, const QV4::Value &left, const QV4::Value &right);
+typedef void (*BinOpContext)(QV4::ExecutionContext *ctx, QV4::ValueRef result, const QV4::Value &left, const QV4::Value &right);
+
+void __qmljs_instanceof(QV4::ExecutionContext *ctx, QV4::ValueRef result, const QV4::Value &left, const QV4::Value &right);
+void __qmljs_in(QV4::ExecutionContext *ctx, QV4::ValueRef result, const QV4::Value &left, const QV4::Value &right);
+void __qmljs_add(ExecutionContext *ctx, QV4::ValueRef result, const QV4::Value &left, const QV4::Value &right);
+void __qmljs_bit_or(QV4::ValueRef result, const QV4::Value &left, const QV4::Value &right);
+void __qmljs_bit_xor(QV4::ValueRef result, const QV4::Value &left, const QV4::Value &right);
+void __qmljs_bit_and(QV4::ValueRef result, const QV4::Value &left, const QV4::Value &right);
+void __qmljs_sub(QV4::ValueRef result, const QV4::Value &left, const QV4::Value &right);
+void __qmljs_mul(QV4::ValueRef result, const QV4::Value &left, const QV4::Value &right);
+void __qmljs_div(QV4::ValueRef result, const QV4::Value &left, const QV4::Value &right);
+void __qmljs_mod(QV4::ValueRef result, const QV4::Value &left, const QV4::Value &right);
+void __qmljs_shl(QV4::ValueRef result, const QV4::Value &left, const QV4::Value &right);
+void __qmljs_shr(QV4::ValueRef result, const QV4::Value &left, const QV4::Value &right);
+void __qmljs_ushr(QV4::ValueRef result, const QV4::Value &left, const QV4::Value &right);
+void __qmljs_gt(QV4::ValueRef result, const QV4::Value &left, const QV4::Value &right);
+void __qmljs_lt(QV4::ValueRef result, const QV4::Value &left, const QV4::Value &right);
+void __qmljs_ge(QV4::ValueRef result, const QV4::Value &left, const QV4::Value &right);
+void __qmljs_le(QV4::ValueRef result, const QV4::Value &left, const QV4::Value &right);
+void __qmljs_eq(QV4::ValueRef result, const QV4::Value &left, const QV4::Value &right);
+void __qmljs_ne(QV4::ValueRef result, const QV4::Value &left, const QV4::Value &right);
+void __qmljs_se(QV4::ValueRef result, const QV4::Value &left, const QV4::Value &right);
+void __qmljs_sne(QV4::ValueRef result, const QV4::Value &left, const QV4::Value &right);
void __qmljs_add_helper(QV4::ExecutionContext *ctx, QV4::ValueRef result, const QV4::ValueRef left, const QV4::ValueRef right);
@@ -368,7 +368,7 @@ inline void __qmljs_not(QV4::ValueRef result, const QV4::ValueRef value)
}
// binary operators
-inline void __qmljs_bit_or(QV4::Value *result, const QV4::Value &left, const QV4::Value &right)
+inline void __qmljs_bit_or(ValueRef result, const QV4::Value &left, const QV4::Value &right)
{
TRACE2(left, right);
@@ -382,7 +382,7 @@ inline void __qmljs_bit_or(QV4::Value *result, const QV4::Value &left, const QV4
*result = QV4::Value::fromInt32(lval | rval);
}
-inline void __qmljs_bit_xor(QV4::Value *result, const QV4::Value &left, const QV4::Value &right)
+inline void __qmljs_bit_xor(QV4::ValueRef result, const QV4::Value &left, const QV4::Value &right)
{
TRACE2(left, right);
@@ -396,7 +396,7 @@ inline void __qmljs_bit_xor(QV4::Value *result, const QV4::Value &left, const QV
*result = QV4::Value::fromInt32(lval ^ rval);
}
-inline void __qmljs_bit_and(QV4::Value *result, const QV4::Value &left, const QV4::Value &right)
+inline void __qmljs_bit_and(ValueRef result, const QV4::Value &left, const QV4::Value &right)
{
TRACE2(left, right);
@@ -410,7 +410,7 @@ inline void __qmljs_bit_and(QV4::Value *result, const QV4::Value &left, const QV
*result = QV4::Value::fromInt32(lval & rval);
}
-inline void __qmljs_add(QV4::ExecutionContext *ctx, QV4::Value *result, const QV4::Value &left, const QV4::Value &right)
+inline void __qmljs_add(QV4::ExecutionContext *ctx, ValueRef result, const QV4::Value &left, const QV4::Value &right)
{
TRACE2(left, right);
@@ -424,10 +424,10 @@ inline void __qmljs_add(QV4::ExecutionContext *ctx, QV4::Value *result, const QV
return;
}
- __qmljs_add_helper(ctx, QV4::ValueRef::fromRawValue(result), ValueRef::fromRawValue(&left), ValueRef::fromRawValue(&right));
+ __qmljs_add_helper(ctx, result, ValueRef::fromRawValue(&left), ValueRef::fromRawValue(&right));
}
-inline void __qmljs_sub(QV4::Value *result, const QV4::Value &left, const QV4::Value &right)
+inline void __qmljs_sub(QV4::ValueRef result, const QV4::Value &left, const QV4::Value &right)
{
TRACE2(left, right);
@@ -441,7 +441,7 @@ inline void __qmljs_sub(QV4::Value *result, const QV4::Value &left, const QV4::V
*result = QV4::Value::fromDouble(lval - rval);
}
-inline void __qmljs_mul(QV4::Value *result, const QV4::Value &left, const QV4::Value &right)
+inline void __qmljs_mul(ValueRef result, const QV4::Value &left, const QV4::Value &right)
{
TRACE2(left, right);
@@ -455,7 +455,7 @@ inline void __qmljs_mul(QV4::Value *result, const QV4::Value &left, const QV4::V
*result = QV4::Value::fromDouble(lval * rval);
}
-inline void __qmljs_div(QV4::Value *result, const QV4::Value &left, const QV4::Value &right)
+inline void __qmljs_div(QV4::ValueRef result, const QV4::Value &left, const QV4::Value &right)
{
TRACE2(left, right);
@@ -464,7 +464,7 @@ inline void __qmljs_div(QV4::Value *result, const QV4::Value &left, const QV4::V
*result = QV4::Value::fromDouble(lval / rval);
}
-inline void __qmljs_mod(QV4::Value *result, const QV4::Value &left, const QV4::Value &right)
+inline void __qmljs_mod(ValueRef result, const QV4::Value &left, const QV4::Value &right)
{
TRACE2(left, right);
@@ -481,7 +481,7 @@ inline void __qmljs_mod(QV4::Value *result, const QV4::Value &left, const QV4::V
*result = QV4::Value::fromDouble(std::fmod(lval, rval));
}
-inline void __qmljs_shl(QV4::Value *result, const QV4::Value &left, const QV4::Value &right)
+inline void __qmljs_shl(QV4::ValueRef result, const QV4::Value &left, const QV4::Value &right)
{
TRACE2(left, right);
@@ -495,7 +495,7 @@ inline void __qmljs_shl(QV4::Value *result, const QV4::Value &left, const QV4::V
*result = QV4::Value::fromInt32(lval << rval);
}
-inline void __qmljs_shr(QV4::Value *result, const QV4::Value &left, const QV4::Value &right)
+inline void __qmljs_shr(ValueRef result, const QV4::Value &left, const QV4::Value &right)
{
TRACE2(left, right);
@@ -509,7 +509,7 @@ inline void __qmljs_shr(QV4::Value *result, const QV4::Value &left, const QV4::V
*result = QV4::Value::fromInt32(lval >> rval);
}
-inline void __qmljs_ushr(QV4::Value *result, const QV4::Value &left, const QV4::Value &right)
+inline void __qmljs_ushr(QV4::ValueRef result, const QV4::Value &left, const QV4::Value &right)
{
TRACE2(left, right);
@@ -528,49 +528,49 @@ inline void __qmljs_ushr(QV4::Value *result, const QV4::Value &left, const QV4::
*result = QV4::Value::fromInt32(res);
}
-inline void __qmljs_gt(QV4::Value *result, const QV4::Value &left, const QV4::Value &right)
+inline void __qmljs_gt(ValueRef result, const QV4::Value &left, const QV4::Value &right)
{
TRACE2(left, right);
*result = QV4::Value::fromBoolean(__qmljs_cmp_gt(left, right));
}
-inline void __qmljs_lt(QV4::Value *result, const QV4::Value &left, const QV4::Value &right)
+inline void __qmljs_lt(QV4::ValueRef result, const QV4::Value &left, const QV4::Value &right)
{
TRACE2(left, right);
*result = QV4::Value::fromBoolean(__qmljs_cmp_lt(left, right));
}
-inline void __qmljs_ge(QV4::Value *result, const QV4::Value &left, const QV4::Value &right)
+inline void __qmljs_ge(ValueRef result, const QV4::Value &left, const QV4::Value &right)
{
TRACE2(left, right);
*result = QV4::Value::fromBoolean(__qmljs_cmp_ge(left, right));
}
-inline void __qmljs_le(QV4::Value *result, const QV4::Value &left, const QV4::Value &right)
+inline void __qmljs_le(ValueRef result, const QV4::Value &left, const QV4::Value &right)
{
TRACE2(left, right);
*result = QV4::Value::fromBoolean(__qmljs_cmp_le(left, right));
}
-inline void __qmljs_eq(QV4::Value *result, const QV4::Value &left, const QV4::Value &right)
+inline void __qmljs_eq(QV4::ValueRef result, const QV4::Value &left, const QV4::Value &right)
{
TRACE2(left, right);
*result = QV4::Value::fromBoolean(__qmljs_cmp_eq(left, right));
}
-inline void __qmljs_ne(QV4::Value *result, const QV4::Value &left, const QV4::Value &right)
+inline void __qmljs_ne(ValueRef result, const QV4::Value &left, const QV4::Value &right)
{
TRACE2(left, right);
*result = QV4::Value::fromBoolean(!__qmljs_cmp_eq(left, right));
}
-inline void __qmljs_se(QV4::Value *result, const QV4::Value &left, const QV4::Value &right)
+inline void __qmljs_se(QV4::ValueRef result, const QV4::Value &left, const QV4::Value &right)
{
TRACE2(left, right);
@@ -578,7 +578,7 @@ inline void __qmljs_se(QV4::Value *result, const QV4::Value &left, const QV4::Va
*result = QV4::Value::fromBoolean(r);
}
-inline void __qmljs_sne(QV4::Value *result, const QV4::Value &left, const QV4::Value &right)
+inline void __qmljs_sne(ValueRef result, const QV4::Value &left, const QV4::Value &right)
{
TRACE2(left, right);
diff --git a/src/qml/jsruntime/qv4scopedvalue_p.h b/src/qml/jsruntime/qv4scopedvalue_p.h
index 3ee96210a7..55c0b99230 100644
--- a/src/qml/jsruntime/qv4scopedvalue_p.h
+++ b/src/qml/jsruntime/qv4scopedvalue_p.h
@@ -101,6 +101,22 @@ struct ValueScope {
Value *mark;
};
+struct ScopedValue;
+struct ValueRef;
+
+struct ReturnedValue
+{
+ ReturnedValue(const Value &v)
+ : v(v) {}
+ // no destructor
+
+
+private:
+ friend struct ValueRef;
+ friend struct ScopedValue;
+ QV4::Value v;
+};
+
struct ScopedValue
{
ScopedValue(const ValueScope &scope)
@@ -114,11 +130,22 @@ struct ScopedValue
*ptr = v;
}
+ ScopedValue(const ValueScope &scope, const ReturnedValue &v)
+ {
+ ptr = scope.engine->jsStackTop++;
+ *ptr = v.v;
+ }
+
ScopedValue &operator=(const Value &v) {
*ptr = v;
return *this;
}
+ ScopedValue &operator=(const ReturnedValue &v) {
+ *ptr = v.v;
+ return *this;
+ }
+
ScopedValue &operator=(const ScopedValue &other) {
*ptr = *other.ptr;
return *this;
@@ -186,6 +213,10 @@ struct ValueRef {
{ *ptr = *o.ptr; return *this; }
ValueRef &operator=(const Value &v)
{ *ptr = v; return *this; }
+ ValueRef &operator=(const ReturnedValue &v) {
+ *ptr = v.v;
+ return *this;
+ }
operator const Value *() const {
return ptr;
@@ -207,12 +238,44 @@ struct ValueRef {
static const ValueRef fromRawValue(const Value *v) {
return ValueRef(const_cast<Value *>(v));
}
-private:
+ // ### get rid of this one!
ValueRef(Value *v) { ptr = v; }
+private:
Value *ptr;
};
+struct CallDataRef {
+ CallDataRef(const ScopedCallData &c)
+ : ptr(c.ptr) {}
+ CallDataRef(CallData *v) { ptr = v; }
+ // Important: Do NOT add a copy constructor to this class
+ // adding a copy constructor actually changes the calling convention, ie.
+ // is not even binary compatible. Adding it would break assumptions made
+ // in the jit'ed code.
+ CallDataRef &operator=(const ScopedCallData &c)
+ { *ptr = *c.ptr; return *this; }
+ CallDataRef &operator=(const CallDataRef &o)
+ { *ptr = *o.ptr; return *this; }
+
+ operator const CallData *() const {
+ return ptr;
+ }
+ const CallData *operator->() const {
+ return ptr;
+ }
+
+ operator CallData *() {
+ return ptr;
+ }
+ CallData *operator->() {
+ return ptr;
+ }
+
+private:
+ CallData *ptr;
+};
+
}
QT_END_NAMESPACE
diff --git a/src/qml/jsruntime/qv4value_def_p.h b/src/qml/jsruntime/qv4value_def_p.h
index 66cd32fbe0..7d037f3d49 100644
--- a/src/qml/jsruntime/qv4value_def_p.h
+++ b/src/qml/jsruntime/qv4value_def_p.h
@@ -277,8 +277,6 @@ struct Q_QML_EXPORT Value
inline void mark() const;
};
-typedef void (*BinOp)(QV4::Value *result, const QV4::Value &left, const QV4::Value &right);
-
}
QT_END_NAMESPACE