You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					43 lines
				
				922 B
			
		
		
			
		
	
	
					43 lines
				
				922 B
			| 
								 
											4 years ago
										 
									 | 
							
								'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;
							 | 
						||
| 
								 | 
							
								};
							 |