diff options
Diffstat (limited to 'src/node_modules/es-abstract/helpers/getSymbolDescription.js')
-rw-r--r-- | src/node_modules/es-abstract/helpers/getSymbolDescription.js | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/src/node_modules/es-abstract/helpers/getSymbolDescription.js b/src/node_modules/es-abstract/helpers/getSymbolDescription.js new file mode 100644 index 0000000..45d80d2 --- /dev/null +++ b/src/node_modules/es-abstract/helpers/getSymbolDescription.js @@ -0,0 +1,41 @@ +'use strict'; + +var GetIntrinsic = require('../GetIntrinsic'); + +var callBound = require('./callBound'); + +var $SyntaxError = GetIntrinsic('%SyntaxError%'); +var getGlobalSymbolDescription = GetIntrinsic('%Symbol.keyFor%', true); +var thisSymbolValue = callBound('%Symbol.prototype.valueOf%', true); +var symToStr = callBound('Symbol.prototype.toString', true); + +var getInferredName = require('./getInferredName'); + +/* eslint-disable consistent-return */ +module.exports = callBound('%Symbol.prototype.description%', true) || function getSymbolDescription(symbol) { + if (!thisSymbolValue) { + throw new $SyntaxError('Symbols are not supported in this environment'); + } + + // will throw if not a symbol primitive or wrapper object + var sym = thisSymbolValue(symbol); + + if (getInferredName) { + var name = getInferredName(sym); + if (name === '') { return; } + return name.slice(1, -1); // name.slice('['.length, -']'.length); + } + + var desc; + if (getGlobalSymbolDescription) { + desc = getGlobalSymbolDescription(sym); + if (typeof desc === 'string') { + return desc; + } + } + + desc = symToStr(sym).slice(7, -1); // str.slice('Symbol('.length, -')'.length); + if (desc) { + return desc; + } +}; |