v8/test/mjsunit/regress/regress-5405.js
littledan dcd61b9020 Filter out synthetic variables from with scopes
This patch ensures that variables like .new_target aren't overwritable
using with scopes. It does this by ensuring that scope analysis does
not consider with scopes (or eval scopes) for such 'synthetic variables',
similarly to how the 'this' variable was already handled.
The patch also adds a DCHECK for the dynamic parallel to this case,
replacing a previous unreachable path for a particular instance.

BUG=v8:5405

Review-Url: https://codereview.chromium.org/2353623002
Cr-Commit-Position: refs/heads/master@{#39567}
2016-09-20 22:14:54 +00:00

29 lines
586 B
JavaScript

// Copyright 2016 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-async-await --allow-natives-syntax
let log = [];
(async function() {
with ({get ['.promise']() { log.push('async') }}) {
return 10;
}
})();
%RunMicrotasks();
(function() {
with ({get ['.new.target']() { log.push('new.target') }}) {
return new.target;
}
})();
(function() {
with ({get ['this']() { log.push('this') }}) {
return this;
}
})();
assertArrayEquals([], log);