dcd61b9020
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}
29 lines
586 B
JavaScript
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);
|