| 'use strict'; | 
| var uncurryThis = require('../internals/function-uncurry-this'); | 
| var fails = require('../internals/fails'); | 
| var isCallable = require('../internals/is-callable'); | 
| var classof = require('../internals/classof'); | 
| var getBuiltIn = require('../internals/get-built-in'); | 
| var inspectSource = require('../internals/inspect-source'); | 
|   | 
| var noop = function () { /* empty */ }; | 
| var construct = getBuiltIn('Reflect', 'construct'); | 
| var constructorRegExp = /^\s*(?:class|function)\b/; | 
| var exec = uncurryThis(constructorRegExp.exec); | 
| var INCORRECT_TO_STRING = !constructorRegExp.test(noop); | 
|   | 
| var isConstructorModern = function isConstructor(argument) { | 
|   if (!isCallable(argument)) return false; | 
|   try { | 
|     construct(noop, [], argument); | 
|     return true; | 
|   } catch (error) { | 
|     return false; | 
|   } | 
| }; | 
|   | 
| var isConstructorLegacy = function isConstructor(argument) { | 
|   if (!isCallable(argument)) return false; | 
|   switch (classof(argument)) { | 
|     case 'AsyncFunction': | 
|     case 'GeneratorFunction': | 
|     case 'AsyncGeneratorFunction': return false; | 
|   } | 
|   try { | 
|     // we can't check .prototype since constructors produced by .bind haven't it | 
|     // `Function#toString` throws on some built-it function in some legacy engines | 
|     // (for example, `DOMQuad` and similar in FF41-) | 
|     return INCORRECT_TO_STRING || !!exec(constructorRegExp, inspectSource(argument)); | 
|   } catch (error) { | 
|     return true; | 
|   } | 
| }; | 
|   | 
| isConstructorLegacy.sham = true; | 
|   | 
| // `IsConstructor` abstract operation | 
| // https://tc39.es/ecma262/#sec-isconstructor | 
| module.exports = !construct || fails(function () { | 
|   var called; | 
|   return isConstructorModern(isConstructorModern.call) | 
|     || !isConstructorModern(Object) | 
|     || !isConstructorModern(function () { called = true; }) | 
|     || called; | 
| }) ? isConstructorLegacy : isConstructorModern; |