aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/3rdparty/masm/wtf/OSAllocatorPosix.cpp2
-rw-r--r--src/qml/qml/v4vm/moth/qv4instr_moth_p.h10
-rw-r--r--src/qml/qml/v4vm/moth/qv4isel_moth.cpp130
-rw-r--r--src/qml/qml/v4vm/qv4_llvm_p.h2
-rw-r--r--src/qml/qml/v4vm/qv4isel_llvm.cpp318
-rw-r--r--src/qml/qml/v4vm/qv4isel_llvm_p.h146
-rw-r--r--src/qml/qml/v4vm/qv4isel_masm.cpp10
-rw-r--r--src/qml/qml/v4vm/qv4isel_masm_p.h2
-rw-r--r--src/qml/qml/v4vm/qv4runtime_p.h559
-rw-r--r--src/qml/qml/v4vm/qv4value_p.h12
10 files changed, 599 insertions, 592 deletions
diff --git a/src/3rdparty/masm/wtf/OSAllocatorPosix.cpp b/src/3rdparty/masm/wtf/OSAllocatorPosix.cpp
index 7b2a55c6b6..d8c8e0378f 100644
--- a/src/3rdparty/masm/wtf/OSAllocatorPosix.cpp
+++ b/src/3rdparty/masm/wtf/OSAllocatorPosix.cpp
@@ -28,6 +28,8 @@
#if OS(UNIX)
+#include <cstdlib>
+
#include "PageAllocation.h"
#include <errno.h>
#include <sys/mman.h>
diff --git a/src/qml/qml/v4vm/moth/qv4instr_moth_p.h b/src/qml/qml/v4vm/moth/qv4instr_moth_p.h
index 599fa00f14..1c2dd6f71e 100644
--- a/src/qml/qml/v4vm/moth/qv4instr_moth_p.h
+++ b/src/qml/qml/v4vm/moth/qv4instr_moth_p.h
@@ -409,13 +409,13 @@ union Instr
};
struct instr_unop {
MOTH_INSTR_HEADER
- QV4::UnaryOpName alu;
+ UnaryOpName alu;
Param source;
Param result;
};
struct instr_binop {
MOTH_INSTR_HEADER
- QV4::BinOp alu;
+ BinOp alu;
Param lhs;
Param rhs;
Param result;
@@ -426,21 +426,21 @@ union Instr
};
struct instr_inplaceElementOp {
MOTH_INSTR_HEADER
- QV4::InplaceBinOpElement alu;
+ InplaceBinOpElement alu;
Param base;
Param index;
Param source;
};
struct instr_inplaceMemberOp {
MOTH_INSTR_HEADER
- QV4::InplaceBinOpMember alu;
+ InplaceBinOpMember alu;
QV4::String *member;
Param base;
Param source;
};
struct instr_inplaceNameOp {
MOTH_INSTR_HEADER
- QV4::InplaceBinOpName alu;
+ InplaceBinOpName alu;
QV4::String *name;
Param source;
};
diff --git a/src/qml/qml/v4vm/moth/qv4isel_moth.cpp b/src/qml/qml/v4vm/moth/qv4isel_moth.cpp
index 14010de59d..2425008e32 100644
--- a/src/qml/qml/v4vm/moth/qv4isel_moth.cpp
+++ b/src/qml/qml/v4vm/moth/qv4isel_moth.cpp
@@ -10,7 +10,7 @@ using namespace QQmlJS::Moth;
namespace {
-inline QV4::BinOp aluOpFunction(V4IR::AluOp op)
+inline BinOp aluOpFunction(V4IR::AluOp op)
{
switch (op) {
case V4IR::OpInvalid:
@@ -26,47 +26,47 @@ inline QV4::BinOp aluOpFunction(V4IR::AluOp op)
case V4IR::OpCompl:
return 0;
case V4IR::OpBitAnd:
- return QV4::__qmljs_bit_and;
+ return __qmljs_bit_and;
case V4IR::OpBitOr:
- return QV4::__qmljs_bit_or;
+ return __qmljs_bit_or;
case V4IR::OpBitXor:
- return QV4::__qmljs_bit_xor;
+ return __qmljs_bit_xor;
case V4IR::OpAdd:
- return QV4::__qmljs_add;
+ return __qmljs_add;
case V4IR::OpSub:
- return QV4::__qmljs_sub;
+ return __qmljs_sub;
case V4IR::OpMul:
- return QV4::__qmljs_mul;
+ return __qmljs_mul;
case V4IR::OpDiv:
- return QV4::__qmljs_div;
+ return __qmljs_div;
case V4IR::OpMod:
- return QV4::__qmljs_mod;
+ return __qmljs_mod;
case V4IR::OpLShift:
- return QV4::__qmljs_shl;
+ return __qmljs_shl;
case V4IR::OpRShift:
- return QV4::__qmljs_shr;
+ return __qmljs_shr;
case V4IR::OpURShift:
- return QV4::__qmljs_ushr;
+ return __qmljs_ushr;
case V4IR::OpGt:
- return QV4::__qmljs_gt;
+ return __qmljs_gt;
case V4IR::OpLt:
- return QV4::__qmljs_lt;
+ return __qmljs_lt;
case V4IR::OpGe:
- return QV4::__qmljs_ge;
+ return __qmljs_ge;
case V4IR::OpLe:
- return QV4::__qmljs_le;
+ return __qmljs_le;
case V4IR::OpEqual:
- return QV4::__qmljs_eq;
+ return __qmljs_eq;
case V4IR::OpNotEqual:
- return QV4::__qmljs_ne;
+ return __qmljs_ne;
case V4IR::OpStrictEqual:
- return QV4::__qmljs_se;
+ return __qmljs_se;
case V4IR::OpStrictNotEqual:
- return QV4::__qmljs_sne;
+ return __qmljs_sne;
case V4IR::OpInstanceof:
- return QV4::__qmljs_instanceof;
+ return __qmljs_instanceof;
case V4IR::OpIn:
- return QV4::__qmljs_in;
+ return __qmljs_in;
case V4IR::OpAnd:
return 0;
case V4IR::OpOr:
@@ -317,15 +317,15 @@ void InstructionSelection::copyValue(V4IR::Temp *sourceTemp, V4IR::Temp *targetT
void InstructionSelection::unop(V4IR::AluOp oper, V4IR::Temp *sourceTemp, V4IR::Temp *targetTemp)
{
- QV4::UnaryOpName op = 0;
+ UnaryOpName op = 0;
switch (oper) {
case V4IR::OpIfTrue: assert(!"unreachable"); break;
- case V4IR::OpNot: op = QV4::__qmljs_not; break;
- case V4IR::OpUMinus: op = QV4::__qmljs_uminus; break;
- case V4IR::OpUPlus: op = QV4::__qmljs_uplus; break;
- case V4IR::OpCompl: op = QV4::__qmljs_compl; break;
- case V4IR::OpIncrement: op = QV4::__qmljs_increment; break;
- case V4IR::OpDecrement: op = QV4::__qmljs_decrement; break;
+ case V4IR::OpNot: op = __qmljs_not; break;
+ case V4IR::OpUMinus: op = __qmljs_uminus; break;
+ case V4IR::OpUPlus: op = __qmljs_uplus; break;
+ case V4IR::OpCompl: op = __qmljs_compl; break;
+ case V4IR::OpIncrement: op = __qmljs_increment; break;
+ case V4IR::OpDecrement: op = __qmljs_decrement; break;
default: assert(!"unreachable"); break;
} // switch
@@ -352,19 +352,19 @@ void InstructionSelection::binop(V4IR::AluOp oper, V4IR::Temp *leftSource, V4IR:
void InstructionSelection::inplaceNameOp(V4IR::AluOp oper, V4IR::Temp *rightSource, const QString &targetName)
{
- QV4::InplaceBinOpName op = 0;
+ InplaceBinOpName op = 0;
switch (oper) {
- case V4IR::OpBitAnd: op = QV4::__qmljs_inplace_bit_and_name; break;
- case V4IR::OpBitOr: op = QV4::__qmljs_inplace_bit_or_name; break;
- case V4IR::OpBitXor: op = QV4::__qmljs_inplace_bit_xor_name; break;
- case V4IR::OpAdd: op = QV4::__qmljs_inplace_add_name; break;
- case V4IR::OpSub: op = QV4::__qmljs_inplace_sub_name; break;
- case V4IR::OpMul: op = QV4::__qmljs_inplace_mul_name; break;
- case V4IR::OpDiv: op = QV4::__qmljs_inplace_div_name; break;
- case V4IR::OpMod: op = QV4::__qmljs_inplace_mod_name; break;
- case V4IR::OpLShift: op = QV4::__qmljs_inplace_shl_name; break;
- case V4IR::OpRShift: op = QV4::__qmljs_inplace_shr_name; break;
- case V4IR::OpURShift: op = QV4::__qmljs_inplace_ushr_name; break;
+ case V4IR::OpBitAnd: op = __qmljs_inplace_bit_and_name; break;
+ case V4IR::OpBitOr: op = __qmljs_inplace_bit_or_name; break;
+ case V4IR::OpBitXor: op = __qmljs_inplace_bit_xor_name; break;
+ case V4IR::OpAdd: op = __qmljs_inplace_add_name; break;
+ case V4IR::OpSub: op = __qmljs_inplace_sub_name; break;
+ case V4IR::OpMul: op = __qmljs_inplace_mul_name; break;
+ case V4IR::OpDiv: op = __qmljs_inplace_div_name; break;
+ case V4IR::OpMod: op = __qmljs_inplace_mod_name; break;
+ case V4IR::OpLShift: op = __qmljs_inplace_shl_name; break;
+ case V4IR::OpRShift: op = __qmljs_inplace_shr_name; break;
+ case V4IR::OpURShift: op = __qmljs_inplace_ushr_name; break;
default: break;
}
@@ -379,19 +379,19 @@ void InstructionSelection::inplaceNameOp(V4IR::AluOp oper, V4IR::Temp *rightSour
void InstructionSelection::inplaceElementOp(V4IR::AluOp oper, V4IR::Temp *source, V4IR::Temp *targetBaseTemp, V4IR::Temp *targetIndexTemp)
{
- QV4::InplaceBinOpElement op = 0;
+ InplaceBinOpElement op = 0;
switch (oper) {
- case V4IR::OpBitAnd: op = QV4::__qmljs_inplace_bit_and_element; break;
- case V4IR::OpBitOr: op = QV4::__qmljs_inplace_bit_or_element; break;
- case V4IR::OpBitXor: op = QV4::__qmljs_inplace_bit_xor_element; break;
- case V4IR::OpAdd: op = QV4::__qmljs_inplace_add_element; break;
- case V4IR::OpSub: op = QV4::__qmljs_inplace_sub_element; break;
- case V4IR::OpMul: op = QV4::__qmljs_inplace_mul_element; break;
- case V4IR::OpDiv: op = QV4::__qmljs_inplace_div_element; break;
- case V4IR::OpMod: op = QV4::__qmljs_inplace_mod_element; break;
- case V4IR::OpLShift: op = QV4::__qmljs_inplace_shl_element; break;
- case V4IR::OpRShift: op = QV4::__qmljs_inplace_shr_element; break;
- case V4IR::OpURShift: op = QV4::__qmljs_inplace_ushr_element; break;
+ case V4IR::OpBitAnd: op = __qmljs_inplace_bit_and_element; break;
+ case V4IR::OpBitOr: op = __qmljs_inplace_bit_or_element; break;
+ case V4IR::OpBitXor: op = __qmljs_inplace_bit_xor_element; break;
+ case V4IR::OpAdd: op = __qmljs_inplace_add_element; break;
+ case V4IR::OpSub: op = __qmljs_inplace_sub_element; break;
+ case V4IR::OpMul: op = __qmljs_inplace_mul_element; break;
+ case V4IR::OpDiv: op = __qmljs_inplace_div_element; break;
+ case V4IR::OpMod: op = __qmljs_inplace_mod_element; break;
+ case V4IR::OpLShift: op = __qmljs_inplace_shl_element; break;
+ case V4IR::OpRShift: op = __qmljs_inplace_shr_element; break;
+ case V4IR::OpURShift: op = __qmljs_inplace_ushr_element; break;
default: break;
}
@@ -405,19 +405,19 @@ void InstructionSelection::inplaceElementOp(V4IR::AluOp oper, V4IR::Temp *source
void InstructionSelection::inplaceMemberOp(V4IR::AluOp oper, V4IR::Temp *source, V4IR::Temp *targetBase, const QString &targetName)
{
- QV4::InplaceBinOpMember op = 0;
+ InplaceBinOpMember op = 0;
switch (oper) {
- case V4IR::OpBitAnd: op = QV4::__qmljs_inplace_bit_and_member; break;
- case V4IR::OpBitOr: op = QV4::__qmljs_inplace_bit_or_member; break;
- case V4IR::OpBitXor: op = QV4::__qmljs_inplace_bit_xor_member; break;
- case V4IR::OpAdd: op = QV4::__qmljs_inplace_add_member; break;
- case V4IR::OpSub: op = QV4::__qmljs_inplace_sub_member; break;
- case V4IR::OpMul: op = QV4::__qmljs_inplace_mul_member; break;
- case V4IR::OpDiv: op = QV4::__qmljs_inplace_div_member; break;
- case V4IR::OpMod: op = QV4::__qmljs_inplace_mod_member; break;
- case V4IR::OpLShift: op = QV4::__qmljs_inplace_shl_member; break;
- case V4IR::OpRShift: op = QV4::__qmljs_inplace_shr_member; break;
- case V4IR::OpURShift: op = QV4::__qmljs_inplace_ushr_member; break;
+ case V4IR::OpBitAnd: op = __qmljs_inplace_bit_and_member; break;
+ case V4IR::OpBitOr: op = __qmljs_inplace_bit_or_member; break;
+ case V4IR::OpBitXor: op = __qmljs_inplace_bit_xor_member; break;
+ case V4IR::OpAdd: op = __qmljs_inplace_add_member; break;
+ case V4IR::OpSub: op = __qmljs_inplace_sub_member; break;
+ case V4IR::OpMul: op = __qmljs_inplace_mul_member; break;
+ case V4IR::OpDiv: op = __qmljs_inplace_div_member; break;
+ case V4IR::OpMod: op = __qmljs_inplace_mod_member; break;
+ case V4IR::OpLShift: op = __qmljs_inplace_shl_member; break;
+ case V4IR::OpRShift: op = __qmljs_inplace_shr_member; break;
+ case V4IR::OpURShift: op = __qmljs_inplace_ushr_member; break;
default: break;
}
diff --git a/src/qml/qml/v4vm/qv4_llvm_p.h b/src/qml/qml/v4vm/qv4_llvm_p.h
index 8655461d3a..773cdefa45 100644
--- a/src/qml/qml/v4vm/qv4_llvm_p.h
+++ b/src/qml/qml/v4vm/qv4_llvm_p.h
@@ -58,7 +58,7 @@ enum LLVMOutputType {
LLVMOutputObject = 3 // .o
};
-Q_QML_EXPORT int compileWithLLVM(IR::Module *module, const QString &fileName, LLVMOutputType outputType, int (*)(void *));
+Q_QML_EXPORT int compileWithLLVM(V4IR::Module *module, const QString &fileName, LLVMOutputType outputType, int (*)(void *));
} // QQmlJS
diff --git a/src/qml/qml/v4vm/qv4isel_llvm.cpp b/src/qml/qml/v4vm/qv4isel_llvm.cpp
index 07691582f7..7e4b80956f 100644
--- a/src/qml/qml/v4vm/qv4isel_llvm.cpp
+++ b/src/qml/qml/v4vm/qv4isel_llvm.cpp
@@ -84,7 +84,7 @@
namespace QQmlJS {
-Q_QML_EXPORT int compileWithLLVM(IR::Module *module, const QString &fileName, LLVMOutputType outputType, int (*exec)(void *))
+Q_QML_EXPORT int compileWithLLVM(V4IR::Module *module, const QString &fileName, LLVMOutputType outputType, int (*exec)(void *))
{
Q_ASSERT(module);
Q_ASSERT(exec || outputType != LLVMOutputJit);
@@ -255,7 +255,7 @@ InstructionSelection::InstructionSelection(llvm::LLVMContext &context)
{
}
-void InstructionSelection::buildLLVMModule(IR::Module *module, llvm::Module *llvmModule, llvm::FunctionPassManager *fpm)
+void InstructionSelection::buildLLVMModule(V4IR::Module *module, llvm::Module *llvmModule, llvm::FunctionPassManager *fpm)
{
qSwap(_llvmModule, llvmModule);
qSwap(_fpm, fpm);
@@ -295,139 +295,139 @@ void InstructionSelection::buildLLVMModule(IR::Module *module, llvm::Module *llv
}
- foreach (IR::Function *function, module->functions)
+ foreach (V4IR::Function *function, module->functions)
(void) compileLLVMFunction(function);
qSwap(_fpm, fpm);
qSwap(_llvmModule, llvmModule);
}
-void InstructionSelection::callBuiltinInvalid(IR::Name *func, IR::ExprList *args, IR::Temp *result)
+void InstructionSelection::callBuiltinInvalid(V4IR::Name *func, V4IR::ExprList *args, V4IR::Temp *result)
{
// TODO
assert(!"TODO!");
Q_UNREACHABLE();
}
-void InstructionSelection::callBuiltinTypeofMember(IR::Temp *base, const QString &name, IR::Temp *result)
+void InstructionSelection::callBuiltinTypeofMember(V4IR::Temp *base, const QString &name, V4IR::Temp *result)
{
// TODO
assert(!"TODO!");
Q_UNREACHABLE();
}
-void InstructionSelection::callBuiltinTypeofSubscript(IR::Temp *base, IR::Temp *index, IR::Temp *result)
+void InstructionSelection::callBuiltinTypeofSubscript(V4IR::Temp *base, V4IR::Temp *index, V4IR::Temp *result)
{
// TODO
assert(!"TODO!");
Q_UNREACHABLE();
}
-void InstructionSelection::callBuiltinTypeofName(const QString &name, IR::Temp *result)
+void InstructionSelection::callBuiltinTypeofName(const QString &name, V4IR::Temp *result)
{
// TODO
assert(!"TODO!");
Q_UNREACHABLE();
}
-void InstructionSelection::callBuiltinTypeofValue(IR::Temp *value, IR::Temp *result)
+void InstructionSelection::callBuiltinTypeofValue(V4IR::Temp *value, V4IR::Temp *result)
{
// TODO
assert(!"TODO!");
Q_UNREACHABLE();
}
-void InstructionSelection::callBuiltinDeleteMember(IR::Temp *base, const QString &name, IR::Temp *result)
+void InstructionSelection::callBuiltinDeleteMember(V4IR::Temp *base, const QString &name, V4IR::Temp *result)
{
// TODO
assert(!"TODO!");
Q_UNREACHABLE();
}
-void InstructionSelection::callBuiltinDeleteSubscript(IR::Temp *base, IR::Temp *index, IR::Temp *result)
+void InstructionSelection::callBuiltinDeleteSubscript(V4IR::Temp *base, V4IR::Temp *index, V4IR::Temp *result)
{
// TODO
assert(!"TODO!");
Q_UNREACHABLE();
}
-void InstructionSelection::callBuiltinDeleteName(const QString &name, IR::Temp *result)
+void InstructionSelection::callBuiltinDeleteName(const QString &name, V4IR::Temp *result)
{
// TODO
assert(!"TODO!");
Q_UNREACHABLE();
}
-void InstructionSelection::callBuiltinDeleteValue(IR::Temp *result)
+void InstructionSelection::callBuiltinDeleteValue(V4IR::Temp *result)
{
// TODO
assert(!"TODO!");
Q_UNREACHABLE();
}
-void InstructionSelection::callBuiltinPostDecrementMember(IR::Temp *base, const QString &name, IR::Temp *result)
+void InstructionSelection::callBuiltinPostDecrementMember(V4IR::Temp *base, const QString &name, V4IR::Temp *result)
{
// TODO
assert(!"TODO!");
Q_UNREACHABLE();
}
-void InstructionSelection::callBuiltinPostDecrementSubscript(IR::Temp *base, IR::Temp *index, IR::Temp *result)
+void InstructionSelection::callBuiltinPostDecrementSubscript(V4IR::Temp *base, V4IR::Temp *index, V4IR::Temp *result)
{
// TODO
assert(!"TODO!");
Q_UNREACHABLE();
}
-void InstructionSelection::callBuiltinPostDecrementName(const QString &name, IR::Temp *result)
+void InstructionSelection::callBuiltinPostDecrementName(const QString &name, V4IR::Temp *result)
{
// TODO
assert(!"TODO!");
Q_UNREACHABLE();
}
-void InstructionSelection::callBuiltinPostDecrementValue(IR::Temp *value, IR::Temp *result)
+void InstructionSelection::callBuiltinPostDecrementValue(V4IR::Temp *value, V4IR::Temp *result)
{
// TODO
assert(!"TODO!");
Q_UNREACHABLE();
}
-void InstructionSelection::callBuiltinPostIncrementMember(IR::Temp *base, const QString &name, IR::Temp *result)
+void InstructionSelection::callBuiltinPostIncrementMember(V4IR::Temp *base, const QString &name, V4IR::Temp *result)
{
// TODO
assert(!"TODO!");
Q_UNREACHABLE();
}
-void InstructionSelection::callBuiltinPostIncrementSubscript(IR::Temp *base, IR::Temp *index, IR::Temp *result)
+void InstructionSelection::callBuiltinPostIncrementSubscript(V4IR::Temp *base, V4IR::Temp *index, V4IR::Temp *result)
{
// TODO
assert(!"TODO!");
Q_UNREACHABLE();
}
-void InstructionSelection::callBuiltinPostIncrementName(const QString &name, IR::Temp *result)
+void InstructionSelection::callBuiltinPostIncrementName(const QString &name, V4IR::Temp *result)
{
// TODO
assert(!"TODO!");
Q_UNREACHABLE();
}
-void InstructionSelection::callBuiltinPostIncrementValue(IR::Temp *value, IR::Temp *result)
+void InstructionSelection::callBuiltinPostIncrementValue(V4IR::Temp *value, V4IR::Temp *result)
{
// TODO
assert(!"TODO!");
Q_UNREACHABLE();
}
-void InstructionSelection::callBuiltinThrow(IR::Temp *arg)
+void InstructionSelection::callBuiltinThrow(V4IR::Temp *arg)
{
// TODO
assert(!"TODO!");
Q_UNREACHABLE();
}
-void InstructionSelection::callBuiltinCreateExceptionHandler(IR::Temp *result)
+void InstructionSelection::callBuiltinCreateExceptionHandler(V4IR::Temp *result)
{
// TODO
assert(!"TODO!");
@@ -441,21 +441,21 @@ void InstructionSelection::callBuiltinFinishTry()
Q_UNREACHABLE();
}
-void InstructionSelection::callBuiltinForeachIteratorObject(IR::Temp *arg, IR::Temp *result)
+void InstructionSelection::callBuiltinForeachIteratorObject(V4IR::Temp *arg, V4IR::Temp *result)
{
// TODO
assert(!"TODO!");
Q_UNREACHABLE();
}
-void InstructionSelection::callBuiltinForeachNextPropertyname(IR::Temp *arg, IR::Temp *result)
+void InstructionSelection::callBuiltinForeachNextPropertyname(V4IR::Temp *arg, V4IR::Temp *result)
{
// TODO
assert(!"TODO!");
Q_UNREACHABLE();
}
-void InstructionSelection::callBuiltinPushWithScope(IR::Temp *arg)
+void InstructionSelection::callBuiltinPushWithScope(V4IR::Temp *arg)
{
// TODO
assert(!"TODO!");
@@ -477,107 +477,107 @@ void InstructionSelection::callBuiltinDeclareVar(bool deletable, const QString &
_llvmFunction->arg_begin(), isDeletable, varName);
}
-void InstructionSelection::callBuiltinDefineGetterSetter(IR::Temp *object, const QString &name, IR::Temp *getter, IR::Temp *setter)
+void InstructionSelection::callBuiltinDefineGetterSetter(V4IR::Temp *object, const QString &name, V4IR::Temp *getter, V4IR::Temp *setter)
{
// TODO
assert(!"TODO!");
Q_UNREACHABLE();
}
-void InstructionSelection::callBuiltinDefineProperty(IR::Temp *object, const QString &name, IR::Temp *value)
+void InstructionSelection::callBuiltinDefineProperty(V4IR::Temp *object, const QString &name, V4IR::Temp *value)
{
// TODO
assert(!"TODO!");
Q_UNREACHABLE();
}
-void InstructionSelection::callBuiltinDefineArray(IR::Temp *result, IR::ExprList *args)
+void InstructionSelection::callBuiltinDefineArray(V4IR::Temp *result, V4IR::ExprList *args)
{
// TODO
assert(!"TODO!");
Q_UNREACHABLE();
}
-void InstructionSelection::callValue(IR::Temp *value, IR::ExprList *args, IR::Temp *result)
+void InstructionSelection::callValue(V4IR::Temp *value, V4IR::ExprList *args, V4IR::Temp *result)
{
// TODO
assert(!"TODO!");
Q_UNREACHABLE();
}
-void InstructionSelection::callProperty(IR::Temp *base, const QString &name, IR::ExprList *args, IR::Temp *result)
+void InstructionSelection::callProperty(V4IR::Temp *base, const QString &name, V4IR::ExprList *args, V4IR::Temp *result)
{
// TODO
assert(!"TODO!");
Q_UNREACHABLE();
}
-void InstructionSelection::callSubscript(IR::Temp *base, IR::Temp *index, IR::ExprList *args, IR::Temp *result)
+void InstructionSelection::callSubscript(V4IR::Temp *base, V4IR::Temp *index, V4IR::ExprList *args, V4IR::Temp *result)
{
// TODO
assert(!"TODO!");
Q_UNREACHABLE();
}
-void InstructionSelection::constructActivationProperty(IR::Name *func,
- IR::ExprList *args,
- IR::Temp *result)
+void InstructionSelection::constructActivationProperty(V4IR::Name *func,
+ V4IR::ExprList *args,
+ V4IR::Temp *result)
{
// TODO
assert(!"TODO!");
Q_UNREACHABLE();
}
-void InstructionSelection::constructProperty(IR::Temp *base, const QString &name, IR::ExprList *args, IR::Temp *result)
+void InstructionSelection::constructProperty(V4IR::Temp *base, const QString &name, V4IR::ExprList *args, V4IR::Temp *result)
{
// TODO
assert(!"TODO!");
Q_UNREACHABLE();
}
-void InstructionSelection::constructValue(IR::Temp *value, IR::ExprList *args, IR::Temp *result)
+void InstructionSelection::constructValue(V4IR::Temp *value, V4IR::ExprList *args, V4IR::Temp *result)
{
// TODO
assert(!"TODO!");
Q_UNREACHABLE();
}
-void InstructionSelection::loadThisObject(IR::Temp *temp)
+void InstructionSelection::loadThisObject(V4IR::Temp *temp)
{
// TODO
assert(!"TODO!");
Q_UNREACHABLE();
}
-void InstructionSelection::loadConst(IR::Const *con, IR::Temp *temp)
+void InstructionSelection::loadConst(V4IR::Const *con, V4IR::Temp *temp)
{
llvm::Value *target = getLLVMTemp(temp);
llvm::Value *source = CreateLoad(createValue(con));
CreateStore(source, target);
}
-void InstructionSelection::loadString(const QString &str, IR::Temp *targetTemp)
+void InstructionSelection::loadString(const QString &str, V4IR::Temp *targetTemp)
{
// TODO
assert(!"TODO!");
Q_UNREACHABLE();
}
-void InstructionSelection::loadRegexp(IR::RegExp *sourceRegexp, IR::Temp *targetTemp)
+void InstructionSelection::loadRegexp(V4IR::RegExp *sourceRegexp, V4IR::Temp *targetTemp)
{
// TODO
assert(!"TODO!");
Q_UNREACHABLE();
}
-void InstructionSelection::getActivationProperty(const QString &name, IR::Temp *temp)
+void InstructionSelection::getActivationProperty(const V4IR::Name *name, V4IR::Temp *temp)
{
// TODO
assert(!"TODO!");
Q_UNREACHABLE();
}
-void InstructionSelection::setActivationProperty(IR::Temp *source, const QString &targetName)
+void InstructionSelection::setActivationProperty(V4IR::Temp *source, const QString &targetName)
{
llvm::Value *name = getIdentifier(targetName);
llvm::Value *src = toValuePtr(source);
@@ -585,9 +585,9 @@ void InstructionSelection::setActivationProperty(IR::Temp *source, const QString
_llvmFunction->arg_begin(), name, src);
}
-void InstructionSelection::initClosure(IR::Closure *closure, IR::Temp *target)
+void InstructionSelection::initClosure(V4IR::Closure *closure, V4IR::Temp *target)
{
- IR::Function *f = closure->value;
+ V4IR::Function *f = closure->value;
QString name;
if (f->name)
name = *f->name;
@@ -609,7 +609,7 @@ void InstructionSelection::initClosure(IR::Closure *closure, IR::Temp *target)
CreateCall(callee, args);
}
-void InstructionSelection::getProperty(IR::Temp *sourceBase, const QString &sourceName, IR::Temp *target)
+void InstructionSelection::getProperty(V4IR::Temp *sourceBase, const QString &sourceName, V4IR::Temp *target)
{
llvm::Value *base = getLLVMTempReference(sourceBase);
llvm::Value *name = getIdentifier(sourceName);
@@ -618,7 +618,7 @@ void InstructionSelection::getProperty(IR::Temp *sourceBase, const QString &sour
_llvmFunction->arg_begin(), t, base, name);
}
-void InstructionSelection::setProperty(IR::Temp *source, IR::Temp *targetBase, const QString &targetName)
+void InstructionSelection::setProperty(V4IR::Temp *source, V4IR::Temp *targetBase, const QString &targetName)
{
llvm::Value *base = getLLVMTempReference(targetBase);
llvm::Value *name = getIdentifier(targetName);
@@ -627,7 +627,7 @@ void InstructionSelection::setProperty(IR::Temp *source, IR::Temp *targetBase, c
_llvmFunction->arg_begin(), base, name, src);
}
-void InstructionSelection::getElement(IR::Temp *sourceBase, IR::Temp *sourceIndex, IR::Temp *target)
+void InstructionSelection::getElement(V4IR::Temp *sourceBase, V4IR::Temp *sourceIndex, V4IR::Temp *target)
{
// TODO
assert(!"TODO!");
@@ -640,7 +640,7 @@ void InstructionSelection::getElement(IR::Temp *sourceBase, IR::Temp *sourceInde
_llvmFunction->arg_begin(), t, base, index);
}
-void InstructionSelection::setElement(IR::Temp *source, IR::Temp *targetBase, IR::Temp *targetIndex)
+void InstructionSelection::setElement(V4IR::Temp *source, V4IR::Temp *targetBase, V4IR::Temp *targetIndex)
{
llvm::Value *base = getLLVMTempReference(targetBase);
llvm::Value *index = getLLVMTempReference(targetIndex);
@@ -649,23 +649,23 @@ void InstructionSelection::setElement(IR::Temp *source, IR::Temp *targetBase, IR
_llvmFunction->arg_begin(), base, index, src);
}
-void InstructionSelection::copyValue(IR::Temp *sourceTemp, IR::Temp *targetTemp)
+void InstructionSelection::copyValue(V4IR::Temp *sourceTemp, V4IR::Temp *targetTemp)
{
llvm::Value *t = getLLVMTemp(targetTemp);
llvm::Value *s = getLLVMTemp(sourceTemp);
CreateStore(s, t);
}
-void InstructionSelection::unop(IR::AluOp oper, IR::Temp *sourceTemp, IR::Temp *targetTemp)
+void InstructionSelection::unop(V4IR::AluOp oper, V4IR::Temp *sourceTemp, V4IR::Temp *targetTemp)
{
const char *opName = 0;
switch (oper) {
- case IR::OpNot: opName = "__qmljs_not"; break;
- case IR::OpUMinus: opName = "__qmljs_uminus"; break;
- case IR::OpUPlus: opName = "__qmljs_uplus"; break;
- case IR::OpCompl: opName = "__qmljs_compl"; break;
- case IR::OpIncrement: opName = "__qmljs_increment"; break;
- case IR::OpDecrement: opName = "__qmljs_decrement"; break;
+ case V4IR::OpNot: opName = "__qmljs_not"; break;
+ case V4IR::OpUMinus: opName = "__qmljs_uminus"; break;
+ case V4IR::OpUPlus: opName = "__qmljs_uplus"; break;
+ case V4IR::OpCompl: opName = "__qmljs_compl"; break;
+ case V4IR::OpIncrement: opName = "__qmljs_increment"; break;
+ case V4IR::OpDecrement: opName = "__qmljs_decrement"; break;
default: assert(!"unreachable"); break;
}
@@ -677,21 +677,21 @@ void InstructionSelection::unop(IR::AluOp oper, IR::Temp *sourceTemp, IR::Temp *
}
}
-void InstructionSelection::binop(IR::AluOp oper, IR::Temp *leftSource, IR::Temp *rightSource, IR::Temp *target)
+void InstructionSelection::binop(V4IR::AluOp oper, V4IR::Temp *leftSource, V4IR::Temp *rightSource, V4IR::Temp *target)
{
const char *opName = 0;
switch (oper) {
- case IR::OpBitAnd: opName = "__qmljs_llvm_bit_and"; break;
- case IR::OpBitOr: opName = "__qmljs_llvm_bit_or"; break;
- case IR::OpBitXor: opName = "__qmljs_llvm_bit_xor"; break;
- case IR::OpAdd: opName = "__qmljs_llvm_add"; break;
- case IR::OpSub: opName = "__qmljs_llvm_sub"; break;
- case IR::OpMul: opName = "__qmljs_llvm_mul"; break;
- case IR::OpDiv: opName = "__qmljs_llvm_div"; break;
- case IR::OpMod: opName = "__qmljs_llvm_mod"; break;
- case IR::OpLShift: opName = "__qmljs_llvm_shl"; break;
- case IR::OpRShift: opName = "__qmljs_llvm_shr"; break;
- case IR::OpURShift: opName = "__qmljs_llvm_ushr"; break;
+ case V4IR::OpBitAnd: opName = "__qmljs_llvm_bit_and"; break;
+ case V4IR::OpBitOr: opName = "__qmljs_llvm_bit_or"; break;
+ case V4IR::OpBitXor: opName = "__qmljs_llvm_bit_xor"; break;
+ case V4IR::OpAdd: opName = "__qmljs_llvm_add"; break;
+ case V4IR::OpSub: opName = "__qmljs_llvm_sub"; break;
+ case V4IR::OpMul: opName = "__qmljs_llvm_mul"; break;
+ case V4IR::OpDiv: opName = "__qmljs_llvm_div"; break;
+ case V4IR::OpMod: opName = "__qmljs_llvm_mod"; break;
+ case V4IR::OpLShift: opName = "__qmljs_llvm_shl"; break;
+ case V4IR::OpRShift: opName = "__qmljs_llvm_shr"; break;
+ case V4IR::OpURShift: opName = "__qmljs_llvm_ushr"; break;
default:
Q_UNREACHABLE();
break;
@@ -707,21 +707,21 @@ void InstructionSelection::binop(IR::AluOp oper, IR::Temp *leftSource, IR::Temp
}
}
-void InstructionSelection::inplaceNameOp(IR::AluOp oper, IR::Temp *rightSource, const QString &targetName)
+void InstructionSelection::inplaceNameOp(V4IR::AluOp oper, V4IR::Temp *rightSource, const QString &targetName)
{
const char *opName = 0;
switch (oper) {
- case IR::OpBitAnd: opName = "__qmljs_llvm_inplace_bit_and_name"; break;
- case IR::OpBitOr: opName = "__qmljs_llvm_inplace_bit_or_name"; break;
- case IR::OpBitXor: opName = "__qmljs_llvm_inplace_bit_xor_name"; break;
- case IR::OpAdd: opName = "__qmljs_llvm_inplace_add_name"; break;
- case IR::OpSub: opName = "__qmljs_llvm_inplace_sub_name"; break;
- case IR::OpMul: opName = "__qmljs_llvm_inplace_mul_name"; break;
- case IR::OpDiv: opName = "__qmljs_llvm_inplace_div_name"; break;
- case IR::OpMod: opName = "__qmljs_llvm_inplace_mod_name"; break;
- case IR::OpLShift: opName = "__qmljs_llvm_inplace_shl_name"; break;
- case IR::OpRShift: opName = "__qmljs_llvm_inplace_shr_name"; break;
- case IR::OpURShift: opName = "__qmljs_llvm_inplace_ushr_name"; break;
+ case V4IR::OpBitAnd: opName = "__qmljs_llvm_inplace_bit_and_name"; break;
+ case V4IR::OpBitOr: opName = "__qmljs_llvm_inplace_bit_or_name"; break;
+ case V4IR::OpBitXor: opName = "__qmljs_llvm_inplace_bit_xor_name"; break;
+ case V4IR::OpAdd: opName = "__qmljs_llvm_inplace_add_name"; break;
+ case V4IR::OpSub: opName = "__qmljs_llvm_inplace_sub_name"; break;
+ case V4IR::OpMul: opName = "__qmljs_llvm_inplace_mul_name"; break;
+ case V4IR::OpDiv: opName = "__qmljs_llvm_inplace_div_name"; break;
+ case V4IR::OpMod: opName = "__qmljs_llvm_inplace_mod_name"; break;
+ case V4IR::OpLShift: opName = "__qmljs_llvm_inplace_shl_name"; break;
+ case V4IR::OpRShift: opName = "__qmljs_llvm_inplace_shr_name"; break;
+ case V4IR::OpURShift: opName = "__qmljs_llvm_inplace_ushr_name"; break;
default:
Q_UNREACHABLE();
break;
@@ -736,21 +736,21 @@ void InstructionSelection::inplaceNameOp(IR::AluOp oper, IR::Temp *rightSource,
}
}
-void InstructionSelection::inplaceElementOp(IR::AluOp oper, IR::Temp *source, IR::Temp *targetBaseTemp, IR::Temp *targetIndexTemp)
+void InstructionSelection::inplaceElementOp(V4IR::AluOp oper, V4IR::Temp *source, V4IR::Temp *targetBaseTemp, V4IR::Temp *targetIndexTemp)
{
const char *opName = 0;
switch (oper) {
- case IR::OpBitAnd: opName = "__qmljs_llvm_inplace_bit_and_element"; break;
- case IR::OpBitOr: opName = "__qmljs_llvm_inplace_bit_or_element"; break;
- case IR::OpBitXor: opName = "__qmljs_llvm_inplace_bit_xor_element"; break;
- case IR::OpAdd: opName = "__qmljs_llvm_inplace_add_element"; break;
- case IR::OpSub: opName = "__qmljs_llvm_inplace_sub_element"; break;
- case IR::OpMul: opName = "__qmljs_llvm_inplace_mul_element"; break;
- case IR::OpDiv: opName = "__qmljs_llvm_inplace_div_element"; break;
- case IR::OpMod: opName = "__qmljs_llvm_inplace_mod_element"; break;
- case IR::OpLShift: opName = "__qmljs_llvm_inplace_shl_element"; break;
- case IR::OpRShift: opName = "__qmljs_llvm_inplace_shr_element"; break;
- case IR::OpURShift: opName = "__qmljs_llvm_inplace_ushr_element"; break;
+ case V4IR::OpBitAnd: opName = "__qmljs_llvm_inplace_bit_and_element"; break;
+ case V4IR::OpBitOr: opName = "__qmljs_llvm_inplace_bit_or_element"; break;
+ case V4IR::OpBitXor: opName = "__qmljs_llvm_inplace_bit_xor_element"; break;
+ case V4IR::OpAdd: opName = "__qmljs_llvm_inplace_add_element"; break;
+ case V4IR::OpSub: opName = "__qmljs_llvm_inplace_sub_element"; break;
+ case V4IR::OpMul: opName = "__qmljs_llvm_inplace_mul_element"; break;
+ case V4IR::OpDiv: opName = "__qmljs_llvm_inplace_div_element"; break;
+ case V4IR::OpMod: opName = "__qmljs_llvm_inplace_mod_element"; break;
+ case V4IR::OpLShift: opName = "__qmljs_llvm_inplace_shl_element"; break;
+ case V4IR::OpRShift: opName = "__qmljs_llvm_inplace_shr_element"; break;
+ case V4IR::OpURShift: opName = "__qmljs_llvm_inplace_ushr_element"; break;
default:
Q_UNREACHABLE();
break;
@@ -765,21 +765,21 @@ void InstructionSelection::inplaceElementOp(IR::AluOp oper, IR::Temp *source, IR
}
}
-void InstructionSelection::inplaceMemberOp(IR::AluOp oper, IR::Temp *source, IR::Temp *targetBase, const QString &targetName)
+void InstructionSelection::inplaceMemberOp(V4IR::AluOp oper, V4IR::Temp *source, V4IR::Temp *targetBase, const QString &targetName)
{
const char *opName = 0;
switch (oper) {
- case IR::OpBitAnd: opName = "__qmljs_llvm_inplace_bit_and_member"; break;
- case IR::OpBitOr: opName = "__qmljs_llvm_inplace_bit_or_member"; break;
- case IR::OpBitXor: opName = "__qmljs_llvm_inplace_bit_xor_member"; break;
- case IR::OpAdd: opName = "__qmljs_llvm_inplace_add_member"; break;
- case IR::OpSub: opName = "__qmljs_llvm_inplace_sub_member"; break;
- case IR::OpMul: opName = "__qmljs_llvm_inplace_mul_member"; break;
- case IR::OpDiv: opName = "__qmljs_llvm_inplace_div_member"; break;
- case IR::OpMod: opName = "__qmljs_llvm_inplace_mod_member"; break;
- case IR::OpLShift: opName = "__qmljs_llvm_inplace_shl_member"; break;
- case IR::OpRShift: opName = "__qmljs_llvm_inplace_shr_member"; break;
- case IR::OpURShift: opName = "__qmljs_llvm_inplace_ushr_member"; break;
+ case V4IR::OpBitAnd: opName = "__qmljs_llvm_inplace_bit_and_member"; break;
+ case V4IR::OpBitOr: opName = "__qmljs_llvm_inplace_bit_or_member"; break;
+ case V4IR::OpBitXor: opName = "__qmljs_llvm_inplace_bit_xor_member"; break;
+ case V4IR::OpAdd: opName = "__qmljs_llvm_inplace_add_member"; break;
+ case V4IR::OpSub: opName = "__qmljs_llvm_inplace_sub_member"; break;
+ case V4IR::OpMul: opName = "__qmljs_llvm_inplace_mul_member"; break;
+ case V4IR::OpDiv: opName = "__qmljs_llvm_inplace_div_member"; break;
+ case V4IR::OpMod: opName = "__qmljs_llvm_inplace_mod_member"; break;
+ case V4IR::OpLShift: opName = "__qmljs_llvm_inplace_shl_member"; break;
+ case V4IR::OpRShift: opName = "__qmljs_llvm_inplace_shr_member"; break;
+ case V4IR::OpURShift: opName = "__qmljs_llvm_inplace_ushr_member"; break;
default:
Q_UNREACHABLE();
break;
@@ -794,7 +794,7 @@ void InstructionSelection::inplaceMemberOp(IR::AluOp oper, IR::Temp *source, IR:
}
}
-llvm::Function *InstructionSelection::getLLVMFunction(IR::Function *function)
+llvm::Function *InstructionSelection::getLLVMFunction(V4IR::Function *function)
{
llvm::Function *&f = _functionMap[function];
if (! f) {
@@ -811,11 +811,11 @@ llvm::Function *InstructionSelection::getLLVMFunction(IR::Function *function)
return f;
}
-llvm::Function *InstructionSelection::compileLLVMFunction(IR::Function *function)
+llvm::Function *InstructionSelection::compileLLVMFunction(V4IR::Function *function)
{
llvm::Function *llvmFunction = getLLVMFunction(function);
- QHash<IR::BasicBlock *, llvm::BasicBlock *> blockMap;
+ QHash<V4IR::BasicBlock *, llvm::BasicBlock *> blockMap;
QVector<llvm::Value *> tempMap;
qSwap(_llvmFunction, llvmFunction);
@@ -824,7 +824,7 @@ llvm::Function *InstructionSelection::compileLLVMFunction(IR::Function *function
qSwap(_blockMap, blockMap);
// create the LLVM blocks
- foreach (IR::BasicBlock *block, _function->basicBlocks)
+ foreach (V4IR::BasicBlock *block, _function->basicBlocks)
(void) getLLVMBasicBlock(block);
// entry block
@@ -846,10 +846,10 @@ llvm::Function *InstructionSelection::compileLLVMFunction(IR::Function *function
// CreateCall(getRuntimeFunction("__qmljs_llvm_init_this_object"),
// _llvmFunction->arg_begin());
- foreach (IR::BasicBlock *block, _function->basicBlocks) {
+ foreach (V4IR::BasicBlock *block, _function->basicBlocks) {
qSwap(_block, block);
SetInsertPoint(getLLVMBasicBlock(_block));
- foreach (IR::Stmt *s, _block->statements)
+ foreach (V4IR::Stmt *s, _block->statements)
s->accept(this);
qSwap(_block, block);
}
@@ -872,7 +872,7 @@ llvm::Function *InstructionSelection::compileLLVMFunction(IR::Function *function
return llvmFunction;
}
-llvm::BasicBlock *InstructionSelection::getLLVMBasicBlock(IR::BasicBlock *block)
+llvm::BasicBlock *InstructionSelection::getLLVMBasicBlock(V4IR::BasicBlock *block)
{
llvm::BasicBlock *&llvmBlock = _blockMap[block];
if (! llvmBlock)
@@ -881,9 +881,9 @@ llvm::BasicBlock *InstructionSelection::getLLVMBasicBlock(IR::BasicBlock *block)
return llvmBlock;
}
-llvm::Value *InstructionSelection::getLLVMTempReference(IR::Expr *expr)
+llvm::Value *InstructionSelection::getLLVMTempReference(V4IR::Expr *expr)
{
- if (IR::Temp *t = expr->asTemp())
+ if (V4IR::Temp *t = expr->asTemp())
return getLLVMTemp(t);
assert(!"TODO!");
@@ -892,10 +892,10 @@ llvm::Value *InstructionSelection::getLLVMTempReference(IR::Expr *expr)
return addr;
}
-llvm::Value *InstructionSelection::getLLVMCondition(IR::Expr *expr)
+llvm::Value *InstructionSelection::getLLVMCondition(V4IR::Expr *expr)
{
llvm::Value *value = 0;
- if (IR::Temp *t = expr->asTemp()) {
+ if (V4IR::Temp *t = expr->asTemp()) {
value = getLLVMTemp(t);
} else {
assert(!"TODO!");
@@ -919,7 +919,7 @@ llvm::Value *InstructionSelection::getLLVMCondition(IR::Expr *expr)
value);
}
-llvm::Value *InstructionSelection::getLLVMTemp(IR::Temp *temp)
+llvm::Value *InstructionSelection::getLLVMTemp(V4IR::Temp *temp)
{
if (temp->index < 0) {
const int index = -temp->index -1;
@@ -949,21 +949,21 @@ llvm::Value *InstructionSelection::getIdentifier(const QString &s)
return id;
}
-void InstructionSelection::visitJump(IR::Jump *s)
+void InstructionSelection::visitJump(V4IR::Jump *s)
{
CreateBr(getLLVMBasicBlock(s->target));
}
-void InstructionSelection::visitCJump(IR::CJump *s)
+void InstructionSelection::visitCJump(V4IR::CJump *s)
{
CreateCondBr(getLLVMCondition(s->cond),
getLLVMBasicBlock(s->iftrue),
getLLVMBasicBlock(s->iffalse));
}
-void InstructionSelection::visitRet(IR::Ret *s)
+void InstructionSelection::visitRet(V4IR::Ret *s)
{
- IR::Temp *t = s->expr->asTemp();
+ V4IR::Temp *t = s->expr->asTemp();
assert(t != 0);
llvm::Value *result = getLLVMTemp(t);
llvm::Value *ctx = _llvmFunction->arg_begin();
@@ -971,7 +971,7 @@ void InstructionSelection::visitRet(IR::Ret *s)
CreateRetVoid();
}
-void InstructionSelection::visitTry(IR::Try *)
+void InstructionSelection::visitTry(V4IR::Try *)
{
// TODO
assert(!"TODO!");
@@ -979,7 +979,7 @@ void InstructionSelection::visitTry(IR::Try *)
}
#if 0
-void InstructionSelection::visitString(IR::String *e)
+void InstructionSelection::visitString(V4IR::String *e)
{
llvm::Value *tmp = newLLVMTemp(_valueTy);
CreateCall3(getRuntimeFunction("__qmljs_llvm_init_string"),
@@ -995,12 +995,12 @@ llvm::AllocaInst *InstructionSelection::newLLVMTemp(llvm::Type *type, llvm::Valu
return addr;
}
-llvm::Value * InstructionSelection::genArguments(IR::ExprList *exprs, int &argc)
+llvm::Value * InstructionSelection::genArguments(V4IR::ExprList *exprs, int &argc)
{
llvm::Value *args = 0;
argc = 0;
- for (IR::ExprList *it = exprs; it; it = it->next)
+ for (V4IR::ExprList *it = exprs; it; it = it->next)
++argc;
if (argc)
@@ -1009,7 +1009,7 @@ llvm::Value * InstructionSelection::genArguments(IR::ExprList *exprs, int &argc)
args = llvm::Constant::getNullValue(_valueTy->getPointerTo());
int i = 0;
- for (IR::ExprList *it = exprs; it; it = it->next) {
+ for (V4IR::ExprList *it = exprs; it; it = it->next) {
// llvm::Value *arg = getLLVMValue(it->expr);
// CreateStore(arg, CreateConstGEP1_32(args, i++));
}
@@ -1017,12 +1017,12 @@ llvm::Value * InstructionSelection::genArguments(IR::ExprList *exprs, int &argc)
return args;
}
-void InstructionSelection::genCallMember(IR::Call *e, llvm::Value *result)
+void InstructionSelection::genCallMember(V4IR::Call *e, llvm::Value *result)
{
if (! result)
result = newLLVMTemp(_valueTy);
- IR::Member *m = e->base->asMember();
+ V4IR::Member *m = e->base->asMember();
llvm::Value *thisObject = getLLVMTemp(m->base->asTemp());
llvm::Value *name = getIdentifier(*m->name);
@@ -1042,12 +1042,12 @@ void InstructionSelection::genCallMember(IR::Call *e, llvm::Value *result)
_llvmValue = CreateLoad(result);
}
-void InstructionSelection::genConstructMember(IR::New *e, llvm::Value *result)
+void InstructionSelection::genConstructMember(V4IR::New *e, llvm::Value *result)
{
if (! result)
result = newLLVMTemp(_valueTy);
- IR::Member *m = e->base->asMember();
+ V4IR::Member *m = e->base->asMember();
llvm::Value *thisObject = getLLVMTemp(m->base->asTemp());
llvm::Value *name = getIdentifier(*m->name);
@@ -1067,7 +1067,7 @@ void InstructionSelection::genConstructMember(IR::New *e, llvm::Value *result)
_llvmValue = CreateLoad(result);
}
-void InstructionSelection::genCallTemp(IR::Call *e, llvm::Value *result)
+void InstructionSelection::genCallTemp(V4IR::Call *e, llvm::Value *result)
{
if (! result)
result = newLLVMTemp(_valueTy);
@@ -1093,7 +1093,7 @@ void InstructionSelection::genCallTemp(IR::Call *e, llvm::Value *result)
_llvmValue = CreateLoad(result);
}
-void InstructionSelection::genConstructTemp(IR::New *e, llvm::Value *result)
+void InstructionSelection::genConstructTemp(V4IR::New *e, llvm::Value *result)
{
if (! result)
result = newLLVMTemp(_valueTy);
@@ -1116,48 +1116,48 @@ void InstructionSelection::genConstructTemp(IR::New *e, llvm::Value *result)
_llvmValue = CreateLoad(result);
}
-void InstructionSelection::genCallName(IR::Call *e, llvm::Value *result)
+void InstructionSelection::genCallName(V4IR::Call *e, llvm::Value *result)
{
- IR::Name *base = e->base->asName();
+ V4IR::Name *base = e->base->asName();
if (! result)
result = newLLVMTemp(_valueTy);
if (! base->id) {
switch (base->builtin) {
- case IR::Name::builtin_invalid:
+ case V4IR::Name::builtin_invalid:
break;
- case IR::Name::builtin_typeof:
+ case V4IR::Name::builtin_typeof:
CreateCall3(getRuntimeFunction("__qmljs_llvm_typeof"),
_llvmFunction->arg_begin(), result, getLLVMTempReference(e->args->expr));
_llvmValue = CreateLoad(result);
return;
- case IR::Name::builtin_throw:
+ case V4IR::Name::builtin_throw:
CreateCall2(getRuntimeFunction("__qmljs_llvm_throw"),
_llvmFunction->arg_begin(), getLLVMTempReference(e->args->expr));
_llvmValue = llvm::UndefValue::get(_valueTy);
return;
- case IR::Name::builtin_finish_try:
+ case V4IR::Name::builtin_finish_try:
// ### FIXME.
return;
- case IR::Name::builtin_foreach_iterator_object:
+ case V4IR::Name::builtin_foreach_iterator_object:
CreateCall3(getRuntimeFunction("__qmljs_llvm_foreach_iterator_object"),
_llvmFunction->arg_begin(), result, getLLVMTempReference(e->args->expr));
_llvmValue = CreateLoad(result);
return;
- case IR::Name::builtin_foreach_next_property_name:
+ case V4IR::Name::builtin_foreach_next_property_name:
CreateCall2(getRuntimeFunction("__qmljs_llvm_foreach_next_property_name"),
result, getLLVMTempReference(e->args->expr));
_llvmValue = CreateLoad(result);
return;
- case IR::Name::builtin_delete: {
- if (IR::Subscript *subscript = e->args->expr->asSubscript()) {
+ case V4IR::Name::builtin_delete: {
+ if (V4IR::Subscript *subscript = e->args->expr->asSubscript()) {
CreateCall4(getRuntimeFunction("__qmljs_llvm_delete_subscript"),
_llvmFunction->arg_begin(),
result,
@@ -1165,7 +1165,7 @@ void InstructionSelection::genCallName(IR::Call *e, llvm::Value *result)
getLLVMTempReference(subscript->index));
_llvmValue = CreateLoad(result);
return;
- } else if (IR::Member *member = e->args->expr->asMember()) {
+ } else if (V4IR::Member *member = e->args->expr->asMember()) {
CreateCall4(getRuntimeFunction("__qmljs_llvm_delete_member"),
_llvmFunction->arg_begin(),
result,
@@ -1173,7 +1173,7 @@ void InstructionSelection::genCallName(IR::Call *e, llvm::Value *result)
getIdentifier(*member->name));
_llvmValue = CreateLoad(result);
return;
- } else if (IR::Name *name = e->args->expr->asName()) {
+ } else if (V4IR::Name *name = e->args->expr->asName()) {
CreateCall3(getRuntimeFunction("__qmljs_llvm_delete_property"),
_llvmFunction->arg_begin(),
result,
@@ -1206,9 +1206,9 @@ void InstructionSelection::genCallName(IR::Call *e, llvm::Value *result)
}
}
-void InstructionSelection::genConstructName(IR::New *e, llvm::Value *result)
+void InstructionSelection::genConstructName(V4IR::New *e, llvm::Value *result)
{
- IR::Name *base = e->base->asName();
+ V4IR::Name *base = e->base->asName();
if (! result)
result = newLLVMTemp(_valueTy);
@@ -1229,7 +1229,7 @@ void InstructionSelection::genConstructName(IR::New *e, llvm::Value *result)
}
#if 0
-void InstructionSelection::visitCall(IR::Call *e)
+void InstructionSelection::visitCall(V4IR::Call *e)
{
if (e->base->asMember()) {
genCallMember(e);
@@ -1237,7 +1237,7 @@ void InstructionSelection::visitCall(IR::Call *e)
genCallTemp(e);
} else if (e->base->asName()) {
genCallName(e);
- } else if (IR::Temp *t = e->base->asTemp()) {
+ } else if (V4IR::Temp *t = e->base->asTemp()) {
llvm::Value *base = getLLVMTemp(t);
int argc = 0;
@@ -1255,7 +1255,7 @@ void InstructionSelection::visitCall(IR::Call *e)
#endif
#if 0
-void InstructionSelection::visitNew(IR::New *e)
+void InstructionSelection::visitNew(V4IR::New *e)
{
if (e->base->asMember()) {
genConstructMember(e);
@@ -1263,7 +1263,7 @@ void InstructionSelection::visitNew(IR::New *e)
genConstructTemp(e);
} else if (e->base->asName()) {
genConstructName(e);
- } else if (IR::Temp *t = e->base->asTemp()) {
+ } else if (V4IR::Temp *t = e->base->asTemp()) {
llvm::Value *base = getLLVMTemp(t);
int argc = 0;
@@ -1281,7 +1281,7 @@ void InstructionSelection::visitNew(IR::New *e)
#endif
#if 0
-void InstructionSelection::visitSubscript(IR::Subscript *e)
+void InstructionSelection::visitSubscript(V4IR::Subscript *e)
{
llvm::Value *result = newLLVMTemp(_valueTy);
llvm::Value *base = getLLVMTempReference(e->base);
@@ -1293,7 +1293,7 @@ void InstructionSelection::visitSubscript(IR::Subscript *e)
#endif
#if 0
-void InstructionSelection::visitMember(IR::Member *e)
+void InstructionSelection::visitMember(V4IR::Member *e)
{
llvm::Value *result = newLLVMTemp(_valueTy);
llvm::Value *base = getLLVMTempReference(e->base);
@@ -1316,25 +1316,25 @@ llvm::Function *InstructionSelection::getRuntimeFunction(llvm::StringRef str)
return func;
}
-llvm::Value *InstructionSelection::createValue(IR::Const *e)
+llvm::Value *InstructionSelection::createValue(V4IR::Const *e)
{
llvm::Value *tmp = newLLVMTemp(_valueTy);
switch (e->type) {
- case IR::UndefinedType:
+ case V4IR::UndefinedType:
CreateCall(getRuntimeFunction("__qmljs_llvm_init_undefined"), tmp);
break;
- case IR::NullType:
+ case V4IR::NullType:
CreateCall(getRuntimeFunction("__qmljs_llvm_init_null"), tmp);
break;
- case IR::BoolType:
+ case V4IR::BoolType:
CreateCall2(getRuntimeFunction("__qmljs_llvm_init_boolean"), tmp,
getInt1(e->value ? 1 : 0));
break;
- case IR::NumberType:
+ case V4IR::NumberType:
CreateCall2(getRuntimeFunction("__qmljs_llvm_init_number"), tmp,
llvm::ConstantFP::get(_numberTy, e->value));
break;
@@ -1346,11 +1346,11 @@ llvm::Value *InstructionSelection::createValue(IR::Const *e)
return tmp;
}
-llvm::Value *InstructionSelection::toValuePtr(IR::Expr *e)
+llvm::Value *InstructionSelection::toValuePtr(V4IR::Expr *e)
{
- if (IR::Temp *t = e->asTemp()) {
+ if (V4IR::Temp *t = e->asTemp()) {
return getLLVMTemp(t);
- } else if (IR::Const *c = e->asConst()) {
+ } else if (V4IR::Const *c = e->asConst()) {
return createValue(c);
} else {
Q_UNREACHABLE();
diff --git a/src/qml/qml/v4vm/qv4isel_llvm_p.h b/src/qml/qml/v4vm/qv4isel_llvm_p.h
index 00b6527e6a..bdda28c510 100644
--- a/src/qml/qml/v4vm/qv4isel_llvm_p.h
+++ b/src/qml/qml/v4vm/qv4isel_llvm_p.h
@@ -62,92 +62,92 @@ namespace LLVM {
class InstructionSelection:
public llvm::IRBuilder<>,
- public IR::InstructionSelection
+ public V4IR::InstructionSelection
{
public:
InstructionSelection(llvm::LLVMContext &context);
- void buildLLVMModule(IR::Module *module, llvm::Module *llvmModule, llvm::FunctionPassManager *fpm);
+ void buildLLVMModule(V4IR::Module *module, llvm::Module *llvmModule, llvm::FunctionPassManager *fpm);
public: // methods from InstructionSelection:
- virtual void callBuiltinInvalid(IR::Name *func, IR::ExprList *args, IR::Temp *result);
- virtual void callBuiltinTypeofMember(IR::Temp *base, const QString &name, IR::Temp *result);
- virtual void callBuiltinTypeofSubscript(IR::Temp *base, IR::Temp *index, IR::Temp *result);
- virtual void callBuiltinTypeofName(const QString &name, IR::Temp *result);
- virtual void callBuiltinTypeofValue(IR::Temp *value, IR::Temp *result);
- virtual void callBuiltinDeleteMember(IR::Temp *base, const QString &name, IR::Temp *result);
- virtual void callBuiltinDeleteSubscript(IR::Temp *base, IR::Temp *index, IR::Temp *result);
- virtual void callBuiltinDeleteName(const QString &name, IR::Temp *result);
- virtual void callBuiltinDeleteValue(IR::Temp *result);
- virtual void callBuiltinPostDecrementMember(IR::Temp *base, const QString &name, IR::Temp *result);
- virtual void callBuiltinPostDecrementSubscript(IR::Temp *base, IR::Temp *index, IR::Temp *result);
- virtual void callBuiltinPostDecrementName(const QString &name, IR::Temp *result);
- virtual void callBuiltinPostDecrementValue(IR::Temp *value, IR::Temp *result);
- virtual void callBuiltinPostIncrementMember(IR::Temp *base, const QString &name, IR::Temp *result);
- virtual void callBuiltinPostIncrementSubscript(IR::Temp *base, IR::Temp *index, IR::Temp *result);
- virtual void callBuiltinPostIncrementName(const QString &name, IR::Temp *result);
- virtual void callBuiltinPostIncrementValue(IR::Temp *value, IR::Temp *result);
- virtual void callBuiltinThrow(IR::Temp *arg);
- virtual void callBuiltinCreateExceptionHandler(IR::Temp *result);
+ virtual void callBuiltinInvalid(V4IR::Name *func, V4IR::ExprList *args, V4IR::Temp *result);
+ virtual void callBuiltinTypeofMember(V4IR::Temp *base, const QString &name, V4IR::Temp *result);
+ virtual void callBuiltinTypeofSubscript(V4IR::Temp *base, V4IR::Temp *index, V4IR::Temp *result);
+ virtual void callBuiltinTypeofName(const QString &name, V4IR::Temp *result);
+ virtual void callBuiltinTypeofValue(V4IR::Temp *value, V4IR::Temp *result);
+ virtual void callBuiltinDeleteMember(V4IR::Temp *base, const QString &name, V4IR::Temp *result);
+ virtual void callBuiltinDeleteSubscript(V4IR::Temp *base, V4IR::Temp *index, V4IR::Temp *result);
+ virtual void callBuiltinDeleteName(const QString &name, V4IR::Temp *result);
+ virtual void callBuiltinDeleteValue(V4IR::Temp *result);
+ virtual void callBuiltinPostDecrementMember(V4IR::Temp *base, const QString &name, V4IR::Temp *result);
+ virtual void callBuiltinPostDecrementSubscript(V4IR::Temp *base, V4IR::Temp *index, V4IR::Temp *result);
+ virtual void callBuiltinPostDecrementName(const QString &name, V4IR::Temp *result);
+ virtual void callBuiltinPostDecrementValue(V4IR::Temp *value, V4IR::Temp *result);
+ virtual void callBuiltinPostIncrementMember(V4IR::Temp *base, const QString &name, V4IR::Temp *result);
+ virtual void callBuiltinPostIncrementSubscript(V4IR::Temp *base, V4IR::Temp *index, V4IR::Temp *result);
+ virtual void callBuiltinPostIncrementName(const QString &name, V4IR::Temp *result);
+ virtual void callBuiltinPostIncrementValue(V4IR::Temp *value, V4IR::Temp *result);
+ virtual void callBuiltinThrow(V4IR::Temp *arg);
+ virtual void callBuiltinCreateExceptionHandler(V4IR::Temp *result);
virtual void callBuiltinFinishTry();
- virtual void callBuiltinForeachIteratorObject(IR::Temp *arg, IR::Temp *result);
- virtual void callBuiltinForeachNextPropertyname(IR::Temp *arg, IR::Temp *result);
- virtual void callBuiltinPushWithScope(IR::Temp *arg);
+ virtual void callBuiltinForeachIteratorObject(V4IR::Temp *arg, V4IR::Temp *result);
+ virtual void callBuiltinForeachNextPropertyname(V4IR::Temp *arg, V4IR::Temp *result);
+ virtual void callBuiltinPushWithScope(V4IR::Temp *arg);
virtual void callBuiltinPopScope();
virtual void callBuiltinDeclareVar(bool deletable, const QString &name);
- virtual void callBuiltinDefineGetterSetter(IR::Temp *object, const QString &name, IR::Temp *getter, IR::Temp *setter);
- virtual void callBuiltinDefineProperty(IR::Temp *object, const QString &name, IR::Temp *value);
- virtual void callBuiltinDefineArray(IR::Temp *result, IR::ExprList *args);
- virtual void callValue(IR::Temp *value, IR::ExprList *args, IR::Temp *result);
- virtual void callProperty(IR::Temp *base, const QString &name, IR::ExprList *args, IR::Temp *result);
- virtual void callSubscript(IR::Temp *base, IR::Temp *index, IR::ExprList *args, IR::Temp *result);
- virtual void constructActivationProperty(IR::Name *func, IR::ExprList *args, IR::Temp *result);
- virtual void constructProperty(IR::Temp *base, const QString &name, IR::ExprList *args, IR::Temp *result);
- virtual void constructValue(IR::Temp *value, IR::ExprList *args, IR::Temp *result);
- virtual void loadThisObject(IR::Temp *temp);
- virtual void loadConst(IR::Const *con, IR::Temp *temp);
- virtual void loadString(const QString &str, IR::Temp *targetTemp);
- virtual void loadRegexp(IR::RegExp *sourceRegexp, IR::Temp *targetTemp);
- virtual void getActivationProperty(const QString &name, IR::Temp *temp);
- virtual void setActivationProperty(IR::Temp *source, const QString &targetName);
- virtual void initClosure(IR::Closure *closure, IR::Temp *target);
- virtual void getProperty(IR::Temp *sourceBase, const QString &sourceName, IR::Temp *target);
- virtual void setProperty(IR::Temp *source, IR::Temp *targetBase, const QString &targetName);
- virtual void getElement(IR::Temp *sourceBase, IR::Temp *sourceIndex, IR::Temp *target);
- virtual void setElement(IR::Temp *source, IR::Temp *targetBase, IR::Temp *targetIndex);
- virtual void copyValue(IR::Temp *sourceTemp, IR::Temp *targetTemp);
- virtual void unop(IR::AluOp oper, IR::Temp *sourceTemp, IR::Temp *targetTemp);
- virtual void binop(IR::AluOp oper, IR::Temp *leftSource, IR::Temp *rightSource, IR::Temp *target);
- virtual void inplaceNameOp(IR::AluOp oper, IR::Temp *rightSource, const QString &targetName);
- virtual void inplaceElementOp(IR::AluOp oper, IR::Temp *source, IR::Temp *targetBaseTemp, IR::Temp *targetIndexTemp);
- virtual void inplaceMemberOp(IR::AluOp oper, IR::Temp *source, IR::Temp *targetBase, const QString &targetName);
+ virtual void callBuiltinDefineGetterSetter(V4IR::Temp *object, const QString &name, V4IR::Temp *getter, V4IR::Temp *setter);
+ virtual void callBuiltinDefineProperty(V4IR::Temp *object, const QString &name, V4IR::Temp *value);
+ virtual void callBuiltinDefineArray(V4IR::Temp *result, V4IR::ExprList *args);
+ virtual void callValue(V4IR::Temp *value, V4IR::ExprList *args, V4IR::Temp *result);
+ virtual void callProperty(V4IR::Temp *base, const QString &name, V4IR::ExprList *args, V4IR::Temp *result);
+ virtual void callSubscript(V4IR::Temp *base, V4IR::Temp *index, V4IR::ExprList *args, V4IR::Temp *result);
+ virtual void constructActivationProperty(V4IR::Name *func, V4IR::ExprList *args, V4IR::Temp *result);
+ virtual void constructProperty(V4IR::Temp *base, const QString &name, V4IR::ExprList *args, V4IR::Temp *result);
+ virtual void constructValue(V4IR::Temp *value, V4IR::ExprList *args, V4IR::Temp *result);
+ virtual void loadThisObject(V4IR::Temp *temp);
+ virtual void loadConst(V4IR::Const *con, V4IR::Temp *temp);
+ virtual void loadString(const QString &str, V4IR::Temp *targetTemp);
+ virtual void loadRegexp(V4IR::RegExp *sourceRegexp, V4IR::Temp *targetTemp);
+ virtual void getActivationProperty(const V4IR::Name *name, V4IR::Temp *temp);
+ virtual void setActivationProperty(V4IR::Temp *source, const QString &targetName);
+ virtual void initClosure(V4IR::Closure *closure, V4IR::Temp *target);
+ virtual void getProperty(V4IR::Temp *sourceBase, const QString &sourceName, V4IR::Temp *target);
+ virtual void setProperty(V4IR::Temp *source, V4IR::Temp *targetBase, const QString &targetName);
+ virtual void getElement(V4IR::Temp *sourceBase, V4IR::Temp *sourceIndex, V4IR::Temp *target);
+ virtual void setElement(V4IR::Temp *source, V4IR::Temp *targetBase, V4IR::Temp *targetIndex);
+ virtual void copyValue(V4IR::Temp *sourceTemp, V4IR::Temp *targetTemp);
+ virtual void unop(V4IR::AluOp oper, V4IR::Temp *sourceTemp, V4IR::Temp *targetTemp);
+ virtual void binop(V4IR::AluOp oper, V4IR::Temp *leftSource, V4IR::Temp *rightSource, V4IR::Temp *target);
+ virtual void inplaceNameOp(V4IR::AluOp oper, V4IR::Temp *rightSource, const QString &targetName);
+ virtual void inplaceElementOp(V4IR::AluOp oper, V4IR::Temp *source, V4IR::Temp *targetBaseTemp, V4IR::Temp *targetIndexTemp);
+ virtual void inplaceMemberOp(V4IR::AluOp oper, V4IR::Temp *source, V4IR::Temp *targetBase, const QString &targetName);
public: // visitor methods for StmtVisitor:
- virtual void visitJump(IR::Jump *);
- virtual void visitCJump(IR::CJump *);
- virtual void visitRet(IR::Ret *);
- virtual void visitTry(IR::Try *);
+ virtual void visitJump(V4IR::Jump *);
+ virtual void visitCJump(V4IR::CJump *);
+ virtual void visitRet(V4IR::Ret *);
+ virtual void visitTry(V4IR::Try *);
private:
llvm::Function *getRuntimeFunction(llvm::StringRef str);
- llvm::Function *getLLVMFunction(IR::Function *function);
- llvm::Function *compileLLVMFunction(IR::Function *function);
- llvm::BasicBlock *getLLVMBasicBlock(IR::BasicBlock *block);
- llvm::Value *getLLVMTempReference(IR::Expr *expr);
- llvm::Value *getLLVMCondition(IR::Expr *expr);
- llvm::Value *getLLVMTemp(IR::Temp *temp);
+ llvm::Function *getLLVMFunction(V4IR::Function *function);
+ llvm::Function *compileLLVMFunction(V4IR::Function *function);
+ llvm::BasicBlock *getLLVMBasicBlock(V4IR::BasicBlock *block);
+ llvm::Value *getLLVMTempReference(V4IR::Expr *expr);
+ llvm::Value *getLLVMCondition(V4IR::Expr *expr);
+ llvm::Value *getLLVMTemp(V4IR::Temp *temp);
llvm::Value *getStringPtr(const QString &s);
llvm::Value *getIdentifier(const QString &s);
llvm::AllocaInst *newLLVMTemp(llvm::Type *type, llvm::Value *size = 0);
- llvm::Value * genArguments(IR::ExprList *args, int &argc);
- void genCallTemp(IR::Call *e, llvm::Value *result = 0);
- void genCallName(IR::Call *e, llvm::Value *result = 0);
- void genCallMember(IR::Call *e, llvm::Value *result = 0);
- void genConstructTemp(IR::New *e, llvm::Value *result = 0);
- void genConstructName(IR::New *e, llvm::Value *result = 0);
- void genConstructMember(IR::New *e, llvm::Value *result = 0);
- llvm::Value *createValue(IR::Const *e);
- llvm::Value *toValuePtr(IR::Expr *e);
+ llvm::Value * genArguments(V4IR::ExprList *args, int &argc);
+ void genCallTemp(V4IR::Call *e, llvm::Value *result = 0);
+ void genCallName(V4IR::Call *e, llvm::Value *result = 0);
+ void genCallMember(V4IR::Call *e, llvm::Value *result = 0);
+ void genConstructTemp(V4IR::New *e, llvm::Value *result = 0);
+ void genConstructName(V4IR::New *e, llvm::Value *result = 0);
+ void genConstructMember(V4IR::New *e, llvm::Value *result = 0);
+ llvm::Value *createValue(V4IR::Const *e);
+ llvm::Value *toValuePtr(V4IR::Expr *e);
llvm::Value *genStringList(const QList<const QString *> &strings,
const char *arrayName, const char *elementName);
@@ -162,10 +162,10 @@ private:
llvm::Type *_stringPtrTy;
llvm::FunctionType *_functionTy;
llvm::Instruction *_allocaInsertPoint;
- IR::Function *_function;
- IR::BasicBlock *_block;
- QHash<IR::Function *, llvm::Function *> _functionMap;
- QHash<IR::BasicBlock *, llvm::BasicBlock *> _blockMap;
+ V4IR::Function *_function;
+ V4IR::BasicBlock *_block;
+ QHash<V4IR::Function *, llvm::Function *> _functionMap;
+ QHash<V4IR::BasicBlock *, llvm::BasicBlock *> _blockMap;
QVector<llvm::Value *> _tempMap;
QHash<QString, llvm::Value *> _stringMap;
llvm::FunctionPassManager *_fpm;
diff --git a/src/qml/qml/v4vm/qv4isel_masm.cpp b/src/qml/qml/v4vm/qv4isel_masm.cpp
index f6f79b8d66..4137f39061 100644
--- a/src/qml/qml/v4vm/qv4isel_masm.cpp
+++ b/src/qml/qml/v4vm/qv4isel_masm.cpp
@@ -929,7 +929,7 @@ void InstructionSelection::copyValue(V4IR::Temp *sourceTemp, V4IR::Temp *targetT
void InstructionSelection::unop(V4IR::AluOp oper, V4IR::Temp *sourceTemp, V4IR::Temp *targetTemp)
{
- QV4::UnaryOpName op = 0;
+ UnaryOpName op = 0;
const char *opName = 0;
switch (oper) {
case V4IR::OpIfTrue: assert(!"unreachable"); break;
@@ -954,7 +954,7 @@ void InstructionSelection::binop(V4IR::AluOp oper, V4IR::Temp *leftSource, V4IR:
void InstructionSelection::inplaceNameOp(V4IR::AluOp oper, V4IR::Temp *rightSource, const QString &targetName)
{
- QV4::InplaceBinOpName op = 0;
+ InplaceBinOpName op = 0;
const char *opName = 0;
switch (oper) {
case V4IR::OpBitAnd: setOp(op, opName, __qmljs_inplace_bit_and_name); break;
@@ -980,7 +980,7 @@ void InstructionSelection::inplaceNameOp(V4IR::AluOp oper, V4IR::Temp *rightSour
void InstructionSelection::inplaceElementOp(V4IR::AluOp oper, V4IR::Temp *source, V4IR::Temp *targetBaseTemp, V4IR::Temp *targetIndexTemp)
{
- QV4::InplaceBinOpElement op = 0;
+ InplaceBinOpElement op = 0;
const char *opName = 0;
switch (oper) {
case V4IR::OpBitAnd: setOp(op, opName, __qmljs_inplace_bit_and_element); break;
@@ -1008,7 +1008,7 @@ void InstructionSelection::inplaceElementOp(V4IR::AluOp oper, V4IR::Temp *source
void InstructionSelection::inplaceMemberOp(V4IR::AluOp oper, V4IR::Temp *source, V4IR::Temp *targetBase, const QString &targetName)
{
- QV4::InplaceBinOpMember op = 0;
+ InplaceBinOpMember op = 0;
const char *opName = 0;
switch (oper) {
case V4IR::OpBitAnd: setOp(op, opName, __qmljs_inplace_bit_and_member); break;
@@ -1145,7 +1145,7 @@ void InstructionSelection::visitCJump(V4IR::CJump *s)
return;
} else if (V4IR::Binop *b = s->cond->asBinop()) {
if (b->left->asTemp() && b->right->asTemp()) {
- QV4::CmpOp op = 0;
+ CmpOp op = 0;
const char *opName = 0;
switch (b->op) {
default: Q_UNREACHABLE(); assert(!"todo"); break;
diff --git a/src/qml/qml/v4vm/qv4isel_masm_p.h b/src/qml/qml/v4vm/qv4isel_masm_p.h
index 7b9c21ed74..3ce29bd72b 100644
--- a/src/qml/qml/v4vm/qv4isel_masm_p.h
+++ b/src/qml/qml/v4vm/qv4isel_masm_p.h
@@ -601,7 +601,7 @@ public:
struct BinaryOperationInfo {
const char *name;
- QV4::BinOp fallbackImplementation;
+ BinOp fallbackImplementation;
MemRegBinOp inlineMemRegOp;
ImmRegBinOp inlineImmRegOp;
};
diff --git a/src/qml/qml/v4vm/qv4runtime_p.h b/src/qml/qml/v4vm/qv4runtime_p.h
index 8edb618d2d..e9510d3387 100644
--- a/src/qml/qml/v4vm/qv4runtime_p.h
+++ b/src/qml/qml/v4vm/qv4runtime_p.h
@@ -103,211 +103,214 @@ private:
PersistentValue exception;
};
+}
+
+QT_END_NAMESPACE
+
extern "C" {
// context
-void __qmljs_call_activation_property(ExecutionContext *, Value *result, String *name, Value *args, int argc);
-void __qmljs_call_property(ExecutionContext *context, Value *result, const Value &that, String *name, Value *args, int argc);
-void __qmljs_call_property_lookup(ExecutionContext *context, Value *result, const Value &thisObject, uint index, Value *args, int argc);
-void __qmljs_call_element(ExecutionContext *context, Value *result, const Value &that, const Value &index, Value *args, int argc);
-void __qmljs_call_value(ExecutionContext *context, Value *result, const Value *thisObject, const Value &func, Value *args, int argc);
-
-void __qmljs_construct_activation_property(ExecutionContext *, Value *result, String *name, Value *args, int argc);
-void __qmljs_construct_property(ExecutionContext *context, Value *result, const Value &base, String *name, Value *args, int argc);
-void __qmljs_construct_value(ExecutionContext *context, Value *result, const Value &func, Value *args, int argc);
-
-void __qmljs_builtin_typeof(ExecutionContext *ctx, Value *result, const Value &val);
-void __qmljs_builtin_typeof_name(ExecutionContext *context, Value* result, String *name);
-void __qmljs_builtin_typeof_member(ExecutionContext* context, Value* result, const Value &base, String *name);
-void __qmljs_builtin_typeof_element(ExecutionContext* context, Value *result, const Value &base, const Value &index);
-
-void __qmljs_builtin_post_increment(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_decrement(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 Q_NORETURN __qmljs_builtin_throw(ExecutionContext *context, const Value &val);
-void Q_NORETURN __qmljs_builtin_rethrow(ExecutionContext *context);
-ExecutionContext *__qmljs_builtin_push_with_scope(const Value &o, ExecutionContext *ctx);
-ExecutionContext *__qmljs_builtin_push_catch_scope(String *exceptionVarName, const QV4::Value &exceptionValue, ExecutionContext *ctx);
-ExecutionContext *__qmljs_builtin_pop_scope(ExecutionContext *ctx);
-void __qmljs_builtin_declare_var(ExecutionContext *ctx, bool deletable, String *name);
-void __qmljs_builtin_define_property(ExecutionContext *ctx, const Value &object, String *name, Value *val);
-void __qmljs_builtin_define_array(ExecutionContext *ctx, Value *array, QV4::Value *values, uint length);
-void __qmljs_builtin_define_getter_setter(ExecutionContext *ctx, const Value &object, String *name, const Value *getter, const Value *setter);
+void __qmljs_call_activation_property(QV4::ExecutionContext *, QV4::Value *result, QV4::String *name, QV4::Value *args, int argc);
+void __qmljs_call_property(QV4::ExecutionContext *context, QV4::Value *result, const QV4::Value &that, QV4::String *name, QV4::Value *args, int argc);
+void __qmljs_call_property_lookup(QV4::ExecutionContext *context, QV4::Value *result, const QV4::Value &thisObject, uint index, QV4::Value *args, int argc);
+void __qmljs_call_element(QV4::ExecutionContext *context, QV4::Value *result, const QV4::Value &that, const QV4::Value &index, QV4::Value *args, int argc);
+void __qmljs_call_value(QV4::ExecutionContext *context, QV4::Value *result, const QV4::Value *thisObject, const QV4::Value &func, QV4::Value *args, int argc);
+
+void __qmljs_construct_activation_property(QV4::ExecutionContext *, QV4::Value *result, QV4::String *name, QV4::Value *args, int argc);
+void __qmljs_construct_property(QV4::ExecutionContext *context, QV4::Value *result, const QV4::Value &base, QV4::String *name, QV4::Value *args, int argc);
+void __qmljs_construct_value(QV4::ExecutionContext *context, QV4::Value *result, const QV4::Value &func, QV4::Value *args, int argc);
+
+void __qmljs_builtin_typeof(QV4::ExecutionContext *ctx, QV4::Value *result, const QV4::Value &val);
+void __qmljs_builtin_typeof_name(QV4::ExecutionContext *context, QV4::Value* result, QV4::String *name);
+void __qmljs_builtin_typeof_member(QV4::ExecutionContext* context, QV4::Value* result, const QV4::Value &base, QV4::String *name);
+void __qmljs_builtin_typeof_element(QV4::ExecutionContext* context, QV4::Value *result, const QV4::Value &base, const QV4::Value &index);
+
+void __qmljs_builtin_post_increment(QV4::Value *result, QV4::Value *val);
+void __qmljs_builtin_post_increment_name(QV4::ExecutionContext *context, QV4::Value *result, QV4::String *name);
+void __qmljs_builtin_post_increment_member(QV4::ExecutionContext *context, QV4::Value *result, const QV4::Value &base, QV4::String *name);
+void __qmljs_builtin_post_increment_element(QV4::ExecutionContext *context, QV4::Value *result, const QV4::Value &base, const QV4::Value *index);
+
+void __qmljs_builtin_post_decrement(QV4::Value *result, QV4::Value *val);
+void __qmljs_builtin_post_decrement_name(QV4::ExecutionContext *context, QV4::Value *result, QV4::String *name);
+void __qmljs_builtin_post_decrement_member(QV4::ExecutionContext *context, QV4::Value *result, const QV4::Value &base, QV4::String *name);
+void __qmljs_builtin_post_decrement_element(QV4::ExecutionContext *context, QV4::Value *result, const QV4::Value &base, const QV4::Value &index);
+
+void Q_NORETURN __qmljs_builtin_throw(QV4::ExecutionContext *context, const QV4::Value &val);
+void Q_NORETURN __qmljs_builtin_rethrow(QV4::ExecutionContext *context);
+QV4::ExecutionContext *__qmljs_builtin_push_with_scope(const QV4::Value &o, QV4::ExecutionContext *ctx);
+QV4::ExecutionContext *__qmljs_builtin_push_catch_scope(QV4::String *exceptionVarName, const QV4::Value &exceptionValue, QV4::ExecutionContext *ctx);
+QV4::ExecutionContext *__qmljs_builtin_pop_scope(QV4::ExecutionContext *ctx);
+void __qmljs_builtin_declare_var(QV4::ExecutionContext *ctx, bool deletable, QV4::String *name);
+void __qmljs_builtin_define_property(QV4::ExecutionContext *ctx, const QV4::Value &object, QV4::String *name, QV4::Value *val);
+void __qmljs_builtin_define_array(QV4::ExecutionContext *ctx, QV4::Value *array, QV4::Value *values, uint length);
+void __qmljs_builtin_define_getter_setter(QV4::ExecutionContext *ctx, const QV4::Value &object, QV4::String *name, const QV4::Value *getter, const QV4::Value *setter);
// constructors
-void __qmljs_init_closure(ExecutionContext *ctx, Value *result, Function *clos);
-Function *__qmljs_register_function(ExecutionContext *ctx, String *name,
- bool hasDirectEval,
- bool usesArgumentsObject, bool isStrict,
- bool hasNestedFunctions,
- String **formals, unsigned formalCount,
- String **locals, unsigned localCount);
-
+void __qmljs_init_closure(QV4::ExecutionContext *ctx, QV4::Value *result, QV4::Function *clos);
+QV4::Function *__qmljs_register_function(QV4::ExecutionContext *ctx, QV4::String *name,
+ bool hasDirectEval,
+ bool usesArgumentsObject, bool isStrict,
+ bool hasNestedFunctions,
+ QV4::String **formals, unsigned formalCount,
+ QV4::String **locals, unsigned localCount);
// strings
double __qmljs_string_to_number(const QString &s);
-Value __qmljs_string_from_number(ExecutionContext *ctx, double number);
-String *__qmljs_string_concat(ExecutionContext *ctx, String *first, String *second);
+QV4::Value __qmljs_string_from_number(QV4::ExecutionContext *ctx, double number);
+QV4::String *__qmljs_string_concat(QV4::ExecutionContext *ctx, QV4::String *first, QV4::String *second);
// objects
-Value __qmljs_object_default_value(Object *object, int typeHint);
-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);
+QV4::Value __qmljs_object_default_value(QV4::Object *object, int typeHint);
+void __qmljs_set_activation_property(QV4::ExecutionContext *ctx, QV4::String *name, const QV4::Value& value);
+void __qmljs_set_property(QV4::ExecutionContext *ctx, const QV4::Value &object, QV4::String *name, const QV4::Value &value);
+void __qmljs_get_property(QV4::ExecutionContext *ctx, QV4::Value *result, const QV4::Value &object, QV4::String *name);
+void __qmljs_get_activation_property(QV4::ExecutionContext *ctx, QV4::Value *result, QV4::String *name);
-void __qmljs_get_global_lookup(ExecutionContext *ctx, Value *result, int lookupIndex);
-void __qmljs_call_global_lookup(ExecutionContext *context, Value *result, uint index, Value *args, int argc);
-void __qmljs_construct_global_lookup(ExecutionContext *context, Value *result, uint index, Value *args, int argc);
-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_global_lookup(QV4::ExecutionContext *ctx, QV4::Value *result, int lookupIndex);
+void __qmljs_call_global_lookup(QV4::ExecutionContext *context, QV4::Value *result, uint index, QV4::Value *args, int argc);
+void __qmljs_construct_global_lookup(QV4::ExecutionContext *context, QV4::Value *result, uint index, QV4::Value *args, int argc);
+void __qmljs_get_property_lookup(QV4::ExecutionContext *ctx, QV4::Value *result, const QV4::Value &object, int lookupIndex);
+void __qmljs_set_property_lookup(QV4::ExecutionContext *ctx, const QV4::Value &object, int lookupIndex, const QV4::Value &value);
-void __qmljs_get_element(ExecutionContext *ctx, Value *retval, const Value &object, const Value &index);
-void __qmljs_set_element(ExecutionContext *ctx, const Value &object, const Value &index, const Value &value);
+void __qmljs_get_element(QV4::ExecutionContext *ctx, QV4::Value *retval, const QV4::Value &object, const QV4::Value &index);
+void __qmljs_set_element(QV4::ExecutionContext *ctx, const QV4::Value &object, const QV4::Value &index, const QV4::Value &value);
// For each
-void __qmljs_foreach_iterator_object(ExecutionContext *ctx, Value *result, const Value &in);
-void __qmljs_foreach_next_property_name(Value *result, const Value &foreach_iterator);
+void __qmljs_foreach_iterator_object(QV4::ExecutionContext *ctx, QV4::Value *result, const QV4::Value &in);
+void __qmljs_foreach_next_property_name(QV4::Value *result, const QV4::Value &foreach_iterator);
// type conversion and testing
-Value __qmljs_to_primitive(const Value &value, int typeHint);
-Bool __qmljs_to_boolean(const Value &value);
-double __qmljs_to_number(const Value &value);
-Value __qmljs_to_string(const Value &value, ExecutionContext *ctx);
-Q_QML_EXPORT String *__qmljs_convert_to_string(ExecutionContext *ctx, const Value &value);
+QV4::Value __qmljs_to_primitive(const QV4::Value &value, int typeHint);
+QV4::Bool __qmljs_to_boolean(const QV4::Value &value);
+double __qmljs_to_number(const QV4::Value &value);
+QV4::Value __qmljs_to_string(const QV4::Value &value, QV4::ExecutionContext *ctx);
+Q_QML_EXPORT QV4::String *__qmljs_convert_to_string(QV4::ExecutionContext *ctx, const QV4::Value &value);
QString __qmljs_numberToString(double num, int radix = 10);
-Value __qmljs_to_object(ExecutionContext *ctx, const Value &value);
-Object *__qmljs_convert_to_object(ExecutionContext *ctx, const Value &value);
+QV4::Value __qmljs_to_object(QV4::ExecutionContext *ctx, const QV4::Value &value);
+QV4::Object *__qmljs_convert_to_object(QV4::ExecutionContext *ctx, const QV4::Value &value);
-Bool __qmljs_equal(const Value &x, const Value &y);
-Bool __qmljs_strict_equal(const Value &x, const Value &y);
+QV4::Bool __qmljs_equal(const QV4::Value &x, const QV4::Value &y);
+QV4::Bool __qmljs_strict_equal(const QV4::Value &x, const QV4::Value &y);
// unary operators
-typedef void (*UnaryOpName)(Value *, const Value &);
-void __qmljs_uplus(Value *result, const Value &value);
-void __qmljs_uminus(Value *result, const Value &value);
-void __qmljs_compl(Value *result, const Value &value);
-void __qmljs_not(Value *result, const Value &value);
-void __qmljs_increment(Value *result, const Value &value);
-void __qmljs_decrement(Value *result, const Value &value);
+typedef void (*UnaryOpName)(QV4::Value *, const QV4::Value &);
+void __qmljs_uplus(QV4::Value *result, const QV4::Value &value);
+void __qmljs_uminus(QV4::Value *result, const QV4::Value &value);
+void __qmljs_compl(QV4::Value *result, const QV4::Value &value);
+void __qmljs_not(QV4::Value *result, const QV4::Value &value);
+void __qmljs_increment(QV4::Value *result, const QV4::Value &value);
+void __qmljs_decrement(QV4::Value *result, const QV4::Value &value);
-void __qmljs_delete_subscript(ExecutionContext *ctx, Value *result, const Value &base, const Value &index);
-void __qmljs_delete_member(ExecutionContext *ctx, Value *result, const Value &base, String *name);
-void __qmljs_delete_name(ExecutionContext *ctx, Value *result, String *name);
+void __qmljs_delete_subscript(QV4::ExecutionContext *ctx, QV4::Value *result, const QV4::Value &base, const QV4::Value &index);
+void __qmljs_delete_member(QV4::ExecutionContext *ctx, QV4::Value *result, const QV4::Value &base, QV4::String *name);
+void __qmljs_delete_name(QV4::ExecutionContext *ctx, QV4::Value *result, QV4::String *name);
-void Q_NORETURN __qmljs_throw(ExecutionContext*, const Value &value);
+void Q_NORETURN __qmljs_throw(QV4::ExecutionContext*, const QV4::Value &value);
// 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 *, Value *result, const Value &left, const Value &right);
-void __qmljs_bit_xor(ExecutionContext *, Value *result, const Value &left, const Value &right);
-void __qmljs_bit_and(ExecutionContext *, 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 *, Value *result, const Value &left, const Value &right);
-void __qmljs_mul(ExecutionContext *, Value *result, const Value &left, const Value &right);
-void __qmljs_div(ExecutionContext *, Value *result, const Value &left, const Value &right);
-void __qmljs_mod(ExecutionContext *, Value *result, const Value &left, const Value &right);
-void __qmljs_shl(ExecutionContext *, Value *result, const Value &left, const Value &right);
-void __qmljs_shr(ExecutionContext *, Value *result, const Value &left, const Value &right);
-void __qmljs_ushr(ExecutionContext *, 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 *, Value *result, const Value &left, const Value &right);
-void __qmljs_sne(ExecutionContext *, 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 *, const Value &left, const Value &right);
-Bool __qmljs_cmp_lt(ExecutionContext *, const Value &left, const Value &right);
-Bool __qmljs_cmp_ge(ExecutionContext *, const Value &left, const Value &right);
-Bool __qmljs_cmp_le(ExecutionContext *, const Value &left, const Value &right);
-Bool __qmljs_cmp_eq(ExecutionContext *, const Value &left, const Value &right);
-Bool __qmljs_cmp_ne(ExecutionContext *, const Value &left, const Value &right);
-Bool __qmljs_cmp_se(ExecutionContext *, const Value &left, const Value &right);
-Bool __qmljs_cmp_sne(ExecutionContext *, 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)(QV4::ExecutionContext *ctx, QV4::Value *result, const QV4::Value &left, const QV4::Value &right);
+
+void __qmljs_instanceof(QV4::ExecutionContext *ctx, QV4::Value *result, const QV4::Value &left, const QV4::Value &right);
+void __qmljs_in(QV4::ExecutionContext *ctx, QV4::Value *result, const QV4::Value &left, const QV4::Value &right);
+void __qmljs_bit_or(QV4::ExecutionContext *, QV4::Value *result, const QV4::Value &left, const QV4::Value &right);
+void __qmljs_bit_xor(QV4::ExecutionContext *, QV4::Value *result, const QV4::Value &left, const QV4::Value &right);
+void __qmljs_bit_and(QV4::ExecutionContext *, QV4::Value *result, const QV4::Value &left, const QV4::Value &right);
+void __qmljs_add(QV4::ExecutionContext *ctx, QV4::Value *result, const QV4::Value &left, const QV4::Value &right);
+void __qmljs_sub(QV4::ExecutionContext *, QV4::Value *result, const QV4::Value &left, const QV4::Value &right);
+void __qmljs_mul(QV4::ExecutionContext *, QV4::Value *result, const QV4::Value &left, const QV4::Value &right);
+void __qmljs_div(QV4::ExecutionContext *, QV4::Value *result, const QV4::Value &left, const QV4::Value &right);
+void __qmljs_mod(QV4::ExecutionContext *, QV4::Value *result, const QV4::Value &left, const QV4::Value &right);
+void __qmljs_shl(QV4::ExecutionContext *, QV4::Value *result, const QV4::Value &left, const QV4::Value &right);
+void __qmljs_shr(QV4::ExecutionContext *, QV4::Value *result, const QV4::Value &left, const QV4::Value &right);
+void __qmljs_ushr(QV4::ExecutionContext *, QV4::Value *result, const QV4::Value &left, const QV4::Value &right);
+void __qmljs_gt(QV4::ExecutionContext *ctx, QV4::Value *result, const QV4::Value &left, const QV4::Value &right);
+void __qmljs_lt(QV4::ExecutionContext *ctx, QV4::Value *result, const QV4::Value &left, const QV4::Value &right);
+void __qmljs_ge(QV4::ExecutionContext *ctx, QV4::Value *result, const QV4::Value &left, const QV4::Value &right);
+void __qmljs_le(QV4::ExecutionContext *ctx, QV4::Value *result, const QV4::Value &left, const QV4::Value &right);
+void __qmljs_eq(QV4::ExecutionContext *ctx, QV4::Value *result, const QV4::Value &left, const QV4::Value &right);
+void __qmljs_ne(QV4::ExecutionContext *ctx, QV4::Value *result, const QV4::Value &left, const QV4::Value &right);
+void __qmljs_se(QV4::ExecutionContext *, QV4::Value *result, const QV4::Value &left, const QV4::Value &right);
+void __qmljs_sne(QV4::ExecutionContext *, QV4::Value *result, const QV4::Value &left, const QV4::Value &right);
+
+void __qmljs_add_helper(QV4::ExecutionContext *ctx, QV4::Value *result, const QV4::Value &left, const QV4::Value &right);
+
+
+typedef void (*InplaceBinOpName)(QV4::ExecutionContext *ctx, QV4::String *name, const QV4::Value &value);
+void __qmljs_inplace_bit_and_name(QV4::ExecutionContext *ctx, QV4::String *name, const QV4::Value &value);
+void __qmljs_inplace_bit_or_name(QV4::ExecutionContext *ctx, QV4::String *name, const QV4::Value &value);
+void __qmljs_inplace_bit_xor_name(QV4::ExecutionContext *ctx, QV4::String *name, const QV4::Value &value);
+void __qmljs_inplace_add_name(QV4::ExecutionContext *ctx, QV4::String *name, const QV4::Value &value);
+void __qmljs_inplace_sub_name(QV4::ExecutionContext *ctx, QV4::String *name, const QV4::Value &value);
+void __qmljs_inplace_mul_name(QV4::ExecutionContext *ctx, QV4::String *name, const QV4::Value &value);
+void __qmljs_inplace_div_name(QV4::ExecutionContext *ctx, QV4::String *name, const QV4::Value &value);
+void __qmljs_inplace_mod_name(QV4::ExecutionContext *ctx, QV4::String *name, const QV4::Value &value);
+void __qmljs_inplace_shl_name(QV4::ExecutionContext *ctx, QV4::String *name, const QV4::Value &value);
+void __qmljs_inplace_shr_name(QV4::ExecutionContext *ctx, QV4::String *name, const QV4::Value &value);
+void __qmljs_inplace_ushr_name(QV4::ExecutionContext *ctx, QV4::String *name, const QV4::Value &value);
+
+typedef void (*InplaceBinOpElement)(QV4::ExecutionContext *ctx, const QV4::Value &base, const QV4::Value &index, const QV4::Value &rhs);
+void __qmljs_inplace_bit_and_element(QV4::ExecutionContext *ctx, const QV4::Value &base, const QV4::Value &index, const QV4::Value &rhs);
+void __qmljs_inplace_bit_or_element(QV4::ExecutionContext *ctx, const QV4::Value &base, const QV4::Value &index, const QV4::Value &rhs);
+void __qmljs_inplace_bit_xor_element(QV4::ExecutionContext *ctx, const QV4::Value &base, const QV4::Value &index, const QV4::Value &rhs);
+void __qmljs_inplace_add_element(QV4::ExecutionContext *ctx, const QV4::Value &base, const QV4::Value &index, const QV4::Value &rhs);
+void __qmljs_inplace_sub_element(QV4::ExecutionContext *ctx, const QV4::Value &base, const QV4::Value &index, const QV4::Value &rhs);
+void __qmljs_inplace_mul_element(QV4::ExecutionContext *ctx, const QV4::Value &base, const QV4::Value &index, const QV4::Value &rhs);
+void __qmljs_inplace_div_element(QV4::ExecutionContext *ctx, const QV4::Value &base, const QV4::Value &index, const QV4::Value &rhs);
+void __qmljs_inplace_mod_element(QV4::ExecutionContext *ctx, const QV4::Value &base, const QV4::Value &index, const QV4::Value &rhs);
+void __qmljs_inplace_shl_element(QV4::ExecutionContext *ctx, const QV4::Value &base, const QV4::Value &index, const QV4::Value &rhs);
+void __qmljs_inplace_shr_element(QV4::ExecutionContext *ctx, const QV4::Value &base, const QV4::Value &index, const QV4::Value &rhs);
+void __qmljs_inplace_ushr_element(QV4::ExecutionContext *ctx, const QV4::Value &base, const QV4::Value &index, const QV4::Value &rhs);
+
+typedef void (*InplaceBinOpMember)(QV4::ExecutionContext *ctx, const QV4::Value &base, QV4::String *name, const QV4::Value &rhs);
+void __qmljs_inplace_bit_and_member(QV4::ExecutionContext *ctx, const QV4::Value &base, QV4::String *name, const QV4::Value &rhs);
+void __qmljs_inplace_bit_or_member(QV4::ExecutionContext *ctx, const QV4::Value &base, QV4::String *name, const QV4::Value &rhs);
+void __qmljs_inplace_bit_xor_member(QV4::ExecutionContext *ctx, const QV4::Value &base, QV4::String *name, const QV4::Value &rhs);
+void __qmljs_inplace_add_member(QV4::ExecutionContext *ctx, const QV4::Value &base, QV4::String *name, const QV4::Value &rhs);
+void __qmljs_inplace_sub_member(QV4::ExecutionContext *ctx, const QV4::Value &base, QV4::String *name, const QV4::Value &rhs);
+void __qmljs_inplace_mul_member(QV4::ExecutionContext *ctx, const QV4::Value &base, QV4::String *name, const QV4::Value &rhs);
+void __qmljs_inplace_div_member(QV4::ExecutionContext *ctx, const QV4::Value &base, QV4::String *name, const QV4::Value &rhs);
+void __qmljs_inplace_mod_member(QV4::ExecutionContext *ctx, const QV4::Value &base, QV4::String *name, const QV4::Value &rhs);
+void __qmljs_inplace_shl_member(QV4::ExecutionContext *ctx, const QV4::Value &base, QV4::String *name, const QV4::Value &rhs);
+void __qmljs_inplace_shr_member(QV4::ExecutionContext *ctx, const QV4::Value &base, QV4::String *name, const QV4::Value &rhs);
+void __qmljs_inplace_ushr_member(QV4::ExecutionContext *ctx, const QV4::Value &base, QV4::String *name, const QV4::Value &rhs);
+
+typedef QV4::Bool (*CmpOp)(QV4::ExecutionContext *ctx, const QV4::Value &left, const QV4::Value &right);
+QV4::Bool __qmljs_cmp_gt(QV4::ExecutionContext *, const QV4::Value &left, const QV4::Value &right);
+QV4::Bool __qmljs_cmp_lt(QV4::ExecutionContext *, const QV4::Value &left, const QV4::Value &right);
+QV4::Bool __qmljs_cmp_ge(QV4::ExecutionContext *, const QV4::Value &left, const QV4::Value &right);
+QV4::Bool __qmljs_cmp_le(QV4::ExecutionContext *, const QV4::Value &left, const QV4::Value &right);
+QV4::Bool __qmljs_cmp_eq(QV4::ExecutionContext *, const QV4::Value &left, const QV4::Value &right);
+QV4::Bool __qmljs_cmp_ne(QV4::ExecutionContext *, const QV4::Value &left, const QV4::Value &right);
+QV4::Bool __qmljs_cmp_se(QV4::ExecutionContext *, const QV4::Value &left, const QV4::Value &right);
+QV4::Bool __qmljs_cmp_sne(QV4::ExecutionContext *, const QV4::Value &left, const QV4::Value &right);
+QV4::Bool __qmljs_cmp_instanceof(QV4::ExecutionContext *ctx, const QV4::Value &left, const QV4::Value &right);
+QV4::Bool __qmljs_cmp_in(QV4::ExecutionContext *ctx, const QV4::Value &left, const QV4::Value &right);
// type conversion and testing
-inline Value __qmljs_to_primitive(const Value &value, int typeHint)
+inline QV4::Value __qmljs_to_primitive(const QV4::Value &value, int typeHint)
{
- Object *o = value.asObject();
+ QV4::Object *o = value.asObject();
if (!o)
return value;
return __qmljs_object_default_value(o, typeHint);
}
-inline double __qmljs_to_number(const Value &value)
+inline double __qmljs_to_number(const QV4::Value &value)
{
switch (value.type()) {
- case Value::Undefined_Type:
+ case QV4::Value::Undefined_Type:
return std::numeric_limits<double>::quiet_NaN();
- case Value::Null_Type:
+ case QV4::Value::Null_Type:
return 0;
- case Value::Boolean_Type:
+ case QV4::Value::Boolean_Type:
return (value.booleanValue() ? 1. : 0.);
- case Value::Integer_Type:
+ case QV4::Value::Integer_Type:
return value.int_32;
- case Value::String_Type:
+ case QV4::Value::String_Type:
return __qmljs_string_to_number(value.stringValue()->toQString());
- case Value::Object_Type: {
- Value prim = __qmljs_to_primitive(value, NUMBER_HINT);
+ case QV4::Value::Object_Type: {
+ QV4::Value prim = __qmljs_to_primitive(value, QV4::NUMBER_HINT);
return __qmljs_to_number(prim);
}
default: // double
@@ -315,22 +318,22 @@ inline double __qmljs_to_number(const Value &value)
}
}
-inline Value __qmljs_to_string(const Value &value, ExecutionContext *ctx)
+inline QV4::Value __qmljs_to_string(const QV4::Value &value, QV4::ExecutionContext *ctx)
{
if (value.isString())
return value;
- return Value::fromString(__qmljs_convert_to_string(ctx, value));
+ return QV4::Value::fromString(__qmljs_convert_to_string(ctx, value));
}
-inline Value __qmljs_to_object(ExecutionContext *ctx, const Value &value)
+inline QV4::Value __qmljs_to_object(QV4::ExecutionContext *ctx, const QV4::Value &value)
{
if (value.isObject())
return value;
- return Value::fromObject(__qmljs_convert_to_object(ctx, value));
+ return QV4::Value::fromObject(__qmljs_convert_to_object(ctx, value));
}
-inline void __qmljs_uplus(Value *result, const Value &value)
+inline void __qmljs_uplus(QV4::Value *result, const QV4::Value &value)
{
TRACE1(value);
@@ -339,23 +342,23 @@ inline void __qmljs_uplus(Value *result, const Value &value)
return;
double n = __qmljs_to_number(value);
- *result = Value::fromDouble(n);
+ *result = QV4::Value::fromDouble(n);
}
-inline void __qmljs_uminus(Value *result, const Value &value)
+inline void __qmljs_uminus(QV4::Value *result, const QV4::Value &value)
{
TRACE1(value);
// +0 != -0, so we need to convert to double when negating 0
if (value.isInteger() && value.integerValue())
- *result = Value::fromInt32(-value.integerValue());
+ *result = QV4::Value::fromInt32(-value.integerValue());
else {
double n = __qmljs_to_number(value);
- *result = Value::fromDouble(-n);
+ *result = QV4::Value::fromDouble(-n);
}
}
-inline void __qmljs_compl(Value *result, const Value &value)
+inline void __qmljs_compl(QV4::Value *result, const QV4::Value &value)
{
TRACE1(value);
@@ -363,87 +366,87 @@ inline void __qmljs_compl(Value *result, const Value &value)
if (value.isConvertibleToInt())
n = value.int_32;
else
- n = Value::toInt32(__qmljs_to_number(value));
+ n = QV4::Value::toInt32(__qmljs_to_number(value));
- *result = Value::fromInt32(~n);
+ *result = QV4::Value::fromInt32(~n);
}
-inline void __qmljs_not(Value *result, const Value &value)
+inline void __qmljs_not(QV4::Value *result, const QV4::Value &value)
{
TRACE1(value);
bool b = value.toBoolean();
- *result = Value::fromBoolean(!b);
+ *result = QV4::Value::fromBoolean(!b);
}
// binary operators
-inline void __qmljs_bit_or(ExecutionContext *, Value *result, const Value &left, const Value &right)
+inline void __qmljs_bit_or(QV4::ExecutionContext *, QV4::Value *result, const QV4::Value &left, const QV4::Value &right)
{
TRACE2(left, right);
- if (Value::integerCompatible(left, right)) {
- *result = Value::fromInt32(left.integerValue() | right.integerValue());
+ if (QV4::Value::integerCompatible(left, right)) {
+ *result = QV4::Value::fromInt32(left.integerValue() | right.integerValue());
return;
}
- int lval = Value::toInt32(__qmljs_to_number(left));
- int rval = Value::toInt32(__qmljs_to_number(right));
- *result = Value::fromInt32(lval | rval);
+ int lval = QV4::Value::toInt32(__qmljs_to_number(left));
+ int rval = QV4::Value::toInt32(__qmljs_to_number(right));
+ *result = QV4::Value::fromInt32(lval | rval);
}
-inline void __qmljs_bit_xor(ExecutionContext *, Value *result, const Value &left, const Value &right)
+inline void __qmljs_bit_xor(QV4::ExecutionContext *, QV4::Value *result, const QV4::Value &left, const QV4::Value &right)
{
TRACE2(left, right);
- if (Value::integerCompatible(left, right)) {
- *result = Value::fromInt32(left.integerValue() ^ right.integerValue());
+ if (QV4::Value::integerCompatible(left, right)) {
+ *result = QV4::Value::fromInt32(left.integerValue() ^ right.integerValue());
return;
}
- int lval = Value::toInt32(__qmljs_to_number(left));
- int rval = Value::toInt32(__qmljs_to_number(right));
- *result = Value::fromInt32(lval ^ rval);
+ int lval = QV4::Value::toInt32(__qmljs_to_number(left));
+ int rval = QV4::Value::toInt32(__qmljs_to_number(right));
+ *result = QV4::Value::fromInt32(lval ^ rval);
}
-inline void __qmljs_bit_and(ExecutionContext *, Value *result, const Value &left, const Value &right)
+inline void __qmljs_bit_and(QV4::ExecutionContext *, QV4::Value *result, const QV4::Value &left, const QV4::Value &right)
{
TRACE2(left, right);
- if (Value::integerCompatible(left, right)) {
- *result = Value::fromInt32(left.integerValue() & right.integerValue());
+ if (QV4::Value::integerCompatible(left, right)) {
+ *result = QV4::Value::fromInt32(left.integerValue() & right.integerValue());
return;
}
- int lval = Value::toInt32(__qmljs_to_number(left));
- int rval = Value::toInt32(__qmljs_to_number(right));
- *result = Value::fromInt32(lval & rval);
+ int lval = QV4::Value::toInt32(__qmljs_to_number(left));
+ int rval = QV4::Value::toInt32(__qmljs_to_number(right));
+ *result = QV4::Value::fromInt32(lval & rval);
}
-inline void __qmljs_add(ExecutionContext *ctx, Value *result, const Value &left, const Value &right)
+inline void __qmljs_add(QV4::ExecutionContext *ctx, QV4::Value *result, const QV4::Value &left, const QV4::Value &right)
{
TRACE2(left, right);
#ifdef QMLJS_INLINE_MATH
- if (Value::integerCompatible(left, right)) {
+ if (QV4::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 (QV4::Value::bothDouble(left, right)) {
+ *result = QV4::Value::fromDouble(left.doubleValue() + right.doubleValue());
return;
}
__qmljs_add_helper(ctx, result, left, right);
}
-inline void __qmljs_sub(ExecutionContext *, Value *result, const Value &left, const Value &right)
+inline void __qmljs_sub(QV4::ExecutionContext *, QV4::Value *result, const QV4::Value &left, const QV4::Value &right)
{
TRACE2(left, right);
#ifdef QMLJS_INLINE_MATH
- if (Value::integerCompatible(left, right)) {
+ if (QV4::Value::integerCompatible(left, right)) {
*result = sub_int32(left.integerValue(), right.integerValue());
return;
}
@@ -451,15 +454,15 @@ inline void __qmljs_sub(ExecutionContext *, Value *result, const Value &left, co
double lval = __qmljs_to_number(left);
double rval = __qmljs_to_number(right);
- *result = Value::fromDouble(lval - rval);
+ *result = QV4::Value::fromDouble(lval - rval);
}
-inline void __qmljs_mul(ExecutionContext *, Value *result, const Value &left, const Value &right)
+inline void __qmljs_mul(QV4::ExecutionContext *, QV4::Value *result, const QV4::Value &left, const QV4::Value &right)
{
TRACE2(left, right);
#ifdef QMLJS_INLINE_MATH
- if (Value::integerCompatible(left, right)) {
+ if (QV4::Value::integerCompatible(left, right)) {
*result = mul_int32(left.integerValue(), right.integerValue());
return;
}
@@ -467,150 +470,150 @@ inline void __qmljs_mul(ExecutionContext *, Value *result, const Value &left, co
double lval = __qmljs_to_number(left);
double rval = __qmljs_to_number(right);
- *result = Value::fromDouble(lval * rval);
+ *result = QV4::Value::fromDouble(lval * rval);
}
-inline void __qmljs_div(ExecutionContext *, Value *result, const Value &left, const Value &right)
+inline void __qmljs_div(QV4::ExecutionContext *, QV4::Value *result, const QV4::Value &left, const QV4::Value &right)
{
TRACE2(left, right);
double lval = __qmljs_to_number(left);
double rval = __qmljs_to_number(right);
- *result = Value::fromDouble(lval / rval);
+ *result = QV4::Value::fromDouble(lval / rval);
}
-inline void __qmljs_mod(ExecutionContext *, Value *result, const Value &left, const Value &right)
+inline void __qmljs_mod(QV4::ExecutionContext *, QV4::Value *result, const QV4::Value &left, const QV4::Value &right)
{
TRACE2(left, right);
- if (Value::integerCompatible(left, right) && right.integerValue() != 0) {
+ if (QV4::Value::integerCompatible(left, right) && right.integerValue() != 0) {
int intRes = left.integerValue() % right.integerValue();
if (intRes != 0 || left.integerValue() >= 0) {
- *result = Value::fromInt32(intRes);
+ *result = QV4::Value::fromInt32(intRes);
return;
}
}
double lval = __qmljs_to_number(left);
double rval = __qmljs_to_number(right);
- *result = Value::fromDouble(fmod(lval, rval));
+ *result = QV4::Value::fromDouble(fmod(lval, rval));
}
-inline void __qmljs_shl(ExecutionContext *, Value *result, const Value &left, const Value &right)
+inline void __qmljs_shl(QV4::ExecutionContext *, QV4::Value *result, const QV4::Value &left, const QV4::Value &right)
{
TRACE2(left, right);
- if (Value::integerCompatible(left, right)) {
- *result = Value::fromInt32(left.integerValue() << ((uint(right.integerValue()) & 0x1f)));
+ if (QV4::Value::integerCompatible(left, right)) {
+ *result = QV4::Value::fromInt32(left.integerValue() << ((uint(right.integerValue()) & 0x1f)));
return;
}
- int lval = Value::toInt32(__qmljs_to_number(left));
- unsigned rval = Value::toUInt32(__qmljs_to_number(right)) & 0x1f;
- *result = Value::fromInt32(lval << rval);
+ int lval = QV4::Value::toInt32(__qmljs_to_number(left));
+ unsigned rval = QV4::Value::toUInt32(__qmljs_to_number(right)) & 0x1f;
+ *result = QV4::Value::fromInt32(lval << rval);
}
-inline void __qmljs_shr(ExecutionContext *, Value *result, const Value &left, const Value &right)
+inline void __qmljs_shr(QV4::ExecutionContext *, QV4::Value *result, const QV4::Value &left, const QV4::Value &right)
{
TRACE2(left, right);
- if (Value::integerCompatible(left, right)) {
- *result = Value::fromInt32(left.integerValue() >> ((uint(right.integerValue()) & 0x1f)));
+ if (QV4::Value::integerCompatible(left, right)) {
+ *result = QV4::Value::fromInt32(left.integerValue() >> ((uint(right.integerValue()) & 0x1f)));
return;
}
- int lval = Value::toInt32(__qmljs_to_number(left));
- unsigned rval = Value::toUInt32(__qmljs_to_number(right)) & 0x1f;
- *result = Value::fromInt32(lval >> rval);
+ int lval = QV4::Value::toInt32(__qmljs_to_number(left));
+ unsigned rval = QV4::Value::toUInt32(__qmljs_to_number(right)) & 0x1f;
+ *result = QV4::Value::fromInt32(lval >> rval);
}
-inline void __qmljs_ushr(ExecutionContext *, Value *result, const Value &left, const Value &right)
+inline void __qmljs_ushr(QV4::ExecutionContext *, QV4::Value *result, const QV4::Value &left, const QV4::Value &right)
{
TRACE2(left, right);
uint res;
- if (Value::integerCompatible(left, right)) {
+ if (QV4::Value::integerCompatible(left, right)) {
res = uint(left.integerValue()) >> (uint(right.integerValue()) & 0x1f);
} else {
- unsigned lval = Value::toUInt32(__qmljs_to_number(left));
- unsigned rval = Value::toUInt32(__qmljs_to_number(right)) & 0x1f;
+ unsigned lval = QV4::Value::toUInt32(__qmljs_to_number(left));
+ unsigned rval = QV4::Value::toUInt32(__qmljs_to_number(right)) & 0x1f;
res = lval >> rval;
}
if (res > INT_MAX)
- *result = Value::fromDouble(res);
+ *result = QV4::Value::fromDouble(res);
else
- *result = Value::fromInt32(res);
+ *result = QV4::Value::fromInt32(res);
}
-inline void __qmljs_gt(ExecutionContext *ctx, Value *result, const Value &left, const Value &right)
+inline void __qmljs_gt(QV4::ExecutionContext *ctx, QV4::Value *result, const QV4::Value &left, const QV4::Value &right)
{
TRACE2(left, right);
- *result = Value::fromBoolean(__qmljs_cmp_gt(ctx, left, right));
+ *result = QV4::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(QV4::ExecutionContext *ctx, QV4::Value *result, const QV4::Value &left, const QV4::Value &right)
{
TRACE2(left, right);
- *result = Value::fromBoolean(__qmljs_cmp_lt(ctx, left, right));
+ *result = QV4::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(QV4::ExecutionContext *ctx, QV4::Value *result, const QV4::Value &left, const QV4::Value &right)
{
TRACE2(left, right);
- *result = Value::fromBoolean(__qmljs_cmp_ge(ctx, left, right));
+ *result = QV4::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(QV4::ExecutionContext *ctx, QV4::Value *result, const QV4::Value &left, const QV4::Value &right)
{
TRACE2(left, right);
- *result = Value::fromBoolean(__qmljs_cmp_le(ctx, left, right));
+ *result = QV4::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(QV4::ExecutionContext *ctx, QV4::Value *result, const QV4::Value &left, const QV4::Value &right)
{
TRACE2(left, right);
- *result = Value::fromBoolean(__qmljs_cmp_eq(ctx, left, right));
+ *result = QV4::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(QV4::ExecutionContext *ctx, QV4::Value *result, const QV4::Value &left, const QV4::Value &right)
{
TRACE2(left, right);
- *result = Value::fromBoolean(!__qmljs_cmp_eq(ctx, left, right));
+ *result = QV4::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(QV4::ExecutionContext *, QV4::Value *result, const QV4::Value &left, const QV4::Value &right)
{
TRACE2(left, right);
bool r = __qmljs_strict_equal(left, right);
- *result = Value::fromBoolean(r);
+ *result = QV4::Value::fromBoolean(r);
}
-inline void __qmljs_sne(ExecutionContext *, Value *result, const Value &left, const Value &right)
+inline void __qmljs_sne(QV4::ExecutionContext *, QV4::Value *result, const QV4::Value &left, const QV4::Value &right)
{
TRACE2(left, right);
bool r = ! __qmljs_strict_equal(left, right);
- *result = Value::fromBoolean(r);
+ *result = QV4::Value::fromBoolean(r);
}
-inline Bool __qmljs_cmp_gt(ExecutionContext *, const Value &left, const Value &right)
+inline QV4::Bool __qmljs_cmp_gt(QV4::ExecutionContext *, const QV4::Value &left, const QV4::Value &right)
{
TRACE2(left, right);
- if (Value::integerCompatible(left, right))
+ if (QV4::Value::integerCompatible(left, right))
return left.integerValue() > right.integerValue();
- Value l = __qmljs_to_primitive(left, NUMBER_HINT);
- Value r = __qmljs_to_primitive(right, NUMBER_HINT);
+ QV4::Value l = __qmljs_to_primitive(left, QV4::NUMBER_HINT);
+ QV4::Value r = __qmljs_to_primitive(right, QV4::NUMBER_HINT);
- if (Value::bothDouble(l, r)) {
+ if (QV4::Value::bothDouble(l, r)) {
return l.doubleValue() > r.doubleValue();
} else if (l.isString() && r.isString()) {
return r.stringValue()->compare(l.stringValue());
@@ -621,16 +624,16 @@ inline Bool __qmljs_cmp_gt(ExecutionContext *, const Value &left, const Value &r
}
}
-inline Bool __qmljs_cmp_lt(ExecutionContext *, const Value &left, const Value &right)
+inline QV4::Bool __qmljs_cmp_lt(QV4::ExecutionContext *, const QV4::Value &left, const QV4::Value &right)
{
TRACE2(left, right);
- if (Value::integerCompatible(left, right))
+ if (QV4::Value::integerCompatible(left, right))
return left.integerValue() < right.integerValue();
- Value l = __qmljs_to_primitive(left, NUMBER_HINT);
- Value r = __qmljs_to_primitive(right, NUMBER_HINT);
+ QV4::Value l = __qmljs_to_primitive(left, QV4::NUMBER_HINT);
+ QV4::Value r = __qmljs_to_primitive(right, QV4::NUMBER_HINT);
- if (Value::bothDouble(l, r)) {
+ if (QV4::Value::bothDouble(l, r)) {
return l.doubleValue() < r.doubleValue();
} else if (l.isString() && r.isString()) {
return l.stringValue()->compare(r.stringValue());
@@ -641,16 +644,16 @@ inline Bool __qmljs_cmp_lt(ExecutionContext *, const Value &left, const Value &r
}
}
-inline Bool __qmljs_cmp_ge(ExecutionContext *, const Value &left, const Value &right)
+inline QV4::Bool __qmljs_cmp_ge(QV4::ExecutionContext *, const QV4::Value &left, const QV4::Value &right)
{
TRACE2(left, right);
- if (Value::integerCompatible(left, right))
+ if (QV4::Value::integerCompatible(left, right))
return left.integerValue() >= right.integerValue();
- Value l = __qmljs_to_primitive(left, NUMBER_HINT);
- Value r = __qmljs_to_primitive(right, NUMBER_HINT);
+ QV4::Value l = __qmljs_to_primitive(left, QV4::NUMBER_HINT);
+ QV4::Value r = __qmljs_to_primitive(right, QV4::NUMBER_HINT);
- if (Value::bothDouble(l, r)) {
+ if (QV4::Value::bothDouble(l, r)) {
return l.doubleValue() >= r.doubleValue();
} else if (l.isString() && r.isString()) {
return !l.stringValue()->compare(r.stringValue());
@@ -661,16 +664,16 @@ inline Bool __qmljs_cmp_ge(ExecutionContext *, const Value &left, const Value &r
}
}
-inline Bool __qmljs_cmp_le(ExecutionContext *, const Value &left, const Value &right)
+inline QV4::Bool __qmljs_cmp_le(QV4::ExecutionContext *, const QV4::Value &left, const QV4::Value &right)
{
TRACE2(left, right);
- if (Value::integerCompatible(left, right))
+ if (QV4::Value::integerCompatible(left, right))
return left.integerValue() <= right.integerValue();
- Value l = __qmljs_to_primitive(left, NUMBER_HINT);
- Value r = __qmljs_to_primitive(right, NUMBER_HINT);
+ QV4::Value l = __qmljs_to_primitive(left, QV4::NUMBER_HINT);
+ QV4::Value r = __qmljs_to_primitive(right, QV4::NUMBER_HINT);
- if (Value::bothDouble(l, r)) {
+ if (QV4::Value::bothDouble(l, r)) {
return l.doubleValue() <= r.doubleValue();
} else if (l.isString() && r.isString()) {
return !r.stringValue()->compare(l.stringValue());
@@ -681,12 +684,12 @@ inline Bool __qmljs_cmp_le(ExecutionContext *, const Value &left, const Value &r
}
}
-inline Bool __qmljs_cmp_eq(ExecutionContext *, const Value &left, const Value &right)
+inline QV4::Bool __qmljs_cmp_eq(QV4::ExecutionContext *, const QV4::Value &left, const QV4::Value &right)
{
TRACE2(left, right);
// need to test for doubles first as NaN != NaN
- if (Value::bothDouble(left, right))
+ if (QV4::Value::bothDouble(left, right))
return left.doubleValue() == right.doubleValue();
if (left.val == right.val)
return true;
@@ -696,49 +699,45 @@ inline Bool __qmljs_cmp_eq(ExecutionContext *, const Value &left, const Value &r
return __qmljs_equal(left, right);
}
-inline Bool __qmljs_cmp_ne(ExecutionContext *, const Value &left, const Value &right)
+inline QV4::Bool __qmljs_cmp_ne(QV4::ExecutionContext *, const QV4::Value &left, const QV4::Value &right)
{
TRACE2(left, right);
return !__qmljs_cmp_eq(0, left, right);
}
-inline Bool __qmljs_cmp_se(ExecutionContext *, const Value &left, const Value &right)
+inline QV4::Bool __qmljs_cmp_se(QV4::ExecutionContext *, const QV4::Value &left, const QV4::Value &right)
{
TRACE2(left, right);
return __qmljs_strict_equal(left, right);
}
-inline Bool __qmljs_cmp_sne(ExecutionContext *, const Value &left, const Value &right)
+inline QV4::Bool __qmljs_cmp_sne(QV4::ExecutionContext *, const QV4::Value &left, const QV4::Value &right)
{
TRACE2(left, right);
return ! __qmljs_strict_equal(left, right);
}
-inline Bool __qmljs_cmp_instanceof(ExecutionContext *ctx, const Value &left, const Value &right)
+inline QV4::Bool __qmljs_cmp_instanceof(QV4::ExecutionContext *ctx, const QV4::Value &left, const QV4::Value &right)
{
TRACE2(left, right);
- Value v;
+ QV4::Value v;
__qmljs_instanceof(ctx, &v, left, right);
return v.booleanValue();
}
-inline uint __qmljs_cmp_in(ExecutionContext *ctx, const Value &left, const Value &right)
+inline uint __qmljs_cmp_in(QV4::ExecutionContext *ctx, const QV4::Value &left, const QV4::Value &right)
{
TRACE2(left, right);
- Value v;
+ QV4::Value v;
__qmljs_in(ctx, &v, left, right);
return v.booleanValue();
}
} // extern "C"
-}
-
-QT_END_NAMESPACE
-
#endif // QMLJS_RUNTIME_H
diff --git a/src/qml/qml/v4vm/qv4value_p.h b/src/qml/qml/v4vm/qv4value_p.h
index 24df037f83..02da8f2df8 100644
--- a/src/qml/qml/v4vm/qv4value_p.h
+++ b/src/qml/qml/v4vm/qv4value_p.h
@@ -41,6 +41,8 @@
#ifndef QMLJS_VALUE_H
#define QMLJS_VALUE_H
+#include <cmath> // this HAS to come
+
#include <QtCore/QString>
#include <QtCore/qnumeric.h>
#include "qv4global_p.h"
@@ -59,12 +61,16 @@ struct ExecutionContext;
struct ExecutionEngine;
struct Value;
+}
+
extern "C" {
-double __qmljs_to_number(const Value &value);
-Q_QML_EXPORT String *__qmljs_convert_to_string(ExecutionContext *ctx, const Value &value);
-Object *__qmljs_convert_to_object(ExecutionContext *ctx, const Value &value);
+double __qmljs_to_number(const QV4::Value &value);
+Q_QML_EXPORT QV4::String *__qmljs_convert_to_string(QV4::ExecutionContext *ctx, const QV4::Value &value);
+QV4::Object *__qmljs_convert_to_object(QV4::ExecutionContext *ctx, const QV4::Value &value);
}
+namespace QV4 {
+
typedef uint Bool;