[][src]Struct syntax_pos::symbol::Symbol

pub struct Symbol(_);

A symbol is an interned or gensymed string. A gensym is a symbol that is never equal to any other symbol.

Conceptually, a gensym can be thought of as a normal symbol with an invisible unique suffix. Gensyms are useful when creating new identifiers that must not match any existing identifiers, e.g. during macro expansion and syntax desugaring. Because gensyms should always be identifiers, all gensym operations are on Ident rather than Symbol. (Indeed, in the future the gensym-ness may be moved from Symbol to hygiene data.)


assert_eq!(Ident::from_str("x"), Ident::from_str("x"))
assert_ne!(Ident::from_str("x").gensym(), Ident::from_str("x"))
assert_ne!(Ident::from_str("x").gensym(), Ident::from_str("x").gensym())

Internally, a symbol is implemented as an index, and all operations (including hashing, equality, and ordering) operate on that index. The use of newtype_index! means that Option<Symbol> only takes up 4 bytes, because newtype_index! reserves the last 256 values for tagging purposes.

Note that Symbol cannot directly be a newtype_index! because it implements fmt::Debug, Encodable, and Decodable in special ways.


impl Symbol[src]

pub fn intern(string: &str) -> Self[src]

Maps a string to its interned representation.

pub fn as_str(self) -> LocalInternedString[src]

pub fn as_interned_str(self) -> InternedString[src]

pub fn as_u32(self) -> u32[src]

impl Symbol[src]

pub fn is_doc_keyword(self) -> bool[src]

Used for sanity checking rustdoc keyword sections.

pub fn is_path_segment_keyword(self) -> bool[src]

A keyword or reserved identifier that can be used as a path segment.

pub fn can_be_raw(self) -> bool[src]

This symbol can be a raw identifier.

Trait Implementations

impl Eq for Symbol[src]

impl Ord for Symbol[src]

fn max(self, other: Self) -> Self1.21.0[src]

Compares and returns the maximum of two values. Read more

fn min(self, other: Self) -> Self1.21.0[src]

Compares and returns the minimum of two values. Read more

fn clamp(self, min: Self, max: Self) -> Self[src]

🔬 This is a nightly-only experimental API. (clamp)

Restrict a value to a certain interval. Read more

impl PartialEq<Symbol> for Symbol[src]

impl Copy for Symbol[src]

impl Clone for Symbol[src]

fn clone_from(&mut self, source: &Self)1.0.0[src]

Performs copy-assignment from source. Read more

impl PartialOrd<Symbol> for Symbol[src]

impl Debug for Symbol[src]

impl Display for Symbol[src]

impl Hash for Symbol[src]

fn hash_slice<H>(data: &[Self], state: &mut H) where
    H: Hasher

Feeds a slice of this type into the given [Hasher]. Read more

impl Encodable for Symbol[src]

impl Decodable for Symbol[src]

Auto Trait Implementations

impl Send for Symbol

impl Sync for Symbol

Blanket Implementations

impl<T> ToOwned for T where
    T: Clone

type Owned = T

The resulting type after obtaining ownership.

impl<T, U> Into<U> for T where
    U: From<T>, 

impl<T> ToString for T where
    T: Display + ?Sized

impl<T> From<T> for T[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.

impl<T> BorrowMut<T> for T where
    T: ?Sized

impl<T> Borrow<T> for T where
    T: ?Sized

impl<T> Any for T where
    T: 'static + ?Sized

impl<T> Encodable for T where
    T: UseSpecializedEncodable + ?Sized

impl<T> Decodable for T where
    T: UseSpecializedDecodable

impl<E> SpecializationError for E[src]

impl<Q, K> Equivalent<K> for Q where
    K: Borrow<Q> + ?Sized,
    Q: Eq + ?Sized

impl<T> Erased for T[src]

impl<T> Send for T where
    T: ?Sized

impl<T> Sync for T where
    T: ?Sized