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.
27 lines
914 B
27 lines
914 B
2 weeks ago
|
'use strict';
|
||
|
var DESCRIPTORS = require('../internals/descriptors');
|
||
|
var FUNCTION_NAME_EXISTS = require('../internals/function-name').EXISTS;
|
||
|
var uncurryThis = require('../internals/function-uncurry-this');
|
||
|
var defineBuiltInAccessor = require('../internals/define-built-in-accessor');
|
||
|
|
||
|
var FunctionPrototype = Function.prototype;
|
||
|
var functionToString = uncurryThis(FunctionPrototype.toString);
|
||
|
var nameRE = /function\b(?:\s|\/\*[\S\s]*?\*\/|\/\/[^\n\r]*[\n\r]+)*([^\s(/]*)/;
|
||
|
var regExpExec = uncurryThis(nameRE.exec);
|
||
|
var NAME = 'name';
|
||
|
|
||
|
// Function instances `.name` property
|
||
|
// https://tc39.es/ecma262/#sec-function-instances-name
|
||
|
if (DESCRIPTORS && !FUNCTION_NAME_EXISTS) {
|
||
|
defineBuiltInAccessor(FunctionPrototype, NAME, {
|
||
|
configurable: true,
|
||
|
get: function () {
|
||
|
try {
|
||
|
return regExpExec(nameRE, functionToString(this))[1];
|
||
|
} catch (error) {
|
||
|
return '';
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
}
|