| //------------------------------------------------------------------------------------------------------- |
| // Copyright (C) Microsoft. All rights reserved. |
| // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. |
| //------------------------------------------------------------------------------------------------------- |
| |
| // Test field hoisting cases that should strip bailouts in the loop header. |
| |
| // Field load hoisted from within the inner do-while should have bailout removed. |
| function test1() { |
| var obj4 = 1; |
| var __loopvar2 = 0; |
| while ((1) && __loopvar2 < 3) { |
| __loopvar2++; |
| var obj6 = 1; |
| for (var __loopvar3 = 0; obj4.length < (1.1) && __loopvar3 < 3; obj4.length++ + __loopvar3++) { |
| } |
| var __loopvar3 = 0; |
| do { |
| __loopvar3++; |
| p0 = ui8_1[(1) % 256]; |
| } while (((obj6.length++)) && __loopvar3 < 3) |
| } |
| } |
| |
| // Field load hoisted from within the inner do-while should have BailOutExpectingObject, |
| // which should not clobber implicit call bit set by the load of (undefined) ui8. |
| function test2() { |
| var obj4 = 1; |
| var __loopvar2 = 0; |
| while ((1) && __loopvar2 < 3) { |
| __loopvar2++; |
| var obj6 = {}; |
| for (var __loopvar3 = 0; obj4.length < (1.1) && __loopvar3 < 3; obj4.length++ + __loopvar3++) { |
| } |
| var __loopvar3 = 0; |
| do { |
| __loopvar3++; |
| p0 = ui8_2[(1) % 256]; |
| obj6.spam; |
| } while (((obj6.length++)) && __loopvar3 < 3) |
| } |
| } |
| |
| try { |
| test1(); |
| } |
| catch(e1) { |
| WScript.Echo(e1.message); |
| } |
| |
| try { |
| test2(); |
| } |
| catch(e2) { |
| WScript.Echo(e2.message); |
| } |
| |
| (function(){ |
| var obj1 = new Object(); |
| var obj4 = new Object(); |
| (function(){ |
| var __loopvar2 = 0; |
| do { |
| __loopvar2++; |
| e = ((obj4.prop0 * (obj4.prop1 -= -2147483648)) - (obj1.prop0++ )); |
| } while((1.1) && __loopvar2 < 3) |
| })(); |
| })(); |