Home | History | Annotate | Download | only in harmony
      1 // Copyright 2012 the V8 project authors. All rights reserved.
      2 // Redistribution and use in source and binary forms, with or without
      3 // modification, are permitted provided that the following conditions are
      4 // met:
      5 //
      6 //     * Redistributions of source code must retain the above copyright
      7 //       notice, this list of conditions and the following disclaimer.
      8 //     * Redistributions in binary form must reproduce the above
      9 //       copyright notice, this list of conditions and the following
     10 //       disclaimer in the documentation and/or other materials provided
     11 //       with the distribution.
     12 //     * Neither the name of Google Inc. nor the names of its
     13 //       contributors may be used to endorse or promote products derived
     14 //       from this software without specific prior written permission.
     15 //
     16 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     17 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     18 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     19 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     20 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     21 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     22 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     23 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     27 
     28 // Flags: --harmony-modules
     29 
     30 // Test that potential recompilation of the global scope does not screw up.
     31 
     32 "use strict";
     33 
     34 var N = 1e5;  // Number of loop iterations that trigger optimization.
     35 
     36 module A {
     37   export var x = 1
     38   export function f() { return x }
     39 }
     40 var f = A.f
     41 
     42 assertEquals(1, A.x)
     43 assertEquals(1, A.f())
     44 assertEquals(1, f())
     45 
     46 A.x = 2
     47 
     48 assertEquals(2, A.x)
     49 assertEquals(2, A.f())
     50 assertEquals(2, f())
     51 
     52 for (var i = 0; i < N; i++) {
     53   if (i > N) print("impossible");
     54 }
     55 
     56 assertEquals(2, A.x)
     57 assertEquals(2, A.f())
     58 assertEquals(2, f())
     59 
     60 
     61 // Same test with loop inside a module.
     62 
     63 module B {
     64   module A {
     65     export var x = 1
     66     export function f() { return x }
     67   }
     68   var f = A.f
     69 
     70   assertEquals(1, A.x)
     71   assertEquals(1, A.f())
     72   assertEquals(1, f())
     73 
     74   A.x = 2
     75 
     76   assertEquals(2, A.x)
     77   assertEquals(2, A.f())
     78   assertEquals(2, f())
     79 
     80   for (var i = 0; i < N; i++) {
     81     if (i > N) print("impossible");
     82   }
     83 
     84   assertEquals(2, A.x)
     85   assertEquals(2, A.f())
     86   assertEquals(2, f())
     87 }
     88