| //------------------------------------------------------------------------------------------------------- | |
| // Copyright (C) Microsoft. All rights reserved. | |
| // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. | |
| //------------------------------------------------------------------------------------------------------- | |
| function print(x) { WScript.Echo(x) } | |
| let a = 'global'; | |
| for (let a = 'for'; f = function() { a += ' loop' }; ) { | |
| f(); | |
| print(a); | |
| break; | |
| } | |
| print(a); | |
| for (let a in this) { | |
| let f = function() { a = 'for-in loop'; }; | |
| f(); | |
| print(a); | |
| break; | |
| } | |
| print(a); | |
| try { eval('for (let a = 123 in this) { }'); print('fail'); } catch (e) { print(e); } | |
| try { eval('for (const a = 123 in this) { }'); print('fail'); } catch (e) { print(e); } | |
| try { eval('function foo() { for (let a = 123 in this) { } } foo();'); print('fail'); } catch (e) { print(e); } | |
| try { eval('function foo() { for (const a = 123 in this) { } } foo();'); print('fail'); } catch (e) { print(e); } | |
| try { eval('function foo() { { for (var a = 123 in []) { } let a; } } foo();'); print('fail'); } catch (e) { print(e); } | |
| function test3() { | |
| eval(''); | |
| v2; | |
| let v1; | |
| for (let v2; false;) { | |
| // this var should get a slot before v1 via EnsureScopeSlot | |
| // to ensure that the slot order is the same as the SlotArray | |
| var v2 = 0; | |
| } | |
| } | |
| test3(); | |
| // Should allow (implicit) initialization of const in for-in/for-of | |
| function for_in() { | |
| for (const x in {a:'a',b:'b'}) { | |
| WScript.Echo(x); | |
| } | |
| } | |
| for_in(); | |
| function for_of() { | |
| for (const x of ['a', 'b']) { | |
| WScript.Echo(x); | |
| } | |
| } | |
| for_of(); | |
| // Should not allow const without initializer in standard for loop header | |
| try { eval('for (const x; x < 0;) { WScript.Echo(x); }'); } catch (e) { print(e); } |