| Index: test/codegen/expect/language/await_future_test.js | 
| diff --git a/test/codegen/expect/language/await_future_test.js b/test/codegen/expect/language/await_future_test.js | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..c00a4cd800592f8f755d3bc629cac511eb390c71 | 
| --- /dev/null | 
| +++ b/test/codegen/expect/language/await_future_test.js | 
| @@ -0,0 +1,311 @@ | 
| +dart_library.library('language/await_future_test', null, /* Imports */[ | 
| +  'dart_sdk', | 
| +  'expect', | 
| +  'async_helper' | 
| +], function load__await_future_test(exports, dart_sdk, expect, async_helper) { | 
| +  'use strict'; | 
| +  const core = dart_sdk.core; | 
| +  const async = dart_sdk.async; | 
| +  const _interceptors = dart_sdk._interceptors; | 
| +  const dart = dart_sdk.dart; | 
| +  const dartx = dart_sdk.dartx; | 
| +  const expect$ = expect.expect; | 
| +  const async_helper$ = async_helper.async_helper; | 
| +  const await_future_test = Object.create(null); | 
| +  let FutureOfint = () => (FutureOfint = dart.constFn(async.Future$(core.int)))(); | 
| +  let JSArrayOfString = () => (JSArrayOfString = dart.constFn(_interceptors.JSArray$(core.String)))(); | 
| +  let dynamicTodynamic = () => (dynamicTodynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [dart.dynamic])))(); | 
| +  let VoidTodynamic = () => (VoidTodynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [])))(); | 
| +  let VoidToFuture = () => (VoidToFuture = dart.constFn(dart.definiteFunctionType(async.Future, [])))(); | 
| +  let dynamicAnddynamicTodynamic = () => (dynamicAnddynamicTodynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [dart.dynamic, dart.dynamic])))(); | 
| +  let VoidToFutureOfint = () => (VoidToFutureOfint = dart.constFn(dart.definiteFunctionType(FutureOfint(), [])))(); | 
| +  let intAndintTodynamic = () => (intAndintTodynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [core.int, core.int])))(); | 
| +  let dynamicToFuture = () => (dynamicToFuture = dart.constFn(dart.definiteFunctionType(async.Future, [dart.dynamic])))(); | 
| +  await_future_test.bar = function(p) { | 
| +    return dart.async(function*(p) { | 
| +      return p; | 
| +    }, dart.dynamic, p); | 
| +  }; | 
| +  dart.fn(await_future_test.bar, dynamicTodynamic()); | 
| +  await_future_test.baz = function(p) { | 
| +    return async.Future.new(dart.fn(() => p, VoidTodynamic())); | 
| +  }; | 
| +  dart.fn(await_future_test.baz, dynamicTodynamic()); | 
| +  await_future_test.foo = function() { | 
| +    return dart.async(function*() { | 
| +      let b = 0; | 
| +      for (let i = 0; i < 10; i++) { | 
| +        b = dart.notNull(b) + dart.notNull(core.int._check(dart.dsend(yield await_future_test.bar(1), '+', yield await_future_test.baz(2)))); | 
| +      } | 
| +      return b; | 
| +    }, dart.dynamic); | 
| +  }; | 
| +  dart.fn(await_future_test.foo, VoidTodynamic()); | 
| +  await_future_test.faa = function() { | 
| +    return dart.async(function*() { | 
| +      return dart.dload(yield await_future_test.bar('faa'), 'length'); | 
| +    }, dart.dynamic); | 
| +  }; | 
| +  dart.fn(await_future_test.faa, VoidTodynamic()); | 
| +  await_future_test.quaz = function(p) { | 
| +    return dart.async(function*(p) { | 
| +      let x = 0; | 
| +      try { | 
| +        for (let j = 0; j < 10; j++) { | 
| +          x = dart.notNull(x) + dart.notNull(core.int._check(yield await_future_test.baz(j))); | 
| +        } | 
| +        return x; | 
| +      } finally { | 
| +        expect$.Expect.equals(x, 45); | 
| +        return p; | 
| +      } | 
| +    }, dart.dynamic, p); | 
| +  }; | 
| +  dart.fn(await_future_test.quaz, dynamicTodynamic()); | 
| +  await_future_test.quazz = function() { | 
| +    return dart.async(function*() { | 
| +      let x = 0; | 
| +      try { | 
| +        try { | 
| +          x = core.int._check(yield await_future_test.bar(1)); | 
| +          dart.throw(x); | 
| +        } catch (e1) { | 
| +          let y = (yield await_future_test.baz(dart.dsend(e1, '+', 1))); | 
| +          dart.throw(y); | 
| +        } | 
| + | 
| +      } catch (e2) { | 
| +        return e2; | 
| +      } | 
| + | 
| +    }, dart.dynamic); | 
| +  }; | 
| +  dart.fn(await_future_test.quazz, VoidTodynamic()); | 
| +  await_future_test.nesting = function() { | 
| +    return dart.async(function*() { | 
| +      try { | 
| +        try { | 
| +          let x = 1; | 
| +          let y = dart.fn(() => dart.async(function*() { | 
| +            try { | 
| +              let z = dart.dsend(yield await_future_test.bar(3), '+', x); | 
| +              dart.throw(z); | 
| +            } catch (e1) { | 
| +              return e1; | 
| +            } | 
| + | 
| +          }, dart.dynamic), VoidToFuture()); | 
| +          let a = (yield y()); | 
| +          dart.throw(a); | 
| +        } catch (e2) { | 
| +          dart.throw(dart.dsend(e2, '+', 1)); | 
| +        } | 
| + | 
| +      } catch (e3) { | 
| +        return e3; | 
| +      } | 
| + | 
| +    }, dart.dynamic); | 
| +  }; | 
| +  dart.fn(await_future_test.nesting, VoidTodynamic()); | 
| +  await_future_test.awaitAsUnary = function(a, b) { | 
| +    return dart.async(function*(a, b) { | 
| +      return dart.dsend(yield a, '+', yield b); | 
| +    }, dart.dynamic, a, b); | 
| +  }; | 
| +  dart.fn(await_future_test.awaitAsUnary, dynamicAnddynamicTodynamic()); | 
| +  await_future_test.awaitIf = function(p) { | 
| +    return dart.async(function*(p) { | 
| +      if (dart.test(dart.dsend(p, '<', yield await_future_test.bar(5)))) { | 
| +        return "p<5"; | 
| +      } else { | 
| +        return "p>=5"; | 
| +      } | 
| +    }, dart.dynamic, p); | 
| +  }; | 
| +  dart.fn(await_future_test.awaitIf, dynamicTodynamic()); | 
| +  await_future_test.awaitNestedIf = function(p, q) { | 
| +    return dart.async(function*(p, q) { | 
| +      if (dart.equals(p, yield await_future_test.bar(5))) { | 
| +        if (dart.test(dart.dsend(q, '<', yield await_future_test.bar(7)))) { | 
| +          return "q<7"; | 
| +        } else { | 
| +          return "q>=7"; | 
| +        } | 
| +      } else { | 
| +        return "p!=5"; | 
| +      } | 
| +      return "!"; | 
| +    }, dart.dynamic, p, q); | 
| +  }; | 
| +  dart.fn(await_future_test.awaitNestedIf, dynamicAnddynamicTodynamic()); | 
| +  await_future_test.awaitElseIf = function(p) { | 
| +    return dart.async(function*(p) { | 
| +      if (dart.test(dart.dsend(p, '>', yield await_future_test.bar(5)))) { | 
| +        return "p>5"; | 
| +      } else if (dart.test(dart.dsend(p, '<', yield await_future_test.bar(5)))) { | 
| +        return "p<5"; | 
| +      } else { | 
| +        return "p==5"; | 
| +      } | 
| +      return "!"; | 
| +    }, dart.dynamic, p); | 
| +  }; | 
| +  dart.fn(await_future_test.awaitElseIf, dynamicTodynamic()); | 
| +  await_future_test.awaitReturn = function() { | 
| +    return dart.async(function*() { | 
| +      return yield await_future_test.bar(17); | 
| +    }, dart.dynamic); | 
| +  }; | 
| +  dart.fn(await_future_test.awaitReturn, VoidTodynamic()); | 
| +  await_future_test.awaitSwitch = function() { | 
| +    return dart.async(function*() { | 
| +      switch (yield await_future_test.bar(3)) { | 
| +        case 1: | 
| +        { | 
| +          return 1; | 
| +          break; | 
| +        } | 
| +        case 3: | 
| +        { | 
| +          return 3; | 
| +          break; | 
| +        } | 
| +        default: | 
| +        { | 
| +          return -1; | 
| +        } | 
| +      } | 
| +    }, dart.dynamic); | 
| +  }; | 
| +  dart.fn(await_future_test.awaitSwitch, VoidTodynamic()); | 
| +  await_future_test.awaitNestedWhile = function(i, j) { | 
| +    return dart.async(function*(i, j) { | 
| +      let savedJ = j; | 
| +      let decI = dart.fn(() => dart.async(function*() { | 
| +        let x = i; | 
| +        i = dart.notNull(x) - 1; | 
| +        return x; | 
| +      }, core.int), VoidToFutureOfint()); | 
| +      let decJ = dart.fn(() => dart.async(function*() { | 
| +        let x = j; | 
| +        j = dart.notNull(x) - 1; | 
| +        return x; | 
| +      }, core.int), VoidToFutureOfint()); | 
| +      let k = 0; | 
| +      while (dart.notNull(yield decI()) > 0) { | 
| +        j = savedJ; | 
| +        while (0 < dart.notNull(yield decJ())) { | 
| +          k++; | 
| +        } | 
| +      } | 
| +      return k; | 
| +    }, dart.dynamic, i, j); | 
| +  }; | 
| +  dart.fn(await_future_test.awaitNestedWhile, intAndintTodynamic()); | 
| +  await_future_test.awaitNestedDoWhile = function(i, j) { | 
| +    return dart.async(function*(i, j) { | 
| +      let savedJ = j; | 
| +      let decI = dart.fn(() => dart.async(function*() { | 
| +        let x = i; | 
| +        i = dart.notNull(x) - 1; | 
| +        return x; | 
| +      }, core.int), VoidToFutureOfint()); | 
| +      let decJ = dart.fn(() => dart.async(function*() { | 
| +        let x = j; | 
| +        j = dart.notNull(x) - 1; | 
| +        return x; | 
| +      }, core.int), VoidToFutureOfint()); | 
| +      let k = 0; | 
| +      do { | 
| +        do { | 
| +          k++; | 
| +        } while (0 < dart.notNull(yield decI())); | 
| +      } while (dart.notNull(yield decJ()) > 0); | 
| +      return k; | 
| +    }, dart.dynamic, i, j); | 
| +  }; | 
| +  dart.fn(await_future_test.awaitNestedDoWhile, intAndintTodynamic()); | 
| +  await_future_test.awaitFor = function() { | 
| +    return dart.async(function*() { | 
| +      let asyncInc = dart.fn(p => dart.async(function*(p) { | 
| +        return dart.dsend(p, '+', 1); | 
| +      }, dart.dynamic, p), dynamicToFuture()); | 
| +      let k = 0; | 
| +      for (let j = core.int._check(yield await_future_test.bar(0)), i = core.int._check(yield await_future_test.bar(1)); dart.notNull(j) < dart.notNull(core.num._check(yield await_future_test.bar(5))); j = core.int._check(yield dart.dcall(asyncInc, j)), i = core.int._check(yield dart.dcall(asyncInc, i))) { | 
| +        k = dart.notNull(k) + dart.notNull(i); | 
| +        k = dart.notNull(k) + dart.notNull(j); | 
| +      } | 
| +      return k; | 
| +    }, dart.dynamic); | 
| +  }; | 
| +  dart.fn(await_future_test.awaitFor, VoidTodynamic()); | 
| +  await_future_test.awaitForIn = function() { | 
| +    return dart.async(function*() { | 
| +      let list = JSArrayOfString().of(['a', 'b', 'c']); | 
| +      let k = ''; | 
| +      for (let c of core.Iterable._check(yield await_future_test.bar(list))) { | 
| +        k = dart.notNull(k) + dart.notNull(core.String._check(c)); | 
| +      } | 
| +      return k; | 
| +    }, dart.dynamic); | 
| +  }; | 
| +  dart.fn(await_future_test.awaitForIn, VoidTodynamic()); | 
| +  await_future_test.test = function() { | 
| +    return dart.async(function*() { | 
| +      let result = null; | 
| +      for (let i = 0; i < 10; i++) { | 
| +        result = (yield await_future_test.foo()); | 
| +        expect$.Expect.equals(30, result); | 
| +        result = (yield await_future_test.faa()); | 
| +        expect$.Expect.equals(3, result); | 
| +        result = (yield await_future_test.quaz(17)); | 
| +        expect$.Expect.equals(17, result); | 
| +        result = (yield await_future_test.quazz()); | 
| +        expect$.Expect.equals(2, result); | 
| +        result = (yield await_future_test.nesting()); | 
| +        expect$.Expect.equals(5, result); | 
| +        result = (yield await_future_test.awaitIf(3)); | 
| +        expect$.Expect.equals("p<5", result); | 
| +        result = (yield await_future_test.awaitIf(5)); | 
| +        expect$.Expect.equals("p>=5", result); | 
| +        result = (yield await_future_test.awaitNestedIf(5, 3)); | 
| +        expect$.Expect.equals("q<7", result); | 
| +        result = (yield await_future_test.awaitNestedIf(5, 8)); | 
| +        expect$.Expect.equals("q>=7", result); | 
| +        result = (yield await_future_test.awaitNestedIf(3, 8)); | 
| +        expect$.Expect.equals("p!=5", result); | 
| +        result = (yield await_future_test.awaitReturn()); | 
| +        expect$.Expect.equals(17, result); | 
| +        result = (yield await_future_test.awaitSwitch()); | 
| +        expect$.Expect.equals(3, result); | 
| +        result = (yield await_future_test.awaitElseIf(6)); | 
| +        expect$.Expect.equals("p>5", result); | 
| +        result = (yield await_future_test.awaitElseIf(4)); | 
| +        expect$.Expect.equals("p<5", result); | 
| +        result = (yield await_future_test.awaitElseIf(5)); | 
| +        expect$.Expect.equals("p==5", result); | 
| +        result = (yield await_future_test.awaitNestedWhile(5, 3)); | 
| +        expect$.Expect.equals(15, result); | 
| +        result = (yield await_future_test.awaitNestedWhile(4, 6)); | 
| +        expect$.Expect.equals(24, result); | 
| +        result = (yield await_future_test.awaitAsUnary(await_future_test.bar(1), await_future_test.bar(2))); | 
| +        expect$.Expect.equals(3, result); | 
| +        result = (yield await_future_test.awaitFor()); | 
| +        expect$.Expect.equals(25, result); | 
| +        result = (yield await_future_test.awaitForIn()); | 
| +        expect$.Expect.equals('abc', result); | 
| +      } | 
| +    }, dart.dynamic); | 
| +  }; | 
| +  dart.fn(await_future_test.test, VoidTodynamic()); | 
| +  await_future_test.main = function() { | 
| +    async_helper$.asyncStart(); | 
| +    dart.dsend(await_future_test.test(), 'then', dart.fn(_ => { | 
| +      async_helper$.asyncEnd(); | 
| +    }, dynamicTodynamic())); | 
| +  }; | 
| +  dart.fn(await_future_test.main, VoidTodynamic()); | 
| +  // Exports: | 
| +  exports.await_future_test = await_future_test; | 
| +}); | 
|  |