| 'use strict'; |
| |
| var GetIntrinsic = require('get-intrinsic'); |
| |
| var $TypeError = GetIntrinsic('%TypeError%'); |
| |
| var GetV = require('./GetV'); |
| var IsCallable = require('./IsCallable'); |
| var IsPropertyKey = require('./IsPropertyKey'); |
| |
| /** |
| * 7.3.9 - https://ecma-international.org/ecma-262/6.0/#sec-getmethod |
| * 1. Assert: IsPropertyKey(P) is true. |
| * 2. Let func be GetV(O, P). |
| * 3. ReturnIfAbrupt(func). |
| * 4. If func is either undefined or null, return undefined. |
| * 5. If IsCallable(func) is false, throw a TypeError exception. |
| * 6. Return func. |
| */ |
| |
| module.exports = function GetMethod(O, P) { |
| // 7.3.9.1 |
| if (!IsPropertyKey(P)) { |
| throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true'); |
| } |
| |
| // 7.3.9.2 |
| var func = GetV(O, P); |
| |
| // 7.3.9.4 |
| if (func == null) { |
| return void 0; |
| } |
| |
| // 7.3.9.5 |
| if (!IsCallable(func)) { |
| throw new $TypeError(P + 'is not a function'); |
| } |
| |
| // 7.3.9.6 |
| return func; |
| }; |