14885d5884
When global object has proxies we should first call hasProperty and then call GetProperty according to spec. This cl fixes both LoadGlobal and LoadLookupGlobal to correctly handle these cases. Also fixes tests that didn't expect hasProperty to be called. Change-Id: I3a45df7ae24be74dd46cf04cafbf8c2d7018b3af Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1876059 Commit-Queue: Mythri Alle <mythria@chromium.org> Reviewed-by: Toon Verwaest <verwaest@chromium.org> Cr-Commit-Position: refs/heads/master@{#64580}
43 lines
1.2 KiB
JavaScript
43 lines
1.2 KiB
JavaScript
// Copyright 2017 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.
|
|
|
|
var global = this;
|
|
;(function () {
|
|
var calledDelete = false;
|
|
var calledGet = false;
|
|
var calledHas = false;
|
|
var calledSet = false;
|
|
var target = {getGlobal: 1};
|
|
var assertEquals = global.assertEquals;
|
|
var proxy = new Proxy(target, {
|
|
has(target, property) {
|
|
calledHas = true;
|
|
return Reflect.has(target, property);
|
|
},
|
|
get(target, property, receiver) {
|
|
calledGet = true;
|
|
return Reflect.get(target, property, receiver);
|
|
},
|
|
set(targer, property, value, receiver) {
|
|
calledSet = true;
|
|
return Reflect.set(target, property, value, receiver);
|
|
},
|
|
delete(target, property, receiver) {
|
|
calledDelete = true;
|
|
return Reflect.delete(target, property, receiver);
|
|
}
|
|
});
|
|
Object.setPrototypeOf(global, proxy);
|
|
getGlobal;
|
|
assertTrue(calledGet);
|
|
makeGlobal = 2;
|
|
assertTrue(calledSet);
|
|
"findGlobal" in global;
|
|
assertTrue(calledHas);
|
|
assertEquals("number", typeof(makeGlobal));
|
|
var deletedOwn = delete makeGlobal;
|
|
assertTrue(deletedOwn);
|
|
assertEquals("undefined", typeof(makeGlobal));
|
|
})();
|