| Index: test/codegen/expect/language/for_variable_capture_test.js | 
| diff --git a/test/codegen/expect/language/for_variable_capture_test.js b/test/codegen/expect/language/for_variable_capture_test.js | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..2e27703b63179bf46a836f27dcae89422a3b8f7c | 
| --- /dev/null | 
| +++ b/test/codegen/expect/language/for_variable_capture_test.js | 
| @@ -0,0 +1,311 @@ | 
| +dart_library.library('language/for_variable_capture_test', null, /* Imports */[ | 
| +  'dart_sdk', | 
| +  'expect' | 
| +], function load__for_variable_capture_test(exports, dart_sdk, expect) { | 
| +  'use strict'; | 
| +  const core = dart_sdk.core; | 
| +  const _interceptors = dart_sdk._interceptors; | 
| +  const dart = dart_sdk.dart; | 
| +  const dartx = dart_sdk.dartx; | 
| +  const expect$ = expect.expect; | 
| +  const for_variable_capture_test = Object.create(null); | 
| +  let JSArrayOfint = () => (JSArrayOfint = dart.constFn(_interceptors.JSArray$(core.int)))(); | 
| +  let dynamicTodynamic = () => (dynamicTodynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [dart.dynamic])))(); | 
| +  let VoidToint = () => (VoidToint = dart.constFn(dart.definiteFunctionType(core.int, [])))(); | 
| +  let VoidTodynamic = () => (VoidTodynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [])))(); | 
| +  for_variable_capture_test.run = function(callback) { | 
| +    return dart.dcall(callback); | 
| +  }; | 
| +  dart.fn(for_variable_capture_test.run, dynamicTodynamic()); | 
| +  for_variable_capture_test.initializer = function() { | 
| +    let closure = null; | 
| +    for (let i = 0, fn = dart.fn(() => i, VoidToint()); i < 3; i++) { | 
| +      i = i + 1; | 
| +      closure = fn; | 
| +    } | 
| +    expect$.Expect.equals(1, dart.dcall(closure)); | 
| +  }; | 
| +  dart.fn(for_variable_capture_test.initializer, VoidTodynamic()); | 
| +  for_variable_capture_test.condition = function() { | 
| +    let closures = []; | 
| +    function check(callback) { | 
| +      closures[dartx.add](callback); | 
| +      return dart.dcall(callback); | 
| +    } | 
| +    dart.fn(check, dynamicTodynamic()); | 
| +    let values = []; | 
| +    for (let i = 0; dart.test(dart.dsend(check(dart.fn(() => ++i, VoidToint())), '<', 8)); ++i) { | 
| +      values[dartx.add](i); | 
| +    } | 
| +    expect$.Expect.listEquals(JSArrayOfint().of([1, 3, 5, 7]), values); | 
| +    expect$.Expect.listEquals(JSArrayOfint().of([2, 4, 6, 8, 10]), closures[dartx.map](dart.dynamic)(for_variable_capture_test.run)[dartx.toList]()); | 
| +  }; | 
| +  dart.fn(for_variable_capture_test.condition, VoidTodynamic()); | 
| +  for_variable_capture_test.body = function() { | 
| +    let closures = []; | 
| +    for (let i = 0, j = 0; i < 3; i++) { | 
| +      j++; | 
| +      closures[dartx.add](dart.fn(() => i, VoidToint())); | 
| +      closures[dartx.add](dart.fn(() => j, VoidToint())); | 
| +    } | 
| +    expect$.Expect.listEquals(JSArrayOfint().of([0, 1, 1, 2, 2, 3]), closures[dartx.map](dart.dynamic)(for_variable_capture_test.run)[dartx.toList]()); | 
| +  }; | 
| +  dart.fn(for_variable_capture_test.body, VoidTodynamic()); | 
| +  for_variable_capture_test.update = function() { | 
| +    let closures = []; | 
| +    function check(callback) { | 
| +      closures[dartx.add](callback); | 
| +      return dart.dcall(callback); | 
| +    } | 
| +    dart.fn(check, dynamicTodynamic()); | 
| +    let values = []; | 
| +    for (let i = 0; i < 4; check(dart.fn(() => ++i, VoidToint()))) { | 
| +      values[dartx.add](i); | 
| +    } | 
| +    expect$.Expect.listEquals(JSArrayOfint().of([0, 1, 2, 3]), values); | 
| +    expect$.Expect.listEquals(JSArrayOfint().of([2, 3, 4, 5]), closures[dartx.map](dart.dynamic)(for_variable_capture_test.run)[dartx.toList]()); | 
| +  }; | 
| +  dart.fn(for_variable_capture_test.update, VoidTodynamic()); | 
| +  for_variable_capture_test.initializer_condition = function() { | 
| +    let values = []; | 
| +    for (let i = 0, fn = dart.fn(() => i, VoidToint()); dart.test(dart.dsend(for_variable_capture_test.run(dart.fn(() => ++i, VoidToint())), '<', 3));) { | 
| +      values[dartx.add](i); | 
| +      values[dartx.add](fn()); | 
| +    } | 
| +    expect$.Expect.listEquals(JSArrayOfint().of([1, 1, 2, 1]), values); | 
| +  }; | 
| +  dart.fn(for_variable_capture_test.initializer_condition, VoidTodynamic()); | 
| +  for_variable_capture_test.initializer_update = function() { | 
| +    let update_closures = []; | 
| +    function update(callback) { | 
| +      update_closures[dartx.add](callback); | 
| +      return dart.dcall(callback); | 
| +    } | 
| +    dart.fn(update, dynamicTodynamic()); | 
| +    let init_closure = null; | 
| +    for (let i = 0, fn = dart.fn(() => i, VoidToint()); i < 4; update(dart.fn(() => ++i, VoidToint()))) { | 
| +      init_closure = fn; | 
| +      if (i == 0) { | 
| +        ++i; | 
| +      } | 
| +    } | 
| +    expect$.Expect.equals(1, dart.dcall(init_closure)); | 
| +    expect$.Expect.listEquals(JSArrayOfint().of([3, 4, 5]), update_closures[dartx.map](dart.dynamic)(for_variable_capture_test.run)[dartx.toList]()); | 
| +    expect$.Expect.equals(1, dart.dcall(init_closure)); | 
| +  }; | 
| +  dart.fn(for_variable_capture_test.initializer_update, VoidTodynamic()); | 
| +  for_variable_capture_test.initializer_body = function() { | 
| +    let closures = []; | 
| +    for (let i = 0, fn = dart.fn(() => i, VoidToint()); i < 3; i++) { | 
| +      closures[dartx.add](dart.fn(() => i, VoidToint())); | 
| +      closures[dartx.add](fn); | 
| +      fn = dart.fn(() => i, VoidToint()); | 
| +    } | 
| +    expect$.Expect.listEquals(JSArrayOfint().of([0, 0, 1, 0, 2, 1]), closures[dartx.map](dart.dynamic)(for_variable_capture_test.run)[dartx.toList]()); | 
| +  }; | 
| +  dart.fn(for_variable_capture_test.initializer_body, VoidTodynamic()); | 
| +  for_variable_capture_test.condition_update = function() { | 
| +    let cond_closures = []; | 
| +    function check(callback) { | 
| +      cond_closures[dartx.add](callback); | 
| +      return dart.dcall(callback); | 
| +    } | 
| +    dart.fn(check, dynamicTodynamic()); | 
| +    let update_closures = []; | 
| +    function update(callback) { | 
| +      update_closures[dartx.add](callback); | 
| +      return dart.dcall(callback); | 
| +    } | 
| +    dart.fn(update, dynamicTodynamic()); | 
| +    let values = []; | 
| +    for (let i = 0; dart.test(dart.dsend(check(dart.fn(() => i, VoidToint())), '<', 4)); update(dart.fn(() => ++i, VoidToint()))) { | 
| +      values[dartx.add](i); | 
| +    } | 
| +    expect$.Expect.listEquals(JSArrayOfint().of([0, 1, 2, 3]), values); | 
| +    expect$.Expect.listEquals(JSArrayOfint().of([0, 1, 2, 3, 4]), cond_closures[dartx.map](dart.dynamic)(for_variable_capture_test.run)[dartx.toList]()); | 
| +    expect$.Expect.listEquals(JSArrayOfint().of([2, 3, 4, 5]), update_closures[dartx.map](dart.dynamic)(for_variable_capture_test.run)[dartx.toList]()); | 
| +    expect$.Expect.listEquals(JSArrayOfint().of([0, 2, 3, 4, 5]), cond_closures[dartx.map](dart.dynamic)(for_variable_capture_test.run)[dartx.toList]()); | 
| +  }; | 
| +  dart.fn(for_variable_capture_test.condition_update, VoidTodynamic()); | 
| +  for_variable_capture_test.condition_body = function() { | 
| +    let cond_closures = []; | 
| +    function check(callback) { | 
| +      cond_closures[dartx.add](callback); | 
| +      return dart.dcall(callback); | 
| +    } | 
| +    dart.fn(check, dynamicTodynamic()); | 
| +    let body_closures = []; | 
| +    function do_body(callback) { | 
| +      body_closures[dartx.add](callback); | 
| +      return dart.dcall(callback); | 
| +    } | 
| +    dart.fn(do_body, dynamicTodynamic()); | 
| +    for (let i = 0; dart.test(dart.dsend(check(dart.fn(() => i, VoidToint())), '<', 4)); ++i) { | 
| +      do_body(dart.fn(() => i, VoidToint())); | 
| +    } | 
| +    expect$.Expect.listEquals(JSArrayOfint().of([0, 1, 2, 3, 4]), cond_closures[dartx.map](dart.dynamic)(for_variable_capture_test.run)[dartx.toList]()); | 
| +    expect$.Expect.listEquals(JSArrayOfint().of([0, 1, 2, 3]), body_closures[dartx.map](dart.dynamic)(for_variable_capture_test.run)[dartx.toList]()); | 
| +  }; | 
| +  dart.fn(for_variable_capture_test.condition_body, VoidTodynamic()); | 
| +  for_variable_capture_test.initializer_condition_update = function() { | 
| +    let init = null; | 
| +    let cond_closures = []; | 
| +    function check(callback) { | 
| +      cond_closures[dartx.add](callback); | 
| +      return dart.dcall(callback); | 
| +    } | 
| +    dart.fn(check, dynamicTodynamic()); | 
| +    let update_closures = []; | 
| +    function update(callback) { | 
| +      update_closures[dartx.add](callback); | 
| +      return dart.dcall(callback); | 
| +    } | 
| +    dart.fn(update, dynamicTodynamic()); | 
| +    let values = []; | 
| +    for (let i = 0, fn = dart.fn(() => i, VoidToint()); dart.test(dart.dsend(check(dart.fn(() => ++i, VoidToint())), '<', 8)); update(dart.fn(() => ++i, VoidToint()))) { | 
| +      init = fn; | 
| +      values[dartx.add](i); | 
| +    } | 
| +    expect$.Expect.listEquals(JSArrayOfint().of([1, 3, 5, 7]), values); | 
| +    expect$.Expect.equals(1, dart.dcall(init)); | 
| +    expect$.Expect.listEquals(JSArrayOfint().of([2, 4, 6, 8, 10]), cond_closures[dartx.map](dart.dynamic)(for_variable_capture_test.run)[dartx.toList]()); | 
| +    expect$.Expect.listEquals(JSArrayOfint().of([5, 7, 9, 11]), update_closures[dartx.map](dart.dynamic)(for_variable_capture_test.run)[dartx.toList]()); | 
| +  }; | 
| +  dart.fn(for_variable_capture_test.initializer_condition_update, VoidTodynamic()); | 
| +  for_variable_capture_test.initializer_condition_body = function() { | 
| +    let init = null; | 
| +    let cond_closures = []; | 
| +    function check(callback) { | 
| +      cond_closures[dartx.add](callback); | 
| +      return dart.dcall(callback); | 
| +    } | 
| +    dart.fn(check, dynamicTodynamic()); | 
| +    let body_closures = []; | 
| +    function do_body(callback) { | 
| +      body_closures[dartx.add](callback); | 
| +      return dart.dcall(callback); | 
| +    } | 
| +    dart.fn(do_body, dynamicTodynamic()); | 
| +    let values = []; | 
| +    for (let i = 0, fn = dart.fn(() => i, VoidToint()); dart.test(dart.dsend(check(dart.fn(() => ++i, VoidToint())), '<', 8));) { | 
| +      init = fn; | 
| +      do_body(dart.fn(() => ++i, VoidToint())); | 
| +      values[dartx.add](i); | 
| +    } | 
| +    expect$.Expect.listEquals(JSArrayOfint().of([2, 4, 6, 8]), values); | 
| +    expect$.Expect.equals(2, dart.dcall(init)); | 
| +    expect$.Expect.listEquals(JSArrayOfint().of([3, 5, 7, 9, 10]), cond_closures[dartx.map](dart.dynamic)(for_variable_capture_test.run)[dartx.toList]()); | 
| +    expect$.Expect.listEquals(JSArrayOfint().of([4, 6, 8, 10]), body_closures[dartx.map](dart.dynamic)(for_variable_capture_test.run)[dartx.toList]()); | 
| +  }; | 
| +  dart.fn(for_variable_capture_test.initializer_condition_body, VoidTodynamic()); | 
| +  for_variable_capture_test.initializer_update_body = function() { | 
| +    let init = null; | 
| +    let update_closures = []; | 
| +    function update(callback) { | 
| +      update_closures[dartx.add](callback); | 
| +      return dart.dcall(callback); | 
| +    } | 
| +    dart.fn(update, dynamicTodynamic()); | 
| +    let body_closures = []; | 
| +    function do_body(callback) { | 
| +      body_closures[dartx.add](callback); | 
| +      return dart.dcall(callback); | 
| +    } | 
| +    dart.fn(do_body, dynamicTodynamic()); | 
| +    let values = []; | 
| +    for (let i = 0, fn = dart.fn(() => i, VoidToint()); i < 8; update(dart.fn(() => ++i, VoidToint()))) { | 
| +      init = fn; | 
| +      do_body(dart.fn(() => ++i, VoidToint())); | 
| +      values[dartx.add](i); | 
| +    } | 
| +    expect$.Expect.listEquals(JSArrayOfint().of([1, 3, 5, 7]), values); | 
| +    expect$.Expect.equals(1, dart.dcall(init)); | 
| +    expect$.Expect.listEquals(JSArrayOfint().of([4, 6, 8, 9]), update_closures[dartx.map](dart.dynamic)(for_variable_capture_test.run)[dartx.toList]()); | 
| +    expect$.Expect.listEquals(JSArrayOfint().of([2, 5, 7, 9]), body_closures[dartx.map](dart.dynamic)(for_variable_capture_test.run)[dartx.toList]()); | 
| +  }; | 
| +  dart.fn(for_variable_capture_test.initializer_update_body, VoidTodynamic()); | 
| +  for_variable_capture_test.condition_update_body = function() { | 
| +    let cond_closures = []; | 
| +    function check(callback) { | 
| +      cond_closures[dartx.add](callback); | 
| +      return dart.dcall(callback); | 
| +    } | 
| +    dart.fn(check, dynamicTodynamic()); | 
| +    let update_closures = []; | 
| +    function update(callback) { | 
| +      update_closures[dartx.add](callback); | 
| +      return dart.dcall(callback); | 
| +    } | 
| +    dart.fn(update, dynamicTodynamic()); | 
| +    let body_closures = []; | 
| +    function do_body(callback) { | 
| +      body_closures[dartx.add](callback); | 
| +      return dart.dcall(callback); | 
| +    } | 
| +    dart.fn(do_body, dynamicTodynamic()); | 
| +    let values = []; | 
| +    for (let i = 0; dart.test(dart.dsend(check(dart.fn(() => i, VoidToint())), '<', 8)); update(dart.fn(() => ++i, VoidToint()))) { | 
| +      do_body(dart.fn(() => ++i, VoidToint())); | 
| +      values[dartx.add](i); | 
| +    } | 
| +    expect$.Expect.listEquals(JSArrayOfint().of([1, 3, 5, 7]), values); | 
| +    expect$.Expect.listEquals(JSArrayOfint().of([1, 3, 5, 7, 8]), cond_closures[dartx.map](dart.dynamic)(for_variable_capture_test.run)[dartx.toList]()); | 
| +    expect$.Expect.listEquals(JSArrayOfint().of([4, 6, 8, 9]), update_closures[dartx.map](dart.dynamic)(for_variable_capture_test.run)[dartx.toList]()); | 
| +    expect$.Expect.listEquals(JSArrayOfint().of([2, 5, 7, 9]), body_closures[dartx.map](dart.dynamic)(for_variable_capture_test.run)[dartx.toList]()); | 
| +    expect$.Expect.listEquals(JSArrayOfint().of([2, 5, 7, 9, 9]), cond_closures[dartx.map](dart.dynamic)(for_variable_capture_test.run)[dartx.toList]()); | 
| +  }; | 
| +  dart.fn(for_variable_capture_test.condition_update_body, VoidTodynamic()); | 
| +  for_variable_capture_test.initializer_condition_update_body = function() { | 
| +    let init = null; | 
| +    let cond_closures = []; | 
| +    function check(callback) { | 
| +      cond_closures[dartx.add](callback); | 
| +      return dart.dcall(callback); | 
| +    } | 
| +    dart.fn(check, dynamicTodynamic()); | 
| +    let update_closures = []; | 
| +    function update(callback) { | 
| +      update_closures[dartx.add](callback); | 
| +      return dart.dcall(callback); | 
| +    } | 
| +    dart.fn(update, dynamicTodynamic()); | 
| +    let body_closures = []; | 
| +    function do_body(callback) { | 
| +      body_closures[dartx.add](callback); | 
| +      return dart.dcall(callback); | 
| +    } | 
| +    dart.fn(do_body, dynamicTodynamic()); | 
| +    let values = []; | 
| +    for (let i = 0, fn = dart.fn(() => i, VoidToint()); dart.test(dart.dsend(check(dart.fn(() => i, VoidToint())), '<', 8)); update(dart.fn(() => ++i, VoidToint()))) { | 
| +      init = fn; | 
| +      do_body(dart.fn(() => ++i, VoidToint())); | 
| +      values[dartx.add](i); | 
| +    } | 
| +    expect$.Expect.listEquals(JSArrayOfint().of([1, 3, 5, 7]), values); | 
| +    expect$.Expect.equals(1, dart.dcall(init)); | 
| +    expect$.Expect.listEquals(JSArrayOfint().of([1, 3, 5, 7, 8]), cond_closures[dartx.map](dart.dynamic)(for_variable_capture_test.run)[dartx.toList]()); | 
| +    expect$.Expect.listEquals(JSArrayOfint().of([4, 6, 8, 9]), update_closures[dartx.map](dart.dynamic)(for_variable_capture_test.run)[dartx.toList]()); | 
| +    expect$.Expect.listEquals(JSArrayOfint().of([2, 5, 7, 9]), body_closures[dartx.map](dart.dynamic)(for_variable_capture_test.run)[dartx.toList]()); | 
| +    expect$.Expect.listEquals(JSArrayOfint().of([2, 5, 7, 9, 9]), cond_closures[dartx.map](dart.dynamic)(for_variable_capture_test.run)[dartx.toList]()); | 
| +  }; | 
| +  dart.fn(for_variable_capture_test.initializer_condition_update_body, VoidTodynamic()); | 
| +  for_variable_capture_test.main = function() { | 
| +    for_variable_capture_test.initializer(); | 
| +    for_variable_capture_test.condition(); | 
| +    for_variable_capture_test.update(); | 
| +    for_variable_capture_test.body(); | 
| +    for_variable_capture_test.initializer_condition(); | 
| +    for_variable_capture_test.initializer_update(); | 
| +    for_variable_capture_test.initializer_body(); | 
| +    for_variable_capture_test.condition_update(); | 
| +    for_variable_capture_test.condition_body(); | 
| +    for_variable_capture_test.initializer_condition_update(); | 
| +    for_variable_capture_test.initializer_condition_body(); | 
| +    for_variable_capture_test.initializer_update_body(); | 
| +    for_variable_capture_test.condition_update_body(); | 
| +    for_variable_capture_test.initializer_condition_update_body(); | 
| +  }; | 
| +  dart.fn(for_variable_capture_test.main, VoidTodynamic()); | 
| +  // Exports: | 
| +  exports.for_variable_capture_test = for_variable_capture_test; | 
| +}); | 
|  |