| 'use strict'; |
| |
| var functionsHaveNames = function functionsHaveNames() { |
| return typeof function f() {}.name === 'string'; |
| }; |
| |
| var gOPD = Object.getOwnPropertyDescriptor; |
| if (gOPD) { |
| try { |
| gOPD([], 'length'); |
| } catch (e) { |
| // IE 8 has a broken gOPD |
| gOPD = null; |
| } |
| } |
| |
| functionsHaveNames.functionsHaveConfigurableNames = function functionsHaveConfigurableNames() { |
| if (!functionsHaveNames() || !gOPD) { |
| return false; |
| } |
| var desc = gOPD(function () {}, 'name'); |
| return !!desc && !!desc.configurable; |
| }; |
| |
| var $bind = Function.prototype.bind; |
| |
| functionsHaveNames.boundFunctionsHaveNames = function boundFunctionsHaveNames() { |
| return functionsHaveNames() && typeof $bind === 'function' && function f() {}.bind().name !== ''; |
| }; |
| |
| module.exports = functionsHaveNames; |