| Index: lib/hooks.js |
| =================================================================== |
| --- a/lib/hooks.js |
| +++ b/lib/hooks.js |
| @@ -5,8 +5,7 @@ |
| function hook(obj, name, func, cleanup) |
| { |
| let orig = obj[name]; |
| - let origGet = obj.__lookupGetter__(name); |
| - let origSet = obj.__lookupSetter__(name); |
| + let origDesc = Object.getOwnPropertyDescriptor(obj, name); |
| let dumbOverrideAttempt = false; |
| let newFunc = function() |
| @@ -42,39 +41,33 @@ |
| { |
| dumbOverrideAttempt = true; |
| return orig.toSource(); |
| - } |
| + }; |
| - obj.__defineGetter__(name, function() |
| - { |
| - dumbOverrideAttempt = false; |
| - return newFunc; |
| - }); |
| - |
| - obj.__defineSetter__(name, function(value) |
| - { |
| - if (dumbOverrideAttempt) |
| + Object.defineProperty(obj, name, { |
| + get: function() |
| { |
| - orig = value; |
| - } |
| - else |
| + dumbOverrideAttempt = false; |
| + return newFunc; |
| + }, |
| + set: function(value) |
| { |
| - delete obj[name]; |
| - obj[name] = value; |
| - } |
| + if (dumbOverrideAttempt) |
| + { |
| + orig = value; |
| + } |
| + else |
| + { |
| + delete obj[name]; |
| + obj[name] = value; |
| + } |
| + }, |
| + enumerable: true, |
| + configurable: true |
| }); |
| return function() |
| { |
| - delete obj[name]; |
| - obj[name] = orig; |
| - if (origGet) |
| - { |
| - obj.__defineGetter__(name, origGet); |
| - } |
| - if (origSet) |
| - { |
| - obj.__defineSetter__(name, origSet); |
| - } |
| + Object.defineProperty(obj, name, origDesc); |
| }; |
| } |
| exports.hook = hook; |