{"ScriptPreparationCode":"function lazy1(prototype, propertyKey, descriptor) {\r\n const originalFunction = descriptor.get;\r\n\r\n descriptor.get = function() {\r\n const val = originalFunction.apply(this, arguments);\r\n Object.defineProperty(this, propertyKey, {\r\n value: val\r\n });\r\n return val;\r\n }\r\n}\r\n\r\nfunction lazy2(prototype, propertyKey, descriptor) {\r\n const originalFunction = descriptor.get;\r\n const cachedKey = \u0060__lazy__${propertyKey}\u0060;\r\n\r\n descriptor.get = function() {\r\n if (!this.hasOwnProperty(cachedKey)) {\r\n this[cachedKey] = originalFunction.apply(this, arguments);\r\n }\r\n\r\n return this[cachedKey];\r\n };\r\n}\r\n\r\nclass A {\r\n\tconstructor(){\r\n \tthis.w = 1;\r\n }\r\n get x() {\r\n return 1;\r\n }\r\n get y() {\r\n return 1;\r\n }\r\n}\r\nlazy1(A.prototype, \u0027x\u0027, Object.getOwnPropertyDescriptor(A.prototype, \u0027x\u0027));\r\nlazy2(A.prototype, \u0027y\u0027, Object.getOwnPropertyDescriptor(A.prototype, \u0027y\u0027));\r\nconst b = new Proxy({},{get(target, key){return 1;}});\r\nconst a = new A();","TestCases":[{"Name":"lazy1","Code":"let tot = 0;\r\nwhile(tot \u003C 100) tot\u002B=a.x;","IsDeferred":false},{"Name":"lazy2","Code":"let tot = 0;\r\nwhile(tot \u003C 100) tot\u002B=a.y;","IsDeferred":false},{"Name":"proxy","Code":"let tot = 0;\r\nwhile(tot \u003C 100) tot\u002B=b.z;","IsDeferred":false},{"Name":"property","Code":"let tot = 0;\r\nwhile(tot \u003C 100) tot\u002B=a.w;","IsDeferred":false}]}