diff options
author | Erik Verbruggen <erik.verbruggen@me.com> | 2013-04-19 21:24:46 +0200 |
---|---|---|
committer | Lars Knoll <lars.knoll@digia.com> | 2013-04-19 22:02:24 +0200 |
commit | d07ba94f799a7829d6894960e62316f6d40d4dc0 (patch) | |
tree | 9382c4fe91c199dfdb4e26bdf8b0c335068e285c /src | |
parent | 20788d8f75f38830946fea65db7e47b82fec1034 (diff) |
Some build-fixes for pedantic compilers.
Most of the change comes down to just one issue. If you write:
extern "C" { void something(); }
namespace Nowhere { extern "C" { void something() {} } }
.. then any use of something might be considered ambigous by some
compilers. This seems to be an edge-case that is not clear in the spec.
Change-Id: I90e32539d6bd35b6ecca7816349f18d7573cbd2f
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/3rdparty/masm/wtf/OSAllocatorPosix.cpp | 2 | ||||
-rw-r--r-- | src/qml/qml/v4vm/moth/qv4instr_moth_p.h | 10 | ||||
-rw-r--r-- | src/qml/qml/v4vm/moth/qv4isel_moth.cpp | 130 | ||||
-rw-r--r-- | src/qml/qml/v4vm/qv4_llvm_p.h | 2 | ||||
-rw-r--r-- | src/qml/qml/v4vm/qv4isel_llvm.cpp | 318 | ||||
-rw-r--r-- | src/qml/qml/v4vm/qv4isel_llvm_p.h | 146 | ||||
-rw-r--r-- | src/qml/qml/v4vm/qv4isel_masm.cpp | 10 | ||||
-rw-r--r-- | src/qml/qml/v4vm/qv4isel_masm_p.h | 2 | ||||
-rw-r--r-- | src/qml/qml/v4vm/qv4runtime_p.h | 559 | ||||
-rw-r--r-- | src/qml/qml/v4vm/qv4value_p.h | 12 |
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; |