From ecb3f397b6c7d0fc49b85b36789834721cd05304 Mon Sep 17 00:00:00 2001 From: Erik Verbruggen Date: Wed, 16 Jan 2013 16:29:28 +0100 Subject: [PATCH] Fix interpreter regression in callBuiltinInvalid. Also changed the method signature to be more precise and less error-prone. Change-Id: I131a0cf90167743341faa5de3e70815c90ccd989 Reviewed-by: Simon Hausmann --- moth/qv4isel_moth.cpp | 4 ++-- moth/qv4isel_moth_p.h | 2 +- qv4isel_llvm.cpp | 2 +- qv4isel_llvm_p.h | 2 +- qv4isel_masm.cpp | 2 +- qv4isel_masm_p.h | 2 +- qv4isel_p.cpp | 2 +- qv4isel_p.h | 2 +- 8 files changed, 9 insertions(+), 9 deletions(-) diff --git a/moth/qv4isel_moth.cpp b/moth/qv4isel_moth.cpp index 1267534..db8d61c 100644 --- a/moth/qv4isel_moth.cpp +++ b/moth/qv4isel_moth.cpp @@ -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); diff --git a/moth/qv4isel_moth_p.h b/moth/qv4isel_moth_p.h index 58c7969..9a893a2 100644 --- a/moth/qv4isel_moth_p.h +++ b/moth/qv4isel_moth_p.h @@ -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); diff --git a/qv4isel_llvm.cpp b/qv4isel_llvm.cpp index 269dabd..cc39ed8 100644 --- a/qv4isel_llvm.cpp +++ b/qv4isel_llvm.cpp @@ -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!"); diff --git a/qv4isel_llvm_p.h b/qv4isel_llvm_p.h index 1cd1004..c41eead 100644 --- a/qv4isel_llvm_p.h +++ b/qv4isel_llvm_p.h @@ -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); diff --git a/qv4isel_masm.cpp b/qv4isel_masm.cpp index 1c78dc6..cbaf24c 100644 --- a/qv4isel_masm.cpp +++ b/qv4isel_masm.cpp @@ -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); } diff --git a/qv4isel_masm_p.h b/qv4isel_masm_p.h index e1eb16b..bf78cfc 100644 --- a/qv4isel_masm_p.h +++ b/qv4isel_masm_p.h @@ -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); diff --git a/qv4isel_p.cpp b/qv4isel_p.cpp index 3ced578..42ffbcf 100644 --- a/qv4isel_p.cpp +++ b/qv4isel_p.cpp @@ -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: { diff --git a/qv4isel_p.h b/qv4isel_p.h index 275c3ec..810443c 100644 --- a/qv4isel_p.h +++ b/qv4isel_p.h @@ -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; -- 2.7.4