| OLD | NEW | 
 | (Empty) | 
|   1 // Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file |  | 
|   2 // for details. All rights reserved. Use of this source code is governed by a |  | 
|   3 // BSD-style license that can be found in the LICENSE file. |  | 
|   4  |  | 
|   5 // Tests for closures sharing mutable bindings. |  | 
|   6  |  | 
|   7 var f; |  | 
|   8 var g; |  | 
|   9  |  | 
|  10 setupPlain() { |  | 
|  11   int j = 1000; |  | 
|  12   // Two closures sharing variable 'j'; j initially is 1000. |  | 
|  13   f = (int x) { var q = j; j = x; return q;}; |  | 
|  14   g = (int x) { var q = j; j = x; return q;}; |  | 
|  15 } |  | 
|  16  |  | 
|  17 setupLoop() { |  | 
|  18   for (int i = 0; i < 2; i++) { |  | 
|  19     int j = i * 1000;  // The last stored closure has j initially 1000. |  | 
|  20     // Two closures sharing variable 'j'. |  | 
|  21     f = (int x) { var q = j; j = x; return q;}; |  | 
|  22     g = (int x) { var q = j; j = x; return q;}; |  | 
|  23   } |  | 
|  24 } |  | 
|  25  |  | 
|  26 setupNestedLoop() { |  | 
|  27   for (int outer = 0; outer < 2; outer++) { |  | 
|  28     int j = outer * 1000; |  | 
|  29     for (int i = 0; i < 2; i++) { |  | 
|  30       // Two closures sharing variable 'j' in a loop at different nesting. |  | 
|  31       f = (int x) { var q = j; j = x; return q;}; |  | 
|  32       g = (int x) { var q = j; j = x; return q;}; |  | 
|  33     } |  | 
|  34   } |  | 
|  35 } |  | 
|  36  |  | 
|  37 test(setup) { |  | 
|  38   setup(); |  | 
|  39   Expect.equals(1000, f(100)); |  | 
|  40   Expect.equals(100, f(200)); |  | 
|  41   Expect.equals(200, f(300)); |  | 
|  42   Expect.equals(300, g(400)); |  | 
|  43   Expect.equals(400, g(500)); |  | 
|  44 } |  | 
|  45  |  | 
|  46  |  | 
|  47 main() { |  | 
|  48   test(setupPlain); |  | 
|  49   test(setupLoop); |  | 
|  50   test(setupNestedLoop); |  | 
|  51 } |  | 
| OLD | NEW |