Changeset 113136 in webkit for trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp
- Timestamp:
- Apr 3, 2012, 9:25:56 PM (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp
r112555 r113136 2 2 * Copyright (C) 1999-2002 Harri Porten ([email protected]) 3 3 * Copyright (C) 2001 Peter Kelly ([email protected]) 4 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.4 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2012 Apple Inc. All rights reserved. 5 5 * Copyright (C) 2007 Cameron Zwarich ([email protected]) 6 6 * Copyright (C) 2007 Maks Orlovich … … 1728 1728 if (generator.scopeDepth()) { 1729 1729 RefPtr<Label> l0 = generator.newLabel(); 1730 if (generator.hasFinaliser() && !r0->isTemporary()) {1730 if (generator.hasFinaliser()) { 1731 1731 returnRegister = generator.emitMove(generator.newTemporary(), r0); 1732 1732 r0 = returnRegister.get(); … … 1958 1958 1959 1959 RefPtr<Label> tryStartLabel = generator.newLabel(); 1960 RefPtr<Label> finallyStart; 1961 RefPtr<RegisterID> finallyReturnAddr; 1962 if (m_finallyBlock) { 1963 finallyStart = generator.newLabel(); 1964 finallyReturnAddr = generator.newTemporary(); 1965 generator.pushFinallyContext(finallyStart.get(), finallyReturnAddr.get()); 1966 } 1960 if (m_finallyBlock) 1961 generator.pushFinallyContext(m_finallyBlock); 1967 1962 1968 1963 generator.emitLabel(tryStartLabel.get()); … … 1986 1981 if (m_finallyBlock) { 1987 1982 generator.popFinallyContext(); 1988 // there may be important registers live at the time we jump 1989 // to a finally block (such as for a return or throw) so we 1990 // ref the highest register ever used as a conservative 1991 // approach to not clobbering anything important 1992 RefPtr<RegisterID> highestUsedRegister = generator.highestUsedRegister(); 1983 1993 1984 RefPtr<Label> finallyEndLabel = generator.newLabel(); 1994 1985 1995 // Normal path: invoke the finally block, then jump over it.1996 generator.emit JumpSubroutine(finallyReturnAddr.get(), finallyStart.get());1986 // Normal path: run the finally code, and jump to the end. 1987 generator.emitNode(dst, m_finallyBlock); 1997 1988 generator.emitJump(finallyEndLabel.get()); 1998 1989 … … 2000 1991 RefPtr<Label> here = generator.emitLabel(generator.newLabel().get()); 2001 1992 RefPtr<RegisterID> tempExceptionRegister = generator.emitCatch(generator.newTemporary(), tryStartLabel.get(), here.get()); 2002 generator.emit JumpSubroutine(finallyReturnAddr.get(), finallyStart.get());1993 generator.emitNode(dst, m_finallyBlock); 2003 1994 generator.emitThrow(tempExceptionRegister.get()); 2004 2005 // The finally block.2006 generator.emitLabel(finallyStart.get());2007 generator.emitNode(dst, m_finallyBlock);2008 generator.emitSubroutineReturn(finallyReturnAddr.get());2009 1995 2010 1996 generator.emitLabel(finallyEndLabel.get());
Note:
See TracChangeset
for help on using the changeset viewer.