A name table that internalizes all names presented to it and allows for them to be referred to by a lightweight tag. This structure is heavily inspired by the interner used in the Rust compiler.
A name is a lightweight 32 bit tag that refers to a string in a name table. During parsing, encountered strings are inserted into the name table and only the corresponding tag is kept in the token. Names which have their most significant bit set represent case sensitive names, such as for extended identifiers.
A lookup table of names. Internalizes strings either in a case sensitive or case insensitive way. Allows for bidirectional lookup, i.e. by string or by assigned name.
A reference-counted string that acts like a regular str slice, hiding the fact that it is wrapped in Rc<>.
Get this thread's current name table.