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.
		
		
		
		
		
			
		
			
				
					
					
						
							40 lines
						
					
					
						
							1.1 KiB
						
					
					
				
			
		
		
	
	
							40 lines
						
					
					
						
							1.1 KiB
						
					
					
				'use strict'; | 
						|
 | 
						|
var GetIntrinsic = require('../GetIntrinsic.js'); | 
						|
 | 
						|
var $construct = GetIntrinsic('%Reflect.construct%', true); | 
						|
 | 
						|
var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); | 
						|
try { | 
						|
	DefinePropertyOrThrow({}, '', { '[[Get]]': function () {} }); | 
						|
} catch (e) { | 
						|
	// Accessor properties aren't supported | 
						|
	DefinePropertyOrThrow = null; | 
						|
} | 
						|
 | 
						|
// https://ecma-international.org/ecma-262/6.0/#sec-isconstructor | 
						|
 | 
						|
if (DefinePropertyOrThrow && $construct) { | 
						|
	var isConstructorMarker = {}; | 
						|
	var badArrayLike = {}; | 
						|
	DefinePropertyOrThrow(badArrayLike, 'length', { | 
						|
		'[[Get]]': function () { | 
						|
			throw isConstructorMarker; | 
						|
		}, | 
						|
		'[[Enumerable]]': true | 
						|
	}); | 
						|
 | 
						|
	module.exports = function IsConstructor(argument) { | 
						|
		try { | 
						|
			// `Reflect.construct` invokes `IsConstructor(target)` before `Get(args, 'length')`: | 
						|
			$construct(argument, badArrayLike); | 
						|
		} catch (err) { | 
						|
			return err === isConstructorMarker; | 
						|
		} | 
						|
	}; | 
						|
} else { | 
						|
	module.exports = function IsConstructor(argument) { | 
						|
		// unfortunately there's no way to truly check this without try/catch `new argument` in old environments | 
						|
		return typeof argument === 'function' && !!argument.prototype; | 
						|
	}; | 
						|
}
 | 
						|
 |