6ac4de87a8
Per TC39 Nov 2014 decision. This patch also changes behavior for "legacy const": assignments to sloppy const in strict mode is now also a type error. This fixes v8:2243 and also brings us in compliance with other engines re assignment to function names (see updated webkit test), but might have bigger implications. That change can easily be reverted by changing Variable::IsSignallingAssignmentToConst. BUG=v8:3713,v8:2243 LOG=N Review URL: https://codereview.chromium.org/749633002 Cr-Commit-Position: refs/heads/master@{#25516}
79 lines
1.2 KiB
JavaScript
79 lines
1.2 KiB
JavaScript
// Copyright 2014 the V8 project authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
//
|
|
// Flags: --harmony-scoping
|
|
|
|
'use strict';
|
|
|
|
// Top-level code
|
|
let s = 0;
|
|
let f = [undefined, undefined, undefined]
|
|
for (const x of [1,2,3]) {
|
|
s += x;
|
|
f[x-1] = function() { return x; }
|
|
}
|
|
assertEquals(6, s);
|
|
assertEquals(1, f[0]());
|
|
assertEquals(2, f[1]());
|
|
assertEquals(3, f[2]());
|
|
|
|
let x = 1;
|
|
s = 0;
|
|
for (const x of [x, x+1, x+2]) {
|
|
s += x;
|
|
}
|
|
assertEquals(6, s);
|
|
|
|
s = 0;
|
|
var q = 1;
|
|
for (const q of [q, q+1, q+2]) {
|
|
s += q;
|
|
}
|
|
assertEquals(6, s);
|
|
|
|
let z = 1;
|
|
s = 0;
|
|
for (const x = 1; z < 2; z++) {
|
|
s += x + z;
|
|
}
|
|
assertEquals(2, s);
|
|
|
|
|
|
s = "";
|
|
for (const x in [1,2,3]) {
|
|
s += x;
|
|
}
|
|
assertEquals("012", s);
|
|
|
|
assertThrows("'use strict'; for (const x in [1,2,3]) { x++ }", TypeError);
|
|
|
|
// Function scope
|
|
(function() {
|
|
let s = 0;
|
|
for (const x of [1,2,3]) {
|
|
s += x;
|
|
}
|
|
assertEquals(6, s);
|
|
|
|
let x = 1;
|
|
s = 0;
|
|
for (const x of [x, x+1, x+2]) {
|
|
s += x;
|
|
}
|
|
assertEquals(6, s);
|
|
|
|
s = 0;
|
|
var q = 1;
|
|
for (const q of [q, q+1, q+2]) {
|
|
s += q;
|
|
}
|
|
assertEquals(6, s);
|
|
|
|
s = "";
|
|
for (const x in [1,2,3]) {
|
|
s += x;
|
|
}
|
|
assertEquals("012", s);
|
|
}());
|