Some build-fixes for pedantic compilers.
authorErik Verbruggen <erik.verbruggen@me.com>
Fri, 19 Apr 2013 19:24:46 +0000 (21:24 +0200)
committerLars Knoll <lars.knoll@digia.com>
Fri, 19 Apr 2013 20:02:24 +0000 (22:02 +0200)
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>
src/3rdparty/masm/wtf/OSAllocatorPosix.cpp
src/qml/qml/v4vm/moth/qv4instr_moth_p.h
src/qml/qml/v4vm/moth/qv4isel_moth.cpp
src/qml/qml/v4vm/qv4_llvm_p.h
src/qml/qml/v4vm/qv4isel_llvm.cpp
src/qml/qml/v4vm/qv4isel_llvm_p.h
src/qml/qml/v4vm/qv4isel_masm.cpp
src/qml/qml/v4vm/qv4isel_masm_p.h
src/qml/qml/v4vm/qv4runtime_p.h
src/qml/qml/v4vm/qv4value_p.h

index 7b2a55c..d8c8e03 100644 (file)
@@ -28,6 +28,8 @@
 
 #if OS(UNIX)
 
+#include <cstdlib>
+
 #include "PageAllocation.h"
 #include <errno.h>
 #include <sys/mman.h>
index 599fa00..1c2dd6f 100644 (file)
@@ -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;
     };
index 14010de..2425008 100644 (file)
@@ -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;
     }
 
index 8655461..773cdef 100644 (file)
@@ -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
 
index 0769158..7e4b809 100644 (file)
@@ -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();
index 00b6527..bdda28c 100644 (file)
@@ -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;
index f6f79b8..4137f39 100644 (file)
@@ -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;
index 7b9c21e..3ce29bd 100644 (file)
@@ -601,7 +601,7 @@ public:
 
     struct BinaryOperationInfo {
         const char *name;
-        QV4::BinOp fallbackImplementation;
+        BinOp fallbackImplementation;
         MemRegBinOp inlineMemRegOp;
         ImmRegBinOp inlineImmRegOp;
     };
index 8edb618..e9510d3 100644 (file)
@@ -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
index 24df037..02da8f2 100644 (file)
@@ -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;