'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; 
 |