| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- //-------------------------------------------------------------------------------------------------------
- // Copyright (C) Microsoft. All rights reserved.
- // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
- //-------------------------------------------------------------------------------------------------------
- /*
- test setpropertyscoped, setter in the lookup chain
- */
- var a = function(){};
- Object.defineProperty(a, "foo", {set: function() {WScript.Echo('in set');}, get: function() {return 5;}});
- a.foo = 5;
- a.foo = 5;
- with (a)
- {
- eval("foo = 10");
- eval("foo = 10");
- }
- // Make sure we can delete the getter *inside* the getter and avoid calling it
- var obj = {};
- Object.defineProperty(obj, "test", { get: function() { delete obj.test; obj.test = 1; return 0; }, configurable: true });
- WScript.Echo(obj.test + ''); // 0
- WScript.Echo(obj.test + '');
- // Getter reentry, ensure we don't assert (WIN8: 388926)
- (function(){
- var g = 0;
- var o = {};
- Object.defineProperty(o, "x", {
- get : function() {
- if (g == 0) {
- g = 1;
- return func();
- } else {
- return g;
- }
- }
- });
- function func()
- {
- return o.x;
- }
- WScript.Echo(func());
- WScript.Echo(func());
- })();
- // Change into data property inside getter, ensure we don't have invalid inline cache
- (function(){
- var g = 0;
- var o = {};
- Object.defineProperty(o, "x", {
- get : function() {
- if (g == 0) {
- g = 1;
- Object.defineProperty(o, "x", {value: 5, writable: true});
- return func();
- } else {
- return g;
- }
- },
- configurable:true
- });
- function func()
- {
- return o.x;
- }
- WScript.Echo(func());
- WScript.Echo(func());
- })();
|