| 'use strict'; | 
 |  | 
 | /* ! | 
 |  * Chai - getFuncName utility | 
 |  * Copyright(c) 2012-2016 Jake Luer <jake@alogicalparadox.com> | 
 |  * MIT Licensed | 
 |  */ | 
 |  | 
 | /** | 
 |  * ### .getFuncName(constructorFn) | 
 |  * | 
 |  * Returns the name of a function. | 
 |  * When a non-function instance is passed, returns `null`. | 
 |  * This also includes a polyfill function if `aFunc.name` is not defined. | 
 |  * | 
 |  * @name getFuncName | 
 |  * @param {Function} funct | 
 |  * @namespace Utils | 
 |  * @api public | 
 |  */ | 
 |  | 
 | var toString = Function.prototype.toString; | 
 | var functionNameMatch = /\s*function(?:\s|\s*\/\*[^(?:*\/)]+\*\/\s*)*([^\s\(\/]+)/; | 
 | function getFuncName(aFunc) { | 
 |   if (typeof aFunc !== 'function') { | 
 |     return null; | 
 |   } | 
 |  | 
 |   var name = ''; | 
 |   if (typeof Function.prototype.name === 'undefined' && typeof aFunc.name === 'undefined') { | 
 |     // Here we run a polyfill if Function does not support the `name` property and if aFunc.name is not defined | 
 |     var match = toString.call(aFunc).match(functionNameMatch); | 
 |     if (match) { | 
 |       name = match[1]; | 
 |     } | 
 |   } else { | 
 |     // If we've got a `name` property we just use it | 
 |     name = aFunc.name; | 
 |   } | 
 |  | 
 |   return name; | 
 | } | 
 |  | 
 | module.exports = getFuncName; |