test6.js 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. //-------------------------------------------------------------------------------------------------------
  2. // Copyright (C) Microsoft. All rights reserved.
  3. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
  4. //-------------------------------------------------------------------------------------------------------
  5. /*
  6. test setpropertyscoped, setter in the lookup chain
  7. */
  8. var a = function(){};
  9. Object.defineProperty(a, "foo", {set: function() {WScript.Echo('in set');}, get: function() {return 5;}});
  10. a.foo = 5;
  11. a.foo = 5;
  12. with (a)
  13. {
  14. eval("foo = 10");
  15. eval("foo = 10");
  16. }
  17. // Make sure we can delete the getter *inside* the getter and avoid calling it
  18. var obj = {};
  19. Object.defineProperty(obj, "test", { get: function() { delete obj.test; obj.test = 1; return 0; }, configurable: true });
  20. WScript.Echo(obj.test + ''); // 0
  21. WScript.Echo(obj.test + '');
  22. // Getter reentry, ensure we don't assert (WIN8: 388926)
  23. (function(){
  24. var g = 0;
  25. var o = {};
  26. Object.defineProperty(o, "x", {
  27. get : function() {
  28. if (g == 0) {
  29. g = 1;
  30. return func();
  31. } else {
  32. return g;
  33. }
  34. }
  35. });
  36. function func()
  37. {
  38. return o.x;
  39. }
  40. WScript.Echo(func());
  41. WScript.Echo(func());
  42. })();
  43. // Change into data property inside getter, ensure we don't have invalid inline cache
  44. (function(){
  45. var g = 0;
  46. var o = {};
  47. Object.defineProperty(o, "x", {
  48. get : function() {
  49. if (g == 0) {
  50. g = 1;
  51. Object.defineProperty(o, "x", {value: 5, writable: true});
  52. return func();
  53. } else {
  54. return g;
  55. }
  56. },
  57. configurable:true
  58. });
  59. function func()
  60. {
  61. return o.x;
  62. }
  63. WScript.Echo(func());
  64. WScript.Echo(func());
  65. })();