diff options
author | Lars Knoll <lars.knoll@digia.com> | 2013-10-18 15:42:17 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-10-29 10:38:45 +0100 |
commit | 5229a8b259286c9ea61036fd6b4bd0039104a206 (patch) | |
tree | 277d62ecedeaf703ce778d86f8cbcb94b9a57fe2 /src/qml/compiler/qv4regalloc.cpp | |
parent | 570686d42176af193b15abfe4b7bc17d831f4cf6 (diff) |
Rework exception handling
Start the work to remove c++ exceptions from our JS
exception handling. Rather rely on engine->hasException.
Check the flag after we return from any runtime call in the
JIT.
Implement new try/catch handling code in qv4codegen and
for the JIT that doesn't rely on exceptions. As an added
bonus, we can remove the Try statement in the IR.
Change-Id: Ic95addd6ae03371c43c47e04cac26afdce23a061
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'src/qml/compiler/qv4regalloc.cpp')
-rw-r--r-- | src/qml/compiler/qv4regalloc.cpp | 7 |
1 files changed, 2 insertions, 5 deletions
diff --git a/src/qml/compiler/qv4regalloc.cpp b/src/qml/compiler/qv4regalloc.cpp index c35ee860f7..5d1265b4b6 100644 --- a/src/qml/compiler/qv4regalloc.cpp +++ b/src/qml/compiler/qv4regalloc.cpp @@ -193,7 +193,8 @@ protected: // IRDecoder virtual void callBuiltinDeleteName(const QString &, V4IR::Temp *) {} virtual void callBuiltinDeleteValue(V4IR::Temp *) {} virtual void callBuiltinThrow(V4IR::Expr *) {} - virtual void callBuiltinFinishTry() {} + virtual void callBuiltinReThrow() {} + virtual void callBuiltinPushCatchScope(const QString &) {}; virtual void callBuiltinForeachIteratorObject(V4IR::Temp *, V4IR::Temp *) {} virtual void callBuiltinForeachNextProperty(V4IR::Temp *, V4IR::Temp *) {} virtual void callBuiltinForeachNextPropertyname(V4IR::Temp *, V4IR::Temp *) {} @@ -506,9 +507,6 @@ protected: // IRDecoder virtual void visitRet(V4IR::Ret *s) { addUses(s->expr->asTemp(), Use::CouldHaveRegister); } - virtual void visitTry(V4IR::Try *) - { Q_UNREACHABLE(); } // this should never happen, we do not optimize when there is a try in the function - virtual void visitPhi(V4IR::Phi *s) { addDef(s->targetTemp, true); @@ -954,7 +952,6 @@ protected: virtual void visitJump(Jump *) {} virtual void visitCJump(CJump *s) { s->cond->accept(this); } virtual void visitRet(Ret *s) { s->expr->accept(this); } - virtual void visitTry(Try *) { Q_UNREACHABLE(); } virtual void visitPhi(Phi *) {} }; } // anonymous namespace |