Skip to content
Snippets Groups Projects
  • Damien George's avatar
    b7352084
    py/vm: Fix handling of finally-return with complex nested finallys. · b7352084
    Damien George authored
    Back in 8047340d basic support was added in
    the VM to handle return statements within a finally block.  But it didn't
    cover all cases, in particular when some finally's were active and others
    inactive when the "return" was executed.
    
    This patch adds further support for return-within-finally by correctly
    managing the currently_in_except_block flag, and should fix all cases.  The
    main point is that finally handlers remain on the exception stack even if
    they are active (currently being executed), and the unwind return code
    should only execute those finally's which are inactive.
    
    New tests are added for the cases which now pass.
    b7352084
    History
    py/vm: Fix handling of finally-return with complex nested finallys.
    Damien George authored
    Back in 8047340d basic support was added in
    the VM to handle return statements within a finally block.  But it didn't
    cover all cases, in particular when some finally's were active and others
    inactive when the "return" was executed.
    
    This patch adds further support for return-within-finally by correctly
    managing the currently_in_except_block flag, and should fix all cases.  The
    main point is that finally handlers remain on the exception stack even if
    they are active (currently being executed), and the unwind return code
    should only execute those finally's which are inactive.
    
    New tests are added for the cases which now pass.