diff options
author | Philip Chimento <philip.chimento@gmail.com> | 2022-11-03 21:53:06 -0700 |
---|---|---|
committer | Philip Chimento <philip.chimento@gmail.com> | 2023-01-01 17:14:27 -0700 |
commit | aa49fdc5ff137549a0d8eb2f76dce9e34ddeea5f (patch) | |
tree | 1de4002db1f85deeb52ba0596ed7fcffc37f47fb /modules/script | |
parent | 3a0d2e25e2e8533cb5df191c56378832b11b84e3 (diff) | |
download | gjs-aa49fdc5ff137549a0d8eb2f76dce9e34ddeea5f.tar.gz |
print: Pretty-print formatting for Symbols
This formats Symbols as the source text with which they should be able
to be constructed. It makes a distinction between registered symbols
(created with Symbol.for()), well-known symbols (always existing), and
regular symbols (created with Symbol()).
Diffstat (limited to 'modules/script')
-rw-r--r-- | modules/script/_bootstrap/default.js | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/modules/script/_bootstrap/default.js b/modules/script/_bootstrap/default.js index 161418c0..e24a2dd4 100644 --- a/modules/script/_bootstrap/default.js +++ b/modules/script/_bootstrap/default.js @@ -40,6 +40,8 @@ return value.toString(); case 'string': return JSON.stringify(value); + case 'symbol': + return formatSymbol(value); default: return value.toString(); } @@ -71,6 +73,9 @@ case 'string': formattedObject.push(`${key}: "${value}"`); break; + case 'symbol': + formattedObject.push(`${key}: ${formatSymbol(value)}`); + break; default: formattedObject.push(`${key}: ${value}`); break; @@ -100,6 +105,23 @@ return funcOutput; } + function formatSymbol(sym) { + // Try to format Symbols in the same way that they would be constructed. + + // First check if this is a global registered symbol + const globalKey = Symbol.keyFor(sym); + if (globalKey !== undefined) + return `Symbol.for("${globalKey}")`; + + const descr = sym.description; + // Special-case the 'well-known' (built-in) Symbols + if (descr.startsWith('Symbol.')) + return descr; + + // Otherwise, it's just a regular symbol + return `Symbol("${descr}")`; + } + Object.defineProperties(exports, { ARGV: { configurable: false, |