summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
authorPhilip Chimento <philip.chimento@gmail.com>2022-11-03 21:53:06 -0700
committerPhilip Chimento <philip.chimento@gmail.com>2023-01-01 17:14:27 -0700
commitaa49fdc5ff137549a0d8eb2f76dce9e34ddeea5f (patch)
tree1de4002db1f85deeb52ba0596ed7fcffc37f47fb /modules
parent3a0d2e25e2e8533cb5df191c56378832b11b84e3 (diff)
downloadgjs-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')
-rw-r--r--modules/script/_bootstrap/default.js22
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,