Changeset 126718 in webkit for trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp
- Timestamp:
- Aug 26, 2012, 5:49:25 PM (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp
r124729 r126718 1971 1971 generator.emitDebugHook(WillExecuteStatement, firstLine(), lastLine(), column()); 1972 1972 1973 ASSERT(m_catchBlock || m_finallyBlock); 1974 1973 1975 RefPtr<Label> tryStartLabel = generator.newLabel(); 1976 generator.emitLabel(tryStartLabel.get()); 1977 1974 1978 if (m_finallyBlock) 1975 1979 generator.pushFinallyContext(m_finallyBlock); 1976 1977 generator.emitLabel(tryStartLabel.get()); 1980 TryData* tryData = generator.pushTry(tryStartLabel.get()); 1981 1978 1982 generator.emitNode(dst, m_tryBlock); 1979 1983 … … 1986 1990 // Uncaught exception path: the catch block. 1987 1991 RefPtr<Label> here = generator.emitLabel(generator.newLabel().get()); 1988 RefPtr<RegisterID> exceptionRegister = generator.emitCatch(generator.newTemporary(), tryStartLabel.get(), here.get()); 1992 RefPtr<RegisterID> exceptionRegister = generator.popTryAndEmitCatch(tryData, generator.newTemporary(), here.get()); 1993 1994 if (m_finallyBlock) { 1995 // If the catch block throws an exception and we have a finally block, then the finally 1996 // block should "catch" that exception. 1997 tryData = generator.pushTry(here.get()); 1998 } 1999 1989 2000 generator.emitPushNewScope(exceptionRegister.get(), m_exceptionIdent, exceptionRegister.get()); 1990 2001 generator.emitNode(dst, m_catchBlock); … … 1994 2005 1995 2006 if (m_finallyBlock) { 2007 RefPtr<Label> preFinallyLabel = generator.emitLabel(generator.newLabel().get()); 2008 1996 2009 generator.popFinallyContext(); 1997 2010 … … 2003 2016 2004 2017 // Uncaught exception path: invoke the finally block, then re-throw the exception. 2005 RefPtr<Label> here = generator.emitLabel(generator.newLabel().get()); 2006 RefPtr<RegisterID> tempExceptionRegister = generator.emitCatch(generator.newTemporary(), tryStartLabel.get(), here.get()); 2018 RefPtr<RegisterID> tempExceptionRegister = generator.popTryAndEmitCatch(tryData, generator.newTemporary(), preFinallyLabel.get()); 2007 2019 generator.emitNode(dst, m_finallyBlock); 2008 2020 generator.emitThrow(tempExceptionRegister.get());
Note:
See TracChangeset
for help on using the changeset viewer.