use std::num::NonZeroUsize;
#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "serde", serde(transparent))]
#[allow(clippy::unsafe_derive_deserialize)]
pub struct Sym {
value: NonZeroUsize,
}
impl Sym {
pub const EMPTY_STRING: Self = unsafe { Self::new_unchecked(1) };
pub const ARGUMENTS: Self = unsafe { Self::new_unchecked(2) };
pub const AWAIT: Self = unsafe { Self::new_unchecked(3) };
pub const YIELD: Self = unsafe { Self::new_unchecked(4) };
pub const EVAL: Self = unsafe { Self::new_unchecked(5) };
pub const DEFAULT: Self = unsafe { Self::new_unchecked(6) };
pub const NULL: Self = unsafe { Self::new_unchecked(7) };
pub const REGEXP: Self = unsafe { Self::new_unchecked(8) };
pub const GET: Self = unsafe { Self::new_unchecked(9) };
pub const SET: Self = unsafe { Self::new_unchecked(10) };
pub const MAIN: Self = unsafe { Self::new_unchecked(11) };
pub const RAW: Self = unsafe { Self::new_unchecked(12) };
pub const STATIC: Self = unsafe { Self::new_unchecked(13) };
pub const PROTOTYPE: Self = unsafe { Self::new_unchecked(14) };
pub const CONSTRUCTOR: Self = unsafe { Self::new_unchecked(15) };
pub const IMPLEMENTS: Self = unsafe { Self::new_unchecked(16) };
pub const INTERFACE: Self = unsafe { Self::new_unchecked(17) };
pub const LET: Self = unsafe { Self::new_unchecked(18) };
pub const PACKAGE: Self = unsafe { Self::new_unchecked(19) };
pub const PRIVATE: Self = unsafe { Self::new_unchecked(20) };
pub const PROTECTED: Self = unsafe { Self::new_unchecked(21) };
pub const PUBLIC: Self = unsafe { Self::new_unchecked(22) };
pub const ANONYMOUS: Self = unsafe { Self::new_unchecked(23) };
pub const TRUE: Self = unsafe { Self::new_unchecked(24) };
pub const FALSE: Self = unsafe { Self::new_unchecked(25) };
pub const ASYNC: Self = unsafe { Self::new_unchecked(26) };
pub const OF: Self = unsafe { Self::new_unchecked(27) };
#[inline]
pub(super) fn new(value: usize) -> Option<Self> {
NonZeroUsize::new(value).map(|value| Self { value })
}
#[inline]
pub(super) const unsafe fn new_unchecked(value: usize) -> Self {
Self {
value:
unsafe {
NonZeroUsize::new_unchecked(value)
},
}
}
#[inline]
pub(super) const fn get(self) -> usize {
self.value.get()
}
}
pub(super) static COMMON_STRINGS: phf::OrderedSet<&'static str> = {
const COMMON_STRINGS: phf::OrderedSet<&'static str> = phf::phf_ordered_set! {
"",
"arguments",
"await",
"yield",
"eval",
"default",
"null",
"RegExp",
"get",
"set",
"<main>",
"raw",
"static",
"prototype",
"constructor",
"implements",
"interface",
"let",
"package",
"private",
"protected",
"public",
"anonymous",
"true",
"false",
"async",
"of",
};
sa::const_assert!(COMMON_STRINGS.len() < usize::MAX);
COMMON_STRINGS
};