mirror of
https://github.com/fluencelabs/assemblyscript
synced 2025-04-25 23:12:19 +00:00
51 lines
1.7 KiB
TypeScript
51 lines
1.7 KiB
TypeScript
import { Map } from "./map";
|
|
|
|
var stringToId: Map<string, usize>;
|
|
var idToString: Map<usize, string>;
|
|
var nextId: usize = 12; // Symbol.unscopables + 1
|
|
|
|
@unmanaged export class symbol {}
|
|
|
|
type Symbol = symbol;
|
|
|
|
export function Symbol(description: string | null = null): symbol {
|
|
var id = nextId++;
|
|
if (!id) unreachable(); // out of ids
|
|
return changetype<symbol>(id);
|
|
}
|
|
|
|
export namespace Symbol {
|
|
|
|
// well-known symbols
|
|
export const hasInstance = changetype<symbol>(1);
|
|
export const concatSpreadable = changetype<symbol>(2);
|
|
export const isRegExp = changetype<symbol>(3);
|
|
export const iterator = changetype<symbol>(3);
|
|
export const match = changetype<symbol>(4);
|
|
export const replace = changetype<symbol>(5);
|
|
export const search = changetype<symbol>(6);
|
|
export const species = changetype<symbol>(7);
|
|
export const split = changetype<symbol>(8);
|
|
export const toPrimitive = changetype<symbol>(9);
|
|
export const toStringTag = changetype<symbol>(10);
|
|
export const unscopables = changetype<symbol>(11);
|
|
|
|
/* tslint:disable */// not valid TS
|
|
export function for(key: string): symbol {
|
|
if (!stringToId) { stringToId = new Map(); idToString = new Map(); }
|
|
else if (stringToId.has(key)) return changetype<symbol>(stringToId.get(key));
|
|
var id = nextId++;
|
|
if (!id) unreachable(); // out of ids
|
|
stringToId.set(key, id);
|
|
idToString.set(id, key);
|
|
return changetype<symbol>(id);
|
|
}
|
|
/* tslint:enable */
|
|
|
|
export function keyFor(sym: symbol): string | null {
|
|
return idToString !== null && idToString.has(changetype<usize>(sym))
|
|
? idToString.get(changetype<usize>(sym))
|
|
: null;
|
|
}
|
|
}
|