Fix interpreter regression in callBuiltinInvalid.
authorErik Verbruggen <erik.verbruggen@me.com>
Wed, 16 Jan 2013 15:29:28 +0000 (16:29 +0100)
committerSimon Hausmann <simon.hausmann@digia.com>
Thu, 17 Jan 2013 14:34:54 +0000 (15:34 +0100)
Also changed the method signature to be more precise and less
error-prone.

Change-Id: I131a0cf90167743341faa5de3e70815c90ccd989
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
moth/qv4isel_moth.cpp
moth/qv4isel_moth_p.h
qv4isel_llvm.cpp
qv4isel_llvm_p.h
qv4isel_masm.cpp
qv4isel_masm_p.h
qv4isel_p.cpp
qv4isel_p.h

index 1267534..db8d61c 100644 (file)
@@ -692,12 +692,12 @@ void InstructionSelection::visitRet(IR::Ret *s)
     addInstruction(ret);
 }
 
-void InstructionSelection::callBuiltinInvalid(IR::Expr *func, IR::ExprList *args, IR::Temp *result)
+void InstructionSelection::callBuiltinInvalid(IR::Name *func, IR::ExprList *args, IR::Temp *result)
 {
     const int scratchIndex = scratchTempIndex();
 
     Instruction::LoadName load;
-    load.name = engine()->newString(*func->asCall()->base->asName()->id);
+    load.name = engine()->newString(*func->id);
     load.targetTempIndex = scratchIndex;
     addInstruction(load);
 
index 58c7969..9a893a2 100644 (file)
@@ -24,7 +24,7 @@ protected:
     virtual void visitCJump(IR::CJump *);
     virtual void visitRet(IR::Ret *);
 
-    virtual void callBuiltinInvalid(IR::Expr *func, IR::ExprList *args, IR::Temp *result);
+    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);
index 269dabd..cc39ed8 100644 (file)
@@ -300,7 +300,7 @@ void InstructionSelection::buildLLVMModule(IR::Module *module, llvm::Module *llv
     qSwap(_llvmModule, llvmModule);
 }
 
-void InstructionSelection::callBuiltinInvalid(IR::Expr *func, IR::ExprList *args, IR::Temp *result)
+void InstructionSelection::callBuiltinInvalid(IR::Name *func, IR::ExprList *args, IR::Temp *result)
 {
     // TODO
     assert(!"TODO!");
index 1cd1004..c41eead 100644 (file)
@@ -70,7 +70,7 @@ public:
     void buildLLVMModule(IR::Module *module, llvm::Module *llvmModule, llvm::FunctionPassManager *fpm);
 
 public: // methods from InstructionSelection:
-    virtual void callBuiltinInvalid(IR::Expr *func, IR::ExprList *args, IR::Temp *result);
+    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);
index 1c78dc6..cbaf24c 100644 (file)
@@ -428,7 +428,7 @@ void InstructionSelection::run(VM::Function *vmFunction, IR::Function *function)
     _asm = oldAssembler;
 }
 
-void InstructionSelection::callBuiltinInvalid(IR::Expr *func, IR::ExprList *args, IR::Temp *result)
+void InstructionSelection::callBuiltinInvalid(IR::Name *func, IR::ExprList *args, IR::Temp *result)
 {
     callRuntimeMethod(result, __qmljs_call_activation_property, func, args);
 }
index e1eb16b..bf78cfc 100644 (file)
@@ -652,7 +652,7 @@ public:
     virtual void run(VM::Function *vmFunction, IR::Function *function);
 
 protected:
-    virtual void callBuiltinInvalid(IR::Expr *func, IR::ExprList *args, IR::Temp *result);
+    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);
index 3ced578..42ffbcf 100644 (file)
@@ -224,7 +224,7 @@ void InstructionSelection::callBuiltin(IR::Call *call, IR::Temp *result)
 
     switch (baseName->builtin) {
     case IR::Name::builtin_invalid:
-        callBuiltinInvalid(call->base, call->args, result);
+        callBuiltinInvalid(baseName, call->args, result);
         return;
 
     case IR::Name::builtin_typeof: {
index 275c3ec..810443c 100644 (file)
@@ -80,7 +80,7 @@ public: // visitor methods for StmtVisitor:
     virtual void visitExp(IR::Exp *s);
 
 public: // to implement by subclasses:
-    virtual void callBuiltinInvalid(IR::Expr *func, IR::ExprList *args, IR::Temp *result) = 0;
+    virtual void callBuiltinInvalid(IR::Name *func, IR::ExprList *args, IR::Temp *result) = 0;
     virtual void callBuiltinTypeofMember(IR::Temp *base, const QString &name, IR::Temp *result) = 0;
     virtual void callBuiltinTypeofSubscript(IR::Temp *base, IR::Temp *index, IR::Temp *result) = 0;
     virtual void callBuiltinTypeofName(const QString &name, IR::Temp *result) = 0;