| // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file | 
 | // for details. All rights reserved. Use of this source code is governed by a | 
 | // BSD-style license that can be found in the LICENSE file. | 
 |  | 
 | // @dart = 2.9 | 
 |  | 
 | // Regression test for dart2js that used to not treat the finally | 
 | // block as a successor of a catch block that throws. | 
 |  | 
 | import "package:expect/expect.dart"; | 
 |  | 
 | class A { | 
 |   var field; | 
 |   start() {} | 
 |   stop() { | 
 |     field = 42; | 
 |   } | 
 | } | 
 |  | 
 | class B { | 
 |   var totalCompileTime = new A(); | 
 |   var runCompiler = new Object(); | 
 |  | 
 |   run() { | 
 |     totalCompileTime.start(); | 
 |     try { | 
 |       throw 'foo'; | 
 |     } catch (exception) { | 
 |       // Use [runCompiler] twice to ensure it will have a local | 
 |       // variable. | 
 |       runCompiler.toString(); | 
 |       runCompiler.toString(); | 
 |       rethrow; | 
 |     } finally { | 
 |       totalCompileTime.stop(); | 
 |     } | 
 |   } | 
 | } | 
 |  | 
 | main() { | 
 |   var b = new B(); | 
 |   try { | 
 |     b.run(); | 
 |     throw 'Expected exception'; | 
 |   } catch (exception) { | 
 |     // Expected exception. | 
 |   } | 
 |  | 
 |   Expect.equals(42, b.totalCompileTime.field); | 
 | } |