| Index: test/codegen/expect/language/try_catch3_test.js | 
| diff --git a/test/codegen/expect/language/try_catch3_test.js b/test/codegen/expect/language/try_catch3_test.js | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..8df70d6ac0e8d2a9746624c9453b5cfdac137435 | 
| --- /dev/null | 
| +++ b/test/codegen/expect/language/try_catch3_test.js | 
| @@ -0,0 +1,182 @@ | 
| +dart_library.library('language/try_catch3_test', null, /* Imports */[ | 
| +  'dart_sdk', | 
| +  'expect' | 
| +], function load__try_catch3_test(exports, dart_sdk, expect) { | 
| +  'use strict'; | 
| +  const core = dart_sdk.core; | 
| +  const dart = dart_sdk.dart; | 
| +  const dartx = dart_sdk.dartx; | 
| +  const expect$ = expect.expect; | 
| +  const try_catch3_test = Object.create(null); | 
| +  let MyParameterizedException = () => (MyParameterizedException = dart.constFn(try_catch3_test.MyParameterizedException$()))(); | 
| +  let MyParameterizedExceptionOfString$TestException = () => (MyParameterizedExceptionOfString$TestException = dart.constFn(try_catch3_test.MyParameterizedException$(core.String, try_catch3_test.TestException)))(); | 
| +  let VoidTodynamic = () => (VoidTodynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [])))(); | 
| +  try_catch3_test.TestException = class TestException extends core.Object {}; | 
| +  const _message = Symbol('_message'); | 
| +  try_catch3_test.MyException = class MyException extends core.Object { | 
| +    new(message) { | 
| +      if (message === void 0) message = ""; | 
| +      this[_message] = message; | 
| +    } | 
| +    getMessage() { | 
| +      return this[_message]; | 
| +    } | 
| +  }; | 
| +  try_catch3_test.MyException[dart.implements] = () => [try_catch3_test.TestException]; | 
| +  dart.setSignature(try_catch3_test.MyException, { | 
| +    constructors: () => ({new: dart.definiteFunctionType(try_catch3_test.MyException, [], [core.String])}), | 
| +    methods: () => ({getMessage: dart.definiteFunctionType(core.String, [])}) | 
| +  }); | 
| +  try_catch3_test.MyParameterizedException$ = dart.generic((U, V) => { | 
| +    class MyParameterizedException extends core.Object { | 
| +      new(message) { | 
| +        if (message === void 0) message = ""; | 
| +        this[_message] = message; | 
| +      } | 
| +      getMessage() { | 
| +        return this[_message]; | 
| +      } | 
| +    } | 
| +    dart.addTypeTests(MyParameterizedException); | 
| +    MyParameterizedException[dart.implements] = () => [try_catch3_test.TestException]; | 
| +    dart.setSignature(MyParameterizedException, { | 
| +      constructors: () => ({new: dart.definiteFunctionType(try_catch3_test.MyParameterizedException$(U, V), [], [core.String])}), | 
| +      methods: () => ({getMessage: dart.definiteFunctionType(core.String, [])}) | 
| +    }); | 
| +    return MyParameterizedException; | 
| +  }); | 
| +  try_catch3_test.MyParameterizedException = MyParameterizedException(); | 
| +  try_catch3_test.StackTrace = class StackTrace extends core.Object { | 
| +    new() { | 
| +    } | 
| +    printStackTrace(ex) { | 
| +      core.print(ex); | 
| +    } | 
| +  }; | 
| +  dart.setSignature(try_catch3_test.StackTrace, { | 
| +    constructors: () => ({new: dart.definiteFunctionType(try_catch3_test.StackTrace, [])}), | 
| +    methods: () => ({printStackTrace: dart.definiteFunctionType(dart.dynamic, [try_catch3_test.TestException])}) | 
| +  }); | 
| +  try_catch3_test.Helper = class Helper extends core.Object { | 
| +    static test1(i) { | 
| +      try { | 
| +        let j = null; | 
| +        j = try_catch3_test.Helper.f2(); | 
| +        j = try_catch3_test.Helper.f3(); | 
| +        try { | 
| +          let k = try_catch3_test.Helper.f2(); | 
| +          try_catch3_test.Helper.f3(); | 
| +        } catch (e$) { | 
| +          if (try_catch3_test.MyException.is(e$)) { | 
| +            let ex = e$; | 
| +            let i = 10; | 
| +            core.print(i); | 
| +          } else if (try_catch3_test.TestException.is(e$)) { | 
| +            let ex = e$; | 
| +            let k = 10; | 
| +            core.print(k); | 
| +          } else | 
| +            throw e$; | 
| +        } | 
| + | 
| +        try { | 
| +          j = dart.notNull(j) + 24; | 
| +        } catch (e) { | 
| +          i = 300; | 
| +          core.print(dart.dsend(e, 'getMessage')); | 
| +        } | 
| + | 
| +        try { | 
| +          j = dart.notNull(j) + 20; | 
| +        } catch (e) { | 
| +          i = 400; | 
| +          core.print(dart.dsend(e, 'getMessage')); | 
| +        } | 
| + | 
| +        try { | 
| +          j = dart.notNull(j) + 40; | 
| +        } catch (e) { | 
| +          i = 600; | 
| +          core.print(dart.dsend(e, 'getMessage')); | 
| +        } | 
| + | 
| +        try { | 
| +          j = dart.notNull(j) + 60; | 
| +        } catch (e) { | 
| +          let trace = dart.stackTrace(e); | 
| +          i = 700; | 
| +          core.print(trace.toString()); | 
| +          core.print(dart.dsend(e, 'getMessage')); | 
| +        } | 
| + | 
| +        try { | 
| +          j = dart.notNull(j) + 80; | 
| +        } catch (e) { | 
| +          if (try_catch3_test.MyException.is(e)) { | 
| +            i = 500; | 
| +            core.print(e.getMessage()); | 
| +          } else | 
| +            throw e; | 
| +        } | 
| + | 
| +      } catch (e$0) { | 
| +        if (MyParameterizedExceptionOfString$TestException().is(e$0)) { | 
| +          let e = e$0; | 
| +          let trace = dart.stackTrace(e); | 
| +          i = 800; | 
| +          core.print(trace.toString()); | 
| +          throw e; | 
| +        } else if (try_catch3_test.MyException.is(e$0)) { | 
| +          let exception = e$0; | 
| +          i = 100; | 
| +          core.print(exception.getMessage()); | 
| +        } else if (try_catch3_test.TestException.is(e$0)) { | 
| +          let e = e$0; | 
| +          let trace = dart.stackTrace(e); | 
| +          i = 200; | 
| +          core.print(trace.toString()); | 
| +        } else | 
| +          throw e$0; | 
| +      } | 
| + finally { | 
| +        i = 900; | 
| +      } | 
| +      return i; | 
| +    } | 
| +    static f2() { | 
| +      return 2; | 
| +    } | 
| +    static f3() { | 
| +      let i = 0; | 
| +      while (i < 10) { | 
| +        i++; | 
| +      } | 
| +      return i; | 
| +    } | 
| +  }; | 
| +  dart.setSignature(try_catch3_test.Helper, { | 
| +    statics: () => ({ | 
| +      test1: dart.definiteFunctionType(core.int, [core.int]), | 
| +      f2: dart.definiteFunctionType(core.int, []), | 
| +      f3: dart.definiteFunctionType(core.int, []) | 
| +    }), | 
| +    names: ['test1', 'f2', 'f3'] | 
| +  }); | 
| +  try_catch3_test.TryCatchTest = class TryCatchTest extends core.Object { | 
| +    static testMain() { | 
| +      expect$.Expect.equals(900, try_catch3_test.Helper.test1(1)); | 
| +    } | 
| +  }; | 
| +  dart.setSignature(try_catch3_test.TryCatchTest, { | 
| +    statics: () => ({testMain: dart.definiteFunctionType(dart.dynamic, [])}), | 
| +    names: ['testMain'] | 
| +  }); | 
| +  try_catch3_test.main = function() { | 
| +    for (let i = 0; i < 20; i++) { | 
| +      try_catch3_test.TryCatchTest.testMain(); | 
| +    } | 
| +  }; | 
| +  dart.fn(try_catch3_test.main, VoidTodynamic()); | 
| +  // Exports: | 
| +  exports.try_catch3_test = try_catch3_test; | 
| +}); | 
|  |