2023-08-27 18:21:25 +00:00
|
|
|
define("values/symbol", () => {
|
2023-09-04 11:30:57 +00:00
|
|
|
const symbols: Record<string, symbol> = { };
|
|
|
|
|
2023-08-27 18:21:25 +00:00
|
|
|
var Symbol = env.global.Symbol = function(this: any, val?: string) {
|
|
|
|
if (this !== undefined && this !== null) throw new TypeError("Symbol may not be called with 'new'.");
|
|
|
|
if (typeof val !== 'string' && val !== undefined) throw new TypeError('val must be a string or undefined.');
|
2023-09-04 11:30:57 +00:00
|
|
|
return internals.symbol(val);
|
2023-08-27 18:21:25 +00:00
|
|
|
} as SymbolConstructor;
|
2023-08-05 15:37:18 +00:00
|
|
|
|
2023-09-04 11:30:57 +00:00
|
|
|
env.setProto('symbol', Symbol.prototype);
|
|
|
|
setConstr(Symbol.prototype, Symbol);
|
2023-08-05 15:37:18 +00:00
|
|
|
|
2023-09-04 11:30:57 +00:00
|
|
|
setProps(Symbol, {
|
2023-08-27 18:21:25 +00:00
|
|
|
for(key) {
|
|
|
|
if (typeof key !== 'string' && key !== undefined) throw new TypeError('key must be a string or undefined.');
|
2023-09-04 11:30:57 +00:00
|
|
|
if (key in symbols) return symbols[key];
|
|
|
|
else return symbols[key] = internals.symbol(key);
|
2023-08-27 18:21:25 +00:00
|
|
|
},
|
|
|
|
keyFor(sym) {
|
|
|
|
if (typeof sym !== 'symbol') throw new TypeError('sym must be a symbol.');
|
2023-09-04 11:30:57 +00:00
|
|
|
return internals.symbolToString(sym);
|
2023-08-27 18:21:25 +00:00
|
|
|
},
|
2023-09-04 11:30:57 +00:00
|
|
|
|
|
|
|
typeName: Symbol("Symbol.name") as any,
|
|
|
|
replace: Symbol('Symbol.replace') as any,
|
|
|
|
match: Symbol('Symbol.match') as any,
|
|
|
|
matchAll: Symbol('Symbol.matchAll') as any,
|
|
|
|
split: Symbol('Symbol.split') as any,
|
|
|
|
search: Symbol('Symbol.search') as any,
|
|
|
|
iterator: Symbol('Symbol.iterator') as any,
|
|
|
|
asyncIterator: Symbol('Symbol.asyncIterator') as any,
|
2023-08-27 18:21:25 +00:00
|
|
|
});
|
2023-08-05 15:37:18 +00:00
|
|
|
|
2023-09-09 14:32:46 +00:00
|
|
|
internals.defineField(env.global.Object.prototype, Symbol.typeName, 'Object', false, false, false);
|
|
|
|
internals.defineField(env.global, Symbol.typeName, 'Window', false, false, false);
|
2023-08-27 18:21:25 +00:00
|
|
|
});
|