blob: 59b1cb5a929c53dcf845d7ba142c275f808a91a7 [file] [log] [blame]
//-------------------------------------------------------------------------------------------------------
// 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); }