Show More
Commit Description:
submission report
Commit Description:
submission report
References:
File last commit:
Show/Diff file:
Action:
node_modules/es-abstract/2017/SetFunctionName.js
| 44 lines
| 1.4 KiB
| application/javascript
| JavascriptLexer
|
r789 | 'use strict'; | |||
var GetIntrinsic = require('../GetIntrinsic'); | ||||
var has = require('has'); | ||||
var $TypeError = GetIntrinsic('%TypeError%'); | ||||
var getSymbolDescription = require('../helpers/getSymbolDescription'); | ||||
var DefinePropertyOrThrow = require('./DefinePropertyOrThrow'); | ||||
var IsExtensible = require('./IsExtensible'); | ||||
var Type = require('./Type'); | ||||
// https://ecma-international.org/ecma-262/6.0/#sec-setfunctionname | ||||
module.exports = function SetFunctionName(F, name) { | ||||
if (typeof F !== 'function') { | ||||
throw new $TypeError('Assertion failed: `F` must be a function'); | ||||
} | ||||
if (!IsExtensible(F) || has(F, 'name')) { | ||||
throw new $TypeError('Assertion failed: `F` must be extensible, and must not have a `name` own property'); | ||||
} | ||||
var nameType = Type(name); | ||||
if (nameType !== 'Symbol' && nameType !== 'String') { | ||||
throw new $TypeError('Assertion failed: `name` must be a Symbol or a String'); | ||||
} | ||||
if (nameType === 'Symbol') { | ||||
var description = getSymbolDescription(name); | ||||
// eslint-disable-next-line no-param-reassign | ||||
name = typeof description === 'undefined' ? '' : '[' + description + ']'; | ||||
} | ||||
if (arguments.length > 2) { | ||||
var prefix = arguments[2]; | ||||
// eslint-disable-next-line no-param-reassign | ||||
name = prefix + ' ' + name; | ||||
} | ||||
return DefinePropertyOrThrow(F, 'name', { | ||||
'[[Value]]': name, | ||||
'[[Writable]]': false, | ||||
'[[Enumerable]]': false, | ||||
'[[Configurable]]': true | ||||
}); | ||||
}; | ||||