summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@digia.com>2013-02-14 10:45:49 +0100
committerLars Knoll <lars.knoll@digia.com>2013-02-14 12:33:02 +0100
commitb09bb08d7440cfcf4ab6440bac4990e0b4542c30 (patch)
tree138585bd9d3ab1b14db11b7661bfb0d89689cc75
parent2ce17e2aa9908aa68136f3e82b6ad5a001a9f5fc (diff)
Convert run-time functions that take a Value * for arguments to use a Value reference
This keeps the C++ implementation code simpler while still providing the same (pointer based) calling convention. Change-Id: Ib72acf1dfdf4638f6d109a0771fdafc921a544d2 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
-rw-r--r--src/v4/llvm_runtime.cpp114
-rw-r--r--src/v4/moth/qv4instr_moth_p.h2
-rw-r--r--src/v4/moth/qv4isel_moth.cpp2
-rw-r--r--src/v4/moth/qv4vme_moth.cpp28
-rw-r--r--src/v4/qmljs_environment.cpp8
-rw-r--r--src/v4/qmljs_environment.h6
-rw-r--r--src/v4/qmljs_runtime.cpp198
-rw-r--r--src/v4/qmljs_runtime.h428
-rw-r--r--src/v4/qmljs_value.h2
-rw-r--r--src/v4/qv4functionobject.cpp6
-rw-r--r--src/v4/qv4functionobject.h4
-rw-r--r--src/v4/qv4isel_masm.cpp10
-rw-r--r--src/v4/qv4managed.cpp2
-rw-r--r--src/v4/qv4managed.h6
-rw-r--r--src/v4/qv4object.cpp18
-rw-r--r--src/v4/qv4object.h10
16 files changed, 423 insertions, 421 deletions
diff --git a/src/v4/llvm_runtime.cpp b/src/v4/llvm_runtime.cpp
index 3009da66..2f6e9f14 100644
--- a/src/v4/llvm_runtime.cpp
+++ b/src/v4/llvm_runtime.cpp
@@ -105,107 +105,107 @@ bool __qmljs_llvm_to_boolean(ExecutionContext *ctx, const Value *value)
void __qmljs_llvm_bit_and(ExecutionContext *ctx, Value *result, Value *left, Value *right)
{
- __qmljs_bit_and(ctx, result, left, right);
+ __qmljs_bit_and(ctx, result, *left, *right);
}
void __qmljs_llvm_bit_or(ExecutionContext *ctx, Value *result, Value *left, Value *right)
{
- __qmljs_bit_or(ctx, result, left, right);
+ __qmljs_bit_or(ctx, result, *left, *right);
}
void __qmljs_llvm_bit_xor(ExecutionContext *ctx, Value *result, Value *left, Value *right)
{
- __qmljs_bit_xor(ctx, result, left, right);
+ __qmljs_bit_xor(ctx, result, *left, *right);
}
void __qmljs_llvm_add(ExecutionContext *ctx, Value *result, Value *left, Value *right)
{
- __qmljs_add(ctx, result, left, right);
+ __qmljs_add(ctx, result, *left, *right);
}
void __qmljs_llvm_sub(ExecutionContext *ctx, Value *result, Value *left, Value *right)
{
- __qmljs_sub(ctx, result, left, right);
+ __qmljs_sub(ctx, result, *left, *right);
}
void __qmljs_llvm_mul(ExecutionContext *ctx, Value *result, Value *left, Value *right)
{
- __qmljs_mul(ctx, result, left, right);
+ __qmljs_mul(ctx, result, *left, *right);
}
void __qmljs_llvm_div(ExecutionContext *ctx, Value *result, Value *left, Value *right)
{
- __qmljs_div(ctx, result, left, right);
+ __qmljs_div(ctx, result, *left, *right);
}
void __qmljs_llvm_mod(ExecutionContext *ctx, Value *result, Value *left, Value *right)
{
- __qmljs_mod(ctx, result, left, right);
+ __qmljs_mod(ctx, result, *left, *right);
}
void __qmljs_llvm_shl(ExecutionContext *ctx, Value *result, Value *left, Value *right)
{
- __qmljs_shl(ctx, result, left, right);
+ __qmljs_shl(ctx, result, *left, *right);
}
void __qmljs_llvm_shr(ExecutionContext *ctx, Value *result, Value *left, Value *right)
{
- __qmljs_shr(ctx, result, left, right);
+ __qmljs_shr(ctx, result, *left, *right);
}
void __qmljs_llvm_ushr(ExecutionContext *ctx, Value *result, Value *left, Value *right)
{
- __qmljs_ushr(ctx, result, left, right);
+ __qmljs_ushr(ctx, result, *left, *right);
}
void __qmljs_llvm_gt(ExecutionContext *ctx, Value *result, Value *left, Value *right)
{
- __qmljs_gt(ctx, result, left, right);
+ __qmljs_gt(ctx, result, *left, *right);
}
void __qmljs_llvm_lt(ExecutionContext *ctx, Value *result, Value *left, Value *right)
{
- __qmljs_lt(ctx, result, left, right);
+ __qmljs_lt(ctx, result, *left, *right);
}
void __qmljs_llvm_ge(ExecutionContext *ctx, Value *result, Value *left, Value *right)
{
- __qmljs_ge(ctx, result, left, right);
+ __qmljs_ge(ctx, result, *left, *right);
}
void __qmljs_llvm_le(ExecutionContext *ctx, Value *result, Value *left, Value *right)
{
- __qmljs_le(ctx, result, left, right);
+ __qmljs_le(ctx, result, *left, *right);
}
void __qmljs_llvm_eq(ExecutionContext *ctx, Value *result, Value *left, Value *right)
{
- __qmljs_eq(ctx, result, left, right);
+ __qmljs_eq(ctx, result, *left, *right);
}
void __qmljs_llvm_ne(ExecutionContext *ctx, Value *result, Value *left, Value *right)
{
- __qmljs_ne(ctx, result, left, right);
+ __qmljs_ne(ctx, result, *left, *right);
}
void __qmljs_llvm_se(ExecutionContext *ctx, Value *result, Value *left, Value *right)
{
- __qmljs_se(ctx, result, left, right);
+ __qmljs_se(ctx, result, *left, *right);
}
void __qmljs_llvm_sne(ExecutionContext *ctx, Value *result, Value *left, Value *right)
{
- __qmljs_sne(ctx, result, left, right);
+ __qmljs_sne(ctx, result, *left, *right);
}
void __qmljs_llvm_instanceof(ExecutionContext *ctx, Value *result, Value *left, Value *right)
{
- __qmljs_instanceof(ctx, result, left, right);
+ __qmljs_instanceof(ctx, result, *left, *right);
}
void __qmljs_llvm_in(ExecutionContext *ctx, Value *result, Value *left, Value *right)
{
- __qmljs_in(ctx, result, left, right);
+ __qmljs_in(ctx, result, *left, *right);
}
void __qmljs_llvm_uplus(ExecutionContext *ctx, Value *result, const Value *value)
@@ -230,167 +230,167 @@ void __qmljs_llvm_not(ExecutionContext *ctx, Value *result, const Value *value)
void __qmljs_llvm_inplace_bit_and_name(ExecutionContext *ctx, String *dest, Value *src)
{
- __qmljs_inplace_bit_and_name(ctx, dest, src);
+ __qmljs_inplace_bit_and_name(ctx, dest, *src);
}
void __qmljs_llvm_inplace_bit_or_name(ExecutionContext *ctx, String *dest, Value *src)
{
- __qmljs_inplace_bit_or_name(ctx, dest, src);
+ __qmljs_inplace_bit_or_name(ctx, dest, *src);
}
void __qmljs_llvm_inplace_bit_xor_name(ExecutionContext *ctx, String *dest, Value *src)
{
- __qmljs_inplace_bit_xor_name(ctx, dest, src);
+ __qmljs_inplace_bit_xor_name(ctx, dest, *src);
}
void __qmljs_llvm_inplace_add_name(ExecutionContext *ctx, String *dest, Value *src)
{
- __qmljs_inplace_add_name(ctx, dest, src);
+ __qmljs_inplace_add_name(ctx, dest, *src);
}
void __qmljs_llvm_inplace_sub_name(ExecutionContext *ctx, String *dest, Value *src)
{
- __qmljs_inplace_sub_name(ctx, dest, src);
+ __qmljs_inplace_sub_name(ctx, dest, *src);
}
void __qmljs_llvm_inplace_mul_name(ExecutionContext *ctx, String *dest, Value *src)
{
- __qmljs_inplace_mul_name(ctx, dest, src);
+ __qmljs_inplace_mul_name(ctx, dest, *src);
}
void __qmljs_llvm_inplace_div_name(ExecutionContext *ctx, String *dest, Value *src)
{
- __qmljs_inplace_div_name(ctx, dest, src);
+ __qmljs_inplace_div_name(ctx, dest, *src);
}
void __qmljs_llvm_inplace_mod_name(ExecutionContext *ctx, String *dest, Value *src)
{
- __qmljs_inplace_mod_name(ctx, dest, src);
+ __qmljs_inplace_mod_name(ctx, dest, *src);
}
void __qmljs_llvm_inplace_shl_name(ExecutionContext *ctx, String *dest, Value *src)
{
- __qmljs_inplace_shl_name(ctx, dest, src);
+ __qmljs_inplace_shl_name(ctx, dest, *src);
}
void __qmljs_llvm_inplace_shr_name(ExecutionContext *ctx, String *dest, Value *src)
{
- __qmljs_inplace_shr_name(ctx, dest, src);
+ __qmljs_inplace_shr_name(ctx, dest, *src);
}
void __qmljs_llvm_inplace_ushr_name(ExecutionContext *ctx, String *dest, Value *src)
{
- __qmljs_inplace_ushr_name(ctx, dest, src);
+ __qmljs_inplace_ushr_name(ctx, dest, *src);
}
void __qmljs_llvm_inplace_bit_and_element(ExecutionContext *ctx, Value *base, Value *index, Value *value)
{
- __qmljs_inplace_bit_and_element(ctx, base, index, value);
+ __qmljs_inplace_bit_and_element(ctx, *base, *index, *value);
}
void __qmljs_llvm_inplace_bit_or_element(ExecutionContext *ctx, Value *base, Value *index, Value *value)
{
- __qmljs_inplace_bit_or_element(ctx, base, index, value);
+ __qmljs_inplace_bit_or_element(ctx, *base, *index, *value);
}
void __qmljs_llvm_inplace_bit_xor_element(ExecutionContext *ctx, Value *base, Value *index, Value *value)
{
- __qmljs_inplace_bit_xor_element(ctx, base, index, value);
+ __qmljs_inplace_bit_xor_element(ctx, *base, *index, *value);
}
void __qmljs_llvm_inplace_add_element(ExecutionContext *ctx, Value *base, Value *index, Value *value)
{
- __qmljs_inplace_add_element(ctx, base, index, value);
+ __qmljs_inplace_add_element(ctx, *base, *index, *value);
}
void __qmljs_llvm_inplace_sub_element(ExecutionContext *ctx, Value *base, Value *index, Value *value)
{
- __qmljs_inplace_sub_element(ctx, base, index, value);
+ __qmljs_inplace_sub_element(ctx, *base, *index, *value);
}
void __qmljs_llvm_inplace_mul_element(ExecutionContext *ctx, Value *base, Value *index, Value *value)
{
- __qmljs_inplace_mul_element(ctx, base, index, value);
+ __qmljs_inplace_mul_element(ctx, *base, *index, *value);
}
void __qmljs_llvm_inplace_div_element(ExecutionContext *ctx, Value *base, Value *index, Value *value)
{
- __qmljs_inplace_div_element(ctx, base, index, value);
+ __qmljs_inplace_div_element(ctx, *base, *index, *value);
}
void __qmljs_llvm_inplace_mod_element(ExecutionContext *ctx, Value *base, Value *index, Value *value)
{
- __qmljs_inplace_mod_element(ctx, base, index, value);
+ __qmljs_inplace_mod_element(ctx, *base, *index, *value);
}
void __qmljs_llvm_inplace_shl_element(ExecutionContext *ctx, Value *base, Value *index, Value *value)
{
- __qmljs_inplace_shl_element(ctx, base, index, value);
+ __qmljs_inplace_shl_element(ctx, *base, *index, *value);
}
void __qmljs_llvm_inplace_shr_element(ExecutionContext *ctx, Value *base, Value *index, Value *value)
{
- __qmljs_inplace_shr_element(ctx, base, index, value);
+ __qmljs_inplace_shr_element(ctx, *base, *index, *value);
}
void __qmljs_llvm_inplace_ushr_element(ExecutionContext *ctx, Value *base, Value *index, Value *value)
{
- __qmljs_inplace_ushr_element(ctx, base, index, value);
+ __qmljs_inplace_ushr_element(ctx, *base, *index, *value);
}
void __qmljs_llvm_inplace_bit_and_member(ExecutionContext *ctx, Value *value, Value *base, String *member)
{
- __qmljs_inplace_bit_and_member(ctx, base, member, value);
+ __qmljs_inplace_bit_and_member(ctx, *base, member, *value);
}
void __qmljs_llvm_inplace_bit_or_member(ExecutionContext *ctx, Value *value, Value *base, String *member)
{
- __qmljs_inplace_bit_or_member(ctx, base, member, value);
+ __qmljs_inplace_bit_or_member(ctx, *base, member, *value);
}
void __qmljs_llvm_inplace_bit_xor_member(ExecutionContext *ctx, Value *value, Value *base, String *member)
{
- __qmljs_inplace_bit_xor_member(ctx, base, member, value);
+ __qmljs_inplace_bit_xor_member(ctx, *base, member, *value);
}
void __qmljs_llvm_inplace_add_member(ExecutionContext *ctx, Value *value, Value *base, String *member)
{
- __qmljs_inplace_add_member(ctx, base, member, value);
+ __qmljs_inplace_add_member(ctx, *base, member, *value);
}
void __qmljs_llvm_inplace_sub_member(ExecutionContext *ctx, Value *value, Value *base, String *member)
{
- __qmljs_inplace_sub_member(ctx, base, member, value);
+ __qmljs_inplace_sub_member(ctx, *base, member, *value);
}
void __qmljs_llvm_inplace_mul_member(ExecutionContext *ctx, Value *value, Value *base, String *member)
{
- __qmljs_inplace_mul_member(ctx, base, member, value);
+ __qmljs_inplace_mul_member(ctx, *base, member, *value);
}
void __qmljs_llvm_inplace_div_member(ExecutionContext *ctx, Value *value, Value *base, String *member)
{
- __qmljs_inplace_div_member(ctx, base, member, value);
+ __qmljs_inplace_div_member(ctx, *base, member, *value);
}
void __qmljs_llvm_inplace_mod_member(ExecutionContext *ctx, Value *value, Value *base, String *member)
{
- __qmljs_inplace_mod_member(ctx, base, member, value);
+ __qmljs_inplace_mod_member(ctx, *base, member, *value);
}
void __qmljs_llvm_inplace_shl_member(ExecutionContext *ctx, Value *value, Value *base, String *member)
{
- __qmljs_inplace_shl_member(ctx, base, member, value);
+ __qmljs_inplace_shl_member(ctx, *base, member, *value);
}
void __qmljs_llvm_inplace_shr_member(ExecutionContext *ctx, Value *value, Value *base, String *member)
{
- __qmljs_inplace_shr_member(ctx, base, member, value);
+ __qmljs_inplace_shr_member(ctx, *base, member, *value);
}
void __qmljs_llvm_inplace_ushr_member(ExecutionContext *ctx, Value *value, Value *base, String *member)
{
- __qmljs_inplace_ushr_member(ctx, base, member, value);
+ __qmljs_inplace_ushr_member(ctx, *base, member, *value);
}
String *__qmljs_llvm_identifier_from_utf8(ExecutionContext *ctx, const char *str)
@@ -426,12 +426,12 @@ void __qmljs_llvm_get_activation_property(ExecutionContext *ctx, Value *result,
void __qmljs_llvm_set_activation_property(ExecutionContext *ctx, String *name, Value *value)
{
- __qmljs_set_activation_property(ctx, name, value);
+ __qmljs_set_activation_property(ctx, name, *value);
}
void __qmljs_llvm_get_property(ExecutionContext *ctx, Value *result, Value *object, String *name)
{
- __qmljs_get_property(ctx, result, object, name);
+ __qmljs_get_property(ctx, result, *object, name);
}
void __qmljs_llvm_call_property(ExecutionContext *context, Value *result, const Value *base, String *name, Value *args, int argc)
@@ -456,7 +456,7 @@ void __qmljs_llvm_set_element(ExecutionContext *ctx, Value *object, Value *index
void __qmljs_llvm_set_property(ExecutionContext *ctx, Value *object, String *name, Value *value)
{
- __qmljs_set_property(ctx, object, name, value);
+ __qmljs_set_property(ctx, *object, name, *value);
}
void __qmljs_llvm_builtin_declare_var(ExecutionContext *ctx, bool deletable, String *name)
diff --git a/src/v4/moth/qv4instr_moth_p.h b/src/v4/moth/qv4instr_moth_p.h
index f600ae89..c28e2a26 100644
--- a/src/v4/moth/qv4instr_moth_p.h
+++ b/src/v4/moth/qv4instr_moth_p.h
@@ -400,7 +400,7 @@ union Instr
};
struct instr_unop {
MOTH_INSTR_HEADER
- VM::Value (*alu)(const VM::Value value, VM::ExecutionContext *ctx);
+ VM::UnaryOpName alu;
Param source;
Param result;
};
diff --git a/src/v4/moth/qv4isel_moth.cpp b/src/v4/moth/qv4isel_moth.cpp
index c0c282bb..8cd9e385 100644
--- a/src/v4/moth/qv4isel_moth.cpp
+++ b/src/v4/moth/qv4isel_moth.cpp
@@ -482,7 +482,7 @@ void InstructionSelection::copyValue(IR::Temp *sourceTemp, IR::Temp *targetTemp)
void InstructionSelection::unop(IR::AluOp oper, IR::Temp *sourceTemp, IR::Temp *targetTemp)
{
- VM::Value (*op)(const VM::Value value, VM::ExecutionContext *ctx) = 0;
+ VM::Value (*op)(const VM::Value& value, VM::ExecutionContext *ctx) = 0;
switch (oper) {
case IR::OpIfTrue: assert(!"unreachable"); break;
case IR::OpNot: op = VM::__qmljs_not; break;
diff --git a/src/v4/moth/qv4vme_moth.cpp b/src/v4/moth/qv4vme_moth.cpp
index 0dbaee65..cd6264a0 100644
--- a/src/v4/moth/qv4vme_moth.cpp
+++ b/src/v4/moth/qv4vme_moth.cpp
@@ -182,7 +182,7 @@ VM::Value VME::operator()(QQmlJS::VM::ExecutionContext *context, const uchar *co
MOTH_BEGIN_INSTR(StoreName)
TRACE(inline, "property name = %s", instr.name->toQString().toUtf8().constData());
- __qmljs_set_activation_property(context, instr.name, VALUEPTR(instr.source));
+ __qmljs_set_activation_property(context, instr.name, VALUE(instr.source));
MOTH_END_INSTR(StoreName)
MOTH_BEGIN_INSTR(LoadElement)
@@ -194,11 +194,11 @@ VM::Value VME::operator()(QQmlJS::VM::ExecutionContext *context, const uchar *co
MOTH_END_INSTR(StoreElement)
MOTH_BEGIN_INSTR(LoadProperty)
- __qmljs_get_property(context, VALUEPTR(instr.result), VALUEPTR(instr.base), instr.name);
+ __qmljs_get_property(context, VALUEPTR(instr.result), VALUE(instr.base), instr.name);
MOTH_END_INSTR(LoadProperty)
MOTH_BEGIN_INSTR(StoreProperty)
- __qmljs_set_property(context, VALUEPTR(instr.base), instr.name, VALUEPTR(instr.source));
+ __qmljs_set_property(context, VALUE(instr.base), instr.name, VALUE(instr.source));
MOTH_END_INSTR(StoreProperty)
MOTH_BEGIN_INSTR(Push)
@@ -328,11 +328,11 @@ VM::Value VME::operator()(QQmlJS::VM::ExecutionContext *context, const uchar *co
MOTH_END_INSTR(CallBuiltinTypeofValue)
MOTH_BEGIN_INSTR(CallBuiltinPostIncMember)
- __qmljs_builtin_post_increment_member(context, VALUEPTR(instr.result), VALUEPTR(instr.base), instr.member);
+ __qmljs_builtin_post_increment_member(context, VALUEPTR(instr.result), VALUE(instr.base), instr.member);
MOTH_END_INSTR(CallBuiltinTypeofMember)
MOTH_BEGIN_INSTR(CallBuiltinPostIncSubscript)
- __qmljs_builtin_post_increment_element(context, VALUEPTR(instr.result), VALUEPTR(instr.base), VALUEPTR(instr.index));
+ __qmljs_builtin_post_increment_element(context, VALUEPTR(instr.result), VALUE(instr.base), VALUEPTR(instr.index));
MOTH_END_INSTR(CallBuiltinTypeofSubscript)
MOTH_BEGIN_INSTR(CallBuiltinPostIncName)
@@ -344,11 +344,11 @@ VM::Value VME::operator()(QQmlJS::VM::ExecutionContext *context, const uchar *co
MOTH_END_INSTR(CallBuiltinTypeofValue)
MOTH_BEGIN_INSTR(CallBuiltinPostDecMember)
- __qmljs_builtin_post_decrement_member(context, VALUEPTR(instr.result), VALUEPTR(instr.base), instr.member);
+ __qmljs_builtin_post_decrement_member(context, VALUEPTR(instr.result), VALUE(instr.base), instr.member);
MOTH_END_INSTR(CallBuiltinTypeofMember)
MOTH_BEGIN_INSTR(CallBuiltinPostDecSubscript)
- __qmljs_builtin_post_decrement_element(context, VALUEPTR(instr.result), VALUEPTR(instr.base), VALUEPTR(instr.index));
+ __qmljs_builtin_post_decrement_element(context, VALUEPTR(instr.result), VALUE(instr.base), VALUE(instr.index));
MOTH_END_INSTR(CallBuiltinTypeofSubscript)
MOTH_BEGIN_INSTR(CallBuiltinPostDecName)
@@ -410,7 +410,7 @@ VM::Value VME::operator()(QQmlJS::VM::ExecutionContext *context, const uchar *co
MOTH_END_INSTR(Unop)
MOTH_BEGIN_INSTR(Binop)
- instr.alu(context, VALUEPTR(instr.result), VALUEPTR(instr.lhs), VALUEPTR(instr.rhs));
+ instr.alu(context, VALUEPTR(instr.result), VALUE(instr.lhs), VALUE(instr.rhs));
MOTH_END_INSTR(Binop)
MOTH_BEGIN_INSTR(Ret)
@@ -425,21 +425,21 @@ VM::Value VME::operator()(QQmlJS::VM::ExecutionContext *context, const uchar *co
MOTH_BEGIN_INSTR(InplaceElementOp)
instr.alu(context,
- VALUEPTR(instr.base),
- VALUEPTR(instr.index),
- VALUEPTR(instr.source));
+ VALUE(instr.base),
+ VALUE(instr.index),
+ VALUE(instr.source));
MOTH_END_INSTR(InplaceElementOp)
MOTH_BEGIN_INSTR(InplaceMemberOp)
instr.alu(context,
- VALUEPTR(instr.base),
+ VALUE(instr.base),
instr.member,
- VALUEPTR(instr.source));
+ VALUE(instr.source));
MOTH_END_INSTR(InplaceMemberOp)
MOTH_BEGIN_INSTR(InplaceNameOp)
TRACE(name, "%s", instr.name->toQString().toUtf8().constData());
- instr.alu(context, instr.name, VALUEPTR(instr.source));
+ instr.alu(context, instr.name, VALUE(instr.source));
MOTH_END_INSTR(InplaceNameOp)
#ifdef MOTH_THREADED_INTERPRETER
diff --git a/src/v4/qmljs_environment.cpp b/src/v4/qmljs_environment.cpp
index 1d61a1b7..801f8d7b 100644
--- a/src/v4/qmljs_environment.cpp
+++ b/src/v4/qmljs_environment.cpp
@@ -113,7 +113,7 @@ void ExecutionContext::createMutableBinding(String *name, bool deletable)
activation->__defineOwnProperty__(this, name, &desc);
}
-bool ExecutionContext::setMutableBinding(ExecutionContext *scope, String *name, Value value)
+bool ExecutionContext::setMutableBinding(ExecutionContext *scope, String *name, const Value &value)
{
// ### throw if scope->strict is true, and it would change an immutable binding
if (function) {
@@ -332,7 +332,7 @@ void ExecutionContext::mark()
exceptionValue.mark();
}
-void ExecutionContext::setProperty(String *name, Value value)
+void ExecutionContext::setProperty(String *name, const Value& value)
{
// qDebug() << "=== SetProperty" << value.toString(this)->toQString();
for (ExecutionContext *ctx = this; ctx; ctx = ctx->outer) {
@@ -503,11 +503,11 @@ Value ExecutionContext::getPropertyAndBase(String *name, Object **base)
-void ExecutionContext::inplaceBitOp(String *name, const Value *value, BinOp op)
+void ExecutionContext::inplaceBitOp(String *name, const Value &value, BinOp op)
{
Value lhs = getProperty(name);
Value result;
- op(this, &result, &lhs, value);
+ op(this, &result, lhs, value);
setProperty(name, result);
}
diff --git a/src/v4/qmljs_environment.h b/src/v4/qmljs_environment.h
index a3af53a0..473b2ea2 100644
--- a/src/v4/qmljs_environment.h
+++ b/src/v4/qmljs_environment.h
@@ -108,7 +108,7 @@ struct ExecutionContext
bool hasBinding(String *name) const;
void createMutableBinding(String *name, bool deletable);
- bool setMutableBinding(ExecutionContext *scope, String *name, Value value);
+ bool setMutableBinding(ExecutionContext *scope, String *name, const Value &value);
Value getBindingValue(ExecutionContext *scope, String *name, bool strict) const;
bool deleteBinding(ExecutionContext *ctx, String *name);
@@ -130,11 +130,11 @@ struct ExecutionContext
void throwURIError(Value msg);
void throwUnimplemented(const QString &message);
- void setProperty(String *name, Value value);
+ void setProperty(String *name, const Value &value);
Value getProperty(String *name);
Value getPropertyNoThrow(String *name);
Value getPropertyAndBase(String *name, Object **base);
- void inplaceBitOp(String *name, const QQmlJS::VM::Value *value, BinOp op);
+ void inplaceBitOp(String *name, const QQmlJS::VM::Value &value, BinOp op);
bool deleteProperty(String *name);
inline Value argument(unsigned int index = 0)
diff --git a/src/v4/qmljs_runtime.cpp b/src/v4/qmljs_runtime.cpp
index 77f8b83d..520c1e3c 100644
--- a/src/v4/qmljs_runtime.cpp
+++ b/src/v4/qmljs_runtime.cpp
@@ -189,7 +189,7 @@ Value __qmljs_string_literal_function(ExecutionContext *ctx)
return Value::fromString(ctx->engine->newString(QStringLiteral("function")));
}
-Value __qmljs_delete_subscript(ExecutionContext *ctx, Value base, Value index)
+Value __qmljs_delete_subscript(ExecutionContext *ctx, const Value &base, Value index)
{
if (Object *o = base.asObject()) {
uint n = UINT_MAX;
@@ -205,7 +205,7 @@ Value __qmljs_delete_subscript(ExecutionContext *ctx, Value base, Value index)
return __qmljs_delete_member(ctx, base, name);
}
-Value __qmljs_delete_member(ExecutionContext *ctx, Value base, String *name)
+Value __qmljs_delete_member(ExecutionContext *ctx, const Value &base, String *name)
{
Value obj = base.toObject(ctx);
return Value::fromBoolean(obj.objectValue()->__delete__(ctx, name));
@@ -216,10 +216,10 @@ Value __qmljs_delete_name(ExecutionContext *ctx, String *name)
return Value::fromBoolean(ctx->deleteProperty(name));
}
-void __qmljs_add_helper(ExecutionContext *ctx, Value *result, const Value *left, const Value *right)
+void __qmljs_add_helper(ExecutionContext *ctx, Value *result, const Value &left, const Value &right)
{
- Value pleft = __qmljs_to_primitive(*left, ctx, PREFERREDTYPE_HINT);
- Value pright = __qmljs_to_primitive(*right, ctx, PREFERREDTYPE_HINT);
+ Value pleft = __qmljs_to_primitive(left, ctx, PREFERREDTYPE_HINT);
+ Value pright = __qmljs_to_primitive(right, ctx, PREFERREDTYPE_HINT);
if (pleft.isString() || pright.isString()) {
if (!pleft.isString())
pleft = __qmljs_to_string(pleft, ctx);
@@ -234,9 +234,9 @@ void __qmljs_add_helper(ExecutionContext *ctx, Value *result, const Value *left,
*result = Value::fromDouble(x + y);
}
-void __qmljs_instanceof(ExecutionContext *ctx, Value *result, const Value *left, const Value *right)
+void __qmljs_instanceof(ExecutionContext *ctx, Value *result, const Value &left, const Value &right)
{
- Object *o = right->asObject();
+ Object *o = right.asObject();
if (!o)
__qmljs_throw_type_error(ctx);
@@ -244,199 +244,199 @@ 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, Value *result, const Value &left, const Value &right)
{
- if (!right->isObject())
+ if (!right.isObject())
__qmljs_throw_type_error(ctx);
- String *s = left->toString(ctx);
- bool r = right->objectValue()->__hasProperty__(ctx, s);
+ String *s = left.toString(ctx);
+ bool r = right.objectValue()->__hasProperty__(ctx, s);
*result = Value::fromBoolean(r);
}
-void __qmljs_inplace_bit_and_name(ExecutionContext *ctx, String *name, const Value *value)
+void __qmljs_inplace_bit_and_name(ExecutionContext *ctx, String *name, const Value &value)
{
ctx->inplaceBitOp(name, value, __qmljs_bit_and);
}
-void __qmljs_inplace_bit_or_name(ExecutionContext *ctx, String *name, const Value *value)
+void __qmljs_inplace_bit_or_name(ExecutionContext *ctx, String *name, const Value &value)
{
ctx->inplaceBitOp(name, value, __qmljs_bit_or);
}
-void __qmljs_inplace_bit_xor_name(ExecutionContext *ctx, String *name, const Value *value)
+void __qmljs_inplace_bit_xor_name(ExecutionContext *ctx, String *name, const Value &value)
{
ctx->inplaceBitOp(name, value, __qmljs_bit_xor);
}
-void __qmljs_inplace_add_name(ExecutionContext *ctx, String *name, const Value *value)
+void __qmljs_inplace_add_name(ExecutionContext *ctx, String *name, const Value &value)
{
ctx->inplaceBitOp(name, value, __qmljs_add);
}
-void __qmljs_inplace_sub_name(ExecutionContext *ctx, String *name, const Value *value)
+void __qmljs_inplace_sub_name(ExecutionContext *ctx, String *name, const Value &value)
{
ctx->inplaceBitOp(name, value, __qmljs_sub);
}
-void __qmljs_inplace_mul_name(ExecutionContext *ctx, String *name, const Value *value)
+void __qmljs_inplace_mul_name(ExecutionContext *ctx, String *name, const Value &value)
{
ctx->inplaceBitOp(name, value, __qmljs_mul);
}
-void __qmljs_inplace_div_name(ExecutionContext *ctx, String *name, const Value *value)
+void __qmljs_inplace_div_name(ExecutionContext *ctx, String *name, const Value &value)
{
ctx->inplaceBitOp(name, value, __qmljs_div);
}
-void __qmljs_inplace_mod_name(ExecutionContext *ctx, String *name, const Value *value)
+void __qmljs_inplace_mod_name(ExecutionContext *ctx, String *name, const Value &value)
{
ctx->inplaceBitOp(name, value, __qmljs_mod);
}
-void __qmljs_inplace_shl_name(ExecutionContext *ctx, String *name, const Value *value)
+void __qmljs_inplace_shl_name(ExecutionContext *ctx, String *name, const Value &value)
{
ctx->inplaceBitOp(name, value, __qmljs_shl);
}
-void __qmljs_inplace_shr_name(ExecutionContext *ctx, String *name, const Value *value)
+void __qmljs_inplace_shr_name(ExecutionContext *ctx, String *name, const Value &value)
{
ctx->inplaceBitOp(name, value, __qmljs_shr);
}
-void __qmljs_inplace_ushr_name(ExecutionContext *ctx, String *name, const Value *value)
+void __qmljs_inplace_ushr_name(ExecutionContext *ctx, String *name, const Value &value)
{
ctx->inplaceBitOp(name, value, __qmljs_ushr);
}
-void __qmljs_inplace_bit_and_element(ExecutionContext *ctx, const Value *base, const Value *index, const Value *rhs)
+void __qmljs_inplace_bit_and_element(ExecutionContext *ctx, const Value &base, const Value &index, const Value &rhs)
{
- Object *obj = base->toObject(ctx).objectValue();
+ Object *obj = base.toObject(ctx).objectValue();
obj->inplaceBinOp(ctx, __qmljs_bit_and, index, rhs);
}
-void __qmljs_inplace_bit_or_element(ExecutionContext *ctx, const Value *base, const Value *index, const Value *rhs)
+void __qmljs_inplace_bit_or_element(ExecutionContext *ctx, const Value &base, const Value &index, const Value &rhs)
{
- Object *obj = base->toObject(ctx).objectValue();
+ Object *obj = base.toObject(ctx).objectValue();
obj->inplaceBinOp(ctx, __qmljs_bit_or, index, rhs);
}
-void __qmljs_inplace_bit_xor_element(ExecutionContext *ctx, const Value *base, const Value *index, const Value *rhs)
+void __qmljs_inplace_bit_xor_element(ExecutionContext *ctx, const Value &base, const Value &index, const Value &rhs)
{
- Object *obj = base->toObject(ctx).objectValue();
+ Object *obj = base.toObject(ctx).objectValue();
obj->inplaceBinOp(ctx, __qmljs_bit_xor, index, rhs);
}
-void __qmljs_inplace_add_element(ExecutionContext *ctx, const Value *base, const Value *index, const Value *rhs)
+void __qmljs_inplace_add_element(ExecutionContext *ctx, const Value &base, const Value &index, const Value &rhs)
{
- Object *obj = base->toObject(ctx).objectValue();
+ Object *obj = base.toObject(ctx).objectValue();
obj->inplaceBinOp(ctx, __qmljs_add, index, rhs);
}
-void __qmljs_inplace_sub_element(ExecutionContext *ctx, const Value *base, const Value *index, const Value *rhs)
+void __qmljs_inplace_sub_element(ExecutionContext *ctx, const Value &base, const Value &index, const Value &rhs)
{
- Object *obj = base->toObject(ctx).objectValue();
+ Object *obj = base.toObject(ctx).objectValue();
obj->inplaceBinOp(ctx, __qmljs_sub, index, rhs);
}
-void __qmljs_inplace_mul_element(ExecutionContext *ctx, const Value *base, const Value *index, const Value *rhs)
+void __qmljs_inplace_mul_element(ExecutionContext *ctx, const Value &base, const Value &index, const Value &rhs)
{
- Object *obj = base->toObject(ctx).objectValue();
+ Object *obj = base.toObject(ctx).objectValue();
obj->inplaceBinOp(ctx, __qmljs_mul, index, rhs);
}
-void __qmljs_inplace_div_element(ExecutionContext *ctx, const Value *base, const Value *index, const Value *rhs)
+void __qmljs_inplace_div_element(ExecutionContext *ctx, const Value &base, const Value &index, const Value &rhs)
{
- Object *obj = base->toObject(ctx).objectValue();
+ Object *obj = base.toObject(ctx).objectValue();
obj->inplaceBinOp(ctx, __qmljs_div, index, rhs);
}
-void __qmljs_inplace_mod_element(ExecutionContext *ctx, const Value *base, const Value *index, const Value *rhs)
+void __qmljs_inplace_mod_element(ExecutionContext *ctx, const Value &base, const Value &index, const Value &rhs)
{
- Object *obj = base->toObject(ctx).objectValue();
+ Object *obj = base.toObject(ctx).objectValue();
obj->inplaceBinOp(ctx, __qmljs_mod, index, rhs);
}
-void __qmljs_inplace_shl_element(ExecutionContext *ctx, const Value *base, const Value *index, const Value *rhs)
+void __qmljs_inplace_shl_element(ExecutionContext *ctx, const Value &base, const Value &index, const Value &rhs)
{
- Object *obj = base->toObject(ctx).objectValue();
+ Object *obj = base.toObject(ctx).objectValue();
obj->inplaceBinOp(ctx, __qmljs_shl, index, rhs);
}
-void __qmljs_inplace_shr_element(ExecutionContext *ctx, const Value *base, const Value *index, const Value *rhs)
+void __qmljs_inplace_shr_element(ExecutionContext *ctx, const Value &base, const Value &index, const Value &rhs)
{
- Object *obj = base->toObject(ctx).objectValue();
+ Object *obj = base.toObject(ctx).objectValue();
obj->inplaceBinOp(ctx, __qmljs_shr, index, rhs);
}
-void __qmljs_inplace_ushr_element(ExecutionContext *ctx, const Value *base, const Value *index, const Value *rhs)
+void __qmljs_inplace_ushr_element(ExecutionContext *ctx, const Value &base, const Value &index, const Value &rhs)
{
- Object *obj = base->toObject(ctx).objectValue();
+ Object *obj = base.toObject(ctx).objectValue();
obj->inplaceBinOp(ctx, __qmljs_ushr, index, rhs);
}
-void __qmljs_inplace_bit_and_member(ExecutionContext *ctx, const Value *base, String *name, const Value *rhs)
+void __qmljs_inplace_bit_and_member(ExecutionContext *ctx, const Value &base, String *name, const Value &rhs)
{
- Object *o = base->toObject(ctx).objectValue();
+ Object *o = base.toObject(ctx).objectValue();
o->inplaceBinOp(ctx, __qmljs_bit_and, name, rhs);
}
-void __qmljs_inplace_bit_or_member(ExecutionContext *ctx, const Value *base, String *name, const Value *rhs)
+void __qmljs_inplace_bit_or_member(ExecutionContext *ctx, const Value &base, String *name, const Value &rhs)
{
- Object *o = base->toObject(ctx).objectValue();
+ Object *o = base.toObject(ctx).objectValue();
o->inplaceBinOp(ctx, __qmljs_bit_or, name, rhs);
}
-void __qmljs_inplace_bit_xor_member(ExecutionContext *ctx, const Value *base, String *name, const Value *rhs)
+void __qmljs_inplace_bit_xor_member(ExecutionContext *ctx, const Value &base, String *name, const Value &rhs)
{
- Object *o = base->toObject(ctx).objectValue();
+ Object *o = base.toObject(ctx).objectValue();
o->inplaceBinOp(ctx, __qmljs_bit_xor, name, rhs);
}
-void __qmljs_inplace_add_member(ExecutionContext *ctx, const Value *base, String *name, const Value *rhs)
+void __qmljs_inplace_add_member(ExecutionContext *ctx, const Value &base, String *name, const Value &rhs)
{
- Object *o = base->toObject(ctx).objectValue();
+ Object *o = base.toObject(ctx).objectValue();
o->inplaceBinOp(ctx, __qmljs_add, name, rhs);
}
-void __qmljs_inplace_sub_member(ExecutionContext *ctx, const Value *base, String *name, const Value *rhs)
+void __qmljs_inplace_sub_member(ExecutionContext *ctx, const Value &base, String *name, const Value &rhs)
{
- Object *o = base->toObject(ctx).objectValue();
+ Object *o = base.toObject(ctx).objectValue();
o->inplaceBinOp(ctx, __qmljs_sub, name, rhs);
}
-void __qmljs_inplace_mul_member(ExecutionContext *ctx, const Value *base, String *name, const Value *rhs)
+void __qmljs_inplace_mul_member(ExecutionContext *ctx, const Value &base, String *name, const Value &rhs)
{
- Object *o = base->toObject(ctx).objectValue();
+ Object *o = base.toObject(ctx).objectValue();
o->inplaceBinOp(ctx, __qmljs_mul, name, rhs);
}
-void __qmljs_inplace_div_member(ExecutionContext *ctx, const Value *base, String *name, const Value *rhs)
+void __qmljs_inplace_div_member(ExecutionContext *ctx, const Value &base, String *name, const Value &rhs)
{
- Object *o = base->toObject(ctx).objectValue();
+ Object *o = base.toObject(ctx).objectValue();
o->inplaceBinOp(ctx, __qmljs_div, name, rhs);
}
-void __qmljs_inplace_mod_member(ExecutionContext *ctx, const Value *base, String *name, const Value *rhs)
+void __qmljs_inplace_mod_member(ExecutionContext *ctx, const Value &base, String *name, const Value &rhs)
{
- Object *o = base->toObject(ctx).objectValue();
+ Object *o = base.toObject(ctx).objectValue();
o->inplaceBinOp(ctx, __qmljs_mod, name, rhs);
}
-void __qmljs_inplace_shl_member(ExecutionContext *ctx, const Value *base, String *name, const Value *rhs)
+void __qmljs_inplace_shl_member(ExecutionContext *ctx, const Value &base, String *name, const Value &rhs)
{
- Object *o = base->toObject(ctx).objectValue();
+ Object *o = base.toObject(ctx).objectValue();
o->inplaceBinOp(ctx, __qmljs_shl, name, rhs);
}
-void __qmljs_inplace_shr_member(ExecutionContext *ctx, const Value *base, String *name, const Value *rhs)
+void __qmljs_inplace_shr_member(ExecutionContext *ctx, const Value &base, String *name, const Value &rhs)
{
- Object *o = base->toObject(ctx).objectValue();
+ Object *o = base.toObject(ctx).objectValue();
o->inplaceBinOp(ctx, __qmljs_shr, name, rhs);
}
-void __qmljs_inplace_ushr_member(ExecutionContext *ctx, const Value *base, String *name, const Value *rhs)
+void __qmljs_inplace_ushr_member(ExecutionContext *ctx, const Value &base, String *name, const Value &rhs)
{
- Object *o = base->toObject(ctx).objectValue();
+ Object *o = base.toObject(ctx).objectValue();
o->inplaceBinOp(ctx, __qmljs_ushr, name, rhs);
}
@@ -567,10 +567,10 @@ Value __qmljs_new_string_object(ExecutionContext *ctx, String *string)
return Value::fromObject(ctx->engine->newStringObject(ctx, value));
}
-void __qmljs_set_property(ExecutionContext *ctx, const Value *object, String *name, const Value *value)
+void __qmljs_set_property(ExecutionContext *ctx, const Value &object, String *name, const Value &value)
{
- Object *o = object->isObject() ? object->objectValue() : __qmljs_to_object(*object, ctx).objectValue();
- o->__put__(ctx, name, *value);
+ Object *o = object.isObject() ? object.objectValue() : __qmljs_to_object(object, ctx).objectValue();
+ o->__put__(ctx, name, value);
}
Value __qmljs_get_element(ExecutionContext *ctx, Value object, Value index)
@@ -645,21 +645,21 @@ Value __qmljs_foreach_next_property_name(Value foreach_iterator)
}
-void __qmljs_set_activation_property(ExecutionContext *ctx, String *name, const Value *value)
+void __qmljs_set_activation_property(ExecutionContext *ctx, String *name, const Value &value)
{
- ctx->setProperty(name, *value);
+ ctx->setProperty(name, value);
}
-void __qmljs_get_property(ExecutionContext *ctx, Value *result, Value *object, String *name)
+void __qmljs_get_property(ExecutionContext *ctx, Value *result, const Value &object, String *name)
{
Value res;
- Object *o = object->asObject();
+ Object *o = object.asObject();
if (o) {
res = o->__get__(ctx, name);
- } else if (object->isString() && name->isEqualTo(ctx->engine->id_length)) {
- res = Value::fromInt32(object->stringValue()->toQString().length());
+ } else if (object.isString() && name->isEqualTo(ctx->engine->id_length)) {
+ res = Value::fromInt32(object.stringValue()->toQString().length());
} else {
- o = __qmljs_to_object(*object, ctx).objectValue();
+ o = __qmljs_to_object(object, ctx).objectValue();
res = o->__get__(ctx, name);
}
if (result)
@@ -671,11 +671,11 @@ void __qmljs_get_activation_property(ExecutionContext *ctx, Value *result, Strin
*result = ctx->getProperty(name);
}
-void __qmljs_get_property_lookup(ExecutionContext *ctx, Value *result, const Value *object, int lookupIndex)
+void __qmljs_get_property_lookup(ExecutionContext *ctx, Value *result, const Value &object, int lookupIndex)
{
Value res;
Lookup *l = ctx->lookups + lookupIndex;
- if (Object *o = object->asObject()) {
+ if (Object *o = object.asObject()) {
PropertyDescriptor *p = 0;
if (o->internalClass == l->mainClass) {
if (!l->protoClass) {
@@ -708,10 +708,10 @@ void __qmljs_get_property_lookup(ExecutionContext *ctx, Value *result, const Val
else
res = o->__get__(ctx, l->name);
} else {
- if (object->isString() && l->name->isEqualTo(ctx->engine->id_length)) {
- res = Value::fromInt32(object->stringValue()->toQString().length());
+ if (object.isString() && l->name->isEqualTo(ctx->engine->id_length)) {
+ res = Value::fromInt32(object.stringValue()->toQString().length());
} else {
- o = __qmljs_to_object(*object, ctx).objectValue();
+ o = __qmljs_to_object(object, ctx).objectValue();
res = o->__get__(ctx, l->name);
}
}
@@ -719,14 +719,14 @@ void __qmljs_get_property_lookup(ExecutionContext *ctx, Value *result, const Val
*result = res;
}
-void __qmljs_set_property_lookup(ExecutionContext *ctx, const Value *object, int lookupIndex, const Value *value)
+void __qmljs_set_property_lookup(ExecutionContext *ctx, const Value &object, int lookupIndex, const Value &value)
{
- Object *o = object->isObject() ? object->objectValue() : __qmljs_to_object(*object, ctx).objectValue();
+ Object *o = object.isObject() ? object.objectValue() : __qmljs_to_object(object, ctx).objectValue();
Lookup *l = ctx->lookups + lookupIndex;
if (l->index != ArrayObject::LengthPropertyIndex || !o->isArrayObject()) {
if (o->internalClass == l->mainClass) {
- o->putValue(ctx, o->memberData + l->index, *value);
+ o->putValue(ctx, o->memberData + l->index, value);
return;
}
@@ -734,11 +734,11 @@ void __qmljs_set_property_lookup(ExecutionContext *ctx, const Value *object, int
if (idx < UINT_MAX) {
l->mainClass = o->internalClass;
l->index = idx;
- return o->putValue(ctx, o->memberData + idx, *value);
+ return o->putValue(ctx, o->memberData + idx, value);
}
}
- o->__put__(ctx, l->name, *value);
+ o->__put__(ctx, l->name, value);
}
@@ -747,7 +747,7 @@ Value __qmljs_get_thisObject(ExecutionContext *ctx)
return ctx->thisObject;
}
-uint __qmljs_equal(Value x, Value y, ExecutionContext *ctx)
+uint __qmljs_equal(const Value &x, const Value &y, ExecutionContext *ctx)
{
if (x.type() == y.type()) {
switch (x.type()) {
@@ -1074,9 +1074,9 @@ 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, Value *result, const Value &base, String *name)
{
- Object *o = __qmljs_to_object(*base, context).objectValue();
+ Object *o = __qmljs_to_object(base, context).objectValue();
Value v = o->__get__(context, name);
@@ -1094,9 +1094,9 @@ void __qmljs_builtin_post_increment_member(ExecutionContext *context, Value *res
o->__put__(context, 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, Value *result, const Value &base, const Value *index)
{
- Object *o = __qmljs_to_object(*base, context).objectValue();
+ Object *o = __qmljs_to_object(base, context).objectValue();
uint idx = index->asArrayIndex();
@@ -1154,9 +1154,9 @@ 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, Value *result, const Value &base, String *name)
{
- Object *o = __qmljs_to_object(*base, context).objectValue();
+ Object *o = __qmljs_to_object(base, context).objectValue();
Value v = o->__get__(context, name);
@@ -1174,14 +1174,14 @@ void __qmljs_builtin_post_decrement_member(ExecutionContext *context, Value *res
o->__put__(context, 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, Value *result, const Value &base, const Value &index)
{
- Object *o = __qmljs_to_object(*base, context).objectValue();
+ Object *o = __qmljs_to_object(base, context).objectValue();
- 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);
}
@@ -1270,7 +1270,7 @@ void __qmljs_builtin_define_getter_setter(Value object, String *name, Value gett
o->__defineOwnProperty__(ctx, name, &pd);
}
-Value __qmljs_increment(Value value, ExecutionContext *ctx)
+Value __qmljs_increment(const Value &value, ExecutionContext *ctx)
{
TRACE1(value);
@@ -1281,7 +1281,7 @@ Value __qmljs_increment(Value value, ExecutionContext *ctx)
return Value::fromDouble(d + 1);
}
-Value __qmljs_decrement(Value value, ExecutionContext *ctx)
+Value __qmljs_decrement(const Value &value, ExecutionContext *ctx)
{
TRACE1(value);
diff --git a/src/v4/qmljs_runtime.h b/src/v4/qmljs_runtime.h
index 7dcba814..4c507012 100644
--- a/src/v4/qmljs_runtime.h
+++ b/src/v4/qmljs_runtime.h
@@ -108,13 +108,13 @@ Value __qmljs_builtin_typeof_element(Value base, Value index, ExecutionContext *
void __qmljs_builtin_post_increment(ExecutionContext *ctx, Value *result, Value *val);
void __qmljs_builtin_post_increment_name(ExecutionContext *context, Value *result, String *name);
-void __qmljs_builtin_post_increment_member(ExecutionContext *context, Value *result, const Value *base, String *name);
-void __qmljs_builtin_post_increment_element(ExecutionContext *context, Value *result, const Value *base, const Value *index);
+void __qmljs_builtin_post_increment_member(ExecutionContext *context, Value *result, const Value &base, String *name);
+void __qmljs_builtin_post_increment_element(ExecutionContext *context, Value *result, const Value &base, const Value *index);
void __qmljs_builtin_post_decrement(ExecutionContext *ctx, Value *result, Value *val);
void __qmljs_builtin_post_decrement_name(ExecutionContext *context, Value *result, String *name);
-void __qmljs_builtin_post_decrement_member(ExecutionContext *context, Value *result, const Value *base, String *name);
-void __qmljs_builtin_post_decrement_element(ExecutionContext *context, Value *result, const Value *base, const Value *index);
+void __qmljs_builtin_post_decrement_member(ExecutionContext *context, Value *result, const Value &base, String *name);
+void __qmljs_builtin_post_decrement_element(ExecutionContext *context, Value *result, const Value &base, const Value &index);
void __qmljs_builtin_throw(Value val, ExecutionContext *context);
void __qmljs_builtin_rethrow(ExecutionContext *context);
@@ -165,13 +165,13 @@ Value __qmljs_new_object(ExecutionContext *ctx);
Value __qmljs_new_boolean_object(ExecutionContext *ctx, bool boolean);
Value __qmljs_new_number_object(ExecutionContext *ctx, double n);
Value __qmljs_new_string_object(ExecutionContext *ctx, String *string);
-void __qmljs_set_activation_property(ExecutionContext *ctx, String *name, const Value *value);
-void __qmljs_set_property(ExecutionContext *ctx, const Value *object, String *name, const Value *value);
-void __qmljs_get_property(ExecutionContext *ctx, Value *result, Value *object, String *name);
+void __qmljs_set_activation_property(ExecutionContext *ctx, String *name, const Value& value);
+void __qmljs_set_property(ExecutionContext *ctx, const Value &object, String *name, const Value &value);
+void __qmljs_get_property(ExecutionContext *ctx, Value *result, const Value &object, String *name);
void __qmljs_get_activation_property(ExecutionContext *ctx, Value *result, String *name);
-void __qmljs_get_property_lookup(ExecutionContext *ctx, Value *result, const Value *object, int lookupIndex);
-void __qmljs_set_property_lookup(ExecutionContext *ctx, const Value *object, int lookupIndex, const Value *value);
+void __qmljs_get_property_lookup(ExecutionContext *ctx, Value *result, const Value &object, int lookupIndex);
+void __qmljs_set_property_lookup(ExecutionContext *ctx, const Value &object, int lookupIndex, const Value &value);
Value __qmljs_get_element(ExecutionContext *ctx, Value object, Value index);
@@ -185,31 +185,32 @@ Value __qmljs_foreach_next_property_name(Value foreach_iterator);
Value __qmljs_get_thisObject(ExecutionContext *ctx);
// type conversion and testing
-Value __qmljs_to_primitive(Value value, ExecutionContext *ctx, int typeHint);
-Bool __qmljs_to_boolean(Value value, ExecutionContext *ctx);
-double __qmljs_to_number(Value value, ExecutionContext *ctx);
-double __qmljs_to_integer(Value value, ExecutionContext *ctx);
-int __qmljs_to_int32(Value value, ExecutionContext *ctx);
-unsigned short __qmljs_to_uint16(Value value, ExecutionContext *ctx);
-Value __qmljs_to_string(Value value, ExecutionContext *ctx);
-Value __qmljs_to_object(Value value, ExecutionContext *ctx);
+Value __qmljs_to_primitive(const Value &value, ExecutionContext *ctx, int typeHint);
+Bool __qmljs_to_boolean(const Value &value, ExecutionContext *ctx);
+double __qmljs_to_number(const Value &value, ExecutionContext *ctx);
+double __qmljs_to_integer(const Value &value, ExecutionContext *ctx);
+int __qmljs_to_int32(const Value &value, ExecutionContext *ctx);
+unsigned short __qmljs_to_uint16(const Value &value, ExecutionContext *ctx);
+Value __qmljs_to_string(const Value &value, ExecutionContext *ctx);
+Value __qmljs_to_object(const Value &value, ExecutionContext *ctx);
//uint __qmljs_check_object_coercible(Context *ctx, Value *result, Value *value);
-Bool __qmljs_is_callable(Value value, ExecutionContext *ctx);
-Value __qmljs_default_value(Value value, ExecutionContext *ctx, int typeHint);
+Bool __qmljs_is_callable(const Value &value, ExecutionContext *ctx);
+Value __qmljs_default_value(const Value &value, ExecutionContext *ctx, int typeHint);
-Bool __qmljs_equal(Value x, Value y, ExecutionContext *ctx);
-Bool __qmljs_strict_equal(Value x, Value y);
+Bool __qmljs_equal(const Value &x, const Value &y, ExecutionContext *ctx);
+Bool __qmljs_strict_equal(const Value &x, const Value &y);
// unary operators
-Value __qmljs_uplus(Value value, ExecutionContext *ctx);
-Value __qmljs_uminus(Value value, ExecutionContext *ctx);
-Value __qmljs_compl(Value value, ExecutionContext *ctx);
-Value __qmljs_not(Value value, ExecutionContext *ctx);
-Value __qmljs_increment(Value value, ExecutionContext *ctx);
-Value __qmljs_decrement(Value value, ExecutionContext *ctx);
-
-Value __qmljs_delete_subscript(ExecutionContext *ctx, Value base, Value index);
-Value __qmljs_delete_member(ExecutionContext *ctx, Value base, String *name);
+typedef Value (*UnaryOpName)(const Value &, ExecutionContext* ctx);
+Value __qmljs_uplus(const Value &value, ExecutionContext *ctx);
+Value __qmljs_uminus(const Value &value, ExecutionContext *ctx);
+Value __qmljs_compl(const Value &value, ExecutionContext *ctx);
+Value __qmljs_not(const Value &value, ExecutionContext *ctx);
+Value __qmljs_increment(const Value &value, ExecutionContext *ctx);
+Value __qmljs_decrement(const Value &value, ExecutionContext *ctx);
+
+Value __qmljs_delete_subscript(ExecutionContext *ctx, const Value &base, Value index);
+Value __qmljs_delete_member(ExecutionContext *ctx, const Value &base, String *name);
Value __qmljs_delete_name(ExecutionContext *ctx, String *name);
void __qmljs_throw(Value value, ExecutionContext *context);
@@ -219,93 +220,93 @@ void __qmljs_delete_exception_handler(ExecutionContext *context);
Value __qmljs_get_exception(ExecutionContext *context);
// binary operators
-typedef void (*BinOp)(ExecutionContext *ctx, Value *result, const Value *left, const Value *right);
-
-void __qmljs_instanceof(ExecutionContext *ctx, Value *result, const Value *left, const Value *right);
-void __qmljs_in(ExecutionContext *ctx, Value *result, const Value *left, const Value *right);
-void __qmljs_bit_or(ExecutionContext *ctx, Value *result, const Value *left, const Value *right);
-void __qmljs_bit_xor(ExecutionContext *ctx, Value *result, const Value *left, const Value *right);
-void __qmljs_bit_and(ExecutionContext *ctx, Value *result, const Value *left, const Value *right);
-void __qmljs_add(ExecutionContext *ctx, Value *result, const Value *left, const Value *right);
-void __qmljs_sub(ExecutionContext *ctx, Value *result, const Value *left, const Value *right);
-void __qmljs_mul(ExecutionContext *ctx, Value *result, const Value *left, const Value *right);
-void __qmljs_div(ExecutionContext *ctx, Value *result, const Value *left, const Value *right);
-void __qmljs_mod(ExecutionContext *ctx, Value *result, const Value *left, const Value *right);
-void __qmljs_shl(ExecutionContext *ctx, Value *result, const Value *left, const Value *right);
-void __qmljs_shr(ExecutionContext *ctx, Value *result, const Value *left, const Value *right);
-void __qmljs_ushr(ExecutionContext *ctx, Value *result, const Value *left, const Value *right);
-void __qmljs_gt(ExecutionContext *ctx, Value *result, const Value *left, const Value *right);
-void __qmljs_lt(ExecutionContext *ctx, Value *result, const Value *left, const Value *right);
-void __qmljs_ge(ExecutionContext *ctx, Value *result, const Value *left, const Value *right);
-void __qmljs_le(ExecutionContext *ctx, Value *result, const Value *left, const Value *right);
-void __qmljs_eq(ExecutionContext *ctx, Value *result, const Value *left, const Value *right);
-void __qmljs_ne(ExecutionContext *ctx, Value *result, const Value *left, const Value *right);
-void __qmljs_se(ExecutionContext *ctx, Value *result, const Value *left, const Value *right);
-void __qmljs_sne(ExecutionContext *ctx, Value *result, const Value *left, const Value *right);
-
-void __qmljs_add_helper(ExecutionContext *ctx, Value *result, const Value *left, const Value *right);
-
-
-typedef void (*InplaceBinOpName)(ExecutionContext *ctx, String *name, const Value *value);
-void __qmljs_inplace_bit_and_name(ExecutionContext *ctx, String *name, const Value *value);
-void __qmljs_inplace_bit_or_name(ExecutionContext *ctx, String *name, const Value *value);
-void __qmljs_inplace_bit_xor_name(ExecutionContext *ctx, String *name, const Value *value);
-void __qmljs_inplace_add_name(ExecutionContext *ctx, String *name, const Value *value);
-void __qmljs_inplace_sub_name(ExecutionContext *ctx, String *name, const Value *value);
-void __qmljs_inplace_mul_name(ExecutionContext *ctx, String *name, const Value *value);
-void __qmljs_inplace_div_name(ExecutionContext *ctx, String *name, const Value *value);
-void __qmljs_inplace_mod_name(ExecutionContext *ctx, String *name, const Value *value);
-void __qmljs_inplace_shl_name(ExecutionContext *ctx, String *name, const Value *value);
-void __qmljs_inplace_shr_name(ExecutionContext *ctx, String *name, const Value *value);
-void __qmljs_inplace_ushr_name(ExecutionContext *ctx, String *name, const Value *value);
-
-typedef void (*InplaceBinOpElement)(ExecutionContext *ctx, const Value *base, const Value *index, const Value *rhs);
-void __qmljs_inplace_bit_and_element(ExecutionContext *ctx, const Value *base, const Value *index, const Value *rhs);
-void __qmljs_inplace_bit_or_element(ExecutionContext *ctx, const Value *base, const Value *index, const Value *rhs);
-void __qmljs_inplace_bit_xor_element(ExecutionContext *ctx, const Value *base, const Value *index, const Value *rhs);
-void __qmljs_inplace_add_element(ExecutionContext *ctx, const Value *base, const Value *index, const Value *rhs);
-void __qmljs_inplace_sub_element(ExecutionContext *ctx, const Value *base, const Value *index, const Value *rhs);
-void __qmljs_inplace_mul_element(ExecutionContext *ctx, const Value *base, const Value *index, const Value *rhs);
-void __qmljs_inplace_div_element(ExecutionContext *ctx, const Value *base, const Value *index, const Value *rhs);
-void __qmljs_inplace_mod_element(ExecutionContext *ctx, const Value *base, const Value *index, const Value *rhs);
-void __qmljs_inplace_shl_element(ExecutionContext *ctx, const Value *base, const Value *index, const Value *rhs);
-void __qmljs_inplace_shr_element(ExecutionContext *ctx, const Value *base, const Value *index, const Value *rhs);
-void __qmljs_inplace_ushr_element(ExecutionContext *ctx, const Value *base, const Value *index, const Value *rhs);
-
-typedef void (*InplaceBinOpMember)(ExecutionContext *ctx, const Value *base, String *name, const Value *rhs);
-void __qmljs_inplace_bit_and_member(ExecutionContext *ctx, const Value *base, String *name, const Value *rhs);
-void __qmljs_inplace_bit_or_member(ExecutionContext *ctx, const Value *base, String *name, const Value *rhs);
-void __qmljs_inplace_bit_xor_member(ExecutionContext *ctx, const Value *base, String *name, const Value *rhs);
-void __qmljs_inplace_add_member(ExecutionContext *ctx, const Value *base, String *name, const Value *rhs);
-void __qmljs_inplace_sub_member(ExecutionContext *ctx, const Value *base, String *name, const Value *rhs);
-void __qmljs_inplace_mul_member(ExecutionContext *ctx, const Value *base, String *name, const Value *rhs);
-void __qmljs_inplace_div_member(ExecutionContext *ctx, const Value *base, String *name, const Value *rhs);
-void __qmljs_inplace_mod_member(ExecutionContext *ctx, const Value *base, String *name, const Value *rhs);
-void __qmljs_inplace_shl_member(ExecutionContext *ctx, const Value *base, String *name, const Value *rhs);
-void __qmljs_inplace_shr_member(ExecutionContext *ctx, const Value *base, String *name, const Value *rhs);
-void __qmljs_inplace_ushr_member(ExecutionContext *ctx, const Value *base, String *name, const Value *rhs);
-
-typedef Bool (*CmpOp)(ExecutionContext *ctx, const Value *left, const Value *right);
-Bool __qmljs_cmp_gt(ExecutionContext *ctx, const Value *left, const Value *right);
-Bool __qmljs_cmp_lt(ExecutionContext *ctx, const Value *left, const Value *right);
-Bool __qmljs_cmp_ge(ExecutionContext *ctx, const Value *left, const Value *right);
-Bool __qmljs_cmp_le(ExecutionContext *ctx, const Value *left, const Value *right);
-Bool __qmljs_cmp_eq(ExecutionContext *ctx, const Value *left, const Value *right);
-Bool __qmljs_cmp_ne(ExecutionContext *ctx, const Value *left, const Value *right);
-Bool __qmljs_cmp_se(ExecutionContext *ctx, const Value *left, const Value *right);
-Bool __qmljs_cmp_sne(ExecutionContext *ctx, const Value *left, const Value *right);
-Bool __qmljs_cmp_instanceof(ExecutionContext *ctx, const Value *left, const Value *right);
-Bool __qmljs_cmp_in(ExecutionContext *ctx, const Value *left, const Value *right);
+typedef void (*BinOp)(ExecutionContext *ctx, Value *result, const Value &left, const Value &right);
+
+void __qmljs_instanceof(ExecutionContext *ctx, Value *result, const Value &left, const Value &right);
+void __qmljs_in(ExecutionContext *ctx, Value *result, const Value &left, const Value &right);
+void __qmljs_bit_or(ExecutionContext *ctx, Value *result, const Value &left, const Value &right);
+void __qmljs_bit_xor(ExecutionContext *ctx, Value *result, const Value &left, const Value &right);
+void __qmljs_bit_and(ExecutionContext *ctx, Value *result, const Value &left, const Value &right);
+void __qmljs_add(ExecutionContext *ctx, Value *result, const Value &left, const Value &right);
+void __qmljs_sub(ExecutionContext *ctx, Value *result, const Value &left, const Value &right);
+void __qmljs_mul(ExecutionContext *ctx, Value *result, const Value &left, const Value &right);
+void __qmljs_div(ExecutionContext *ctx, Value *result, const Value &left, const Value &right);
+void __qmljs_mod(ExecutionContext *ctx, Value *result, const Value &left, const Value &right);
+void __qmljs_shl(ExecutionContext *ctx, Value *result, const Value &left, const Value &right);
+void __qmljs_shr(ExecutionContext *ctx, Value *result, const Value &left, const Value &right);
+void __qmljs_ushr(ExecutionContext *ctx, Value *result, const Value &left, const Value &right);
+void __qmljs_gt(ExecutionContext *ctx, Value *result, const Value &left, const Value &right);
+void __qmljs_lt(ExecutionContext *ctx, Value *result, const Value &left, const Value &right);
+void __qmljs_ge(ExecutionContext *ctx, Value *result, const Value &left, const Value &right);
+void __qmljs_le(ExecutionContext *ctx, Value *result, const Value &left, const Value &right);
+void __qmljs_eq(ExecutionContext *ctx, Value *result, const Value &left, const Value &right);
+void __qmljs_ne(ExecutionContext *ctx, Value *result, const Value &left, const Value &right);
+void __qmljs_se(ExecutionContext *ctx, Value *result, const Value &left, const Value &right);
+void __qmljs_sne(ExecutionContext *ctx, Value *result, const Value &left, const Value &right);
+
+void __qmljs_add_helper(ExecutionContext *ctx, Value *result, const Value &left, const Value &right);
+
+
+typedef void (*InplaceBinOpName)(ExecutionContext *ctx, String *name, const Value &value);
+void __qmljs_inplace_bit_and_name(ExecutionContext *ctx, String *name, const Value &value);
+void __qmljs_inplace_bit_or_name(ExecutionContext *ctx, String *name, const Value &value);
+void __qmljs_inplace_bit_xor_name(ExecutionContext *ctx, String *name, const Value &value);
+void __qmljs_inplace_add_name(ExecutionContext *ctx, String *name, const Value &value);
+void __qmljs_inplace_sub_name(ExecutionContext *ctx, String *name, const Value &value);
+void __qmljs_inplace_mul_name(ExecutionContext *ctx, String *name, const Value &value);
+void __qmljs_inplace_div_name(ExecutionContext *ctx, String *name, const Value &value);
+void __qmljs_inplace_mod_name(ExecutionContext *ctx, String *name, const Value &value);
+void __qmljs_inplace_shl_name(ExecutionContext *ctx, String *name, const Value &value);
+void __qmljs_inplace_shr_name(ExecutionContext *ctx, String *name, const Value &value);
+void __qmljs_inplace_ushr_name(ExecutionContext *ctx, String *name, const Value &value);
+
+typedef void (*InplaceBinOpElement)(ExecutionContext *ctx, const Value &base, const Value &index, const Value &rhs);
+void __qmljs_inplace_bit_and_element(ExecutionContext *ctx, const Value &base, const Value &index, const Value &rhs);
+void __qmljs_inplace_bit_or_element(ExecutionContext *ctx, const Value &base, const Value &index, const Value &rhs);
+void __qmljs_inplace_bit_xor_element(ExecutionContext *ctx, const Value &base, const Value &index, const Value &rhs);
+void __qmljs_inplace_add_element(ExecutionContext *ctx, const Value &base, const Value &index, const Value &rhs);
+void __qmljs_inplace_sub_element(ExecutionContext *ctx, const Value &base, const Value &index, const Value &rhs);
+void __qmljs_inplace_mul_element(ExecutionContext *ctx, const Value &base, const Value &index, const Value &rhs);
+void __qmljs_inplace_div_element(ExecutionContext *ctx, const Value &base, const Value &index, const Value &rhs);
+void __qmljs_inplace_mod_element(ExecutionContext *ctx, const Value &base, const Value &index, const Value &rhs);
+void __qmljs_inplace_shl_element(ExecutionContext *ctx, const Value &base, const Value &index, const Value &rhs);
+void __qmljs_inplace_shr_element(ExecutionContext *ctx, const Value &base, const Value &index, const Value &rhs);
+void __qmljs_inplace_ushr_element(ExecutionContext *ctx, const Value &base, const Value &index, const Value &rhs);
+
+typedef void (*InplaceBinOpMember)(ExecutionContext *ctx, const Value &base, String *name, const Value &rhs);
+void __qmljs_inplace_bit_and_member(ExecutionContext *ctx, const Value &base, String *name, const Value &rhs);
+void __qmljs_inplace_bit_or_member(ExecutionContext *ctx, const Value &base, String *name, const Value &rhs);
+void __qmljs_inplace_bit_xor_member(ExecutionContext *ctx, const Value &base, String *name, const Value &rhs);
+void __qmljs_inplace_add_member(ExecutionContext *ctx, const Value &base, String *name, const Value &rhs);
+void __qmljs_inplace_sub_member(ExecutionContext *ctx, const Value &base, String *name, const Value &rhs);
+void __qmljs_inplace_mul_member(ExecutionContext *ctx, const Value &base, String *name, const Value &rhs);
+void __qmljs_inplace_div_member(ExecutionContext *ctx, const Value &base, String *name, const Value &rhs);
+void __qmljs_inplace_mod_member(ExecutionContext *ctx, const Value &base, String *name, const Value &rhs);
+void __qmljs_inplace_shl_member(ExecutionContext *ctx, const Value &base, String *name, const Value &rhs);
+void __qmljs_inplace_shr_member(ExecutionContext *ctx, const Value &base, String *name, const Value &rhs);
+void __qmljs_inplace_ushr_member(ExecutionContext *ctx, const Value &base, String *name, const Value &rhs);
+
+typedef Bool (*CmpOp)(ExecutionContext *ctx, const Value &left, const Value &right);
+Bool __qmljs_cmp_gt(ExecutionContext *ctx, const Value &left, const Value &right);
+Bool __qmljs_cmp_lt(ExecutionContext *ctx, const Value &left, const Value &right);
+Bool __qmljs_cmp_ge(ExecutionContext *ctx, const Value &left, const Value &right);
+Bool __qmljs_cmp_le(ExecutionContext *ctx, const Value &left, const Value &right);
+Bool __qmljs_cmp_eq(ExecutionContext *ctx, const Value &left, const Value &right);
+Bool __qmljs_cmp_ne(ExecutionContext *ctx, const Value &left, const Value &right);
+Bool __qmljs_cmp_se(ExecutionContext *ctx, const Value &left, const Value &right);
+Bool __qmljs_cmp_sne(ExecutionContext *ctx, const Value &left, const Value &right);
+Bool __qmljs_cmp_instanceof(ExecutionContext *ctx, const Value &left, const Value &right);
+Bool __qmljs_cmp_in(ExecutionContext *ctx, const Value &left, const Value &right);
// type conversion and testing
-inline Value __qmljs_to_primitive(Value value, ExecutionContext *ctx, int typeHint)
+inline Value __qmljs_to_primitive(const Value &value, ExecutionContext *ctx, int typeHint)
{
if (!value.isObject())
return value;
return __qmljs_default_value(value, ctx, typeHint);
}
-inline Bool __qmljs_to_boolean(Value value, ExecutionContext *ctx)
+inline Bool __qmljs_to_boolean(const Value &value, ExecutionContext *ctx)
{
switch (value.type()) {
case Value::Undefined_Type:
@@ -325,7 +326,7 @@ inline Bool __qmljs_to_boolean(Value value, ExecutionContext *ctx)
}
}
-inline double __qmljs_to_number(Value value, ExecutionContext *ctx)
+inline double __qmljs_to_number(const Value &value, ExecutionContext *ctx)
{
switch (value.type()) {
case Value::Undefined_Type:
@@ -347,7 +348,7 @@ inline double __qmljs_to_number(Value value, ExecutionContext *ctx)
}
}
-inline double __qmljs_to_integer(Value value, ExecutionContext *ctx)
+inline double __qmljs_to_integer(const Value &value, ExecutionContext *ctx)
{
if (value.isConvertibleToInt())
return value.int_32;
@@ -355,7 +356,7 @@ inline double __qmljs_to_integer(Value value, ExecutionContext *ctx)
return Value::toInteger(__qmljs_to_number(value, ctx));
}
-inline int __qmljs_to_int32(Value value, ExecutionContext *ctx)
+inline int __qmljs_to_int32(const Value &value, ExecutionContext *ctx)
{
if (value.isConvertibleToInt())
return value.int_32;
@@ -363,7 +364,7 @@ inline int __qmljs_to_int32(Value value, ExecutionContext *ctx)
return Value::toInt32(__qmljs_to_number(value, ctx));
}
-inline unsigned short __qmljs_to_uint16(Value value, ExecutionContext *ctx)
+inline unsigned short __qmljs_to_uint16(const Value &value, ExecutionContext *ctx)
{
if (value.isConvertibleToInt())
return (ushort)(uint)value.integerValue();
@@ -389,7 +390,7 @@ inline unsigned short __qmljs_to_uint16(Value value, ExecutionContext *ctx)
return (unsigned short)number;
}
-inline Value __qmljs_to_string(Value value, ExecutionContext *ctx)
+inline Value __qmljs_to_string(const Value &value, ExecutionContext *ctx)
{
switch (value.type()) {
case Value::Undefined_Type:
@@ -425,7 +426,7 @@ inline Value __qmljs_to_string(Value value, ExecutionContext *ctx)
} // switch
}
-inline Value __qmljs_to_object(Value value, ExecutionContext *ctx)
+inline Value __qmljs_to_object(const Value &value, ExecutionContext *ctx)
{
switch (value.type()) {
case Value::Undefined_Type:
@@ -464,7 +465,7 @@ inline uint __qmljs_check_object_coercible(Context *ctx, Value *result, Value *v
}
*/
-inline Bool __qmljs_is_callable(Value value, ExecutionContext * /*ctx*/)
+inline Bool __qmljs_is_callable(const Value &value, ExecutionContext * /*ctx*/)
{
if (value.isObject())
return __qmljs_is_function(value);
@@ -472,7 +473,7 @@ inline Bool __qmljs_is_callable(Value value, ExecutionContext * /*ctx*/)
return false;
}
-inline Value __qmljs_default_value(Value value, ExecutionContext *ctx, int typeHint)
+inline Value __qmljs_default_value(const Value &value, ExecutionContext *ctx, int typeHint)
{
if (value.isObject())
return __qmljs_object_default_value(ctx, value, typeHint);
@@ -480,18 +481,19 @@ inline Value __qmljs_default_value(Value value, ExecutionContext *ctx, int typeH
}
-inline Value __qmljs_uplus(Value value, ExecutionContext *ctx)
+inline Value __qmljs_uplus(const Value &value, ExecutionContext *ctx)
{
TRACE1(value);
- if (value.tryIntegerConversion())
- return value;
+ Value copy = value;
+ if (copy.tryIntegerConversion())
+ return copy;
double n = __qmljs_to_number(value, ctx);
return Value::fromDouble(n);
}
-inline Value __qmljs_uminus(Value value, ExecutionContext *ctx)
+inline Value __qmljs_uminus(const Value &value, ExecutionContext *ctx)
{
TRACE1(value);
@@ -502,7 +504,7 @@ inline Value __qmljs_uminus(Value value, ExecutionContext *ctx)
return Value::fromDouble(-n);
}
-inline Value __qmljs_compl(Value value, ExecutionContext *ctx)
+inline Value __qmljs_compl(const Value &value, ExecutionContext *ctx)
{
TRACE1(value);
@@ -515,7 +517,7 @@ inline Value __qmljs_compl(Value value, ExecutionContext *ctx)
return Value::fromInt32(~n);
}
-inline Value __qmljs_not(Value value, ExecutionContext *ctx)
+inline Value __qmljs_not(const Value &value, ExecutionContext *ctx)
{
TRACE1(value);
@@ -524,160 +526,160 @@ inline Value __qmljs_not(Value value, ExecutionContext *ctx)
}
// binary operators
-inline void __qmljs_bit_or(ExecutionContext *ctx, Value *result, const Value *left, const Value *right)
+inline void __qmljs_bit_or(ExecutionContext *ctx, Value *result, const Value &left, const Value &right)
{
TRACE2(left, right);
- if (Value::integerCompatible(*left, *right)) {
- *result = Value::fromInt32(left->integerValue() | right->integerValue());
+ if (Value::integerCompatible(left, right)) {
+ *result = Value::fromInt32(left.integerValue() | right.integerValue());
return;
}
- int lval = Value::toInt32(__qmljs_to_number(*left, ctx));
- int rval = Value::toInt32(__qmljs_to_number(*right, ctx));
+ int lval = Value::toInt32(__qmljs_to_number(left, ctx));
+ int rval = Value::toInt32(__qmljs_to_number(right, ctx));
*result = Value::fromInt32(lval | rval);
}
-inline void __qmljs_bit_xor(ExecutionContext *ctx, Value *result, const Value *left, const Value *right)
+inline void __qmljs_bit_xor(ExecutionContext *ctx, Value *result, const Value &left, const Value &right)
{
TRACE2(left, right);
- if (Value::integerCompatible(*left, *right)) {
- *result = Value::fromInt32(left->integerValue() ^ right->integerValue());
+ if (Value::integerCompatible(left, right)) {
+ *result = Value::fromInt32(left.integerValue() ^ right.integerValue());
return;
}
- int lval = Value::toInt32(__qmljs_to_number(*left, ctx));
- int rval = Value::toInt32(__qmljs_to_number(*right, ctx));
+ int lval = Value::toInt32(__qmljs_to_number(left, ctx));
+ int rval = Value::toInt32(__qmljs_to_number(right, ctx));
*result = Value::fromInt32(lval ^ rval);
}
-inline void __qmljs_bit_and(ExecutionContext *ctx, Value *result, const Value *left, const Value *right)
+inline void __qmljs_bit_and(ExecutionContext *ctx, Value *result, const Value &left, const Value &right)
{
TRACE2(left, right);
- if (Value::integerCompatible(*left, *right)) {
- *result = Value::fromInt32(left->integerValue() & right->integerValue());
+ if (Value::integerCompatible(left, right)) {
+ *result = Value::fromInt32(left.integerValue() & right.integerValue());
return;
}
- int lval = Value::toInt32(__qmljs_to_number(*left, ctx));
- int rval = Value::toInt32(__qmljs_to_number(*right, ctx));
+ int lval = Value::toInt32(__qmljs_to_number(left, ctx));
+ int rval = Value::toInt32(__qmljs_to_number(right, ctx));
*result = Value::fromInt32(lval & rval);
}
-inline void __qmljs_add(ExecutionContext *ctx, Value *result, const Value *left, const Value *right)
+inline void __qmljs_add(ExecutionContext *ctx, Value *result, const Value &left, const Value &right)
{
TRACE2(left, right);
#ifdef QMLJS_INLINE_MATH
- if (Value::integerCompatible(*left, *right)) {
- *result = add_int32(left->integerValue(), right->integerValue());
+ if (Value::integerCompatible(left, right)) {
+ *result = add_int32(left.integerValue(), right.integerValue());
return;
}
#endif
- if (Value::bothDouble(*left, *right)) {
- *result = Value::fromDouble(left->doubleValue() + right->doubleValue());
+ if (Value::bothDouble(left, right)) {
+ *result = Value::fromDouble(left.doubleValue() + right.doubleValue());
return;
}
__qmljs_add_helper(ctx, result, left, right);
}
-inline void __qmljs_sub(ExecutionContext *ctx, Value *result, const Value *left, const Value *right)
+inline void __qmljs_sub(ExecutionContext *ctx, Value *result, const Value &left, const Value &right)
{
TRACE2(left, right);
#ifdef QMLJS_INLINE_MATH
- if (Value::integerCompatible(*left, *right)) {
- *result = sub_int32(left->integerValue(), right->integerValue());
+ if (Value::integerCompatible(left, right)) {
+ *result = sub_int32(left.integerValue(), right.integerValue());
return;
}
#endif
- double lval = __qmljs_to_number(*left, ctx);
- double rval = __qmljs_to_number(*right, ctx);
+ double lval = __qmljs_to_number(left, ctx);
+ double rval = __qmljs_to_number(right, ctx);
*result = Value::fromDouble(lval - rval);
}
-inline void __qmljs_mul(ExecutionContext *ctx, Value *result, const Value *left, const Value *right)
+inline void __qmljs_mul(ExecutionContext *ctx, Value *result, const Value &left, const Value &right)
{
TRACE2(left, right);
#ifdef QMLJS_INLINE_MATH
- if (Value::integerCompatible(*left, *right)) {
- *result = mul_int32(left->integerValue(), right->integerValue());
+ if (Value::integerCompatible(left, right)) {
+ *result = mul_int32(left.integerValue(), right.integerValue());
return;
}
#endif
- double lval = __qmljs_to_number(*left, ctx);
- double rval = __qmljs_to_number(*right, ctx);
+ double lval = __qmljs_to_number(left, ctx);
+ double rval = __qmljs_to_number(right, ctx);
*result = Value::fromDouble(lval * rval);
}
-inline void __qmljs_div(ExecutionContext *ctx, Value *result, const Value *left, const Value *right)
+inline void __qmljs_div(ExecutionContext *ctx, Value *result, const Value &left, const Value &right)
{
TRACE2(left, right);
- double lval = __qmljs_to_number(*left, ctx);
- double rval = __qmljs_to_number(*right, ctx);
+ double lval = __qmljs_to_number(left, ctx);
+ double rval = __qmljs_to_number(right, ctx);
*result = Value::fromDouble(lval / rval);
}
-inline void __qmljs_mod(ExecutionContext *ctx, Value *result, const Value *left, const Value *right)
+inline void __qmljs_mod(ExecutionContext *ctx, Value *result, const Value &left, const Value &right)
{
TRACE2(left, right);
- if (Value::integerCompatible(*left, *right) && right->integerValue() != 0) {
- *result = Value::fromInt32(left->integerValue() % right->integerValue());
+ if (Value::integerCompatible(left, right) && right.integerValue() != 0) {
+ *result = Value::fromInt32(left.integerValue() % right.integerValue());
return;
}
- double lval = __qmljs_to_number(*left, ctx);
- double rval = __qmljs_to_number(*right, ctx);
+ double lval = __qmljs_to_number(left, ctx);
+ double rval = __qmljs_to_number(right, ctx);
*result = Value::fromDouble(fmod(lval, rval));
}
-inline void __qmljs_shl(ExecutionContext *ctx, Value *result, const Value *left, const Value *right)
+inline void __qmljs_shl(ExecutionContext *ctx, Value *result, const Value &left, const Value &right)
{
TRACE2(left, right);
- if (Value::integerCompatible(*left, *right)) {
- *result = Value::fromInt32(left->integerValue() << ((uint(right->integerValue()) & 0x1f)));
+ if (Value::integerCompatible(left, right)) {
+ *result = Value::fromInt32(left.integerValue() << ((uint(right.integerValue()) & 0x1f)));
return;
}
- int lval = Value::toInt32(__qmljs_to_number(*left, ctx));
- unsigned rval = Value::toUInt32(__qmljs_to_number(*right, ctx)) & 0x1f;
+ int lval = Value::toInt32(__qmljs_to_number(left, ctx));
+ unsigned rval = Value::toUInt32(__qmljs_to_number(right, ctx)) & 0x1f;
*result = Value::fromInt32(lval << rval);
}
-inline void __qmljs_shr(ExecutionContext *ctx, Value *result, const Value *left, const Value *right)
+inline void __qmljs_shr(ExecutionContext *ctx, Value *result, const Value &left, const Value &right)
{
TRACE2(left, right);
- if (Value::integerCompatible(*left, *right)) {
- *result = Value::fromInt32(left->integerValue() >> ((uint(right->integerValue()) & 0x1f)));
+ if (Value::integerCompatible(left, right)) {
+ *result = Value::fromInt32(left.integerValue() >> ((uint(right.integerValue()) & 0x1f)));
return;
}
- int lval = Value::toInt32(__qmljs_to_number(*left, ctx));
- unsigned rval = Value::toUInt32(__qmljs_to_number(*right, ctx)) & 0x1f;
+ int lval = Value::toInt32(__qmljs_to_number(left, ctx));
+ unsigned rval = Value::toUInt32(__qmljs_to_number(right, ctx)) & 0x1f;
*result = Value::fromInt32(lval >> rval);
}
-inline void __qmljs_ushr(ExecutionContext *ctx, Value *result, const Value *left, const Value *right)
+inline void __qmljs_ushr(ExecutionContext *ctx, Value *result, const Value &left, const Value &right)
{
TRACE2(left, right);
uint res;
- if (Value::integerCompatible(*left, *right)) {
- res = uint(left->integerValue()) >> (uint(right->integerValue()) & 0x1f);
+ if (Value::integerCompatible(left, right)) {
+ res = uint(left.integerValue()) >> (uint(right.integerValue()) & 0x1f);
} else {
- unsigned lval = Value::toUInt32(__qmljs_to_number(*left, ctx));
- unsigned rval = Value::toUInt32(__qmljs_to_number(*right, ctx)) & 0x1f;
+ unsigned lval = Value::toUInt32(__qmljs_to_number(left, ctx));
+ unsigned rval = Value::toUInt32(__qmljs_to_number(right, ctx)) & 0x1f;
res = lval >> rval;
}
@@ -687,70 +689,70 @@ inline void __qmljs_ushr(ExecutionContext *ctx, Value *result, const Value *left
*result = Value::fromInt32(res);
}
-inline void __qmljs_gt(ExecutionContext *ctx, Value *result, const Value *left, const Value *right)
+inline void __qmljs_gt(ExecutionContext *ctx, Value *result, const Value &left, const Value &right)
{
TRACE2(left, right);
*result = Value::fromBoolean(__qmljs_cmp_gt(ctx, left, right));
}
-inline void __qmljs_lt(ExecutionContext *ctx, Value *result, const Value *left, const Value *right)
+inline void __qmljs_lt(ExecutionContext *ctx, Value *result, const Value &left, const Value &right)
{
TRACE2(left, right);
*result = Value::fromBoolean(__qmljs_cmp_lt(ctx, left, right));
}
-inline void __qmljs_ge(ExecutionContext *ctx, Value *result, const Value *left, const Value *right)
+inline void __qmljs_ge(ExecutionContext *ctx, Value *result, const Value &left, const Value &right)
{
TRACE2(left, right);
*result = Value::fromBoolean(__qmljs_cmp_ge(ctx, left, right));
}
-inline void __qmljs_le(ExecutionContext *ctx, Value *result, const Value *left, const Value *right)
+inline void __qmljs_le(ExecutionContext *ctx, Value *result, const Value &left, const Value &right)
{
TRACE2(left, right);
*result = Value::fromBoolean(__qmljs_cmp_le(ctx, left, right));
}
-inline void __qmljs_eq(ExecutionContext *ctx, Value *result, const Value *left, const Value *right)
+inline void __qmljs_eq(ExecutionContext *ctx, Value *result, const Value &left, const Value &right)
{
TRACE2(left, right);
*result = Value::fromBoolean(__qmljs_cmp_eq(ctx, left, right));
}
-inline void __qmljs_ne(ExecutionContext *ctx, Value *result, const Value *left, const Value *right)
+inline void __qmljs_ne(ExecutionContext *ctx, Value *result, const Value &left, const Value &right)
{
TRACE2(left, right);
*result = Value::fromBoolean(!__qmljs_cmp_eq(ctx, left, right));
}
-inline void __qmljs_se(ExecutionContext *, Value *result, const Value *left, const Value *right)
+inline void __qmljs_se(ExecutionContext *, Value *result, const Value &left, const Value &right)
{
TRACE2(left, right);
- bool r = __qmljs_strict_equal(*left, *right);
+ bool r = __qmljs_strict_equal(left, right);
*result = Value::fromBoolean(r);
}
-inline void __qmljs_sne(ExecutionContext *, Value *result, const Value *left, const Value *right)
+inline void __qmljs_sne(ExecutionContext *, Value *result, const Value &left, const Value &right)
{
TRACE2(left, right);
- bool r = ! __qmljs_strict_equal(*left, *right);
+ bool r = ! __qmljs_strict_equal(left, right);
*result = Value::fromBoolean(r);
}
-inline Bool __qmljs_cmp_gt(ExecutionContext *ctx, const Value *left, const Value *right)
+inline Bool __qmljs_cmp_gt(ExecutionContext *ctx, const Value &left, const Value &right)
{
TRACE2(left, right);
- Value l = __qmljs_to_primitive(*left, ctx, NUMBER_HINT);
- Value r = __qmljs_to_primitive(*right, ctx, NUMBER_HINT);
+ Value l = __qmljs_to_primitive(left, ctx, NUMBER_HINT);
+ Value r = __qmljs_to_primitive(right, ctx, NUMBER_HINT);
if (Value::integerCompatible(l, r))
return l.integerValue() > r.integerValue();
@@ -765,12 +767,12 @@ inline Bool __qmljs_cmp_gt(ExecutionContext *ctx, const Value *left, const Value
}
}
-inline Bool __qmljs_cmp_lt(ExecutionContext *ctx, const Value *left, const Value *right)
+inline Bool __qmljs_cmp_lt(ExecutionContext *ctx, const Value &left, const Value &right)
{
TRACE2(left, right);
- Value l = __qmljs_to_primitive(*left, ctx, NUMBER_HINT);
- Value r = __qmljs_to_primitive(*right, ctx, NUMBER_HINT);
+ Value l = __qmljs_to_primitive(left, ctx, NUMBER_HINT);
+ Value r = __qmljs_to_primitive(right, ctx, NUMBER_HINT);
if (Value::integerCompatible(l, r))
return l.integerValue() < r.integerValue();
@@ -785,12 +787,12 @@ inline Bool __qmljs_cmp_lt(ExecutionContext *ctx, const Value *left, const Value
}
}
-inline Bool __qmljs_cmp_ge(ExecutionContext *ctx, const Value *left, const Value *right)
+inline Bool __qmljs_cmp_ge(ExecutionContext *ctx, const Value &left, const Value &right)
{
TRACE2(left, right);
- Value l = __qmljs_to_primitive(*left, ctx, NUMBER_HINT);
- Value r = __qmljs_to_primitive(*right, ctx, NUMBER_HINT);
+ Value l = __qmljs_to_primitive(left, ctx, NUMBER_HINT);
+ Value r = __qmljs_to_primitive(right, ctx, NUMBER_HINT);
if (Value::integerCompatible(l, r))
return l.integerValue() >= r.integerValue();
@@ -805,12 +807,12 @@ inline Bool __qmljs_cmp_ge(ExecutionContext *ctx, const Value *left, const Value
}
}
-inline Bool __qmljs_cmp_le(ExecutionContext *ctx, const Value *left, const Value *right)
+inline Bool __qmljs_cmp_le(ExecutionContext *ctx, const Value &left, const Value &right)
{
TRACE2(left, right);
- Value l = __qmljs_to_primitive(*left, ctx, NUMBER_HINT);
- Value r = __qmljs_to_primitive(*right, ctx, NUMBER_HINT);
+ Value l = __qmljs_to_primitive(left, ctx, NUMBER_HINT);
+ Value r = __qmljs_to_primitive(right, ctx, NUMBER_HINT);
if (Value::integerCompatible(l, r))
return l.integerValue() <= r.integerValue();
@@ -825,43 +827,43 @@ inline Bool __qmljs_cmp_le(ExecutionContext *ctx, const Value *left, const Value
}
}
-inline Bool __qmljs_cmp_eq(ExecutionContext *ctx, const Value *left, const Value *right)
+inline Bool __qmljs_cmp_eq(ExecutionContext *ctx, const Value &left, const Value &right)
{
TRACE2(left, right);
// need to test for doubles first as NaN != NaN
- if (Value::bothDouble(*left, *right))
- return left->doubleValue() == right->doubleValue();
- if (left->val == right->val)
+ if (Value::bothDouble(left, right))
+ return left.doubleValue() == right.doubleValue();
+ if (left.val == right.val)
return true;
- if (left->isString() && right->isString())
- return __qmljs_string_equal(left->stringValue(), right->stringValue());
+ if (left.isString() && right.isString())
+ return __qmljs_string_equal(left.stringValue(), right.stringValue());
- return __qmljs_equal(*left, *right, ctx);
+ return __qmljs_equal(left, right, ctx);
}
-inline Bool __qmljs_cmp_ne(ExecutionContext *ctx, const Value *left, const Value *right)
+inline Bool __qmljs_cmp_ne(ExecutionContext *ctx, const Value &left, const Value &right)
{
TRACE2(left, right);
return !__qmljs_cmp_eq(ctx, left, right);
}
-inline Bool __qmljs_cmp_se(ExecutionContext *, const Value *left, const Value *right)
+inline Bool __qmljs_cmp_se(ExecutionContext *, const Value &left, const Value &right)
{
TRACE2(left, right);
- return __qmljs_strict_equal(*left, *right);
+ return __qmljs_strict_equal(left, right);
}
-inline Bool __qmljs_cmp_sne(ExecutionContext *, const Value *left, const Value *right)
+inline Bool __qmljs_cmp_sne(ExecutionContext *, const Value &left, const Value &right)
{
TRACE2(left, right);
- return ! __qmljs_strict_equal(*left, *right);
+ return ! __qmljs_strict_equal(left, right);
}
-inline Bool __qmljs_cmp_instanceof(ExecutionContext *ctx, const Value *left, const Value *right)
+inline Bool __qmljs_cmp_instanceof(ExecutionContext *ctx, const Value &left, const Value &right)
{
TRACE2(left, right);
@@ -870,7 +872,7 @@ inline Bool __qmljs_cmp_instanceof(ExecutionContext *ctx, const Value *left, con
return v.booleanValue();
}
-inline uint __qmljs_cmp_in(ExecutionContext *ctx, const Value *left, const Value *right)
+inline uint __qmljs_cmp_in(ExecutionContext *ctx, const Value &left, const Value &right)
{
TRACE2(left, right);
@@ -879,7 +881,7 @@ inline uint __qmljs_cmp_in(ExecutionContext *ctx, const Value *left, const Value
return v.booleanValue();
}
-inline Bool __qmljs_strict_equal(Value x, Value y)
+inline Bool __qmljs_strict_equal(const Value &x, const Value &y)
{
TRACE2(x, y);
diff --git a/src/v4/qmljs_value.h b/src/v4/qmljs_value.h
index d33d5ed9..7c83af59 100644
--- a/src/v4/qmljs_value.h
+++ b/src/v4/qmljs_value.h
@@ -59,7 +59,7 @@ struct ExecutionEngine;
struct Value;
extern "C" {
-double __qmljs_to_number(Value value, ExecutionContext *ctx);
+double __qmljs_to_number(const Value &value, ExecutionContext *ctx);
}
typedef uint Bool;
diff --git a/src/v4/qv4functionobject.cpp b/src/v4/qv4functionobject.cpp
index 0e8c1e4d..2476d5c3 100644
--- a/src/v4/qv4functionobject.cpp
+++ b/src/v4/qv4functionobject.cpp
@@ -103,11 +103,11 @@ FunctionObject::FunctionObject(ExecutionContext *scope)
strictMode = false;
}
-bool FunctionObject::hasInstance(Managed *that, ExecutionContext *ctx, const Value *value)
+bool FunctionObject::hasInstance(Managed *that, ExecutionContext *ctx, const Value &value)
{
FunctionObject *f = static_cast<FunctionObject *>(that);
- Object *v = value->asObject();
+ Object *v = value.asObject();
if (!v)
return false;
@@ -514,7 +514,7 @@ Value BoundFunction::construct(ExecutionContext *context, Value *args, int argc)
return target->construct(context, newArgs, boundArgs.size() + argc);
}
-bool BoundFunction::hasInstance(Managed *that, ExecutionContext *ctx, const Value *value)
+bool BoundFunction::hasInstance(Managed *that, ExecutionContext *ctx, const Value &value)
{
BoundFunction *f = static_cast<BoundFunction *>(that);
return FunctionObject::hasInstance(f->target, ctx, value);
diff --git a/src/v4/qv4functionobject.h b/src/v4/qv4functionobject.h
index 7cf73e8d..ae8bd531 100644
--- a/src/v4/qv4functionobject.h
+++ b/src/v4/qv4functionobject.h
@@ -164,7 +164,7 @@ struct Q_V4_EXPORT FunctionObject: Object {
protected:
static const ManagedVTable static_vtbl;
static void markObjects(Managed *that);
- static bool hasInstance(Managed *that, ExecutionContext *ctx, const Value *value);
+ static bool hasInstance(Managed *that, ExecutionContext *ctx, const Value &value);
};
struct FunctionCtor: FunctionObject
@@ -227,7 +227,7 @@ struct BoundFunction: FunctionObject {
static const ManagedVTable static_vtbl;
static void markObjects(Managed *that);
- static bool hasInstance(Managed *that, ExecutionContext *ctx, const Value *value);
+ static bool hasInstance(Managed *that, ExecutionContext *ctx, const Value &value);
};
} // namespace VM
diff --git a/src/v4/qv4isel_masm.cpp b/src/v4/qv4isel_masm.cpp
index 6cc798a9..467cc3e3 100644
--- a/src/v4/qv4isel_masm.cpp
+++ b/src/v4/qv4isel_masm.cpp
@@ -500,12 +500,12 @@ void InstructionSelection::callBuiltinTypeofValue(IR::Temp *value, IR::Temp *res
void InstructionSelection::callBuiltinDeleteMember(IR::Temp *base, const QString &name, IR::Temp *result)
{
- generateFunctionCall(result, __qmljs_delete_member, Assembler::ContextRegister, base, identifier(name));
+ generateFunctionCall(result, __qmljs_delete_member, Assembler::ContextRegister, Assembler::PointerToValue(base), identifier(name));
}
void InstructionSelection::callBuiltinDeleteSubscript(IR::Temp *base, IR::Temp *index, IR::Temp *result)
{
- generateFunctionCall(result, __qmljs_delete_subscript, Assembler::ContextRegister, base, index);
+ generateFunctionCall(result, __qmljs_delete_subscript, Assembler::ContextRegister, Assembler::PointerToValue(base), index);
}
void InstructionSelection::callBuiltinDeleteName(const QString &name, IR::Temp *result)
@@ -739,7 +739,7 @@ void InstructionSelection::copyValue(IR::Temp *sourceTemp, IR::Temp *targetTemp)
void InstructionSelection::unop(IR::AluOp oper, IR::Temp *sourceTemp, IR::Temp *targetTemp)
{
- Value (*op)(const Value value, ExecutionContext *ctx) = 0;
+ Value (*op)(const Value& value, ExecutionContext *ctx) = 0;
const char *opName = 0;
switch (oper) {
case IR::OpIfTrue: assert(!"unreachable"); break;
@@ -753,7 +753,7 @@ void InstructionSelection::unop(IR::AluOp oper, IR::Temp *sourceTemp, IR::Temp *
} // switch
if (op)
- _as->generateFunctionCallImp(targetTemp, opName, op, sourceTemp,
+ _as->generateFunctionCallImp(targetTemp, opName, op, Assembler::PointerToValue(sourceTemp),
Assembler::ContextRegister);
}
@@ -925,7 +925,7 @@ void InstructionSelection::visitCJump(IR::CJump *s)
booleanConversion.link(_as);
{
- generateFunctionCall(Assembler::ReturnValueRegister, __qmljs_to_boolean, t, Assembler::ContextRegister);
+ generateFunctionCall(Assembler::ReturnValueRegister, __qmljs_to_boolean, Assembler::PointerToValue(t), Assembler::ContextRegister);
}
testBoolean.link(_as);
diff --git a/src/v4/qv4managed.cpp b/src/v4/qv4managed.cpp
index c5935fcd..fe71be40 100644
--- a/src/v4/qv4managed.cpp
+++ b/src/v4/qv4managed.cpp
@@ -147,7 +147,7 @@ QString Managed::className() const
return QString::fromLatin1(s);
}
-bool Managed::hasInstance(Managed *, ExecutionContext *ctx, const Value *)
+bool Managed::hasInstance(Managed *, ExecutionContext *ctx, const Value &)
{
ctx->throwTypeError();
}
diff --git a/src/v4/qv4managed.h b/src/v4/qv4managed.h
index 81c6cb50..979b308f 100644
--- a/src/v4/qv4managed.h
+++ b/src/v4/qv4managed.h
@@ -81,7 +81,7 @@ struct ManagedVTable
EndOfVTable
};
void (*markObjects)(Managed *);
- bool (*hasInstance)(Managed *, ExecutionContext *ctx, const Value *value);
+ bool (*hasInstance)(Managed *, ExecutionContext *ctx, const Value &value);
_EndOfVTable endofVTable;
};
@@ -157,11 +157,11 @@ public:
*reinterpret_cast<Managed **>(this) = m;
}
- inline bool hasInstance(ExecutionContext *ctx, const Value *v) {
+ inline bool hasInstance(ExecutionContext *ctx, const Value &v) {
return vtbl->hasInstance(this, ctx, v);
}
- static bool hasInstance(Managed *that, ExecutionContext *ctx, const Value *value);
+ static bool hasInstance(Managed *that, ExecutionContext *ctx, const Value &value);
protected:
diff --git a/src/v4/qv4object.cpp b/src/v4/qv4object.cpp
index b440cfbc..46debdb2 100644
--- a/src/v4/qv4object.cpp
+++ b/src/v4/qv4object.cpp
@@ -114,7 +114,7 @@ Value Object::getValueChecked(ExecutionContext *ctx, const PropertyDescriptor *p
return getValue(ctx, p);
}
-void Object::putValue(ExecutionContext *ctx, PropertyDescriptor *pd, Value value)
+void Object::putValue(ExecutionContext *ctx, PropertyDescriptor *pd, const Value &value)
{
if (pd->isAccessor()) {
if (pd->set) {
@@ -138,27 +138,27 @@ void Object::putValue(ExecutionContext *ctx, PropertyDescriptor *pd, Value value
}
-void Object::inplaceBinOp(ExecutionContext *ctx, BinOp op, String *name, const Value *rhs)
+void Object::inplaceBinOp(ExecutionContext *ctx, BinOp op, String *name, const Value &rhs)
{
bool hasProperty = false;
Value v = __get__(ctx, name, &hasProperty);
Value result;
- op(ctx, &result, &v, rhs);
+ op(ctx, &result, v, rhs);
__put__(ctx, name, result);
}
-void Object::inplaceBinOp(ExecutionContext *ctx, BinOp op, const Value *index, const Value *rhs)
+void Object::inplaceBinOp(ExecutionContext *ctx, BinOp op, const Value &index, const Value &rhs)
{
- uint idx = index->asArrayIndex();
+ uint idx = index.asArrayIndex();
if (idx < UINT_MAX) {
bool hasProperty = false;
Value v = __get__(ctx, idx, &hasProperty);
Value result;
- op(ctx, &result, &v, rhs);
+ op(ctx, &result, v, rhs);
__put__(ctx, idx, result);
return;
}
- String *name = index->toString(ctx);
+ String *name = index.toString(ctx);
assert(name);
inplaceBinOp(ctx, op, name, rhs);
}
@@ -372,7 +372,7 @@ Value Object::__get__(ExecutionContext *ctx, uint index, bool *hasProperty)
// Section 8.12.5
-void Object::__put__(ExecutionContext *ctx, String *name, Value value)
+void Object::__put__(ExecutionContext *ctx, String *name, const Value &value)
{
uint idx = name->asArrayIndex();
if (idx != UINT_MAX)
@@ -453,7 +453,7 @@ void Object::__put__(ExecutionContext *ctx, String *name, Value value)
__qmljs_throw_type_error(ctx);
}
-void Object::__put__(ExecutionContext *ctx, uint index, Value value)
+void Object::__put__(ExecutionContext *ctx, uint index, const Value &value)
{
PropertyDescriptor *pd = __getOwnProperty__(ctx, index);
// clause 1
diff --git a/src/v4/qv4object.h b/src/v4/qv4object.h
index 593e4e76..1b29dafd 100644
--- a/src/v4/qv4object.h
+++ b/src/v4/qv4object.h
@@ -127,8 +127,8 @@ struct Q_V4_EXPORT Object: Managed {
Value __get__(ExecutionContext *ctx, String *name, bool *hasProperty = 0);
Value __get__(ExecutionContext *ctx, uint index, bool *hasProperty = 0);
- void __put__(ExecutionContext *ctx, String *name, Value value);
- void __put__(ExecutionContext *ctx, uint index, Value value);
+ void __put__(ExecutionContext *ctx, String *name, const Value &value);
+ void __put__(ExecutionContext *ctx, uint index, const Value &value);
bool __hasProperty__(const ExecutionContext *ctx, String *name) const;
bool __hasProperty__(const ExecutionContext *ctx, uint index) const;
@@ -148,10 +148,10 @@ struct Q_V4_EXPORT Object: Managed {
Value getValueChecked(ExecutionContext *ctx, const PropertyDescriptor *p) const;
Value getValueChecked(ExecutionContext *ctx, const PropertyDescriptor *p, bool *exists) const;
- void putValue(ExecutionContext *ctx, PropertyDescriptor *pd, Value value);
+ void putValue(ExecutionContext *ctx, PropertyDescriptor *pd, const Value &value);
- void inplaceBinOp(ExecutionContext *ctx, BinOp op, String *name, const Value *rhs);
- void inplaceBinOp(ExecutionContext *ctx, BinOp op, const Value *index, const Value *rhs);
+ void inplaceBinOp(ExecutionContext *ctx, BinOp op, String *name, const Value &rhs);
+ void inplaceBinOp(ExecutionContext *ctx, BinOp op, const Value &index, const Value &rhs);
/* The spec default: Writable: true, Enumerable: false, Configurable: true */
void defineDefaultProperty(String *name, Value value);